import React from "react"; import { useEventListener } from "../../common/utils.js"; import { DataEditorAll as DataEditor } from "../../data-editor-all.js"; import { BeautifulWrapper, Description, PropName, defaultProps, useAllMockedKinds, } from "../../data-editor/stories/utils.js"; import type { GridSelection, Item } from "../../internal/data-grid/data-grid-types.js"; import { CompactSelection } from "../../internal/data-grid/data-grid-types.js"; import { SimpleThemeWrapper } from "../../stories/story-utils.js"; export default { title: "Glide-Data-Grid/DataEditor Demos", decorators: [ (Story: React.ComponentType) => ( Search results can be controlled via searchResults. You can implement any search algorithm you want, even a silly one. }> ), ], }; export const ControlledSearch: React.VFC = () => { const { cols, getCellContent, onColumnResize, setCellValue } = useAllMockedKinds(); const [showSearch, setShowSearch] = React.useState(false); const [selection, setSelection] = React.useState({ rows: CompactSelection.empty(), columns: CompactSelection.empty(), }); useEventListener( "keydown", React.useCallback(event => { if ((event.ctrlKey || event.metaKey) && event.code === "KeyF") { setShowSearch(cv => !cv); event.stopPropagation(); event.preventDefault(); } }, []), window, false, true ); const [searchValue, setSearchValue] = React.useState(""); const searchResults = React.useMemo(() => { const result: Item[] = []; for (let i = 0; i < searchValue.length; i++) { result.push([3, i]); } return result; }, [searchValue.length]); return ( { setShowSearch(false); setSearchValue(""); }} rows={10_000} /> ); };