1- import { type FC , useContext , useEffect , useId , useState } from 'react' ;
1+ import { type FC , useContext , useEffect , useState } from 'react' ;
22
33import {
44 CheckCircleFillIcon ,
@@ -21,8 +21,6 @@ import { Title } from '../primitives/Title';
2121import { RequiresDetailedNotificationWarning } from './RequiresDetailedNotificationsWarning' ;
2222import { TokenSearchInput } from './TokenSearchInput' ;
2323
24- type InputToken = { id : number ; text : string } ;
25-
2624export const SearchFilter : FC = ( ) => {
2725 const { updateFilter, settings } = useContext ( AppContext ) ;
2826
@@ -37,58 +35,52 @@ export const SearchFilter: FC = () => {
3735 }
3836 } , [ settings . filterIncludeSearchTokens , settings . filterExcludeSearchTokens ] ) ;
3937
40- const mapValuesToTokens = ( values : string [ ] ) : InputToken [ ] =>
41- values . map ( ( value , index ) => ( { id : index , text : value } ) ) ;
42-
43- const [ includeSearchTokens , setIncludeSearchTokens ] = useState < InputToken [ ] > (
44- mapValuesToTokens ( settings . filterIncludeSearchTokens ) ,
38+ const [ includeSearchTokens , setIncludeSearchTokens ] = useState < SearchToken [ ] > (
39+ settings . filterIncludeSearchTokens ,
4540 ) ;
4641
4742 const addIncludeSearchToken = ( value : string ) => {
48- if ( ! value || includeSearchTokens . some ( ( v ) => v . text === value ) ) return ;
49- const nextId =
50- includeSearchTokens . reduce ( ( m , t ) => Math . max ( m , t . id ) , - 1 ) + 1 ;
51- setIncludeSearchTokens ( [
52- ...includeSearchTokens ,
53- { id : nextId , text : value } ,
54- ] ) ;
43+ if ( ! value || includeSearchTokens . includes ( value as SearchToken ) ) {
44+ return ;
45+ }
46+
47+ setIncludeSearchTokens ( [ ...includeSearchTokens , value as SearchToken ] ) ;
5548 updateFilter ( 'filterIncludeSearchTokens' , value as SearchToken , true ) ;
5649 } ;
5750
58- const removeIncludeSearchToken = ( tokenId : string | number ) => {
59- const value = includeSearchTokens . find ( ( v ) => v . id === tokenId ) ?. text || '' ;
60- if ( value )
61- updateFilter ( 'filterIncludeSearchTokens' , value as SearchToken , false ) ;
62- setIncludeSearchTokens ( includeSearchTokens . filter ( ( v ) => v . id !== tokenId ) ) ;
51+ const removeIncludeSearchToken = ( token : SearchToken ) => {
52+ if ( ! token ) {
53+ return ;
54+ }
55+
56+ updateFilter ( 'filterIncludeSearchTokens' , token , false ) ;
57+ setIncludeSearchTokens ( includeSearchTokens . filter ( ( t ) => t !== token ) ) ;
6358 } ;
6459
65- const [ excludeSearchTokens , setExcludeSearchTokens ] = useState < InputToken [ ] > (
66- mapValuesToTokens ( settings . filterExcludeSearchTokens ) ,
60+ const [ excludeSearchTokens , setExcludeSearchTokens ] = useState < SearchToken [ ] > (
61+ settings . filterExcludeSearchTokens as SearchToken [ ] ,
6762 ) ;
6863
6964 const addExcludeSearchToken = ( value : string ) => {
70- if ( ! value || excludeSearchTokens . some ( ( v ) => v . text === value ) ) return ;
71- const nextId =
72- excludeSearchTokens . reduce ( ( m , t ) => Math . max ( m , t . id ) , - 1 ) + 1 ;
73- setExcludeSearchTokens ( [
74- ...excludeSearchTokens ,
75- { id : nextId , text : value } ,
76- ] ) ;
65+ if ( ! value || excludeSearchTokens . includes ( value as SearchToken ) ) {
66+ return ;
67+ }
68+
69+ setExcludeSearchTokens ( [ ...excludeSearchTokens , value as SearchToken ] ) ;
7770 updateFilter ( 'filterExcludeSearchTokens' , value as SearchToken , true ) ;
7871 } ;
7972
80- const removeExcludeSearchToken = ( tokenId : string | number ) => {
81- const value = excludeSearchTokens . find ( ( v ) => v . id === tokenId ) ?. text || '' ;
82- if ( value )
83- updateFilter ( 'filterExcludeSearchTokens' , value as SearchToken , false ) ;
84- setExcludeSearchTokens ( excludeSearchTokens . filter ( ( v ) => v . id !== tokenId ) ) ;
85- } ;
73+ const removeExcludeSearchToken = ( token : SearchToken ) => {
74+ if ( ! token ) {
75+ return ;
76+ }
8677
87- // Basic suggestions for prefixes
88- const fieldsetId = useId ( ) ;
78+ updateFilter ( 'filterExcludeSearchTokens' , token , false ) ;
79+ setExcludeSearchTokens ( excludeSearchTokens . filter ( ( t ) => t !== token ) ) ;
80+ } ;
8981
9082 return (
91- < fieldset id = { fieldsetId } >
83+ < fieldset >
9284 < Title
9385 icon = { SearchIcon }
9486 tooltip = {
0 commit comments