d2coreui 21.0.10 → 21.0.11
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.
- package/components/grid/extendedDataGrid.d.ts +1 -1
- package/components/grid/extendedDataGrid.js +31 -5
- package/components/grid/extendedDataGrid.js.map +1 -1
- package/package.json +2 -2
- package/style/flexLayout/flexLayout.scss +95 -1
- package/style/flexLayout/flexLayoutBase.scss +152 -151
- package/style/flexLayout/new/_base.scss +616 -0
- package/style/flexLayout/new/flexLayoutBase.scss +622 -0
- package/style/flexLayout/new/light.scss +107 -0
- package/style/flexLayout/old/_base.scss +551 -0
- package/style/flexLayout/old/light.scss +16 -0
|
@@ -2,7 +2,7 @@ import React, { ReactElement } from "react";
|
|
|
2
2
|
import DataGrid, { DataGridFilterProps, DataGridProps, DataGridSearchProps, SortItem } from "./dataGrid";
|
|
3
3
|
import { RowStyleRule } from "d2coreui/components/grid/cell/tableDefaultRowStyleRules";
|
|
4
4
|
import { ColumnState, RowDataUpdatedEvent } from "ag-grid-community";
|
|
5
|
-
import Model from "flexlayout-react/declarations/model/Model";
|
|
5
|
+
import { Model } from "flexlayout-react/declarations/model/Model";
|
|
6
6
|
import { DataChangeStateEnum } from "d2core/types/dataChangeStateEnum";
|
|
7
7
|
export interface GridConfiguration {
|
|
8
8
|
version?: number;
|
|
@@ -10,7 +10,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import React from "react";
|
|
13
|
-
import
|
|
13
|
+
import * as FlexLayout from "flexlayout-react";
|
|
14
|
+
import { Actions } from "flexlayout-react";
|
|
14
15
|
import { ExclamationOutlined, EyeInvisibleOutlined, EyeOutlined, FilterOutlined } from "@ant-design/icons";
|
|
15
16
|
import { Badge, Button, Empty } from "antd";
|
|
16
17
|
import DataGrid from "./dataGrid";
|
|
@@ -24,7 +25,7 @@ import { ColumnUtils } from "./columnUtils";
|
|
|
24
25
|
const CONFIGURATION_VERSION = 1;
|
|
25
26
|
export default class ExtendedDataGrid extends React.Component {
|
|
26
27
|
constructor(props) {
|
|
27
|
-
var _a;
|
|
28
|
+
var _a, _b, _c, _d, _e;
|
|
28
29
|
super(props);
|
|
29
30
|
let gridConfiguration = {
|
|
30
31
|
version: CONFIGURATION_VERSION,
|
|
@@ -46,6 +47,14 @@ export default class ExtendedDataGrid extends React.Component {
|
|
|
46
47
|
gridConfiguration.defaultShowMilliseconds = gridConfigurationOk && props.defaultGridConfiguration.defaultShowMilliseconds ? props.defaultGridConfiguration.defaultShowMilliseconds : false;
|
|
47
48
|
gridConfiguration.hideYear = gridConfigurationOk && props.defaultGridConfiguration.hideYear ? props.defaultGridConfiguration.hideYear : false;
|
|
48
49
|
gridConfiguration.defaultHideYear = gridConfigurationOk && props.defaultGridConfiguration.defaultHideYear ? props.defaultGridConfiguration.defaultHideYear : false;
|
|
50
|
+
const layoutLength = (_d = (_c = (_b = (_a = gridConfiguration.layoutModel) === null || _a === void 0 ? void 0 : _a.layout) === null || _b === void 0 ? void 0 : _b.children) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0;
|
|
51
|
+
if (layoutLength > 0) {
|
|
52
|
+
for (let i = 0; i < layoutLength; i++) {
|
|
53
|
+
if (!gridConfiguration.layoutModel.layout.children[i].id) {
|
|
54
|
+
gridConfiguration.layoutModel.layout.children[i].id = `#${(i + 1) * 2}`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
49
58
|
this.state = {
|
|
50
59
|
layoutModel: FlexLayout.Model.fromJson(gridConfiguration.layoutModel),
|
|
51
60
|
gridConfiguration: gridConfiguration,
|
|
@@ -65,7 +74,7 @@ export default class ExtendedDataGrid extends React.Component {
|
|
|
65
74
|
}
|
|
66
75
|
this.dataLoaded = false;
|
|
67
76
|
this.dataTransaction = { add: [], remove: [], update: [] };
|
|
68
|
-
const debounceInterval = (
|
|
77
|
+
const debounceInterval = (_e = props.updateDataDebounceInterval) !== null && _e !== void 0 ? _e : 500;
|
|
69
78
|
if (debounceInterval > 0) {
|
|
70
79
|
this._updateDataDebounced = debounce(this._updateData.bind(this), debounceInterval, { maxWait: debounceInterval });
|
|
71
80
|
}
|
|
@@ -116,6 +125,7 @@ export default class ExtendedDataGrid extends React.Component {
|
|
|
116
125
|
};
|
|
117
126
|
if (renderFilter) {
|
|
118
127
|
layoutModel.layout["children"].unshift({
|
|
128
|
+
"id": "#2",
|
|
119
129
|
"type": "tabset",
|
|
120
130
|
"width": props.filterPanel && props.filterPanel.defaultWidth ? props.filterPanel.defaultWidth : 228,
|
|
121
131
|
"selected": 0,
|
|
@@ -130,6 +140,7 @@ export default class ExtendedDataGrid extends React.Component {
|
|
|
130
140
|
}
|
|
131
141
|
if (renderDetail) {
|
|
132
142
|
layoutModel.layout["children"].push({
|
|
143
|
+
"id": props.filterPanel ? "#6" : "#4",
|
|
133
144
|
"type": "tabset",
|
|
134
145
|
"width": props.detailPanel ? (props.detailPanel.defaultWidth ? props.detailPanel.defaultWidth : 220) : 0,
|
|
135
146
|
"selected": 0,
|
|
@@ -629,8 +640,23 @@ export default class ExtendedDataGrid extends React.Component {
|
|
|
629
640
|
return (React.createElement(FlexLayout.Layout, { model: this.state.layoutModel, onModelChange: (model) => {
|
|
630
641
|
this._changeConfiguration({ layoutModel: model.toJson() });
|
|
631
642
|
}, onAction: (action) => {
|
|
632
|
-
|
|
633
|
-
|
|
643
|
+
var _a, _b;
|
|
644
|
+
const node1 = action.data.node1;
|
|
645
|
+
const node2 = action.data.node2;
|
|
646
|
+
let tabset;
|
|
647
|
+
if (action.type === Actions.ADJUST_SPLIT) {
|
|
648
|
+
if (node1 === "#4" && node2 === "#6") {
|
|
649
|
+
tabset = this.state.layoutModel.getNodeById('#6');
|
|
650
|
+
}
|
|
651
|
+
else if (node1 === "#2" && node2 === "#4") {
|
|
652
|
+
tabset = this.state.layoutModel.getNodeById('#2');
|
|
653
|
+
}
|
|
654
|
+
if (tabset) {
|
|
655
|
+
const width = (_b = (_a = tabset) === null || _a === void 0 ? void 0 : _a._attributes) === null || _b === void 0 ? void 0 : _b.width;
|
|
656
|
+
if (width === 0) {
|
|
657
|
+
return undefined;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
634
660
|
}
|
|
635
661
|
return action;
|
|
636
662
|
}, factory: (node) => {
|
|
@@ -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 FlexLayout, {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 ColumnApi,\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?(): JSX.Element | 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 { id: number | string }> 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 private columnApi?: ColumnApi;\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\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 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 \"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 \"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 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.columnApi = event.columnApi;\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 && this.columnApi) {\r\n if (this.state.gridConfiguration.columnModel) {\r\n ColumnUtils.mergeColumnsState(this.state.gridConfiguration.columnModel, this.props.columnDefs as ColDef[]);\r\n this.columnApi.applyColumnState({state: this.state.gridConfiguration.columnModel, applyOrder: true});\r\n } else {\r\n this.columnApi.resetColumnState();\r\n const columnState = this.columnApi.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 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.CREATED:\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?.getFilterInstance(colId) as TextFilter).getModelFromUi() as TextFilterModel;\r\n return nameFilterModel && nameFilterModel.filter ? nameFilterModel.filter : \"\";\r\n }\r\n\r\n removeUiColumnFilterValue(colId: string) {\r\n const filterInstance = this.gridApi?.getFilterInstance(colId) as TextFilter;\r\n const nameFilterModel: TextFilterModel = filterInstance.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 filterInstance.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 applyUiColumnFilterValue(colId: string) {\r\n (this.gridApi?.getFilterInstance(colId) 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 inputReadonly: !!search ? search.inputReadonly : 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 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 }}\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.columnApi?.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 render() {\r\n const {filterPanel, detailPanel} = this.props;\r\n if (filterPanel || detailPanel) {\r\n return (\r\n <FlexLayout.Layout model={this.state.layoutModel}\r\n onModelChange={(model) => {\r\n this._changeConfiguration({layoutModel: model.toJson()});\r\n }}\r\n onAction={(action) => {\r\n if (action.type === Actions.ADJUST_SPLIT && action.data.node1 === \"#4\" && action.data.node2 === \"#6\") { // disable moving splitter for filter panel\r\n return undefined;\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":";;;;;;;;;;;AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAC,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAC,MAAM,MAAM,CAAC;AAC1C,OAAO,QAON,MAAM,YAAY,CAAC;AACpB,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,yBAAyC,MAAM,yDAAyD,CAAC;AAchH,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAG1C,MAAM,qBAAqB,GAAG,CAAC,CAAC;AA+HhC,MAAM,CAAC,OAAO,OAAO,gBAAoD,SAAQ,KAAK,CAAC,SAAuD;IAe1I,YAAY,KAAsC;;QAC9C,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,iBAAiB,GAAsB;YACvC,OAAO,EAAE,qBAAqB;YAC9B,QAAQ,EAAE,CAAC;SACd,CAAC;QACF,MAAM,mBAAmB,GAAG,KAAK,CAAC,wBAAwB,IAAI,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,IAAI,KAAK,CAAC,wBAAwB,CAAC,OAAO,KAAK,qBAAqB,CAAC,CAAC;QAC5K,MAAM,iBAAiB,GAAG,mBAAmB,IAAI,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,WAAW,CAAC;QAC9F,iBAAiB,CAAC,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACpI,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3J,iBAAiB,CAAC,QAAQ,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1I,iBAAiB,CAAC,eAAe,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;QACvK,iBAAiB,CAAC,gBAAgB,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,gBAAgB,CAAC;QAC5G,iBAAiB,CAAC,yBAAyB,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QACrM,iBAAiB,CAAC,wBAAwB,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,wBAAwB,CAAC;QAC5H,iBAAiB,CAAC,mBAAmB,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,mBAAmB,CAAC;QAClH,iBAAiB,CAAC,aAAa,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;QACnL,iBAAiB,CAAC,oBAAoB,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;QACxM,iBAAiB,CAAC,gBAAgB,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;QACtK,iBAAiB,CAAC,uBAAuB,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3L,iBAAiB,CAAC,QAAQ,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9I,iBAAiB,CAAC,eAAe,GAAG,mBAAmB,IAAI,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;QAGnK,MAAM,YAAY,GAAG,MAAA,MAAA,MAAA,MAAA,iBAAiB,CAAC,WAAW,0CAAE,MAAM,0CAAE,QAAQ,0CAAE,MAAM,mCAAI,CAAC,CAAC;QAClF,IAAI,YAAY,GAAG,CAAC,EAAE;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;oBACtD,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;iBAC1E;aACJ;SACJ;QAED,IAAI,CAAC,KAAK,GAAG;YACT,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC;YACrE,iBAAiB,EAAE,iBAAiB;YAEpC,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE;YAE9G,kBAAkB,EAAE,KAAK;YAEzB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3I,aAAa,EAAE,KAAK;YACpB,qBAAqB,EAAE,KAAK;SAC/B,CAAC;QAEF,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE;YAErE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;YAC3F,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;SACzE;QACD,IAAI,KAAK,CAAC,WAAW,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;SACzH;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;QAEzD,MAAM,gBAAgB,GAAW,MAAA,KAAK,CAAC,0BAA0B,mCAAI,GAAG,CAAC;QACzE,IAAI,gBAAgB,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAC,OAAO,EAAE,gBAAgB,EAAC,CAAC,CAAC;SACpH;aAAM;YACH,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3D;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAC,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;QAC5G,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,sBAAsB,CAAC,KAA4B;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;QACrE,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC;QACvC,MAAM,WAAW,GAAQ;YACrB,MAAM,EAAE;gBACJ,oBAAoB,EAAE,KAAK;gBAC3B,YAAY,EAAE,CAAC;aAClB;YACD,OAAO,EAAE,EAAE;YACX,MAAM,EAAE;gBACJ,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,GAAG;gBACb,UAAU,EAAE,CAAC;wBACT,MAAM,EAAE,QAAQ;wBAChB,QAAQ,EAAE,GAAG;wBACb,UAAU,EAAE,CAAC;wBACb,UAAU,EAAE;4BACR;gCACI,MAAM,EAAE,KAAK;gCACb,MAAM,EAAE,MAAM;gCACd,WAAW,EAAE,YAAY;6BAC5B;yBACJ;qBACJ,CAAC;aACL;SACJ,CAAC;QACF,IAAI,YAAY,EAAE;YACd,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;gBACnC,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG;gBACnG,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE;oBACR;wBACI,MAAM,EAAE,KAAK;wBACb,MAAM,EAAE,QAAQ;wBAChB,WAAW,EAAE,cAAc;qBAC9B;iBACJ;aACJ,CAAC,CAAC;SACN;QACD,IAAI,YAAY,EAAE;YACd,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gBAChC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACrC,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxG,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE;oBACR;wBACI,MAAM,EAAE,KAAK;wBACb,MAAM,EAAE,QAAQ;wBAChB,WAAW,EAAE,cAAc;qBAC9B;iBACJ;aACJ,CAAE,CAAC;SACP;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,gBAAgB;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxC,CAAC;IAED,gBAAgB;QAEZ,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpD,aAAa,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;YACrC,aAAa,EAAE,aAAa;SAC/B,CAAC;IACN,CAAC;IAED,QAAQ,CAAC,QAAqB;;QAC1B,MAAA,IAAI,CAAC,QAAQ,0CAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ;QACJ,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC;IAEO,oBAAoB,CAAC,aAAyC,EAAE,QAAqB;QACzF,IAAI,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE;YACvC,OAAO;SACV;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ,CAAC,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,EAAE,QAAQ,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;SAClE;IACL,CAAC;IAEO,YAAY,CAAC,KAAqB;QACtC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACjC;IACL,CAAC;IAEO,WAAW,CAAC,QAA4B;QAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,EAAC,qBAAqB,EAAE,KAAK,EAAC,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE,EAAE;YACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,IAAI,CAAC,eAAe,GAAG,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;YACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,oBAAoB,CAAC,eAA8B,EAAE,eAAuB;QAChF,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,KAAK,eAAe,CAAC;YACzF,IAAI,sBAAsB,EAAE;gBACxB,IAAI,CAAC,oBAAoB,CAAC,EAAC,QAAQ,EAAE,eAAe,EAAC,CAAC,CAAC;gBACvD,IAAI,CAAC,0BAA0B,EAAE,CAAC;aACrC;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE;gBAC5D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;aAC3E;SACJ;IACL,CAAC;IAEO,sBAAsB,CAAC,YAAoB;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAC,YAAY,EAAE,YAAY,EAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;YACjD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC5C;IACL,CAAC;IAEO,SAAS;QACb,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACpD,IAAI,aAAa,GAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAGvD,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,KAAK,mBAAmB,CAAC,CAAC;QAE7F,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC3C,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC;YACV,aAAa,EAAE,aAAa;SAC/B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;YACjD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;SAChC;IACL,CAAC;IAEO,yBAAyB;QAC7B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,EAAE;gBAC1C,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAsB,CAAC,CAAC;gBAC3G,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;aACxG;iBAAM;gBACH,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAClC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBACpD,IAAI,CAAC,oBAAoB,CAAC,EAAC,WAAW,EAAE,WAAW,EAAC,CAAC,CAAC;aACzD;SACJ;IACL,CAAC;IAED,gBAAgB;QACZ,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC9C,CAAC;IAED,qBAAqB,CAAC,IAAO;QACzB,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,SAAS,CAAC,IAAO,EAAE,QAAiB;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzF,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1C;aAAM;YACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;aAC5C;SACJ;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC/B;IACL,CAAC;IAED,UAAU,CAAC,SAAc,EAAE,QAAiB;QACxC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,YAAY,CAAC,IAAO;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;SACpC;aAAM;YACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1C;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC/B;IACL,CAAC;IAED,aAAa,CAAC,QAAa;QACvB,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAA;IACN,CAAC;IAED,YAAY,CAAC,IAAqD;QAC9D,QAAQ,IAAI,CAAC,eAAe,EAAE;YAC1B;gBACI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrB,MAAM;YACV;gBACI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACxB,MAAM;YACV;gBACI,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnF,IAAI,WAAW,EAAE;oBACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBACxB;qBAAM;oBACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvC,IAAI,IAAI,CAAC,oBAAoB,EAAE;wBAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;qBAC/B;iBACJ;gBACD,MAAM;SACb;IACL,CAAC;IAED,aAAa,CAAC,QAA2D;QACrE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,WAAW;QAEf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5E,IAAI,OAAO,EAAE;gBACT,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE;oBAC3D,OAAO,CAAC,6BAA6B,EAAE,CAAC;iBAC3C;aACJ;iBAAM;gBACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/E,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3E,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;oBAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aACvD;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBAEpB,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,KAAK,SAAS,EAAE;oBAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;iBAC5F;qBAAM;oBACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;iBACxD;gBACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3E,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;wBAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;qBACvC;gBACL,CAAC,CAAC,CAAC;aACN;YACD,IAAI,CAAC,eAAe,GAAG,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;SAC5D;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;SAC9B;IACL,CAAC;IAED,sBAAsB,CAAC,MAAe;;QAClC,IAAI,MAAM,EAAE;YACR,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,yBAAyB,EAAE;gBACxE,MAAA,IAAI,CAAC,QAAQ,0CAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;gBACpF,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;aAChC;YACD,IAAI,CAAC,oBAAoB,CAAC,EAAC,gBAAgB,EAAE,IAAI,EAAC,CAAC,CAAC;YACpD,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACrC;aAAM;YACH,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,EAAE;gBAC/C,IAAI,CAAC,oBAAoB,CAAC,EAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC;aACxD;SACJ;IACL,CAAC;IAED,0BAA0B;QACtB,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;IACL,CAAC;IAKD,gBAAgB;QACZ,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtG,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;oBACpD,SAAS,GAAG,KAAK,CAAC;gBACtB,CAAC,CAAC,CAAC;gBACH,IAAI,SAAS,IAAI,CAAC,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;iBAC9C;aACJ;SACJ;IACL,CAAC;IAEM,cAAc,CAAC,WAA0B;;QAC5C,MAAA,IAAI,CAAC,QAAQ,0CAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAEM,YAAY,CAAC,SAAqB;;QACrC,MAAA,IAAI,CAAC,QAAQ,0CAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAEM,YAAY;;QACf,OAAO,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,YAAY,EAAE,mCAAI,EAAE,CAAC;IAC/C,CAAC;IAED,iBAAiB,CAAC,KAA0B;QACxC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACtC;IACL,CAAC;IAED,eAAe,CAAC,IAAa;QACzB,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC;SACtM;aAAM;YACH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;SAC9F;IACL,CAAC;IAED,eAAe,CAAC,IAAa;QACzB,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC;SACtO;aAAM;YACH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;SAC9H;IACL,CAAC;IAED,wBAAwB,CAAC,QAAiB;;QACtC,IAAI,aAAa,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,gBAAgB,EAAE,CAAC;QACrD,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7C,IAAI,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrD,MAAA,IAAI,CAAC,OAAO,0CAAE,6BAA6B,CAAC,CAAC,IAAI,EAAE,EAAE;;oBACjD,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE;wBACrI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC7B,MAAA,IAAI,CAAC,OAAO,0CAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;qBACzC;gBACL,CAAC,CAAC,CAAC;aACN;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,UAAU,IAAI,YAAY,CAAC,QAAQ,KAAK,IAAI,EAAE;gBACjF,MAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3H,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;gBACpE,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjC,MAAA,IAAI,CAAC,OAAO,0CAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;iBAC7C;aACJ;SACJ;IACL,CAAC;IAED,mBAAmB,CAAC,aAA6B;QAC7C,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAAa,GAAG,aAAa,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,EAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAC,EAAE,GAAG,EAAE;;YAClE,MAAA,IAAI,CAAC,OAAO,0CAAE,UAAU,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,sBAAsB,CAAC,aAA6B;QAChD,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;SACnD;IACL,CAAC;IAED,oBAAoB,CAAC,SAAc;QAC/B,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,aAAa,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC5C,IAAI,CAAC,QAAQ,CAAC,EAAC,aAAa,EAAE,aAAa,EAAC,CAAC,CAAC;SACjD;IACL,CAAC;IAED,sBAAsB,CAAC,KAAa;;QAChC,MAAM,eAAe,GAAoB,CAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,iBAAiB,CAAC,KAAK,CAAgB,CAAA,CAAC,cAAc,EAAqB,CAAC;QACpI,OAAO,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,CAAC;IAED,yBAAyB,CAAC,KAAa;;QACnC,MAAM,cAAc,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,iBAAiB,CAAC,KAAK,CAAe,CAAC;QAC5E,MAAM,eAAe,GAAoB,cAAc,CAAC,cAAc,EAAqB,CAAC;QAC5F,IAAI,eAAe,EAAE;YACjB,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;YAG5B,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAC3C;IACL,CAAC;IAMD,wBAAwB,CAAC,KAAa;;QAClC,MAAA,MAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,iBAAiB,CAAC,KAAK,CAAgB,0CAAE,UAAU,kDAAI,CAAC;IAC3E,CAAC;IAEO,WAAW,CAAC,KAAU,EAAE,UAAe;QAC3C,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE;YAC9F,OAAO,IAAI,CAAC;SACf;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,mBAAmB,CAAC,KAA4B;QACpD,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5G,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACtC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SACxC;IACL,CAAC;IAEO,kBAAkB,CAAC,KAA2B;QAClD,MAAM,aAAa,GAAG,KAAqC,CAAC;QAC5D,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,IAAI,aAAa,CAAC,kBAAkB,GAAG,CAAC,EAAE;YACvF,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACtC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;SAC/C;IACL,CAAC;IAEO,oBAAoB;;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC/E,MAAM,kBAAkB,GAAG,YAAY,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACvE,OAAO,CACH,oBAAC,KAAK,CAAC,QAAQ;YACV,YAAY,IAAI,oBAAC,MAAM,IAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAC,eAAe,EACrE,KAAK,EAAE,IAAI,CAAC,wBAAwB,CAAC,EACrC,OAAO,EAAE,GAAG,EAAE;oBACV,IAAI,CAAC,eAAe,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBAC9C,CAAC;gBACtB,oBAAC,cAAc,OAAE,CACZ,EACR,MAAA,IAAI,CAAC,KAAK,CAAC,OAAO;eAAE,cAAc;YAClC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,wBAAwB;gBACtD,oBAAC,MAAM,IAAC,GAAG,EAAC,cAAc,EAClB,KAAK,EAAE,IAAI,CAAC,kCAAkC,CAAC,EAC/C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wBACX,IAAI,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;wBAC3E,CAAC,CAAC,MAA4B,CAAC,IAAI,EAAE,CAAC;oBAC3C,CAAC,IACJ,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAC,WAAW,OAAE,CAAC,CAAC,CAAC,oBAAC,oBAAoB,OAAE,CACpF,CACI,CACpB,CAAC;IACN,CAAC;IAEO,aAAa,CAAC,eAA6B;QAC/C,IAAI,eAAe,GAAG,eAAe,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE;YACxD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YACpE,IAAI,SAAS,EAAE;gBACX,eAAe,GAAG,SAAS,CAAC;aAC/B;SACJ;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,OAAO,CAAC,6BAAK,KAAK,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAC;YACnE,eAAe;YACf,UAAU,CACT,CAAC,CAAC;IACZ,CAAC;IAEO,iBAAiB;QACrB,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE;YAClC,OAAO,CACH,oBAAC,KAAK,IAAC,KAAK,EACR,8BAAM,SAAS,EAAC,iBAAiB,EAC3B,KAAK,EAAE,IAAI,CAAC,6FAA6F,CAAC,EAC1G,KAAK,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAC;oBAC1E,oBAAC,mBAAmB,IAAC,KAAK,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,GAAG,CAClD,EACL,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAClD,CAAC;SACL;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,oBAAoB;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnI,CAAC;IAED,cAAc;QACV,MAAM,KAOF,IAAI,CAAC,KAAK,EAPR,EACF,wBAAwB,EACxB,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAC/F,oBAAoB,EAAE,OAAO,EAC7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAE,qBAAqB,EACnF,WAAW,EAAE,YAAY,OAEf,EADP,IAAI,cANL,4SAOL,CAAa,CAAC;QAEf,OAAO,CACH,oBAAC,QAAQ,oBACD,IAAI,IACR,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACpD,CAAC,EACD,UAAU,EAAE,IAAI,CAAC,WAAW,EAC5B,WAAW,EAAE,IAAI,CAAC,YAAY,EAC9B,MAAM,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ;gBAC/C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,eAAe;gBAC7D,mBAAmB,EAAE,IAAI,CAAC,oBAAoB;aACjD,EACD,MAAM,EAAE;gBACJ,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,mBAAmB;gBACrE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;gBAC1D,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;oBAC/B,IAAI,CAAC,oBAAoB,CAAC,EAAC,mBAAmB,EAAE,OAAO,EAAC,CAAC,CAAC;oBAC1D,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,qBAAqB,EAAE;wBAC/B,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;qBACzC;gBACL,CAAC;gBACD,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;gBAC9D,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;gBAC5D,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;aACnE,EACD,MAAM,EAAE;gBACJ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC5C,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gBAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBACtD,YAAY,EAAE,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;gBAC3G,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;gBAC9D,aAAa,EAAE,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa;gBAC/G,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;gBAC1E,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;gBACxE,cAAc,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc;gBACtC,QAAQ,EAAE,IAAI,CAAC,sBAAsB;gBACrC,QAAQ,EAAE,IAAI,CAAC,SAAS;aAC3B,EACD,OAAO,EAAE;gBACL,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,cAAc,EAAE,IAAI,CAAC,oBAAoB,EAAE;gBAC3C,eAAe,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe;aAC5C,EACD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;;gBACrB,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,QAAQ,0CAAE,YAAY,EAAE,CAAC;gBAChD,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,yBAAyB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,SAAS,CAAC,EAAE;oBACxL,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;iBACtC;gBACD,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,cAAc,EAAE,CAAC;gBACrD,IAAI,CAAC,oBAAoB,CAAC,EAAC,WAAW,EAAE,WAAW,EAAC,CAAC,CAAC;gBACtD,IAAI,aAAa,EAAE;oBACf,aAAa,CAAC,KAAK,CAAC,CAAC;iBACxB;YACL,CAAC,EACD,gBAAgB,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,CAAC,oBAAoB,CAAC,EAAC,WAAW,EAAE,WAAW,EAAC,CAAC,CAAC;gBACtD,IAAI,gBAAgB,EAAE;oBAClB,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;iBACxC;YACL,CAAC,EACD,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EACxC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,EACjD,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC9B,IAAI,CAAC,QAAQ,CAAC,EAAC,kBAAkB,EAAE,OAAO,EAAC,CAAC,CAAC;gBAC7C,IAAI,oBAAoB,EAAE;oBACtB,oBAAoB,CAAC,OAAO,CAAC,CAAC;iBACjC;YACL,CAAC,EACD,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,EAC5C,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,aAA+B,EAC3E,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,oBAAoB,EACvE,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,EAClD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAC1C,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,EAC/D,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,uBAAuB,EAC7E,kBAAkB,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;gBACzC,IAAI,CAAC,oBAAoB,CAAC,EAAC,gBAAgB,EAAE,UAAU,EAAC,EAAE,QAAQ,CAAC,CAAC;YACxE,CAAC,EACD,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAC/C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAC7D,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;gBAC/B,IAAI,CAAC,oBAAoB,CAAC,EAAC,QAAQ,EAAE,CAAC,QAAQ,EAAC,EAAE,QAAQ,CAAC,CAAC;YAC/D,CAAC,IACH,CACL,CAAC;IACN,CAAC;IAEO,8BAA8B;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC7D,OAAO,CACH,6BAAK,GAAG,EAAC,0BAA0B,EAAC,KAAK,EAAE;oBACvC,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,MAAM;iBAChB;gBACG,6BAAK,GAAG,EAAC,kCAAkC,EAAC,KAAK,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAC,IAClF,IAAI,CAAC,cAAc,EAAE,CACpB;gBACL,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CACjC,CAAC,CAAC;SACf;QACD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IACjC,CAAC;IAED,MAAM;QACF,MAAM,EAAC,WAAW,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9C,IAAI,WAAW,IAAI,WAAW,EAAE;YAC5B,OAAO,CACH,oBAAC,UAAU,CAAC,MAAM,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrB,IAAI,CAAC,oBAAoB,CAAC,EAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC;gBAC7D,CAAC,EACD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;;oBACjB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;oBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;oBAChC,IAAI,MAAM,CAAC;oBAEX,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,EAAE;wBACtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;4BAClC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;yBACrD;6BAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;4BACzC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;yBACrD;wBACD,IAAI,MAAM,EAAE;4BACR,MAAM,KAAK,GAAG,MAAA,MAAC,MAAc,0CAAE,WAAW,0CAAE,KAAK,CAAC;4BAClD,IAAI,KAAK,KAAK,CAAC,EAAE;gCACb,OAAO,SAAS,CAAC;6BACpB;yBACJ;qBACJ;oBACD,OAAO,MAAM,CAAC;gBAClB,CAAC,EACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBACd,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtC,IAAI,SAAS,KAAK,cAAc,EAAE;wBAC9B,OAAO,WAAW,IAAI,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC;4BAC/D,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;4BACvC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;yBAC1C,CAAC,CAAC;qBACN;yBAAM,IAAI,SAAS,KAAK,YAAY,EAAE;wBACnC,OAAO,IAAI,CAAC,8BAA8B,EAAE,CAAC;qBAChD;yBAAM,IAAI,SAAS,KAAK,cAAc,EAAE;wBACrC,OAAO,WAAW,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;qBAChD;oBACD,OAAO,oBAAC,KAAK,OAAE,CAAA;gBACnB,CAAC,GAClB,CACL,CAAC;SACL;aAAM;YACH,OAAO,IAAI,CAAC,8BAA8B,EAAE,CAAC;SAChD;IACL,CAAC;;AA5wBa,6BAAY,GAAG;IACzB,aAAa,EAAE,yBAAyB,EAAE;CAC7C,CAAC","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 ColumnApi,\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?(): JSX.Element | 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 { id: number | string }> 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 private columnApi?: ColumnApi;\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\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 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.columnApi = event.columnApi;\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 && this.columnApi) {\r\n if (this.state.gridConfiguration.columnModel) {\r\n ColumnUtils.mergeColumnsState(this.state.gridConfiguration.columnModel, this.props.columnDefs as ColDef[]);\r\n this.columnApi.applyColumnState({state: this.state.gridConfiguration.columnModel, applyOrder: true});\r\n } else {\r\n this.columnApi.resetColumnState();\r\n const columnState = this.columnApi.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 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.CREATED:\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?.getFilterInstance(colId) as TextFilter).getModelFromUi() as TextFilterModel;\r\n return nameFilterModel && nameFilterModel.filter ? nameFilterModel.filter : \"\";\r\n }\r\n\r\n removeUiColumnFilterValue(colId: string) {\r\n const filterInstance = this.gridApi?.getFilterInstance(colId) as TextFilter;\r\n const nameFilterModel: TextFilterModel = filterInstance.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 filterInstance.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 applyUiColumnFilterValue(colId: string) {\r\n (this.gridApi?.getFilterInstance(colId) 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 inputReadonly: !!search ? search.inputReadonly : 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 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 }}\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.columnApi?.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 render() {\r\n const {filterPanel, detailPanel} = this.props;\r\n if (filterPanel || detailPanel) {\r\n return (\r\n <FlexLayout.Layout 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}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "d2coreui",
|
|
3
|
-
"version": "21.0.
|
|
3
|
+
"version": "21.0.11",
|
|
4
4
|
"description": "Core UI components and utilities library.",
|
|
5
5
|
"author": "Ipesoft s.r.o.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"draft-js": "0.11.0",
|
|
32
32
|
"draftail": "1.4.1",
|
|
33
33
|
"filtrex": "2.2.3",
|
|
34
|
-
"flexlayout-react": "0.
|
|
34
|
+
"flexlayout-react": "0.6.3",
|
|
35
35
|
"lodash": "4.17.21",
|
|
36
36
|
"memoize-one": "6.0.0",
|
|
37
37
|
"moment": "2.25.3",
|
|
@@ -5,6 +5,8 @@ $color_background_selected: white;
|
|
|
5
5
|
$color_background_unselected: #EFEFEF;
|
|
6
6
|
$color_content_background: white;
|
|
7
7
|
$color_background_border: #aaa;
|
|
8
|
+
$color_drag1_background: rgba(95, 134, 196, 0.1) !default;
|
|
9
|
+
$color_drag2_background: rgba(119, 166, 119, 0.075) !default;
|
|
8
10
|
|
|
9
11
|
$color_border: #eeeeee;
|
|
10
12
|
$color_border_line: #ddd;
|
|
@@ -23,7 +25,7 @@ $color_2: #EFEFEF;
|
|
|
23
25
|
$color_3: #EFEFEF;
|
|
24
26
|
$color_4: #EFEFEF;
|
|
25
27
|
$color_5: #bbb;
|
|
26
|
-
|
|
28
|
+
$color_6: scale_color($color_5, $lightness: -3%) !default;
|
|
27
29
|
|
|
28
30
|
$font-size: 14px;
|
|
29
31
|
$font-family: null;
|
|
@@ -32,5 +34,97 @@ $font-family: null;
|
|
|
32
34
|
border-top: 1px solid #ddd;
|
|
33
35
|
}
|
|
34
36
|
|
|
37
|
+
@mixin tabset_mixin {
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@mixin tabset_tabbar_mixin {
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@mixin tabset_header_mixin {
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@mixin tabset_selected_mixin {
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@mixin tabset_maximized_mixin {
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@mixin tab_top_mixin {
|
|
53
|
+
border-top-left-radius: 0px;
|
|
54
|
+
border-top-right-radius: 0px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@mixin tab_bottom_mixin {
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@mixin tab_button_mixin {
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@mixin tab_button_selected_mixin {
|
|
64
|
+
background-color: $color_background_selected;
|
|
65
|
+
color: $color_selected;
|
|
66
|
+
font-weight: 500;
|
|
67
|
+
border-bottom: 3px solid $color_content_background;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@mixin tab_button_unselected_mixin {
|
|
71
|
+
color: gray;
|
|
72
|
+
background-color: $color_background_unselected;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@mixin tab_button_hovered_mixin {
|
|
76
|
+
background-color: $color_background_selected;
|
|
77
|
+
color: $color_selected;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@mixin close_button_hovered_mixin {
|
|
81
|
+
//background-color:var(--color-3);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@mixin toolbar_button_hovered_mixin {
|
|
85
|
+
//background-color:var(--color-2);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@mixin border_mixin {
|
|
89
|
+
background-color: $color_border;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@mixin border_button_mixin {
|
|
93
|
+
background-color: var(--color-2);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@mixin border_button_selected_mixin {
|
|
97
|
+
background-color: $color_border_line;
|
|
98
|
+
color: $color_text;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@mixin border_button_unselected_mixin {
|
|
102
|
+
color: gray;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@mixin border_button_hovered_mixin {
|
|
106
|
+
background-color: $color_border_line;
|
|
107
|
+
color: $color_text;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@mixin splitter_mixin {
|
|
111
|
+
background-color: $color_splitter;
|
|
112
|
+
//OK
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@mixin splitter_hover_mixin {
|
|
116
|
+
background-color: $color_splitter_hover;
|
|
117
|
+
//OK
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@mixin splitter_drag_mixin {
|
|
121
|
+
border-radius: 5px;
|
|
122
|
+
background-color: $color_splitter_drag;
|
|
123
|
+
//OK
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@mixin splitter_border_mixin {
|
|
127
|
+
}
|
|
128
|
+
|
|
35
129
|
@import "flexLayoutBase";
|
|
36
130
|
|