d2coreui 23.0.23 → 23.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { CopyOutlined, FileOutlined, FilePdfOutlined, FileTextOutlined } from "@ant-design/icons";
2
- import { Switch } from "antd";
2
+ import { Switch, Typography } from "antd";
3
3
  import React from "react";
4
4
  import i18n from "d2core/i18n/i18n";
5
5
  import { spawn, Thread, Worker } from "threads";
@@ -98,7 +98,9 @@ export default function getContextMenu(props) {
98
98
  key: "clipboardCopy",
99
99
  icon: React.createElement(CopyOutlined, null),
100
100
  disabled: props.exporting,
101
- label: i18n("Copy to Clipboard"),
101
+ label: React.createElement(React.Fragment, null,
102
+ i18n("Copy to Clipboard"),
103
+ React.createElement(Typography.Text, { code: true, style: { float: "right" } }, "CTRL+C")),
102
104
  }
103
105
  ];
104
106
  if (renderer) {
@@ -1 +1 @@
1
- {"version":3,"file":"contextMenu.js","sourceRoot":"","sources":["../../../../../components/grid/export/contextMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import {CopyOutlined, FileOutlined, FilePdfOutlined, FileTextOutlined} from \"@ant-design/icons\";\r\nimport {MenuProps, Switch} from \"antd\";\r\nimport React from \"react\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {spawn, Thread, Worker} from \"threads\"\r\nimport dayjs from \"dayjs\";\r\nimport ProgressPopup from \"./progressPopup\";\r\nimport {MenuElement} from \"../dataGrid\";\r\nimport {ClipboardUtils} from \"d2coreui/components/clipboard/clipboardUtils\";\r\n// @ts-ignore\r\nimport txtExportUrl from 'threads-plugin/dist/loader?name=txtExport!d2coreui/components/grid/export/worker/txtExport.ts'\r\n// @ts-ignore\r\nimport csvExportUrl from \"threads-plugin/dist/loader?name=csvExport!d2coreui/components/grid/export/worker/csvExport.ts\"\r\n// @ts-ignore\r\nimport clipboardExportUrl from \"threads-plugin/dist/loader?name=clipboardExport!d2coreui/components/grid/export/worker/clipboardExport.ts\"\r\n// @ts-ignore\r\nimport pdfExportUrl from \"threads-plugin/dist/loader?name=pdfExport!d2coreui/components/grid/export/worker/pdfExport.ts\"\r\nimport PlatformSpecific from \"d2coreui/components/platformSpecific\";\r\n\r\n\r\nexport interface ContextMenuProps {\r\n onlySelectedNodes?: boolean\r\n showMilliseconds: boolean\r\n showYear: boolean\r\n hideNotificationOnClipboardCopy?: boolean\r\n pageOrientation: PageOrientation\r\n exporting: boolean\r\n\r\n getExportContent: (progressPopup: ProgressPopup | null, props: ContextMenuProps) => Promise<string[][]>\r\n onPageOrientationChange:(pageOrientation: PageOrientation)=>void\r\n onExport:(start: boolean)=>void\r\n\r\n // overrides context menu rendering\r\n renderer?(menuElements: MenuElement[]): MenuElement[]\r\n\r\n // handler for custom context menu items click\r\n onClick?(key: string): void\r\n}\r\n\r\nexport type PageOrientation = \"PORTRAIT\" | \"LANDSCAPE\";\r\n\r\nexport default function getContextMenu(props: ContextMenuProps): MenuProps {\r\n const {hideNotificationOnClipboardCopy, getExportContent, renderer, onClick} = props;\r\n\r\n const onExportMenuClick = async (menuKey: string) => {\r\n props.onExport(true);\r\n switch (menuKey) {\r\n case \"txtExport\": {\r\n const progressPopup = new ProgressPopup(i18n(\"Export List to\") + \" TXT\");\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const txtExport = await spawn(new Worker(txtExportUrl));\r\n const textContent = await txtExport(tableContent);\r\n await Thread.terminate(txtExport);\r\n await progressPopup.update(100);\r\n PlatformSpecific.INSTANCE.saveContent(`export_${dayjs().format(\"YYYYMMDD_HHmm\")}.txt`, textContent, true);\r\n break;\r\n }\r\n case \"csvExport\": {\r\n const progressPopup = new ProgressPopup(i18n(\"Export List to\") + \" CSV\");\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const csvExport = await spawn(new Worker(csvExportUrl));\r\n const csvContent = await csvExport(tableContent);\r\n await Thread.terminate(csvExport);\r\n await progressPopup.update(100);\r\n PlatformSpecific.INSTANCE.saveContent(`export_${dayjs().format(\"YYYYMMDD_HHmm\")}.csv`, `\\ufeff${csvContent}`, true);\r\n break;\r\n }\r\n case \"clipboardCopy\": {\r\n const progressPopup = !hideNotificationOnClipboardCopy ? new ProgressPopup(i18n(\"Export List to\") + \" \" + i18n(\"Clipboard\")) : null;\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const clipboardExport = await spawn(new Worker(clipboardExportUrl));\r\n const clipboardContent = await clipboardExport(tableContent);\r\n const success = ClipboardUtils.copyToClipboard(clipboardContent);\r\n if (success) {\r\n await Thread.terminate(clipboardExport);\r\n await progressPopup?.update(100);\r\n } else {\r\n progressPopup?.error();\r\n }\r\n break;\r\n }\r\n case \"pdfExport\": {\r\n const progressPopup = new ProgressPopup(i18n(\"Export List to\") + \" PDF\");\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const pdfExport = await spawn(new Worker(pdfExportUrl));\r\n pdfExport.handler().subscribe(async (data: string) => {\r\n Thread.terminate(pdfExport);\r\n await progressPopup.update(100);\r\n PlatformSpecific.INSTANCE.saveContent(`export_${dayjs().format(\"YYYYMMDD_HHmm\")}.pdf`, data, false);\r\n });\r\n pdfExport.export(tableContent, {pageOrientation: props.pageOrientation});\r\n }\r\n }\r\n props.onExport(false);\r\n }\r\n\r\n let menuItems: MenuElement[] = [\r\n {\r\n key: \"txtExport\",\r\n icon: <FileOutlined/>,\r\n disabled: props.exporting,\r\n label: i18n(\"Export List to\") + \" TXT\",\r\n },\r\n {\r\n key: \"csvExport\",\r\n icon: <FileTextOutlined/>,\r\n disabled: props.exporting,\r\n label: i18n(\"Export List to\") + \" CSV\",\r\n },\r\n {\r\n key: \"pdfExport\",\r\n icon: <FilePdfOutlined/>,\r\n disabled: props.exporting,\r\n label: <>\r\n {i18n(\"Export List to\") + \" PDF\"}\r\n <Switch\r\n style={{marginLeft: 8}}\r\n checkedChildren={i18n(\"Landscape\") + \" \"}\r\n unCheckedChildren={\"\" + i18n(\"Portrait\")}\r\n checked={props.pageOrientation !== \"PORTRAIT\"}\r\n onChange={(checked, e) => {\r\n e.stopPropagation();\r\n (e as any).nativeEvent.stopImmediatePropagation();\r\n props.onPageOrientationChange(checked ? \"LANDSCAPE\" : \"PORTRAIT\")\r\n }}\r\n />\r\n </>\r\n },\r\n {\r\n key: \"divider1\",\r\n type: \"divider\",\r\n },\r\n {\r\n key: \"clipboardCopy\",\r\n icon: <CopyOutlined/>,\r\n disabled: props.exporting,\r\n label: i18n(\"Copy to Clipboard\"),\r\n }\r\n ];\r\n\r\n if (renderer) {\r\n menuItems = renderer(menuItems);\r\n }\r\n\r\n return {\r\n items: menuItems,\r\n onClick: (item) => {\r\n onExportMenuClick(item.key);\r\n if (onClick) {\r\n onClick(item.key.toString());\r\n }\r\n },\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"contextMenu.js","sourceRoot":"","sources":["../../../../../components/grid/export/contextMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import {CopyOutlined, FileOutlined, FilePdfOutlined, FileTextOutlined} from \"@ant-design/icons\";\r\nimport {MenuProps, Switch, Typography} from \"antd\";\r\nimport React from \"react\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {spawn, Thread, Worker} from \"threads\"\r\nimport dayjs from \"dayjs\";\r\nimport ProgressPopup from \"./progressPopup\";\r\nimport {MenuElement} from \"../dataGrid\";\r\nimport {ClipboardUtils} from \"d2coreui/components/clipboard/clipboardUtils\";\r\n// @ts-ignore\r\nimport txtExportUrl from 'threads-plugin/dist/loader?name=txtExport!d2coreui/components/grid/export/worker/txtExport.ts'\r\n// @ts-ignore\r\nimport csvExportUrl from \"threads-plugin/dist/loader?name=csvExport!d2coreui/components/grid/export/worker/csvExport.ts\"\r\n// @ts-ignore\r\nimport clipboardExportUrl from \"threads-plugin/dist/loader?name=clipboardExport!d2coreui/components/grid/export/worker/clipboardExport.ts\"\r\n// @ts-ignore\r\nimport pdfExportUrl from \"threads-plugin/dist/loader?name=pdfExport!d2coreui/components/grid/export/worker/pdfExport.ts\"\r\nimport PlatformSpecific from \"d2coreui/components/platformSpecific\";\r\n\r\n\r\nexport interface ContextMenuProps {\r\n onlySelectedNodes?: boolean\r\n showMilliseconds: boolean\r\n showYear: boolean\r\n hideNotificationOnClipboardCopy?: boolean\r\n pageOrientation: PageOrientation\r\n exporting: boolean\r\n\r\n getExportContent: (progressPopup: ProgressPopup | null, props: ContextMenuProps) => Promise<string[][]>\r\n onPageOrientationChange:(pageOrientation: PageOrientation)=>void\r\n onExport:(start: boolean)=>void\r\n\r\n // overrides context menu rendering\r\n renderer?(menuElements: MenuElement[]): MenuElement[]\r\n\r\n // handler for custom context menu items click\r\n onClick?(key: string): void\r\n}\r\n\r\nexport type PageOrientation = \"PORTRAIT\" | \"LANDSCAPE\";\r\n\r\nexport default function getContextMenu(props: ContextMenuProps): MenuProps {\r\n const {hideNotificationOnClipboardCopy, getExportContent, renderer, onClick} = props;\r\n\r\n const onExportMenuClick = async (menuKey: string) => {\r\n props.onExport(true);\r\n switch (menuKey) {\r\n case \"txtExport\": {\r\n const progressPopup = new ProgressPopup(i18n(\"Export List to\") + \" TXT\");\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const txtExport = await spawn(new Worker(txtExportUrl));\r\n const textContent = await txtExport(tableContent);\r\n await Thread.terminate(txtExport);\r\n await progressPopup.update(100);\r\n PlatformSpecific.INSTANCE.saveContent(`export_${dayjs().format(\"YYYYMMDD_HHmm\")}.txt`, textContent, true);\r\n break;\r\n }\r\n case \"csvExport\": {\r\n const progressPopup = new ProgressPopup(i18n(\"Export List to\") + \" CSV\");\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const csvExport = await spawn(new Worker(csvExportUrl));\r\n const csvContent = await csvExport(tableContent);\r\n await Thread.terminate(csvExport);\r\n await progressPopup.update(100);\r\n PlatformSpecific.INSTANCE.saveContent(`export_${dayjs().format(\"YYYYMMDD_HHmm\")}.csv`, `\\ufeff${csvContent}`, true);\r\n break;\r\n }\r\n case \"clipboardCopy\": {\r\n const progressPopup = !hideNotificationOnClipboardCopy ? new ProgressPopup(i18n(\"Export List to\") + \" \" + i18n(\"Clipboard\")) : null;\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const clipboardExport = await spawn(new Worker(clipboardExportUrl));\r\n const clipboardContent = await clipboardExport(tableContent);\r\n const success = ClipboardUtils.copyToClipboard(clipboardContent);\r\n if (success) {\r\n await Thread.terminate(clipboardExport);\r\n await progressPopup?.update(100);\r\n } else {\r\n progressPopup?.error();\r\n }\r\n break;\r\n }\r\n case \"pdfExport\": {\r\n const progressPopup = new ProgressPopup(i18n(\"Export List to\") + \" PDF\");\r\n const tableContent = await getExportContent(progressPopup, props);\r\n const pdfExport = await spawn(new Worker(pdfExportUrl));\r\n pdfExport.handler().subscribe(async (data: string) => {\r\n Thread.terminate(pdfExport);\r\n await progressPopup.update(100);\r\n PlatformSpecific.INSTANCE.saveContent(`export_${dayjs().format(\"YYYYMMDD_HHmm\")}.pdf`, data, false);\r\n });\r\n pdfExport.export(tableContent, {pageOrientation: props.pageOrientation});\r\n }\r\n }\r\n props.onExport(false);\r\n }\r\n\r\n let menuItems: MenuElement[] = [\r\n {\r\n key: \"txtExport\",\r\n icon: <FileOutlined/>,\r\n disabled: props.exporting,\r\n label: i18n(\"Export List to\") + \" TXT\",\r\n },\r\n {\r\n key: \"csvExport\",\r\n icon: <FileTextOutlined/>,\r\n disabled: props.exporting,\r\n label: i18n(\"Export List to\") + \" CSV\",\r\n },\r\n {\r\n key: \"pdfExport\",\r\n icon: <FilePdfOutlined/>,\r\n disabled: props.exporting,\r\n label: <>\r\n {i18n(\"Export List to\") + \" PDF\"}\r\n <Switch\r\n style={{marginLeft: 8}}\r\n checkedChildren={i18n(\"Landscape\") + \" \"}\r\n unCheckedChildren={\"\" + i18n(\"Portrait\")}\r\n checked={props.pageOrientation !== \"PORTRAIT\"}\r\n onChange={(checked, e) => {\r\n e.stopPropagation();\r\n (e as any).nativeEvent.stopImmediatePropagation();\r\n props.onPageOrientationChange(checked ? \"LANDSCAPE\" : \"PORTRAIT\")\r\n }}\r\n />\r\n </>\r\n },\r\n {\r\n key: \"divider1\",\r\n type: \"divider\",\r\n },\r\n {\r\n key: \"clipboardCopy\",\r\n icon: <CopyOutlined/>,\r\n disabled: props.exporting,\r\n label: <>\r\n {i18n(\"Copy to Clipboard\")}\r\n <Typography.Text code style={{float: \"right\"}}>CTRL+C</Typography.Text>\r\n </>,\r\n }\r\n ];\r\n\r\n if (renderer) {\r\n menuItems = renderer(menuItems);\r\n }\r\n\r\n return {\r\n items: menuItems,\r\n onClick: (item) => {\r\n onExportMenuClick(item.key);\r\n if (onClick) {\r\n onClick(item.key.toString());\r\n }\r\n },\r\n }\r\n}\r\n"]}
@@ -45,6 +45,7 @@ export interface ExtendedDataGridProps extends Omit<DataGridProps, "paging"> {
45
45
  hidden?: boolean;
46
46
  defaultFilter?: any;
47
47
  renderer?(parameters: FilterPanelRendererParams): ReactElement;
48
+ icon?: React.ReactNode;
48
49
  };
49
50
  detailPanel?: {
50
51
  defaultWidth?: number;
@@ -531,15 +531,14 @@ class ExtendedDataGrid extends React.Component {
531
531
  }
532
532
  }
533
533
  renderToolbarButtons() {
534
- var _a;
534
+ var _a, _b, _c;
535
535
  const renderFilter = this.props.filterPanel && this.props.filterPanel.renderer;
536
536
  const filterPanelVisible = renderFilter && this.isFilterPanelVisible();
537
537
  return (React.createElement(React.Fragment, null,
538
538
  renderFilter && React.createElement(Button, { type: filterPanelVisible ? "primary" : "default", key: "filter-button", title: i18n("Show/Hide filter panel"), onClick: () => {
539
539
  this.showFilterPanel(!filterPanelVisible);
540
- } },
541
- React.createElement(FilterOutlined, null)), (_a = this.props.toolbar) === null || _a === void 0 ? void 0 :
542
- _a.toolbarButtons,
540
+ } }, (_b = (_a = this.props.filterPanel) === null || _a === void 0 ? void 0 : _a.icon) !== null && _b !== void 0 ? _b : React.createElement(FilterOutlined, null)), (_c = this.props.toolbar) === null || _c === void 0 ? void 0 :
541
+ _c.toolbarButtons,
543
542
  this.state.gridConfiguration.followLastRecordEditable &&
544
543
  React.createElement(Button, { key: "track-button", title: i18n("Track last added record to table"), onClick: (e) => {
545
544
  this.enableFollowLastRecord(!this.state.gridConfiguration.followLastRecord);
@@ -1 +1 @@
1
- {"version":3,"file":"extendedDataGrid.js","sourceRoot":"","sources":["../../../../components/grid/extendedDataGrid.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {ReactElement} from \"react\";\r\nimport * as FlexLayout from \"flexlayout-react\";\r\nimport {Actions} from \"flexlayout-react\";\r\nimport {ExclamationOutlined, EyeInvisibleOutlined, EyeOutlined, FilterOutlined} from \"@ant-design/icons\";\r\nimport {Badge, Button, Empty} from \"antd\";\r\nimport DataGrid, {\r\n DataGridFilterProps,\r\n DataGridProps,\r\n DataGridSearchProps,\r\n DataGridViewportChangedEvent,\r\n OnLoadDataCallback,\r\n SortItem\r\n} from \"./dataGrid\";\r\nimport debounce from \"lodash/debounce\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport isEqual from \"lodash/isEqual\"\r\nimport isEqualWith from \"lodash/isEqualWith\"\r\nimport cloneDeep from \"lodash/cloneDeep\";\r\nimport tableDefaultRowStyleRules, {RowStyleRule} from \"d2coreui/components/grid/cell/tableDefaultRowStyleRules\";\r\nimport {\r\n ColDef,\r\n ColumnState,\r\n GridApi,\r\n GridReadyEvent,\r\n RowDataUpdatedEvent,\r\n SelectionChangedEvent,\r\n TextFilter,\r\n TextFilterModel,\r\n ViewportChangedEvent\r\n} from \"ag-grid-community\";\r\nimport {Model} from \"flexlayout-react/declarations/model/Model\";\r\nimport {ColumnUtils} from \"./columnUtils\";\r\nimport {DataChangeStateEnum} from \"d2core/types/dataChangeStateEnum\";\r\n\r\nconst CONFIGURATION_VERSION = 1;\r\n\r\nexport interface GridConfiguration {\r\n // version of configuration\r\n version?: number\r\n // current layout model of panels (filter, table, detail)\r\n layoutModel?: any\r\n // current state of table columns\r\n columnModel?: ColumnState[]\r\n //current page size of the table\r\n pageSize: number\r\n // default page size, applied when user reverts configuration\r\n defaultPageSize?: number\r\n // table scrolls to lastly added record automatically\r\n followLastRecord?: boolean;\r\n // table sort model applied/required for follow last record functionality\r\n followLastRecordSortModel?: SortItem[]\r\n // flag if follow last record feature could be turned on/off by user\r\n followLastRecordEditable?: boolean\r\n // allow showing floating column filters beneath column names\r\n columnSearchVisible?: boolean\r\n // rules which apply to table rows\r\n rowStyleRules?: RowStyleRule[]\r\n // default rules which apply to table rows\r\n defaultRowStyleRules?: RowStyleRule[]\r\n // show milliseconds in datetime, time columns\r\n showMilliseconds?: boolean\r\n defaultShowMilliseconds?: boolean\r\n // hide year in date columns\r\n hideYear?: boolean\r\n defaultHideYear?: boolean\r\n}\r\n\r\ninterface ExtendedDataGridSearchProps extends DataGridSearchProps {\r\n initialSearchHistory?: string[]\r\n}\r\n\r\ninterface ExtendedDataGridFilterProps extends DataGridFilterProps {\r\n quickFilterEnabled?: boolean\r\n}\r\n\r\nexport interface FilterPanelRendererParams {\r\n defaultFilter?: any,\r\n // flag if filter is different than default filter\r\n filterChanged: boolean\r\n}\r\n\r\nexport interface ExtendedDataGridProps extends Omit<DataGridProps, \"paging\"> {\r\n defaultGridConfiguration: GridConfiguration\r\n\r\n // handler called during changes to data grid configuration\r\n onChangeConfiguration?(gridConfiguration: GridConfiguration): void\r\n\r\n // allow changing configuration\r\n disableConfigurationChange?: boolean\r\n\r\n filter?: ExtendedDataGridFilterProps\r\n search?: ExtendedDataGridSearchProps\r\n\r\n paging?: {\r\n /**\r\n * Page size change handler\r\n * @param currentPageSize - current page size represents number rows available\r\n * @param definedPageSize -\r\n */\r\n onPaginationChanged?: (currentPageSize: number | null, definedPageSize: number) => void;\r\n }\r\n // configuration of filter panel on the left side\r\n filterPanel?: {\r\n // default width of filter panel\r\n defaultWidth?: number\r\n // flag if panel is hidden, by default it is shown\r\n hidden?: boolean\r\n // default filter parameters\r\n defaultFilter?: any\r\n // filter panel render function\r\n renderer?(parameters: FilterPanelRendererParams): ReactElement\r\n }\r\n // configuration of detail panel on the right side\r\n detailPanel?: {\r\n // default width of detail panel on the left side\r\n defaultWidth?: number\r\n // detail panel render function\r\n renderer(): ReactElement\r\n }\r\n // panel placed directly below table, usually contains context buttons\r\n controlPanel?: {\r\n // control panel render function\r\n renderer?(): React.ReactElement | null\r\n }\r\n\r\n // handler notifying data of the table has changed\r\n onDataChanged?(): void\r\n\r\n // time between value updates in ms, 0 means no debounce\r\n updateDataDebounceInterval?: number\r\n}\r\n\r\ninterface ExtendedDataGridState {\r\n // current layout model of panels (filter, table, detail)\r\n layoutModel: Model\r\n // current table configuration\r\n gridConfiguration: GridConfiguration\r\n // currently entered search string\r\n searchString: string\r\n // history of entered search strings\r\n searchHistory: string[]\r\n // default filter parameters\r\n defaultFilter: any\r\n // flag if advanced table configuration is visible\r\n tableConfigVisible: boolean\r\n // flag if filter has changed, so data doesn't correspond to current filter (color of search button changes to yellow)\r\n filterChanged: boolean\r\n // flag renders badge with exclamation after search button to notify user that table data are not actual\r\n tableNeedToBeReloaded: boolean\r\n}\r\n\r\n/**\r\n * Transaction class (more correct than RowDataTransaction)\r\n */\r\ninterface DataGridTransaction<T> {\r\n addIndex?: number;\r\n add: T[];\r\n remove: T[];\r\n update: T[];\r\n}\r\n\r\nexport default class ExtendedDataGrid<T extends {\r\n id: number | string\r\n}> extends React.Component<ExtendedDataGridProps, ExtendedDataGridState> {\r\n public static defaultProps = {\r\n rowStyleRules: tableDefaultRowStyleRules()\r\n };\r\n\r\n dataGrid?: DataGrid;\r\n private gridApi?: GridApi;\r\n // flag if data are loaded\r\n private dataLoaded: boolean;\r\n // transaction object used to update data from class\r\n private dataTransaction: DataGridTransaction<T>;\r\n private flexLayout: any = null;\r\n\r\n private _updateDataDebounced?(): void;\r\n\r\n constructor(props: Readonly<ExtendedDataGridProps>) {\r\n super(props);\r\n let gridConfiguration: GridConfiguration = {\r\n version: CONFIGURATION_VERSION,\r\n pageSize: 0\r\n };\r\n const gridConfigurationOk = props.defaultGridConfiguration && (!props.defaultGridConfiguration.version || props.defaultGridConfiguration.version === CONFIGURATION_VERSION);\r\n const layoutModelExists = gridConfigurationOk && !!props.defaultGridConfiguration.layoutModel;\r\n gridConfiguration.layoutModel = layoutModelExists ? props.defaultGridConfiguration.layoutModel : this._getInitialLayoutModel(props);\r\n gridConfiguration.columnModel = gridConfigurationOk && props.defaultGridConfiguration.columnModel ? props.defaultGridConfiguration.columnModel : undefined;\r\n gridConfiguration.pageSize = gridConfigurationOk && props.defaultGridConfiguration.pageSize ? props.defaultGridConfiguration.pageSize : 0;\r\n gridConfiguration.defaultPageSize = gridConfigurationOk && props.defaultGridConfiguration.defaultPageSize ? props.defaultGridConfiguration.defaultPageSize : undefined;\r\n gridConfiguration.followLastRecord = gridConfigurationOk && props.defaultGridConfiguration.followLastRecord;\r\n gridConfiguration.followLastRecordSortModel = gridConfigurationOk && props.defaultGridConfiguration.followLastRecordSortModel ? props.defaultGridConfiguration.followLastRecordSortModel : undefined;\r\n gridConfiguration.followLastRecordEditable = gridConfigurationOk && props.defaultGridConfiguration.followLastRecordEditable;\r\n gridConfiguration.columnSearchVisible = gridConfigurationOk && props.defaultGridConfiguration.columnSearchVisible;\r\n gridConfiguration.rowStyleRules = gridConfigurationOk && props.defaultGridConfiguration.rowStyleRules ? props.defaultGridConfiguration.rowStyleRules : tableDefaultRowStyleRules();\r\n gridConfiguration.defaultRowStyleRules = gridConfigurationOk && props.defaultGridConfiguration.defaultRowStyleRules ? props.defaultGridConfiguration.defaultRowStyleRules : tableDefaultRowStyleRules();\r\n gridConfiguration.showMilliseconds = gridConfigurationOk && props.defaultGridConfiguration.showMilliseconds ? props.defaultGridConfiguration.showMilliseconds : false;\r\n gridConfiguration.defaultShowMilliseconds = gridConfigurationOk && props.defaultGridConfiguration.defaultShowMilliseconds ? props.defaultGridConfiguration.defaultShowMilliseconds : false;\r\n gridConfiguration.hideYear = gridConfigurationOk && props.defaultGridConfiguration.hideYear ? props.defaultGridConfiguration.hideYear : false;\r\n gridConfiguration.defaultHideYear = gridConfigurationOk && props.defaultGridConfiguration.defaultHideYear ? props.defaultGridConfiguration.defaultHideYear : false;\r\n\r\n // nasty fix to define ids for tabsets due to react-flexlayout library fix: https://github.com/caplin/FlexLayout/commit/3a21b21f6cd5c2a7b52d46084dce6a3880f9af58#diff-92c133bf427754ff04deeab6751b083b7c97ca955e7cc57c740eef5433fd0129\r\n const layoutLength = gridConfiguration.layoutModel?.layout?.children?.length ?? 0;\r\n if (layoutLength > 0) {\r\n for (let i = 0; i < layoutLength; i++) {\r\n if (!gridConfiguration.layoutModel.layout.children[i].id) {\r\n gridConfiguration.layoutModel.layout.children[i].id = `#${(i + 1) * 2}`\r\n }\r\n }\r\n }\r\n\r\n this.state = {\r\n layoutModel: FlexLayout.Model.fromJson(gridConfiguration.layoutModel),\r\n gridConfiguration: gridConfiguration,\r\n // search context\r\n searchString: \"\",\r\n searchHistory: props.search && props.search.initialSearchHistory ? [...props.search.initialSearchHistory] : [],\r\n // visibility flags\r\n tableConfigVisible: false,\r\n\r\n defaultFilter: this.props.filterPanel && this.props.filterPanel.defaultFilter ? cloneDeep(this.props.filterPanel.defaultFilter) : undefined,\r\n filterChanged: false,\r\n tableNeedToBeReloaded: false\r\n };\r\n\r\n if (!layoutModelExists && props.filterPanel && props.filterPanel.hidden) {\r\n // hide filter panel if it is not explicitly shown\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(\"#2\", {width: 0}));\r\n this.state.gridConfiguration.layoutModel.layout.children[0].width = 0;\r\n }\r\n if (props.detailPanel) {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(props.filterPanel ? \"#6\" : \"#4\", {width: 0}));\r\n }\r\n\r\n this.dataLoaded = false;\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n\r\n const debounceInterval: number = props.updateDataDebounceInterval ?? 500;\r\n if (debounceInterval > 0) {\r\n this._updateDataDebounced = debounce(this._updateData.bind(this), debounceInterval, {maxWait: debounceInterval});\r\n } else {\r\n this._updateDataDebounced = this._updateData.bind(this);\r\n }\r\n\r\n this.renderToolbarButtons = this.renderToolbarButtons.bind(this);\r\n this._onLoadData = this._onLoadData.bind(this);\r\n this._onGridReady = this._onGridReady.bind(this);\r\n this._onPaginationChanged = this._onPaginationChanged.bind(this);\r\n this._onSearch = this._onSearch.bind(this);\r\n this._onSearchStringChanged = this._onSearchStringChanged.bind(this);\r\n this.renderToolbar = this.renderToolbar.bind(this);\r\n this._followLastRecordDebounced = debounce(this._followLastRecordDebounced.bind(this), 500, {maxWait: 500});\r\n this._onRowDataUpdated = this._onRowDataUpdated.bind(this);\r\n this._onChangeRowStyleRules = this._onChangeRowStyleRules.bind(this);\r\n this.showFilterPanel = this.showFilterPanel.bind(this);\r\n this.showDetailPanel = this.showDetailPanel.bind(this);\r\n this.selectNextPreviousRecord = this.selectNextPreviousRecord.bind(this);\r\n this._onSelectionChanged = this._onSelectionChanged.bind(this);\r\n this._onViewportChanged = this._onViewportChanged.bind(this);\r\n }\r\n\r\n _getInitialLayoutModel(props: ExtendedDataGridProps) {\r\n const renderFilter = props.filterPanel && props.filterPanel.renderer;\r\n const renderDetail = props.detailPanel;\r\n const layoutModel: any = {\r\n global: {\r\n tabSetEnableTabStrip: false,\r\n splitterSize: 4,\r\n },\r\n borders: [],\r\n layout: {\r\n \"type\": \"row\",\r\n \"weight\": 100,\r\n \"children\": [{\r\n \"type\": \"tabset\",\r\n \"weight\": 100,\r\n \"selected\": 0,\r\n \"children\": [\r\n {\r\n \"type\": \"tab\",\r\n \"name\": \"Data\",\r\n \"component\": \"data-panel\",\r\n }\r\n ]\r\n }]\r\n }\r\n };\r\n if (renderFilter) {\r\n layoutModel.layout[\"children\"].unshift({\r\n \"id\": \"#2\",\r\n \"type\": \"tabset\",\r\n \"width\": props.filterPanel && props.filterPanel.defaultWidth ? props.filterPanel.defaultWidth : 228,\r\n \"selected\": 0,\r\n \"children\": [\r\n {\r\n \"type\": \"tab\",\r\n \"name\": \"Filter\",\r\n \"component\": \"filter-panel\",\r\n }\r\n ]\r\n });\r\n }\r\n if (renderDetail) {\r\n layoutModel.layout[\"children\"].push({\r\n \"id\": props.filterPanel ? \"#6\" : \"#4\",\r\n \"type\": \"tabset\",\r\n \"width\": props.detailPanel ? (props.detailPanel.defaultWidth ? props.detailPanel.defaultWidth : 220) : 0,\r\n \"selected\": 0,\r\n \"children\": [\r\n {\r\n \"type\": \"tab\",\r\n \"name\": \"Detail\",\r\n \"component\": \"detail-panel\",\r\n }\r\n ]\r\n },);\r\n }\r\n return layoutModel;\r\n }\r\n\r\n getConfiguration(): GridConfiguration {\r\n return this.state.gridConfiguration;\r\n }\r\n\r\n getSearchContext(): { searchString: string, searchHistory: string[] } {\r\n // reverse searchHistory before storing it\r\n const searchHistory = [...this.state.searchHistory];\r\n searchHistory.reverse();\r\n return {\r\n searchString: this.state.searchString,\r\n searchHistory: searchHistory\r\n };\r\n }\r\n\r\n loadData(callback?: () => void): void {\r\n this.dataGrid?.loadData(callback);\r\n }\r\n\r\n isActive(): boolean {\r\n return !!this.dataGrid && this.dataGrid.isActive();\r\n }\r\n\r\n focus() {\r\n this.dataGrid?.focus();\r\n }\r\n\r\n private _changeConfiguration(configuration: Partial<GridConfiguration>, callback?: () => void): void {\r\n if (this.props.disableConfigurationChange) {\r\n return;\r\n }\r\n const newConfiguration = Object.assign(this.state.gridConfiguration, configuration);\r\n this.setState({gridConfiguration: newConfiguration}, callback);\r\n if (this.props.onChangeConfiguration) {\r\n this.props.onChangeConfiguration(this.state.gridConfiguration);\r\n }\r\n }\r\n\r\n private _onGridReady(event: GridReadyEvent): void {\r\n this.gridApi = event.api;\r\n this._reloadTableConfiguration();\r\n if (this.props.onGridReady) {\r\n this.props.onGridReady(event);\r\n }\r\n }\r\n\r\n private _onLoadData(callback: OnLoadDataCallback): void {\r\n if (this.state.tableNeedToBeReloaded) {\r\n this.setState({tableNeedToBeReloaded: false});\r\n }\r\n this.props.onLoadData((recordsCount) => {\r\n this.dataLoaded = true;\r\n // clear meanwhile dynamically added/removed/updated data records\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n this.followLastRecord();\r\n callback(recordsCount);\r\n })\r\n }\r\n\r\n private _onPaginationChanged(currentPageSize: number | null, definedPageSize: number): void {\r\n if (this.dataLoaded) {\r\n const definedPageSizeChanged = this.state.gridConfiguration.pageSize !== definedPageSize;\r\n if (definedPageSizeChanged) {\r\n this._changeConfiguration({pageSize: definedPageSize});\r\n this._followLastRecordDebounced();\r\n }\r\n if (this.props.paging && this.props.paging.onPaginationChanged) {\r\n this.props.paging.onPaginationChanged(currentPageSize, definedPageSize);\r\n }\r\n }\r\n }\r\n\r\n private _onSearchStringChanged(searchString: string): void {\r\n this.setState({searchString: searchString});\r\n if (this.props.search && this.props.search.onChange) {\r\n this.props.search.onChange(searchString);\r\n }\r\n }\r\n\r\n private _onSearch(): void {\r\n const currentSearchString = this.state.searchString;\r\n let searchHistory: string[] = this.state.searchHistory;\r\n\r\n // remove search string from history\r\n searchHistory = searchHistory.filter((searchString) => searchString !== currentSearchString);\r\n // add new search string to first position in history\r\n searchHistory.unshift(currentSearchString);\r\n searchHistory = searchHistory.slice(0, 10);\r\n this.setState({\r\n searchHistory: searchHistory,\r\n });\r\n if (this.props.search && this.props.search.onSearch) {\r\n this.props.search.onSearch();\r\n }\r\n }\r\n\r\n private _reloadTableConfiguration(): void {\r\n if (this.gridApi) {\r\n if (this.state.gridConfiguration.columnModel) {\r\n ColumnUtils.mergeColumnsState(this.state.gridConfiguration.columnModel, this.props.columnDefs as ColDef[]);\r\n this.gridApi.applyColumnState({state: this.state.gridConfiguration.columnModel, applyOrder: true});\r\n } else {\r\n this.gridApi.resetColumnState();\r\n const columnState = this.gridApi.getColumnState();\r\n this._changeConfiguration({columnModel: columnState});\r\n }\r\n }\r\n }\r\n\r\n clearTransaction() {\r\n this.dataTransaction.add = [];\r\n this.dataTransaction.remove = [];\r\n this.dataTransaction.update = [];\r\n this.dataTransaction.addIndex = undefined;\r\n }\r\n\r\n removeFromTransaction(item: T) {\r\n this.dataTransaction.add = this.dataTransaction.add.filter(value => value.id !== item.id);\r\n this.dataTransaction.remove = this.dataTransaction.remove.filter(value => value.id !== item.id);\r\n this.dataTransaction.update = this.dataTransaction.update.filter(value => value.id !== item.id);\r\n }\r\n\r\n addRecord(data: T, addIndex?: number): void {\r\n const markedToRemove = this.dataTransaction.remove.find((value => value.id === data.id));\r\n if (markedToRemove) {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.update.push(data);\r\n } else {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.add.push(data);\r\n if (addIndex !== undefined) {\r\n this.dataTransaction.addIndex = addIndex;\r\n }\r\n }\r\n if (this._updateDataDebounced) {\r\n this._updateDataDebounced();\r\n }\r\n }\r\n\r\n addRecords(dataArray: T[], addIndex?: number): void {\r\n (addIndex ? dataArray.reverse() : dataArray).forEach(data => this.addRecord(data, addIndex));\r\n }\r\n\r\n /** Set new data to the grid */\r\n setRowData(dataArray: T[]): void {\r\n // reset transaction data received till this new data list is loaded,\r\n // we can do it here, because communication is serialized in one thread\r\n // and all push changes to new list data will come only after this method is finished\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n this.dataGrid?.setRowData(dataArray);\r\n }\r\n\r\n removeRecord(data: T): void {\r\n const markedToAdd = this.dataTransaction.add.find((value => value.id === data.id));\r\n if (markedToAdd) {\r\n this.removeFromTransaction(data);\r\n } else {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.remove.push(data);\r\n }\r\n if (this._updateDataDebounced) {\r\n this._updateDataDebounced();\r\n }\r\n }\r\n\r\n removeRecords(dataList: T[]): void {\r\n dataList.forEach((data) => {\r\n this.removeRecord(data);\r\n })\r\n }\r\n\r\n updateRecord(data: (T & { dataChangeState?: DataChangeStateEnum })) {\r\n switch (data.dataChangeState) {\r\n case DataChangeStateEnum.CONFIGURED:\r\n this.addRecord(data);\r\n break;\r\n case DataChangeStateEnum.REMOVED:\r\n this.removeRecord(data);\r\n break;\r\n default:\r\n const markedToAdd = this.dataTransaction.add.find((value => value.id === data.id));\r\n if (markedToAdd) {\r\n this.addRecord(data);\r\n } else {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.update.push(data);\r\n if (this._updateDataDebounced) {\r\n this._updateDataDebounced();\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n updateRecords(dataList: (T & { dataChangeState?: DataChangeStateEnum })[]) {\r\n dataList.forEach((data) => {\r\n this.updateRecord(data);\r\n });\r\n }\r\n\r\n private _updateData(): void {\r\n // remove duplicates, preserve last version of object\r\n this.dataTransaction.update.forEach(data => {\r\n const rowNode = this.gridApi ? this.gridApi.getRowNode(data.id + \"\") : null;\r\n if (rowNode) {\r\n rowNode.updateData(data);\r\n if (this.props.filter && this.props.filter.quickFilterEnabled) {\r\n rowNode.resetQuickFilterAggregateText();\r\n }\r\n } else {\r\n this.dataTransaction.add.push(data);\r\n }\r\n });\r\n // we have already processed them\r\n this.dataTransaction.update = [];\r\n if (this.dataTransaction.add.length > 0 || this.dataTransaction.remove.length > 0) {\r\n this.dataTransaction.remove.forEach((object) => {\r\n const node = this.gridApi ? this.gridApi.getRowNode(object.id + \"\") : null;\r\n if (node && node.isSelected()) {\r\n node.setSelected(false);\r\n }\r\n });\r\n // upgrade grid\r\n if (this.gridApi) {\r\n this.gridApi.applyTransaction(this.dataTransaction);\r\n }\r\n if (this.props.rowData) {\r\n // automatically updating client side array of records\r\n if (this.dataTransaction.addIndex !== undefined) {\r\n this.props.rowData.splice(this.dataTransaction.addIndex, 0, ...this.dataTransaction.add);\r\n } else {\r\n this.props.rowData.push(...this.dataTransaction.add);\r\n }\r\n this.dataTransaction.remove.forEach((object) => {\r\n const index = this.props.rowData ? this.props.rowData.indexOf(object) : -1;\r\n if (index >= 0 && this.props.rowData) {\r\n this.props.rowData.splice(index, 1);\r\n }\r\n });\r\n }\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n }\r\n if (this.props.onDataChanged) {\r\n this.props.onDataChanged();\r\n }\r\n }\r\n\r\n enableFollowLastRecord(enable: boolean): void {\r\n if (enable) {\r\n if (this.gridApi && this.state.gridConfiguration.followLastRecordSortModel) {\r\n this.dataGrid?.setSortModel(this.state.gridConfiguration.followLastRecordSortModel);\r\n this.gridApi.onSortChanged();\r\n }\r\n this._changeConfiguration({followLastRecord: true});\r\n this._followLastRecordDebounced();\r\n } else {\r\n if (this.state.gridConfiguration.followLastRecord) {\r\n this._changeConfiguration({followLastRecord: false});\r\n }\r\n }\r\n }\r\n\r\n _followLastRecordDebounced(): void {\r\n if (this.state.gridConfiguration.followLastRecord && this.props.rowData && this.props.rowData.length > 0) {\r\n this.followLastRecord();\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls table to last record added to the tail of the table\r\n */\r\n followLastRecord(): void {\r\n if (this.state.gridConfiguration.followLastRecord && this.props.rowData && this.props.rowData.length > 0) {\r\n if (this.gridApi) {\r\n let lastIndex = -1;\r\n this.gridApi.forEachNodeAfterFilterAndSort((_, index) => {\r\n lastIndex = index;\r\n });\r\n if (lastIndex >= 0) {\r\n this.gridApi.ensureIndexVisible(lastIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public setColumnModel(columnModel: ColumnState[]) {\r\n this.dataGrid?.setColumnState(columnModel);\r\n }\r\n\r\n public setSortModel(sortModel: SortItem[]) {\r\n this.dataGrid?.setSortModel(sortModel);\r\n }\r\n\r\n public getSortModel(): SortItem[] {\r\n return this.dataGrid?.getSortModel() ?? [];\r\n }\r\n\r\n _onRowDataUpdated(event: RowDataUpdatedEvent): void {\r\n this._followLastRecordDebounced();\r\n if (this.props.onRowDataUpdated) {\r\n this.props.onRowDataUpdated(event);\r\n }\r\n }\r\n\r\n showFilterPanel(show: boolean): void {\r\n if (show) {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(\"#2\", {width: this.props.filterPanel && this.props.filterPanel.defaultWidth ? this.props.filterPanel.defaultWidth : 250}));\r\n } else {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(\"#2\", {width: 0}));\r\n }\r\n }\r\n\r\n showDetailPanel(show: boolean): void {\r\n if (show) {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(this.props.filterPanel ? \"#6\" : \"#4\", {width: this.props.detailPanel && this.props.detailPanel.defaultWidth ? this.props.detailPanel.defaultWidth : 250}));\r\n } else {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(this.props.filterPanel ? \"#6\" : \"#4\", {width: 0}));\r\n }\r\n }\r\n\r\n selectNextPreviousRecord(previous: boolean): void {\r\n let selectedNodes = this.gridApi?.getSelectedNodes();\r\n if (selectedNodes && selectedNodes.length === 1) {\r\n let selectedNode = selectedNodes[0];\r\n if (this.props.rowData && this.props.rowData.length > 0) {\r\n this.gridApi?.forEachNodeAfterFilterAndSort((node) => {\r\n if ((!previous && node.childIndex === (selectedNode.childIndex + 1)) || (previous && node.childIndex === (selectedNode.childIndex - 1))) {\r\n node.setSelected(true, true);\r\n this.gridApi?.ensureNodeVisible(node);\r\n }\r\n });\r\n } else if (this.props.rowModelType === \"infinite\" && selectedNode.rowIndex !== null) {\r\n const nextRowIndex = !previous ? selectedNode.rowIndex + 1 : (selectedNode.rowIndex !== 0 ? selectedNode.rowIndex - 1 : 0);\r\n const nextNode = this.gridApi?.getDisplayedRowAtIndex(nextRowIndex);\r\n if (nextNode) {\r\n nextNode.setSelected(true, true);\r\n this.gridApi?.ensureNodeVisible(nextNode);\r\n }\r\n }\r\n }\r\n }\r\n\r\n changeRowStyleRules(rowStyleRules: RowStyleRule[]): void {\r\n this.state.gridConfiguration.rowStyleRules = rowStyleRules;\r\n this.setState({gridConfiguration: this.state.gridConfiguration}, () => {\r\n this.gridApi?.redrawRows();\r\n });\r\n }\r\n\r\n _onChangeRowStyleRules(rowStyleRules: RowStyleRule[]): void {\r\n this.changeRowStyleRules(rowStyleRules);\r\n if (this.props.onChangeRowStyleRules) {\r\n this.props.onChangeRowStyleRules(rowStyleRules);\r\n }\r\n }\r\n\r\n onPanelFilterApplied(newFilter: any): void {\r\n const filterChanged = !isEqualWith(newFilter, this.state.defaultFilter, this.equalValues);\r\n if (filterChanged !== this.state.filterChanged) {\r\n this.setState({filterChanged: filterChanged});\r\n }\r\n }\r\n\r\n getUiColumnFilterValue(colId: string): string {\r\n const nameFilterModel: TextFilterModel = this.gridApi?.getColumnFilterModel(colId) as TextFilterModel;\r\n return nameFilterModel && nameFilterModel.filter ? nameFilterModel.filter : \"\";\r\n }\r\n\r\n async removeUiColumnFilterValue(colId: string) {\r\n const filterInstance = await this.gridApi?.getColumnFilterInstance(colId);\r\n const textFilterInstance = filterInstance as TextFilter;\r\n const nameFilterModel: TextFilterModel = textFilterInstance.getModelFromUi() as TextFilterModel;\r\n if (nameFilterModel) {\r\n nameFilterModel.filter = \"\";\r\n // we need to hack this typescript protected declaration\r\n // @ts-ignore\r\n textFilterInstance.resetUiToDefaults(false);\r\n }\r\n }\r\n\r\n /**\r\n * Applies UI column filter values silently without redrawing ag-grid\r\n * @param colId\r\n */\r\n async applyUiColumnFilterValue(colId: string) {\r\n const filterInstance = await this.gridApi?.getColumnFilterInstance(colId);\r\n ((filterInstance) as TextFilter)?.applyModel?.();\r\n }\r\n\r\n private equalValues(value: any, otherValue: any): (boolean | undefined) {\r\n if ((value === undefined || value === null) && (otherValue === undefined || otherValue === null)) {\r\n return true;\r\n }\r\n return undefined;\r\n }\r\n\r\n private _onSelectionChanged(event: SelectionChangedEvent): void {\r\n if (this.state.gridConfiguration.followLastRecord && this.gridApi && this.gridApi.getSelectedRows().length > 0) {\r\n this.enableFollowLastRecord(false);\r\n }\r\n if (this.props.onSelectionChanged) {\r\n this.props.onSelectionChanged(event);\r\n }\r\n }\r\n\r\n private _onViewportChanged(event: ViewportChangedEvent) {\r\n const dataGridEvent = event as DataGridViewportChangedEvent;\r\n if (this.state.gridConfiguration.followLastRecord && dataGridEvent.rowsScrollingDelta < 0) {\r\n this.enableFollowLastRecord(false);\r\n }\r\n if (this.props.onViewportChanged) {\r\n this.props.onViewportChanged(dataGridEvent);\r\n }\r\n }\r\n\r\n private renderToolbarButtons(): ReactElement {\r\n const renderFilter = this.props.filterPanel && this.props.filterPanel.renderer;\r\n const filterPanelVisible = renderFilter && this.isFilterPanelVisible();\r\n return (\r\n <React.Fragment>\r\n {renderFilter && <Button type={filterPanelVisible ? \"primary\" : \"default\"} key=\"filter-button\"\r\n title={i18n(\"Show/Hide filter panel\")}\r\n onClick={() => {\r\n this.showFilterPanel(!filterPanelVisible);\r\n }}>\r\n <FilterOutlined/>\r\n </Button>}\r\n {this.props.toolbar?.toolbarButtons}\r\n {this.state.gridConfiguration.followLastRecordEditable &&\r\n <Button key=\"track-button\"\r\n title={i18n(\"Track last added record to table\")}\r\n onClick={(e) => {\r\n this.enableFollowLastRecord(!this.state.gridConfiguration.followLastRecord);\r\n (e.target as HTMLButtonElement).blur();\r\n }}>\r\n {this.state.gridConfiguration.followLastRecord ? <EyeOutlined/> : <EyeInvisibleOutlined/>}\r\n </Button>}\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n private renderToolbar(originalToolbar: ReactElement): ReactElement {\r\n let toolbarToRender = originalToolbar;\r\n if (this.props.toolbar && this.props.toolbar.renderToolbar) {\r\n const searchBar = this.props.toolbar.renderToolbar(originalToolbar);\r\n if (searchBar) {\r\n toolbarToRender = searchBar;\r\n }\r\n }\r\n\r\n const statsBadge = this.renderSearchBadge();\r\n return (<div style={{whiteSpace: \"nowrap\", flexGrow: 1, display: \"flex\"}}>\r\n {toolbarToRender}\r\n {statsBadge}\r\n </div>);\r\n }\r\n\r\n private renderSearchBadge(): ReactElement | undefined {\r\n if (this.state.tableNeedToBeReloaded) {\r\n return (\r\n <Badge count={\r\n <span className=\"ant-badge-count\"\r\n title={i18n(\"Records has been added or removed, table need to be reloaded in order to see actual records\")}\r\n style={{color: \"#fa541c\", background: \"#fff2e8\", borderColor: \"#ffbb96\"}}>\r\n <ExclamationOutlined style={{color: '#fa541c'}}/>\r\n </span>\r\n } style={{cursor: \"hand\"}} offset={[10, -10]}/>\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n isFilterPanelVisible(): boolean {\r\n return this.state.gridConfiguration.layoutModel ? this.state.gridConfiguration.layoutModel.layout.children[0].width > 0 : true;\r\n }\r\n\r\n renderDataGrid(): ReactElement {\r\n const {\r\n defaultGridConfiguration,\r\n onGridReady, onLoadData, onSortChanged, onColumnsChanged, onSelectionChanged, onViewportChanged,\r\n onTableConfigVisible, toolbar,\r\n paging, filter, search, onChangeConfiguration, onDataChanged, onChangeRowStyleRules,\r\n filterPanel, controlPanel,\r\n ...rest\r\n } = this.props;\r\n\r\n return (\r\n <DataGrid\r\n {...rest}\r\n ref={(dataGrid) => {\r\n this.dataGrid = dataGrid ? dataGrid : undefined;\r\n }}\r\n onLoadData={this._onLoadData}\r\n onGridReady={this._onGridReady}\r\n paging={{\r\n pageSize: this.state.gridConfiguration.pageSize,\r\n defaultPageSize: this.state.gridConfiguration.defaultPageSize,\r\n onPaginationChanged: this._onPaginationChanged,\r\n }}\r\n filter={{\r\n columnSearchVisible: this.state.gridConfiguration.columnSearchVisible,\r\n getFilterModel: filter ? filter.getFilterModel : undefined,\r\n onColumnSearchVisible: (visible) => {\r\n this._changeConfiguration({columnSearchVisible: visible});\r\n if (filter?.onColumnSearchVisible) {\r\n filter.onColumnSearchVisible(visible);\r\n }\r\n },\r\n onFilterModified: filter ? filter.onFilterModified : undefined,\r\n onFilterChanged: filter ? filter.onFilterChanged : undefined,\r\n onFilterConfirmed: filter ? filter.onFilterConfirmed : undefined,\r\n }}\r\n search={{\r\n hidden: !!search ? search.hidden : undefined,\r\n placeholder: !!search ? search.placeholder : undefined,\r\n searchString: !!search && search.searchString !== undefined ? search.searchString : this.state.searchString,\r\n stringFormatter: !!search ? search.stringFormatter : undefined,\r\n searchHistory: !!search && search.searchHistory !== undefined ? search.searchHistory : this.state.searchHistory,\r\n searchButtonClassName: !!search ? search.searchButtonClassName : undefined,\r\n searchButtonDisabled: !!search ? search.searchButtonDisabled : undefined,\r\n searchButtonHidden: !!search ? search.searchButtonHidden : undefined,\r\n searchRenderer: search?.searchRenderer,\r\n onChange: this._onSearchStringChanged,\r\n onSearch: this._onSearch\r\n }}\r\n toolbar={{\r\n renderToolbar: this.renderToolbar,\r\n toolbarButtons: this.renderToolbarButtons(),\r\n hideRecordCount: toolbar?.hideRecordCount,\r\n extraContent: toolbar?.extraContent,\r\n }}\r\n onSortChanged={(event) => {\r\n const sortModel = this.dataGrid?.getSortModel();\r\n if (this.state.gridConfiguration.followLastRecord && this.state.gridConfiguration.followLastRecordSortModel && !isEqual(this.state.gridConfiguration.followLastRecordSortModel, sortModel)) {\r\n this.enableFollowLastRecord(false);\r\n }\r\n const columnState = this.gridApi?.getColumnState();\r\n this._changeConfiguration({columnModel: columnState});\r\n if (onSortChanged) {\r\n onSortChanged(event);\r\n }\r\n }}\r\n onColumnsChanged={(columnModel, event) => {\r\n this._changeConfiguration({columnModel: columnModel});\r\n if (onColumnsChanged) {\r\n onColumnsChanged(columnModel, event);\r\n }\r\n }}\r\n onRowDataUpdated={this._onRowDataUpdated}\r\n tableConfigVisible={this.state.tableConfigVisible}\r\n onTableConfigVisible={(visible) => {\r\n this.setState({tableConfigVisible: visible});\r\n if (onTableConfigVisible) {\r\n onTableConfigVisible(visible);\r\n }\r\n }}\r\n onSelectionChanged={this._onSelectionChanged}\r\n rowStyleRules={this.state.gridConfiguration.rowStyleRules as RowStyleRule[]}\r\n defaultRowStyleRules={this.state.gridConfiguration.defaultRowStyleRules}\r\n onChangeRowStyleRules={this._onChangeRowStyleRules}\r\n onViewportChanged={this._onViewportChanged}\r\n showMilliseconds={this.state.gridConfiguration.showMilliseconds}\r\n defaultShowMilliseconds={this.state.gridConfiguration.defaultShowMilliseconds}\r\n onShowMilliseconds={(showMillis, callback) => {\r\n this._changeConfiguration({showMilliseconds: showMillis}, callback);\r\n }}\r\n hideYear={this.state.gridConfiguration.hideYear}\r\n defaultHideYear={this.state.gridConfiguration.defaultHideYear}\r\n onShowYear={(showYear, callback) => {\r\n this._changeConfiguration({hideYear: !showYear}, callback);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderDataGridWithControlPanel() {\r\n if (this.props.controlPanel && this.props.controlPanel.renderer) {\r\n return (\r\n <div key=\"table-with-control-panel\" style={{\r\n display: \"flex\",\r\n flexFlow: \"column\",\r\n height: \"100%\",\r\n width: \"100%\"\r\n }}>\r\n <div key=\"table-with-control-panel-wrapper\" style={{flex: \"1 1 auto\", overflow: \"auto\"}}>\r\n {this.renderDataGrid()}\r\n </div>\r\n {this.props.controlPanel.renderer()}\r\n </div>);\r\n }\r\n return this.renderDataGrid();\r\n }\r\n\r\n componentDidUpdate() {\r\n // very important nasty fix with flexlayout\r\n // in AlarmWindow or ObjectHistoryWindow there is ExtendedDataGrid(FlexLayout) placed in upper FlexLayout\r\n // resize event handling doesn't work in inner FlexLayout(ExtendedDataGrid)\r\n // I suppose it has something to do wit usage of multiple ResizeObservers, but I am not sure\r\n // therefore here on any change of state/props we will invoke recalculation of flexlayout size\r\n // internal logic of this method updateRect is fast and do resize only when it is needed\r\n this.flexLayout?.updateRect();\r\n }\r\n\r\n render() {\r\n const {filterPanel, detailPanel} = this.props;\r\n if (filterPanel || detailPanel) {\r\n return (\r\n <FlexLayout.Layout\r\n ref={(flexLayout) => {\r\n this.flexLayout = flexLayout;\r\n }}\r\n model={this.state.layoutModel}\r\n onModelChange={(model) => {\r\n this._changeConfiguration({layoutModel: model.toJson()});\r\n }}\r\n onAction={(action) => {\r\n const node1 = action.data.node1;\r\n const node2 = action.data.node2;\r\n let tabset;\r\n // disable moving splitter if filter or detail panel is hidden (width=0)\r\n if (action.type === Actions.ADJUST_SPLIT) {\r\n if (node1 === \"#4\" && node2 === \"#6\") {\r\n tabset = this.state.layoutModel.getNodeById('#6');\r\n } else if (node1 === \"#2\" && node2 === \"#4\") {\r\n tabset = this.state.layoutModel.getNodeById('#2');\r\n }\r\n if (tabset) {\r\n const width = (tabset as any)?._attributes?.width;\r\n if (width === 0) {\r\n return undefined;\r\n }\r\n }\r\n }\r\n return action;\r\n }}\r\n factory={(node) => {\r\n const component = node.getComponent();\r\n if (component === \"filter-panel\") {\r\n return filterPanel && filterPanel.renderer && filterPanel.renderer({\r\n defaultFilter: this.state.defaultFilter,\r\n filterChanged: this.state.filterChanged\r\n });\r\n } else if (component === \"data-panel\") {\r\n return this.renderDataGridWithControlPanel();\r\n } else if (component === \"detail-panel\") {\r\n return detailPanel && detailPanel.renderer();\r\n }\r\n return <Empty/>\r\n }}\r\n />\r\n );\r\n } else {\r\n return this.renderDataGridWithControlPanel();\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"extendedDataGrid.js","sourceRoot":"","sources":["../../../../components/grid/extendedDataGrid.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {ReactElement} from \"react\";\r\nimport * as FlexLayout from \"flexlayout-react\";\r\nimport {Actions} from \"flexlayout-react\";\r\nimport {ExclamationOutlined, EyeInvisibleOutlined, EyeOutlined, FilterOutlined} from \"@ant-design/icons\";\r\nimport {Badge, Button, Empty} from \"antd\";\r\nimport DataGrid, {\r\n DataGridFilterProps,\r\n DataGridProps,\r\n DataGridSearchProps,\r\n DataGridViewportChangedEvent,\r\n OnLoadDataCallback,\r\n SortItem\r\n} from \"./dataGrid\";\r\nimport debounce from \"lodash/debounce\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport isEqual from \"lodash/isEqual\"\r\nimport isEqualWith from \"lodash/isEqualWith\"\r\nimport cloneDeep from \"lodash/cloneDeep\";\r\nimport tableDefaultRowStyleRules, {RowStyleRule} from \"d2coreui/components/grid/cell/tableDefaultRowStyleRules\";\r\nimport {\r\n ColDef,\r\n ColumnState,\r\n GridApi,\r\n GridReadyEvent,\r\n RowDataUpdatedEvent,\r\n SelectionChangedEvent,\r\n TextFilter,\r\n TextFilterModel,\r\n ViewportChangedEvent\r\n} from \"ag-grid-community\";\r\nimport {Model} from \"flexlayout-react/declarations/model/Model\";\r\nimport {ColumnUtils} from \"./columnUtils\";\r\nimport {DataChangeStateEnum} from \"d2core/types/dataChangeStateEnum\";\r\n\r\nconst CONFIGURATION_VERSION = 1;\r\n\r\nexport interface GridConfiguration {\r\n // version of configuration\r\n version?: number\r\n // current layout model of panels (filter, table, detail)\r\n layoutModel?: any\r\n // current state of table columns\r\n columnModel?: ColumnState[]\r\n //current page size of the table\r\n pageSize: number\r\n // default page size, applied when user reverts configuration\r\n defaultPageSize?: number\r\n // table scrolls to lastly added record automatically\r\n followLastRecord?: boolean;\r\n // table sort model applied/required for follow last record functionality\r\n followLastRecordSortModel?: SortItem[]\r\n // flag if follow last record feature could be turned on/off by user\r\n followLastRecordEditable?: boolean\r\n // allow showing floating column filters beneath column names\r\n columnSearchVisible?: boolean\r\n // rules which apply to table rows\r\n rowStyleRules?: RowStyleRule[]\r\n // default rules which apply to table rows\r\n defaultRowStyleRules?: RowStyleRule[]\r\n // show milliseconds in datetime, time columns\r\n showMilliseconds?: boolean\r\n defaultShowMilliseconds?: boolean\r\n // hide year in date columns\r\n hideYear?: boolean\r\n defaultHideYear?: boolean\r\n}\r\n\r\ninterface ExtendedDataGridSearchProps extends DataGridSearchProps {\r\n initialSearchHistory?: string[]\r\n}\r\n\r\ninterface ExtendedDataGridFilterProps extends DataGridFilterProps {\r\n quickFilterEnabled?: boolean\r\n}\r\n\r\nexport interface FilterPanelRendererParams {\r\n defaultFilter?: any,\r\n // flag if filter is different than default filter\r\n filterChanged: boolean\r\n}\r\n\r\nexport interface ExtendedDataGridProps extends Omit<DataGridProps, \"paging\"> {\r\n defaultGridConfiguration: GridConfiguration\r\n\r\n // handler called during changes to data grid configuration\r\n onChangeConfiguration?(gridConfiguration: GridConfiguration): void\r\n\r\n // allow changing configuration\r\n disableConfigurationChange?: boolean\r\n\r\n filter?: ExtendedDataGridFilterProps\r\n search?: ExtendedDataGridSearchProps\r\n\r\n paging?: {\r\n /**\r\n * Page size change handler\r\n * @param currentPageSize - current page size represents number rows available\r\n * @param definedPageSize -\r\n */\r\n onPaginationChanged?: (currentPageSize: number | null, definedPageSize: number) => void;\r\n }\r\n // configuration of filter panel on the left side\r\n filterPanel?: {\r\n // default width of filter panel\r\n defaultWidth?: number\r\n // flag if panel is hidden, by default it is shown\r\n hidden?: boolean\r\n // default filter parameters\r\n defaultFilter?: any\r\n // filter panel render function\r\n renderer?(parameters: FilterPanelRendererParams): ReactElement\r\n // toolbar icon\r\n icon?: React.ReactNode\r\n }\r\n // configuration of detail panel on the right side\r\n detailPanel?: {\r\n // default width of detail panel on the left side\r\n defaultWidth?: number\r\n // detail panel render function\r\n renderer(): ReactElement\r\n }\r\n // panel placed directly below table, usually contains context buttons\r\n controlPanel?: {\r\n // control panel render function\r\n renderer?(): React.ReactElement | null\r\n }\r\n\r\n // handler notifying data of the table has changed\r\n onDataChanged?(): void\r\n\r\n // time between value updates in ms, 0 means no debounce\r\n updateDataDebounceInterval?: number\r\n}\r\n\r\ninterface ExtendedDataGridState {\r\n // current layout model of panels (filter, table, detail)\r\n layoutModel: Model\r\n // current table configuration\r\n gridConfiguration: GridConfiguration\r\n // currently entered search string\r\n searchString: string\r\n // history of entered search strings\r\n searchHistory: string[]\r\n // default filter parameters\r\n defaultFilter: any\r\n // flag if advanced table configuration is visible\r\n tableConfigVisible: boolean\r\n // flag if filter has changed, so data doesn't correspond to current filter (color of search button changes to yellow)\r\n filterChanged: boolean\r\n // flag renders badge with exclamation after search button to notify user that table data are not actual\r\n tableNeedToBeReloaded: boolean\r\n}\r\n\r\n/**\r\n * Transaction class (more correct than RowDataTransaction)\r\n */\r\ninterface DataGridTransaction<T> {\r\n addIndex?: number;\r\n add: T[];\r\n remove: T[];\r\n update: T[];\r\n}\r\n\r\nexport default class ExtendedDataGrid<T extends {\r\n id: number | string\r\n}> extends React.Component<ExtendedDataGridProps, ExtendedDataGridState> {\r\n public static defaultProps = {\r\n rowStyleRules: tableDefaultRowStyleRules()\r\n };\r\n\r\n dataGrid?: DataGrid;\r\n private gridApi?: GridApi;\r\n // flag if data are loaded\r\n private dataLoaded: boolean;\r\n // transaction object used to update data from class\r\n private dataTransaction: DataGridTransaction<T>;\r\n private flexLayout: any = null;\r\n\r\n private _updateDataDebounced?(): void;\r\n\r\n constructor(props: Readonly<ExtendedDataGridProps>) {\r\n super(props);\r\n let gridConfiguration: GridConfiguration = {\r\n version: CONFIGURATION_VERSION,\r\n pageSize: 0\r\n };\r\n const gridConfigurationOk = props.defaultGridConfiguration && (!props.defaultGridConfiguration.version || props.defaultGridConfiguration.version === CONFIGURATION_VERSION);\r\n const layoutModelExists = gridConfigurationOk && !!props.defaultGridConfiguration.layoutModel;\r\n gridConfiguration.layoutModel = layoutModelExists ? props.defaultGridConfiguration.layoutModel : this._getInitialLayoutModel(props);\r\n gridConfiguration.columnModel = gridConfigurationOk && props.defaultGridConfiguration.columnModel ? props.defaultGridConfiguration.columnModel : undefined;\r\n gridConfiguration.pageSize = gridConfigurationOk && props.defaultGridConfiguration.pageSize ? props.defaultGridConfiguration.pageSize : 0;\r\n gridConfiguration.defaultPageSize = gridConfigurationOk && props.defaultGridConfiguration.defaultPageSize ? props.defaultGridConfiguration.defaultPageSize : undefined;\r\n gridConfiguration.followLastRecord = gridConfigurationOk && props.defaultGridConfiguration.followLastRecord;\r\n gridConfiguration.followLastRecordSortModel = gridConfigurationOk && props.defaultGridConfiguration.followLastRecordSortModel ? props.defaultGridConfiguration.followLastRecordSortModel : undefined;\r\n gridConfiguration.followLastRecordEditable = gridConfigurationOk && props.defaultGridConfiguration.followLastRecordEditable;\r\n gridConfiguration.columnSearchVisible = gridConfigurationOk && props.defaultGridConfiguration.columnSearchVisible;\r\n gridConfiguration.rowStyleRules = gridConfigurationOk && props.defaultGridConfiguration.rowStyleRules ? props.defaultGridConfiguration.rowStyleRules : tableDefaultRowStyleRules();\r\n gridConfiguration.defaultRowStyleRules = gridConfigurationOk && props.defaultGridConfiguration.defaultRowStyleRules ? props.defaultGridConfiguration.defaultRowStyleRules : tableDefaultRowStyleRules();\r\n gridConfiguration.showMilliseconds = gridConfigurationOk && props.defaultGridConfiguration.showMilliseconds ? props.defaultGridConfiguration.showMilliseconds : false;\r\n gridConfiguration.defaultShowMilliseconds = gridConfigurationOk && props.defaultGridConfiguration.defaultShowMilliseconds ? props.defaultGridConfiguration.defaultShowMilliseconds : false;\r\n gridConfiguration.hideYear = gridConfigurationOk && props.defaultGridConfiguration.hideYear ? props.defaultGridConfiguration.hideYear : false;\r\n gridConfiguration.defaultHideYear = gridConfigurationOk && props.defaultGridConfiguration.defaultHideYear ? props.defaultGridConfiguration.defaultHideYear : false;\r\n\r\n // nasty fix to define ids for tabsets due to react-flexlayout library fix: https://github.com/caplin/FlexLayout/commit/3a21b21f6cd5c2a7b52d46084dce6a3880f9af58#diff-92c133bf427754ff04deeab6751b083b7c97ca955e7cc57c740eef5433fd0129\r\n const layoutLength = gridConfiguration.layoutModel?.layout?.children?.length ?? 0;\r\n if (layoutLength > 0) {\r\n for (let i = 0; i < layoutLength; i++) {\r\n if (!gridConfiguration.layoutModel.layout.children[i].id) {\r\n gridConfiguration.layoutModel.layout.children[i].id = `#${(i + 1) * 2}`\r\n }\r\n }\r\n }\r\n\r\n this.state = {\r\n layoutModel: FlexLayout.Model.fromJson(gridConfiguration.layoutModel),\r\n gridConfiguration: gridConfiguration,\r\n // search context\r\n searchString: \"\",\r\n searchHistory: props.search && props.search.initialSearchHistory ? [...props.search.initialSearchHistory] : [],\r\n // visibility flags\r\n tableConfigVisible: false,\r\n\r\n defaultFilter: this.props.filterPanel && this.props.filterPanel.defaultFilter ? cloneDeep(this.props.filterPanel.defaultFilter) : undefined,\r\n filterChanged: false,\r\n tableNeedToBeReloaded: false\r\n };\r\n\r\n if (!layoutModelExists && props.filterPanel && props.filterPanel.hidden) {\r\n // hide filter panel if it is not explicitly shown\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(\"#2\", {width: 0}));\r\n this.state.gridConfiguration.layoutModel.layout.children[0].width = 0;\r\n }\r\n if (props.detailPanel) {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(props.filterPanel ? \"#6\" : \"#4\", {width: 0}));\r\n }\r\n\r\n this.dataLoaded = false;\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n\r\n const debounceInterval: number = props.updateDataDebounceInterval ?? 500;\r\n if (debounceInterval > 0) {\r\n this._updateDataDebounced = debounce(this._updateData.bind(this), debounceInterval, {maxWait: debounceInterval});\r\n } else {\r\n this._updateDataDebounced = this._updateData.bind(this);\r\n }\r\n\r\n this.renderToolbarButtons = this.renderToolbarButtons.bind(this);\r\n this._onLoadData = this._onLoadData.bind(this);\r\n this._onGridReady = this._onGridReady.bind(this);\r\n this._onPaginationChanged = this._onPaginationChanged.bind(this);\r\n this._onSearch = this._onSearch.bind(this);\r\n this._onSearchStringChanged = this._onSearchStringChanged.bind(this);\r\n this.renderToolbar = this.renderToolbar.bind(this);\r\n this._followLastRecordDebounced = debounce(this._followLastRecordDebounced.bind(this), 500, {maxWait: 500});\r\n this._onRowDataUpdated = this._onRowDataUpdated.bind(this);\r\n this._onChangeRowStyleRules = this._onChangeRowStyleRules.bind(this);\r\n this.showFilterPanel = this.showFilterPanel.bind(this);\r\n this.showDetailPanel = this.showDetailPanel.bind(this);\r\n this.selectNextPreviousRecord = this.selectNextPreviousRecord.bind(this);\r\n this._onSelectionChanged = this._onSelectionChanged.bind(this);\r\n this._onViewportChanged = this._onViewportChanged.bind(this);\r\n }\r\n\r\n _getInitialLayoutModel(props: ExtendedDataGridProps) {\r\n const renderFilter = props.filterPanel && props.filterPanel.renderer;\r\n const renderDetail = props.detailPanel;\r\n const layoutModel: any = {\r\n global: {\r\n tabSetEnableTabStrip: false,\r\n splitterSize: 4,\r\n },\r\n borders: [],\r\n layout: {\r\n \"type\": \"row\",\r\n \"weight\": 100,\r\n \"children\": [{\r\n \"type\": \"tabset\",\r\n \"weight\": 100,\r\n \"selected\": 0,\r\n \"children\": [\r\n {\r\n \"type\": \"tab\",\r\n \"name\": \"Data\",\r\n \"component\": \"data-panel\",\r\n }\r\n ]\r\n }]\r\n }\r\n };\r\n if (renderFilter) {\r\n layoutModel.layout[\"children\"].unshift({\r\n \"id\": \"#2\",\r\n \"type\": \"tabset\",\r\n \"width\": props.filterPanel && props.filterPanel.defaultWidth ? props.filterPanel.defaultWidth : 228,\r\n \"selected\": 0,\r\n \"children\": [\r\n {\r\n \"type\": \"tab\",\r\n \"name\": \"Filter\",\r\n \"component\": \"filter-panel\",\r\n }\r\n ]\r\n });\r\n }\r\n if (renderDetail) {\r\n layoutModel.layout[\"children\"].push({\r\n \"id\": props.filterPanel ? \"#6\" : \"#4\",\r\n \"type\": \"tabset\",\r\n \"width\": props.detailPanel ? (props.detailPanel.defaultWidth ? props.detailPanel.defaultWidth : 220) : 0,\r\n \"selected\": 0,\r\n \"children\": [\r\n {\r\n \"type\": \"tab\",\r\n \"name\": \"Detail\",\r\n \"component\": \"detail-panel\",\r\n }\r\n ]\r\n },);\r\n }\r\n return layoutModel;\r\n }\r\n\r\n getConfiguration(): GridConfiguration {\r\n return this.state.gridConfiguration;\r\n }\r\n\r\n getSearchContext(): { searchString: string, searchHistory: string[] } {\r\n // reverse searchHistory before storing it\r\n const searchHistory = [...this.state.searchHistory];\r\n searchHistory.reverse();\r\n return {\r\n searchString: this.state.searchString,\r\n searchHistory: searchHistory\r\n };\r\n }\r\n\r\n loadData(callback?: () => void): void {\r\n this.dataGrid?.loadData(callback);\r\n }\r\n\r\n isActive(): boolean {\r\n return !!this.dataGrid && this.dataGrid.isActive();\r\n }\r\n\r\n focus() {\r\n this.dataGrid?.focus();\r\n }\r\n\r\n private _changeConfiguration(configuration: Partial<GridConfiguration>, callback?: () => void): void {\r\n if (this.props.disableConfigurationChange) {\r\n return;\r\n }\r\n const newConfiguration = Object.assign(this.state.gridConfiguration, configuration);\r\n this.setState({gridConfiguration: newConfiguration}, callback);\r\n if (this.props.onChangeConfiguration) {\r\n this.props.onChangeConfiguration(this.state.gridConfiguration);\r\n }\r\n }\r\n\r\n private _onGridReady(event: GridReadyEvent): void {\r\n this.gridApi = event.api;\r\n this._reloadTableConfiguration();\r\n if (this.props.onGridReady) {\r\n this.props.onGridReady(event);\r\n }\r\n }\r\n\r\n private _onLoadData(callback: OnLoadDataCallback): void {\r\n if (this.state.tableNeedToBeReloaded) {\r\n this.setState({tableNeedToBeReloaded: false});\r\n }\r\n this.props.onLoadData((recordsCount) => {\r\n this.dataLoaded = true;\r\n // clear meanwhile dynamically added/removed/updated data records\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n this.followLastRecord();\r\n callback(recordsCount);\r\n })\r\n }\r\n\r\n private _onPaginationChanged(currentPageSize: number | null, definedPageSize: number): void {\r\n if (this.dataLoaded) {\r\n const definedPageSizeChanged = this.state.gridConfiguration.pageSize !== definedPageSize;\r\n if (definedPageSizeChanged) {\r\n this._changeConfiguration({pageSize: definedPageSize});\r\n this._followLastRecordDebounced();\r\n }\r\n if (this.props.paging && this.props.paging.onPaginationChanged) {\r\n this.props.paging.onPaginationChanged(currentPageSize, definedPageSize);\r\n }\r\n }\r\n }\r\n\r\n private _onSearchStringChanged(searchString: string): void {\r\n this.setState({searchString: searchString});\r\n if (this.props.search && this.props.search.onChange) {\r\n this.props.search.onChange(searchString);\r\n }\r\n }\r\n\r\n private _onSearch(): void {\r\n const currentSearchString = this.state.searchString;\r\n let searchHistory: string[] = this.state.searchHistory;\r\n\r\n // remove search string from history\r\n searchHistory = searchHistory.filter((searchString) => searchString !== currentSearchString);\r\n // add new search string to first position in history\r\n searchHistory.unshift(currentSearchString);\r\n searchHistory = searchHistory.slice(0, 10);\r\n this.setState({\r\n searchHistory: searchHistory,\r\n });\r\n if (this.props.search && this.props.search.onSearch) {\r\n this.props.search.onSearch();\r\n }\r\n }\r\n\r\n private _reloadTableConfiguration(): void {\r\n if (this.gridApi) {\r\n if (this.state.gridConfiguration.columnModel) {\r\n ColumnUtils.mergeColumnsState(this.state.gridConfiguration.columnModel, this.props.columnDefs as ColDef[]);\r\n this.gridApi.applyColumnState({state: this.state.gridConfiguration.columnModel, applyOrder: true});\r\n } else {\r\n this.gridApi.resetColumnState();\r\n const columnState = this.gridApi.getColumnState();\r\n this._changeConfiguration({columnModel: columnState});\r\n }\r\n }\r\n }\r\n\r\n clearTransaction() {\r\n this.dataTransaction.add = [];\r\n this.dataTransaction.remove = [];\r\n this.dataTransaction.update = [];\r\n this.dataTransaction.addIndex = undefined;\r\n }\r\n\r\n removeFromTransaction(item: T) {\r\n this.dataTransaction.add = this.dataTransaction.add.filter(value => value.id !== item.id);\r\n this.dataTransaction.remove = this.dataTransaction.remove.filter(value => value.id !== item.id);\r\n this.dataTransaction.update = this.dataTransaction.update.filter(value => value.id !== item.id);\r\n }\r\n\r\n addRecord(data: T, addIndex?: number): void {\r\n const markedToRemove = this.dataTransaction.remove.find((value => value.id === data.id));\r\n if (markedToRemove) {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.update.push(data);\r\n } else {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.add.push(data);\r\n if (addIndex !== undefined) {\r\n this.dataTransaction.addIndex = addIndex;\r\n }\r\n }\r\n if (this._updateDataDebounced) {\r\n this._updateDataDebounced();\r\n }\r\n }\r\n\r\n addRecords(dataArray: T[], addIndex?: number): void {\r\n (addIndex ? dataArray.reverse() : dataArray).forEach(data => this.addRecord(data, addIndex));\r\n }\r\n\r\n /** Set new data to the grid */\r\n setRowData(dataArray: T[]): void {\r\n // reset transaction data received till this new data list is loaded,\r\n // we can do it here, because communication is serialized in one thread\r\n // and all push changes to new list data will come only after this method is finished\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n this.dataGrid?.setRowData(dataArray);\r\n }\r\n\r\n removeRecord(data: T): void {\r\n const markedToAdd = this.dataTransaction.add.find((value => value.id === data.id));\r\n if (markedToAdd) {\r\n this.removeFromTransaction(data);\r\n } else {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.remove.push(data);\r\n }\r\n if (this._updateDataDebounced) {\r\n this._updateDataDebounced();\r\n }\r\n }\r\n\r\n removeRecords(dataList: T[]): void {\r\n dataList.forEach((data) => {\r\n this.removeRecord(data);\r\n })\r\n }\r\n\r\n updateRecord(data: (T & { dataChangeState?: DataChangeStateEnum })) {\r\n switch (data.dataChangeState) {\r\n case DataChangeStateEnum.CONFIGURED:\r\n this.addRecord(data);\r\n break;\r\n case DataChangeStateEnum.REMOVED:\r\n this.removeRecord(data);\r\n break;\r\n default:\r\n const markedToAdd = this.dataTransaction.add.find((value => value.id === data.id));\r\n if (markedToAdd) {\r\n this.addRecord(data);\r\n } else {\r\n this.removeFromTransaction(data);\r\n this.dataTransaction.update.push(data);\r\n if (this._updateDataDebounced) {\r\n this._updateDataDebounced();\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n updateRecords(dataList: (T & { dataChangeState?: DataChangeStateEnum })[]) {\r\n dataList.forEach((data) => {\r\n this.updateRecord(data);\r\n });\r\n }\r\n\r\n private _updateData(): void {\r\n // remove duplicates, preserve last version of object\r\n this.dataTransaction.update.forEach(data => {\r\n const rowNode = this.gridApi ? this.gridApi.getRowNode(data.id + \"\") : null;\r\n if (rowNode) {\r\n rowNode.updateData(data);\r\n if (this.props.filter && this.props.filter.quickFilterEnabled) {\r\n rowNode.resetQuickFilterAggregateText();\r\n }\r\n } else {\r\n this.dataTransaction.add.push(data);\r\n }\r\n });\r\n // we have already processed them\r\n this.dataTransaction.update = [];\r\n if (this.dataTransaction.add.length > 0 || this.dataTransaction.remove.length > 0) {\r\n this.dataTransaction.remove.forEach((object) => {\r\n const node = this.gridApi ? this.gridApi.getRowNode(object.id + \"\") : null;\r\n if (node && node.isSelected()) {\r\n node.setSelected(false);\r\n }\r\n });\r\n // upgrade grid\r\n if (this.gridApi) {\r\n this.gridApi.applyTransaction(this.dataTransaction);\r\n }\r\n if (this.props.rowData) {\r\n // automatically updating client side array of records\r\n if (this.dataTransaction.addIndex !== undefined) {\r\n this.props.rowData.splice(this.dataTransaction.addIndex, 0, ...this.dataTransaction.add);\r\n } else {\r\n this.props.rowData.push(...this.dataTransaction.add);\r\n }\r\n this.dataTransaction.remove.forEach((object) => {\r\n const index = this.props.rowData ? this.props.rowData.indexOf(object) : -1;\r\n if (index >= 0 && this.props.rowData) {\r\n this.props.rowData.splice(index, 1);\r\n }\r\n });\r\n }\r\n this.dataTransaction = {add: [], remove: [], update: []};\r\n }\r\n if (this.props.onDataChanged) {\r\n this.props.onDataChanged();\r\n }\r\n }\r\n\r\n enableFollowLastRecord(enable: boolean): void {\r\n if (enable) {\r\n if (this.gridApi && this.state.gridConfiguration.followLastRecordSortModel) {\r\n this.dataGrid?.setSortModel(this.state.gridConfiguration.followLastRecordSortModel);\r\n this.gridApi.onSortChanged();\r\n }\r\n this._changeConfiguration({followLastRecord: true});\r\n this._followLastRecordDebounced();\r\n } else {\r\n if (this.state.gridConfiguration.followLastRecord) {\r\n this._changeConfiguration({followLastRecord: false});\r\n }\r\n }\r\n }\r\n\r\n _followLastRecordDebounced(): void {\r\n if (this.state.gridConfiguration.followLastRecord && this.props.rowData && this.props.rowData.length > 0) {\r\n this.followLastRecord();\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls table to last record added to the tail of the table\r\n */\r\n followLastRecord(): void {\r\n if (this.state.gridConfiguration.followLastRecord && this.props.rowData && this.props.rowData.length > 0) {\r\n if (this.gridApi) {\r\n let lastIndex = -1;\r\n this.gridApi.forEachNodeAfterFilterAndSort((_, index) => {\r\n lastIndex = index;\r\n });\r\n if (lastIndex >= 0) {\r\n this.gridApi.ensureIndexVisible(lastIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public setColumnModel(columnModel: ColumnState[]) {\r\n this.dataGrid?.setColumnState(columnModel);\r\n }\r\n\r\n public setSortModel(sortModel: SortItem[]) {\r\n this.dataGrid?.setSortModel(sortModel);\r\n }\r\n\r\n public getSortModel(): SortItem[] {\r\n return this.dataGrid?.getSortModel() ?? [];\r\n }\r\n\r\n _onRowDataUpdated(event: RowDataUpdatedEvent): void {\r\n this._followLastRecordDebounced();\r\n if (this.props.onRowDataUpdated) {\r\n this.props.onRowDataUpdated(event);\r\n }\r\n }\r\n\r\n showFilterPanel(show: boolean): void {\r\n if (show) {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(\"#2\", {width: this.props.filterPanel && this.props.filterPanel.defaultWidth ? this.props.filterPanel.defaultWidth : 250}));\r\n } else {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(\"#2\", {width: 0}));\r\n }\r\n }\r\n\r\n showDetailPanel(show: boolean): void {\r\n if (show) {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(this.props.filterPanel ? \"#6\" : \"#4\", {width: this.props.detailPanel && this.props.detailPanel.defaultWidth ? this.props.detailPanel.defaultWidth : 250}));\r\n } else {\r\n this.state.layoutModel.doAction(FlexLayout.Actions.updateNodeAttributes(this.props.filterPanel ? \"#6\" : \"#4\", {width: 0}));\r\n }\r\n }\r\n\r\n selectNextPreviousRecord(previous: boolean): void {\r\n let selectedNodes = this.gridApi?.getSelectedNodes();\r\n if (selectedNodes && selectedNodes.length === 1) {\r\n let selectedNode = selectedNodes[0];\r\n if (this.props.rowData && this.props.rowData.length > 0) {\r\n this.gridApi?.forEachNodeAfterFilterAndSort((node) => {\r\n if ((!previous && node.childIndex === (selectedNode.childIndex + 1)) || (previous && node.childIndex === (selectedNode.childIndex - 1))) {\r\n node.setSelected(true, true);\r\n this.gridApi?.ensureNodeVisible(node);\r\n }\r\n });\r\n } else if (this.props.rowModelType === \"infinite\" && selectedNode.rowIndex !== null) {\r\n const nextRowIndex = !previous ? selectedNode.rowIndex + 1 : (selectedNode.rowIndex !== 0 ? selectedNode.rowIndex - 1 : 0);\r\n const nextNode = this.gridApi?.getDisplayedRowAtIndex(nextRowIndex);\r\n if (nextNode) {\r\n nextNode.setSelected(true, true);\r\n this.gridApi?.ensureNodeVisible(nextNode);\r\n }\r\n }\r\n }\r\n }\r\n\r\n changeRowStyleRules(rowStyleRules: RowStyleRule[]): void {\r\n this.state.gridConfiguration.rowStyleRules = rowStyleRules;\r\n this.setState({gridConfiguration: this.state.gridConfiguration}, () => {\r\n this.gridApi?.redrawRows();\r\n });\r\n }\r\n\r\n _onChangeRowStyleRules(rowStyleRules: RowStyleRule[]): void {\r\n this.changeRowStyleRules(rowStyleRules);\r\n if (this.props.onChangeRowStyleRules) {\r\n this.props.onChangeRowStyleRules(rowStyleRules);\r\n }\r\n }\r\n\r\n onPanelFilterApplied(newFilter: any): void {\r\n const filterChanged = !isEqualWith(newFilter, this.state.defaultFilter, this.equalValues);\r\n if (filterChanged !== this.state.filterChanged) {\r\n this.setState({filterChanged: filterChanged});\r\n }\r\n }\r\n\r\n getUiColumnFilterValue(colId: string): string {\r\n const nameFilterModel: TextFilterModel = this.gridApi?.getColumnFilterModel(colId) as TextFilterModel;\r\n return nameFilterModel && nameFilterModel.filter ? nameFilterModel.filter : \"\";\r\n }\r\n\r\n async removeUiColumnFilterValue(colId: string) {\r\n const filterInstance = await this.gridApi?.getColumnFilterInstance(colId);\r\n const textFilterInstance = filterInstance as TextFilter;\r\n const nameFilterModel: TextFilterModel = textFilterInstance.getModelFromUi() as TextFilterModel;\r\n if (nameFilterModel) {\r\n nameFilterModel.filter = \"\";\r\n // we need to hack this typescript protected declaration\r\n // @ts-ignore\r\n textFilterInstance.resetUiToDefaults(false);\r\n }\r\n }\r\n\r\n /**\r\n * Applies UI column filter values silently without redrawing ag-grid\r\n * @param colId\r\n */\r\n async applyUiColumnFilterValue(colId: string) {\r\n const filterInstance = await this.gridApi?.getColumnFilterInstance(colId);\r\n ((filterInstance) as TextFilter)?.applyModel?.();\r\n }\r\n\r\n private equalValues(value: any, otherValue: any): (boolean | undefined) {\r\n if ((value === undefined || value === null) && (otherValue === undefined || otherValue === null)) {\r\n return true;\r\n }\r\n return undefined;\r\n }\r\n\r\n private _onSelectionChanged(event: SelectionChangedEvent): void {\r\n if (this.state.gridConfiguration.followLastRecord && this.gridApi && this.gridApi.getSelectedRows().length > 0) {\r\n this.enableFollowLastRecord(false);\r\n }\r\n if (this.props.onSelectionChanged) {\r\n this.props.onSelectionChanged(event);\r\n }\r\n }\r\n\r\n private _onViewportChanged(event: ViewportChangedEvent) {\r\n const dataGridEvent = event as DataGridViewportChangedEvent;\r\n if (this.state.gridConfiguration.followLastRecord && dataGridEvent.rowsScrollingDelta < 0) {\r\n this.enableFollowLastRecord(false);\r\n }\r\n if (this.props.onViewportChanged) {\r\n this.props.onViewportChanged(dataGridEvent);\r\n }\r\n }\r\n\r\n private renderToolbarButtons(): ReactElement {\r\n const renderFilter = this.props.filterPanel && this.props.filterPanel.renderer;\r\n const filterPanelVisible = renderFilter && this.isFilterPanelVisible();\r\n return (\r\n <React.Fragment>\r\n {renderFilter && <Button type={filterPanelVisible ? \"primary\" : \"default\"} key=\"filter-button\"\r\n title={i18n(\"Show/Hide filter panel\")}\r\n onClick={() => {\r\n this.showFilterPanel(!filterPanelVisible);\r\n }}>\r\n {this.props.filterPanel?.icon ?? <FilterOutlined/>}\r\n </Button>}\r\n {this.props.toolbar?.toolbarButtons}\r\n {this.state.gridConfiguration.followLastRecordEditable &&\r\n <Button key=\"track-button\"\r\n title={i18n(\"Track last added record to table\")}\r\n onClick={(e) => {\r\n this.enableFollowLastRecord(!this.state.gridConfiguration.followLastRecord);\r\n (e.target as HTMLButtonElement).blur();\r\n }}>\r\n {this.state.gridConfiguration.followLastRecord ? <EyeOutlined/> : <EyeInvisibleOutlined/>}\r\n </Button>}\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n private renderToolbar(originalToolbar: ReactElement): ReactElement {\r\n let toolbarToRender = originalToolbar;\r\n if (this.props.toolbar && this.props.toolbar.renderToolbar) {\r\n const searchBar = this.props.toolbar.renderToolbar(originalToolbar);\r\n if (searchBar) {\r\n toolbarToRender = searchBar;\r\n }\r\n }\r\n\r\n const statsBadge = this.renderSearchBadge();\r\n return (<div style={{whiteSpace: \"nowrap\", flexGrow: 1, display: \"flex\"}}>\r\n {toolbarToRender}\r\n {statsBadge}\r\n </div>);\r\n }\r\n\r\n private renderSearchBadge(): ReactElement | undefined {\r\n if (this.state.tableNeedToBeReloaded) {\r\n return (\r\n <Badge count={\r\n <span className=\"ant-badge-count\"\r\n title={i18n(\"Records has been added or removed, table need to be reloaded in order to see actual records\")}\r\n style={{color: \"#fa541c\", background: \"#fff2e8\", borderColor: \"#ffbb96\"}}>\r\n <ExclamationOutlined style={{color: '#fa541c'}}/>\r\n </span>\r\n } style={{cursor: \"hand\"}} offset={[10, -10]}/>\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n isFilterPanelVisible(): boolean {\r\n return this.state.gridConfiguration.layoutModel ? this.state.gridConfiguration.layoutModel.layout.children[0].width > 0 : true;\r\n }\r\n\r\n renderDataGrid(): ReactElement {\r\n const {\r\n defaultGridConfiguration,\r\n onGridReady, onLoadData, onSortChanged, onColumnsChanged, onSelectionChanged, onViewportChanged,\r\n onTableConfigVisible, toolbar,\r\n paging, filter, search, onChangeConfiguration, onDataChanged, onChangeRowStyleRules,\r\n filterPanel, controlPanel,\r\n ...rest\r\n } = this.props;\r\n\r\n return (\r\n <DataGrid\r\n {...rest}\r\n ref={(dataGrid) => {\r\n this.dataGrid = dataGrid ? dataGrid : undefined;\r\n }}\r\n onLoadData={this._onLoadData}\r\n onGridReady={this._onGridReady}\r\n paging={{\r\n pageSize: this.state.gridConfiguration.pageSize,\r\n defaultPageSize: this.state.gridConfiguration.defaultPageSize,\r\n onPaginationChanged: this._onPaginationChanged,\r\n }}\r\n filter={{\r\n columnSearchVisible: this.state.gridConfiguration.columnSearchVisible,\r\n getFilterModel: filter ? filter.getFilterModel : undefined,\r\n onColumnSearchVisible: (visible) => {\r\n this._changeConfiguration({columnSearchVisible: visible});\r\n if (filter?.onColumnSearchVisible) {\r\n filter.onColumnSearchVisible(visible);\r\n }\r\n },\r\n onFilterModified: filter ? filter.onFilterModified : undefined,\r\n onFilterChanged: filter ? filter.onFilterChanged : undefined,\r\n onFilterConfirmed: filter ? filter.onFilterConfirmed : undefined,\r\n }}\r\n search={{\r\n hidden: !!search ? search.hidden : undefined,\r\n placeholder: !!search ? search.placeholder : undefined,\r\n searchString: !!search && search.searchString !== undefined ? search.searchString : this.state.searchString,\r\n stringFormatter: !!search ? search.stringFormatter : undefined,\r\n searchHistory: !!search && search.searchHistory !== undefined ? search.searchHistory : this.state.searchHistory,\r\n searchButtonClassName: !!search ? search.searchButtonClassName : undefined,\r\n searchButtonDisabled: !!search ? search.searchButtonDisabled : undefined,\r\n searchButtonHidden: !!search ? search.searchButtonHidden : undefined,\r\n searchRenderer: search?.searchRenderer,\r\n onChange: this._onSearchStringChanged,\r\n onSearch: this._onSearch\r\n }}\r\n toolbar={{\r\n renderToolbar: this.renderToolbar,\r\n toolbarButtons: this.renderToolbarButtons(),\r\n hideRecordCount: toolbar?.hideRecordCount,\r\n extraContent: toolbar?.extraContent,\r\n }}\r\n onSortChanged={(event) => {\r\n const sortModel = this.dataGrid?.getSortModel();\r\n if (this.state.gridConfiguration.followLastRecord && this.state.gridConfiguration.followLastRecordSortModel && !isEqual(this.state.gridConfiguration.followLastRecordSortModel, sortModel)) {\r\n this.enableFollowLastRecord(false);\r\n }\r\n const columnState = this.gridApi?.getColumnState();\r\n this._changeConfiguration({columnModel: columnState});\r\n if (onSortChanged) {\r\n onSortChanged(event);\r\n }\r\n }}\r\n onColumnsChanged={(columnModel, event) => {\r\n this._changeConfiguration({columnModel: columnModel});\r\n if (onColumnsChanged) {\r\n onColumnsChanged(columnModel, event);\r\n }\r\n }}\r\n onRowDataUpdated={this._onRowDataUpdated}\r\n tableConfigVisible={this.state.tableConfigVisible}\r\n onTableConfigVisible={(visible) => {\r\n this.setState({tableConfigVisible: visible});\r\n if (onTableConfigVisible) {\r\n onTableConfigVisible(visible);\r\n }\r\n }}\r\n onSelectionChanged={this._onSelectionChanged}\r\n rowStyleRules={this.state.gridConfiguration.rowStyleRules as RowStyleRule[]}\r\n defaultRowStyleRules={this.state.gridConfiguration.defaultRowStyleRules}\r\n onChangeRowStyleRules={this._onChangeRowStyleRules}\r\n onViewportChanged={this._onViewportChanged}\r\n showMilliseconds={this.state.gridConfiguration.showMilliseconds}\r\n defaultShowMilliseconds={this.state.gridConfiguration.defaultShowMilliseconds}\r\n onShowMilliseconds={(showMillis, callback) => {\r\n this._changeConfiguration({showMilliseconds: showMillis}, callback);\r\n }}\r\n hideYear={this.state.gridConfiguration.hideYear}\r\n defaultHideYear={this.state.gridConfiguration.defaultHideYear}\r\n onShowYear={(showYear, callback) => {\r\n this._changeConfiguration({hideYear: !showYear}, callback);\r\n }}\r\n />\r\n );\r\n }\r\n\r\n private renderDataGridWithControlPanel() {\r\n if (this.props.controlPanel && this.props.controlPanel.renderer) {\r\n return (\r\n <div key=\"table-with-control-panel\" style={{\r\n display: \"flex\",\r\n flexFlow: \"column\",\r\n height: \"100%\",\r\n width: \"100%\"\r\n }}>\r\n <div key=\"table-with-control-panel-wrapper\" style={{flex: \"1 1 auto\", overflow: \"auto\"}}>\r\n {this.renderDataGrid()}\r\n </div>\r\n {this.props.controlPanel.renderer()}\r\n </div>);\r\n }\r\n return this.renderDataGrid();\r\n }\r\n\r\n componentDidUpdate() {\r\n // very important nasty fix with flexlayout\r\n // in AlarmWindow or ObjectHistoryWindow there is ExtendedDataGrid(FlexLayout) placed in upper FlexLayout\r\n // resize event handling doesn't work in inner FlexLayout(ExtendedDataGrid)\r\n // I suppose it has something to do wit usage of multiple ResizeObservers, but I am not sure\r\n // therefore here on any change of state/props we will invoke recalculation of flexlayout size\r\n // internal logic of this method updateRect is fast and do resize only when it is needed\r\n this.flexLayout?.updateRect();\r\n }\r\n\r\n render() {\r\n const {filterPanel, detailPanel} = this.props;\r\n if (filterPanel || detailPanel) {\r\n return (\r\n <FlexLayout.Layout\r\n ref={(flexLayout) => {\r\n this.flexLayout = flexLayout;\r\n }}\r\n model={this.state.layoutModel}\r\n onModelChange={(model) => {\r\n this._changeConfiguration({layoutModel: model.toJson()});\r\n }}\r\n onAction={(action) => {\r\n const node1 = action.data.node1;\r\n const node2 = action.data.node2;\r\n let tabset;\r\n // disable moving splitter if filter or detail panel is hidden (width=0)\r\n if (action.type === Actions.ADJUST_SPLIT) {\r\n if (node1 === \"#4\" && node2 === \"#6\") {\r\n tabset = this.state.layoutModel.getNodeById('#6');\r\n } else if (node1 === \"#2\" && node2 === \"#4\") {\r\n tabset = this.state.layoutModel.getNodeById('#2');\r\n }\r\n if (tabset) {\r\n const width = (tabset as any)?._attributes?.width;\r\n if (width === 0) {\r\n return undefined;\r\n }\r\n }\r\n }\r\n return action;\r\n }}\r\n factory={(node) => {\r\n const component = node.getComponent();\r\n if (component === \"filter-panel\") {\r\n return filterPanel && filterPanel.renderer && filterPanel.renderer({\r\n defaultFilter: this.state.defaultFilter,\r\n filterChanged: this.state.filterChanged\r\n });\r\n } else if (component === \"data-panel\") {\r\n return this.renderDataGridWithControlPanel();\r\n } else if (component === \"detail-panel\") {\r\n return detailPanel && detailPanel.renderer();\r\n }\r\n return <Empty/>\r\n }}\r\n />\r\n );\r\n } else {\r\n return this.renderDataGridWithControlPanel();\r\n }\r\n }\r\n}"]}
@@ -76,7 +76,7 @@
76
76
  "This Week": "Tento týden",
77
77
  "This Quarter": "Toto čtvrtletí",
78
78
  "This Year": "Letos",
79
- "Interval Duration": "Trvání intervalu",
79
+ "Duration and Time Shift": "Trvání a časový posun",
80
80
  "Time Shift": "Časový posun",
81
81
  "Hour": "Hodina",
82
82
  "Day": "Den",
@@ -76,7 +76,7 @@
76
76
  "This Week": "Tento týždeň",
77
77
  "This Quarter": "Tento štvrťrok",
78
78
  "This Year": "Tento rok",
79
- "Interval Duration": "Trvanie intervalu",
79
+ "Duration and Time Shift": "Trvanie a časový posun",
80
80
  "Time Shift": "Časový posun",
81
81
  "Hour": "Hodina",
82
82
  "Day": "Deň",
@@ -76,7 +76,7 @@
76
76
  "This Week": "Цього тижня",
77
77
  "This Quarter": "Цей квартал",
78
78
  "This Year": "Цього року",
79
- "Interval Duration": "Тривалість інтервалу",
79
+ "Duration and Time Shift": "Тривалість та часовий зсув",
80
80
  "Time Shift": "Зрушення в часі",
81
81
  "Hour": "Урок",
82
82
  "Day": "День",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d2coreui",
3
- "version": "23.0.23",
3
+ "version": "23.0.25",
4
4
  "description": "Core UI components and utilities library.",
5
5
  "author": "Ipesoft s.r.o.",
6
6
  "license": "MIT",
package/style/index.less CHANGED
@@ -126,10 +126,6 @@ body {
126
126
  padding-right: 26px;
127
127
  }
128
128
 
129
- .date-range-picker-popup .ant-tooltip-inner {
130
- width: 538px;
131
- }
132
-
133
129
  .ReactCollapse--collapse {
134
130
  transition: height 500ms;
135
131
  }