d2aura 23.0.31 → 23.0.33
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/api/abstractEntityApi.d.ts +1 -0
- package/api/abstractEntityApi.js +21 -0
- package/api/abstractEntityApi.js.map +1 -1
- package/coreui/abstractListPanel.d.ts +6 -4
- package/coreui/abstractListPanel.js +9 -15
- package/coreui/abstractListPanel.js.map +1 -1
- package/coreui/components/editor/abstractEntityConfigPanel.d.ts +2 -0
- package/coreui/components/editor/abstractEntityConfigPanel.js +8 -2
- package/coreui/components/editor/abstractEntityConfigPanel.js.map +1 -1
- package/coreui/routeChangeListener.d.ts +1 -4
- package/coreui/routeChangeListener.js +1 -5
- package/coreui/routeChangeListener.js.map +1 -1
- package/package.json +1 -1
|
@@ -20,6 +20,7 @@ export default abstract class AbstractEntityApi<T extends Entity> extends Abstra
|
|
|
20
20
|
abstract adaptEntityId(entity: T): void;
|
|
21
21
|
createNewEntity(sample?: T): Promise<T>;
|
|
22
22
|
protected adaptNewEntity(newEntity: T, sample?: T): void;
|
|
23
|
+
subscribeRefreshList(updateHandler: () => void): Closeable;
|
|
23
24
|
getAllData(fromRecord: number, toRecord: number, orderBy: string, conditions: AdvancedFilterCondition[], onlyValid: boolean): Promise<PageableList<T>>;
|
|
24
25
|
getAccessRight(): Promise<AccessRight>;
|
|
25
26
|
getHistory(id: number, fromRecord: number, toRecord: number): Promise<PageableList<T>>;
|
package/api/abstractEntityApi.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { D2Data } from "d2jsapi";
|
|
1
2
|
import { ModalDialog } from "d2coreui/components/modal/modalDialog";
|
|
2
3
|
import i18n from "d2core/i18n/i18n";
|
|
3
4
|
import { FILTER_CONDITION_FIELDS, FILTER_CONDITION_SD_NAME } from "./advancedFilterApi";
|
|
@@ -25,6 +26,26 @@ export default class AbstractEntityApi extends AbstractApi {
|
|
|
25
26
|
newEntity.id = undefined;
|
|
26
27
|
sample;
|
|
27
28
|
}
|
|
29
|
+
subscribeRefreshList(updateHandler) {
|
|
30
|
+
const closeable = {
|
|
31
|
+
updateHandler: updateHandler,
|
|
32
|
+
d2Api: this.d2Api,
|
|
33
|
+
eventName: this.eventName,
|
|
34
|
+
update: function (...parameters) {
|
|
35
|
+
const eventName = D2Data.toSimpleValue(parameters[0]);
|
|
36
|
+
if (eventName === this.eventName) {
|
|
37
|
+
this.updateHandler();
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
close: function () {
|
|
41
|
+
this.d2Api.unSubscribeRpc(this.update);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
closeable.update = closeable.update.bind(closeable);
|
|
45
|
+
closeable.close = closeable.close.bind(closeable);
|
|
46
|
+
this.d2Api.subscribeRpc("RefreshList", closeable.update);
|
|
47
|
+
return closeable;
|
|
48
|
+
}
|
|
28
49
|
async getAllData(fromRecord, toRecord, orderBy, conditions, onlyValid) {
|
|
29
50
|
const result = await this.callRpc({
|
|
30
51
|
eventName: this.eventName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractEntityApi.js","sourceRoot":"","sources":["../../../api/abstractEntityApi.ts"],"names":[],"mappings":"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","sourcesContent":["import {D2WebApi, UnivalTypeEnum} from \"d2jsapi\";\r\nimport ApiResult from \"./types/apiResult\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport Entity from \"./types/entity\";\r\nimport EntityListResult from \"./types/entityListResult\";\r\nimport {AdvancedFilterCondition, FILTER_CONDITION_FIELDS, FILTER_CONDITION_SD_NAME} from \"./advancedFilterApi\";\r\nimport D2BooleanUtils, {D2Boolean} from \"./util/d2Boolean\";\r\nimport EntityResult from \"./types/entityResult\";\r\nimport {AccessRight} from \"./types/accessRight\";\r\nimport AbstractApi from \"./abstractApi\";\r\n\r\nexport interface Closeable {\r\n close(): void\r\n}\r\n\r\nexport interface PageableList<T extends Entity> {\r\n data: T[]\r\n totalNumberOfRows: number\r\n}\r\n\r\nexport default abstract class AbstractEntityApi<T extends Entity> extends AbstractApi {\r\n entityClassName: string;\r\n protected eventName: string;\r\n protected structureDefinitionName: string;\r\n protected entityFields: string[];\r\n\r\n protected constructor(d2Api: D2WebApi, entityClassName: string, eventName: string, structureDefinitionName: string, entityFields: string[]) {\r\n super(d2Api);\r\n this.entityClassName = entityClassName;\r\n this.eventName = eventName;\r\n this.structureDefinitionName = structureDefinitionName;\r\n this.entityFields = entityFields;\r\n }\r\n\r\n abstract adaptEntityId(entity: T): void;\r\n\r\n async createNewEntity(sample?: T): Promise<T> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_GetDefaultValues\",\r\n skipCheckErrorParameters: true,\r\n },\r\n this.d2Api.connection.user.userName,\r\n this.convertToStructure(this.structureDefinitionName, this.entityFields, sample ? [sample] : [], \"data\"),\r\n );\r\n\r\n const newEntity = result.data[0];\r\n this.adaptNewEntity(newEntity, sample);\r\n return newEntity;\r\n }\r\n\r\n protected adaptNewEntity(newEntity: T, sample?: T) {\r\n newEntity.id = undefined as unknown as number;\r\n sample;\r\n }\r\n\r\n async getAllData(fromRecord: number, toRecord: number, orderBy: string, conditions: AdvancedFilterCondition[], onlyValid: boolean): Promise<PageableList<T>> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_GetAll\",\r\n },\r\n {type: UnivalTypeEnum.RECORD, structType: this.structureDefinitionName, returnAs: \"data\"},\r\n {type: UnivalTypeEnum.INT, returnAs: \"totalNumberOfRows\"},\r\n fromRecord,\r\n toRecord,\r\n {type: UnivalTypeEnum.TEXT, value: orderBy},\r\n this.convertToStructure(FILTER_CONDITION_SD_NAME, FILTER_CONDITION_FIELDS, conditions),\r\n {type: UnivalTypeEnum.BOOL, value: D2BooleanUtils.booleanToD2Boolean(onlyValid)}\r\n );\r\n\r\n result.data.forEach(value => this.adaptEntityId(value));\r\n\r\n return {\r\n data: result.data,\r\n totalNumberOfRows: result.totalNumberOfRows,\r\n }\r\n }\r\n\r\n async getAccessRight(): Promise<AccessRight> {\r\n const result: ApiResult = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"GetAccessRight\",\r\n },\r\n this.d2Api.connection.user.userName,\r\n {type: UnivalTypeEnum.INT, returnAs: \"rightLevel\"},\r\n );\r\n\r\n return result.rightLevel;\r\n }\r\n\r\n async getHistory(id: number, fromRecord: number, toRecord: number): Promise<PageableList<T>> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_History_Get\",\r\n },\r\n id,\r\n {type: UnivalTypeEnum.RECORD, structType: this.structureDefinitionName, returnAs: \"data\"},\r\n {type: UnivalTypeEnum.INT, returnAs: \"totalNumberOfRows\"},\r\n fromRecord,\r\n toRecord,\r\n );\r\n\r\n result.data.forEach((value, index) => value.id = index);\r\n\r\n return {\r\n data: result.data,\r\n totalNumberOfRows: result.totalNumberOfRows,\r\n }\r\n }\r\n\r\n protected async adaptSavedEntity(entity: T, isNewEntity: boolean): Promise<T> {\r\n this.adaptEntityId(entity);\r\n entity = await this.getEntity(entity.id);\r\n if (!isNewEntity) {\r\n await this.unlockEntity(entity);\r\n }\r\n return entity;\r\n }\r\n\r\n protected async internalSave(entity: T, isNewEntity: boolean, _isCosmeticChange?: boolean): Promise<EntityListResult<T>> {\r\n return await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_Set\",\r\n },\r\n {type: UnivalTypeEnum.BOOL, value: D2BooleanUtils.booleanToD2Boolean(isNewEntity)},\r\n this.convertToStructure(this.structureDefinitionName, this.entityFields, [entity], \"data\"),\r\n this.d2Api.connection.user.userName,\r\n {type: UnivalTypeEnum.BOOL, value: D2Boolean.TRUE}\r\n );\r\n }\r\n\r\n async saveEntity(entity: T, isCosmeticChange?: boolean): Promise<T | undefined> {\r\n const isNewEntity = this.isNewEntity(entity);\r\n const result = await this.internalSave(entity, isNewEntity, isCosmeticChange);\r\n\r\n if (result.isOk) {\r\n let savedEntity = result.data[0];\r\n return await this.adaptSavedEntity(savedEntity, isNewEntity);\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n async getEntity(id: number): Promise<T> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_Get\",\r\n },\r\n id,\r\n {type: UnivalTypeEnum.RECORD, structType: this.structureDefinitionName, returnAs: \"data\"}\r\n );\r\n\r\n const entity = result.data[0];\r\n this.adaptEntityId(entity);\r\n\r\n return entity;\r\n }\r\n\r\n async setValidity(entity: T, valid: boolean): Promise<boolean> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_SetValid\",\r\n },\r\n {type: UnivalTypeEnum.BOOL, value: D2BooleanUtils.booleanToD2Boolean(valid)},\r\n this.convertToStructure(this.structureDefinitionName, this.entityFields, [entity], \"data\"),\r\n this.d2Api.connection.user.userName,\r\n {type: UnivalTypeEnum.BOOL, value: D2Boolean.TRUE}\r\n );\r\n\r\n return result.isOk;\r\n }\r\n\r\n async codeExists(code: string): Promise<boolean> {\r\n const result: EntityResult<D2Boolean> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_CodeExists\",\r\n },\r\n {type: UnivalTypeEnum.TEXT, value: code},\r\n {type: UnivalTypeEnum.BOOL, returnAs: \"data\"}\r\n );\r\n\r\n return D2BooleanUtils.d2BooleanToBoolean(result.data);\r\n }\r\n\r\n async lockEntity(entity: T): Promise<boolean> {\r\n const apiResult = await this.callRpc(\r\n {\r\n eventName: \"E.AR_Session_Manager\",\r\n rpcName: \"Lock\",\r\n skipCheckErrorOnly: true,\r\n },\r\n this.entityClassName,\r\n entity.id,\r\n this.d2Api.connection.id\r\n );\r\n\r\n if (!apiResult.isOk) {\r\n ModalDialog.error({\r\n mode: ModalDialogMode.OK,\r\n title: i18n(\"Edit is not allowed\"),\r\n content: i18n(\"User \\\"%{name}\\\" is currently editing selected record.\", {name: apiResult.errorMessage ?? \"\"})\r\n });\r\n } else {\r\n entity.locked = true;\r\n }\r\n return apiResult.isOk;\r\n }\r\n\r\n async unlockEntity(entity: T): Promise<void> {\r\n await this.d2Api.rpc(\"E.AR_Session_Manager\", \"Unlock\", this.entityClassName, entity.id).call();\r\n entity.locked = false;\r\n }\r\n\r\n isNewEntity(entity: Entity) {\r\n return entity.id === undefined || entity.id === -1;\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"abstractEntityApi.js","sourceRoot":"","sources":["../../../api/abstractEntityApi.ts"],"names":[],"mappings":"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","sourcesContent":["import {D2Data, D2WebApi, Unival, UnivalTypeEnum} from \"d2jsapi\";\r\nimport ApiResult from \"./types/apiResult\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport Entity from \"./types/entity\";\r\nimport EntityListResult from \"./types/entityListResult\";\r\nimport {AdvancedFilterCondition, FILTER_CONDITION_FIELDS, FILTER_CONDITION_SD_NAME} from \"./advancedFilterApi\";\r\nimport D2BooleanUtils, {D2Boolean} from \"./util/d2Boolean\";\r\nimport EntityResult from \"./types/entityResult\";\r\nimport {AccessRight} from \"./types/accessRight\";\r\nimport AbstractApi from \"./abstractApi\";\r\n\r\nexport interface Closeable {\r\n close(): void\r\n}\r\n\r\nexport interface PageableList<T extends Entity> {\r\n data: T[]\r\n totalNumberOfRows: number\r\n}\r\n\r\nexport default abstract class AbstractEntityApi<T extends Entity> extends AbstractApi {\r\n entityClassName: string;\r\n protected eventName: string;\r\n protected structureDefinitionName: string;\r\n protected entityFields: string[];\r\n\r\n protected constructor(d2Api: D2WebApi, entityClassName: string, eventName: string, structureDefinitionName: string, entityFields: string[]) {\r\n super(d2Api);\r\n this.entityClassName = entityClassName;\r\n this.eventName = eventName;\r\n this.structureDefinitionName = structureDefinitionName;\r\n this.entityFields = entityFields;\r\n }\r\n\r\n abstract adaptEntityId(entity: T): void;\r\n\r\n async createNewEntity(sample?: T): Promise<T> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_GetDefaultValues\",\r\n skipCheckErrorParameters: true,\r\n },\r\n this.d2Api.connection.user.userName,\r\n this.convertToStructure(this.structureDefinitionName, this.entityFields, sample ? [sample] : [], \"data\"),\r\n );\r\n\r\n const newEntity = result.data[0];\r\n this.adaptNewEntity(newEntity, sample);\r\n return newEntity;\r\n }\r\n\r\n protected adaptNewEntity(newEntity: T, sample?: T) {\r\n newEntity.id = undefined as unknown as number;\r\n sample;\r\n }\r\n\r\n subscribeRefreshList(updateHandler: () => void): Closeable {\r\n const closeable = {\r\n updateHandler: updateHandler,\r\n d2Api: this.d2Api,\r\n eventName: this.eventName,\r\n update: function (...parameters: Unival[]) {\r\n const eventName = D2Data.toSimpleValue<string>(parameters[0] as any);\r\n if (eventName === this.eventName) {\r\n this.updateHandler();\r\n }\r\n },\r\n close: function () {\r\n this.d2Api.unSubscribeRpc(this.update);\r\n }\r\n }\r\n closeable.update = closeable.update.bind(closeable);\r\n closeable.close = closeable.close.bind(closeable);\r\n\r\n this.d2Api.subscribeRpc(\"RefreshList\", closeable.update);\r\n return closeable;\r\n }\r\n\r\n async getAllData(fromRecord: number, toRecord: number, orderBy: string, conditions: AdvancedFilterCondition[], onlyValid: boolean): Promise<PageableList<T>> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_GetAll\",\r\n },\r\n {type: UnivalTypeEnum.RECORD, structType: this.structureDefinitionName, returnAs: \"data\"},\r\n {type: UnivalTypeEnum.INT, returnAs: \"totalNumberOfRows\"},\r\n fromRecord,\r\n toRecord,\r\n {type: UnivalTypeEnum.TEXT, value: orderBy},\r\n this.convertToStructure(FILTER_CONDITION_SD_NAME, FILTER_CONDITION_FIELDS, conditions),\r\n {type: UnivalTypeEnum.BOOL, value: D2BooleanUtils.booleanToD2Boolean(onlyValid)}\r\n );\r\n\r\n result.data.forEach(value => this.adaptEntityId(value));\r\n\r\n return {\r\n data: result.data,\r\n totalNumberOfRows: result.totalNumberOfRows,\r\n }\r\n }\r\n\r\n async getAccessRight(): Promise<AccessRight> {\r\n const result: ApiResult = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"GetAccessRight\",\r\n },\r\n this.d2Api.connection.user.userName,\r\n {type: UnivalTypeEnum.INT, returnAs: \"rightLevel\"},\r\n );\r\n\r\n return result.rightLevel;\r\n }\r\n\r\n async getHistory(id: number, fromRecord: number, toRecord: number): Promise<PageableList<T>> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_History_Get\",\r\n },\r\n id,\r\n {type: UnivalTypeEnum.RECORD, structType: this.structureDefinitionName, returnAs: \"data\"},\r\n {type: UnivalTypeEnum.INT, returnAs: \"totalNumberOfRows\"},\r\n fromRecord,\r\n toRecord,\r\n );\r\n\r\n result.data.forEach((value, index) => value.id = index);\r\n\r\n return {\r\n data: result.data,\r\n totalNumberOfRows: result.totalNumberOfRows,\r\n }\r\n }\r\n\r\n protected async adaptSavedEntity(entity: T, isNewEntity: boolean): Promise<T> {\r\n this.adaptEntityId(entity);\r\n entity = await this.getEntity(entity.id);\r\n if (!isNewEntity) {\r\n await this.unlockEntity(entity);\r\n }\r\n return entity;\r\n }\r\n\r\n protected async internalSave(entity: T, isNewEntity: boolean, _isCosmeticChange?: boolean): Promise<EntityListResult<T>> {\r\n return await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_Set\",\r\n },\r\n {type: UnivalTypeEnum.BOOL, value: D2BooleanUtils.booleanToD2Boolean(isNewEntity)},\r\n this.convertToStructure(this.structureDefinitionName, this.entityFields, [entity], \"data\"),\r\n this.d2Api.connection.user.userName,\r\n {type: UnivalTypeEnum.BOOL, value: D2Boolean.TRUE}\r\n );\r\n }\r\n\r\n async saveEntity(entity: T, isCosmeticChange?: boolean): Promise<T | undefined> {\r\n const isNewEntity = this.isNewEntity(entity);\r\n const result = await this.internalSave(entity, isNewEntity, isCosmeticChange);\r\n\r\n if (result.isOk) {\r\n let savedEntity = result.data[0];\r\n return await this.adaptSavedEntity(savedEntity, isNewEntity);\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n async getEntity(id: number): Promise<T> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_Get\",\r\n },\r\n id,\r\n {type: UnivalTypeEnum.RECORD, structType: this.structureDefinitionName, returnAs: \"data\"}\r\n );\r\n\r\n const entity = result.data[0];\r\n this.adaptEntityId(entity);\r\n\r\n return entity;\r\n }\r\n\r\n async setValidity(entity: T, valid: boolean): Promise<boolean> {\r\n const result: EntityListResult<T> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_SetValid\",\r\n },\r\n {type: UnivalTypeEnum.BOOL, value: D2BooleanUtils.booleanToD2Boolean(valid)},\r\n this.convertToStructure(this.structureDefinitionName, this.entityFields, [entity], \"data\"),\r\n this.d2Api.connection.user.userName,\r\n {type: UnivalTypeEnum.BOOL, value: D2Boolean.TRUE}\r\n );\r\n\r\n return result.isOk;\r\n }\r\n\r\n async codeExists(code: string): Promise<boolean> {\r\n const result: EntityResult<D2Boolean> = await this.callRpc(\r\n {\r\n eventName: this.eventName,\r\n rpcName: \"Data_CodeExists\",\r\n },\r\n {type: UnivalTypeEnum.TEXT, value: code},\r\n {type: UnivalTypeEnum.BOOL, returnAs: \"data\"}\r\n );\r\n\r\n return D2BooleanUtils.d2BooleanToBoolean(result.data);\r\n }\r\n\r\n async lockEntity(entity: T): Promise<boolean> {\r\n const apiResult = await this.callRpc(\r\n {\r\n eventName: \"E.AR_Session_Manager\",\r\n rpcName: \"Lock\",\r\n skipCheckErrorOnly: true,\r\n },\r\n this.entityClassName,\r\n entity.id,\r\n this.d2Api.connection.id\r\n );\r\n\r\n if (!apiResult.isOk) {\r\n ModalDialog.error({\r\n mode: ModalDialogMode.OK,\r\n title: i18n(\"Edit is not allowed\"),\r\n content: i18n(\"User \\\"%{name}\\\" is currently editing selected record.\", {name: apiResult.errorMessage ?? \"\"})\r\n });\r\n } else {\r\n entity.locked = true;\r\n }\r\n return apiResult.isOk;\r\n }\r\n\r\n async unlockEntity(entity: T): Promise<void> {\r\n await this.d2Api.rpc(\"E.AR_Session_Manager\", \"Unlock\", this.entityClassName, entity.id).call();\r\n entity.locked = false;\r\n }\r\n\r\n isNewEntity(entity: Entity) {\r\n return entity.id === undefined || entity.id === -1;\r\n }\r\n}"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { GridConfiguration } from "d2coreui/components/grid/extendedDataGrid";
|
|
3
|
-
import { DataGridColDef } from "d2coreui/components/grid/dataGrid";
|
|
4
|
-
import {
|
|
3
|
+
import { DataGridColDef, OnLoadDataCallback } from "d2coreui/components/grid/dataGrid";
|
|
4
|
+
import { RowDoubleClickedEvent, RowModelType, SelectionChangedEvent } from "ag-grid-community";
|
|
5
|
+
import { Closeable } from "../api/abstractEntityApi";
|
|
5
6
|
import AuditableEntity from "../api/types/auditableEntity";
|
|
6
7
|
import AdvancedFilteredGrid, { AdvancedFilteredGridProps, AdvancedFilteredGridState } from "./components/advancedFilter/advancedFilteredGrid";
|
|
7
8
|
import { PanelConfiguration } from "../core/types/panelConfiguration";
|
|
@@ -34,11 +35,12 @@ export interface AbstractListPanelState<T extends AuditableEntity, C extends Abs
|
|
|
34
35
|
}
|
|
35
36
|
export declare abstract class AbstractListPanel<T extends AuditableEntity, P extends AbstractListPanelProps<T, C>, S extends AbstractListPanelState<T, C>, C extends AbstractListPanelConfiguration = AbstractListPanelConfiguration> extends AdvancedFilteredGrid<T, P, S> {
|
|
36
37
|
protected detailPanel: AbstractEntityConfigPanel<any, any> | null;
|
|
38
|
+
protected refreshListHandler: Closeable | null;
|
|
37
39
|
private idToSelect;
|
|
38
40
|
protected constructor(props: Readonly<P>);
|
|
39
41
|
protected initialState: Omit<AbstractListPanelState<T, C>, "panelConfiguration">;
|
|
40
|
-
protected
|
|
41
|
-
|
|
42
|
+
protected onLoadData(callback: OnLoadDataCallback): Promise<void>;
|
|
43
|
+
protected subscribeRefreshList(): void;
|
|
42
44
|
componentWillUnmount(): void;
|
|
43
45
|
protected initialGridConfiguration: GridConfiguration;
|
|
44
46
|
getPanelConfiguration(): AbstractListPanelConfiguration;
|
|
@@ -8,7 +8,6 @@ import AdvancedFilteredGrid from "./components/advancedFilter/advancedFilteredGr
|
|
|
8
8
|
import { GeneralEntityColumn } from "./components/advancedFilter/advancedFilterColumnDefinitions";
|
|
9
9
|
import AdvancedFilterButton from "./components/advancedFilter/advancedFilterButton";
|
|
10
10
|
import auditEntityRowStyleRules from "./components/grid/auditEntityRowStyleRules";
|
|
11
|
-
import LocationUtils from "../core/util/locationUtils";
|
|
12
11
|
import TitleWithCodePanel from "./components/titleWithCodePanel/titleWithCodePanel";
|
|
13
12
|
import EntityHistoryListPanel from "./components/history/entityHistoryListPanel";
|
|
14
13
|
import { AccessRight } from "../api/types/accessRight";
|
|
@@ -37,6 +36,7 @@ export class AbstractListPanel extends AdvancedFilteredGrid {
|
|
|
37
36
|
constructor(props) {
|
|
38
37
|
super(props);
|
|
39
38
|
this.detailPanel = null;
|
|
39
|
+
this.refreshListHandler = null;
|
|
40
40
|
this.idToSelect = undefined;
|
|
41
41
|
this.initialState = {
|
|
42
42
|
detailPanelVisible: false,
|
|
@@ -86,31 +86,25 @@ export class AbstractListPanel extends AdvancedFilteredGrid {
|
|
|
86
86
|
rowStyleRules: auditEntityRowStyleRules(),
|
|
87
87
|
defaultRowStyleRules: auditEntityRowStyleRules(),
|
|
88
88
|
};
|
|
89
|
-
const advancedFilterCondition = LocationUtils.hashToAdvancedFilterCondition(window.location.hash, this.getAllowedColumnNameForSearchParams());
|
|
90
|
-
if (advancedFilterCondition) {
|
|
91
|
-
this.initialState.filterConditions = [advancedFilterCondition];
|
|
92
|
-
}
|
|
93
89
|
this.onSelectionChanged = this.onSelectionChanged.bind(this);
|
|
94
90
|
this.onRowDoubleClicked = this.onRowDoubleClicked.bind(this);
|
|
95
91
|
this.onHistoryListPanelSelectionChanged = this.onHistoryListPanelSelectionChanged.bind(this);
|
|
96
92
|
this.renderDetailPanel = this.renderDetailPanel.bind(this);
|
|
97
93
|
this.renderDetailPanelForHistory = this.renderDetailPanelForHistory.bind(this);
|
|
98
94
|
this.renderControlPanel = this.renderControlPanel.bind(this);
|
|
99
|
-
this.onLocationChanged = this.onLocationChanged.bind(this);
|
|
100
95
|
this.renderToolbar = this.renderToolbar.bind(this);
|
|
101
|
-
window.addEventListener("hashchange", this.onLocationChanged, false);
|
|
102
96
|
}
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
async onLoadData(callback) {
|
|
98
|
+
await super.onLoadData(callback);
|
|
99
|
+
this.subscribeRefreshList();
|
|
105
100
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
101
|
+
subscribeRefreshList() {
|
|
102
|
+
this.refreshListHandler = this.props.api.subscribeRefreshList(() => {
|
|
103
|
+
this.gridApi?.refreshInfiniteCache();
|
|
104
|
+
});
|
|
111
105
|
}
|
|
112
106
|
componentWillUnmount() {
|
|
113
|
-
|
|
107
|
+
this.refreshListHandler?.close();
|
|
114
108
|
}
|
|
115
109
|
getPanelConfiguration() {
|
|
116
110
|
return this.state.panelConfiguration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractListPanel.js","sourceRoot":"","sources":["../../../coreui/abstractListPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport ExtendedDataGrid, {GridConfiguration} from \"d2coreui/components/grid/extendedDataGrid\";\r\nimport {DataGridColDef} from \"d2coreui/components/grid/dataGrid\";\r\nimport {GridReadyEvent, IGetRowsParams, SelectionChangedEvent, RowDoubleClickedEvent, RowModelType} from \"ag-grid-community\";\r\nimport {PageableList} from \"../api/abstractEntityApi\";\r\nimport {Breadcrumb, Button, Drawer, Popover} from \"antd\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {\r\n BulbOutlined,\r\n CheckCircleOutlined,\r\n CloseCircleOutlined,\r\n CopyOutlined,\r\n DeleteOutlined,\r\n HistoryOutlined,\r\n MoreOutlined,\r\n PlusCircleOutlined,\r\n ProfileOutlined\r\n} from \"@ant-design/icons\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport AuditableEntity from \"../api/types/auditableEntity\";\r\nimport AdvancedFilteredGrid, {\r\n AdvancedFilteredGridProps,\r\n AdvancedFilteredGridState\r\n} from \"./components/advancedFilter/advancedFilteredGrid\";\r\nimport {GeneralEntityColumn} from \"./components/advancedFilter/advancedFilterColumnDefinitions\";\r\nimport AdvancedFilterButton from \"./components/advancedFilter/advancedFilterButton\";\r\nimport {PanelConfiguration} from \"../core/types/panelConfiguration\";\r\nimport auditEntityRowStyleRules from \"./components/grid/auditEntityRowStyleRules\";\r\nimport LocationUtils from \"../core/util/locationUtils\";\r\nimport TitleWithCodePanel from \"./components/titleWithCodePanel/titleWithCodePanel\";\r\nimport EntityHistoryListPanel from \"./components/history/entityHistoryListPanel\";\r\nimport {AccessRight} from \"../api/types/accessRight\";\r\nimport {ERROR_COLOR, SUCCESS_COLOR} from \"../api/constants/constants\";\r\nimport AbstractEntityConfigPanel from \"./components/editor/abstractEntityConfigPanel\";\r\nimport {DbBoolean} from \"../api/types/dbBoolean\";\r\nimport {ItemType} from \"antd/es/breadcrumb/Breadcrumb\";\r\nimport {createStyles} from \"antd-style\";\r\nimport WithCss from \"d2coreui/components/style/withCss\";\r\nimport ColorTag from \"./components/colorTag/colorTag\";\r\n\r\nconst useStyles = createStyles(({css}) => {\r\n return {\r\n compactBreadcrumb: css`\r\n ol {\r\n display: table;\r\n }\r\n\r\n ol li {\r\n display: table-cell;\r\n white-space: nowrap;\r\n }\r\n `\r\n }\r\n});\r\n\r\nexport const DETAIL_PANEL_DEFAULT_WIDTH = 560;\r\nconst MAX_WIDTH_MOBILE = 500;\r\n\r\nexport interface AbstractBreadcrumbItem {\r\n pageName: string\r\n code: string\r\n}\r\n\r\nexport interface AbstractListPanelConfiguration extends PanelConfiguration {\r\n gridConfiguration: GridConfiguration\r\n}\r\n\r\nexport interface AbstractListPanelProps<\r\n T extends AuditableEntity,\r\n C extends AbstractListPanelConfiguration = AbstractListPanelConfiguration\r\n> extends AdvancedFilteredGridProps<T> {\r\n breadcrumbPath?: AbstractBreadcrumbItem[]\r\n\r\n getConfiguration(initialConfiguration: C): C\r\n\r\n onPanelConfigurationChanged(): void\r\n}\r\n\r\nexport interface AbstractListPanelState<\r\n T extends AuditableEntity,\r\n C extends AbstractListPanelConfiguration = AbstractListPanelConfiguration\r\n> extends AdvancedFilteredGridState<T> {\r\n panelConfiguration: C\r\n detailPanelVisible: boolean\r\n modalDetailPanelVisible: boolean\r\n deletedRecordsVisible: boolean\r\n historyModalVisible: boolean\r\n dropdownMenuVisible: boolean\r\n waitingForNewEntity: boolean\r\n waitingForEntityCopy: boolean\r\n quickActionsListVisible: boolean\r\n accessRight: AccessRight\r\n}\r\n\r\nexport abstract class AbstractListPanel<\r\n T extends AuditableEntity,\r\n P extends AbstractListPanelProps<T, C>,\r\n S extends AbstractListPanelState<T, C>,\r\n C extends AbstractListPanelConfiguration = AbstractListPanelConfiguration,\r\n> extends AdvancedFilteredGrid<T, P, S> {\r\n\r\n protected detailPanel: AbstractEntityConfigPanel<any, any> | null = null;\r\n private idToSelect: number | undefined = undefined;\r\n\r\n protected constructor(props: Readonly<P>) {\r\n super(props);\r\n\r\n const advancedFilterCondition = LocationUtils.hashToAdvancedFilterCondition(window.location.hash, this.getAllowedColumnNameForSearchParams());\r\n if (advancedFilterCondition) {\r\n this.initialState.filterConditions = [advancedFilterCondition];\r\n }\r\n\r\n this.onSelectionChanged = this.onSelectionChanged.bind(this);\r\n this.onRowDoubleClicked = this.onRowDoubleClicked.bind(this);\r\n this.onHistoryListPanelSelectionChanged = this.onHistoryListPanelSelectionChanged.bind(this);\r\n this.renderDetailPanel = this.renderDetailPanel.bind(this);\r\n this.renderDetailPanelForHistory = this.renderDetailPanelForHistory.bind(this);\r\n this.renderControlPanel = this.renderControlPanel.bind(this);\r\n this.onLocationChanged = this.onLocationChanged.bind(this);\r\n this.renderToolbar = this.renderToolbar.bind(this);\r\n\r\n window.addEventListener(\"hashchange\", this.onLocationChanged, false);\r\n }\r\n\r\n protected initialState: Omit<AbstractListPanelState<T, C>, \"panelConfiguration\"> = {\r\n detailPanelVisible: false,\r\n modalDetailPanelVisible: false,\r\n deletedRecordsVisible: false,\r\n historyModalVisible: false,\r\n dropdownMenuVisible: false,\r\n columnDefs: this.getInitialColumnDefs(),\r\n loading: false,\r\n datasource: {\r\n getRows: async (params: IGetRowsParams) => {\r\n if (this.firstLoadedPage) {\r\n let pageableList: PageableList<T>;\r\n if (this.manualReload && params.startRow === 0 && params.endRow === 100) {\r\n this.manualReload = false;\r\n pageableList = this.firstLoadedPage;\r\n } else {\r\n pageableList = await this.getRecords(params.startRow, params.endRow);\r\n }\r\n params.successCallback(pageableList.data, pageableList.totalNumberOfRows);\r\n\r\n setTimeout(() => {\r\n this.setState({selectedData: this.gridApi?.getSelectedRows() ?? []});\r\n\r\n if (this.idToSelect !== undefined && pageableList.data.some(value => value.id === this.idToSelect)) {\r\n const rowNode = this.gridApi?.getRowNode(this.idToSelect.toString());\r\n this.gridApi?.ensureNodeVisible(rowNode);\r\n rowNode?.setSelected(true, true);\r\n this.idToSelect = undefined;\r\n }\r\n }, 200);\r\n } else {\r\n params.successCallback([], 0);\r\n }\r\n }\r\n },\r\n selectedData: [],\r\n waitingForNewEntity: false,\r\n waitingForEntityCopy: false,\r\n quickActionsListVisible: false,\r\n accessRight: AccessRight.NONE,\r\n filterConditions: [],\r\n }\r\n\r\n protected getAllowedColumnNameForSearchParams(): string | undefined {\r\n return undefined;\r\n }\r\n\r\n onLocationChanged() {\r\n const advancedFilterCondition = LocationUtils.hashToAdvancedFilterCondition(window.location.hash, this.getAllowedColumnNameForSearchParams());\r\n if (advancedFilterCondition) {\r\n this.onApplyFilter([advancedFilterCondition]);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"hashchange\", this.onLocationChanged);\r\n }\r\n\r\n protected initialGridConfiguration: GridConfiguration = {\r\n pageSize: -1,\r\n columnSearchVisible: true,\r\n rowStyleRules: auditEntityRowStyleRules(),\r\n defaultRowStyleRules: auditEntityRowStyleRules(),\r\n }\r\n\r\n getPanelConfiguration(): AbstractListPanelConfiguration {\r\n return this.state.panelConfiguration;\r\n }\r\n\r\n onPanelConfigurationChanged(configuration: Partial<AbstractListPanelConfiguration>) {\r\n const panelConfiguration = this.state.panelConfiguration;\r\n Object.assign(panelConfiguration, configuration);\r\n this.setState({panelConfiguration: panelConfiguration}, () => {\r\n this.props.onPanelConfigurationChanged();\r\n });\r\n }\r\n\r\n protected async onRecordsLoaded(): Promise<void> {\r\n const accessRight = await this.props.api.getAccessRight();\r\n this.setState({accessRight: accessRight});\r\n }\r\n\r\n getOnlyValidRecords(): boolean {\r\n return !this.state.deletedRecordsVisible;\r\n }\r\n\r\n updateGrid(entity: T) {\r\n this.setState({modalDetailPanelVisible: false});\r\n this.idToSelect = entity.id;\r\n this.gridApi?.refreshInfiniteCache();\r\n }\r\n\r\n abstract getInitialColumnDefs(): DataGridColDef[];\r\n\r\n abstract renderDetailPanel(): React.ReactElement;\r\n\r\n abstract renderDetailPanelForHistory(entity: T | undefined, differences: string[]): React.ReactElement;\r\n\r\n protected focusFieldInDetailPanel(): void {\r\n this.detailPanel?.focusFirstField();\r\n }\r\n\r\n protected getAuditColumnDefs(): DataGridColDef[] {\r\n const auditColumnParams: Partial<DataGridColDef> = {\r\n group: i18n(\"Audit\"),\r\n initialHide: true,\r\n }\r\n\r\n return [\r\n this.getDateTimeColumn(GeneralEntityColumn.CREATE_DATE, {headerName: i18n(\"Date of Insert\"), ...auditColumnParams}),\r\n this.getStringColumn(GeneralEntityColumn.CREATED_BY, {headerName: i18n(\"Created By\"), ...auditColumnParams}),\r\n this.getDateTimeColumn(GeneralEntityColumn.MODIFY_DATE, {headerName: i18n(\"Modify Date\"), ...auditColumnParams}),\r\n this.getStringColumn(GeneralEntityColumn.MODIFIED_BY, {headerName: i18n(\"Modified By\"), ...auditColumnParams}),\r\n this.getDbBooleanColumn(GeneralEntityColumn.VALIDITY, {headerName: i18n(\"Valid\"), ...auditColumnParams}),\r\n ]\r\n }\r\n\r\n protected onCloseDetailPanel() {\r\n this.setState({\r\n selectedData: this.gridApi?.getSelectedRows() ?? [],\r\n detailPanelVisible: false,\r\n modalDetailPanelVisible: false\r\n });\r\n this.dataGrid?.showDetailPanel(false);\r\n }\r\n\r\n protected onRowDoubleClicked(event: RowDoubleClickedEvent) {\r\n this.setState({\r\n selectedData: [event.data],\r\n detailPanelVisible: true,\r\n modalDetailPanelVisible: this.isMobile(),\r\n });\r\n\r\n if (!this.isMobile()) {\r\n this.dataGrid?.showDetailPanel(true);\r\n }\r\n }\r\n\r\n protected getDetailPanelDefaultWidth(): number {\r\n return DETAIL_PANEL_DEFAULT_WIDTH;\r\n }\r\n\r\n onSelectionChanged(event: SelectionChangedEvent) {\r\n const selectedRows = event.api.getSelectedRows();\r\n if (selectedRows.length > 0) {\r\n this.setState({selectedData: selectedRows});\r\n } else {\r\n this.setState({selectedData: [], detailPanelVisible: false});\r\n this.dataGrid?.showDetailPanel(false);\r\n }\r\n }\r\n\r\n protected adaptNewRecord(newRecord: T) {\r\n newRecord;\r\n }\r\n\r\n protected getDataToDelete() {\r\n return this.state.selectedData.filter(data => data.ano_platny === DbBoolean.TRUE);\r\n }\r\n\r\n protected getDataToRecover() {\r\n return this.state.selectedData.filter(data => data.ano_platny === DbBoolean.FALSE);\r\n }\r\n\r\n protected isValidityChangeDisabled(): boolean {\r\n return this.state.loading || this.state.selectedData[0]?.id === undefined;\r\n }\r\n\r\n protected renderValidityButton(): React.ReactNode | undefined {\r\n const operationDisabled = this.isValidityChangeDisabled();\r\n\r\n const dataToDelete = this.getDataToDelete();\r\n const dataToRecover = this.getDataToRecover();\r\n\r\n let allowedAction: \"delete\" | \"recover\" | \"none\" = \"none\";\r\n if (dataToDelete.length > 0) {\r\n allowedAction = \"delete\";\r\n } else if (dataToRecover.length > 0) {\r\n allowedAction = \"recover\";\r\n } else {\r\n allowedAction = \"none\";\r\n }\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={allowedAction === \"recover\" ? i18n(\"Mark Record As Valid\") : i18n(\"Mark Record As Deleted\")}\r\n disabled={operationDisabled || allowedAction === \"none\"}\r\n icon={allowedAction === \"recover\" ? <CheckCircleOutlined/> : <CloseCircleOutlined/>}\r\n onClick={() => {\r\n ModalDialog.delete({\r\n mode: ModalDialogMode.YES_NO,\r\n title: <span style={{whiteSpace: \"nowrap\"}}>\r\n {allowedAction === \"recover\" ? i18n(\"Mark %n records as valid?\", dataToRecover.length) : i18n(\"Mark %n records as deleted?\", dataToDelete.length)}\r\n </span>,\r\n icon:\r\n allowedAction === \"delete\" ?\r\n <CloseCircleOutlined style={{color: ERROR_COLOR}}/>\r\n :\r\n <CheckCircleOutlined style={{color: SUCCESS_COLOR}}/>,\r\n onOk: async () => {\r\n for (const data of allowedAction === \"delete\" ? dataToDelete : dataToRecover) {\r\n const isOk = await this.props.api.setValidity(data, allowedAction === \"recover\");\r\n if (!isOk) {\r\n return;\r\n }\r\n }\r\n this.gridApi?.refreshInfiniteCache();\r\n }\r\n });\r\n }}\r\n />\r\n );\r\n }\r\n\r\n protected renderAdvancedFilterButton(): React.ReactNode | undefined {\r\n const advancedFilterConfig = this.getAdvancedFilterConfig();\r\n\r\n if (advancedFilterConfig) {\r\n return (\r\n <AdvancedFilterButton\r\n advancedFilterApi={this.props.advancedFilterApi}\r\n listName={advancedFilterConfig.listName}\r\n columnDefinitions={this.getAdvancedFilterColumnDefinitions()}\r\n filterConditions={this.state.filterConditions}\r\n onApplyFilter={this.onApplyFilter}\r\n onMenuItemClicked={() => {\r\n this.setState({dropdownMenuVisible: false});\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n protected isMobile(): boolean {\r\n return window.innerWidth <= MAX_WIDTH_MOBILE;\r\n }\r\n\r\n protected renderCopyButton(): React.ReactNode | undefined {\r\n const disabled = this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined;\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={i18n(\"Create Copy\")}\r\n disabled={disabled}\r\n loading={this.state.waitingForEntityCopy}\r\n icon={<CopyOutlined/>}\r\n onClick={async () => {\r\n this.setState({waitingForEntityCopy: true});\r\n const newRecord = await this.props.api.createNewEntity(this.state.selectedData[0]);\r\n this.adaptNewRecord(newRecord);\r\n this.setState({selectedData: [newRecord], dropdownMenuVisible: false, waitingForEntityCopy: false});\r\n if (this.isMobile()) {\r\n this.setState({modalDetailPanelVisible: true})\r\n } else {\r\n this.setState({detailPanelVisible: true});\r\n this.dataGrid?.showDetailPanel(true);\r\n setTimeout(() => this.focusFieldInDetailPanel());\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n protected renderNewRecordButton(): React.ReactNode | undefined {\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={i18n(\"New Record\")}\r\n disabled={this.state.loading}\r\n loading={this.state.waitingForNewEntity}\r\n icon={<PlusCircleOutlined/>}\r\n onClick={() => {\r\n this.gridApi?.deselectAll();\r\n setTimeout(async () => {\r\n this.setState({waitingForNewEntity: true});\r\n const newRecord = await this.props.api.createNewEntity();\r\n this.adaptNewRecord(newRecord);\r\n this.setState({selectedData: [newRecord], waitingForNewEntity: false});\r\n if (this.isMobile()) {\r\n this.setState({modalDetailPanelVisible: true})\r\n } else {\r\n this.setState({detailPanelVisible: true});\r\n this.dataGrid?.showDetailPanel(true);\r\n this.focusFieldInDetailPanel();\r\n }\r\n })\r\n }}\r\n />\r\n );\r\n }\r\n\r\n protected renderDetailPanelButton(): React.ReactNode | undefined {\r\n const disabled = this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined;\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n type={this.state.detailPanelVisible ? \"primary\" : \"default\"}\r\n title={i18n(this.state.detailPanelVisible ? \"Hide Detail\" : \"Show Detail\")}\r\n disabled={disabled}\r\n icon={<ProfileOutlined/>}\r\n onClick={() => {\r\n if (this.isMobile()) {\r\n this.setState({modalDetailPanelVisible: true})\r\n } else {\r\n const detailPanelVisible = this.state.detailPanelVisible;\r\n this.setState({detailPanelVisible: !detailPanelVisible});\r\n this.dataGrid?.showDetailPanel(!detailPanelVisible);\r\n }\r\n }}\r\n />\r\n )\r\n }\r\n\r\n protected renderTrashButton(): React.ReactNode | undefined {\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n type={this.state.deletedRecordsVisible ? \"primary\" : \"default\"}\r\n title={i18n(this.state.deletedRecordsVisible ? \"Hide Deleted Records\" : \"Show Deleted Records\")}\r\n icon={<DeleteOutlined/>}\r\n onClick={() => {\r\n this.setState({deletedRecordsVisible: !this.state.deletedRecordsVisible}, () => {\r\n this.gridApi?.refreshInfiniteCache();\r\n });\r\n }}\r\n />\r\n )\r\n }\r\n\r\n protected renderShortcutButton(): React.ReactNode | undefined {\r\n if (this.renderShortcutPanel()) {\r\n const disabled = this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined;\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={i18n(\"Quick Actions\")}\r\n disabled={disabled}\r\n icon={<BulbOutlined/>}\r\n onClick={() => {\r\n this.setState({quickActionsListVisible: true, dropdownMenuVisible: false});\r\n }}\r\n />\r\n )\r\n }\r\n return undefined;\r\n }\r\n\r\n protected renderAdditionalButtons(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderHistoryButton(): React.ReactNode | undefined {\r\n return (\r\n <Button\r\n disabled={this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined}\r\n onClick={() => {\r\n this.setState({historyModalVisible: true});\r\n }}\r\n >\r\n <HistoryOutlined/>\r\n </Button>\r\n );\r\n }\r\n\r\n protected renderShortcutPanel(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderShortcutDrawer() {\r\n return (\r\n <Drawer\r\n title={<TitleWithCodePanel title={this.getPageTitle()} code={this.getBreadcrumbCode() ?? \"\"}/>}\r\n styles={{body: {padding: 0}}}\r\n placement=\"top\"\r\n height={240}\r\n onClose={() => {\r\n this.setState({quickActionsListVisible: false})\r\n }}\r\n open={this.state.quickActionsListVisible}\r\n >\r\n {this.renderShortcutPanel()}\r\n </Drawer>\r\n );\r\n }\r\n\r\n protected renderToolbar(originalSearchBar: React.ReactElement): React.ReactElement {\r\n return originalSearchBar;\r\n }\r\n\r\n renderToolbarButtons() {\r\n if (this.isMobile()) {\r\n return (\r\n <>\r\n <Popover\r\n open={this.state.dropdownMenuVisible}\r\n onOpenChange={visible => {\r\n this.setState({dropdownMenuVisible: visible})\r\n }}\r\n content={\r\n <>\r\n <div>{this.renderAdvancedFilterButton()}</div>\r\n <div>{this.renderCopyButton()}</div>\r\n <div>{this.renderValidityButton()}</div>\r\n <div>{this.renderTrashButton()}</div>\r\n <div>{this.renderShortcutButton()}</div>\r\n <div>{this.renderAdditionalButtons()}</div>\r\n </>\r\n }\r\n trigger=\"click\"\r\n >\r\n <Button>\r\n <MoreOutlined/>\r\n </Button>\r\n </Popover>\r\n {this.renderNewRecordButton()}\r\n {this.renderDetailPanelButton()}\r\n </>\r\n )\r\n } else {\r\n return <>\r\n {this.renderAdvancedFilterButton()}\r\n {this.renderNewRecordButton()}\r\n {this.renderCopyButton()}\r\n {this.renderDetailPanelButton()}\r\n {this.renderValidityButton()}\r\n {this.renderTrashButton()}\r\n {this.renderHistoryButton()}\r\n {this.renderShortcutButton()}\r\n {this.renderAdditionalButtons()}\r\n </>\r\n }\r\n }\r\n\r\n protected renderControlPanel(): JSX.Element | null {\r\n return null;\r\n }\r\n\r\n protected getRowSelection(): \"single\" | \"multiple\" {\r\n return \"multiple\";\r\n }\r\n\r\n protected getRowModelType(): RowModelType {\r\n return \"infinite\";\r\n }\r\n\r\n protected getRowData(): T[] | undefined {\r\n return undefined;\r\n }\r\n\r\n abstract getPageTitle(): string\r\n\r\n protected getLoadedData(): T[] {\r\n const data: T[] = [];\r\n this.gridApi?.forEachNode(value => data.push(value.data));\r\n\r\n return data;\r\n }\r\n\r\n private renderDetailPanelModalDialog() {\r\n return (\r\n <ModalDialog\r\n className=\"modal-no-header full-screen-modal\"\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n closable={false}\r\n open={this.state.modalDetailPanelVisible}\r\n styles={{body: {padding: 0}}}\r\n initialWidth={window.innerWidth}\r\n initialHeight={window.innerHeight}\r\n forceRender\r\n >\r\n {this.renderDetailPanel()}\r\n </ModalDialog>\r\n )\r\n }\r\n\r\n protected onHistoryListPanelSelectionChanged() {\r\n }\r\n\r\n private renderHistoryModalDialog(): React.ReactElement {\r\n const selectedEntity = this.state.selectedData[0];\r\n\r\n return (\r\n <ModalDialog\r\n styles={{body: {padding: 0}}}\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n open={this.state.historyModalVisible}\r\n onCancel={() => this.setState({historyModalVisible: false})}\r\n title={<TitleWithCodePanel title={i18n(\"History\")} code={selectedEntity?.code ?? \"\"}/>}\r\n initialWidth={window.innerWidth * 0.99}\r\n initialHeight={window.innerHeight * 0.95}\r\n >\r\n <EntityHistoryListPanel\r\n api={this.props.api}\r\n entity={selectedEntity}\r\n renderDetail={this.renderDetailPanelForHistory}\r\n detailPanelWidth={this.getDetailPanelDefaultWidth() * 2}\r\n onSelectionChanged={this.onHistoryListPanelSelectionChanged}\r\n />\r\n </ModalDialog>\r\n );\r\n }\r\n\r\n private renderBreadcrumbItem(pageName: React.ReactNode, code?: string): ItemType {\r\n return {\r\n title: <>\r\n {pageName}\r\n {code && <ColorTag style={{marginLeft: 4, fontSize: 14}}>{code}</ColorTag>}\r\n </>,\r\n }\r\n }\r\n\r\n private renderBreadcrumb() {\r\n const pageTitle = this.getPageTitle();\r\n\r\n if (pageTitle) {\r\n const breadcrumbCode = this.getBreadcrumbCode();\r\n return (\r\n <WithCss useStyles={useStyles}>{(css) =>\r\n <Breadcrumb\r\n className={css.styles.compactBreadcrumb}\r\n style={{paddingBottom: 10, fontSize: 20, overflowX: \"auto\"}}\r\n items={\r\n [\r\n ...this.props.breadcrumbPath?.map(value => this.renderBreadcrumbItem(value.pageName, value.code)) ?? [],\r\n this.renderBreadcrumbItem(pageTitle, breadcrumbCode),\r\n ]\r\n }\r\n >\r\n </Breadcrumb>\r\n }</WithCss>\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n protected getBreadcrumbCode() {\r\n return this.state.selectedData[0]?.code ?? undefined;\r\n }\r\n\r\n protected getExtendedBreadcrumbPath() {\r\n return [\r\n ...this.props.breadcrumbPath ?? [],\r\n {pageName: this.getPageTitle() ?? \"\", code: this.getBreadcrumbCode() ?? \"\"}\r\n ]\r\n }\r\n\r\n render() {\r\n return (\r\n <div style={{display: \"flex\", flexDirection: \"column\", height: \"100%\"}}>\r\n <div style={{padding: \"10px 12px 0px\", borderBottom: \"2px solid #f5f5f5\", fontWeight: 500}}>\r\n {this.renderBreadcrumb()}\r\n </div>\r\n <div style={{position: \"relative\", height: \"100%\"}}>\r\n {this.renderHistoryModalDialog()}\r\n {this.renderDetailPanelModalDialog()}\r\n {this.renderShortcutDrawer()}\r\n <ExtendedDataGrid<T>\r\n tablePanelStyle={{\r\n marginTop: 8,\r\n }}\r\n panelStyle={{\r\n paddingTop: 8,\r\n }}\r\n ref={(dataGrid) => {\r\n this.dataGrid = dataGrid;\r\n }}\r\n defaultGridConfiguration={this.state.panelConfiguration.gridConfiguration}\r\n onChangeConfiguration={gridConfiguration => {\r\n this.onPanelConfigurationChanged({gridConfiguration: gridConfiguration});\r\n }}\r\n onGridReady={(params: GridReadyEvent) => {\r\n this.gridApi = params.api;\r\n }}\r\n rowModelType={this.getRowModelType()}\r\n rowData={this.getRowData()}\r\n datasource={this.state.datasource}\r\n onLoadData={this.onLoadData}\r\n onSelectionChanged={this.onSelectionChanged}\r\n columnDefs={this.state.columnDefs}\r\n search={{\r\n onSearch: () => {\r\n this.dataGrid?.loadData();\r\n },\r\n hidden: true,\r\n }}\r\n onSortChanged={() => {\r\n this.dataGrid?.loadData();\r\n }}\r\n onRowDoubleClicked={this.onRowDoubleClicked}\r\n detailPanel={{\r\n defaultWidth: this.getDetailPanelDefaultWidth(),\r\n renderer: this.renderDetailPanel\r\n }}\r\n toolbar={{\r\n toolbarButtons: this.renderToolbarButtons(),\r\n renderToolbar: this.renderToolbar,\r\n }}\r\n animateRows\r\n rowSelection={this.getRowSelection()}\r\n controlPanel={{\r\n renderer: this.renderControlPanel\r\n }}\r\n noRecordsOverlayRenderer={() => <div/>}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n}"]}
|
|
1
|
+
{"version":3,"file":"abstractListPanel.js","sourceRoot":"","sources":["../../../coreui/abstractListPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport ExtendedDataGrid, {GridConfiguration} from \"d2coreui/components/grid/extendedDataGrid\";\r\nimport {DataGridColDef, OnLoadDataCallback} from \"d2coreui/components/grid/dataGrid\";\r\nimport {\r\n GridReadyEvent,\r\n IGetRowsParams,\r\n RowDoubleClickedEvent,\r\n RowModelType,\r\n SelectionChangedEvent\r\n} from \"ag-grid-community\";\r\nimport {Closeable, PageableList} from \"../api/abstractEntityApi\";\r\nimport {Breadcrumb, Button, Drawer, Popover} from \"antd\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {\r\n BulbOutlined,\r\n CheckCircleOutlined,\r\n CloseCircleOutlined,\r\n CopyOutlined,\r\n DeleteOutlined,\r\n HistoryOutlined,\r\n MoreOutlined,\r\n PlusCircleOutlined,\r\n ProfileOutlined\r\n} from \"@ant-design/icons\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport AuditableEntity from \"../api/types/auditableEntity\";\r\nimport AdvancedFilteredGrid, {\r\n AdvancedFilteredGridProps,\r\n AdvancedFilteredGridState\r\n} from \"./components/advancedFilter/advancedFilteredGrid\";\r\nimport {GeneralEntityColumn} from \"./components/advancedFilter/advancedFilterColumnDefinitions\";\r\nimport AdvancedFilterButton from \"./components/advancedFilter/advancedFilterButton\";\r\nimport {PanelConfiguration} from \"../core/types/panelConfiguration\";\r\nimport auditEntityRowStyleRules from \"./components/grid/auditEntityRowStyleRules\";\r\nimport TitleWithCodePanel from \"./components/titleWithCodePanel/titleWithCodePanel\";\r\nimport EntityHistoryListPanel from \"./components/history/entityHistoryListPanel\";\r\nimport {AccessRight} from \"../api/types/accessRight\";\r\nimport {ERROR_COLOR, SUCCESS_COLOR} from \"../api/constants/constants\";\r\nimport AbstractEntityConfigPanel from \"./components/editor/abstractEntityConfigPanel\";\r\nimport {DbBoolean} from \"../api/types/dbBoolean\";\r\nimport {ItemType} from \"antd/es/breadcrumb/Breadcrumb\";\r\nimport {createStyles} from \"antd-style\";\r\nimport WithCss from \"d2coreui/components/style/withCss\";\r\nimport ColorTag from \"./components/colorTag/colorTag\";\r\n\r\nconst useStyles = createStyles(({css}) => {\r\n return {\r\n compactBreadcrumb: css`\r\n ol {\r\n display: table;\r\n }\r\n\r\n ol li {\r\n display: table-cell;\r\n white-space: nowrap;\r\n }\r\n `\r\n }\r\n});\r\n\r\nexport const DETAIL_PANEL_DEFAULT_WIDTH = 560;\r\nconst MAX_WIDTH_MOBILE = 500;\r\n\r\nexport interface AbstractBreadcrumbItem {\r\n pageName: string\r\n code: string\r\n}\r\n\r\nexport interface AbstractListPanelConfiguration extends PanelConfiguration {\r\n gridConfiguration: GridConfiguration\r\n}\r\n\r\nexport interface AbstractListPanelProps<\r\n T extends AuditableEntity,\r\n C extends AbstractListPanelConfiguration = AbstractListPanelConfiguration\r\n> extends AdvancedFilteredGridProps<T> {\r\n breadcrumbPath?: AbstractBreadcrumbItem[]\r\n\r\n getConfiguration(initialConfiguration: C): C\r\n\r\n onPanelConfigurationChanged(): void\r\n}\r\n\r\nexport interface AbstractListPanelState<\r\n T extends AuditableEntity,\r\n C extends AbstractListPanelConfiguration = AbstractListPanelConfiguration\r\n> extends AdvancedFilteredGridState<T> {\r\n panelConfiguration: C\r\n detailPanelVisible: boolean\r\n modalDetailPanelVisible: boolean\r\n deletedRecordsVisible: boolean\r\n historyModalVisible: boolean\r\n dropdownMenuVisible: boolean\r\n waitingForNewEntity: boolean\r\n waitingForEntityCopy: boolean\r\n quickActionsListVisible: boolean\r\n accessRight: AccessRight\r\n}\r\n\r\nexport abstract class AbstractListPanel<\r\n T extends AuditableEntity,\r\n P extends AbstractListPanelProps<T, C>,\r\n S extends AbstractListPanelState<T, C>,\r\n C extends AbstractListPanelConfiguration = AbstractListPanelConfiguration,\r\n> extends AdvancedFilteredGrid<T, P, S> {\r\n\r\n protected detailPanel: AbstractEntityConfigPanel<any, any> | null = null;\r\n protected refreshListHandler: Closeable | null = null;\r\n private idToSelect: number | undefined = undefined;\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.onRowDoubleClicked = this.onRowDoubleClicked.bind(this);\r\n this.onHistoryListPanelSelectionChanged = this.onHistoryListPanelSelectionChanged.bind(this);\r\n this.renderDetailPanel = this.renderDetailPanel.bind(this);\r\n this.renderDetailPanelForHistory = this.renderDetailPanelForHistory.bind(this);\r\n this.renderControlPanel = this.renderControlPanel.bind(this);\r\n this.renderToolbar = this.renderToolbar.bind(this);\r\n }\r\n\r\n protected initialState: Omit<AbstractListPanelState<T, C>, \"panelConfiguration\"> = {\r\n detailPanelVisible: false,\r\n modalDetailPanelVisible: false,\r\n deletedRecordsVisible: false,\r\n historyModalVisible: false,\r\n dropdownMenuVisible: false,\r\n columnDefs: this.getInitialColumnDefs(),\r\n loading: false,\r\n datasource: {\r\n getRows: async (params: IGetRowsParams) => {\r\n if (this.firstLoadedPage) {\r\n let pageableList: PageableList<T>;\r\n if (this.manualReload && params.startRow === 0 && params.endRow === 100) {\r\n this.manualReload = false;\r\n pageableList = this.firstLoadedPage;\r\n } else {\r\n pageableList = await this.getRecords(params.startRow, params.endRow);\r\n }\r\n params.successCallback(pageableList.data, pageableList.totalNumberOfRows);\r\n\r\n setTimeout(() => {\r\n this.setState({selectedData: this.gridApi?.getSelectedRows() ?? []});\r\n\r\n if (this.idToSelect !== undefined && pageableList.data.some(value => value.id === this.idToSelect)) {\r\n const rowNode = this.gridApi?.getRowNode(this.idToSelect.toString());\r\n this.gridApi?.ensureNodeVisible(rowNode);\r\n rowNode?.setSelected(true, true);\r\n this.idToSelect = undefined;\r\n }\r\n }, 200);\r\n } else {\r\n params.successCallback([], 0);\r\n }\r\n }\r\n },\r\n selectedData: [],\r\n waitingForNewEntity: false,\r\n waitingForEntityCopy: false,\r\n quickActionsListVisible: false,\r\n accessRight: AccessRight.NONE,\r\n filterConditions: [],\r\n }\r\n\r\n protected async onLoadData(callback: OnLoadDataCallback): Promise<void> {\r\n await super.onLoadData(callback);\r\n this.subscribeRefreshList();\r\n }\r\n\r\n protected subscribeRefreshList() {\r\n this.refreshListHandler = this.props.api.subscribeRefreshList(() => {\r\n this.gridApi?.refreshInfiniteCache();\r\n })\r\n }\r\n\r\n componentWillUnmount() {\r\n this.refreshListHandler?.close();\r\n }\r\n\r\n protected initialGridConfiguration: GridConfiguration = {\r\n pageSize: -1,\r\n columnSearchVisible: true,\r\n rowStyleRules: auditEntityRowStyleRules(),\r\n defaultRowStyleRules: auditEntityRowStyleRules(),\r\n }\r\n\r\n getPanelConfiguration(): AbstractListPanelConfiguration {\r\n return this.state.panelConfiguration;\r\n }\r\n\r\n onPanelConfigurationChanged(configuration: Partial<AbstractListPanelConfiguration>) {\r\n const panelConfiguration = this.state.panelConfiguration;\r\n Object.assign(panelConfiguration, configuration);\r\n this.setState({panelConfiguration: panelConfiguration}, () => {\r\n this.props.onPanelConfigurationChanged();\r\n });\r\n }\r\n\r\n protected async onRecordsLoaded(): Promise<void> {\r\n const accessRight = await this.props.api.getAccessRight();\r\n this.setState({accessRight: accessRight});\r\n }\r\n\r\n getOnlyValidRecords(): boolean {\r\n return !this.state.deletedRecordsVisible;\r\n }\r\n\r\n updateGrid(entity: T) {\r\n this.setState({modalDetailPanelVisible: false});\r\n this.idToSelect = entity.id;\r\n this.gridApi?.refreshInfiniteCache();\r\n }\r\n\r\n abstract getInitialColumnDefs(): DataGridColDef[];\r\n\r\n abstract renderDetailPanel(): React.ReactElement;\r\n\r\n abstract renderDetailPanelForHistory(entity: T | undefined, differences: string[]): React.ReactElement;\r\n\r\n protected focusFieldInDetailPanel(): void {\r\n this.detailPanel?.focusFirstField();\r\n }\r\n\r\n protected getAuditColumnDefs(): DataGridColDef[] {\r\n const auditColumnParams: Partial<DataGridColDef> = {\r\n group: i18n(\"Audit\"),\r\n initialHide: true,\r\n }\r\n\r\n return [\r\n this.getDateTimeColumn(GeneralEntityColumn.CREATE_DATE, {headerName: i18n(\"Date of Insert\"), ...auditColumnParams}),\r\n this.getStringColumn(GeneralEntityColumn.CREATED_BY, {headerName: i18n(\"Created By\"), ...auditColumnParams}),\r\n this.getDateTimeColumn(GeneralEntityColumn.MODIFY_DATE, {headerName: i18n(\"Modify Date\"), ...auditColumnParams}),\r\n this.getStringColumn(GeneralEntityColumn.MODIFIED_BY, {headerName: i18n(\"Modified By\"), ...auditColumnParams}),\r\n this.getDbBooleanColumn(GeneralEntityColumn.VALIDITY, {headerName: i18n(\"Valid\"), ...auditColumnParams}),\r\n ]\r\n }\r\n\r\n protected onCloseDetailPanel() {\r\n this.setState({\r\n selectedData: this.gridApi?.getSelectedRows() ?? [],\r\n detailPanelVisible: false,\r\n modalDetailPanelVisible: false\r\n });\r\n this.dataGrid?.showDetailPanel(false);\r\n }\r\n\r\n protected onRowDoubleClicked(event: RowDoubleClickedEvent) {\r\n this.setState({\r\n selectedData: [event.data],\r\n detailPanelVisible: true,\r\n modalDetailPanelVisible: this.isMobile(),\r\n });\r\n\r\n if (!this.isMobile()) {\r\n this.dataGrid?.showDetailPanel(true);\r\n }\r\n }\r\n\r\n protected getDetailPanelDefaultWidth(): number {\r\n return DETAIL_PANEL_DEFAULT_WIDTH;\r\n }\r\n\r\n onSelectionChanged(event: SelectionChangedEvent) {\r\n const selectedRows = event.api.getSelectedRows();\r\n if (selectedRows.length > 0) {\r\n this.setState({selectedData: selectedRows});\r\n } else {\r\n this.setState({selectedData: [], detailPanelVisible: false});\r\n this.dataGrid?.showDetailPanel(false);\r\n }\r\n }\r\n\r\n protected adaptNewRecord(newRecord: T) {\r\n newRecord;\r\n }\r\n\r\n protected getDataToDelete() {\r\n return this.state.selectedData.filter(data => data.ano_platny === DbBoolean.TRUE);\r\n }\r\n\r\n protected getDataToRecover() {\r\n return this.state.selectedData.filter(data => data.ano_platny === DbBoolean.FALSE);\r\n }\r\n\r\n protected isValidityChangeDisabled(): boolean {\r\n return this.state.loading || this.state.selectedData[0]?.id === undefined;\r\n }\r\n\r\n protected renderValidityButton(): React.ReactNode | undefined {\r\n const operationDisabled = this.isValidityChangeDisabled();\r\n\r\n const dataToDelete = this.getDataToDelete();\r\n const dataToRecover = this.getDataToRecover();\r\n\r\n let allowedAction: \"delete\" | \"recover\" | \"none\" = \"none\";\r\n if (dataToDelete.length > 0) {\r\n allowedAction = \"delete\";\r\n } else if (dataToRecover.length > 0) {\r\n allowedAction = \"recover\";\r\n } else {\r\n allowedAction = \"none\";\r\n }\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={allowedAction === \"recover\" ? i18n(\"Mark Record As Valid\") : i18n(\"Mark Record As Deleted\")}\r\n disabled={operationDisabled || allowedAction === \"none\"}\r\n icon={allowedAction === \"recover\" ? <CheckCircleOutlined/> : <CloseCircleOutlined/>}\r\n onClick={() => {\r\n ModalDialog.delete({\r\n mode: ModalDialogMode.YES_NO,\r\n title: <span style={{whiteSpace: \"nowrap\"}}>\r\n {allowedAction === \"recover\" ? i18n(\"Mark %n records as valid?\", dataToRecover.length) : i18n(\"Mark %n records as deleted?\", dataToDelete.length)}\r\n </span>,\r\n icon:\r\n allowedAction === \"delete\" ?\r\n <CloseCircleOutlined style={{color: ERROR_COLOR}}/>\r\n :\r\n <CheckCircleOutlined style={{color: SUCCESS_COLOR}}/>,\r\n onOk: async () => {\r\n for (const data of allowedAction === \"delete\" ? dataToDelete : dataToRecover) {\r\n const isOk = await this.props.api.setValidity(data, allowedAction === \"recover\");\r\n if (!isOk) {\r\n return;\r\n }\r\n }\r\n this.gridApi?.refreshInfiniteCache();\r\n }\r\n });\r\n }}\r\n />\r\n );\r\n }\r\n\r\n protected renderAdvancedFilterButton(): React.ReactNode | undefined {\r\n const advancedFilterConfig = this.getAdvancedFilterConfig();\r\n\r\n if (advancedFilterConfig) {\r\n return (\r\n <AdvancedFilterButton\r\n advancedFilterApi={this.props.advancedFilterApi}\r\n listName={advancedFilterConfig.listName}\r\n columnDefinitions={this.getAdvancedFilterColumnDefinitions()}\r\n filterConditions={this.state.filterConditions}\r\n onApplyFilter={this.onApplyFilter}\r\n onMenuItemClicked={() => {\r\n this.setState({dropdownMenuVisible: false});\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n protected isMobile(): boolean {\r\n return window.innerWidth <= MAX_WIDTH_MOBILE;\r\n }\r\n\r\n protected renderCopyButton(): React.ReactNode | undefined {\r\n const disabled = this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined;\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={i18n(\"Create Copy\")}\r\n disabled={disabled}\r\n loading={this.state.waitingForEntityCopy}\r\n icon={<CopyOutlined/>}\r\n onClick={async () => {\r\n this.setState({waitingForEntityCopy: true});\r\n const newRecord = await this.props.api.createNewEntity(this.state.selectedData[0]);\r\n this.adaptNewRecord(newRecord);\r\n this.setState({selectedData: [newRecord], dropdownMenuVisible: false, waitingForEntityCopy: false});\r\n if (this.isMobile()) {\r\n this.setState({modalDetailPanelVisible: true})\r\n } else {\r\n this.setState({detailPanelVisible: true});\r\n this.dataGrid?.showDetailPanel(true);\r\n setTimeout(() => this.focusFieldInDetailPanel());\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n protected renderNewRecordButton(): React.ReactNode | undefined {\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={i18n(\"New Record\")}\r\n disabled={this.state.loading}\r\n loading={this.state.waitingForNewEntity}\r\n icon={<PlusCircleOutlined/>}\r\n onClick={() => {\r\n this.gridApi?.deselectAll();\r\n setTimeout(async () => {\r\n this.setState({waitingForNewEntity: true});\r\n const newRecord = await this.props.api.createNewEntity();\r\n this.adaptNewRecord(newRecord);\r\n this.setState({selectedData: [newRecord], waitingForNewEntity: false});\r\n if (this.isMobile()) {\r\n this.setState({modalDetailPanelVisible: true})\r\n } else {\r\n this.setState({detailPanelVisible: true});\r\n this.dataGrid?.showDetailPanel(true);\r\n this.focusFieldInDetailPanel();\r\n }\r\n })\r\n }}\r\n />\r\n );\r\n }\r\n\r\n protected renderDetailPanelButton(): React.ReactNode | undefined {\r\n const disabled = this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined;\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n type={this.state.detailPanelVisible ? \"primary\" : \"default\"}\r\n title={i18n(this.state.detailPanelVisible ? \"Hide Detail\" : \"Show Detail\")}\r\n disabled={disabled}\r\n icon={<ProfileOutlined/>}\r\n onClick={() => {\r\n if (this.isMobile()) {\r\n this.setState({modalDetailPanelVisible: true})\r\n } else {\r\n const detailPanelVisible = this.state.detailPanelVisible;\r\n this.setState({detailPanelVisible: !detailPanelVisible});\r\n this.dataGrid?.showDetailPanel(!detailPanelVisible);\r\n }\r\n }}\r\n />\r\n )\r\n }\r\n\r\n protected renderTrashButton(): React.ReactNode | undefined {\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n type={this.state.deletedRecordsVisible ? \"primary\" : \"default\"}\r\n title={i18n(this.state.deletedRecordsVisible ? \"Hide Deleted Records\" : \"Show Deleted Records\")}\r\n icon={<DeleteOutlined/>}\r\n onClick={() => {\r\n this.setState({deletedRecordsVisible: !this.state.deletedRecordsVisible}, () => {\r\n this.gridApi?.refreshInfiniteCache();\r\n });\r\n }}\r\n />\r\n )\r\n }\r\n\r\n protected renderShortcutButton(): React.ReactNode | undefined {\r\n if (this.renderShortcutPanel()) {\r\n const disabled = this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined;\r\n\r\n return (\r\n <Button\r\n style={{width: 44}}\r\n title={i18n(\"Quick Actions\")}\r\n disabled={disabled}\r\n icon={<BulbOutlined/>}\r\n onClick={() => {\r\n this.setState({quickActionsListVisible: true, dropdownMenuVisible: false});\r\n }}\r\n />\r\n )\r\n }\r\n return undefined;\r\n }\r\n\r\n protected renderAdditionalButtons(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderHistoryButton(): React.ReactNode | undefined {\r\n return (\r\n <Button\r\n disabled={this.state.loading || this.state.selectedData.length !== 1 || this.state.selectedData[0].id === undefined}\r\n onClick={() => {\r\n this.setState({historyModalVisible: true});\r\n }}\r\n >\r\n <HistoryOutlined/>\r\n </Button>\r\n );\r\n }\r\n\r\n protected renderShortcutPanel(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderShortcutDrawer() {\r\n return (\r\n <Drawer\r\n title={<TitleWithCodePanel title={this.getPageTitle()} code={this.getBreadcrumbCode() ?? \"\"}/>}\r\n styles={{body: {padding: 0}}}\r\n placement=\"top\"\r\n height={240}\r\n onClose={() => {\r\n this.setState({quickActionsListVisible: false})\r\n }}\r\n open={this.state.quickActionsListVisible}\r\n >\r\n {this.renderShortcutPanel()}\r\n </Drawer>\r\n );\r\n }\r\n\r\n protected renderToolbar(originalSearchBar: React.ReactElement): React.ReactElement {\r\n return originalSearchBar;\r\n }\r\n\r\n renderToolbarButtons() {\r\n if (this.isMobile()) {\r\n return (\r\n <>\r\n <Popover\r\n open={this.state.dropdownMenuVisible}\r\n onOpenChange={visible => {\r\n this.setState({dropdownMenuVisible: visible})\r\n }}\r\n content={\r\n <>\r\n <div>{this.renderAdvancedFilterButton()}</div>\r\n <div>{this.renderCopyButton()}</div>\r\n <div>{this.renderValidityButton()}</div>\r\n <div>{this.renderTrashButton()}</div>\r\n <div>{this.renderShortcutButton()}</div>\r\n <div>{this.renderAdditionalButtons()}</div>\r\n </>\r\n }\r\n trigger=\"click\"\r\n >\r\n <Button>\r\n <MoreOutlined/>\r\n </Button>\r\n </Popover>\r\n {this.renderNewRecordButton()}\r\n {this.renderDetailPanelButton()}\r\n </>\r\n )\r\n } else {\r\n return <>\r\n {this.renderAdvancedFilterButton()}\r\n {this.renderNewRecordButton()}\r\n {this.renderCopyButton()}\r\n {this.renderDetailPanelButton()}\r\n {this.renderValidityButton()}\r\n {this.renderTrashButton()}\r\n {this.renderHistoryButton()}\r\n {this.renderShortcutButton()}\r\n {this.renderAdditionalButtons()}\r\n </>\r\n }\r\n }\r\n\r\n protected renderControlPanel(): JSX.Element | null {\r\n return null;\r\n }\r\n\r\n protected getRowSelection(): \"single\" | \"multiple\" {\r\n return \"multiple\";\r\n }\r\n\r\n protected getRowModelType(): RowModelType {\r\n return \"infinite\";\r\n }\r\n\r\n protected getRowData(): T[] | undefined {\r\n return undefined;\r\n }\r\n\r\n abstract getPageTitle(): string\r\n\r\n protected getLoadedData(): T[] {\r\n const data: T[] = [];\r\n this.gridApi?.forEachNode(value => data.push(value.data));\r\n\r\n return data;\r\n }\r\n\r\n private renderDetailPanelModalDialog() {\r\n return (\r\n <ModalDialog\r\n className=\"modal-no-header full-screen-modal\"\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n closable={false}\r\n open={this.state.modalDetailPanelVisible}\r\n styles={{body: {padding: 0}}}\r\n initialWidth={window.innerWidth}\r\n initialHeight={window.innerHeight}\r\n forceRender\r\n >\r\n {this.renderDetailPanel()}\r\n </ModalDialog>\r\n )\r\n }\r\n\r\n protected onHistoryListPanelSelectionChanged() {\r\n }\r\n\r\n private renderHistoryModalDialog(): React.ReactElement {\r\n const selectedEntity = this.state.selectedData[0];\r\n\r\n return (\r\n <ModalDialog\r\n styles={{body: {padding: 0}}}\r\n mode={ModalDialogMode.NO_BUTTONS}\r\n open={this.state.historyModalVisible}\r\n onCancel={() => this.setState({historyModalVisible: false})}\r\n title={<TitleWithCodePanel title={i18n(\"History\")} code={selectedEntity?.code ?? \"\"}/>}\r\n initialWidth={window.innerWidth * 0.99}\r\n initialHeight={window.innerHeight * 0.95}\r\n >\r\n <EntityHistoryListPanel\r\n api={this.props.api}\r\n entity={selectedEntity}\r\n renderDetail={this.renderDetailPanelForHistory}\r\n detailPanelWidth={this.getDetailPanelDefaultWidth() * 2}\r\n onSelectionChanged={this.onHistoryListPanelSelectionChanged}\r\n />\r\n </ModalDialog>\r\n );\r\n }\r\n\r\n private renderBreadcrumbItem(pageName: React.ReactNode, code?: string): ItemType {\r\n return {\r\n title: <>\r\n {pageName}\r\n {code && <ColorTag style={{marginLeft: 4, fontSize: 14}}>{code}</ColorTag>}\r\n </>,\r\n }\r\n }\r\n\r\n private renderBreadcrumb() {\r\n const pageTitle = this.getPageTitle();\r\n\r\n if (pageTitle) {\r\n const breadcrumbCode = this.getBreadcrumbCode();\r\n return (\r\n <WithCss useStyles={useStyles}>{(css) =>\r\n <Breadcrumb\r\n className={css.styles.compactBreadcrumb}\r\n style={{paddingBottom: 10, fontSize: 20, overflowX: \"auto\"}}\r\n items={\r\n [\r\n ...this.props.breadcrumbPath?.map(value => this.renderBreadcrumbItem(value.pageName, value.code)) ?? [],\r\n this.renderBreadcrumbItem(pageTitle, breadcrumbCode),\r\n ]\r\n }\r\n >\r\n </Breadcrumb>\r\n }</WithCss>\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n protected getBreadcrumbCode() {\r\n return this.state.selectedData[0]?.code ?? undefined;\r\n }\r\n\r\n protected getExtendedBreadcrumbPath() {\r\n return [\r\n ...this.props.breadcrumbPath ?? [],\r\n {pageName: this.getPageTitle() ?? \"\", code: this.getBreadcrumbCode() ?? \"\"}\r\n ]\r\n }\r\n\r\n render() {\r\n return (\r\n <div style={{display: \"flex\", flexDirection: \"column\", height: \"100%\"}}>\r\n <div style={{padding: \"10px 12px 0px\", borderBottom: \"2px solid #f5f5f5\", fontWeight: 500}}>\r\n {this.renderBreadcrumb()}\r\n </div>\r\n <div style={{position: \"relative\", height: \"100%\"}}>\r\n {this.renderHistoryModalDialog()}\r\n {this.renderDetailPanelModalDialog()}\r\n {this.renderShortcutDrawer()}\r\n <ExtendedDataGrid<T>\r\n tablePanelStyle={{\r\n marginTop: 8,\r\n }}\r\n panelStyle={{\r\n paddingTop: 8,\r\n }}\r\n ref={(dataGrid) => {\r\n this.dataGrid = dataGrid;\r\n }}\r\n defaultGridConfiguration={this.state.panelConfiguration.gridConfiguration}\r\n onChangeConfiguration={gridConfiguration => {\r\n this.onPanelConfigurationChanged({gridConfiguration: gridConfiguration});\r\n }}\r\n onGridReady={(params: GridReadyEvent) => {\r\n this.gridApi = params.api;\r\n }}\r\n rowModelType={this.getRowModelType()}\r\n rowData={this.getRowData()}\r\n datasource={this.state.datasource}\r\n onLoadData={this.onLoadData}\r\n onSelectionChanged={this.onSelectionChanged}\r\n columnDefs={this.state.columnDefs}\r\n search={{\r\n onSearch: () => {\r\n this.dataGrid?.loadData();\r\n },\r\n hidden: true,\r\n }}\r\n onSortChanged={() => {\r\n this.dataGrid?.loadData();\r\n }}\r\n onRowDoubleClicked={this.onRowDoubleClicked}\r\n detailPanel={{\r\n defaultWidth: this.getDetailPanelDefaultWidth(),\r\n renderer: this.renderDetailPanel\r\n }}\r\n toolbar={{\r\n toolbarButtons: this.renderToolbarButtons(),\r\n renderToolbar: this.renderToolbar,\r\n }}\r\n animateRows\r\n rowSelection={this.getRowSelection()}\r\n controlPanel={{\r\n renderer: this.renderControlPanel\r\n }}\r\n noRecordsOverlayRenderer={() => <div/>}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n}"]}
|
|
@@ -62,7 +62,9 @@ export default abstract class AbstractEntityConfigPanel<P extends EntityConfigPa
|
|
|
62
62
|
isEditDisabled(): boolean;
|
|
63
63
|
protected getCodeMaxLength(): number;
|
|
64
64
|
protected getNameMaxLength(): number;
|
|
65
|
+
protected renderCodePrefix(): React.ReactNode | undefined;
|
|
65
66
|
protected renderCodeSuffix(): React.ReactNode | undefined;
|
|
67
|
+
protected renderNamePrefix(): React.ReactNode | undefined;
|
|
66
68
|
protected handleCodeChange(value: string): void;
|
|
67
69
|
protected renderGeneralConfigItems(codeConfig?: GeneralConfigItemParams, nameConfig?: GeneralConfigItemParams, hideDivider?: boolean): React.JSX.Element;
|
|
68
70
|
protected renderNoteFormItem(): React.JSX.Element;
|
|
@@ -156,9 +156,15 @@ export default class AbstractEntityConfigPanel extends React.Component {
|
|
|
156
156
|
getNameMaxLength() {
|
|
157
157
|
return 256;
|
|
158
158
|
}
|
|
159
|
+
renderCodePrefix() {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
159
162
|
renderCodeSuffix() {
|
|
160
163
|
return undefined;
|
|
161
164
|
}
|
|
165
|
+
renderNamePrefix() {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
162
168
|
handleCodeChange(value) {
|
|
163
169
|
const entity = this.state.editedEntity;
|
|
164
170
|
entity.code = value;
|
|
@@ -185,7 +191,7 @@ export default class AbstractEntityConfigPanel extends React.Component {
|
|
|
185
191
|
this.codeInput = input;
|
|
186
192
|
}, value: entity.code ?? undefined, onChange: e => {
|
|
187
193
|
this.handleCodeChange(e.target.value);
|
|
188
|
-
}, suffix: this.renderCodeSuffix(), maxLength: this.getCodeMaxLength(), showCount: true })))),
|
|
194
|
+
}, prefix: this.renderCodePrefix(), suffix: this.renderCodeSuffix(), maxLength: this.getCodeMaxLength(), showCount: true })))),
|
|
189
195
|
!nameConfig?.hidden &&
|
|
190
196
|
React.createElement(Form.Item, { className: "form-item-full-width-label", label: React.createElement("div", { style: {
|
|
191
197
|
width: "100%",
|
|
@@ -207,7 +213,7 @@ export default class AbstractEntityConfigPanel extends React.Component {
|
|
|
207
213
|
React.createElement(Input, { value: entity.name ?? undefined, disabled: this.isEditDisabled() || nameConfig?.disabled || this.state.nameSameAsCode, onChange: e => {
|
|
208
214
|
entity.name = e.target.value;
|
|
209
215
|
this.updateEditedObject();
|
|
210
|
-
}, maxLength: this.getNameMaxLength() })),
|
|
216
|
+
}, maxLength: this.getNameMaxLength(), prefix: this.renderNamePrefix() })),
|
|
211
217
|
!hideDivider && React.createElement(Divider, { className: "compact-divider" })));
|
|
212
218
|
}
|
|
213
219
|
renderNoteFormItem() {
|
|
@@ -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 renderCodeSuffix(): 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 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 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 entity.name = e.target.value;\r\n this.updateEditedObject();\r\n }}\r\n maxLength={this.getNameMaxLength()}\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 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 entity.name = e.target.value;\r\n this.updateEditedObject();\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,9 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Location, LocationState } from "history";
|
|
2
2
|
interface Props {
|
|
3
3
|
onLocationChanged?<S = LocationState>(location: Location<S>): void;
|
|
4
|
-
onParamsChanged?<Params extends {
|
|
5
|
-
[K in keyof Params]?: string;
|
|
6
|
-
} = {}>(params: Params): void;
|
|
7
4
|
}
|
|
8
5
|
declare const RouteChangeListener: (props: Props) => null;
|
|
9
6
|
export default RouteChangeListener;
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
-
import { useLocation
|
|
2
|
+
import { useLocation } from 'react-router-dom';
|
|
3
3
|
const RouteChangeListener = (props) => {
|
|
4
4
|
const location = useLocation();
|
|
5
|
-
const params = useParams();
|
|
6
5
|
useEffect(() => {
|
|
7
6
|
props.onLocationChanged?.(location);
|
|
8
7
|
}, [location]);
|
|
9
|
-
useEffect(() => {
|
|
10
|
-
props.onParamsChanged?.(params);
|
|
11
|
-
}, [params]);
|
|
12
8
|
return null;
|
|
13
9
|
};
|
|
14
10
|
export default RouteChangeListener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routeChangeListener.js","sourceRoot":"","sources":["../../../coreui/routeChangeListener.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"routeChangeListener.js","sourceRoot":"","sources":["../../../coreui/routeChangeListener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAO7C,MAAM,mBAAmB,GAAG,CAAC,KAAY,EAAE,EAAE;IACzC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACX,KAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC","sourcesContent":["import {useEffect} from 'react';\r\nimport {useLocation} from 'react-router-dom';\r\nimport {Location, LocationState} from \"history\";\r\n\r\ninterface Props {\r\n onLocationChanged?<S = LocationState>(location: Location<S>): void\r\n}\r\n\r\nconst RouteChangeListener = (props: Props) => {\r\n const location = useLocation();\r\n\r\n useEffect(() => {\r\n props.onLocationChanged?.(location);\r\n }, [location]);\r\n\r\n return null; // This component doesn't render anything\r\n};\r\n\r\nexport default RouteChangeListener;\r\n"]}
|