Skip to content

Commit f065445

Browse files
committed
feat: filter by handles
Signed-off-by: Adam Setch <[email protected]>
1 parent 2bc5c7f commit f065445

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

src/renderer/components/filters/UserHandleFilter.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
NoEntryFillIcon,
99
} from '@primer/octicons-react';
1010
import { AppContext } from '../../context/App';
11-
import { IconColor } from '../../types';
11+
import { IconColor, type UserHandle } from '../../types';
1212
import {
1313
hasExcludeHandleFilters,
1414
hasIncludeHandleFilters,
@@ -26,6 +26,7 @@ const tokenEvents = ['Enter', 'Tab', ' ', ','];
2626
export const UserHandleFilter: FC = () => {
2727
const { updateFilter, settings } = useContext(AppContext);
2828

29+
// biome-ignore lint/correctness/useExhaustiveDependencies: we only want to run this effect on handle filter changes
2930
useEffect(() => {
3031
if (!hasIncludeHandleFilters(settings)) {
3132
setIncludeHandles([]);
@@ -49,7 +50,7 @@ export const UserHandleFilter: FC = () => {
4950

5051
const removeIncludeHandleToken = (tokenId: string | number) => {
5152
const value = includeHandles.find((v) => v.id === tokenId)?.text || '';
52-
updateFilter('filterIncludeHandles', value, false);
53+
updateFilter('filterIncludeHandles', value as UserHandle, false);
5354

5455
setIncludeHandles(includeHandles.filter((v) => v.id !== tokenId));
5556
};
@@ -70,7 +71,7 @@ export const UserHandleFilter: FC = () => {
7071
...includeHandles,
7172
{ id: includeHandles.length, text: value },
7273
]);
73-
updateFilter('filterIncludeHandles', value, true);
74+
updateFilter('filterIncludeHandles', value as UserHandle, true);
7475

7576
(event.target as HTMLInputElement).value = '';
7677
}
@@ -82,7 +83,7 @@ export const UserHandleFilter: FC = () => {
8283

8384
const removeExcludeHandleToken = (tokenId: string | number) => {
8485
const value = excludeHandles.find((v) => v.id === tokenId)?.text || '';
85-
updateFilter('filterExcludeHandles', value, false);
86+
updateFilter('filterExcludeHandles', value as UserHandle, false);
8687

8788
setExcludeHandles(excludeHandles.filter((v) => v.id !== tokenId));
8889
};
@@ -103,7 +104,7 @@ export const UserHandleFilter: FC = () => {
103104
...excludeHandles,
104105
{ id: excludeHandles.length, text: value },
105106
]);
106-
updateFilter('filterExcludeHandles', value, true);
107+
updateFilter('filterExcludeHandles', value as UserHandle, true);
107108

108109
(event.target as HTMLInputElement).value = '';
109110
}

src/renderer/context/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ export const AppProvider = ({ children }: { children: ReactNode }) => {
245245
? [...settings[name], value]
246246
: settings[name].filter((item) => item !== value);
247247

248-
updateSetting(name, updatedFilters);
248+
updateSetting(name, updatedFilters as FilterValue[]);
249249
},
250250
[updateSetting, settings],
251251
);

src/renderer/types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export type Hostname = Branded<string, 'Hostname'>;
2525

2626
export type Link = Branded<string, 'WebUrl'>;
2727

28+
export type UserHandle = Branded<string, 'UserHandle'>;
29+
2830
export type Status = 'loading' | 'success' | 'error';
2931

3032
export interface Account {
@@ -45,7 +47,7 @@ export type SettingsValue =
4547
| Theme
4648
| FilterValue[];
4749

48-
export type FilterValue = Reason | UserType | string;
50+
export type FilterValue = Reason | UserType | UserHandle;
4951

5052
export type SettingsState = AppearanceSettingsState &
5153
NotificationSettingsState &

0 commit comments

Comments
 (0)