mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 11:16:01 +00:00
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
import { createGridCache, FreeTableGridDisplay } from '@dbgate/datalib';
|
|
import React from 'react';
|
|
import DataGridCore from '../datagrid/DataGridCore';
|
|
import FreeTableGrider from './FreeTableGrider';
|
|
import MacroPreviewGrider from './MacroPreviewGrider';
|
|
|
|
export default function FreeTableGridCore(props) {
|
|
const { modelState, dispatchModel, config, setConfig, macroPreview, macroValues, onSelectionChanged } = props;
|
|
const [cache, setCache] = React.useState(createGridCache());
|
|
const [selectedCells, setSelectedCells] = React.useState([]);
|
|
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(modelState.value, config, setConfig, cache, setCache), [
|
|
modelState.value,
|
|
config,
|
|
cache,
|
|
]);
|
|
|
|
const handleSelectionChanged = React.useCallback(
|
|
(cells) => {
|
|
if (onSelectionChanged) onSelectionChanged(cells);
|
|
setSelectedCells(cells);
|
|
},
|
|
[setSelectedCells]
|
|
);
|
|
|
|
return (
|
|
<DataGridCore
|
|
{...props}
|
|
grider={grider}
|
|
display={display}
|
|
onSelectionChanged={macroPreview ? handleSelectionChanged : null}
|
|
frameSelection={!!macroPreview}
|
|
/>
|
|
);
|
|
}
|