Search working
This commit is contained in:
		
							parent
							
								
									bd47e9d0ab
								
							
						
					
					
						commit
						0943ffc483
					
				| @ -1,4 +1,5 @@ | |||||||
| import { CompactSelection } from '@glideapps/glide-data-grid'; | import { CompactSelection } from '@glideapps/glide-data-grid'; | ||||||
|  | import { useDebouncedValue } from '@mantine/hooks'; | ||||||
| import React, { useEffect, useRef } from 'react'; | import React, { useEffect, useRef } from 'react'; | ||||||
| 
 | 
 | ||||||
| import { useGridlerStore } from './GridlerStore'; | import { useGridlerStore } from './GridlerStore'; | ||||||
| @ -21,6 +22,7 @@ export const Computer = React.memo(() => { | |||||||
|     ready, |     ready, | ||||||
| 
 | 
 | ||||||
|     scrollToRowKey, |     scrollToRowKey, | ||||||
|  |     searchStr, | ||||||
|     selectedRowKey, |     selectedRowKey, | ||||||
|     setState, |     setState, | ||||||
|     setStateFN, |     setStateFN, | ||||||
| @ -39,6 +41,7 @@ export const Computer = React.memo(() => { | |||||||
|     ready: s.ready, |     ready: s.ready, | ||||||
| 
 | 
 | ||||||
|     scrollToRowKey: s.scrollToRowKey, |     scrollToRowKey: s.scrollToRowKey, | ||||||
|  |     searchStr: s.searchStr, | ||||||
|     selectedRowKey: s.selectedRowKey, |     selectedRowKey: s.selectedRowKey, | ||||||
|     setState: s.setState, |     setState: s.setState, | ||||||
|     setStateFN: s.setStateFN, |     setStateFN: s.setStateFN, | ||||||
| @ -46,6 +49,10 @@ export const Computer = React.memo(() => { | |||||||
|     values: s.values, |     values: s.values, | ||||||
|   })); |   })); | ||||||
| 
 | 
 | ||||||
|  |   const debouncedSearchStr = useDebouncedValue(searchStr, 400, { | ||||||
|  |     leading: true, | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|   useEffect(() => { |   useEffect(() => { | ||||||
|     const searchSelection = async () => { |     const searchSelection = async () => { | ||||||
|       const page_data = getState('_page_data'); |       const page_data = getState('_page_data'); | ||||||
| @ -161,6 +168,21 @@ export const Computer = React.memo(() => { | |||||||
|     ); |     ); | ||||||
|   }, [columns]); |   }, [columns]); | ||||||
| 
 | 
 | ||||||
|  |   useEffect(() => { | ||||||
|  |     if (debouncedSearchStr === undefined || debouncedSearchStr === null) { | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     loadPage(0, 'all').then(() => { | ||||||
|  |       getState('refreshCells')?.(); | ||||||
|  |       getState('_events')?.dispatchEvent?.( | ||||||
|  |         new CustomEvent('onSearched', { | ||||||
|  |           detail: { search: debouncedSearchStr }, | ||||||
|  |         }) | ||||||
|  |       ); | ||||||
|  |     }); | ||||||
|  |   }, [debouncedSearchStr]); | ||||||
|  | 
 | ||||||
|   useEffect(() => { |   useEffect(() => { | ||||||
|     if (!colSort) { |     if (!colSort) { | ||||||
|       return; |       return; | ||||||
|  | |||||||
| @ -76,7 +76,7 @@ function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForG | |||||||
|               ?.forEach((filter: any) => { |               ?.forEach((filter: any) => { | ||||||
|                 ops.push({ |                 ops.push({ | ||||||
|                   name: `${filter.id}`, |                   name: `${filter.id}`, | ||||||
|                   op: filter.operator, |                   op: 'contains', | ||||||
|                   type: 'searchor', |                   type: 'searchor', | ||||||
|                   value: searchStr, |                   value: searchStr, | ||||||
|                 }); |                 }); | ||||||
|  | |||||||
| @ -17,6 +17,7 @@ export const GridlerGoAPIExampleEventlog = () => { | |||||||
|   const [apiKey, setApiKey] = useLocalStorage({ defaultValue: '', key: 'apikey' }); |   const [apiKey, setApiKey] = useLocalStorage({ defaultValue: '', key: 'apikey' }); | ||||||
|   const [selectRow, setSelectRow] = useState<string | undefined>(''); |   const [selectRow, setSelectRow] = useState<string | undefined>(''); | ||||||
|   const [values, setValues] = useState<Array<Record<string, any>>>([]); |   const [values, setValues] = useState<Array<Record<string, any>>>([]); | ||||||
|  |   const [search, setSearch] = useState<string>(''); | ||||||
|   const [sections, setSections] = useState<Record<string, unknown> | undefined>(undefined); |   const [sections, setSections] = useState<Record<string, unknown> | undefined>(undefined); | ||||||
|   const columns: GridlerColumns = [ |   const columns: GridlerColumns = [ | ||||||
|     { |     { | ||||||
| @ -110,6 +111,7 @@ export const GridlerGoAPIExampleEventlog = () => { | |||||||
|         }} |         }} | ||||||
|         ref={ref} |         ref={ref} | ||||||
|         scrollToRowKey={selectRow ? parseInt(selectRow, 10) : undefined} |         scrollToRowKey={selectRow ? parseInt(selectRow, 10) : undefined} | ||||||
|  |         searchStr={search} | ||||||
|         sections={{ ...sections, rightElementDisabled: false }} |         sections={{ ...sections, rightElementDisabled: false }} | ||||||
|         selectFirstRowOnMount={true} |         selectFirstRowOnMount={true} | ||||||
|         selectMode="row" |         selectMode="row" | ||||||
| @ -131,6 +133,13 @@ export const GridlerGoAPIExampleEventlog = () => { | |||||||
|       </Gridler> |       </Gridler> | ||||||
|       <Divider /> |       <Divider /> | ||||||
|       <Group> |       <Group> | ||||||
|  |         <TextInput | ||||||
|  |           leftSection={<>S</>} | ||||||
|  |           onChange={(e) => setSearch(e.target.value)} | ||||||
|  |           placeholder="Search" | ||||||
|  |           value={search} | ||||||
|  |           w="190px" | ||||||
|  |         /> | ||||||
|         <TextInput |         <TextInput | ||||||
|           onChange={(e) => setSelectRow(e.target.value)} |           onChange={(e) => setSelectRow(e.target.value)} | ||||||
|           placeholder="row" |           placeholder="row" | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user