UNPKG

@adaptabletools/adaptable

Version:

Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

101 lines (100 loc) 4.93 kB
import { jsx as _jsx } from "react/jsx-runtime"; import * as React from 'react'; import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable'; import { Flex } from '../../components/Flex'; import { DataChangeHistoryModuleId } from '../../Utilities/Constants/ModuleConstants'; import FormatHelper from '../../Utilities/Helpers/DisplayFormatHelper'; import { useAdaptable } from '../AdaptableContext'; import { ADAPTABLE_BUTTON_SURFACE_DEFAULTS, AdaptableButtonView, } from '../Components/AdaptableButton/AdaptableButtonView'; import { buildChangeHistoryButtons, buildDataChangeHistoryContext, } from './buildActionColumnButton'; import { formatChangeHistoryCellValue, getChangeHistoryRowChangeInfo, mapChangeHistoryRowData, } from './dataChangeHistoryHelpers'; const tableDOMProps = { style: { height: '100%', minWidth: '10rem', }, }; const columnTypes = { default: { align: 'start', defaultFlex: 1, defaultSortable: false, style: { fontSize: 'var(--ab-font-size-3)' }, }, }; const headerOptions = { alwaysReserveSpaceForSortIcon: false, }; export const DataChangeHistoryTable = (props) => { const { changeHistoryLog, onUndoChange, onClearRow } = props; const adaptable = useAdaptable(); const undoChangeEnabled = adaptable.api.entitlementApi.isModuleFullEntitlement(DataChangeHistoryModuleId); const rowData = React.useMemo(() => mapChangeHistoryRowData(changeHistoryLog, adaptable), [changeHistoryLog, adaptable]); const changeHistoryButtons = React.useMemo(() => buildChangeHistoryButtons(adaptable.adaptableOptions?.dataChangeHistoryOptions, adaptable.api, onUndoChange, onClearRow), [adaptable, onUndoChange, onClearRow]); const showActionColumn = undoChangeEnabled && !!changeHistoryButtons?.length; const primaryKeyHeader = adaptable.api.columnApi.getPrimaryKeyColumn()?.friendlyName ?? 'Row ID'; const dateFormat = `${adaptable.api.optionsApi.getUserInterfaceOptions().dateInputOptions.dateFormat} HH:mm:ss`; const columnsMap = React.useMemo(() => { const columns = { primaryKeyValue: { header: `Row (${primaryKeyHeader})`, valueGetter: (params) => getChangeHistoryRowChangeInfo(params.data)?.primaryKeyValue ?? '', }, changedColumnLabel: { field: 'changedColumnLabel', header: 'Column', }, oldValue: { header: 'Previous', valueGetter: (params) => { const info = getChangeHistoryRowChangeInfo(params.data); return formatChangeHistoryCellValue(info?.oldValue, info?.column, info?.rowNode, adaptable.api); }, }, newValue: { header: 'New', valueGetter: (params) => { const info = getChangeHistoryRowChangeInfo(params.data); return formatChangeHistoryCellValue(info?.newValue, info?.column, info?.rowNode, adaptable.api); }, }, changedAt: { header: 'Changed', valueGetter: (params) => { const changedAt = getChangeHistoryRowChangeInfo(params.data)?.changedAt; return changedAt != null ? FormatHelper.DateFormatter(changedAt, { Pattern: dateFormat }) : ''; }, }, changeTriggerLabel: { field: 'changeTriggerLabel', header: 'Source', defaultFlex: 0.75, }, }; if (showActionColumn && changeHistoryButtons) { columns.actions = { header: ' ', defaultWidth: 110, render: (params) => { const rowData = params.data; if (!getChangeHistoryRowChangeInfo(rowData)) { return null; } return (_jsx(Flex, { className: "ab-ActionColumn twa:gap-0.5", children: changeHistoryButtons.map((button, index) => (_jsx(AdaptableButtonView, { button: button, context: buildDataChangeHistoryContext(rowData, adaptable.api, onUndoChange, onClearRow), api: adaptable.api, defaults: ADAPTABLE_BUTTON_SURFACE_DEFAULTS.actionColumn }, index))) })); }, }; } return columns; }, [ changeHistoryButtons, dateFormat, onClearRow, onUndoChange, primaryKeyHeader, showActionColumn, adaptable.api, ]); return (_jsx(DataSource, { data: rowData, primaryKey: "primaryKey", children: _jsx(InfiniteTableGrid, { columnTypes: columnTypes, headerOptions: headerOptions, domProps: tableDOMProps, columns: columnsMap, columnPinning: showActionColumn ? { actions: 'end' } : undefined }) })); };