@acorex/modules 20.4.1 → 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.
|
@@ -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
|
-
|
|
4021
|
-
|
|
4022
|
-
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
|
|
4032
|
-
|
|
4033
|
-
|
|
4034
|
-
|
|
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.
|
|
4543
|
-
title: metadata.
|
|
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.
|
|
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
|
},
|