@acorex-platform/module-data-management-client 0.0.57 → 0.0.58

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.
@@ -211,7 +211,15 @@
211
211
  "description": "Configure metadata groups and fields for dynamic forms",
212
212
  "basic-info": {
213
213
  "title": "Basic Info",
214
- "name-duplicate": "A field with this name already exists. Please choose a unique name."
214
+ "name-duplicate": "A field with this name already exists. Please choose a unique name.",
215
+ "width": {
216
+ "title": "Width",
217
+ "full": "Full",
218
+ "half": "Half",
219
+ "third": "One Third",
220
+ "quarter": "One Quarter",
221
+ "sixth": "One Sixth"
222
+ }
215
223
  },
216
224
  "default-section-badge": "Default Section",
217
225
  "available-items": "Available Items",
@@ -266,6 +274,15 @@
266
274
  }
267
275
  }
268
276
  },
277
+ "meta-data-selector": {
278
+ "applies-to": {
279
+ "title": "Applies To",
280
+ "document": "Document",
281
+ "folder": "Folder",
282
+ "badge-document": "Applies To: Document",
283
+ "badge-folder": "Applies To: Folder"
284
+ }
285
+ },
269
286
  "query-builder": {
270
287
  "title": "Query Builder",
271
288
  "terms": {
@@ -211,7 +211,15 @@
211
211
  "description": "Configure metadata groups and fields for dynamic forms",
212
212
  "basic-info": {
213
213
  "title": "Basic Info",
214
- "name-duplicate": "A field with this name already exists. Please choose a unique name."
214
+ "name-duplicate": "A field with this name already exists. Please choose a unique name.",
215
+ "width": {
216
+ "title": "Width",
217
+ "full": "Full",
218
+ "half": "Half",
219
+ "third": "One Third",
220
+ "quarter": "One Quarter",
221
+ "sixth": "One Sixth"
222
+ }
215
223
  },
216
224
  "default-section-badge": "Default Section",
217
225
  "available-items": "Available Items",
@@ -266,6 +274,15 @@
266
274
  }
267
275
  }
268
276
  },
277
+ "meta-data-selector": {
278
+ "applies-to": {
279
+ "title": "Applies To",
280
+ "document": "Document",
281
+ "folder": "Folder",
282
+ "badge-document": "Applies To: Document",
283
+ "badge-folder": "Applies To: Folder"
284
+ }
285
+ },
269
286
  "query-builder": {
270
287
  "title": "Query Builder",
271
288
  "terms": {
@@ -215,7 +215,15 @@
215
215
  "description": "انتخاب و پیکربندی موارد مقادیر ویژگی از دسته‌های موجود",
216
216
  "basic-info": {
217
217
  "title": "اطلاعات پایه",
218
- "name-duplicate": "فیلدی با این نام از قبل وجود دارد. لطفاً یک نام یکتا انتخاب کنید."
218
+ "name-duplicate": "فیلدی با این نام از قبل وجود دارد. لطفاً یک نام یکتا انتخاب کنید.",
219
+ "width": {
220
+ "title": "عرض",
221
+ "full": "کامل",
222
+ "half": "نصف",
223
+ "third": "یک‌سوم",
224
+ "quarter": "یک‌چهارم",
225
+ "sixth": "یک‌ششم"
226
+ }
219
227
  },
220
228
  "default-section-badge": "بخش پیش‌فرض",
221
229
  "available-items": "موارد موجود",
@@ -233,6 +241,13 @@
233
241
  "placeholder": "مکان‌نما",
234
242
  "placeholder-hint": "متن مکان‌نما را وارد کنید",
235
243
  "tree-loading": "در حال بارگذاری درخت...",
244
+ "applies-to": {
245
+ "title": "اعمال به",
246
+ "document": "سند",
247
+ "folder": "پوشه",
248
+ "badge-document": "اعمال به: سند",
249
+ "badge-folder": "اعمال به: پوشه"
250
+ },
236
251
  "dialogs": {
237
252
  "group-name-placeholder": "مثال: contact-details، section_1",
238
253
  "group-name-duplicate": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-data-management-client",
3
- "version": "0.0.57",
3
+ "version": "0.0.58",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0 || ^22.0.0",
@@ -1,4 +1,4 @@
1
- import { AXPMultiLanguageString, AXPOptionsData, AXPModuleManifest, AXPMetaDataDefinition, AXPFilterDefinition, AXPCategoryListItem } from '@acorex-platform/framework-shared/core';
1
+ import { AXPMultiLanguageString, AXPGridLayoutOptions, AXPOptionsData, AXPModuleManifest, AXPMetaDataDefinition, AXPFilterDefinition, AXPCategoryListItem } from '@acorex-platform/framework-shared/core';
2
2
  import { AXPEntityModel } from '@acorex-platform/framework-shared/entity';
3
3
 
4
4
  declare const AXM_COLUMN_DEF_WIDGET: {
@@ -105,6 +105,8 @@ interface AXMMetaDataBuilderField {
105
105
  title: AXMMetaDataLocalizedString;
106
106
  description?: AXMMetaDataLocalizedString;
107
107
  interface: string;
108
+ /** Column placement on the record form. `positions.lg.colSpan` is the width in a 12-column row. */
109
+ layout?: AXPGridLayoutOptions;
108
110
  configuration?: {
109
111
  isRequired?: boolean;
110
112
  placeholder?: string;
@@ -147,6 +149,7 @@ interface AXMMetaDataBuilderValue {
147
149
  description?: AXMMetaDataLocalizedString;
148
150
  interface: string;
149
151
  configuration?: AXPOptionsData;
152
+ layout?: AXPGridLayoutOptions;
150
153
  /** When omitted or null, the field applies to the document. */
151
154
  appliesTo?: AXMMetaDataFieldAppliesTo | null;
152
155
  order: number;
@@ -5,7 +5,7 @@ import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layou
5
5
  import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';
6
6
  import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';
7
7
  import * as _acorex_platform_framework_shared_core from '@acorex-platform/framework-shared/core';
8
- import { AXPOptionsData, AXPFilterDefinition, AXPFilterClause, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext, AXPMultiLanguageString, AXPActionMenuItem } from '@acorex-platform/framework-shared/core';
8
+ import { AXPOptionsData, AXPFilterDefinition, AXPFilterClause, AXPWidgetNode, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext, AXPMultiLanguageString, AXPActionMenuItem } from '@acorex-platform/framework-shared/core';
9
9
  import * as _acorex_platform_module_data_management_client_contracts from '@acorex-platform/module-data-management-client/contracts';
10
10
  import { AXPQueryBuilderData, AXPQueryOutputType, AXPQuerySortRule, AXPAggregateOperation, AXPQueryExecutionResult, AXMMetaDataBuilderValue, AXMMetaDataDefinitionEntityModel } from '@acorex-platform/module-data-management-client/contracts';
11
11
  export { AXPAggregateOperation, AXPQueryBuilderData, AXPQuerySortRule } from '@acorex-platform/module-data-management-client/contracts';
@@ -1474,7 +1474,7 @@ declare class AXPMetaDataFormWidgetEditComponent extends AXPValueWidgetComponent
1474
1474
  /**
1475
1475
  * Form definition signal that only updates when structure actually changes
1476
1476
  */
1477
- protected formDefinition: _angular_core.WritableSignal<AXPDynamicFormDefinition>;
1477
+ protected formDefinition: _angular_core.WritableSignal<AXPWidgetNode | AXPDynamicFormDefinition>;
1478
1478
  ngOnInit(): void;
1479
1479
  /**
1480
1480
  * Handle context change from dynamic form
@@ -1490,10 +1490,19 @@ declare class AXPMetaDataFormWidgetEditComponent extends AXPValueWidgetComponent
1490
1490
  */
1491
1491
  private initializeFormDefinition;
1492
1492
  /**
1493
- * Convert groups structure from meta-data-selector to form definition
1494
- * Each metadata group becomes a separate form group with visual separation (card look)
1493
+ * Page and popup pass `options.look` (default card). Section mode keeps the stacked
1494
+ * group or container chrome and still places fields on the 12-column width grid.
1495
1495
  */
1496
- private convertGroupsToFormDefinition;
1496
+ private sectionLook;
1497
+ private convertGroupsToSectionLayout;
1498
+ private convertGroupToSectionNode;
1499
+ /**
1500
+ * Group, card, and fieldset chrome already draw a column grid, so each field is a direct cell.
1501
+ * Container chrome is a single column, so fields sit in an inner 12-column grid.
1502
+ */
1503
+ private sectionFieldNodes;
1504
+ private toFieldDefinition;
1505
+ private toFormFieldNode;
1497
1506
  /**
1498
1507
  * Ensures nested dynamic fields use view components when the parent form is read-only.
1499
1508
  */
@@ -1546,6 +1555,8 @@ interface ResolveGroupsResult {
1546
1555
  /** Expression string (evaluated at runtime) or groups array */
1547
1556
  groups: string | AXPDynamicFormGroupDefinition[];
1548
1557
  dialogTitle?: string;
1558
+ /** Section chrome for the popup. Defaults to card so field widths apply. */
1559
+ look: string;
1549
1560
  }
1550
1561
  declare class ShowMetaDataFormPopupCommand implements AXPCommand<ShowMetaDataFormPopupInput, any> {
1551
1562
  protected readonly layoutBuilder: AXPLayoutBuilderService;
@@ -1762,10 +1773,20 @@ declare class ShowMetaDataBuilderPopupCommand implements AXPCommand<ShowMetaData
1762
1773
  * - Filter metadata definitions by group name
1763
1774
  */
1764
1775
  declare class AXMMetadataEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {
1765
- private readonly queryService;
1766
1776
  private readonly entityDefinitionRegistryService;
1767
1777
  private readonly entityService;
1778
+ /** Category rows are stable while a form is edited; reuse them so option expressions do not refetch on each keystroke. */
1779
+ private readonly categoryRecordCache;
1768
1780
  provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void>;
1781
+ /**
1782
+ * Loads one category row. Concurrent and later evaluations share the same request.
1783
+ */
1784
+ private loadCategoryRecord;
1785
+ /**
1786
+ * Walks the selected category and its parents, then merges `metaDataList` so a child
1787
+ * category inherits groups defined on an ancestor (child fields override the parent).
1788
+ */
1789
+ private loadCategoryMetadataGroups;
1769
1790
  /**
1770
1791
  * Merge interface overrides from meta-data-builder into fetched groups
1771
1792
  * Matches fields by id or name and applies overridden interfaces