import { createGridCache, FreeTableGridDisplay } from 'dbgate-datalib'; import React from 'react'; import DataGridCore from '../datagrid/DataGridCore'; import useShowModal from '../modals/showModal'; import axios from '../utility/axios'; import keycodes from '../utility/keycodes'; import FreeTableGrider from './FreeTableGrider'; import MacroPreviewGrider from './MacroPreviewGrider'; import uuidv1 from 'uuid/v1'; import ImportExportModal from '../modals/ImportExportModal'; export default function FreeTableGridCore(props) { const { modelState, dispatchModel, config, setConfig, macroPreview, macroValues, onSelectionChanged, setSelectedMacro, } = props; const [cache, setCache] = React.useState(createGridCache()); const [selectedCells, setSelectedCells] = React.useState([]); const showModal = useShowModal(); const grider = React.useMemo( () => macroPreview ? new MacroPreviewGrider(modelState.value, macroPreview, macroValues, selectedCells) : FreeTableGrider.factory(props), [ ...FreeTableGrider.factoryDeps(props), macroPreview, macroPreview ? macroValues : null, macroPreview ? selectedCells : null, ] ); const display = React.useMemo( () => new FreeTableGridDisplay(grider.model || modelState.value, config, setConfig, cache, setCache), [modelState.value, config, cache, grider] ); async function exportGrid() { const jslid = uuidv1(); await axios.post('jsldata/save-free-table', { jslid, data: modelState.value }); const initialValues = {}; initialValues.sourceStorageType = 'jsldata'; initialValues.sourceJslId = jslid; initialValues.sourceList = ['editor-data']; showModal((modalState) => ); } const handleSelectionChanged = React.useCallback( (cells) => { if (onSelectionChanged) onSelectionChanged(cells); setSelectedCells(cells); }, [setSelectedCells] ); const handleKeyDown = React.useCallback((event) => { if (event.keyCode == keycodes.escape) { setSelectedMacro(null); } }, []); return ( ); }