@acorex/modules 20.4.0 → 20.4.2

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.
@@ -44,7 +44,6 @@ declare const RootConfig: {
44
44
  };
45
45
  module: {
46
46
  route: string;
47
- module: string;
48
47
  name: string;
49
48
  title: string;
50
49
  icon: string;
@@ -41,7 +41,6 @@ const RootConfig = {
41
41
  config,
42
42
  module: {
43
43
  route: 'data-management',
44
- module: 'dataManagement',
45
44
  name: 'DataManagement',
46
45
  title: `t('module-name', {scope:"${config.i18n}"})`,
47
46
  icon: 'fa-regular fa-database',
@@ -3867,6 +3866,7 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3867
3866
  //#region ---- Services & Dependencies ----
3868
3867
  this.dataSelectorService = inject(AXPDataSelectorService);
3869
3868
  this.metaDataService = inject(AXMMetaDataDefinitionService);
3869
+ this.entityResolver = inject(AXPEntityDefinitionRegistryService);
3870
3870
  //#endregion
3871
3871
  //#region ---- Computed Properties ----
3872
3872
  /**
@@ -3893,21 +3893,21 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3893
3893
  },
3894
3894
  status: item.status || 'active',
3895
3895
  order: item.order ?? index,
3896
- ...item
3896
+ ...item,
3897
3897
  }));
3898
3898
  }, ...(ngDevMode ? [{ debugName: "metaItems" }] : []));
3899
3899
  //#endregion
3900
3900
  //#region ---- Event Handlers ----
3901
3901
  /**
3902
3902
  * Effect to handle status changes
3903
- */
3903
+ */
3904
3904
  this.#statusChanged = effect(() => {
3905
3905
  if (this.layoutService.status() === AXPPageStatus.Submitting) {
3906
3906
  const currentValue = this.getValue();
3907
3907
  if (Array.isArray(currentValue)) {
3908
3908
  const cleanedValue = currentValue
3909
- .filter(item => item.status !== 'deleted')
3910
- .map(item => {
3909
+ .filter((item) => item.status !== 'deleted')
3910
+ .map((item) => {
3911
3911
  const { isNewlyAdded, ...rest } = item;
3912
3912
  return rest;
3913
3913
  });
@@ -3920,7 +3920,7 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3920
3920
  //#region ---- Event Handlers ----
3921
3921
  /**
3922
3922
  * Effect to handle status changes
3923
- */
3923
+ */
3924
3924
  #statusChanged;
3925
3925
  /**
3926
3926
  * Handle adding a new metadata item
@@ -3934,9 +3934,9 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3934
3934
  const metaDataItems = await this.metaDataService.query(e);
3935
3935
  return {
3936
3936
  items: metaDataItems.items,
3937
- total: metaDataItems.total
3937
+ total: metaDataItems.total,
3938
3938
  };
3939
- }
3939
+ },
3940
3940
  });
3941
3941
  // Create category tree data source for filtering
3942
3942
  const categoryTreeDataSource = {
@@ -3948,8 +3948,8 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3948
3948
  filter: {
3949
3949
  field: 'parentId',
3950
3950
  operator: { type: 'isEmpty' },
3951
- value: true
3952
- }
3951
+ value: true,
3952
+ },
3953
3953
  });
3954
3954
  // Convert to tree nodes format (childCount is now calculated by the service)
3955
3955
  return result.items.map((item) => ({
@@ -3957,7 +3957,7 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3957
3957
  title: item.title || item.name,
3958
3958
  description: item.description || '',
3959
3959
  parentId: item.parentId,
3960
- childCount: item.childCount || 0
3960
+ childCount: item.childCount || 0,
3961
3961
  }));
3962
3962
  },
3963
3963
  loadChildNodes: async (parentId) => {
@@ -3968,8 +3968,8 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3968
3968
  filter: {
3969
3969
  field: 'parentId',
3970
3970
  operator: { type: 'equal' },
3971
- value: parentId
3972
- }
3971
+ value: parentId,
3972
+ },
3973
3973
  });
3974
3974
  // Convert to tree nodes format (childCount is now calculated by the service)
3975
3975
  return result.items.map((item) => ({
@@ -3977,7 +3977,7 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3977
3977
  title: item.title || item.name,
3978
3978
  description: item.description || '',
3979
3979
  parentId: item.parentId,
3980
- childCount: item.childCount || 0
3980
+ childCount: item.childCount || 0,
3981
3981
  }));
3982
3982
  },
3983
3983
  searchNodes: async (searchValue) => {
@@ -3990,16 +3990,16 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
3990
3990
  {
3991
3991
  field: 'title',
3992
3992
  operator: { type: 'contains' },
3993
- value: searchValue
3993
+ value: searchValue,
3994
3994
  },
3995
3995
  {
3996
3996
  field: 'name',
3997
3997
  operator: { type: 'contains' },
3998
- value: searchValue
3999
- }
3998
+ value: searchValue,
3999
+ },
4000
4000
  ],
4001
- logic: 'or'
4002
- }
4001
+ logic: 'or',
4002
+ },
4003
4003
  });
4004
4004
  // Convert to tree nodes format (childCount is now calculated by the service)
4005
4005
  return result.items.map((item) => ({
@@ -4007,37 +4007,57 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
4007
4007
  title: item.title || item.name,
4008
4008
  description: item.description || '',
4009
4009
  parentId: item.parentId,
4010
- childCount: item.childCount || 0
4010
+ childCount: item.childCount || 0,
4011
4011
  }));
4012
- }
4012
+ },
4013
4013
  };
4014
+ const entity = await this.entityResolver.resolve(RootConfig.module.name, RootConfig.entities.metaDataDefinition.name);
4015
+ if (!entity) {
4016
+ throw new Error('Entity not found with name: ' + RootConfig.entities.metaDataDefinition.name);
4017
+ }
4018
+ const columns = entity.columns
4019
+ ?.filter((column) => entity.properties.some((property) => property.name === column.name))
4020
+ .map((column) => {
4021
+ const property = entity.properties.find((prop) => prop.name === column.name);
4022
+ return {
4023
+ name: column.name,
4024
+ title: property?.title ?? '',
4025
+ visible: column.options?.visible !== false,
4026
+ widget: {
4027
+ type: column.showAs?.type ?? property?.schema?.interface?.type ?? 'text-editor',
4028
+ options: column.showAs?.options ?? property?.schema?.interface?.options ?? {},
4029
+ },
4030
+ };
4031
+ }) || [];
4032
+ debugger;
4014
4033
  // Open data selector with category filter
4015
4034
  const result = await this.dataSelectorService.openWithCategoryFilter({
4016
4035
  title: '@data-management:meta-data-selector.select-items',
4017
4036
  dataSource: dataSource,
4018
- columns: [
4019
- {
4020
- name: 'title',
4021
- title: '@general:terms.common.title',
4022
- visible: true,
4023
- widget: {
4024
- type: 'text-editor',
4025
- options: {}
4026
- }
4027
- },
4028
- {
4029
- name: 'description',
4030
- title: '@general:terms.common.description',
4031
- visible: true,
4032
- widget: {
4033
- type: 'text-editor',
4034
- options: {}
4035
- }
4036
- },
4037
- ],
4037
+ // columns: [
4038
+ // {
4039
+ // name: 'title',
4040
+ // title: '@general:terms.common.title',
4041
+ // visible: true,
4042
+ // widget: {
4043
+ // type: 'text-editor',
4044
+ // options: {}
4045
+ // }
4046
+ // },
4047
+ // {
4048
+ // name: 'description',
4049
+ // title: '@general:terms.common.description',
4050
+ // visible: true,
4051
+ // widget: {
4052
+ // type: 'text-editor',
4053
+ // options: {}
4054
+ // }
4055
+ // },
4056
+ // ],
4057
+ columns: columns,
4038
4058
  selectionMode: 'multiple',
4039
4059
  searchFields: ['title', 'description'],
4040
- allowCreate: false
4060
+ allowCreate: false,
4041
4061
  }, {
4042
4062
  title: '@data-management:meta-data-selector.categories',
4043
4063
  dataSource: categoryTreeDataSource,
@@ -4056,7 +4076,7 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
4056
4076
  interface: item.interface,
4057
4077
  configuration: {
4058
4078
  isRequired: false,
4059
- placeholder: ''
4079
+ placeholder: '',
4060
4080
  },
4061
4081
  order: currentValue.length + index,
4062
4082
  isNewlyAdded: true, // Mark as newly added
@@ -4097,7 +4117,7 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
4097
4117
  // Update order property
4098
4118
  const updatedItems = currentValue.map((item, index) => ({
4099
4119
  ...item,
4100
- order: index
4120
+ order: index,
4101
4121
  }));
4102
4122
  this.setValue(updatedItems);
4103
4123
  }
@@ -4131,7 +4151,7 @@ class AXPMetaDataSelectorWidgetEditComponent extends AXPValueWidgetComponent {
4131
4151
  */
4132
4152
  updateMetaItem(item) {
4133
4153
  const currentValue = this.getValue() || [];
4134
- const updatedValue = currentValue.map((meta) => meta.id === item.id ? { ...meta, ...item } : meta);
4154
+ const updatedValue = currentValue.map((meta) => (meta.id === item.id ? { ...meta, ...item } : meta));
4135
4155
  this.setValue(updatedValue);
4136
4156
  }
4137
4157
  //#endregion
@@ -4381,6 +4401,14 @@ class AXPMetaDataFormWidgetEditComponent extends AXPValueWidgetComponent {
4381
4401
  * Array of metadata definitions to render as form fields
4382
4402
  */
4383
4403
  this.definitions = computed(() => this.options()['definitions'] ?? [], ...(ngDevMode ? [{ debugName: "definitions" }] : []));
4404
+ /**
4405
+ * Text field to use for the meta data form, default is 'title'
4406
+ */
4407
+ this.textField = computed(() => this.options()['textField'] ?? 'title', ...(ngDevMode ? [{ debugName: "textField" }] : []));
4408
+ /**
4409
+ * Value field to use for the meta data form, default is 'name'
4410
+ */
4411
+ this.valueField = computed(() => this.options()['valueField'] ?? 'name', ...(ngDevMode ? [{ debugName: "valueField" }] : []));
4384
4412
  this.#effect = effect(() => {
4385
4413
  this.initializeFormDefinition();
4386
4414
  }, ...(ngDevMode ? [{ debugName: "#effect" }] : []));
@@ -4538,13 +4566,14 @@ class AXPMetaDataFormWidgetEditComponent extends AXPValueWidgetComponent {
4538
4566
  };
4539
4567
  }
4540
4568
  const interfaceConfig = this.parseInterfaceConfig(metadata.interface);
4569
+ debugger;
4541
4570
  return {
4542
- path: metadata.name || 'unnamed',
4543
- title: metadata.title || 'Untitled Field',
4571
+ path: metadata[this.valueField()] || 'unnamed',
4572
+ title: metadata[this.textField()] || 'Untitled Field',
4544
4573
  description: undefined, // metadata.description not available in current interface
4545
4574
  widget: {
4546
4575
  type: interfaceConfig.type || 'text-editor',
4547
- path: metadata.name || 'unnamed',
4576
+ path: metadata[this.valueField()] || 'unnamed',
4548
4577
  options: {
4549
4578
  ...interfaceConfig.options,
4550
4579
  defaultValue: metadata.defaultValue,
@@ -4726,6 +4755,8 @@ const metaDataFormPlugin = {
4726
4755
  type: 'meta-data-form-editor',
4727
4756
  options: {
4728
4757
  definitions: metadataExpression,
4758
+ textField: options.textField,
4759
+ valueField: options.valueField,
4729
4760
  },
4730
4761
  },
4731
4762
  },