import React from "react"; import { DataEditorAll as DataEditor } from "../../data-editor-all.js"; import { BeautifulWrapper, Description, PropName, useMockDataGenerator, defaultProps, } from "../../data-editor/stories/utils.js"; import type { Item, GridCell } 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) => ( Columns can be rearranged by drag and dropping, as long as you respond to the{" "} onColumnMoved callback. }> ), ], }; export const RearrangeColumns: React.VFC = () => { const { cols, getCellContent } = useMockDataGenerator(60); // This is a dirty hack because the mock generator doesn't really support changing this. In a real data source // you should track indexes properly const [sortableCols, setSortableCols] = React.useState(cols); const onColMoved = React.useCallback((startIndex: number, endIndex: number): void => { setSortableCols(old => { const newCols = [...old]; const [toMove] = newCols.splice(startIndex, 1); newCols.splice(endIndex, 0, toMove); return newCols; }); }, []); const onColProposeMove = React.useCallback((_startIndex: number, endIndex: number): boolean => { return endIndex !== 3; }, []); const getCellContentMangled = React.useCallback( ([col, row]: Item): GridCell => { const remappedCol = cols.findIndex(c => c.title === sortableCols[col].title); return getCellContent([remappedCol, row]); }, [cols, getCellContent, sortableCols] ); return ( ); };