@acorex/platform 21.0.0-next.88 → 21.0.0-next.90

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.
Files changed (55) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +8 -2
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-VfmZct9H.mjs → acorex-platform-common-common-settings.provider-DilV4dql.mjs} +15 -42
  4. package/fesm2022/acorex-platform-common-common-settings.provider-DilV4dql.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +3299 -3200
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-contracts.mjs +1 -0
  8. package/fesm2022/acorex-platform-contracts.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-core.mjs +643 -30
  10. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +98 -189
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-RttFwaw9.mjs} +17 -4
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-RttFwaw9.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +125 -26
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +4 -4
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity-contracts.mjs +106 -12
  20. package/fesm2022/acorex-platform-layout-entity-contracts.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-entity.mjs +512 -155
  22. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-views.mjs +921 -173
  24. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-widget-core.mjs +380 -103
  26. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  27. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-D4MOHEpI.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs} +2 -2
  28. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-D4MOHEpI.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs.map} +1 -1
  29. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs} +2 -2
  30. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs.map} +1 -1
  31. package/fesm2022/acorex-platform-layout-widgets.mjs +575 -239
  32. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-themes-default.mjs +232 -25
  34. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  35. package/fesm2022/{acorex-platform-themes-shared-settings.provider-BUwPqwUS.mjs → acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs} +48 -1
  36. package/fesm2022/acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-themes-shared.mjs +103 -24
  38. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  39. package/package.json +1 -1
  40. package/types/acorex-platform-auth.d.ts +1 -0
  41. package/types/acorex-platform-common.d.ts +202 -151
  42. package/types/acorex-platform-contracts.d.ts +1 -0
  43. package/types/acorex-platform-core.d.ts +162 -7
  44. package/types/acorex-platform-layout-builder.d.ts +10 -20
  45. package/types/acorex-platform-layout-components.d.ts +14 -1
  46. package/types/acorex-platform-layout-entity-contracts.d.ts +31 -2
  47. package/types/acorex-platform-layout-entity.d.ts +91 -16
  48. package/types/acorex-platform-layout-views.d.ts +107 -20
  49. package/types/acorex-platform-layout-widget-core.d.ts +71 -9
  50. package/types/acorex-platform-layout-widgets.d.ts +48 -26
  51. package/types/acorex-platform-themes-default.d.ts +60 -6
  52. package/types/acorex-platform-themes-shared.d.ts +4 -0
  53. package/fesm2022/acorex-platform-common-common-settings.provider-VfmZct9H.mjs.map +0 -1
  54. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +0 -1
  55. package/fesm2022/acorex-platform-themes-shared-settings.provider-BUwPqwUS.mjs.map +0 -1
@@ -841,14 +841,7 @@ async function collectEntityQuickSearchFieldPaths(entity, resolveRelatedDefiniti
841
841
  }
842
842
  //#endregion
843
843
 
844
- //#endregion
845
- //#region ---- Property filter helpers ----
846
- function isPropertyFilterEnabled(property) {
847
- const filter = property.options?.filter;
848
- return !!(filter?.advance?.enabled ||
849
- filter?.inline?.enabled ||
850
- filter?.preload?.enabled);
851
- }
844
+ //#region ---- Related entity helpers ----
852
845
  function parseRelatedEntityFullName(fullName) {
853
846
  const trimmed = fullName.trim();
854
847
  const idx = trimmed.indexOf('.');
@@ -860,13 +853,24 @@ function parseRelatedEntityFullName(fullName) {
860
853
  entityName: trimmed.slice(idx + 1),
861
854
  };
862
855
  }
856
+ function parseDottedFieldPath(fieldPath) {
857
+ const trimmed = fieldPath.trim();
858
+ const dotIndex = trimmed.indexOf('.');
859
+ if (dotIndex <= 0 || dotIndex >= trimmed.length - 1) {
860
+ return null;
861
+ }
862
+ return {
863
+ dataPath: trimmed.slice(0, dotIndex),
864
+ propertyName: trimmed.slice(dotIndex + 1),
865
+ };
866
+ }
863
867
  //#endregion
864
868
  //#region ---- Merge-detail property discovery ----
865
869
  /**
866
- * Resolves related property names eligible for host list filters:
870
+ * Resolves related property names eligible for host list columns/filters/sorts:
867
871
  * host columns under `dataPath`, optional `related.properties` allowlist, minus `excludeProperties`.
868
872
  */
869
- function collectMergeDetailFilterPropertyNames(hostEntity, dataPath, relatedEntity) {
873
+ function collectMergeDetailListPropertyNames(hostEntity, dataPath, relatedEntity) {
870
874
  const names = new Set();
871
875
  const prefix = `${dataPath}.`;
872
876
  if (relatedEntity.properties?.length) {
@@ -904,6 +908,18 @@ function collectMergeDetailFilterPropertyNames(hostEntity, dataPath, relatedEnti
904
908
  }
905
909
  return names;
906
910
  }
911
+ //#endregion
912
+
913
+ //#endregion
914
+ //#region ---- Property filter helpers ----
915
+ function isPropertyFilterEnabled(property) {
916
+ const filter = property.options?.filter;
917
+ return !!(filter?.advance?.enabled ||
918
+ filter?.inline?.enabled ||
919
+ filter?.preload?.enabled);
920
+ }
921
+ //#endregion
922
+ //#region ---- Merge-detail property discovery ----
907
923
  function resolveMergedRelatedInlineFilterField(dataPath, relatedEntityDef, property) {
908
924
  const columnDataPath = resolveEntityColumnDataPath(relatedEntityDef, property.name);
909
925
  if (columnDataPath) {
@@ -1002,7 +1018,7 @@ async function collectMergeDetailFilterDefinitions(hostEntity, resolveRelatedDef
1002
1018
  if (!relatedDef) {
1003
1019
  continue;
1004
1020
  }
1005
- const propertyNames = collectMergeDetailFilterPropertyNames(hostEntity, dataPath, related);
1021
+ const propertyNames = collectMergeDetailListPropertyNames(hostEntity, dataPath, related);
1006
1022
  if (propertyNames.size === 0) {
1007
1023
  continue;
1008
1024
  }
@@ -1040,6 +1056,84 @@ async function collectEntityListFilterDefinitions(entity, resolveRelatedDefiniti
1040
1056
  }
1041
1057
  //#endregion
1042
1058
 
1059
+ //#endregion
1060
+ //#region ---- Property sort helpers ----
1061
+ function isPropertySortEnabled(property) {
1062
+ return !!property.options?.sort?.enabled;
1063
+ }
1064
+ function resolveHostColumnTitle(hostEntity, fieldName) {
1065
+ const column = hostEntity.columns?.find((c) => c.name === fieldName);
1066
+ return column?.title;
1067
+ }
1068
+ function collectHostSortableFields(entity) {
1069
+ return (entity.properties ?? [])
1070
+ .filter(isPropertySortEnabled)
1071
+ .map((property) => ({
1072
+ name: property.name,
1073
+ title: resolveHostColumnTitle(entity, property.name) ?? property.title,
1074
+ }));
1075
+ }
1076
+ async function collectMergeDetailSortableFields(hostEntity, resolveRelatedDefinition) {
1077
+ const fields = [];
1078
+ for (const related of hostEntity.relatedEntities ?? []) {
1079
+ if (related.layout?.type !== 'merge-detail') {
1080
+ continue;
1081
+ }
1082
+ const dataPath = related.persistence?.dataPath?.trim();
1083
+ if (!dataPath) {
1084
+ continue;
1085
+ }
1086
+ const parsed = related.entity ? parseRelatedEntityFullName(related.entity) : null;
1087
+ if (!parsed) {
1088
+ continue;
1089
+ }
1090
+ const relatedDef = await resolveRelatedDefinition(parsed.moduleName, parsed.entityName);
1091
+ if (!relatedDef) {
1092
+ continue;
1093
+ }
1094
+ const propertyNames = collectMergeDetailListPropertyNames(hostEntity, dataPath, related);
1095
+ for (const propertyName of propertyNames) {
1096
+ const property = relatedDef.properties?.find((p) => p.name === propertyName);
1097
+ if (!property || !isPropertySortEnabled(property)) {
1098
+ continue;
1099
+ }
1100
+ const queryField = `${dataPath}.${propertyName}`;
1101
+ fields.push({
1102
+ name: queryField,
1103
+ title: resolveHostColumnTitle(hostEntity, queryField) ?? property.title,
1104
+ });
1105
+ }
1106
+ }
1107
+ return fields;
1108
+ }
1109
+ //#endregion
1110
+ //#region ---- Public API ----
1111
+ /**
1112
+ * Builds master-list sortable fields from host properties and merge-detail related entities.
1113
+ * Related sorts use `{dataPath}.{property}` query fields (e.g. `person.firstName`).
1114
+ */
1115
+ async function collectEntityListSortableFields(entity, resolveRelatedDefinition) {
1116
+ if (!entity) {
1117
+ return [];
1118
+ }
1119
+ const hostFields = collectHostSortableFields(entity);
1120
+ const relatedFields = await collectMergeDetailSortableFields(entity, resolveRelatedDefinition);
1121
+ const seen = new Set();
1122
+ const result = [];
1123
+ for (const field of [...hostFields, ...relatedFields]) {
1124
+ if (seen.has(field.name)) {
1125
+ continue;
1126
+ }
1127
+ seen.add(field.name);
1128
+ result.push(field);
1129
+ }
1130
+ return result;
1131
+ }
1132
+ function isEntityPropertySortEnabled(property) {
1133
+ return property != null && isPropertySortEnabled(property);
1134
+ }
1135
+ //#endregion
1136
+
1043
1137
  //#region ---- Workflow record helpers ----
1044
1138
  /** Entity query filter field for {@link AXPRecordWorkflowInfo.instanceId}. */
1045
1139
  const AXP_RECORD_WORKFLOW_INFO_INSTANCE_ID_FIELD = 'workflowInfo.instanceId';
@@ -1110,5 +1204,5 @@ const AXPEntityEventsKeys = {
1110
1204
  * Generated bundle index. Do not edit.
1111
1205
  */
1112
1206
 
1113
- export { AXPEntityCommandScope, AXPEntityDataSourceKeys, AXPEntityEventsKeys, AXPEntityQueryType, AXPEntityType, AXPRelationshipCardinality, AXPRelationshipKind, AXP_RECORD_WORKFLOW_INFO_CORRELATION_ID_FIELD, AXP_RECORD_WORKFLOW_INFO_DEFINITION_ID_FIELD, AXP_RECORD_WORKFLOW_INFO_INSTANCE_ID_FIELD, ENTITY_LAYOUT_SINGLE_TITLE_PATH, ENTITY_ROW_POPUP_TITLE_OPTION, ENTITY_ROW_TITLE_TEMPLATE_OPTION, buildAXPRecordWorkflowInfo, buildEntitySearchTitleContext, collectEntityListFilterDefinitions, collectEntityQuickSearchFieldPaths, collectNestedCreateHiddenProperties, collectNestedFieldPathsFromEntityColumns, collectPropertyExposeTargetPaths, collectQuickSearchPathsFromSingleEntityDefinition, createAllQueryView, createQueryView, encodeEntityListFilterContextField, entityDetailsCreateActions, entityDetailsCreateActionsDeferredParent, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsNewEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterEditAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, getEntityInfo, getRecordWorkflowCorrelationId, getRecordWorkflowInstanceId, isCardFieldBadgeDisplay, isMeaningfulEntityDisplayTitle, isRowBoundEntityDisplayTemplate, isUnresolvedEntityDisplayTemplate, mergeForeignKeyFieldIntoCreateActions, normalizeEntityDisplayTemplate, normalizeExpressionTemplate, parsePropertyExposeEntries, resolveCardFieldBadgeColor, resolveDefaultMasterListLayout, resolveEnabledMasterListLayouts, resolveEntityColumnDataPath, resolveEntityListFilterContextField, resolveEntityListFilterQueryField, resolveEntityModifyRecordTitleTemplate, resolveEntityPropertyInlineFilterField, resolveEntityRowTitleTemplate, resolvePropertyExposeDisplayTarget, sanitizeResolvedEntityDisplayTitle };
1207
+ export { AXPEntityCommandScope, AXPEntityDataSourceKeys, AXPEntityEventsKeys, AXPEntityQueryType, AXPEntityType, AXPRelationshipCardinality, AXPRelationshipKind, AXP_RECORD_WORKFLOW_INFO_CORRELATION_ID_FIELD, AXP_RECORD_WORKFLOW_INFO_DEFINITION_ID_FIELD, AXP_RECORD_WORKFLOW_INFO_INSTANCE_ID_FIELD, ENTITY_LAYOUT_SINGLE_TITLE_PATH, ENTITY_ROW_POPUP_TITLE_OPTION, ENTITY_ROW_TITLE_TEMPLATE_OPTION, buildAXPRecordWorkflowInfo, buildEntitySearchTitleContext, collectEntityListFilterDefinitions, collectEntityListSortableFields, collectEntityQuickSearchFieldPaths, collectMergeDetailListPropertyNames, collectNestedCreateHiddenProperties, collectNestedFieldPathsFromEntityColumns, collectPropertyExposeTargetPaths, collectQuickSearchPathsFromSingleEntityDefinition, createAllQueryView, createQueryView, encodeEntityListFilterContextField, entityDetailsCreateActions, entityDetailsCreateActionsDeferredParent, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsNewEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterEditAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, getEntityInfo, getRecordWorkflowCorrelationId, getRecordWorkflowInstanceId, isCardFieldBadgeDisplay, isEntityPropertySortEnabled, isMeaningfulEntityDisplayTitle, isRowBoundEntityDisplayTemplate, isUnresolvedEntityDisplayTemplate, mergeForeignKeyFieldIntoCreateActions, normalizeEntityDisplayTemplate, normalizeExpressionTemplate, parseDottedFieldPath, parsePropertyExposeEntries, parseRelatedEntityFullName, resolveCardFieldBadgeColor, resolveDefaultMasterListLayout, resolveEnabledMasterListLayouts, resolveEntityColumnDataPath, resolveEntityListFilterContextField, resolveEntityListFilterQueryField, resolveEntityModifyRecordTitleTemplate, resolveEntityPropertyInlineFilterField, resolveEntityRowTitleTemplate, resolvePropertyExposeDisplayTarget, sanitizeResolvedEntityDisplayTitle };
1114
1208
  //# sourceMappingURL=acorex-platform-layout-entity-contracts.mjs.map