fix: resolve all 69 ESLint warnings across 40 files

- Remove unused imports (Mail, CalendarIcon, Plus, Circle, cn, Link,
  MessageCircle, User, Tag, FolderUp, useEffect, LogOut, GripVertical,
  Check, X, HoverActionsMode, HoverActionsCorner, asn1js, Convert, etc.)
- Prefix unused variables/params with underscore to satisfy no-unused-vars
- Add missing React hook dependencies (exhaustive-deps)
- Wrap handleNavigateUp in useCallback and selectedGroupMembers in useMemo
- Remove unused eslint-disable directives in jmap/client.ts
- Replace as any with typed casts in filter-store and smime-store tests
- Remove dead code (macOk assignment, unused now variable)
This commit is contained in:
Linus Rath
2026-03-26 18:35:56 +01:00
parent 733e99f094
commit 7a191cf78b
40 changed files with 62 additions and 68 deletions
+14 -13
View File
@@ -1,6 +1,7 @@
import { describe, it, expect, beforeEach } from 'vitest';
import { useFilterStore } from '../filter-store';
import type { FilterRule } from '@/lib/jmap/sieve-types';
import type { IJMAPClient } from '@/lib/jmap/client-interface';
const makeRule = (overrides: Partial<FilterRule> = {}): FilterRule => ({
id: 'rule-1',
@@ -156,7 +157,7 @@ describe('filter-store', () => {
getSieveScripts: async () => [{ id: 's1', name: 'main', blobId: 'b1', isActive: true }],
getSieveScriptContent: async () => 'require ["fileinto"];\nif header :contains "From" "x" { fileinto "Y"; }',
};
await useFilterStore.getState().fetchFilters(mockClient as any);
await useFilterStore.getState().fetchFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().isOpaque).toBe(true);
expect(useFilterStore.getState().rules).toEqual([]);
});
@@ -170,7 +171,7 @@ describe('filter-store', () => {
getSieveScripts: async () => [{ id: 's1', name: 'main', blobId: 'b1', isActive: true }],
getSieveScriptContent: async () => script,
};
await useFilterStore.getState().fetchFilters(mockClient as any);
await useFilterStore.getState().fetchFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().isOpaque).toBe(false);
expect(useFilterStore.getState().rules).toEqual(rules);
});
@@ -181,7 +182,7 @@ describe('filter-store', () => {
getSieveScripts: async () => [],
getSieveScriptContent: async () => '',
};
await useFilterStore.getState().fetchFilters(mockClient as any);
await useFilterStore.getState().fetchFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().rules).toEqual([]);
expect(useFilterStore.getState().activeScriptId).toBeNull();
});
@@ -191,7 +192,7 @@ describe('filter-store', () => {
getSieveCapabilities: () => null,
getSieveScripts: async () => { throw new Error('Network error'); },
};
await useFilterStore.getState().fetchFilters(mockClient as any);
await useFilterStore.getState().fetchFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().error).toBe('Network error');
expect(useFilterStore.getState().isLoading).toBe(false);
});
@@ -209,7 +210,7 @@ describe('filter-store', () => {
rules: [makeRule()],
isOpaque: false,
});
await useFilterStore.getState().saveFilters(mockClient as any);
await useFilterStore.getState().saveFilters(mockClient as unknown as IJMAPClient);
expect(calls).toHaveLength(1);
expect(calls[0].method).toBe('updateSieveScript');
expect(calls[0].args[0]).toBe('existing-id');
@@ -230,7 +231,7 @@ describe('filter-store', () => {
rules: [makeRule()],
isOpaque: false,
});
await useFilterStore.getState().saveFilters(mockClient as any);
await useFilterStore.getState().saveFilters(mockClient as unknown as IJMAPClient);
expect(calls).toHaveLength(1);
expect(calls[0].method).toBe('createSieveScript');
expect(calls[0].args[2]).toBe(true); // activate flag
@@ -248,7 +249,7 @@ describe('filter-store', () => {
isOpaque: true,
rawScript: 'require ["fileinto"];\nif header :contains "From" "x" { fileinto "Y"; }',
});
await useFilterStore.getState().saveFilters(mockClient as any);
await useFilterStore.getState().saveFilters(mockClient as unknown as IJMAPClient);
expect(savedContent).toContain('require ["fileinto"]');
});
@@ -257,7 +258,7 @@ describe('filter-store', () => {
updateSieveScript: async () => { throw new Error('Server error'); },
};
useFilterStore.setState({ activeScriptId: 'existing-id', rules: [makeRule()] });
await expect(useFilterStore.getState().saveFilters(mockClient as any)).rejects.toThrow('Server error');
await expect(useFilterStore.getState().saveFilters(mockClient as unknown as IJMAPClient)).rejects.toThrow('Server error');
expect(useFilterStore.getState().error).toBe('Server error');
expect(useFilterStore.getState().isSaving).toBe(false);
});
@@ -269,7 +270,7 @@ describe('filter-store', () => {
};
const rules = [makeRule({ name: 'My Filter' })];
useFilterStore.setState({ activeScriptId: 'existing-id', rules, isOpaque: false });
await useFilterStore.getState().saveFilters(mockClient as any);
await useFilterStore.getState().saveFilters(mockClient as unknown as IJMAPClient);
expect(savedContent).toContain('@metadata:begin');
expect(savedContent).toContain('My Filter');
expect(savedContent).toContain('fileinto "Archive"');
@@ -280,7 +281,7 @@ describe('filter-store', () => {
updateSieveScript: async () => {},
};
useFilterStore.setState({ activeScriptId: 'existing-id', rules: [makeRule()], isOpaque: false, rawScript: '' });
await useFilterStore.getState().saveFilters(mockClient as any);
await useFilterStore.getState().saveFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().rawScript).toContain('@metadata:begin');
});
});
@@ -311,7 +312,7 @@ describe('filter-store', () => {
return generateScript(inactiveRules);
},
};
await useFilterStore.getState().fetchFilters(mockClient as any);
await useFilterStore.getState().fetchFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().activeScriptId).toBe('s2');
expect(useFilterStore.getState().rules[0].name).toBe('Active');
});
@@ -322,7 +323,7 @@ describe('filter-store', () => {
getSieveCapabilities: () => caps,
getSieveScripts: async () => [],
};
await useFilterStore.getState().fetchFilters(mockClient as any);
await useFilterStore.getState().fetchFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().sieveCapabilities).toEqual(caps);
});
@@ -335,7 +336,7 @@ describe('filter-store', () => {
getSieveScripts: async () => [{ id: 's1', name: 'main', blobId: 'b1', isActive: true }],
getSieveScriptContent: async () => script,
};
await useFilterStore.getState().fetchFilters(mockClient as any);
await useFilterStore.getState().fetchFilters(mockClient as unknown as IJMAPClient);
expect(useFilterStore.getState().rawScript).toBe(script);
});
});