UNPKG

luna-data-grid

Version:

Grid for displaying datasets

40 lines (39 loc) 1.72 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { useEffect, useRef } from 'react'; import DataGrid from './index'; import each from 'licia/each'; import { useEvent, useNonInitialEffect, useOption, usePrevious, } from '../share/hooks'; const LunaDataGrid = (props) => { const dataGridRef = useRef(null); const dataGrid = useRef(); const prevProps = usePrevious(props); useEffect(() => { dataGrid.current = new DataGrid(dataGridRef.current, { columns: props.columns, height: props.height, maxHeight: props.maxHeight, minHeight: props.minHeight, filter: props.filter, selectable: props.selectable, theme: props.theme, }); props.onCreate && props.onCreate(dataGrid.current); dataGrid.current.setData(props.data, props.uniqueId); return () => dataGrid.current?.destroy(); }, []); useNonInitialEffect(() => { if (dataGrid.current) { dataGrid.current.setData(props.data, props.uniqueId); } }, [props.data]); useEvent(dataGrid, 'select', prevProps?.onSelect, props.onSelect); useEvent(dataGrid, 'deselect', prevProps?.onDeselect, props.onDeselect); useEvent(dataGrid, 'click', prevProps?.onClick, props.onClick); useEvent(dataGrid, 'dblclick', prevProps?.onDoubleClick, props.onDoubleClick); useEvent(dataGrid, 'contextmenu', prevProps?.onContextMenu, props.onContextMenu); each(['theme', 'height', 'maxHeight', 'minHeight', 'filter'], (key) => { useOption(dataGrid, key, props[key]); }); return _jsx("div", { className: props.className || '', ref: dataGridRef }); }; export default LunaDataGrid;