@acorex/platform 20.9.37 → 20.9.39

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/platform",
3
- "version": "20.9.37",
3
+ "version": "20.9.39",
4
4
  "peerDependencies": {
5
5
  "@acorex/cdk": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.0.0-next.0",
6
6
  "@acorex/core": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.0.0-next.0",
@@ -173,7 +173,11 @@ interface AXPEntityDisplayField {
173
173
  options?: Record<string, any>;
174
174
  };
175
175
  options?: {
176
- /** When string, evaluate against parent detail context (e.g. related list). */
176
+ /**
177
+ * When string, evaluate as an expression:
178
+ * - master list: list scope (`list.view()`, `list.views()`, `context.eval(...)`)
179
+ * - related list: parent detail context
180
+ */
177
181
  visible?: boolean | string;
178
182
  /** Optional dataPath override for field binding. */
179
183
  dataPath?: string;
@@ -286,6 +290,10 @@ interface AXPQueryView {
286
290
  name: string;
287
291
  fixed: boolean;
288
292
  title: string;
293
+ /**
294
+ * Whitelist of entity column names for this view.
295
+ * Empty array = show all entity columns (still subject to each column's `options.visible`).
296
+ */
289
297
  columns: string[];
290
298
  conditions: AXPQueryFilter[];
291
299
  sorts: AXPQuerySort[];
@@ -974,10 +982,11 @@ declare function resolveLookupWidgetCreateOptions(options: {
974
982
  allowCreate?: 'none' | 'full' | 'quick';
975
983
  }): ResolvedLookupCreateOptions;
976
984
 
977
- /** Prefix for related-entity sidebar list widget nodes (`page-list` layout). */
985
+ /** Prefix for related-entity sidebar list widget nodes and page ids (`page-list` layout). */
978
986
  declare const PAGE_LIST_WIDGET_NAME_PREFIX = "page-list-";
979
987
  /**
980
- * Builds a unique entity-list widget name for a related-entity `page-list` sidebar page.
988
+ * Builds a unique id/name for a related-entity `page-list` sidebar page (widget node + details `page` query).
989
+ * Must not equal the host overview page id (`entity.name`) so self-referential related lists can navigate.
981
990
  * Mirrors the `tab-list` pattern (`${entity}-tab-list`).
982
991
  */
983
992
  declare function buildPageListWidgetName(relatedEntityKey: string): string;
@@ -908,9 +908,18 @@ declare class AXPEntityMasterListViewModel {
908
908
  private allAvailableColumns;
909
909
  visibleColumnCount: () => number;
910
910
  columns: _angular_core.WritableSignal<AXPEntityListViewColumnViewModel[]>;
911
- resetColumns(): void;
911
+ resetColumns(): Promise<void>;
912
912
  onColumnsChanged(columns: AXPEntityListViewColumnViewModel[]): Promise<void>;
913
- applyViewColumns(): void;
913
+ /**
914
+ * Builds list columns for the active view:
915
+ * - `view.columns` is a whitelist (empty = all columns)
916
+ * - string `options.visible` is evaluated against the master-list scope
917
+ */
918
+ applyViewColumns(): Promise<void>;
919
+ /**
920
+ * Resolves column `options.visible` (boolean or expression) to a boolean for the current list scope.
921
+ */
922
+ private resolveColumnVisibleExpression;
914
923
  onColumnsOrderChanged(event: any): void;
915
924
  private mergeDisplayFieldWithColumn;
916
925
  private buildVirtualDisplayProperty;
@@ -2777,6 +2786,12 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
2777
2786
  protected selectedItems: _angular_core.WritableSignal<any[]>;
2778
2787
  protected toolbarNode: _angular_core.WritableSignal<AXPWidgetNode | null>;
2779
2788
  protected destroyed: Subject<void>;
2789
+ /** Invalidates in-flight filter/refresh work on remount, rapid page switches, or destroy. */
2790
+ private opGeneration;
2791
+ private isViewDestroyed;
2792
+ private initListTimeoutId;
2793
+ /** Unpatched data-list refresh (hits the grid). Prefer this over the scoped patch to avoid recursion. */
2794
+ private boundDataListRefresh;
2780
2795
  protected entitySource: _angular_core.Signal<any>;
2781
2796
  protected excludeColumns: _angular_core.Signal<string[]>;
2782
2797
  protected includeColumns: _angular_core.Signal<string[]>;
@@ -2805,6 +2820,7 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
2805
2820
  /**
2806
2821
  * Route `filters` apply only when the active details `page` matches this list's entity
2807
2822
  * (e.g. WorkOrder filters must not affect FailureRegister on the same asset layout).
2823
+ * page-list sidebar pages use `page-list-{module.entity}` as their page id.
2808
2824
  */
2809
2825
  private shouldApplyRouteFilters;
2810
2826
  /**
@@ -2812,17 +2828,33 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
2812
2828
  */
2813
2829
  private mergeToolbarFilters;
2814
2830
  private getMergedToolbarFilters;
2831
+ private beginOp;
2832
+ private isOpStale;
2833
+ private delay;
2815
2834
  /**
2816
2835
  * Applies merged route + parent-scope filters to the widget value and data source.
2817
2836
  */
2818
2837
  private applyMergedRouteFiltersToList;
2819
- /** Syncs toolbar filters to context and AXDataSource (retries until data-list is mounted). */
2838
+ /**
2839
+ * Syncs toolbar filters to context and AXDataSource (retries until data-list is mounted).
2840
+ * Stale generations (destroy / newer op) exit without touching the grid.
2841
+ */
2820
2842
  private reapplyScopedFiltersToDataSource;
2821
2843
  /**
2822
2844
  * Entity lists use `fetchDataMode: 'manual'`; after scoped filters reach the data source,
2823
- * the grid must be refreshed once (initial #effect may run before the data-list is ready).
2845
+ * the grid must be refreshed once. Retries until the data-table view child accepts refresh
2846
+ * so rapid relatedEntity page switches cannot leave the table on "no data loaded yet".
2824
2847
  */
2825
2848
  private triggerInitialLoadIfNeeded;
2849
+ /**
2850
+ * Calls the unpatched data-list refresh until the grid is ready or the op is stale.
2851
+ */
2852
+ private refreshWhenGridReady;
2853
+ /**
2854
+ * Prefer the bound original refresh (pre-patch). Falls back to an unpatched instance refresh.
2855
+ */
2856
+ private resolveDataListRefresh;
2857
+ private refreshWhenGridReadyWith;
2826
2858
  /**
2827
2859
  * Re-evaluates related-entity list filters from the live dialog form context (e.g. after create saves the main row id).
2828
2860
  */
@@ -2845,6 +2877,10 @@ declare class AXPEntityListWidgetViewComponent extends AXPValueWidgetComponent {
2845
2877
  * Refreshes the embedded data list (toolbar / workflow). In wizard mode, `refresh` is patched to re-apply scoped filters first.
2846
2878
  */
2847
2879
  private refreshGridWithParentScopedFilters;
2880
+ /**
2881
+ * Re-applies parent-scoped filters then refreshes the grid, ignoring stale overlapping calls.
2882
+ */
2883
+ private runScopedDataListRefresh;
2848
2884
  protected queries: undefined;
2849
2885
  /**
2850
2886
  * Validates that all required dependencies are available
@@ -1718,9 +1718,17 @@ declare class AXPSelectBoxWidgetEditComponent extends AXPDataListWidgetComponent
1718
1718
  /**
1719
1719
  * Bind resolved row object(s) when available so ax-select-box can render textField labels.
1720
1720
  * Falls back to primitive key(s) while selectedItems are still loading.
1721
+ * In filterMode, prefer stored `displayText` when byKey has not resolved a real label yet.
1721
1722
  * Label translation is handled by ax-select-box (`getDisplayText(item) | translate`).
1722
1723
  */
1723
1724
  protected selectBoxModel: _angular_core.Signal<any>;
1725
+ /** Reads `displayText` from filterMode payload `{ value, operation, displayText }`. */
1726
+ private getFilterDisplayText;
1727
+ /**
1728
+ * Ensures filterMode select shows a label: when selectedItems/byKey only have the raw key
1729
+ * (or are missing), synthesize/enrich the model with stored `displayText`.
1730
+ */
1731
+ private withFilterDisplayText;
1724
1732
  protected searchValue: _angular_core.WritableSignal<string | undefined>;
1725
1733
  private lastDataSource;
1726
1734
  private hasSeenDataSource;
@@ -2487,7 +2495,11 @@ declare class AXPDataListWidgetViewComponent extends AXPValueWidgetComponent<any
2487
2495
  [name: string]: unknown;
2488
2496
  })[];
2489
2497
  api(): AXPWidgetCoreElementAPI;
2490
- refresh(): void;
2498
+ /**
2499
+ * Returns true when the data-table view child accepted the refresh.
2500
+ * Callers must retry while this is false (grid may not be ready yet after remount).
2501
+ */
2502
+ refresh(): boolean;
2491
2503
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataListWidgetViewComponent, never>;
2492
2504
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDataListWidgetViewComponent, "axp-data-list-widget-view", never, {}, {}, never, never, true, never>;
2493
2505
  }