d2aura 23.0.34 → 23.0.36

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.
@@ -33,7 +33,7 @@ export default class AbstractEntityApi extends AbstractApi {
33
33
  eventName: this.eventName,
34
34
  update: function (...parameters) {
35
35
  const eventName = D2Data.toSimpleValue(parameters[0]);
36
- if (eventName === this.eventName) {
36
+ if (eventName.toUpperCase() === this.eventName.toString()) {
37
37
  this.updateHandler();
38
38
  }
39
39
  },
@@ -1 +1 @@
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
+ {"version":3,"file":"abstractEntityApi.js","sourceRoot":"","sources":["../../../api/abstractEntityApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAmC,MAAM,SAAS,CAAC;AAEjE,OAAO,EAAC,WAAW,EAAkB,MAAM,uCAAuC,CAAC;AACnF,OAAO,IAAI,MAAM,kBAAkB,CAAC;AAGpC,OAAO,EAA0B,uBAAuB,EAAE,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAC/G,OAAO,cAAc,EAAE,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAG3D,OAAO,WAAW,MAAM,eAAe,CAAC;AAWxC,MAAM,CAAC,OAAO,OAAgB,iBAAoC,SAAQ,WAAW;IAMjF,YAAsB,KAAe,EAAE,eAAuB,EAAE,SAAiB,EAAE,uBAA+B,EAAE,YAAsB;QACtI,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAID,KAAK,CAAC,eAAe,CAAC,MAAU;QAC5B,MAAM,MAAM,GAAwB,MAAM,IAAI,CAAC,OAAO,CAClD;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,uBAAuB;YAChC,wBAAwB,EAAE,IAAI;SACjC,EACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAC3G,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,cAAc,CAAC,SAAY,EAAE,MAAU;QAC7C,SAAS,CAAC,EAAE,GAAG,SAA8B,CAAC;QAC9C,MAAM,CAAC;IACX,CAAC;IAED,oBAAoB,CAAC,aAAyB;QAC1C,MAAM,SAAS,GAAG;YACd,aAAa,EAAE,aAAa;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,UAAU,GAAG,UAAoB;gBACrC,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAS,UAAU,CAAC,CAAC,CAAQ,CAAC,CAAC;gBACrE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACxD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzB,CAAC;YACL,CAAC;YACD,KAAK,EAAE;gBACH,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;SACJ,CAAA;QACD,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,QAAgB,EAAE,OAAe,EAAE,UAAqC,EAAE,SAAkB;QAC7H,MAAM,MAAM,GAAwB,MAAM,IAAI,CAAC,OAAO,CAClD;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,aAAa;SACzB,EACD,EAAC,IAAI,UAAuB,EAAE,UAAU,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAC,EACzF,EAAC,IAAI,OAAoB,EAAE,QAAQ,EAAE,mBAAmB,EAAC,EACzD,UAAU,EACV,QAAQ,EACR,EAAC,IAAI,QAAqB,EAAE,KAAK,EAAE,OAAO,EAAC,EAC3C,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,UAAU,CAAC,EACtF,EAAC,IAAI,QAAqB,EAAE,KAAK,EAAE,cAAc,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAC,CACnF,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAExD,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;SAC9C,CAAA;IACL,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,MAAM,MAAM,GAAc,MAAM,IAAI,CAAC,OAAO,CACxC;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,gBAAgB;SAC5B,EACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EACnC,EAAC,IAAI,OAAoB,EAAE,QAAQ,EAAE,YAAY,EAAC,CACrD,CAAC;QAEF,OAAO,MAAM,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,UAAkB,EAAE,QAAgB;QAC7D,MAAM,MAAM,GAAwB,MAAM,IAAI,CAAC,OAAO,CAClD;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,kBAAkB;SAC9B,EACD,EAAE,EACF,EAAC,IAAI,UAAuB,EAAE,UAAU,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAC,EACzF,EAAC,IAAI,OAAoB,EAAE,QAAQ,EAAE,mBAAmB,EAAC,EACzD,UAAU,EACV,QAAQ,CACX,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;QAExD,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;SAC9C,CAAA;IACL,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,MAAS,EAAE,WAAoB;QAC5D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,MAAS,EAAE,WAAoB,EAAE,iBAA2B;QACrF,OAAO,MAAM,IAAI,CAAC,OAAO,CACrB;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,UAAU;SACtB,EACD,EAAC,IAAI,QAAqB,EAAE,KAAK,EAAE,cAAc,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAC,EAClF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAC1F,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EACnC,EAAC,IAAI,QAAqB,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAC,CACrD,CAAC;IACN,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAS,EAAE,gBAA0B;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAE9E,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACJ,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACtB,MAAM,MAAM,GAAwB,MAAM,IAAI,CAAC,OAAO,CAClD;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,UAAU;SACtB,EACD,EAAE,EACF,EAAC,IAAI,UAAuB,EAAE,UAAU,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAC,CAC5F,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAS,EAAE,KAAc;QACvC,MAAM,MAAM,GAAwB,MAAM,IAAI,CAAC,OAAO,CAClD;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,eAAe;SAC3B,EACD,EAAC,IAAI,QAAqB,EAAE,KAAK,EAAE,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAC,EAC5E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAC1F,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EACnC,EAAC,IAAI,QAAqB,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAC,CACrD,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QACzB,MAAM,MAAM,GAA4B,MAAM,IAAI,CAAC,OAAO,CACtD;YACI,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,iBAAiB;SAC7B,EACD,EAAC,IAAI,QAAqB,EAAE,KAAK,EAAE,IAAI,EAAC,EACxC,EAAC,IAAI,QAAqB,EAAE,QAAQ,EAAE,MAAM,EAAC,CAChD,CAAC;QAEF,OAAO,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAS;QACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAChC;YACI,SAAS,EAAE,sBAAsB;YACjC,OAAO,EAAE,MAAM;YACf,kBAAkB,EAAE,IAAI;SAC3B,EACD,IAAI,CAAC,eAAe,EACpB,MAAM,CAAC,EAAE,EACT,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAC3B,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAClB,WAAW,CAAC,KAAK,CAAC;gBACd,IAAI,MAAoB;gBACxB,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC;gBAClC,OAAO,EAAE,IAAI,CAAC,wDAAwD,EAAE,EAAC,IAAI,EAAE,SAAS,CAAC,YAAY,IAAI,EAAE,EAAC,CAAC;aAChH,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAS;QACxB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/F,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,MAAc;QACtB,OAAO,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;CACJ","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.toUpperCase() === this.eventName.toString()) {\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,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { TagProps } from "antd";
3
3
  interface Props extends TagProps {
4
+ label?: React.ReactNode;
4
5
  }
5
6
  export default class ColorTag extends React.Component<Props> {
6
7
  constructor(props: Readonly<Props>);
@@ -6,12 +6,18 @@ export default class ColorTag extends React.Component {
6
6
  super(props);
7
7
  }
8
8
  render() {
9
- const { color, style, children, ...rest } = this.props;
10
- return (React.createElement(Tag, { style: {
9
+ const { color, style, children, label, ...rest } = this.props;
10
+ const TagElement = React.createElement(Tag, { style: {
11
11
  color: color?.startsWith("#") ? ColorUtils.invertColor(color.substring(0, 7), true) : undefined,
12
12
  fontSize: 12,
13
13
  ...style
14
- }, color: color, bordered: false, ...rest }, children));
14
+ }, color: color, bordered: false, ...rest }, children);
15
+ if (label) {
16
+ return (React.createElement("div", { style: { display: "flex", flexDirection: "column" } },
17
+ React.createElement("span", { className: "compact-label" }, label),
18
+ TagElement));
19
+ }
20
+ return TagElement;
15
21
  }
16
22
  }
17
23
  //# sourceMappingURL=colorTag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"colorTag.js","sourceRoot":"","sources":["../../../../../coreui/components/colorTag/colorTag.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAC,GAAG,EAAW,MAAM,MAAM,CAAC;AAKnC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK,CAAC,SAAgB;IACxD,YAAY,KAAsB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,MAAM;QACF,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAErD,OAAO,CACH,oBAAC,GAAG,IACA,KAAK,EAAE;gBACH,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC/F,QAAQ,EAAE,EAAE;gBACZ,GAAG,KAAK;aACX,EACD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,KAAK,KACX,IAAI,IAEP,QAAQ,CACP,CACT,CAAC;IACN,CAAC;CAEJ","sourcesContent":["import React from \"react\";\r\nimport ColorUtils from \"d2coreui/components/color/colorUtils\";\r\nimport {Tag, TagProps} from \"antd\";\r\n\r\ninterface Props extends TagProps {\r\n}\r\n\r\nexport default class ColorTag extends React.Component<Props> {\r\n constructor(props: Readonly<Props>) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const {color, style, children, ...rest} = this.props;\r\n\r\n return (\r\n <Tag\r\n style={{\r\n color: color?.startsWith(\"#\") ? ColorUtils.invertColor(color.substring(0, 7), true) : undefined,\r\n fontSize: 12,\r\n ...style\r\n }}\r\n color={color}\r\n bordered={false}\r\n {...rest}\r\n >\r\n {children}\r\n </Tag>\r\n );\r\n }\r\n\r\n}"]}
1
+ {"version":3,"file":"colorTag.js","sourceRoot":"","sources":["../../../../../coreui/components/colorTag/colorTag.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAC,GAAG,EAAW,MAAM,MAAM,CAAC;AAMnC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK,CAAC,SAAgB;IACxD,YAAY,KAAsB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,MAAM;QACF,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5D,MAAM,UAAU,GACZ,oBAAC,GAAG,IACA,KAAK,EAAE;gBACH,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC/F,QAAQ,EAAE,EAAE;gBACZ,GAAG,KAAK;aACX,EACD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,KAAK,KACX,IAAI,IAEP,QAAQ,CACP,CAAA;QAEV,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CACH,6BAAK,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAC;gBAClD,8BAAM,SAAS,EAAC,eAAe,IAAE,KAAK,CAAQ;gBAC7C,UAAU,CACT,CACT,CAAA;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;CAEJ","sourcesContent":["import React from \"react\";\r\nimport ColorUtils from \"d2coreui/components/color/colorUtils\";\r\nimport {Tag, TagProps} from \"antd\";\r\n\r\ninterface Props extends TagProps {\r\n label?: React.ReactNode\r\n}\r\n\r\nexport default class ColorTag extends React.Component<Props> {\r\n constructor(props: Readonly<Props>) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const {color, style, children, label, ...rest} = this.props;\r\n\r\n const TagElement =\r\n <Tag\r\n style={{\r\n color: color?.startsWith(\"#\") ? ColorUtils.invertColor(color.substring(0, 7), true) : undefined,\r\n fontSize: 12,\r\n ...style\r\n }}\r\n color={color}\r\n bordered={false}\r\n {...rest}\r\n >\r\n {children}\r\n </Tag>\r\n\r\n if (label) {\r\n return (\r\n <div style={{display: \"flex\", flexDirection: \"column\"}}>\r\n <span className=\"compact-label\">{label}</span>\r\n {TagElement}\r\n </div>\r\n )\r\n }\r\n\r\n return TagElement;\r\n }\r\n\r\n}"]}
@@ -216,8 +216,7 @@ export default class AbstractEntityConfigPanel extends React.Component {
216
216
  } }),
217
217
  i18n("Same As Code"))), validateStatus: fieldsToHighlight?.includes(GeneralEntityColumn.NAME) ? "warning" : nameValidateStatus, help: nameErrorMessage, required: !nameConfig?.notRequired },
218
218
  React.createElement(Input, { value: entity.name ?? undefined, disabled: this.isEditDisabled() || nameConfig?.disabled || this.state.nameSameAsCode, onChange: e => {
219
- entity.name = e.target.value;
220
- this.updateEditedObject();
219
+ this.handleNameChange(e.target.value);
221
220
  }, maxLength: this.getNameMaxLength(), prefix: this.renderNamePrefix() })),
222
221
  !hideDivider && React.createElement(Divider, { className: "compact-divider" })));
223
222
  }
@@ -1 +1 @@
1
- {"version":3,"file":"abstractEntityConfigPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/editor/abstractEntityConfigPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAY,GAAG,EAAE,MAAM,EAAC,MAAM,MAAM,CAAC;AAE9E,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAC,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAC,QAAQ,EAAC,MAAM,oCAAoC,CAAC;AAC5D,OAAO,iBAAiB,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAC,mBAAmB,EAAC,MAAM,mDAAmD,CAAC;AACtF,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAC,WAAW,EAAC,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAC,WAAW,EAAkB,MAAM,uCAAuC,CAAC;AACnF,OAAO,EACH,iCAAiC,EAEjC,0BAA0B,EAC7B,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAiDvD,MAAM,CAAC,OAAO,OAAgB,yBAEyD,SAAQ,KAAK,CAAC,SAAe;IAGhH,YAAsB,KAAkB;QACpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAHP,cAAS,GAAoB,IAAI,CAAC;QASlC,iBAAY,GAA8B;YAChD,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,cAA8B;YACvD,6BAA6B,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC;YAC3C,mBAAmB,EAAE,KAAK;YAC1B,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,KAAK;YACvB,sBAAsB,EAAE,KAAK;YAC7B,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,IAAI;SACvB,CAAA;QAbG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAaD,iBAAiB;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,kBAAkB,CAAC,SAAsB,EAAE,SAAsB;QAC7D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAChE,IAAI,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC,EAAE,GAAG,EAAE;gBAChG,IAAI,CAAC,QAAQ,CAAC,EAAC,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,EAAC,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;IACrC,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IACnC,CAAC;IAED,aAAa;QACT,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5F,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;gBAC7E,MAAM,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;gBAC/E,6BAA6B,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC1C,IAAI,CAAC,QAAQ,CAAC,EAAC,6BAA6B,EAAE,6BAA6B,EAAC,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAIO,KAAK,CAAC,QAAQ;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,SAAS,CAAC;QAC/F,IAAI,CAAC,QAAQ,CAAC,EAAC,mBAAmB,EAAE,IAAI,EAAC,CAAC,CAAC;QAE3C,MAAM,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;QAC/E,6BAA6B,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAG7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;QAC1C,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEzD,IAAI,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CAAC,cAAc,CAAC,EAAE,CAAC;oBACnG,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC,CAAC;gBAChG,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,KAAK,GAAG,6BAA6B,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,iCAAiC,CAAC,cAAc,CAAC,CAAC;gBAClI,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;oBACb,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC;YACV,6BAA6B,EAAE,6BAA6B;YAC5D,gBAAgB,EAAE,IAAI;YACtB,mBAAmB,EAAE,KAAK;SAC7B,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,gBAA0B;QACjC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,MAAM,CAAC;QAC/D,IAAI,WAAW,GAAkB,SAAS,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YACnH,IAAI,CAAC,QAAQ,CAAC,EAAC,eAAe,EAAE,IAAI,EAAC,CAAC,CAAC;YACvC,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACzF,IAAI,CAAC,QAAQ,CAAC,EAAC,eAAe,EAAE,KAAK,EAAC,CAAC,CAAC;YACxC,IAAI,WAAW,EAAE,CAAC;gBACd,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,OAAO,WAAW,CAAC;IACvB,CAAC;IAES,KAAK,CAAC,MAAM;QAClB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAES,SAAS;IACnB,CAAC;IAED,kBAAkB;QACd,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACvG,CAAC;IAED,mBAAmB,CAAC,SAAa,EAAE,OAAW,EAAE,8BAAwD;IACxG,CAAC;IAED,UAAU,CAAC,cAAkB,EAAE,YAAgB,EAAE,6BAAuD,EAAE,QAAqB;QAC3H,MAAM,QAAQ,GAAe,EAAE,CAAC;QAChC,IAAI,cAAc,EAAE,CAAC;YACjB,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;QAC7C,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACf,QAAQ,CAAC,YAAY,GAAG,YAAY,CAAC;QACzC,CAAC;QACD,IAAI,6BAA6B,EAAE,CAAC;YAChC,QAAQ,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAa,EAAE,GAAG,EAAE;YAC9B,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,YAAY,EAAE,6BAA6B,CAAC,CAAC;YACtF,QAAQ,EAAE,EAAE,CAAC;QACjB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,kBAAkB,CAAC,kBAA4B;QAC3C,OAAO,CACH,oBAAC,iBAAiB,IACd,kBAAkB,EAAE,kBAAkB,EACtC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,EACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EACrC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EACrC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAC7B,CACL,CAAC;IACN,CAAC;IAES,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;YACxF,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,cAAc;QACV,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,SAAS,CAAC;QAC/F,MAAM,UAAU,GAAG,YAAY,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnF,OAAO,CAAC,UAAU,CAAC;IACvB,CAAC;IAES,gBAAgB;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;IAES,gBAAgB;QACtB,OAAO,GAAG,CAAC;IACf,CAAC;IAES,gBAAgB;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,gBAAgB;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,gBAAgB;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,gBAAgB,CAAC,KAAa;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAEvC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAES,gBAAgB,CAAC,KAAa;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAEvC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAES,wBAAwB,CAAC,UAAoC,EAAE,UAAoC,EAAE,WAAqB;QAChI,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,MAAM,CAAC;QAC/D,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAEvD,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,0BAA0B,CAAC,CAAC,iCAAiC,CAAC,aAAa,EAAE,iCAAiC,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QACvL,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,0BAA0B,CAAC,CAAC,iCAAiC,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QAErI,OAAO,CACH,oBAAC,IAAI,IACD,SAAS,EAAC,oBAAoB,EAC9B,MAAM,EAAC,YAAY,EACnB,QAAQ,EAAE,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAC;YAEnD,oBAAC,GAAG,IAAC,MAAM,EAAE,CAAC;gBACV,oBAAC,GAAG,IAAC,IAAI,EAAE,CAAC;oBACR,oBAAC,IAAI,CAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;wBACxB,oBAAC,KAAK,IAAC,QAAQ,QAAC,KAAK,EAAE,MAAM,CAAC,EAAE,GAAG,CAC3B,CACV;gBACL,CAAC,UAAU,EAAE,MAAM;oBAChB,oBAAC,GAAG,IAAC,IAAI,EAAE,EAAE;wBACT,oBAAC,IAAI,CAAC,IAAI,IACN,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EACnB,cAAc,EAAE,iBAAiB,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,EACtG,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW;4BAElC,oBAAC,KAAK,IACF,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,UAAU,EAAE,QAAQ,EAClF,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;oCACX,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gCAC3B,CAAC,EACD,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS,EAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE;oCACV,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAC1C,CAAC,EACD,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAC/B,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAC/B,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAClC,SAAS,SACX,CACM,CACV,CAER;YACL,CAAC,UAAU,EAAE,MAAM;gBAChB,oBAAC,IAAI,CAAC,IAAI,IACN,SAAS,EAAC,4BAA4B,EACtC,KAAK,EACD,6BACI,KAAK,EAAE;4BACH,KAAK,EAAE,MAAM;4BACb,OAAO,EAAE,MAAM;4BACf,cAAc,EAAE,eAAe;4BAC/B,UAAU,EAAE,UAAU;yBACzB;wBAED,kCAAO,IAAI,CAAC,MAAM,CAAC,CAAQ;wBAC1B,IAAI,CAAC,WAAW,EAAE;4BACf,8BAAM,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAC;gCAC1B,oBAAC,MAAM,IACH,KAAK,EAAE,EAAC,WAAW,EAAE,CAAC,EAAC,EACvB,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAClC,QAAQ,EAAE,OAAO,CAAC,EAAE;wCAChB,IAAI,CAAC,QAAQ,CAAC,EAAC,cAAc,EAAE,OAAO,EAAC,CAAC,CAAA;wCACxC,IAAI,OAAO,EAAE,CAAC;4CACV,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;4CAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;wCAC9B,CAAC;oCACL,CAAC,GACH;gCACD,IAAI,CAAC,cAAc,CAAC,CAClB,CAET,EAEV,cAAc,EAAE,iBAAiB,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,EACtG,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW;oBAElC,oBAAC,KAAK,IACF,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS,EAC/B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EACpF,QAAQ,EAAE,CAAC,CAAC,EAAE;4BACV,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;4BAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC9B,CAAC,EACD,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAClC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,GACjC,CACM;YAEf,CAAC,WAAW,IAAI,oBAAC,OAAO,IAAC,SAAS,EAAC,iBAAiB,GAAE,CACpD,CACV,CAAA;IACL,CAAC;IAES,kBAAkB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAEvD,OAAO,CACH,oBAAC,IAAI,CAAC,IAAI,IACN,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EACnB,cAAc,EAAE,iBAAiB,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAE7F,oBAAC,QAAQ,IACL,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAC/B,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS,EAC/B,QAAQ,EAAE,KAAK,CAAC,EAAE;oBACd,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;oBACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC9B,CAAC,GACH,CACM,CACf,CAAC;IACN,CAAC;IAES,WAAW;QACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;IACxC,CAAC;IAES,UAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;IAC/F,CAAC;IAES,KAAK,CAAC,uBAAuB;QACnC,OAAO;YACH,WAAW,EAAE,WAAW,CAAC,KAAK;YAC9B,OAAO,EAAE,EAAE;SACd,CAAA;IACL,CAAC;IAES,yBAAyB;QAC/B,OAAO,CAAC,QAAQ,CAAC,CAAA;IACrB,CAAC;IAES,gBAAgB;QACtB,OAAO,CAAC,OAAO,CACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAC1E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAC/E,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACX,IAAI,CAAC,QAAQ,CAAC,EAAC,gBAAgB,EAAE,IAAI,EAAC,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,EAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC;QACzC,IAAI,iBAAiB,CAAC,WAAW,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;YACtD,WAAW,CAAC,KAAK,CAAC;gBACd,IAAI,MAAoB;gBACxB,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC;gBAClC,OAAO,EAAE,iBAAiB,CAAC,OAAO;gBAClC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;aACzB,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,EAAC,sBAAsB,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAC,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,EAAC,sBAAsB,EAAE,KAAK,EAAC,CAAC,CAAC;YAC/C,IAAI,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACJ,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;QACd,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,YAAY,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,gBAAgB,GAAG,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEjE,OAAO,CACH,6BAAK,KAAK,EAAE,EAAC,OAAO,EAAE,CAAC,EAAC;YACpB,oBAAC,MAAM,CAAC,KAAK,IAAC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC;gBAChC,oBAAC,MAAM,IACH,QAAQ,EAAE,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAC3K,KAAK,QACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EACvG,IAAI,EAAC,SAAS,EACd,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,oBAAC,YAAY,OAAE,CAAC,CAAC,CAAC,oBAAC,YAAY,OAAE,EACpD,OAAO,EAAE,KAAK,IAAI,EAAE;wBAChB,IAAI,UAAU,EAAE,CAAC;4BACb,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;wBACxB,CAAC;6BAAM,IAAI,UAAU,EAAE,CAAC;4BACpB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC3B,CAAC;oBACL,CAAC,IAEA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CACpC;gBACT,oBAAC,MAAM,IACH,QAAQ,EAAE,CAAC,YAAY,IAAI,CAAC,UAAU,EACtC,KAAK,QACL,MAAM,QACN,IAAI,EAAE,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,oBAAC,QAAQ,OAAE,CAAC,CAAC,CAAC,oBAAC,mBAAmB,OAAE,EAC/E,OAAO,EAAE,KAAK,IAAI,EAAE;wBAChB,IAAI,WAAW,EAAE,CAAC;4BACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC3B,CAAC;6BAAM,IAAI,UAAU,EAAE,CAAC;4BACpB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gCACjC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;4BAC/D,CAAC;4BACD,IAAI,CAAC,aAAa,EAAE,CAAC;wBACzB,CAAC;oBACL,CAAC,IAEA,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CACxE,CACE,CACb,CACT,CAAC;IACN,CAAC;IAID,MAAM;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,MAAM,EAAC,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAErE,OAAO,CACH,6BAAK,KAAK,EAAE,EAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC;YACpG,CAAC,gBAAgB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACxH,6BAAK,KAAK,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAC;gBAC9C,6BAAK,KAAK,EAAE,EAAC,MAAM,EAAE,eAAe,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAC;oBAC/D,6BAAK,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAC;wBAC1C,6BAAK,KAAK,EAAE,EAAC,MAAM,EAAE,eAAe,EAAC,IAChC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAChC,CACJ,CACJ;gBACL,CAAC,gBAAgB,IAAI,CAAC,WAAW,IAAI,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,CACtG,CACJ,CACT,CAAC;IACN,CAAC;CAEJ","sourcesContent":["import React from \"react\";\r\nimport {cloneDeep, isEqual, omit} from \"lodash\";\r\nimport {Button, Col, Divider, Form, Input, InputRef, Row, Switch} from \"antd\";\r\nimport AbstractEntityApi from \"../../../api/abstractEntityApi\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CloseCircleOutlined, EditOutlined, SaveOutlined} from \"@ant-design/icons\";\r\nimport {UndoIcon} from \"d2coreui/components/icons/undoIcon\";\r\nimport DetailHeaderPanel from \"../grid/detailHeaderPanel\";\r\nimport {AbstractBreadcrumbItem} from \"../../abstractListPanel\";\r\nimport {GeneralEntityColumn} from \"../advancedFilter/advancedFilterColumnDefinitions\";\r\nimport TextArea from \"antd/es/input/TextArea\";\r\nimport AuditableEntity from \"../../../api/types/auditableEntity\";\r\nimport {AccessRight} from \"../../../api/types/accessRight\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport {\r\n AbstractEntityValidationErrorEnum,\r\n ErrorCode,\r\n getAbstractEntityErrorInfo\r\n} from \"../../../api/validation/abstractEntityValidationUtils\";\r\nimport {DbBoolean} from \"../../../api/types/dbBoolean\";\r\n\r\ninterface GeneralConfigItemParams {\r\n hidden?: boolean,\r\n notRequired?: boolean,\r\n disabled?: boolean\r\n}\r\n\r\n/**\r\n * Additional data needed for object validation\r\n */\r\nexport interface EntityValidationContext {\r\n errors: ErrorCode[]\r\n}\r\n\r\nexport interface EntityConfigPanelProperties<T extends AuditableEntity> {\r\n api: AbstractEntityApi<T>\r\n selectedEntity?: T\r\n hidePrevNextButton?: boolean\r\n hideConfigHeader?: boolean\r\n hideConfigFooter?: boolean\r\n historyMode?: boolean\r\n fieldsToHighlight?: string[]\r\n breadcrumbPath?: AbstractBreadcrumbItem[]\r\n\r\n // detail close handler\r\n onClose?(): void\r\n\r\n // next record handler\r\n onNextRecord?(): void\r\n\r\n // previous record handler\r\n onPrevRecord?(): void\r\n\r\n onSave?(savedEntity: T): void\r\n}\r\n\r\nexport interface EntityConfigPanelState<T extends AuditableEntity> {\r\n originalEntity?: T\r\n editedEntity: T\r\n editedEntityValidationContext: EntityValidationContext\r\n validationIsRunning: boolean\r\n savingIsRunning: boolean\r\n validateOnChange: boolean\r\n waitingForLockResponse: boolean\r\n savingIsStarting: boolean\r\n nameSameAsCode: boolean\r\n}\r\n\r\nexport default abstract class AbstractEntityConfigPanel<P extends EntityConfigPanelProperties<E>,\r\n S extends EntityConfigPanelState<E>,\r\n E extends AuditableEntity = S extends EntityConfigPanelState<infer T> ? T : never> extends React.Component<P, S> {\r\n protected codeInput: InputRef | null = null;\r\n\r\n protected constructor(props: Readonly<P>) {\r\n super(props);\r\n\r\n this.updateEditedObject = this.updateEditedObject.bind(this);\r\n this.renderNoteFormItem = this.renderNoteFormItem.bind(this);\r\n }\r\n\r\n protected initialState: EntityConfigPanelState<E> = {\r\n editedEntity: this.props.selectedEntity as unknown as E,\r\n editedEntityValidationContext: {errors: []},\r\n validationIsRunning: false,\r\n savingIsRunning: false,\r\n validateOnChange: false,\r\n waitingForLockResponse: false,\r\n savingIsStarting: false,\r\n nameSameAsCode: true,\r\n }\r\n\r\n componentDidMount() {\r\n this.updateEditedObject();\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<P>, prevState: Readonly<S>) {\r\n if (!isEqual(prevProps.selectedEntity, this.props.selectedEntity)) {\r\n if (prevState.editedEntity?.locked) {\r\n this.props.api.unlockEntity(prevState.editedEntity);\r\n }\r\n this.updateData(this.props.selectedEntity, cloneDeep(this.props.selectedEntity), {errors: []}, () => {\r\n this.setState({validateOnChange: false, nameSameAsCode: this.isNewEntity()});\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.state.editedEntity?.locked) {\r\n this.props.api.unlockEntity(this.state.editedEntity);\r\n }\r\n }\r\n\r\n getOriginal(): E | undefined {\r\n return this.state.originalEntity;\r\n }\r\n\r\n getEdited(): E {\r\n return this.state.editedEntity;\r\n }\r\n\r\n revertChanges() {\r\n if (this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.updateData(undefined, cloneDeep(this.state.originalEntity), undefined, () => {\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = [];\r\n this.setState({editedEntityValidationContext: editedEntityValidationContext});\r\n });\r\n }\r\n }\r\n\r\n abstract validateObject(): ErrorCode[];\r\n\r\n private async validate() {\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n this.setState({validationIsRunning: true});\r\n\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = this.validateObject();\r\n\r\n // code validation - only when creating new entity (editation of code is not allowed)\r\n const code = this.state.editedEntity.code;\r\n if (isNewEntity && code) {\r\n const codeExists = await this.props.api.codeExists(code);\r\n\r\n if (codeExists) {\r\n if (!editedEntityValidationContext.errors.includes(AbstractEntityValidationErrorEnum.CODE_DUPLICATE)) {\r\n editedEntityValidationContext.errors.push(AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n }\r\n } else {\r\n const index = editedEntityValidationContext.errors.findIndex(value => value === AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n if (index >= 0) {\r\n editedEntityValidationContext.errors.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n editedEntityValidationContext: editedEntityValidationContext,\r\n validateOnChange: true,\r\n validationIsRunning: false,\r\n });\r\n };\r\n\r\n async save(isCosmeticChange?: boolean): Promise<E | undefined> {\r\n await this.validate();\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n let savedEntity: E | undefined = undefined;\r\n\r\n if (errors.length === 0 && this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.setState({savingIsRunning: true});\r\n savedEntity = await this.props.api.saveEntity(this.state.editedEntity, isCosmeticChange);\r\n this.setState({savingIsRunning: false});\r\n if (savedEntity) {\r\n this.updateData(savedEntity, cloneDeep(savedEntity), {errors: []});\r\n this.props.onSave?.(savedEntity);\r\n }\r\n }\r\n this.afterSave();\r\n\r\n return savedEntity;\r\n }\r\n\r\n protected async onSave() {\r\n await this.save();\r\n }\r\n\r\n protected afterSave() {\r\n }\r\n\r\n updateEditedObject() {\r\n if (this.state.validateOnChange) {\r\n this.validate();\r\n }\r\n this.updateData(undefined, this.state.editedEntity as E, this.state.editedEntityValidationContext);\r\n }\r\n\r\n onChangeEditContext(_original?: E, _edited?: E, _editedEntityValidationContext?: EntityValidationContext) {\r\n }\r\n\r\n updateData(originalEntity?: E, editedEntity?: E, editedEntityValidationContext?: EntityValidationContext, callback?: () => void) {\r\n const newState: Partial<S> = {};\r\n if (originalEntity) {\r\n newState.originalEntity = originalEntity;\r\n }\r\n if (editedEntity) {\r\n newState.editedEntity = editedEntity;\r\n }\r\n if (editedEntityValidationContext) {\r\n newState.editedEntityValidationContext = editedEntityValidationContext;\r\n }\r\n this.setState(newState as S, () => {\r\n this.onChangeEditContext(originalEntity, editedEntity, editedEntityValidationContext);\r\n callback?.();\r\n })\r\n }\r\n\r\n renderConfigHeader(hidePrevNextButton?: boolean) {\r\n return (\r\n <DetailHeaderPanel\r\n hidePrevNextButton={hidePrevNextButton}\r\n code={this.state.editedEntity?.code}\r\n onPrevRecord={this.props.onPrevRecord}\r\n onNextRecord={this.props.onNextRecord}\r\n onClose={this.props.onClose}\r\n />\r\n );\r\n }\r\n\r\n protected async onEditStart() {\r\n this.focusFirstField();\r\n }\r\n\r\n focusFirstField() {\r\n if (this.props.selectedEntity?.id === undefined || this.props.selectedEntity?.id === null) {\r\n this.codeInput?.focus();\r\n }\r\n }\r\n\r\n isEditDisabled() {\r\n const entityExists = !!this.state.originalEntity;\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n const isSaveMode = entityExists && (isNewEntity || this.state.editedEntity.locked);\r\n return !isSaveMode;\r\n }\r\n\r\n protected getCodeMaxLength() {\r\n return 64;\r\n }\r\n\r\n protected getNameMaxLength() {\r\n return 256;\r\n }\r\n\r\n protected renderCodePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderCodeSuffix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderNamePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected handleCodeChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.code = value;\r\n if (this.state.nameSameAsCode) {\r\n entity.name = value;\r\n }\r\n this.updateEditedObject();\r\n }\r\n\r\n protected handleNameChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.name = value;\r\n this.updateEditedObject();\r\n }\r\n\r\n protected renderGeneralConfigItems(codeConfig?: GeneralConfigItemParams, nameConfig?: GeneralConfigItemParams, hideDivider?: boolean) {\r\n const entity = this.state.editedEntity;\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n const fieldsToHighlight = this.props.fieldsToHighlight;\r\n\r\n const [codeValidateStatus, codeErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.CODE_REQUIRED, AbstractEntityValidationErrorEnum.CODE_DUPLICATE], errors);\r\n const [nameValidateStatus, nameErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.NAME_REQUIRED], errors);\r\n\r\n return (\r\n <Form\r\n className=\"record-config-form\"\r\n layout=\"horizontal\"\r\n labelCol={{sm: 24, md: 24, lg: 24, xl: 24, xxl: 24}}\r\n >\r\n <Row gutter={8}>\r\n <Col span={6}>\r\n <Form.Item label={i18n(\"ID\")}>\r\n <Input disabled value={entity.id}/>\r\n </Form.Item>\r\n </Col>\r\n {!codeConfig?.hidden &&\r\n <Col span={18}>\r\n <Form.Item\r\n label={i18n(\"Code\")}\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.CODE) ? \"warning\" : codeValidateStatus}\r\n help={codeErrorMessage}\r\n required={!codeConfig?.notRequired}\r\n >\r\n <Input\r\n disabled={entity.id !== undefined || this.isEditDisabled() || codeConfig?.disabled}\r\n ref={(input) => {\r\n this.codeInput = input;\r\n }}\r\n value={entity.code ?? undefined}\r\n onChange={e => {\r\n this.handleCodeChange(e.target.value);\r\n }}\r\n prefix={this.renderCodePrefix()}\r\n suffix={this.renderCodeSuffix()}\r\n maxLength={this.getCodeMaxLength()}\r\n showCount\r\n />\r\n </Form.Item>\r\n </Col>\r\n }\r\n </Row>\r\n {!nameConfig?.hidden &&\r\n <Form.Item\r\n className=\"form-item-full-width-label\"\r\n label={\r\n <div\r\n style={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"baseline\",\r\n }}\r\n >\r\n <span>{i18n(\"Name\")}</span>\r\n {this.isNewEntity() &&\r\n <span style={{display: \"flex\"}}>\r\n <Switch\r\n style={{marginRight: 4}}\r\n size=\"small\"\r\n checked={this.state.nameSameAsCode}\r\n onChange={checked => {\r\n this.setState({nameSameAsCode: checked})\r\n if (checked) {\r\n entity.name = entity.code;\r\n this.updateEditedObject();\r\n }\r\n }}\r\n />\r\n {i18n(\"Same As Code\")}\r\n </span>\r\n }\r\n </div>\r\n }\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.NAME) ? \"warning\" : nameValidateStatus}\r\n help={nameErrorMessage}\r\n required={!nameConfig?.notRequired}\r\n >\r\n <Input\r\n value={entity.name ?? undefined}\r\n disabled={this.isEditDisabled() || nameConfig?.disabled || this.state.nameSameAsCode}\r\n onChange={e => {\r\n 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
+ {"version":3,"file":"abstractEntityConfigPanel.js","sourceRoot":"","sources":["../../../../../coreui/components/editor/abstractEntityConfigPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {cloneDeep, isEqual, omit} from \"lodash\";\r\nimport {Button, Col, Divider, Form, Input, InputRef, Row, Switch} from \"antd\";\r\nimport AbstractEntityApi from \"../../../api/abstractEntityApi\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {CloseCircleOutlined, EditOutlined, SaveOutlined} from \"@ant-design/icons\";\r\nimport {UndoIcon} from \"d2coreui/components/icons/undoIcon\";\r\nimport DetailHeaderPanel from \"../grid/detailHeaderPanel\";\r\nimport {AbstractBreadcrumbItem} from \"../../abstractListPanel\";\r\nimport {GeneralEntityColumn} from \"../advancedFilter/advancedFilterColumnDefinitions\";\r\nimport TextArea from \"antd/es/input/TextArea\";\r\nimport AuditableEntity from \"../../../api/types/auditableEntity\";\r\nimport {AccessRight} from \"../../../api/types/accessRight\";\r\nimport {ModalDialog, ModalDialogMode} from \"d2coreui/components/modal/modalDialog\";\r\nimport {\r\n AbstractEntityValidationErrorEnum,\r\n ErrorCode,\r\n getAbstractEntityErrorInfo\r\n} from \"../../../api/validation/abstractEntityValidationUtils\";\r\nimport {DbBoolean} from \"../../../api/types/dbBoolean\";\r\n\r\ninterface GeneralConfigItemParams {\r\n hidden?: boolean,\r\n notRequired?: boolean,\r\n disabled?: boolean\r\n}\r\n\r\n/**\r\n * Additional data needed for object validation\r\n */\r\nexport interface EntityValidationContext {\r\n errors: ErrorCode[]\r\n}\r\n\r\nexport interface EntityConfigPanelProperties<T extends AuditableEntity> {\r\n api: AbstractEntityApi<T>\r\n selectedEntity?: T\r\n hidePrevNextButton?: boolean\r\n hideConfigHeader?: boolean\r\n hideConfigFooter?: boolean\r\n historyMode?: boolean\r\n fieldsToHighlight?: string[]\r\n breadcrumbPath?: AbstractBreadcrumbItem[]\r\n\r\n // detail close handler\r\n onClose?(): void\r\n\r\n // next record handler\r\n onNextRecord?(): void\r\n\r\n // previous record handler\r\n onPrevRecord?(): void\r\n\r\n onSave?(savedEntity: T): void\r\n}\r\n\r\nexport interface EntityConfigPanelState<T extends AuditableEntity> {\r\n originalEntity?: T\r\n editedEntity: T\r\n editedEntityValidationContext: EntityValidationContext\r\n validationIsRunning: boolean\r\n savingIsRunning: boolean\r\n validateOnChange: boolean\r\n waitingForLockResponse: boolean\r\n savingIsStarting: boolean\r\n nameSameAsCode: boolean\r\n}\r\n\r\nexport default abstract class AbstractEntityConfigPanel<P extends EntityConfigPanelProperties<E>,\r\n S extends EntityConfigPanelState<E>,\r\n E extends AuditableEntity = S extends EntityConfigPanelState<infer T> ? T : never> extends React.Component<P, S> {\r\n protected codeInput: InputRef | null = null;\r\n\r\n protected constructor(props: Readonly<P>) {\r\n super(props);\r\n\r\n this.updateEditedObject = this.updateEditedObject.bind(this);\r\n this.renderNoteFormItem = this.renderNoteFormItem.bind(this);\r\n }\r\n\r\n protected initialState: EntityConfigPanelState<E> = {\r\n editedEntity: this.props.selectedEntity as unknown as E,\r\n editedEntityValidationContext: {errors: []},\r\n validationIsRunning: false,\r\n savingIsRunning: false,\r\n validateOnChange: false,\r\n waitingForLockResponse: false,\r\n savingIsStarting: false,\r\n nameSameAsCode: true,\r\n }\r\n\r\n componentDidMount() {\r\n this.updateEditedObject();\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly<P>, prevState: Readonly<S>) {\r\n if (!isEqual(prevProps.selectedEntity, this.props.selectedEntity)) {\r\n if (prevState.editedEntity?.locked) {\r\n this.props.api.unlockEntity(prevState.editedEntity);\r\n }\r\n this.updateData(this.props.selectedEntity, cloneDeep(this.props.selectedEntity), {errors: []}, () => {\r\n this.setState({validateOnChange: false, nameSameAsCode: this.isNewEntity()});\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.state.editedEntity?.locked) {\r\n this.props.api.unlockEntity(this.state.editedEntity);\r\n }\r\n }\r\n\r\n getOriginal(): E | undefined {\r\n return this.state.originalEntity;\r\n }\r\n\r\n getEdited(): E {\r\n return this.state.editedEntity;\r\n }\r\n\r\n revertChanges() {\r\n if (this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.updateData(undefined, cloneDeep(this.state.originalEntity), undefined, () => {\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = [];\r\n this.setState({editedEntityValidationContext: editedEntityValidationContext});\r\n });\r\n }\r\n }\r\n\r\n abstract validateObject(): ErrorCode[];\r\n\r\n private async validate() {\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n this.setState({validationIsRunning: true});\r\n\r\n const editedEntityValidationContext = this.state.editedEntityValidationContext;\r\n editedEntityValidationContext.errors = this.validateObject();\r\n\r\n // code validation - only when creating new entity (editation of code is not allowed)\r\n const code = this.state.editedEntity.code;\r\n if (isNewEntity && code) {\r\n const codeExists = await this.props.api.codeExists(code);\r\n\r\n if (codeExists) {\r\n if (!editedEntityValidationContext.errors.includes(AbstractEntityValidationErrorEnum.CODE_DUPLICATE)) {\r\n editedEntityValidationContext.errors.push(AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n }\r\n } else {\r\n const index = editedEntityValidationContext.errors.findIndex(value => value === AbstractEntityValidationErrorEnum.CODE_DUPLICATE);\r\n if (index >= 0) {\r\n editedEntityValidationContext.errors.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n editedEntityValidationContext: editedEntityValidationContext,\r\n validateOnChange: true,\r\n validationIsRunning: false,\r\n });\r\n };\r\n\r\n async save(isCosmeticChange?: boolean): Promise<E | undefined> {\r\n await this.validate();\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n let savedEntity: E | undefined = undefined;\r\n\r\n if (errors.length === 0 && this.state.originalEntity && !isEqual(this.state.editedEntity, this.state.originalEntity)) {\r\n this.setState({savingIsRunning: true});\r\n savedEntity = await this.props.api.saveEntity(this.state.editedEntity, isCosmeticChange);\r\n this.setState({savingIsRunning: false});\r\n if (savedEntity) {\r\n this.updateData(savedEntity, cloneDeep(savedEntity), {errors: []});\r\n this.props.onSave?.(savedEntity);\r\n }\r\n }\r\n this.afterSave();\r\n\r\n return savedEntity;\r\n }\r\n\r\n protected async onSave() {\r\n await this.save();\r\n }\r\n\r\n protected afterSave() {\r\n }\r\n\r\n updateEditedObject() {\r\n if (this.state.validateOnChange) {\r\n this.validate();\r\n }\r\n this.updateData(undefined, this.state.editedEntity as E, this.state.editedEntityValidationContext);\r\n }\r\n\r\n onChangeEditContext(_original?: E, _edited?: E, _editedEntityValidationContext?: EntityValidationContext) {\r\n }\r\n\r\n updateData(originalEntity?: E, editedEntity?: E, editedEntityValidationContext?: EntityValidationContext, callback?: () => void) {\r\n const newState: Partial<S> = {};\r\n if (originalEntity) {\r\n newState.originalEntity = originalEntity;\r\n }\r\n if (editedEntity) {\r\n newState.editedEntity = editedEntity;\r\n }\r\n if (editedEntityValidationContext) {\r\n newState.editedEntityValidationContext = editedEntityValidationContext;\r\n }\r\n this.setState(newState as S, () => {\r\n this.onChangeEditContext(originalEntity, editedEntity, editedEntityValidationContext);\r\n callback?.();\r\n })\r\n }\r\n\r\n renderConfigHeader(hidePrevNextButton?: boolean) {\r\n return (\r\n <DetailHeaderPanel\r\n hidePrevNextButton={hidePrevNextButton}\r\n code={this.state.editedEntity?.code}\r\n onPrevRecord={this.props.onPrevRecord}\r\n onNextRecord={this.props.onNextRecord}\r\n onClose={this.props.onClose}\r\n />\r\n );\r\n }\r\n\r\n protected async onEditStart() {\r\n this.focusFirstField();\r\n }\r\n\r\n focusFirstField() {\r\n if (this.props.selectedEntity?.id === undefined || this.props.selectedEntity?.id === null) {\r\n this.codeInput?.focus();\r\n }\r\n }\r\n\r\n isEditDisabled() {\r\n const entityExists = !!this.state.originalEntity;\r\n const isNewEntity = this.state.editedEntity.id < 0 || this.state.editedEntity.id === undefined;\r\n const isSaveMode = entityExists && (isNewEntity || this.state.editedEntity.locked);\r\n return !isSaveMode;\r\n }\r\n\r\n protected getCodeMaxLength() {\r\n return 64;\r\n }\r\n\r\n protected getNameMaxLength() {\r\n return 256;\r\n }\r\n\r\n protected renderCodePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderCodeSuffix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected renderNamePrefix(): React.ReactNode | undefined {\r\n return undefined;\r\n }\r\n\r\n protected handleCodeChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.code = value;\r\n if (this.state.nameSameAsCode) {\r\n entity.name = value;\r\n }\r\n this.updateEditedObject();\r\n }\r\n\r\n protected handleNameChange(value: string) {\r\n const entity = this.state.editedEntity;\r\n\r\n entity.name = value;\r\n this.updateEditedObject();\r\n }\r\n\r\n protected renderGeneralConfigItems(codeConfig?: GeneralConfigItemParams, nameConfig?: GeneralConfigItemParams, hideDivider?: boolean) {\r\n const entity = this.state.editedEntity;\r\n const errors = this.state.editedEntityValidationContext.errors;\r\n const fieldsToHighlight = this.props.fieldsToHighlight;\r\n\r\n const [codeValidateStatus, codeErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.CODE_REQUIRED, AbstractEntityValidationErrorEnum.CODE_DUPLICATE], errors);\r\n const [nameValidateStatus, nameErrorMessage] = getAbstractEntityErrorInfo([AbstractEntityValidationErrorEnum.NAME_REQUIRED], errors);\r\n\r\n return (\r\n <Form\r\n className=\"record-config-form\"\r\n layout=\"horizontal\"\r\n labelCol={{sm: 24, md: 24, lg: 24, xl: 24, xxl: 24}}\r\n >\r\n <Row gutter={8}>\r\n <Col span={6}>\r\n <Form.Item label={i18n(\"ID\")}>\r\n <Input disabled value={entity.id}/>\r\n </Form.Item>\r\n </Col>\r\n {!codeConfig?.hidden &&\r\n <Col span={18}>\r\n <Form.Item\r\n label={i18n(\"Code\")}\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.CODE) ? \"warning\" : codeValidateStatus}\r\n help={codeErrorMessage}\r\n required={!codeConfig?.notRequired}\r\n >\r\n <Input\r\n disabled={entity.id !== undefined || this.isEditDisabled() || codeConfig?.disabled}\r\n ref={(input) => {\r\n this.codeInput = input;\r\n }}\r\n value={entity.code ?? undefined}\r\n onChange={e => {\r\n this.handleCodeChange(e.target.value);\r\n }}\r\n prefix={this.renderCodePrefix()}\r\n suffix={this.renderCodeSuffix()}\r\n maxLength={this.getCodeMaxLength()}\r\n showCount\r\n />\r\n </Form.Item>\r\n </Col>\r\n }\r\n </Row>\r\n {!nameConfig?.hidden &&\r\n <Form.Item\r\n className=\"form-item-full-width-label\"\r\n label={\r\n <div\r\n style={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"baseline\",\r\n }}\r\n >\r\n <span>{i18n(\"Name\")}</span>\r\n {this.isNewEntity() &&\r\n <span style={{display: \"flex\"}}>\r\n <Switch\r\n style={{marginRight: 4}}\r\n size=\"small\"\r\n checked={this.state.nameSameAsCode}\r\n onChange={checked => {\r\n this.setState({nameSameAsCode: checked})\r\n if (checked) {\r\n entity.name = entity.code;\r\n this.updateEditedObject();\r\n }\r\n }}\r\n />\r\n {i18n(\"Same As Code\")}\r\n </span>\r\n }\r\n </div>\r\n }\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.NAME) ? \"warning\" : nameValidateStatus}\r\n help={nameErrorMessage}\r\n required={!nameConfig?.notRequired}\r\n >\r\n <Input\r\n value={entity.name ?? undefined}\r\n disabled={this.isEditDisabled() || nameConfig?.disabled || this.state.nameSameAsCode}\r\n onChange={e => {\r\n this.handleNameChange(e.target.value);\r\n }}\r\n maxLength={this.getNameMaxLength()}\r\n prefix={this.renderNamePrefix()}\r\n />\r\n </Form.Item>\r\n }\r\n {!hideDivider && <Divider className=\"compact-divider\"/>}\r\n </Form>\r\n )\r\n }\r\n\r\n protected renderNoteFormItem() {\r\n const entity = this.state.editedEntity;\r\n const fieldsToHighlight = this.props.fieldsToHighlight;\r\n\r\n return (\r\n <Form.Item\r\n label={i18n(\"Note\")}\r\n validateStatus={fieldsToHighlight?.includes(GeneralEntityColumn.NOTE) ? \"warning\" : undefined}\r\n >\r\n <TextArea\r\n disabled={this.isEditDisabled()}\r\n value={entity.note ?? undefined}\r\n onChange={event => {\r\n entity.note = event.target.value;\r\n this.updateEditedObject();\r\n }}\r\n />\r\n </Form.Item>\r\n );\r\n }\r\n\r\n protected isNewEntity() {\r\n return !this.state.editedEntity?.id;\r\n }\r\n\r\n protected isEditMode() {\r\n return this.state.originalEntity && !this.isNewEntity() && !this.state.editedEntity.locked;\r\n }\r\n\r\n protected async getAccessRightForEntity(): Promise<{ accessRight: AccessRight, message: string }> {\r\n return {\r\n accessRight: AccessRight.WRITE,\r\n message: \"\",\r\n }\r\n }\r\n\r\n protected getFieldsToOmitForCompare(): string[] {\r\n return [\"locked\"]\r\n }\r\n\r\n protected isEntityModified() {\r\n return !isEqual(\r\n omit(cloneDeep(this.state.editedEntity), this.getFieldsToOmitForCompare()),\r\n omit(cloneDeep(this.state.originalEntity), this.getFieldsToOmitForCompare())\r\n );\r\n }\r\n\r\n async startEdit(): Promise<boolean> {\r\n this.setState({savingIsStarting: true});\r\n await this.onEditStart();\r\n const accessRightResult = await this.getAccessRightForEntity();\r\n this.setState({savingIsStarting: false});\r\n if (accessRightResult.accessRight !== AccessRight.WRITE) {\r\n ModalDialog.error({\r\n mode: ModalDialogMode.OK,\r\n title: i18n(\"Edit is not allowed\"),\r\n content: accessRightResult.message,\r\n okText: i18n(\"Cancel\")\r\n });\r\n return false;\r\n } else {\r\n this.setState({waitingForLockResponse: true, nameSameAsCode: false});\r\n const isOk = await this.props.api.lockEntity(this.state.editedEntity);\r\n this.setState({waitingForLockResponse: false});\r\n if (isOk) {\r\n this.updateEditedObject();\r\n } else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n renderConfigFooter() {\r\n const entityExists = !!this.state.originalEntity;\r\n const isNewEntity = this.isNewEntity();\r\n const isEditMode = this.isEditMode();\r\n const isSaveMode = entityExists && (isNewEntity || this.state.editedEntity.locked);\r\n const isEntityModified = entityExists && this.isEntityModified();\r\n\r\n return (\r\n <div style={{padding: 8}}>\r\n <Button.Group style={{width: \"100%\"}}>\r\n <Button\r\n disabled={!entityExists || (isSaveMode ? !isEntityModified : !isEditMode) || this.state.editedEntityValidationContext.errors.length !== 0 || this.state.validationIsRunning}\r\n block\r\n loading={this.state.waitingForLockResponse || this.state.savingIsStarting || this.state.savingIsRunning}\r\n type=\"primary\"\r\n icon={isSaveMode ? <SaveOutlined/> : <EditOutlined/>}\r\n onClick={async () => {\r\n if (isSaveMode) {\r\n await this.onSave();\r\n } else if (isEditMode) {\r\n await this.startEdit();\r\n }\r\n }}\r\n >\r\n {isSaveMode ? i18n(\"Save\") : i18n(\"Edit\")}\r\n </Button>\r\n <Button\r\n disabled={!entityExists || !isSaveMode}\r\n block\r\n danger\r\n icon={(isEntityModified && !isNewEntity) ? <UndoIcon/> : <CloseCircleOutlined/>}\r\n onClick={async () => {\r\n if (isNewEntity) {\r\n this.props.onClose?.();\r\n } else if (isSaveMode) {\r\n if (this.state.editedEntity.locked) {\r\n await this.props.api.unlockEntity(this.state.editedEntity);\r\n }\r\n this.revertChanges();\r\n }\r\n }}\r\n >\r\n {(isEntityModified && !isNewEntity) ? i18n(\"Revert Changes\") : i18n(\"Cancel\")}\r\n </Button>\r\n </Button.Group>\r\n </div>\r\n );\r\n }\r\n\r\n abstract renderConfigForm(): React.ReactNode;\r\n\r\n render() {\r\n const entity = this.state.editedEntity;\r\n const {hideConfigHeader, hideConfigFooter, historyMode} = this.props;\r\n\r\n return (\r\n <div style={{display: \"flex\", flexDirection: \"column\", overflow: \"hidden\", width: \"100%\", height: \"100%\"}}>\r\n {!hideConfigHeader && !historyMode && this.renderConfigHeader(entity?.id === undefined || this.props.hidePrevNextButton)}\r\n <div style={{flex: \"1 1 auto\", overflow: \"hidden\"}}>\r\n <div style={{height: `calc(100% - ${hideConfigFooter ? 0 : 48}px)`}}>\r\n <div style={{height: \"100%\", overflow: \"auto\"}}>\r\n <div style={{margin: \"0px 12px 16px\"}}>\r\n {entity && this.renderConfigForm()}\r\n </div>\r\n </div>\r\n </div>\r\n {!hideConfigFooter && !historyMode && entity?.ano_platny === DbBoolean.TRUE && this.renderConfigFooter()}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d2aura",
3
- "version": "23.0.34",
3
+ "version": "23.0.36",
4
4
  "description": "D2 AURA - Advanced User Interface Resource Architecture",
5
5
  "author": "Ipesoft s.r.o.",
6
6
  "license": "MIT",