d2aura 23.0.50 → 23.0.52
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/coreui/components/about/aboutModalDialog.js +1 -1
- package/coreui/components/about/aboutModalDialog.js.map +1 -1
- package/coreui/components/assignEntitiesToEntity/abstractEntitiesOnEntityList.d.ts +1 -0
- package/coreui/components/assignEntitiesToEntity/abstractEntitiesOnEntityList.js +16 -14
- package/coreui/components/assignEntitiesToEntity/abstractEntitiesOnEntityList.js.map +1 -1
- package/coreui/components/editor/abstractEntityConfigPanel.js +0 -1
- package/coreui/components/editor/abstractEntityConfigPanel.js.map +1 -1
- package/package.json +2 -2
|
@@ -44,7 +44,7 @@ export default class AboutModalDialog extends React.Component {
|
|
|
44
44
|
}
|
|
45
45
|
getContent(aboutData) {
|
|
46
46
|
return [
|
|
47
|
-
{ title: i18n("
|
|
47
|
+
{ title: i18n("Environment"), value: process.env.NODE_ENV ?? "" },
|
|
48
48
|
{ title: i18n("Build Version"), value: aboutData.version },
|
|
49
49
|
{
|
|
50
50
|
title: i18n("Built On"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aboutModalDialog.js","sourceRoot":"","sources":["../../../../../coreui/components/about/aboutModalDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CheckOutlined, CopyOutlined, LoadingOutlined} from \"@ant-design/icons\";\r\nimport {UnixTime} from \"d2jsapi\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\r\nimport logo from \"../../images/logo.svg\"\r\nimport {Button} from \"antd\";\r\nimport {ClipboardUtils} from \"d2coreui/components/clipboard/clipboardUtils\";\r\nimport {ERROR_COLOR} from \"../../../api/constants/constants\";\r\n\r\ninterface AboutData {\r\n buildDate: UnixTime\r\n version: string\r\n branch: string\r\n commitHash: string\r\n lastCommitDateTime: string\r\n}\r\n\r\ninterface Props {\r\n applicationName: string\r\n visible: boolean\r\n\r\n onClose(): void\r\n}\r\n\r\ninterface State {\r\n loading: boolean\r\n isError: boolean\r\n aboutData?: AboutData\r\n copyButtonIcon: React.ReactNode\r\n}\r\n\r\nexport default class AboutModalDialog extends React.Component<Props, State> {\r\n constructor(props: Readonly<Props>) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n isError: false,\r\n copyButtonIcon: <CopyOutlined/>,\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<Props>) {\r\n if (!prevProps.visible && this.props.visible) {\r\n this.onDialogOpen();\r\n }\r\n }\r\n\r\n private async onDialogOpen() {\r\n this.setState({aboutData: undefined, loading: true, isError: false});\r\n const response = await fetch(\"./version.json\");\r\n if (response.ok) {\r\n const aboutData: AboutData = await response.json();\r\n this.setState({aboutData: aboutData, loading: false});\r\n } else {\r\n this.setState({isError: true, loading: false});\r\n }\r\n }\r\n\r\n private renderItem(title: string, value: string) {\r\n return (\r\n <div key={title} style={{display: \"flex\", justifyContent: \"space-between\"}}>\r\n <span style={{fontWeight: 200}}>{title}</span>\r\n <span>{value}</span>\r\n </div>\r\n )\r\n }\r\n\r\n private onCopyToClipboard(aboutData: AboutData) {\r\n const text = this.getContent(aboutData).map(value => `${value.title}: ${value.value}`).join(\"\\n\");\r\n ClipboardUtils.copyToClipboard(text);\r\n }\r\n\r\n private getContent(aboutData: AboutData): { title: string, value: string }[] {\r\n return [\r\n {title: i18n(\"Enviroment\"), value: process.env.NODE_ENV ?? \"\"},\r\n {title: i18n(\"Build Version\"), value: aboutData.version},\r\n {\r\n title: i18n(\"Built On\"),\r\n value: dayjs(aboutData.buildDate).format(LocaleHolder.getDateTimeFormat(true, true, false))\r\n },\r\n {title: i18n(\"Hash\"), value: aboutData.commitHash},\r\n ]\r\n }\r\n\r\n render() {\r\n const {aboutData} = this.state;\r\n\r\n return (\r\n <ModalDialog\r\n styles={{\r\n body: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n }\r\n }}\r\n mode={ModalDialogMode.OK}\r\n open={this.props.visible}\r\n title={\r\n <div style={{display: \"inline-flex\", alignItems: \"center\"}}>\r\n <img style={{marginRight: 6, width: 18}} src={logo} alt=\"logo\"/>\r\n {i18n(\"About\")} {this.props.applicationName}\r\n </div>\r\n }\r\n initialWidth={500}\r\n initialHeight={284}\r\n onCancel={this.props.onClose}\r\n footer={\r\n <Button\r\n type=\"primary\"\r\n block\r\n disabled={!this.state.aboutData}\r\n icon={this.state.copyButtonIcon}\r\n onClick={() => {\r\n if (aboutData) {\r\n this.setState({copyButtonIcon: <CheckOutlined/>});\r\n this.onCopyToClipboard(aboutData);\r\n setTimeout(() => {\r\n this.setState({copyButtonIcon: <CopyOutlined/>});\r\n }, 1000);\r\n }\r\n }}\r\n >\r\n {i18n(\"Copy\")}\r\n </Button>\r\n }\r\n >\r\n <div style={{height: \"100%\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\"}}>\r\n {this.state.loading && <LoadingOutlined/>}\r\n {this.state.isError && <span style={{color: ERROR_COLOR}}>{i18n(\"Error loading data\")}</span>}\r\n {aboutData &&\r\n <div\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n lineHeight: 1.9,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\"\r\n }}\r\n >\r\n <div>\r\n {this.getContent(aboutData).map(value => this.renderItem(value.title, value.value))}\r\n </div>\r\n <div style={{textAlign: \"center\", fontSize: 13}}>\r\n Copyright © {new Date().getFullYear()},\r\n <a href=\"https://www.ipesoft.com/\" target=\"_blank\"> IPESOFT s.r.o.</a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </ModalDialog>\r\n );\r\n }\r\n\r\n}"]}
|
|
1
|
+
{"version":3,"file":"aboutModalDialog.js","sourceRoot":"","sources":["../../../../../coreui/components/about/aboutModalDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CheckOutlined, CopyOutlined, LoadingOutlined} from \"@ant-design/icons\";\r\nimport {UnixTime} from \"d2jsapi\";\r\nimport dayjs from \"d2core/dayjs\";\r\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\r\nimport logo from \"../../images/logo.svg\"\r\nimport {Button} from \"antd\";\r\nimport {ClipboardUtils} from \"d2coreui/components/clipboard/clipboardUtils\";\r\nimport {ERROR_COLOR} from \"../../../api/constants/constants\";\r\n\r\ninterface AboutData {\r\n buildDate: UnixTime\r\n version: string\r\n branch: string\r\n commitHash: string\r\n lastCommitDateTime: string\r\n}\r\n\r\ninterface Props {\r\n applicationName: string\r\n visible: boolean\r\n\r\n onClose(): void\r\n}\r\n\r\ninterface State {\r\n loading: boolean\r\n isError: boolean\r\n aboutData?: AboutData\r\n copyButtonIcon: React.ReactNode\r\n}\r\n\r\nexport default class AboutModalDialog extends React.Component<Props, State> {\r\n constructor(props: Readonly<Props>) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n isError: false,\r\n copyButtonIcon: <CopyOutlined/>,\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<Props>) {\r\n if (!prevProps.visible && this.props.visible) {\r\n this.onDialogOpen();\r\n }\r\n }\r\n\r\n private async onDialogOpen() {\r\n this.setState({aboutData: undefined, loading: true, isError: false});\r\n const response = await fetch(\"./version.json\");\r\n if (response.ok) {\r\n const aboutData: AboutData = await response.json();\r\n this.setState({aboutData: aboutData, loading: false});\r\n } else {\r\n this.setState({isError: true, loading: false});\r\n }\r\n }\r\n\r\n private renderItem(title: string, value: string) {\r\n return (\r\n <div key={title} style={{display: \"flex\", justifyContent: \"space-between\"}}>\r\n <span style={{fontWeight: 200}}>{title}</span>\r\n <span>{value}</span>\r\n </div>\r\n )\r\n }\r\n\r\n private onCopyToClipboard(aboutData: AboutData) {\r\n const text = this.getContent(aboutData).map(value => `${value.title}: ${value.value}`).join(\"\\n\");\r\n ClipboardUtils.copyToClipboard(text);\r\n }\r\n\r\n private getContent(aboutData: AboutData): { title: string, value: string }[] {\r\n return [\r\n {title: i18n(\"Environment\"), value: process.env.NODE_ENV ?? \"\"},\r\n {title: i18n(\"Build Version\"), value: aboutData.version},\r\n {\r\n title: i18n(\"Built On\"),\r\n value: dayjs(aboutData.buildDate).format(LocaleHolder.getDateTimeFormat(true, true, false))\r\n },\r\n {title: i18n(\"Hash\"), value: aboutData.commitHash},\r\n ]\r\n }\r\n\r\n render() {\r\n const {aboutData} = this.state;\r\n\r\n return (\r\n <ModalDialog\r\n styles={{\r\n body: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n }\r\n }}\r\n mode={ModalDialogMode.OK}\r\n open={this.props.visible}\r\n title={\r\n <div style={{display: \"inline-flex\", alignItems: \"center\"}}>\r\n <img style={{marginRight: 6, width: 18}} src={logo} alt=\"logo\"/>\r\n {i18n(\"About\")} {this.props.applicationName}\r\n </div>\r\n }\r\n initialWidth={500}\r\n initialHeight={284}\r\n onCancel={this.props.onClose}\r\n footer={\r\n <Button\r\n type=\"primary\"\r\n block\r\n disabled={!this.state.aboutData}\r\n icon={this.state.copyButtonIcon}\r\n onClick={() => {\r\n if (aboutData) {\r\n this.setState({copyButtonIcon: <CheckOutlined/>});\r\n this.onCopyToClipboard(aboutData);\r\n setTimeout(() => {\r\n this.setState({copyButtonIcon: <CopyOutlined/>});\r\n }, 1000);\r\n }\r\n }}\r\n >\r\n {i18n(\"Copy\")}\r\n </Button>\r\n }\r\n >\r\n <div style={{height: \"100%\", display: \"flex\", justifyContent: \"center\", alignItems: \"center\"}}>\r\n {this.state.loading && <LoadingOutlined/>}\r\n {this.state.isError && <span style={{color: ERROR_COLOR}}>{i18n(\"Error loading data\")}</span>}\r\n {aboutData &&\r\n <div\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n lineHeight: 1.9,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\"\r\n }}\r\n >\r\n <div>\r\n {this.getContent(aboutData).map(value => this.renderItem(value.title, value.value))}\r\n </div>\r\n <div style={{textAlign: \"center\", fontSize: 13}}>\r\n Copyright © {new Date().getFullYear()},\r\n <a href=\"https://www.ipesoft.com/\" target=\"_blank\"> IPESOFT s.r.o.</a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </ModalDialog>\r\n );\r\n }\r\n\r\n}"]}
|
|
@@ -28,6 +28,7 @@ export declare abstract class AbstractEntitiesOnEntityList<ME extends Entity, SE
|
|
|
28
28
|
protected renderSelectModalDialog(): React.ReactNode | undefined;
|
|
29
29
|
protected renderControlPanel(): JSX.Element | null;
|
|
30
30
|
protected noRecordsOverlayRenderer(): React.JSX.Element;
|
|
31
|
+
protected onExcludeRecords(): void;
|
|
31
32
|
protected renderToolbarButtons(): React.JSX.Element;
|
|
32
33
|
private onSelectionChanged;
|
|
33
34
|
protected addRecordsToGrid(records: SE[], idToSelect?: number): void;
|
|
@@ -16,6 +16,7 @@ export class AbstractEntitiesOnEntityList extends React.Component {
|
|
|
16
16
|
};
|
|
17
17
|
this.onSelectionChanged = this.onSelectionChanged.bind(this);
|
|
18
18
|
this.renderControlPanel = this.renderControlPanel.bind(this);
|
|
19
|
+
this.onExcludeRecords = this.onExcludeRecords.bind(this);
|
|
19
20
|
}
|
|
20
21
|
componentDidUpdate(prevProps) {
|
|
21
22
|
if (prevProps.disabled !== this.props.disabled || prevProps.editedEntity.id !== this.props.editedEntity.id) {
|
|
@@ -31,6 +32,20 @@ export class AbstractEntitiesOnEntityList extends React.Component {
|
|
|
31
32
|
noRecordsOverlayRenderer() {
|
|
32
33
|
return React.createElement("div", null);
|
|
33
34
|
}
|
|
35
|
+
onExcludeRecords() {
|
|
36
|
+
const subEntities = this.getSubEntities();
|
|
37
|
+
this.state.selectedRecords.forEach(subEntityToExclude => {
|
|
38
|
+
const index = subEntities.findIndex(value => value.id === subEntityToExclude.id);
|
|
39
|
+
subEntities.splice(index, 1);
|
|
40
|
+
});
|
|
41
|
+
this.props.onChange?.();
|
|
42
|
+
if (this.state.fullscreenModalOpen) {
|
|
43
|
+
this.fullscreenGridApi?.applyTransaction({ remove: this.state.selectedRecords });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.gridApi?.applyTransaction({ remove: this.state.selectedRecords });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
34
49
|
renderToolbarButtons() {
|
|
35
50
|
return React.createElement(React.Fragment, null,
|
|
36
51
|
React.createElement(Button, { title: i18n("Add Record"), disabled: this.props.disabled, onClick: () => {
|
|
@@ -42,20 +57,7 @@ export class AbstractEntitiesOnEntityList extends React.Component {
|
|
|
42
57
|
mode: "YES_NO",
|
|
43
58
|
title: React.createElement("span", { style: { whiteSpace: "nowrap" } }, i18n("Exclude %n records?", this.state.selectedRecords.length)),
|
|
44
59
|
icon: React.createElement(DeleteOutlined, { style: { color: ERROR_COLOR } }),
|
|
45
|
-
onOk:
|
|
46
|
-
const subEntities = this.getSubEntities();
|
|
47
|
-
this.state.selectedRecords.forEach(subEntityToExclude => {
|
|
48
|
-
const index = subEntities.findIndex(value => value.id === subEntityToExclude.id);
|
|
49
|
-
subEntities.splice(index, 1);
|
|
50
|
-
});
|
|
51
|
-
this.props.onChange?.();
|
|
52
|
-
if (this.state.fullscreenModalOpen) {
|
|
53
|
-
this.fullscreenGridApi?.applyTransaction({ remove: this.state.selectedRecords });
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
this.gridApi?.applyTransaction({ remove: this.state.selectedRecords });
|
|
57
|
-
}
|
|
58
|
-
}
|
|
60
|
+
onOk: this.onExcludeRecords
|
|
59
61
|
});
|
|
60
62
|
} },
|
|
61
63
|
React.createElement(CloseCircleOutlined, null)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractEntitiesOnEntityList.js","sourceRoot":"","sources":["../../../../../coreui/components/assignEntitiesToEntity/abstractEntitiesOnEntityList.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport Entity from \"../../../api/types/entity\";\r\nimport {DataGridColDef} from \"d2coreui/components/grid/dataGrid\";\r\nimport {GridApi, GridReadyEvent, SelectionChangedEvent} from \"ag-grid-community\";\r\nimport {Button} from \"antd\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CloseCircleOutlined, DeleteOutlined, FullscreenOutlined, PlusCircleOutlined} from \"@ant-design/icons\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport ExtendedDataGrid from \"d2coreui/components/grid/extendedDataGrid\";\r\nimport {ERROR_COLOR, WARNING_COLOR} from \"../../../api/constants/constants\";\r\n\r\nexport interface AbstractEntitiesOnEntityListProps<ME extends Entity> {\r\n editedEntity: ME\r\n height: number\r\n disabled?: boolean\r\n isHighlighted?: boolean\r\n isError?: boolean\r\n\r\n onChange?(): void\r\n}\r\n\r\nexport interface AbstractEntitiesOnEntityListState<SE extends Entity> {\r\n selectedRecords: SE[]\r\n selectModalDialogVisible: boolean\r\n columnDefs: DataGridColDef[]\r\n fullscreenModalOpen: boolean\r\n}\r\n\r\nexport abstract class AbstractEntitiesOnEntityList<\r\n ME extends Entity,\r\n SE extends Entity,\r\n P extends AbstractEntitiesOnEntityListProps<ME>,\r\n S extends AbstractEntitiesOnEntityListState<SE>\r\n> extends React.Component<P, S> {\r\n protected gridApi?: GridApi;\r\n protected fullscreenGridApi?: GridApi;\r\n protected initialColumnDefs?: DataGridColDef[];\r\n\r\n protected constructor(props: Readonly<P>) {\r\n super(props);\r\n\r\n this.onSelectionChanged = this.onSelectionChanged.bind(this);\r\n this.renderControlPanel = this.renderControlPanel.bind(this);\r\n }\r\n\r\n protected initialState: AbstractEntitiesOnEntityListState<SE> = {\r\n selectedRecords: [],\r\n selectModalDialogVisible: false,\r\n columnDefs: this.getInitialColumnDefs(),\r\n fullscreenModalOpen: false,\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<P>) {\r\n if (prevProps.disabled !== this.props.disabled || prevProps.editedEntity.id !== this.props.editedEntity.id) {\r\n this.gridApi?.updateGridOptions({rowData: this.getSubEntities()});\r\n }\r\n }\r\n\r\n abstract getInitialColumnDefs(): DataGridColDef[];\r\n\r\n abstract getSubEntities(): SE[];\r\n\r\n protected renderSelectModalDialog(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderControlPanel(): JSX.Element | null {\r\n return null;\r\n }\r\n\r\n protected noRecordsOverlayRenderer() {\r\n return <div/>\r\n }\r\n\r\n protected renderToolbarButtons() {\r\n return <>\r\n <Button\r\n title={i18n(\"Add Record\")}\r\n disabled={this.props.disabled}\r\n onClick={() => {\r\n this.setState({selectModalDialogVisible: true});\r\n }}\r\n >\r\n <PlusCircleOutlined/>\r\n </Button>\r\n <Button\r\n title={i18n(\"Exclude Record\")}\r\n disabled={this.state.selectedRecords.length === 0 || this.props.disabled}\r\n onClick={() => {\r\n ModalDialog.delete({\r\n mode: ModalDialogMode.YES_NO,\r\n title:\r\n <span style={{whiteSpace: \"nowrap\"}}>\r\n {i18n(\"Exclude %n records?\", this.state.selectedRecords.length)}\r\n </span>,\r\n icon: <DeleteOutlined style={{color: ERROR_COLOR}}/>,\r\n onOk: () => {\r\n const subEntities = this.getSubEntities();\r\n\r\n this.state.selectedRecords.forEach(subEntityToExclude => {\r\n const index = subEntities.findIndex(value => value.id === subEntityToExclude.id);\r\n subEntities.splice(index, 1);\r\n });\r\n\r\n this.props.onChange?.();\r\n if (this.state.fullscreenModalOpen) {\r\n this.fullscreenGridApi?.applyTransaction({remove: this.state.selectedRecords});\r\n } else {\r\n this.gridApi?.applyTransaction({remove: this.state.selectedRecords});\r\n }\r\n }\r\n });\r\n }}\r\n >\r\n <CloseCircleOutlined/>\r\n </Button>\r\n </>;\r\n }\r\n\r\n private onSelectionChanged(event: SelectionChangedEvent): void {\r\n const selectedRows = event.api.getSelectedRows();\r\n this.setState({selectedRecords: selectedRows});\r\n }\r\n\r\n protected addRecordsToGrid(records: SE[], idToSelect?: number) {\r\n if (records.length > 0) {\r\n if (this.state.fullscreenModalOpen) {\r\n this.fullscreenGridApi?.applyTransaction({add: records});\r\n } else {\r\n this.gridApi?.applyTransaction({add: records});\r\n }\r\n this.props.onChange?.();\r\n }\r\n\r\n if (idToSelect !== undefined) {\r\n let rowNode;\r\n if (this.state.fullscreenModalOpen) {\r\n rowNode = this.fullscreenGridApi?.getRowNode(idToSelect.toString());\r\n this.fullscreenGridApi?.ensureNodeVisible(rowNode);\r\n } else {\r\n rowNode = this.gridApi?.getRowNode(idToSelect.toString());\r\n this.gridApi?.ensureNodeVisible(rowNode);\r\n }\r\n\r\n rowNode?.setSelected(true, true);\r\n }\r\n }\r\n\r\n private renderFullScreenModalDialog() {\r\n return (\r\n <ModalDialog\r\n styles={{body: {paddingTop: 0}}}\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n open={this.state.fullscreenModalOpen}\r\n onCancel={() => this.setState({fullscreenModalOpen: false})}\r\n afterClose={() => {\r\n if (this.renderSelectModalDialog()) {\r\n this.gridApi?.updateGridOptions({rowData: this.getSubEntities()});\r\n } else {\r\n this.gridApi?.refreshCells({force: true});\r\n }\r\n }}\r\n title={i18n(\"Fullscreen\")}\r\n initialWidth={800}\r\n initialHeight={window.innerHeight - 20}\r\n >\r\n {this.renderGrid(true)}\r\n </ModalDialog>\r\n )\r\n }\r\n\r\n protected renderGrid(fullscreen: boolean) {\r\n const subEntities = this.getSubEntities();\r\n\r\n let tablePanelStyleBorder: React.CSSProperties[\"border\"] = \"unset\";\r\n if (this.props.isHighlighted) {\r\n tablePanelStyleBorder = `1px solid ${WARNING_COLOR}`;\r\n } else if (this.props.isError) {\r\n tablePanelStyleBorder = `1px solid ${ERROR_COLOR}`;\r\n }\r\n\r\n return (\r\n <ExtendedDataGrid\r\n onGridReady={(params: GridReadyEvent) => {\r\n if (fullscreen) {\r\n this.fullscreenGridApi = params.api;\r\n } else {\r\n this.gridApi = params.api;\r\n }\r\n }}\r\n defaultGridConfiguration={{pageSize: -1}}\r\n columnDefs={this.state.columnDefs}\r\n rowData={subEntities}\r\n onLoadData={(callback) => {\r\n callback(subEntities.length);\r\n }}\r\n search={{\r\n hidden: true,\r\n searchButtonHidden: true,\r\n }}\r\n rowSelection=\"multiple\"\r\n onSelectionChanged={this.onSelectionChanged}\r\n toolbar={{\r\n renderToolbar: (originalSearchBar) => this.renderSelectModalDialog() ? originalSearchBar : <></>,\r\n toolbarButtons: this.renderSelectModalDialog() ? this.renderToolbarButtons() : <></>,\r\n extraContent:\r\n !fullscreen\r\n ?\r\n <FullscreenOutlined\r\n style={{cursor: \"pointer\", height: 32}}\r\n title={i18n(\"Fullscreen\")}\r\n onClick={() => this.setState({fullscreenModalOpen: true})}\r\n />\r\n :\r\n undefined\r\n }}\r\n tablePanelStyle={{\r\n marginTop: this.renderSelectModalDialog() ? 4 : 0,\r\n border: tablePanelStyleBorder,\r\n }}\r\n controlPanel={{\r\n renderer: this.renderControlPanel\r\n }}\r\n panelStyle={{padding: 0}}\r\n tableConfigVisible={false}\r\n noRecordsOverlayRenderer={() => {\r\n if (this.getSubEntities().length === 0) {\r\n return this.noRecordsOverlayRenderer();\r\n }\r\n return <div/>\r\n }}\r\n singleClickEdit\r\n stopEditingWhenCellsLoseFocus\r\n enterNavigatesVerticallyAfterEdit\r\n />\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <div style={{height: this.props.height, overflow: \"auto\", resize: \"vertical\"}}>\r\n {this.renderFullScreenModalDialog()}\r\n {this.renderSelectModalDialog()}\r\n {this.renderGrid(false)}\r\n </div>\r\n );\r\n }\r\n\r\n}"]}
|
|
1
|
+
{"version":3,"file":"abstractEntitiesOnEntityList.js","sourceRoot":"","sources":["../../../../../coreui/components/assignEntitiesToEntity/abstractEntitiesOnEntityList.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport Entity from \"../../../api/types/entity\";\r\nimport {DataGridColDef} from \"d2coreui/components/grid/dataGrid\";\r\nimport {GridApi, GridReadyEvent, SelectionChangedEvent} from \"ag-grid-community\";\r\nimport {Button} from \"antd\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CloseCircleOutlined, DeleteOutlined, FullscreenOutlined, PlusCircleOutlined} from \"@ant-design/icons\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport ExtendedDataGrid from \"d2coreui/components/grid/extendedDataGrid\";\r\nimport {ERROR_COLOR, WARNING_COLOR} from \"../../../api/constants/constants\";\r\n\r\nexport interface AbstractEntitiesOnEntityListProps<ME extends Entity> {\r\n editedEntity: ME\r\n height: number\r\n disabled?: boolean\r\n isHighlighted?: boolean\r\n isError?: boolean\r\n\r\n onChange?(): void\r\n}\r\n\r\nexport interface AbstractEntitiesOnEntityListState<SE extends Entity> {\r\n selectedRecords: SE[]\r\n selectModalDialogVisible: boolean\r\n columnDefs: DataGridColDef[]\r\n fullscreenModalOpen: boolean\r\n}\r\n\r\nexport abstract class AbstractEntitiesOnEntityList<\r\n ME extends Entity,\r\n SE extends Entity,\r\n P extends AbstractEntitiesOnEntityListProps<ME>,\r\n S extends AbstractEntitiesOnEntityListState<SE>\r\n> extends React.Component<P, S> {\r\n protected gridApi?: GridApi;\r\n protected fullscreenGridApi?: GridApi;\r\n protected initialColumnDefs?: DataGridColDef[];\r\n\r\n protected constructor(props: Readonly<P>) {\r\n super(props);\r\n\r\n this.onSelectionChanged = this.onSelectionChanged.bind(this);\r\n this.renderControlPanel = this.renderControlPanel.bind(this);\r\n this.onExcludeRecords = this.onExcludeRecords.bind(this);\r\n }\r\n\r\n protected initialState: AbstractEntitiesOnEntityListState<SE> = {\r\n selectedRecords: [],\r\n selectModalDialogVisible: false,\r\n columnDefs: this.getInitialColumnDefs(),\r\n fullscreenModalOpen: false,\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<P>) {\r\n if (prevProps.disabled !== this.props.disabled || prevProps.editedEntity.id !== this.props.editedEntity.id) {\r\n this.gridApi?.updateGridOptions({rowData: this.getSubEntities()});\r\n }\r\n }\r\n\r\n abstract getInitialColumnDefs(): DataGridColDef[];\r\n\r\n abstract getSubEntities(): SE[];\r\n\r\n protected renderSelectModalDialog(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderControlPanel(): JSX.Element | null {\r\n return null;\r\n }\r\n\r\n protected noRecordsOverlayRenderer() {\r\n return <div/>\r\n }\r\n\r\n protected onExcludeRecords() {\r\n const subEntities = this.getSubEntities();\r\n\r\n this.state.selectedRecords.forEach(subEntityToExclude => {\r\n const index = subEntities.findIndex(value => value.id === subEntityToExclude.id);\r\n subEntities.splice(index, 1);\r\n });\r\n\r\n this.props.onChange?.();\r\n if (this.state.fullscreenModalOpen) {\r\n this.fullscreenGridApi?.applyTransaction({remove: this.state.selectedRecords});\r\n } else {\r\n this.gridApi?.applyTransaction({remove: this.state.selectedRecords});\r\n }\r\n }\r\n\r\n protected renderToolbarButtons() {\r\n return <>\r\n <Button\r\n title={i18n(\"Add Record\")}\r\n disabled={this.props.disabled}\r\n onClick={() => {\r\n this.setState({selectModalDialogVisible: true});\r\n }}\r\n >\r\n <PlusCircleOutlined/>\r\n </Button>\r\n <Button\r\n title={i18n(\"Exclude Record\")}\r\n disabled={this.state.selectedRecords.length === 0 || this.props.disabled}\r\n onClick={() => {\r\n ModalDialog.delete({\r\n mode: ModalDialogMode.YES_NO,\r\n title:\r\n <span style={{whiteSpace: \"nowrap\"}}>\r\n {i18n(\"Exclude %n records?\", this.state.selectedRecords.length)}\r\n </span>,\r\n icon: <DeleteOutlined style={{color: ERROR_COLOR}}/>,\r\n onOk: this.onExcludeRecords\r\n });\r\n }}\r\n >\r\n <CloseCircleOutlined/>\r\n </Button>\r\n </>;\r\n }\r\n\r\n private onSelectionChanged(event: SelectionChangedEvent): void {\r\n const selectedRows = event.api.getSelectedRows();\r\n this.setState({selectedRecords: selectedRows});\r\n }\r\n\r\n protected addRecordsToGrid(records: SE[], idToSelect?: number) {\r\n if (records.length > 0) {\r\n if (this.state.fullscreenModalOpen) {\r\n this.fullscreenGridApi?.applyTransaction({add: records});\r\n } else {\r\n this.gridApi?.applyTransaction({add: records});\r\n }\r\n this.props.onChange?.();\r\n }\r\n\r\n if (idToSelect !== undefined) {\r\n let rowNode;\r\n if (this.state.fullscreenModalOpen) {\r\n rowNode = this.fullscreenGridApi?.getRowNode(idToSelect.toString());\r\n this.fullscreenGridApi?.ensureNodeVisible(rowNode);\r\n } else {\r\n rowNode = this.gridApi?.getRowNode(idToSelect.toString());\r\n this.gridApi?.ensureNodeVisible(rowNode);\r\n }\r\n\r\n rowNode?.setSelected(true, true);\r\n }\r\n }\r\n\r\n private renderFullScreenModalDialog() {\r\n return (\r\n <ModalDialog\r\n styles={{body: {paddingTop: 0}}}\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n open={this.state.fullscreenModalOpen}\r\n onCancel={() => this.setState({fullscreenModalOpen: false})}\r\n afterClose={() => {\r\n if (this.renderSelectModalDialog()) {\r\n this.gridApi?.updateGridOptions({rowData: this.getSubEntities()});\r\n } else {\r\n this.gridApi?.refreshCells({force: true});\r\n }\r\n }}\r\n title={i18n(\"Fullscreen\")}\r\n initialWidth={800}\r\n initialHeight={window.innerHeight - 20}\r\n >\r\n {this.renderGrid(true)}\r\n </ModalDialog>\r\n )\r\n }\r\n\r\n protected renderGrid(fullscreen: boolean) {\r\n const subEntities = this.getSubEntities();\r\n\r\n let tablePanelStyleBorder: React.CSSProperties[\"border\"] = \"unset\";\r\n if (this.props.isHighlighted) {\r\n tablePanelStyleBorder = `1px solid ${WARNING_COLOR}`;\r\n } else if (this.props.isError) {\r\n tablePanelStyleBorder = `1px solid ${ERROR_COLOR}`;\r\n }\r\n\r\n return (\r\n <ExtendedDataGrid\r\n onGridReady={(params: GridReadyEvent) => {\r\n if (fullscreen) {\r\n this.fullscreenGridApi = params.api;\r\n } else {\r\n this.gridApi = params.api;\r\n }\r\n }}\r\n defaultGridConfiguration={{pageSize: -1}}\r\n columnDefs={this.state.columnDefs}\r\n rowData={subEntities}\r\n onLoadData={(callback) => {\r\n callback(subEntities.length);\r\n }}\r\n search={{\r\n hidden: true,\r\n searchButtonHidden: true,\r\n }}\r\n rowSelection=\"multiple\"\r\n onSelectionChanged={this.onSelectionChanged}\r\n toolbar={{\r\n renderToolbar: (originalSearchBar) => this.renderSelectModalDialog() ? originalSearchBar : <></>,\r\n toolbarButtons: this.renderSelectModalDialog() ? this.renderToolbarButtons() : <></>,\r\n extraContent:\r\n !fullscreen\r\n ?\r\n <FullscreenOutlined\r\n style={{cursor: \"pointer\", height: 32}}\r\n title={i18n(\"Fullscreen\")}\r\n onClick={() => this.setState({fullscreenModalOpen: true})}\r\n />\r\n :\r\n undefined\r\n }}\r\n tablePanelStyle={{\r\n marginTop: this.renderSelectModalDialog() ? 4 : 0,\r\n border: tablePanelStyleBorder,\r\n }}\r\n controlPanel={{\r\n renderer: this.renderControlPanel\r\n }}\r\n panelStyle={{padding: 0}}\r\n tableConfigVisible={false}\r\n noRecordsOverlayRenderer={() => {\r\n if (this.getSubEntities().length === 0) {\r\n return this.noRecordsOverlayRenderer();\r\n }\r\n return <div/>\r\n }}\r\n singleClickEdit\r\n stopEditingWhenCellsLoseFocus\r\n enterNavigatesVerticallyAfterEdit\r\n />\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <div style={{height: this.props.height, overflow: \"auto\", resize: \"vertical\"}}>\r\n {this.renderFullScreenModalDialog()}\r\n {this.renderSelectModalDialog()}\r\n {this.renderGrid(false)}\r\n </div>\r\n );\r\n }\r\n\r\n}"]}
|
|
@@ -202,7 +202,6 @@ export default class AbstractEntityConfigPanel extends React.Component {
|
|
|
202
202
|
width: "100%",
|
|
203
203
|
display: "flex",
|
|
204
204
|
justifyContent: "space-between",
|
|
205
|
-
alignItems: "baseline",
|
|
206
205
|
} },
|
|
207
206
|
React.createElement("span", null, i18n("Name")),
|
|
208
207
|
this.isNewEntity() &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractEntityConfigPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/editor/abstractEntityConfigPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {cloneDeep, isEqual, omit} from \"lodash\";\r\nimport {Button, Col, Divider, Form, Input, InputRef, Row, Switch} from \"antd\";\r\nimport AbstractEntityApi from \"../../../api/abstractEntityApi\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CloseCircleOutlined, EditOutlined, SaveOutlined} from \"@ant-design/icons\";\r\nimport {UndoIcon} from \"d2coreui/components/icons/undoIcon\";\r\nimport DetailHeaderPanel from \"../grid/detailHeaderPanel\";\r\nimport {AbstractBreadcrumbItem} from \"../../abstractListPanel\";\r\nimport {GeneralEntityColumn} from \"../advancedFilter/advancedFilterColumnDefinitions\";\r\nimport TextArea from \"antd/es/input/TextArea\";\r\nimport AuditableEntity from \"../../../api/types/auditableEntity\";\r\nimport {AccessRight} from \"../../../api/types/accessRight\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport {\r\n AbstractEntityValidationErrorEnum,\r\n ErrorCode,\r\n getAbstractEntityErrorInfo\r\n} from \"../../../api/validation/abstractEntityValidationUtils\";\r\nimport {DbBoolean} from \"../../../api/types/dbBoolean\";\r\n\r\ninterface GeneralConfigItemParams {\r\n hidden?: boolean,\r\n notRequired?: boolean,\r\n disabled?: boolean\r\n}\r\n\r\n/**\r\n * Additional data needed for object validation\r\n */\r\nexport interface EntityValidationContext {\r\n errors: ErrorCode[]\r\n}\r\n\r\nexport interface EntityConfigPanelProperties<T extends AuditableEntity> {\r\n api: AbstractEntityApi<T>\r\n selectedEntity?: T\r\n hidePrevNextButton?: boolean\r\n hideConfigHeader?: boolean\r\n hideConfigFooter?: boolean\r\n historyMode?: boolean\r\n fieldsToHighlight?: string[]\r\n breadcrumbPath?: AbstractBreadcrumbItem[]\r\n\r\n // detail close handler\r\n onClose?(): void\r\n\r\n // next record handler\r\n onNextRecord?(): void\r\n\r\n // previous record handler\r\n onPrevRecord?(): void\r\n\r\n onSave?(savedEntity: T): void\r\n}\r\n\r\nexport interface EntityConfigPanelState<T extends AuditableEntity> {\r\n originalEntity?: T\r\n editedEntity: T\r\n editedEntityValidationContext: EntityValidationContext\r\n validationIsRunning: boolean\r\n savingIsRunning: boolean\r\n validateOnChange: boolean\r\n waitingForLockResponse: boolean\r\n savingIsStarting: boolean\r\n nameSameAsCode: boolean\r\n}\r\n\r\nexport default abstract class AbstractEntityConfigPanel<P extends EntityConfigPanelProperties<E>,\r\n S extends EntityConfigPanelState<E>,\r\n E extends AuditableEntity = S extends EntityConfigPanelState<infer T> ? T : never> extends React.Component<P, S> {\r\n protected codeInput: InputRef | null = null;\r\n\r\n protected constructor(props: Readonly<P>) {\r\n super(props);\r\n\r\n this.updateEditedObject = this.updateEditedObject.bind(this);\r\n this.renderNoteFormItem = this.renderNoteFormItem.bind(this);\r\n }\r\n\r\n protected initialState: EntityConfigPanelState<E> = {\r\n editedEntity: this.props.selectedEntity as unknown as E,\r\n editedEntityValidationContext: {errors: []},\r\n validationIsRunning: false,\r\n savingIsRunning: false,\r\n validateOnChange: false,\r\n waitingForLockResponse: false,\r\n savingIsStarting: false,\r\n nameSameAsCode: true,\r\n }\r\n\r\n componentDidMount() {\r\n this.updateEditedObject();\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<P>, prevState: Readonly<S>) {\r\n if (!isEqual(prevProps.selectedEntity, this.props.selectedEntity)) {\r\n if (prevState.editedEntity?.locked) {\r\n this.props.api.unlockEntity(prevState.editedEntity);\r\n }\r\n this.updateData(this.props.selectedEntity, cloneDeep(this.props.selectedEntity), {errors: []}, () => {\r\n this.setState({validateOnChange: false, nameSameAsCode: this.isNewEntity()});\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.state.editedEntity?.locked) {\r\n this.props.api.unlockEntity(this.state.editedEntity);\r\n }\r\n }\r\n\r\n getOriginal(): E | undefined {\r\n return this.state.originalEntity;\r\n }\r\n\r\n getEdited(): E {\r\n return this.state.editedEntity;\r\n }\r\n\r\n revertChanges() {\r\n if (this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.updateData(undefined, cloneDeep(this.state.originalEntity), undefined, () => {\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = [];\r\n this.setState({editedEntityValidationContext: editedEntityValidationContext});\r\n });\r\n }\r\n }\r\n\r\n abstract validateObject(): ErrorCode[];\r\n\r\n private async validate() {\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n this.setState({validationIsRunning: true});\r\n\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = this.validateObject();\r\n\r\n // code validation - only when creating new entity (editation of code is not allowed)\r\n const code = this.state.editedEntity.code;\r\n if (isNewEntity && code) {\r\n const codeExists = await this.props.api.codeExists(code);\r\n\r\n if (codeExists) {\r\n if (!editedEntityValidationContext.errors.includes(AbstractEntityValidationErrorEnum.CODE_DUPLICATE)) {\r\n editedEntityValidationContext.errors.push(AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n }\r\n } else {\r\n const index = editedEntityValidationContext.errors.findIndex(value => value === AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n if (index >= 0) {\r\n editedEntityValidationContext.errors.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n editedEntityValidationContext: editedEntityValidationContext,\r\n validateOnChange: true,\r\n validationIsRunning: false,\r\n });\r\n };\r\n\r\n async save(isCosmeticChange?: boolean): Promise<E | undefined> {\r\n await this.validate();\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n let savedEntity: E | undefined = undefined;\r\n\r\n if (errors.length === 0 && this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.setState({savingIsRunning: true});\r\n savedEntity = await this.props.api.saveEntity(this.state.editedEntity, isCosmeticChange);\r\n this.setState({savingIsRunning: false});\r\n if (savedEntity) {\r\n this.updateData(savedEntity, cloneDeep(savedEntity), {errors: []});\r\n this.props.onSave?.(savedEntity);\r\n }\r\n }\r\n this.afterSave();\r\n\r\n return savedEntity;\r\n }\r\n\r\n protected async onSave() {\r\n await this.save();\r\n }\r\n\r\n protected afterSave() {\r\n }\r\n\r\n updateEditedObject() {\r\n if (this.state.validateOnChange) {\r\n this.validate();\r\n }\r\n this.updateData(undefined, this.state.editedEntity as E, this.state.editedEntityValidationContext);\r\n }\r\n\r\n onChangeEditContext(_original?: E, _edited?: E, _editedEntityValidationContext?: EntityValidationContext) {\r\n }\r\n\r\n updateData(originalEntity?: E, editedEntity?: E, editedEntityValidationContext?: EntityValidationContext, callback?: () => void) {\r\n const newState: Partial<S> = {};\r\n if (originalEntity) {\r\n newState.originalEntity = originalEntity;\r\n }\r\n if (editedEntity) {\r\n newState.editedEntity = editedEntity;\r\n }\r\n if (editedEntityValidationContext) {\r\n newState.editedEntityValidationContext = editedEntityValidationContext;\r\n }\r\n this.setState(newState as S, () => {\r\n this.onChangeEditContext(originalEntity, editedEntity, editedEntityValidationContext);\r\n callback?.();\r\n })\r\n }\r\n\r\n renderConfigHeader(hidePrevNextButton?: boolean) {\r\n return (\r\n <DetailHeaderPanel\r\n hidePrevNextButton={hidePrevNextButton}\r\n code={this.state.editedEntity?.code}\r\n onPrevRecord={this.props.onPrevRecord}\r\n onNextRecord={this.props.onNextRecord}\r\n onClose={this.props.onClose}\r\n />\r\n );\r\n }\r\n\r\n protected async onEditStart() {\r\n this.focusFirstField();\r\n }\r\n\r\n focusFirstField() {\r\n if (this.props.selectedEntity?.id === undefined || this.props.selectedEntity?.id === null) {\r\n this.codeInput?.focus();\r\n }\r\n }\r\n\r\n isEditDisabled() {\r\n const entityExists = !!this.state.originalEntity;\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n const isSaveMode = entityExists && (isNewEntity || this.state.editedEntity.locked);\r\n return !isSaveMode;\r\n }\r\n\r\n protected getCodeMaxLength() {\r\n return 64;\r\n }\r\n\r\n protected getNameMaxLength() {\r\n return 256;\r\n }\r\n\r\n protected renderCodePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderCodeSuffix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderNamePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected handleCodeChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.code = value;\r\n if (this.state.nameSameAsCode) {\r\n entity.name = value;\r\n }\r\n this.updateEditedObject();\r\n }\r\n\r\n protected handleNameChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.name = value;\r\n this.updateEditedObject();\r\n }\r\n\r\n protected renderGeneralConfigItems(codeConfig?: GeneralConfigItemParams, nameConfig?: GeneralConfigItemParams, hideDivider?: boolean) {\r\n const entity = this.state.editedEntity;\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n const fieldsToHighlight = this.props.fieldsToHighlight;\r\n\r\n const [codeValidateStatus, codeErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.CODE_REQUIRED, AbstractEntityValidationErrorEnum.CODE_DUPLICATE], errors);\r\n const [nameValidateStatus, nameErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.NAME_REQUIRED], errors);\r\n\r\n return (\r\n <Form\r\n className=\"record-config-form\"\r\n layout=\"horizontal\"\r\n labelCol={{sm: 24, md: 24, lg: 24, xl: 24, xxl: 24}}\r\n >\r\n <Row gutter={8}>\r\n <Col span={6}>\r\n <Form.Item label={i18n(\"ID\")}>\r\n <Input disabled value={entity.id}/>\r\n </Form.Item>\r\n </Col>\r\n {!codeConfig?.hidden &&\r\n <Col span={18}>\r\n <Form.Item\r\n label={i18n(\"Code\")}\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.CODE) ? \"warning\" : codeValidateStatus}\r\n help={codeErrorMessage}\r\n required={!codeConfig?.notRequired}\r\n >\r\n <Input\r\n disabled={entity.id !== undefined || this.isEditDisabled() || codeConfig?.disabled}\r\n ref={(input) => {\r\n this.codeInput = input;\r\n }}\r\n value={entity.code ?? undefined}\r\n onChange={e => {\r\n this.handleCodeChange(e.target.value);\r\n }}\r\n prefix={this.renderCodePrefix()}\r\n suffix={this.renderCodeSuffix()}\r\n maxLength={this.getCodeMaxLength()}\r\n showCount\r\n />\r\n </Form.Item>\r\n </Col>\r\n }\r\n </Row>\r\n {!nameConfig?.hidden &&\r\n <Form.Item\r\n className=\"form-item-full-width-label\"\r\n label={\r\n <div\r\n style={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"baseline\",\r\n }}\r\n >\r\n <span>{i18n(\"Name\")}</span>\r\n {this.isNewEntity() &&\r\n <span style={{display: \"flex\"}}>\r\n <Switch\r\n style={{marginRight: 4}}\r\n size=\"small\"\r\n checked={this.state.nameSameAsCode}\r\n onChange={checked => {\r\n this.setState({nameSameAsCode: checked})\r\n if (checked) {\r\n entity.name = entity.code;\r\n this.updateEditedObject();\r\n }\r\n }}\r\n />\r\n {i18n(\"Same As Code\")}\r\n </span>\r\n }\r\n </div>\r\n }\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.NAME) ? \"warning\" : nameValidateStatus}\r\n help={nameErrorMessage}\r\n required={!nameConfig?.notRequired}\r\n >\r\n <Input\r\n value={entity.name ?? undefined}\r\n disabled={this.isEditDisabled() || nameConfig?.disabled || this.state.nameSameAsCode}\r\n onChange={e => {\r\n this.handleNameChange(e.target.value);\r\n }}\r\n maxLength={this.getNameMaxLength()}\r\n prefix={this.renderNamePrefix()}\r\n />\r\n </Form.Item>\r\n }\r\n {!hideDivider && <Divider className=\"compact-divider\"/>}\r\n </Form>\r\n )\r\n }\r\n\r\n protected renderNoteFormItem() {\r\n const entity = this.state.editedEntity;\r\n const fieldsToHighlight = this.props.fieldsToHighlight;\r\n\r\n return (\r\n <Form.Item\r\n label={i18n(\"Note\")}\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.NOTE) ? \"warning\" : undefined}\r\n >\r\n <TextArea\r\n disabled={this.isEditDisabled()}\r\n value={entity.note ?? undefined}\r\n onChange={event => {\r\n entity.note = event.target.value;\r\n this.updateEditedObject();\r\n }}\r\n />\r\n </Form.Item>\r\n );\r\n }\r\n\r\n protected isNewEntity() {\r\n return !this.state.editedEntity?.id;\r\n }\r\n\r\n protected isEditMode() {\r\n return this.state.originalEntity && !this.isNewEntity() && !this.state.editedEntity.locked;\r\n }\r\n\r\n protected async getAccessRightForEntity(): Promise<{ accessRight: AccessRight, message: string }> {\r\n return {\r\n accessRight: AccessRight.WRITE,\r\n message: \"\",\r\n }\r\n }\r\n\r\n protected getFieldsToOmitForCompare(): string[] {\r\n return [\"locked\"]\r\n }\r\n\r\n protected isEntityModified() {\r\n return !isEqual(\r\n omit(cloneDeep(this.state.editedEntity), this.getFieldsToOmitForCompare()),\r\n omit(cloneDeep(this.state.originalEntity), this.getFieldsToOmitForCompare())\r\n );\r\n }\r\n\r\n async startEdit(): Promise<boolean> {\r\n this.setState({savingIsStarting: true});\r\n await this.onEditStart();\r\n const accessRightResult = await this.getAccessRightForEntity();\r\n this.setState({savingIsStarting: false});\r\n if (accessRightResult.accessRight !== AccessRight.WRITE) {\r\n ModalDialog.error({\r\n mode: ModalDialogMode.OK,\r\n title: i18n(\"Edit is not allowed\"),\r\n content: accessRightResult.message,\r\n okText: i18n(\"Cancel\")\r\n });\r\n return false;\r\n } else {\r\n this.setState({waitingForLockResponse: true, nameSameAsCode: false});\r\n const isOk = await this.props.api.lockEntity(this.state.editedEntity);\r\n this.setState({waitingForLockResponse: false});\r\n if (isOk) {\r\n this.updateEditedObject();\r\n } else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n renderConfigFooter() {\r\n const entityExists = !!this.state.originalEntity;\r\n const isNewEntity = this.isNewEntity();\r\n const isEditMode = this.isEditMode();\r\n const isSaveMode = entityExists && (isNewEntity || this.state.editedEntity.locked);\r\n const isEntityModified = entityExists && this.isEntityModified();\r\n\r\n return (\r\n <div style={{padding: 8}}>\r\n <Button.Group style={{width: \"100%\"}}>\r\n <Button\r\n disabled={!entityExists || (isSaveMode ? !isEntityModified : !isEditMode) || this.state.editedEntityValidationContext.errors.length !== 0 || this.state.validationIsRunning}\r\n block\r\n loading={this.state.waitingForLockResponse || this.state.savingIsStarting || this.state.savingIsRunning}\r\n type=\"primary\"\r\n icon={isSaveMode ? <SaveOutlined/> : <EditOutlined/>}\r\n onClick={async () => {\r\n if (isSaveMode) {\r\n await this.onSave();\r\n } else if (isEditMode) {\r\n await this.startEdit();\r\n }\r\n }}\r\n >\r\n {isSaveMode ? i18n(\"Save\") : i18n(\"Edit\")}\r\n </Button>\r\n <Button\r\n disabled={!entityExists || !isSaveMode}\r\n block\r\n danger\r\n icon={(isEntityModified && !isNewEntity) ? <UndoIcon/> : <CloseCircleOutlined/>}\r\n onClick={async () => {\r\n if (isNewEntity) {\r\n this.props.onClose?.();\r\n } else if (isSaveMode) {\r\n if (this.state.editedEntity.locked) {\r\n await this.props.api.unlockEntity(this.state.editedEntity);\r\n }\r\n this.revertChanges();\r\n }\r\n }}\r\n >\r\n {(isEntityModified && !isNewEntity) ? i18n(\"Revert Changes\") : i18n(\"Cancel\")}\r\n </Button>\r\n </Button.Group>\r\n </div>\r\n );\r\n }\r\n\r\n abstract renderConfigForm(): React.ReactNode;\r\n\r\n render() {\r\n const entity = this.state.editedEntity;\r\n const {hideConfigHeader, hideConfigFooter, historyMode} = this.props;\r\n\r\n return (\r\n <div style={{display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", width: \"100%\", height: \"100%\"}}>\r\n {!hideConfigHeader && !historyMode && this.renderConfigHeader(entity?.id === undefined || this.props.hidePrevNextButton)}\r\n <div style={{flex: \"1 1 auto\", overflow: \"hidden\"}}>\r\n <div style={{height: `calc(100% - ${hideConfigFooter ? 0 : 48}px)`}}>\r\n <div style={{height: \"100%\", overflow: \"auto\"}}>\r\n <div style={{margin: \"0px 12px 16px\"}}>\r\n {entity && this.renderConfigForm()}\r\n </div>\r\n </div>\r\n </div>\r\n {!hideConfigFooter && !historyMode && entity?.ano_platny === DbBoolean.TRUE && this.renderConfigFooter()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n}"]}
|
|
1
|
+
{"version":3,"file":"abstractEntityConfigPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/editor/abstractEntityConfigPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {cloneDeep, isEqual, omit} from \"lodash\";\r\nimport {Button, Col, Divider, Form, Input, InputRef, Row, Switch} from \"antd\";\r\nimport AbstractEntityApi from \"../../../api/abstractEntityApi\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CloseCircleOutlined, EditOutlined, SaveOutlined} from \"@ant-design/icons\";\r\nimport {UndoIcon} from \"d2coreui/components/icons/undoIcon\";\r\nimport DetailHeaderPanel from \"../grid/detailHeaderPanel\";\r\nimport {AbstractBreadcrumbItem} from \"../../abstractListPanel\";\r\nimport {GeneralEntityColumn} from \"../advancedFilter/advancedFilterColumnDefinitions\";\r\nimport TextArea from \"antd/es/input/TextArea\";\r\nimport AuditableEntity from \"../../../api/types/auditableEntity\";\r\nimport {AccessRight} from \"../../../api/types/accessRight\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport {\r\n AbstractEntityValidationErrorEnum,\r\n ErrorCode,\r\n getAbstractEntityErrorInfo\r\n} from \"../../../api/validation/abstractEntityValidationUtils\";\r\nimport {DbBoolean} from \"../../../api/types/dbBoolean\";\r\n\r\ninterface GeneralConfigItemParams {\r\n hidden?: boolean,\r\n notRequired?: boolean,\r\n disabled?: boolean\r\n}\r\n\r\n/**\r\n * Additional data needed for object validation\r\n */\r\nexport interface EntityValidationContext {\r\n errors: ErrorCode[]\r\n}\r\n\r\nexport interface EntityConfigPanelProperties<T extends AuditableEntity> {\r\n api: AbstractEntityApi<T>\r\n selectedEntity?: T\r\n hidePrevNextButton?: boolean\r\n hideConfigHeader?: boolean\r\n hideConfigFooter?: boolean\r\n historyMode?: boolean\r\n fieldsToHighlight?: string[]\r\n breadcrumbPath?: AbstractBreadcrumbItem[]\r\n\r\n // detail close handler\r\n onClose?(): void\r\n\r\n // next record handler\r\n onNextRecord?(): void\r\n\r\n // previous record handler\r\n onPrevRecord?(): void\r\n\r\n onSave?(savedEntity: T): void\r\n}\r\n\r\nexport interface EntityConfigPanelState<T extends AuditableEntity> {\r\n originalEntity?: T\r\n editedEntity: T\r\n editedEntityValidationContext: EntityValidationContext\r\n validationIsRunning: boolean\r\n savingIsRunning: boolean\r\n validateOnChange: boolean\r\n waitingForLockResponse: boolean\r\n savingIsStarting: boolean\r\n nameSameAsCode: boolean\r\n}\r\n\r\nexport default abstract class AbstractEntityConfigPanel<P extends EntityConfigPanelProperties<E>,\r\n S extends EntityConfigPanelState<E>,\r\n E extends AuditableEntity = S extends EntityConfigPanelState<infer T> ? T : never> extends React.Component<P, S> {\r\n protected codeInput: InputRef | null = null;\r\n\r\n protected constructor(props: Readonly<P>) {\r\n super(props);\r\n\r\n this.updateEditedObject = this.updateEditedObject.bind(this);\r\n this.renderNoteFormItem = this.renderNoteFormItem.bind(this);\r\n }\r\n\r\n protected initialState: EntityConfigPanelState<E> = {\r\n editedEntity: this.props.selectedEntity as unknown as E,\r\n editedEntityValidationContext: {errors: []},\r\n validationIsRunning: false,\r\n savingIsRunning: false,\r\n validateOnChange: false,\r\n waitingForLockResponse: false,\r\n savingIsStarting: false,\r\n nameSameAsCode: true,\r\n }\r\n\r\n componentDidMount() {\r\n this.updateEditedObject();\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<P>, prevState: Readonly<S>) {\r\n if (!isEqual(prevProps.selectedEntity, this.props.selectedEntity)) {\r\n if (prevState.editedEntity?.locked) {\r\n this.props.api.unlockEntity(prevState.editedEntity);\r\n }\r\n this.updateData(this.props.selectedEntity, cloneDeep(this.props.selectedEntity), {errors: []}, () => {\r\n this.setState({validateOnChange: false, nameSameAsCode: this.isNewEntity()});\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.state.editedEntity?.locked) {\r\n this.props.api.unlockEntity(this.state.editedEntity);\r\n }\r\n }\r\n\r\n getOriginal(): E | undefined {\r\n return this.state.originalEntity;\r\n }\r\n\r\n getEdited(): E {\r\n return this.state.editedEntity;\r\n }\r\n\r\n revertChanges() {\r\n if (this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.updateData(undefined, cloneDeep(this.state.originalEntity), undefined, () => {\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = [];\r\n this.setState({editedEntityValidationContext: editedEntityValidationContext});\r\n });\r\n }\r\n }\r\n\r\n abstract validateObject(): ErrorCode[];\r\n\r\n private async validate() {\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n this.setState({validationIsRunning: true});\r\n\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = this.validateObject();\r\n\r\n // code validation - only when creating new entity (editation of code is not allowed)\r\n const code = this.state.editedEntity.code;\r\n if (isNewEntity && code) {\r\n const codeExists = await this.props.api.codeExists(code);\r\n\r\n if (codeExists) {\r\n if (!editedEntityValidationContext.errors.includes(AbstractEntityValidationErrorEnum.CODE_DUPLICATE)) {\r\n editedEntityValidationContext.errors.push(AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n }\r\n } else {\r\n const index = editedEntityValidationContext.errors.findIndex(value => value === AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n if (index >= 0) {\r\n editedEntityValidationContext.errors.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n editedEntityValidationContext: editedEntityValidationContext,\r\n validateOnChange: true,\r\n validationIsRunning: false,\r\n });\r\n };\r\n\r\n async save(isCosmeticChange?: boolean): Promise<E | undefined> {\r\n await this.validate();\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n let savedEntity: E | undefined = undefined;\r\n\r\n if (errors.length === 0 && this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.setState({savingIsRunning: true});\r\n savedEntity = await this.props.api.saveEntity(this.state.editedEntity, isCosmeticChange);\r\n this.setState({savingIsRunning: false});\r\n if (savedEntity) {\r\n this.updateData(savedEntity, cloneDeep(savedEntity), {errors: []});\r\n this.props.onSave?.(savedEntity);\r\n }\r\n }\r\n this.afterSave();\r\n\r\n return savedEntity;\r\n }\r\n\r\n protected async onSave() {\r\n await this.save();\r\n }\r\n\r\n protected afterSave() {\r\n }\r\n\r\n updateEditedObject() {\r\n if (this.state.validateOnChange) {\r\n this.validate();\r\n }\r\n this.updateData(undefined, this.state.editedEntity as E, this.state.editedEntityValidationContext);\r\n }\r\n\r\n onChangeEditContext(_original?: E, _edited?: E, _editedEntityValidationContext?: EntityValidationContext) {\r\n }\r\n\r\n updateData(originalEntity?: E, editedEntity?: E, editedEntityValidationContext?: EntityValidationContext, callback?: () => void) {\r\n const newState: Partial<S> = {};\r\n if (originalEntity) {\r\n newState.originalEntity = originalEntity;\r\n }\r\n if (editedEntity) {\r\n newState.editedEntity = editedEntity;\r\n }\r\n if (editedEntityValidationContext) {\r\n newState.editedEntityValidationContext = editedEntityValidationContext;\r\n }\r\n this.setState(newState as S, () => {\r\n this.onChangeEditContext(originalEntity, editedEntity, editedEntityValidationContext);\r\n callback?.();\r\n })\r\n }\r\n\r\n renderConfigHeader(hidePrevNextButton?: boolean) {\r\n return (\r\n <DetailHeaderPanel\r\n hidePrevNextButton={hidePrevNextButton}\r\n code={this.state.editedEntity?.code}\r\n onPrevRecord={this.props.onPrevRecord}\r\n onNextRecord={this.props.onNextRecord}\r\n onClose={this.props.onClose}\r\n />\r\n );\r\n }\r\n\r\n protected async onEditStart() {\r\n this.focusFirstField();\r\n }\r\n\r\n focusFirstField() {\r\n if (this.props.selectedEntity?.id === undefined || this.props.selectedEntity?.id === null) {\r\n this.codeInput?.focus();\r\n }\r\n }\r\n\r\n isEditDisabled() {\r\n const entityExists = !!this.state.originalEntity;\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n const isSaveMode = entityExists && (isNewEntity || this.state.editedEntity.locked);\r\n return !isSaveMode;\r\n }\r\n\r\n protected getCodeMaxLength() {\r\n return 64;\r\n }\r\n\r\n protected getNameMaxLength() {\r\n return 256;\r\n }\r\n\r\n protected renderCodePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderCodeSuffix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderNamePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected handleCodeChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.code = value;\r\n if (this.state.nameSameAsCode) {\r\n entity.name = value;\r\n }\r\n this.updateEditedObject();\r\n }\r\n\r\n protected handleNameChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.name = value;\r\n this.updateEditedObject();\r\n }\r\n\r\n protected renderGeneralConfigItems(codeConfig?: GeneralConfigItemParams, nameConfig?: GeneralConfigItemParams, hideDivider?: boolean) {\r\n const entity = this.state.editedEntity;\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n const fieldsToHighlight = this.props.fieldsToHighlight;\r\n\r\n const [codeValidateStatus, codeErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.CODE_REQUIRED, AbstractEntityValidationErrorEnum.CODE_DUPLICATE], errors);\r\n const [nameValidateStatus, nameErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.NAME_REQUIRED], errors);\r\n\r\n return (\r\n <Form\r\n className=\"record-config-form\"\r\n layout=\"horizontal\"\r\n labelCol={{sm: 24, md: 24, lg: 24, xl: 24, xxl: 24}}\r\n >\r\n <Row gutter={8}>\r\n <Col span={6}>\r\n <Form.Item label={i18n(\"ID\")}>\r\n <Input disabled value={entity.id}/>\r\n </Form.Item>\r\n </Col>\r\n {!codeConfig?.hidden &&\r\n <Col span={18}>\r\n <Form.Item\r\n label={i18n(\"Code\")}\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.CODE) ? \"warning\" : codeValidateStatus}\r\n help={codeErrorMessage}\r\n required={!codeConfig?.notRequired}\r\n >\r\n <Input\r\n disabled={entity.id !== undefined || this.isEditDisabled() || codeConfig?.disabled}\r\n ref={(input) => {\r\n this.codeInput = input;\r\n }}\r\n value={entity.code ?? undefined}\r\n onChange={e => {\r\n this.handleCodeChange(e.target.value);\r\n }}\r\n prefix={this.renderCodePrefix()}\r\n suffix={this.renderCodeSuffix()}\r\n maxLength={this.getCodeMaxLength()}\r\n showCount\r\n />\r\n </Form.Item>\r\n </Col>\r\n }\r\n </Row>\r\n {!nameConfig?.hidden &&\r\n <Form.Item\r\n className=\"form-item-full-width-label\"\r\n label={\r\n <div\r\n style={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n }}\r\n >\r\n <span>{i18n(\"Name\")}</span>\r\n {this.isNewEntity() &&\r\n <span style={{display: \"flex\"}}>\r\n <Switch\r\n style={{marginRight: 4}}\r\n size=\"small\"\r\n checked={this.state.nameSameAsCode}\r\n onChange={checked => {\r\n this.setState({nameSameAsCode: checked})\r\n if (checked) {\r\n entity.name = entity.code;\r\n this.updateEditedObject();\r\n }\r\n }}\r\n />\r\n {i18n(\"Same As Code\")}\r\n </span>\r\n }\r\n </div>\r\n }\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.NAME) ? \"warning\" : nameValidateStatus}\r\n help={nameErrorMessage}\r\n required={!nameConfig?.notRequired}\r\n >\r\n <Input\r\n value={entity.name ?? undefined}\r\n disabled={this.isEditDisabled() || nameConfig?.disabled || this.state.nameSameAsCode}\r\n onChange={e => {\r\n this.handleNameChange(e.target.value);\r\n }}\r\n maxLength={this.getNameMaxLength()}\r\n prefix={this.renderNamePrefix()}\r\n />\r\n </Form.Item>\r\n }\r\n {!hideDivider && <Divider className=\"compact-divider\"/>}\r\n </Form>\r\n )\r\n }\r\n\r\n protected renderNoteFormItem() {\r\n const entity = this.state.editedEntity;\r\n const fieldsToHighlight = this.props.fieldsToHighlight;\r\n\r\n return (\r\n <Form.Item\r\n label={i18n(\"Note\")}\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.NOTE) ? \"warning\" : undefined}\r\n >\r\n <TextArea\r\n disabled={this.isEditDisabled()}\r\n value={entity.note ?? undefined}\r\n onChange={event => {\r\n entity.note = event.target.value;\r\n this.updateEditedObject();\r\n }}\r\n />\r\n </Form.Item>\r\n );\r\n }\r\n\r\n protected isNewEntity() {\r\n return !this.state.editedEntity?.id;\r\n }\r\n\r\n protected isEditMode() {\r\n return this.state.originalEntity && !this.isNewEntity() && !this.state.editedEntity.locked;\r\n }\r\n\r\n protected async getAccessRightForEntity(): Promise<{ accessRight: AccessRight, message: string }> {\r\n return {\r\n accessRight: AccessRight.WRITE,\r\n message: \"\",\r\n }\r\n }\r\n\r\n protected getFieldsToOmitForCompare(): string[] {\r\n return [\"locked\"]\r\n }\r\n\r\n protected isEntityModified() {\r\n return !isEqual(\r\n omit(cloneDeep(this.state.editedEntity), this.getFieldsToOmitForCompare()),\r\n omit(cloneDeep(this.state.originalEntity), this.getFieldsToOmitForCompare())\r\n );\r\n }\r\n\r\n async startEdit(): Promise<boolean> {\r\n this.setState({savingIsStarting: true});\r\n await this.onEditStart();\r\n const accessRightResult = await this.getAccessRightForEntity();\r\n this.setState({savingIsStarting: false});\r\n if (accessRightResult.accessRight !== AccessRight.WRITE) {\r\n ModalDialog.error({\r\n mode: ModalDialogMode.OK,\r\n title: i18n(\"Edit is not allowed\"),\r\n content: accessRightResult.message,\r\n okText: i18n(\"Cancel\")\r\n });\r\n return false;\r\n } else {\r\n this.setState({waitingForLockResponse: true, nameSameAsCode: false});\r\n const isOk = await this.props.api.lockEntity(this.state.editedEntity);\r\n this.setState({waitingForLockResponse: false});\r\n if (isOk) {\r\n this.updateEditedObject();\r\n } else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n renderConfigFooter() {\r\n const entityExists = !!this.state.originalEntity;\r\n const isNewEntity = this.isNewEntity();\r\n const isEditMode = this.isEditMode();\r\n const isSaveMode = entityExists && (isNewEntity || this.state.editedEntity.locked);\r\n const isEntityModified = entityExists && this.isEntityModified();\r\n\r\n return (\r\n <div style={{padding: 8}}>\r\n <Button.Group style={{width: \"100%\"}}>\r\n <Button\r\n disabled={!entityExists || (isSaveMode ? !isEntityModified : !isEditMode) || this.state.editedEntityValidationContext.errors.length !== 0 || this.state.validationIsRunning}\r\n block\r\n loading={this.state.waitingForLockResponse || this.state.savingIsStarting || this.state.savingIsRunning}\r\n type=\"primary\"\r\n icon={isSaveMode ? <SaveOutlined/> : <EditOutlined/>}\r\n onClick={async () => {\r\n if (isSaveMode) {\r\n await this.onSave();\r\n } else if (isEditMode) {\r\n await this.startEdit();\r\n }\r\n }}\r\n >\r\n {isSaveMode ? i18n(\"Save\") : i18n(\"Edit\")}\r\n </Button>\r\n <Button\r\n disabled={!entityExists || !isSaveMode}\r\n block\r\n danger\r\n icon={(isEntityModified && !isNewEntity) ? <UndoIcon/> : <CloseCircleOutlined/>}\r\n onClick={async () => {\r\n if (isNewEntity) {\r\n this.props.onClose?.();\r\n } else if (isSaveMode) {\r\n if (this.state.editedEntity.locked) {\r\n await this.props.api.unlockEntity(this.state.editedEntity);\r\n }\r\n this.revertChanges();\r\n }\r\n }}\r\n >\r\n {(isEntityModified && !isNewEntity) ? i18n(\"Revert Changes\") : i18n(\"Cancel\")}\r\n </Button>\r\n </Button.Group>\r\n </div>\r\n );\r\n }\r\n\r\n abstract renderConfigForm(): React.ReactNode;\r\n\r\n render() {\r\n const entity = this.state.editedEntity;\r\n const {hideConfigHeader, hideConfigFooter, historyMode} = this.props;\r\n\r\n return (\r\n <div style={{display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", width: \"100%\", height: \"100%\"}}>\r\n {!hideConfigHeader && !historyMode && this.renderConfigHeader(entity?.id === undefined || this.props.hidePrevNextButton)}\r\n <div style={{flex: \"1 1 auto\", overflow: \"hidden\"}}>\r\n <div style={{height: `calc(100% - ${hideConfigFooter ? 0 : 48}px)`}}>\r\n <div style={{height: \"100%\", overflow: \"auto\"}}>\r\n <div style={{margin: \"0px 12px 16px\"}}>\r\n {entity && this.renderConfigForm()}\r\n </div>\r\n </div>\r\n </div>\r\n {!hideConfigFooter && !historyMode && entity?.ano_platny === DbBoolean.TRUE && this.renderConfigFooter()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "d2aura",
|
|
3
|
-
"version": "23.0.
|
|
3
|
+
"version": "23.0.52",
|
|
4
4
|
"description": "D2 AURA - Advanced User Interface Resource Architecture",
|
|
5
5
|
"author": "Ipesoft s.r.o.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@types/urijs": "1.19.16",
|
|
43
43
|
"antd": "5.21.2",
|
|
44
44
|
"d2core": "23.0.15",
|
|
45
|
-
"d2coreui": "23.0.
|
|
45
|
+
"d2coreui": "23.0.25",
|
|
46
46
|
"d2jsapi": "21.0.30",
|
|
47
47
|
"echarts": "5.5.1",
|
|
48
48
|
"echarts-for-react": "3.0.2",
|