@acorex/connectivity 20.3.0-next.2 → 20.3.0-next.3

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.
@@ -28,8 +28,32 @@ class AXCQueryCategoryWithItemsQuery {
28
28
  ],
29
29
  },
30
30
  });
31
- const categories = await Promise.all(rootCategories.items.map((category) => this.buildCategoryTree(category)));
32
- return categories;
31
+ // Build the tree and prune empty categories (no children and no items)
32
+ const builtRoots = await Promise.all(rootCategories.items.map((category) => this.buildCategoryTree(category)));
33
+ const categories = builtRoots.filter((c) => Boolean(c));
34
+ // Aggregate all items across remaining categories
35
+ const allItems = [];
36
+ const collectItems = (nodes) => {
37
+ for (const node of nodes) {
38
+ if (node.items?.length) {
39
+ allItems.push(...node.items);
40
+ }
41
+ if (node.children?.length) {
42
+ collectItems(node.children);
43
+ }
44
+ }
45
+ };
46
+ collectItems(categories);
47
+ // Add synthetic 'All' node at the beginning
48
+ const allNode = {
49
+ id: 'all',
50
+ title: 'All',
51
+ childCount: 0,
52
+ items: allItems,
53
+ children: [],
54
+ categories: []
55
+ };
56
+ return [allNode, ...categories];
33
57
  }
34
58
  async buildCategoryTree(category) {
35
59
  const itemsResult = await this.metaDataService.query({
@@ -64,13 +88,19 @@ class AXCQueryCategoryWithItemsQuery {
64
88
  take: 1000,
65
89
  skip: 0,
66
90
  });
67
- const children = await Promise.all(childCategoriesResult.items.map((child) => this.buildCategoryTree(child)));
68
- return {
91
+ const builtChildren = await Promise.all(childCategoriesResult.items.map((child) => this.buildCategoryTree(child)));
92
+ const children = builtChildren.filter((c) => Boolean(c));
93
+ const node = {
69
94
  ...category,
70
95
  items: itemsResult.items,
71
96
  categories: children,
72
97
  children: children,
73
98
  };
99
+ // Prune node if it has no items and no children
100
+ if ((!node.items || node.items.length === 0) && (!node.children || node.children.length === 0)) {
101
+ return null;
102
+ }
103
+ return node;
74
104
  }
75
105
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
76
106
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.8", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, providedIn: 'root' }); }
@@ -83,4 +113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
83
113
  }] });
84
114
 
85
115
  export { AXCQueryCategoryWithItemsQuery };
86
- //# sourceMappingURL=acorex-connectivity-mock-category-with-items.query-DXt3OWKg.mjs.map
116
+ //# sourceMappingURL=acorex-connectivity-mock-category-with-items.query-DEY9R9q2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-category-with-items.query-DEY9R9q2.mjs","sources":["../tmp-esm2022/mock/lib/data-management/metadata/category-with-items.query.js"],"sourcesContent":["import { AXMMetaDataDefinitionService, RootConfig } from '@acorex/modules/data-management';\nimport { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXCQueryCategoryWithItemsQuery {\n constructor() {\n this.injector = inject(Injector);\n this.categoryEntityService = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl(`${RootConfig.module.name}.${RootConfig.entities.metaDataDefinition.name}Category`));\n this.metaDataService = inject(AXMMetaDataDefinitionService);\n }\n fetch() {\n return this.getAllWithItems();\n }\n async getAllWithItems() {\n const rootCategories = await this.categoryEntityService.query({\n take: 1000,\n skip: 0,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'parentId',\n operator: {\n type: 'isNull',\n },\n },\n ],\n },\n });\n // Build the tree and prune empty categories (no children and no items)\n const builtRoots = await Promise.all(rootCategories.items.map((category) => this.buildCategoryTree(category)));\n const categories = builtRoots.filter((c) => Boolean(c));\n // Aggregate all items across remaining categories\n const allItems = [];\n const collectItems = (nodes) => {\n for (const node of nodes) {\n if (node.items?.length) {\n allItems.push(...node.items);\n }\n if (node.children?.length) {\n collectItems(node.children);\n }\n }\n };\n collectItems(categories);\n // Add synthetic 'All' node at the beginning\n const allNode = {\n id: 'all',\n title: 'All',\n childCount: 0,\n items: allItems,\n children: [],\n categories: []\n };\n return [allNode, ...categories];\n }\n async buildCategoryTree(category) {\n const itemsResult = await this.metaDataService.query({\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: category.id,\n },\n ],\n },\n take: 1000,\n skip: 0,\n });\n const childCategoriesResult = await this.categoryEntityService.query({\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: category.id,\n },\n ],\n },\n take: 1000,\n skip: 0,\n });\n const builtChildren = await Promise.all(childCategoriesResult.items.map((child) => this.buildCategoryTree(child)));\n const children = builtChildren.filter((c) => Boolean(c));\n const node = {\n ...category,\n items: itemsResult.items,\n categories: children,\n children: children,\n };\n // Prune node if it has no items and no children\n if ((!node.items || node.items.length === 0) && (!node.children || node.children.length === 0)) {\n return null;\n }\n return node;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: AXCQueryCategoryWithItemsQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktd2l0aC1pdGVtcy5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29ubmVjdGl2aXR5L21vY2svc3JjL2xpYi9kYXRhLW1hbmFnZW1lbnQvbWV0YWRhdGEvY2F0ZWdvcnktd2l0aC1pdGVtcy5xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLcEYsTUFBTSxPQUFPLDhCQUE4QjtJQUgzQztRQUtZLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsMEJBQXFCLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHdCQUF3QixDQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDL0wsb0JBQWUsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztLQThHbEU7SUEzR0csS0FBSztRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZTtRQUN6QixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7WUFDMUQsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sRUFBRTtnQkFDSixLQUFLLEVBQUUsS0FBSztnQkFDWixP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cUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVILE1BQU0sSUFBSSxHQUEwRjtZQUNoRyxHQUFHLFFBQVE7WUFDWCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsVUFBVSxFQUFFLFFBQVE7WUFDcEIsUUFBUSxFQUFFLFFBQVE7U0FDckIsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0YsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7OEdBOUdRLDhCQUE4QjtrSEFBOUIsOEJBQThCLGNBRjNCLE1BQU07OzJGQUVULDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE1NZXRhRGF0YURlZmluaXRpb25FbnRpdHlNb2RlbCwgQVhNTWV0YURhdGFEZWZpbml0aW9uU2VydmljZSwgUm9vdENvbmZpZyB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9kYXRhLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlFbnRpdHlXaXRoSXRlbXMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFF1ZXJ5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFYQ1F1ZXJ5Q2F0ZWdvcnlXaXRoSXRlbXNRdWVyeSBpbXBsZW1lbnRzIEFYUFF1ZXJ5PHZvaWQsIEFYUENhdGVnb3J5RW50aXR5V2l0aEl0ZW1zPEFYTU1ldGFEYXRhRGVmaW5pdGlvbkVudGl0eU1vZGVsPltdPiB7XG5cbiAgICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIGNhdGVnb3J5RW50aXR5U2VydmljZSA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiBuZXcgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsPGFueSwgYW55PihgJHtSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke1Jvb3RDb25maWcuZW50aXRpZXMubWV0YURhdGFEZWZpbml0aW9uLm5hbWV9Q2F0ZWdvcnlgKSk7XG4gICAgcHJpdmF0ZSBtZXRhRGF0YVNlcnZpY2UgPSBpbmplY3QoQVhNTWV0YURhdGFEZWZpbml0aW9uU2VydmljZSk7XG5cblxuICAgIGZldGNoKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbFdpdGhJdGVtcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0QWxsV2l0aEl0ZW1zKCk6IFByb21pc2U8QVhQQ2F0ZWdvcnlFbnRpdHlXaXRoSXRlbXM8QVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWw+W10+IHtcbiAgICAgICAgY29uc3Qgcm9vdENhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmNhdGVnb3J5RW50aXR5U2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAncGFyZW50SWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaXNOdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEJ1aWxkIHRoZSB0cmVlIGFuZCBwcnVuZSBlbXB0eSBjYXRlZ29yaWVzIChubyBjaGlsZHJlbiBhbmQgbm8gaXRlbXMpXG4gICAgICAgIGNvbnN0IGJ1aWx0Um9vdHMgPSBhd2FpdCBQcm9taXNlLmFsbChyb290Q2F0ZWdvcmllcy5pdGVtcy5tYXAoKGNhdGVnb3J5KSA9PiB0aGlzLmJ1aWxkQ2F0ZWdvcnlUcmVlKGNhdGVnb3J5KSkpO1xuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYnVpbHRSb290cy5maWx0ZXIoKGMpOiBjIGlzIEFYUENhdGVnb3J5RW50aXR5V2l0aEl0ZW1zPEFYTU1ldGFEYXRhRGVmaW5pdGlvbkVudGl0eU1vZGVsPiA9PiBCb29sZWFuKGMpKTtcblxuICAgICAgICAvLyBBZ2dyZWdhdGUgYWxsIGl0ZW1zIGFjcm9zcyByZW1haW5pbmcgY2F0ZWdvcmllc1xuICAgICAgICBjb25zdCBhbGxJdGVtczogQVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBjb2xsZWN0SXRlbXMgPSAobm9kZXM6IEFYUENhdGVnb3J5RW50aXR5V2l0aEl0ZW1zPEFYTU1ldGFEYXRhRGVmaW5pdGlvbkVudGl0eU1vZGVsPltdKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbEl0ZW1zLnB1c2goLi4ubm9kZS5pdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdEl0ZW1zKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29sbGVjdEl0ZW1zKGNhdGVnb3JpZXMpO1xuXG4gICAgICAgIC8vIEFkZCBzeW50aGV0aWMgJ0FsbCcgbm9kZSBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgIGNvbnN0IGFsbE5vZGU6IEFYUENhdGVnb3J5RW50aXR5V2l0aEl0ZW1zPEFYTU1ldGFEYXRhRGVmaW5pdGlvbkVudGl0eU1vZGVsPiAmIHsgY2F0ZWdvcmllcz86IGFueVtdIH0gPSB7XG4gICAgICAgICAgICBpZDogJ2FsbCcsXG4gICAgICAgICAgICB0aXRsZTogJ0FsbCcsXG4gICAgICAgICAgICBjaGlsZENvdW50OiAwLFxuICAgICAgICAgICAgaXRlbXM6IGFsbEl0ZW1zLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogW11cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gW2FsbE5vZGUsIC4uLmNhdGVnb3JpZXNdO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRDYXRlZ29yeVRyZWUoY2F0ZWdvcnk6IGFueSk6IFByb21pc2U8QVhQQ2F0ZWdvcnlFbnRpdHlXaXRoSXRlbXM8QVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWw+IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBpdGVtc1Jlc3VsdCA9IGF3YWl0IHRoaXMubWV0YURhdGFTZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnY2F0ZWdvcnlJZHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29udGFpbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRha2U6IDEwMDAsXG4gICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjaGlsZENhdGVnb3JpZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmNhdGVnb3J5RW50aXR5U2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3BhcmVudElkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2VxdWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkuaWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYnVpbHRDaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKGNoaWxkQ2F0ZWdvcmllc1Jlc3VsdC5pdGVtcy5tYXAoKGNoaWxkKSA9PiB0aGlzLmJ1aWxkQ2F0ZWdvcnlUcmVlKGNoaWxkKSkpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGJ1aWx0Q2hpbGRyZW4uZmlsdGVyKChjKTogYyBpcyBBWFBDYXRlZ29yeUVudGl0eVdpdGhJdGVtczxBWE1NZXRhRGF0YURlZmluaXRpb25FbnRpdHlNb2RlbD4gPT4gQm9vbGVhbihjKSk7XG5cbiAgICAgICAgY29uc3Qgbm9kZTogQVhQQ2F0ZWdvcnlFbnRpdHlXaXRoSXRlbXM8QVhNTWV0YURhdGFEZWZpbml0aW9uRW50aXR5TW9kZWw+ICYgeyBjYXRlZ29yaWVzPzogYW55W10gfSA9IHtcbiAgICAgICAgICAgIC4uLmNhdGVnb3J5LFxuICAgICAgICAgICAgaXRlbXM6IGl0ZW1zUmVzdWx0Lml0ZW1zLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogY2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHJ1bmUgbm9kZSBpZiBpdCBoYXMgbm8gaXRlbXMgYW5kIG5vIGNoaWxkcmVuXG4gICAgICAgIGlmICgoIW5vZGUuaXRlbXMgfHwgbm9kZS5pdGVtcy5sZW5ndGggPT09IDApICYmICghbm9kZS5jaGlsZHJlbiB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG5cblxufSJdfQ=="],"names":[],"mappings":"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"}
@@ -248,7 +248,7 @@ class MockApplicationLoader {
248
248
  const demo_app = {
249
249
  id: '1',
250
250
  name: 'demo',
251
- title: 'DEMO Application',
251
+ title: 'Safetyminder Application',
252
252
  version: '1.0.0',
253
253
  editionName: 'Standard',
254
254
  };
@@ -304,21 +304,10 @@ class MockPermissionLoader {
304
304
  AXMPermissionsKeys$1.Issue.MyReportedIssues.Management,
305
305
  ];
306
306
  this.adminPermissions = [...this.userPermissions, ...['admin', 'demo.admin.settings']];
307
- this.rootPermissions = [
308
- ...this.adminPermissions,
309
- ...[
310
- 'platform',
311
- 'platform.reports',
312
- 'document-management:manage',
313
- 'document-management:document-type:manage',
314
- 'document-management:driver:manage',
315
- ],
316
- AXMPermissionsKeys$1.Issue.ReportedIssues.Management,
317
- ];
318
307
  }
319
308
  getList(context) {
320
309
  if (context.user?.name == 'root') {
321
- return of(this.rootPermissions);
310
+ return of();
322
311
  }
323
312
  else if (context.user?.name == 'admin') {
324
313
  return of(this.adminPermissions);
@@ -339,12 +328,12 @@ class MockTenantLoader {
339
328
  const acorex_tenant = {
340
329
  id: '99',
341
330
  name: 'acorex-tenant',
342
- title: 'ACoreX Platform Tenant',
331
+ title: 'Platform Tenant',
343
332
  };
344
333
  const demo_tenant = {
345
334
  id: '1',
346
335
  name: 'demo-tenant',
347
- title: 'DEMO Tenant',
336
+ title: 'Safetyminder Company',
348
337
  };
349
338
  // return of([demo_tenant]).pipe(delay(500));
350
339
  // return of([acorex_tenant]).pipe(delay(500));
@@ -4508,7 +4497,7 @@ class AXCDataManagementMockModule {
4508
4497
  provideQuerySetups([
4509
4498
  {
4510
4499
  key: 'category-with-items',
4511
- loader: () => import('./acorex-connectivity-mock-category-with-items.query-DXt3OWKg.mjs').then(m => m.AXCQueryCategoryWithItemsQuery),
4500
+ loader: () => import('./acorex-connectivity-mock-category-with-items.query-DEY9R9q2.mjs').then(m => m.AXCQueryCategoryWithItemsQuery),
4512
4501
  }
4513
4502
  ])
4514
4503
  ] }); }
@@ -4533,7 +4522,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.8", ngImpor
4533
4522
  provideQuerySetups([
4534
4523
  {
4535
4524
  key: 'category-with-items',
4536
- loader: () => import('./acorex-connectivity-mock-category-with-items.query-DXt3OWKg.mjs').then(m => m.AXCQueryCategoryWithItemsQuery),
4525
+ loader: () => import('./acorex-connectivity-mock-category-with-items.query-DEY9R9q2.mjs').then(m => m.AXCQueryCategoryWithItemsQuery),
4537
4526
  }
4538
4527
  ])
4539
4528
  ],
@@ -32950,6 +32939,14 @@ const createFileCastMiddleware = {
32950
32939
  return undefined;
32951
32940
  }
32952
32941
  })();
32942
+ const folderService = (() => {
32943
+ try {
32944
+ return inject(AXMFolderService);
32945
+ }
32946
+ catch {
32947
+ return undefined;
32948
+ }
32949
+ })();
32953
32950
  // Helper Functions
32954
32951
  const isFileListItem = (obj) => {
32955
32952
  // Must have name as string
@@ -33067,11 +33064,9 @@ const createFileCastMiddleware = {
33067
33064
  return { id: docId, kind: 'document' };
33068
33065
  }
33069
33066
  catch (error) {
33070
- console.warn(`[file-cast] ⚠️ Failed to create document for existing file, falling back to file`, { cleanFileId, error });
33071
33067
  }
33072
33068
  }
33073
33069
  else {
33074
- console.warn(`[file-cast] ⚠️ Document service unavailable; returning file reference`, { cleanFileId });
33075
33070
  }
33076
33071
  }
33077
33072
  return { id: cleanFileId, kind: 'file' };
@@ -33166,13 +33161,69 @@ const createFileCastMiddleware = {
33166
33161
  typeof m.name === 'string' && typeof m.title === 'string' && typeof m.value === 'string');
33167
33162
  };
33168
33163
  const ensureDocumentRecord = async (svc, payload) => {
33169
- // Try to insert a minimal document record. Other fields are optional in mock.
33164
+ // Resolve or create folder hierarchy: <Entity>/<Record Title|Name>
33165
+ let parentId;
33166
+ try {
33167
+ if (folderService) {
33168
+ const findFolderByName = async (name, parent) => {
33169
+ const filters = [
33170
+ { field: 'name', operator: { type: 'equal' }, value: name },
33171
+ ];
33172
+ if (parent) {
33173
+ filters.push({ field: 'parentId', operator: { type: 'equal' }, value: parent });
33174
+ }
33175
+ else {
33176
+ filters.push({ field: 'parentId', operator: { type: 'isnull' } });
33177
+ }
33178
+ const result = await folderService.query({
33179
+ skip: 0,
33180
+ take: 1,
33181
+ filter: { logic: 'and', filters },
33182
+ });
33183
+ return result?.items?.[0] ?? null;
33184
+ };
33185
+ const ensureFolder = async (name, parent) => {
33186
+ const exists = await findFolderByName(name, parent);
33187
+ if (exists?.id)
33188
+ return exists.id;
33189
+ const createPayload = {
33190
+ name,
33191
+ color: '#FFFFFF',
33192
+ size: 0,
33193
+ parentId: parent,
33194
+ inherit: 'Extends',
33195
+ };
33196
+ const newId = await folderService.insertOne(createPayload);
33197
+ return newId;
33198
+ };
33199
+ // Find a root (folder with no parent)
33200
+ const rootQuery = await folderService.query({
33201
+ skip: 0,
33202
+ take: 1,
33203
+ filter: { logic: 'and', filters: [{ field: 'parentId', operator: { type: 'isnull' } }] },
33204
+ });
33205
+ const root = rootQuery?.items?.[0];
33206
+ if (root?.id) {
33207
+ const entityFullName = ctx.entityName || 'Entity';
33208
+ const entityNameOnly = entityFullName.split('.').pop() || entityFullName;
33209
+ const recordFolderName = (ctx?.data?.title || ctx?.data?.name || payload.name || 'Record').toString();
33210
+ const entityFolderId = await ensureFolder(entityNameOnly, root.id);
33211
+ parentId = await ensureFolder(recordFolderName, entityFolderId);
33212
+ }
33213
+ }
33214
+ }
33215
+ catch (e) {
33216
+ // Fallback: if anything fails, we will try to insert without parentId; mock may reject
33217
+ console.warn('[file-cast] ⚠️ Failed to ensure folder path for document, inserting without parentId');
33218
+ }
33219
+ // Insert document record with resolved parent folder if available
33170
33220
  const id = await svc.insertOne({
33171
33221
  fileId: addFilePrefix(payload.fileId),
33172
33222
  name: payload.name,
33173
33223
  title: payload.title,
33174
33224
  size: payload.size,
33175
33225
  meta: payload.meta,
33226
+ parentId,
33176
33227
  });
33177
33228
  return id;
33178
33229
  };