docs(changeset): Search String and Better GoAPI functionality

This commit is contained in:
Hein
2025-10-29 16:26:38 +02:00
parent b977308e54
commit 57c72e656f
6 changed files with 83 additions and 19 deletions

View File

@@ -16,23 +16,30 @@ export interface GlidlerLocalDataAdaptorProps<T = unknown> {
cols: GridlerColumns | undefined,
data: Array<T>
) => Array<T>;
onSearch?: (
searchField: string | undefined,
cols: GridlerColumns | undefined,
data: Array<T>
) => Array<T>;
}
//The computer component does not need to be recalculated on every render, so we use React.memo to prevent unnecessary re-renders.
function _GlidlerLocalDataAdaptor<T = unknown>(props: GlidlerLocalDataAdaptorProps<T>) {
const [setState, getState, mounted] = useGridlerStore((s) => [s.setState, s.getState, s.mounted]);
const { colFilters, colSort, columns } = useGridlerStore((s) => ({
const { colFilters, colSort, columns, searchStr } = useGridlerStore((s) => ({
colFilters: s.colFilters,
colOrder: s.colOrder,
colSize: s.colSize,
colSort: s.colSort,
columns: s.columns,
searchStr: s.searchStr,
}));
const refChanged = React.useRef({
colFilters: colFilters,
colSort: colSort,
searchStr: searchStr,
});
const useAPIQuery: (index: number) => Promise<any> = async (index: number) => {
@@ -70,6 +77,16 @@ function _GlidlerLocalDataAdaptor<T = unknown>(props: GlidlerLocalDataAdaptorPro
}
}, [colFilters, props.onColumnFilter]);
useEffect(() => {
if (props.onSearch && searchStr !== refChanged?.current?.searchStr) {
const filteredData = props.onSearch(searchStr, columns, props.data as Array<T>);
setState('total_rows', filteredData.length);
setState('data', filteredData);
refChanged.current.colFilters = colFilters;
getState('refreshCells')?.();
}
}, [searchStr, props.onSearch]);
return <></>;
}
export const GlidlerLocalDataAdaptor = React.memo(_GlidlerLocalDataAdaptor);