@en-solutions/tgm-client-sdk 1.8.0 → 1.8.1
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/esm2022/lib/models/api/cms.models.mjs +1 -1
- package/esm2022/lib/services/api/cms-menu.helper.mjs +69 -57
- package/fesm2022/en-solutions-tgm-client-sdk.mjs +68 -56
- package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -1
- package/lib/models/api/cms.models.d.ts +4 -0
- package/lib/services/api/cms-menu.helper.d.ts +36 -39
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL2FwaS9jbXMubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENvbnRlbnRUeXBlU2NoZW1hIHtcbiAga2luZD86IHN0cmluZztcbiAgY29sbGVjdGlvbk5hbWU6IHN0cmluZztcbiAgaW5mbzoge1xuICAgIHNpbmd1bGFyTmFtZTogc3RyaW5nO1xuICAgIHBsdXJhbE5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIC8qKiBUYXJnZXQgbWVudSBzZWN0aW9uIGlkIChlLmcuLCBcInRnbS1vbVwiLCBcImFkbWluaXN0cmF0aW9uXCIsIFwidGdtLWludmVudG9yeS1tYW5hZ2VtZW50XCIpICovXG4gICAgbWVudVNlY3Rpb24/OiBzdHJpbmc7XG4gICAgLyoqIEljb24gbmFtZSBmb3Igc2lkZWJhciB0YWIgKGZlYXRoZXIvbHVjaWRlLCBlLmcuLCBcInNoaWVsZFwiLCBcImNsaXBib2FyZFwiKSAqL1xuICAgIG1lbnVJY29uPzogc3RyaW5nO1xuICB9O1xuICBvcHRpb25zPzogeyBkcmFmdEFuZFB1Ymxpc2g/OiBib29sZWFuIH07XG4gIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIEZpZWxkRGVmaW5pdGlvbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGREZWZpbml0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnc3RyaW5nJyB8ICd0ZXh0JyB8ICdyaWNodGV4dCcgfCAnaW50ZWdlcicgfCAnYmlnaW50ZWdlcicgfCAnZmxvYXQnIHwgJ2RlY2ltYWwnIHxcbiAgICAgICAgJ2Jvb2xlYW4nIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ2RhdGV0aW1lJyB8ICdqc29uJyB8ICdlbnVtZXJhdGlvbicgfCAnZW1haWwnIHxcbiAgICAgICAgJ21lZGlhJyB8ICdyZWxhdGlvbic7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgdW5pcXVlPzogYm9vbGVhbjtcbiAgcHJpdmF0ZT86IGJvb2xlYW47XG4gIGRlZmF1bHQ/OiBhbnk7XG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcmVnZXg/OiBzdHJpbmc7XG4gIGVudW0/OiBzdHJpbmdbXTtcbiAgcmVsYXRpb24/OiAnb25lVG9PbmUnIHwgJ29uZVRvTWFueScgfCAnbWFueVRvT25lJyB8ICdtYW55VG9NYW55JztcbiAgdGFyZ2V0Pzogc3RyaW5nO1xuICBhbGxvd2VkVHlwZXM/OiBzdHJpbmdbXTtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENtc1NhdmVkVmlldyB7XG4gIGlkPzogbnVtYmVyO1xuICBjb2xsZWN0aW9uTmFtZT86IHN0cmluZztcbiAgdXNlcklkPzogbnVtYmVyO1xuICB2aWV3TmFtZTogc3RyaW5nO1xuICBpc0RlZmF1bHQ/OiBib29sZWFuO1xuICBmaWx0ZXJDb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBjb2x1bW5Db25maWc/OiBzdHJpbmdbXTtcbiAgc29ydENvbmZpZz86IHsgZmllbGQ6IHN0cmluZzsgb3JkZXI6ICdBU0MnIHwgJ0RFU0MnIH07XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbiAgdXBkYXRlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENtc1ZhbGlkYXRpb25SdWxlIHtcbiAgaWQ/OiBudW1iZXI7XG4gIGNvbGxlY3Rpb25OYW1lPzogc3RyaW5nO1xuICBydWxlTmFtZTogc3RyaW5nO1xuICBydWxlVHlwZTogJ1JFUVVJUkVEX0lGJyB8ICdDT01QQVJJU09OJyB8ICdSRUdFWCcgfCAnQ1VTVE9NX0VYUFJFU1NJT04nO1xuICBydWxlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBkaXNwbGF5T3JkZXI/OiBudW1iZXI7XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbiAgdXBkYXRlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENtc1JlY29yZFR5cGUge1xuICBpZD86IG51bWJlcjtcbiAgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7XG4gIHR5cGVOYW1lOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBmaWVsZE92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbiAgdXBkYXRlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENtc1BhZ2VMYXlvdXQge1xuICBpZD86IG51bWJlcjtcbiAgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7XG4gIGxheW91dE5hbWU6IHN0cmluZztcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgcmVjb3JkVHlwZUlkPzogbnVtYmVyO1xuICBzZWN0aW9uczogQ21zTGF5b3V0U2VjdGlvbltdO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbXNMYXlvdXRTZWN0aW9uIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgY29sdW1uczogbnVtYmVyO1xuICBmaWVsZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENtc0Zvcm11bGFGaWVsZCB7XG4gIGlkPzogbnVtYmVyO1xuICBjb2xsZWN0aW9uTmFtZT86IHN0cmluZztcbiAgZmllbGROYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGZvcm11bGE6IHN0cmluZztcbiAgcmVzdWx0VHlwZTogJ05VTUJFUicgfCAnU1RSSU5HJyB8ICdEQVRFJyB8ICdCT09MRUFOJztcbiAgZGlzcGxheU9yZGVyPzogbnVtYmVyO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbXNXb3JrZmxvd1J1bGUge1xuICBpZD86IG51bWJlcjtcbiAgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7XG4gIHJ1bGVOYW1lOiBzdHJpbmc7XG4gIHRyaWdnZXJFdmVudDogJ09OX0NSRUFURScgfCAnT05fVVBEQVRFJyB8ICdPTl9DUkVBVEVfT1JfVVBEQVRFJztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBldmFsdWF0aW9uT3JkZXI/OiBudW1iZXI7XG4gIGNvbmRpdGlvbkNvbmZpZz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGFjdGlvbnM6IENtc1dvcmtmbG93QWN0aW9uW107XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbXNXb3JrZmxvd0FjdGlvbiB7XG4gIHR5cGU6ICdGSUVMRF9VUERBVEUnIHwgJ05PVElGSUNBVElPTicgfCAnTE9HJztcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENtc0FwcHJvdmFsUHJvY2VzcyB7XG4gIGlkPzogbnVtYmVyO1xuICBjb2xsZWN0aW9uTmFtZT86IHN0cmluZztcbiAgcHJvY2Vzc05hbWU6IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICB0cmlnZ2VyRmllbGQ6IHN0cmluZztcbiAgdHJpZ2dlclZhbHVlOiBzdHJpbmc7XG4gIGZpbmFsQXBwcm92ZVZhbHVlPzogc3RyaW5nO1xuICBmaW5hbFJlamVjdFZhbHVlPzogc3RyaW5nO1xuICBzdGVwczogQ21zQXBwcm92YWxTdGVwW107XG4gIG5vdGlmeU9uU3VibWl0PzogYm9vbGVhbjtcbiAgbm90aWZ5T25BcHByb3ZlPzogYm9vbGVhbjtcbiAgbm90aWZ5T25SZWplY3Q/OiBib29sZWFuO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ21zQXBwcm92YWxTdGVwIHtcbiAgb3JkZXI6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBhcHByb3ZlckZpZWxkPzogc3RyaW5nO1xuICBhcHByb3ZlclJvbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ21zQXBwcm92YWxJbnN0YW5jZSB7XG4gIGlkPzogbnVtYmVyO1xuICBwcm9jZXNzSWQ6IG51bWJlcjtcbiAgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7XG4gIHJlY29yZElkOiBudW1iZXI7XG4gIGN1cnJlbnRTdGVwPzogbnVtYmVyO1xuICBzdGF0dXM/OiAnUEVORElORycgfCAnQVBQUk9WRUQnIHwgJ1JFSkVDVEVEJyB8ICdDQU5DRUxMRUQnO1xuICBzdWJtaXR0ZWRCeT86IG51bWJlcjtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBjb21tZW50cz86IHN0cmluZztcbiAgc3RlcEhpc3Rvcnk/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbXNSb2xsdXBSZXN1bHQge1xuICByZXN1bHQ6IGFueTtcbiAgZnVuY3Rpb246IHN0cmluZztcbiAgdGFyZ2V0Q29sbGVjdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENtc0RhdGFSZXNwb25zZTxUID0gYW55PiB7XG4gIGRhdGE6IFQ7XG4gIG1ldGE/OiB7XG4gICAgcGFnaW5hdGlvbj86IHtcbiAgICAgIHBhZ2U6IG51bWJlcjtcbiAgICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgICBwYWdlQ291bnQ6IG51bWJlcjtcbiAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,79 +1,78 @@
|
|
|
1
1
|
import { Injectable, inject } from '@angular/core';
|
|
2
|
-
import { map } from 'rxjs';
|
|
2
|
+
import { map, shareReplay } from 'rxjs';
|
|
3
3
|
import { CmsContentTypeService } from './cms.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* Frontend devs can inject these into the sidebar dynamically.
|
|
6
|
+
* Transforms CMS content types into sidebar menu items.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
8
|
+
* Each content type can specify where it appears via info.menuSection:
|
|
9
|
+
* - "tgm-om" → TGM O&M section
|
|
10
|
+
* - "tgm-economics" → TGM Economics section
|
|
11
|
+
* - "tgm-inventory-management" → Inventory section
|
|
12
|
+
* - "administration" (default) → Administration → Custom Objects
|
|
13
|
+
* - Any other menu section id from menu.ts
|
|
10
14
|
*
|
|
11
|
-
*
|
|
12
|
-
* // In AppComponent or a module initializer:
|
|
13
|
-
* cmsMenuHelper.getMenuItems('administration/cms').subscribe(items => {
|
|
14
|
-
* // items is a CoreMenuItem[] array ready to inject into the sidebar
|
|
15
|
-
* const adminSection = menu.find(m => m.id === 'administration');
|
|
16
|
-
* const cmsGroup = {
|
|
17
|
-
* id: 'custom-objects',
|
|
18
|
-
* type: 'section' as const,
|
|
19
|
-
* title: 'Custom Objects',
|
|
20
|
-
* icon: 'layers',
|
|
21
|
-
* role: [Role['Administration.Read']],
|
|
22
|
-
* children: items
|
|
23
|
-
* };
|
|
24
|
-
* const moreIdx = adminSection.children.findIndex(c => c.id === 'more');
|
|
25
|
-
* adminSection.children.splice(moreIdx, 0, cmsGroup);
|
|
26
|
-
* });
|
|
27
|
-
* ```
|
|
15
|
+
* Usage in AppComponent.initializeMenu():
|
|
28
16
|
*
|
|
29
|
-
* Route setup in administraton.module.ts:
|
|
30
17
|
* ```typescript
|
|
31
|
-
* {
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
18
|
+
* this.cmsMenuHelper.getMenuItemsBySection('cms').subscribe(grouped => {
|
|
19
|
+
* for (const [sectionId, items] of Object.entries(grouped)) {
|
|
20
|
+
* const section = menu.find(m => m.id === sectionId);
|
|
21
|
+
* if (section?.children) {
|
|
22
|
+
* section.children.push(...items);
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* });
|
|
36
26
|
* ```
|
|
37
27
|
*/
|
|
38
28
|
export class CmsMenuHelper {
|
|
39
29
|
contentTypeService = inject(CmsContentTypeService);
|
|
30
|
+
/** Cached content types — shared across subscribers, auto-refreshes on invalidate() */
|
|
31
|
+
_cache$ = null;
|
|
32
|
+
getContentTypes() {
|
|
33
|
+
if (!this._cache$) {
|
|
34
|
+
this._cache$ = this.getContentTypes().pipe(shareReplay({ bufferSize: 1, refCount: false }));
|
|
35
|
+
}
|
|
36
|
+
return this._cache$;
|
|
37
|
+
}
|
|
38
|
+
/** Invalidate the cache — call after creating/updating/deleting a content type */
|
|
39
|
+
invalidate() {
|
|
40
|
+
this._cache$ = null;
|
|
41
|
+
}
|
|
40
42
|
/**
|
|
41
|
-
* Fetch all
|
|
43
|
+
* Fetch all content types and return menu items grouped by menuSection.
|
|
44
|
+
* Each key is a menu section id (e.g., "tgm-om", "administration").
|
|
45
|
+
* Items without menuSection default to "administration".
|
|
42
46
|
*
|
|
43
|
-
* @param baseUrl -
|
|
44
|
-
* @param defaultIcon - Default icon
|
|
45
|
-
* @returns Observable of menu items array
|
|
47
|
+
* @param baseUrl - Route base path for CMS pages
|
|
48
|
+
* @param defaultIcon - Default icon when menuIcon not set
|
|
46
49
|
*/
|
|
47
|
-
|
|
48
|
-
return this.
|
|
50
|
+
getMenuItemsBySection(baseUrl = 'cms', defaultIcon = 'database') {
|
|
51
|
+
return this.getContentTypes().pipe(map((contentTypes) => {
|
|
52
|
+
const grouped = {};
|
|
53
|
+
for (const ct of contentTypes) {
|
|
54
|
+
const section = ct.info?.menuSection || 'administration';
|
|
55
|
+
const item = this.toMenuItem(ct, baseUrl, defaultIcon);
|
|
56
|
+
if (!grouped[section])
|
|
57
|
+
grouped[section] = [];
|
|
58
|
+
grouped[section].push(item);
|
|
59
|
+
}
|
|
60
|
+
return grouped;
|
|
61
|
+
}));
|
|
49
62
|
}
|
|
50
63
|
/**
|
|
51
|
-
*
|
|
64
|
+
* Fetch all content types as a flat list of menu items.
|
|
65
|
+
* Use getMenuItemsBySection() instead if you need placement control.
|
|
52
66
|
*/
|
|
53
|
-
|
|
54
|
-
return
|
|
55
|
-
id: `cms-${ct.collectionName}`,
|
|
56
|
-
title: ct.info?.displayName || ct.collectionName,
|
|
57
|
-
type: 'item',
|
|
58
|
-
icon: defaultIcon,
|
|
59
|
-
url: `${baseUrl}/${ct.collectionName}`,
|
|
60
|
-
// These match CoreMenuItem from tgm-manager-ui
|
|
61
|
-
availableOnMobileNative: false,
|
|
62
|
-
mobileOnly: false,
|
|
63
|
-
badge: ct.options?.draftAndPublish
|
|
64
|
-
? { title: 'D/P', classes: 'badge-light-primary' }
|
|
65
|
-
: undefined,
|
|
66
|
-
};
|
|
67
|
+
getMenuItems(baseUrl = 'cms', defaultIcon = 'database') {
|
|
68
|
+
return this.getContentTypes().pipe(map((contentTypes) => contentTypes.map(ct => this.toMenuItem(ct, baseUrl, defaultIcon))));
|
|
67
69
|
}
|
|
68
70
|
/**
|
|
69
|
-
* Build a
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* @param baseUrl - Route base path
|
|
73
|
-
* @param roles - Required roles to see this section
|
|
71
|
+
* Build a "Custom Objects" section for items that target "administration".
|
|
72
|
+
* Items targeting other sections are excluded — use getMenuItemsBySection() for those.
|
|
74
73
|
*/
|
|
75
|
-
getMenuSection(baseUrl = '
|
|
76
|
-
return this.
|
|
74
|
+
getMenuSection(baseUrl = 'cms', roles = ['Administration.Read']) {
|
|
75
|
+
return this.getMenuItemsBySection(baseUrl).pipe(map(grouped => ({
|
|
77
76
|
id: 'custom-objects',
|
|
78
77
|
type: 'section',
|
|
79
78
|
title: 'Custom Objects',
|
|
@@ -82,9 +81,22 @@ export class CmsMenuHelper {
|
|
|
82
81
|
role: roles,
|
|
83
82
|
availableOnMobileNative: false,
|
|
84
83
|
mobileOnly: false,
|
|
85
|
-
children:
|
|
84
|
+
children: grouped['administration'] || [],
|
|
86
85
|
})));
|
|
87
86
|
}
|
|
87
|
+
toMenuItem(ct, baseUrl, defaultIcon) {
|
|
88
|
+
return {
|
|
89
|
+
id: `cms-${ct.collectionName}`,
|
|
90
|
+
title: ct.info?.displayName || ct.collectionName,
|
|
91
|
+
type: 'item',
|
|
92
|
+
icon: ct.info?.menuIcon || defaultIcon,
|
|
93
|
+
url: `${baseUrl}/${ct.collectionName}`,
|
|
94
|
+
availableOnMobileNative: false,
|
|
95
|
+
mobileOnly: false,
|
|
96
|
+
// Store the target section for grouping
|
|
97
|
+
_menuSection: ct.info?.menuSection || 'administration',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
88
100
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CmsMenuHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
89
101
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CmsMenuHelper, providedIn: 'root' });
|
|
90
102
|
}
|
|
@@ -92,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
92
104
|
type: Injectable,
|
|
93
105
|
args: [{ providedIn: 'root' }]
|
|
94
106
|
}] });
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLW1lbnUuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hcGkvY21zLW1lbnUuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQUVoQixrQkFBa0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUUzRDs7Ozs7O09BTUc7SUFDSCxZQUFZLENBQUMsT0FBTyxHQUFHLG9CQUFvQixFQUFFLFdBQVcsR0FBRyxVQUFVO1FBQ25FLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FDMUMsR0FBRyxDQUFDLENBQUMsWUFBaUMsRUFBRSxFQUFFLENBQ3hDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FDbEUsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVSxDQUFDLEVBQXFCLEVBQUUsT0FBZSxFQUFFLFdBQW1CO1FBQzVFLE9BQU87WUFDTCxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFO1lBQzlCLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUMsY0FBYztZQUNoRCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxXQUFXO1lBQ2pCLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFO1lBQ3RDLCtDQUErQztZQUMvQyx1QkFBdUIsRUFBRSxLQUFLO1lBQzlCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLGVBQWU7Z0JBQ2hDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFO2dCQUNsRCxDQUFDLENBQUMsU0FBUztTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUNaLE9BQU8sR0FBRyxvQkFBb0IsRUFDOUIsUUFBa0IsQ0FBQyxxQkFBcUIsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1osRUFBRSxFQUFFLGdCQUFnQjtZQUNwQixJQUFJLEVBQUUsU0FBa0I7WUFDeEIsS0FBSyxFQUFFLGdCQUFnQjtZQUN2QixTQUFTLEVBQUUsb0NBQW9DO1lBQy9DLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLEtBQUs7WUFDWCx1QkFBdUIsRUFBRSxLQUFLO1lBQzlCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDSixDQUFDO3dHQTlEVSxhQUFhOzRHQUFiLGFBQWEsY0FEQSxNQUFNOzs0RkFDbkIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ21zQ29udGVudFR5cGVTZXJ2aWNlIH0gZnJvbSAnLi9jbXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50VHlwZVNjaGVtYSB9IGZyb20gJy4uLy4uL21vZGVscy9hcGkvY21zLm1vZGVscyc7XG5cbi8qKlxuICogTWVudSBpdGVtIHN0cnVjdHVyZSBtYXRjaGluZyB0Z20tbWFuYWdlci11aSdzIENvcmVNZW51SXRlbSBpbnRlcmZhY2UuXG4gKiBGcm9udGVuZCBkZXZzIGNhbiBpbmplY3QgdGhlc2UgaW50byB0aGUgc2lkZWJhciBkeW5hbWljYWxseS5cbiAqXG4gKiBVc2FnZSBpbiB0Z20tbWFuYWdlci11aTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbiBBcHBDb21wb25lbnQgb3IgYSBtb2R1bGUgaW5pdGlhbGl6ZXI6XG4gKiBjbXNNZW51SGVscGVyLmdldE1lbnVJdGVtcygnYWRtaW5pc3RyYXRpb24vY21zJykuc3Vic2NyaWJlKGl0ZW1zID0+IHtcbiAqICAgLy8gaXRlbXMgaXMgYSBDb3JlTWVudUl0ZW1bXSBhcnJheSByZWFkeSB0byBpbmplY3QgaW50byB0aGUgc2lkZWJhclxuICogICBjb25zdCBhZG1pblNlY3Rpb24gPSBtZW51LmZpbmQobSA9PiBtLmlkID09PSAnYWRtaW5pc3RyYXRpb24nKTtcbiAqICAgY29uc3QgY21zR3JvdXAgPSB7XG4gKiAgICAgaWQ6ICdjdXN0b20tb2JqZWN0cycsXG4gKiAgICAgdHlwZTogJ3NlY3Rpb24nIGFzIGNvbnN0LFxuICogICAgIHRpdGxlOiAnQ3VzdG9tIE9iamVjdHMnLFxuICogICAgIGljb246ICdsYXllcnMnLFxuICogICAgIHJvbGU6IFtSb2xlWydBZG1pbmlzdHJhdGlvbi5SZWFkJ11dLFxuICogICAgIGNoaWxkcmVuOiBpdGVtc1xuICogICB9O1xuICogICBjb25zdCBtb3JlSWR4ID0gYWRtaW5TZWN0aW9uLmNoaWxkcmVuLmZpbmRJbmRleChjID0+IGMuaWQgPT09ICdtb3JlJyk7XG4gKiAgIGFkbWluU2VjdGlvbi5jaGlsZHJlbi5zcGxpY2UobW9yZUlkeCwgMCwgY21zR3JvdXApO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBSb3V0ZSBzZXR1cCBpbiBhZG1pbmlzdHJhdG9uLm1vZHVsZS50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHtcbiAqICAgcGF0aDogJ2Ntcy86Y29sbGVjdGlvbk5hbWUnLFxuICogICBsb2FkQ2hpbGRyZW46ICgpID0+IGltcG9ydCgnLi9jbXMvY21zLm1vZHVsZScpLnRoZW4obSA9PiBtLkNtc01vZHVsZSksXG4gKiAgIGNhbkFjdGl2YXRlOiBbQXV0aEd1YXJkXVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ21zTWVudUhlbHBlciB7XG5cbiAgcHJpdmF0ZSBjb250ZW50VHlwZVNlcnZpY2UgPSBpbmplY3QoQ21zQ29udGVudFR5cGVTZXJ2aWNlKTtcblxuICAvKipcbiAgICogRmV0Y2ggYWxsIGFjdGl2ZSBjb250ZW50IHR5cGVzIGFuZCB0cmFuc2Zvcm0gdGhlbSBpbnRvIG1lbnUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBiYXNlVXJsIC0gVGhlIGJhc2Ugcm91dGUgcGF0aCAoZS5nLiwgJ2FkbWluaXN0cmF0aW9uL2NtcycpXG4gICAqIEBwYXJhbSBkZWZhdWx0SWNvbiAtIERlZmF1bHQgaWNvbiBmb3IgaXRlbXMgd2l0aG91dCBhIHNwZWNpZmljIG9uZSAoZGVmYXVsdDogJ2RhdGFiYXNlJylcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBtZW51IGl0ZW1zIGFycmF5XG4gICAqL1xuICBnZXRNZW51SXRlbXMoYmFzZVVybCA9ICdhZG1pbmlzdHJhdGlvbi9jbXMnLCBkZWZhdWx0SWNvbiA9ICdkYXRhYmFzZScpOiBPYnNlcnZhYmxlPENtc01lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50VHlwZVNlcnZpY2UuZ2V0QWxsKCkucGlwZShcbiAgICAgIG1hcCgoY29udGVudFR5cGVzOiBDb250ZW50VHlwZVNjaGVtYVtdKSA9PlxuICAgICAgICBjb250ZW50VHlwZXMubWFwKGN0ID0+IHRoaXMudG9NZW51SXRlbShjdCwgYmFzZVVybCwgZGVmYXVsdEljb24pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgc2luZ2xlIGNvbnRlbnQgdHlwZSBpbnRvIGEgbWVudSBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSB0b01lbnVJdGVtKGN0OiBDb250ZW50VHlwZVNjaGVtYSwgYmFzZVVybDogc3RyaW5nLCBkZWZhdWx0SWNvbjogc3RyaW5nKTogQ21zTWVudUl0ZW0ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYGNtcy0ke2N0LmNvbGxlY3Rpb25OYW1lfWAsXG4gICAgICB0aXRsZTogY3QuaW5mbz8uZGlzcGxheU5hbWUgfHwgY3QuY29sbGVjdGlvbk5hbWUsXG4gICAgICB0eXBlOiAnaXRlbScsXG4gICAgICBpY29uOiBkZWZhdWx0SWNvbixcbiAgICAgIHVybDogYCR7YmFzZVVybH0vJHtjdC5jb2xsZWN0aW9uTmFtZX1gLFxuICAgICAgLy8gVGhlc2UgbWF0Y2ggQ29yZU1lbnVJdGVtIGZyb20gdGdtLW1hbmFnZXItdWlcbiAgICAgIGF2YWlsYWJsZU9uTW9iaWxlTmF0aXZlOiBmYWxzZSxcbiAgICAgIG1vYmlsZU9ubHk6IGZhbHNlLFxuICAgICAgYmFkZ2U6IGN0Lm9wdGlvbnM/LmRyYWZ0QW5kUHVibGlzaFxuICAgICAgICA/IHsgdGl0bGU6ICdEL1AnLCBjbGFzc2VzOiAnYmFkZ2UtbGlnaHQtcHJpbWFyeScgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY29tcGxldGUgXCJDdXN0b20gT2JqZWN0c1wiIGNvbGxhcHNpYmxlIG1lbnUgc2VjdGlvbi5cbiAgICogUmVhZHkgdG8gaW5qZWN0IGRpcmVjdGx5IGludG8gdGhlIHNpZGViYXIgbWVudSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIGJhc2VVcmwgLSBSb3V0ZSBiYXNlIHBhdGhcbiAgICogQHBhcmFtIHJvbGVzIC0gUmVxdWlyZWQgcm9sZXMgdG8gc2VlIHRoaXMgc2VjdGlvblxuICAgKi9cbiAgZ2V0TWVudVNlY3Rpb24oXG4gICAgYmFzZVVybCA9ICdhZG1pbmlzdHJhdGlvbi9jbXMnLFxuICAgIHJvbGVzOiBzdHJpbmdbXSA9IFsnQWRtaW5pc3RyYXRpb24uUmVhZCddXG4gICk6IE9ic2VydmFibGU8Q21zTWVudVNlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRNZW51SXRlbXMoYmFzZVVybCkucGlwZShcbiAgICAgIG1hcChpdGVtcyA9PiAoe1xuICAgICAgICBpZDogJ2N1c3RvbS1vYmplY3RzJyxcbiAgICAgICAgdHlwZTogJ3NlY3Rpb24nIGFzIGNvbnN0LFxuICAgICAgICB0aXRsZTogJ0N1c3RvbSBPYmplY3RzJyxcbiAgICAgICAgdHJhbnNsYXRlOiAnTUVOVS5BRE1JTklTVFJBVElPTi5DVVNUT01fT0JKRUNUUycsXG4gICAgICAgIGljb246ICdsYXllcnMnLFxuICAgICAgICByb2xlOiByb2xlcyxcbiAgICAgICAgYXZhaWxhYmxlT25Nb2JpbGVOYXRpdmU6IGZhbHNlLFxuICAgICAgICBtb2JpbGVPbmx5OiBmYWxzZSxcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIE1lbnUgaXRlbSBzdHJ1Y3R1cmUgY29tcGF0aWJsZSB3aXRoIHRnbS1tYW5hZ2VyLXVpJ3MgQ29yZU1lbnVJdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENtc01lbnVJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogJ2l0ZW0nIHwgJ3NlY3Rpb24nIHwgJ2NvbGxhcHNpYmxlJztcbiAgaWNvbj86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xuICByb2xlPzogc3RyaW5nW107XG4gIHRyYW5zbGF0ZT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBhdmFpbGFibGVPbk1vYmlsZU5hdGl2ZT86IGJvb2xlYW47XG4gIG1vYmlsZU9ubHk/OiBib29sZWFuO1xuICBiYWRnZT86IHsgdGl0bGU/OiBzdHJpbmc7IHRyYW5zbGF0ZT86IHN0cmluZzsgY2xhc3Nlcz86IHN0cmluZyB9O1xuICBjaGlsZHJlbj86IENtc01lbnVJdGVtW107XG59XG5cbi8qKlxuICogQ29tcGxldGUgbWVudSBzZWN0aW9uIHJlYWR5IGZvciBzaWRlYmFyIGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbXNNZW51U2VjdGlvbiBleHRlbmRzIENtc01lbnVJdGVtIHtcbiAgY2hpbGRyZW46IENtc01lbnVJdGVtW107XG59XG4iXX0=
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLW1lbnUuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hcGkvY21zLW1lbnUuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxHQUFHLEVBQUUsV0FBVyxFQUFPLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHdEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQUVoQixrQkFBa0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUUzRCx1RkFBdUY7SUFDL0UsT0FBTyxHQUEyQyxJQUFJLENBQUM7SUFFdkQsZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FDeEMsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDaEQsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixVQUFVO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxxQkFBcUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLFdBQVcsR0FBRyxVQUFVO1FBQzdELE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FDaEMsR0FBRyxDQUFDLENBQUMsWUFBaUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sT0FBTyxHQUFrQyxFQUFFLENBQUM7WUFFbEQsS0FBSyxNQUFNLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksZ0JBQWdCLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFFdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7b0JBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBRSxXQUFXLEdBQUcsVUFBVTtRQUNwRCxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQ2hDLEdBQUcsQ0FBQyxDQUFDLFlBQWlDLEVBQUUsRUFBRSxDQUN4QyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQ2xFLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQ1osT0FBTyxHQUFHLEtBQUssRUFDZixRQUFrQixDQUFDLHFCQUFxQixDQUFDO1FBRXpDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNkLEVBQUUsRUFBRSxnQkFBZ0I7WUFDcEIsSUFBSSxFQUFFLFNBQWtCO1lBQ3hCLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsU0FBUyxFQUFFLG9DQUFvQztZQUMvQyxJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxLQUFLO1lBQ1gsdUJBQXVCLEVBQUUsS0FBSztZQUM5QixVQUFVLEVBQUUsS0FBSztZQUNqQixRQUFRLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTtTQUMxQyxDQUFDLENBQUMsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVPLFVBQVUsQ0FBQyxFQUFxQixFQUFFLE9BQWUsRUFBRSxXQUFtQjtRQUM1RSxPQUFPO1lBQ0wsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRTtZQUM5QixLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLGNBQWM7WUFDaEQsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksV0FBVztZQUN0QyxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsRUFBRTtZQUN0Qyx1QkFBdUIsRUFBRSxLQUFLO1lBQzlCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLHdDQUF3QztZQUN4QyxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksZ0JBQWdCO1NBQ3ZELENBQUM7SUFDSixDQUFDO3dHQTlGVSxhQUFhOzRHQUFiLGFBQWEsY0FEQSxNQUFNOzs0RkFDbkIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ21zQ29udGVudFR5cGVTZXJ2aWNlIH0gZnJvbSAnLi9jbXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50VHlwZVNjaGVtYSB9IGZyb20gJy4uLy4uL21vZGVscy9hcGkvY21zLm1vZGVscyc7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBDTVMgY29udGVudCB0eXBlcyBpbnRvIHNpZGViYXIgbWVudSBpdGVtcy5cbiAqXG4gKiBFYWNoIGNvbnRlbnQgdHlwZSBjYW4gc3BlY2lmeSB3aGVyZSBpdCBhcHBlYXJzIHZpYSBpbmZvLm1lbnVTZWN0aW9uOlxuICogLSBcInRnbS1vbVwiIOKGkiBUR00gTyZNIHNlY3Rpb25cbiAqIC0gXCJ0Z20tZWNvbm9taWNzXCIg4oaSIFRHTSBFY29ub21pY3Mgc2VjdGlvblxuICogLSBcInRnbS1pbnZlbnRvcnktbWFuYWdlbWVudFwiIOKGkiBJbnZlbnRvcnkgc2VjdGlvblxuICogLSBcImFkbWluaXN0cmF0aW9uXCIgKGRlZmF1bHQpIOKGkiBBZG1pbmlzdHJhdGlvbiDihpIgQ3VzdG9tIE9iamVjdHNcbiAqIC0gQW55IG90aGVyIG1lbnUgc2VjdGlvbiBpZCBmcm9tIG1lbnUudHNcbiAqXG4gKiBVc2FnZSBpbiBBcHBDb21wb25lbnQuaW5pdGlhbGl6ZU1lbnUoKTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0aGlzLmNtc01lbnVIZWxwZXIuZ2V0TWVudUl0ZW1zQnlTZWN0aW9uKCdjbXMnKS5zdWJzY3JpYmUoZ3JvdXBlZCA9PiB7XG4gKiAgIGZvciAoY29uc3QgW3NlY3Rpb25JZCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpKSB7XG4gKiAgICAgY29uc3Qgc2VjdGlvbiA9IG1lbnUuZmluZChtID0+IG0uaWQgPT09IHNlY3Rpb25JZCk7XG4gKiAgICAgaWYgKHNlY3Rpb24/LmNoaWxkcmVuKSB7XG4gKiAgICAgICBzZWN0aW9uLmNoaWxkcmVuLnB1c2goLi4uaXRlbXMpO1xuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDbXNNZW51SGVscGVyIHtcblxuICBwcml2YXRlIGNvbnRlbnRUeXBlU2VydmljZSA9IGluamVjdChDbXNDb250ZW50VHlwZVNlcnZpY2UpO1xuXG4gIC8qKiBDYWNoZWQgY29udGVudCB0eXBlcyDigJQgc2hhcmVkIGFjcm9zcyBzdWJzY3JpYmVycywgYXV0by1yZWZyZXNoZXMgb24gaW52YWxpZGF0ZSgpICovXG4gIHByaXZhdGUgX2NhY2hlJDogT2JzZXJ2YWJsZTxDb250ZW50VHlwZVNjaGVtYVtdPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGVzKCk6IE9ic2VydmFibGU8Q29udGVudFR5cGVTY2hlbWFbXT4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUkKSB7XG4gICAgICB0aGlzLl9jYWNoZSQgPSB0aGlzLmdldENvbnRlbnRUeXBlcygpLnBpcGUoXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IGZhbHNlIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2FjaGUkO1xuICB9XG5cbiAgLyoqIEludmFsaWRhdGUgdGhlIGNhY2hlIOKAlCBjYWxsIGFmdGVyIGNyZWF0aW5nL3VwZGF0aW5nL2RlbGV0aW5nIGEgY29udGVudCB0eXBlICovXG4gIGludmFsaWRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FjaGUkID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgY29udGVudCB0eXBlcyBhbmQgcmV0dXJuIG1lbnUgaXRlbXMgZ3JvdXBlZCBieSBtZW51U2VjdGlvbi5cbiAgICogRWFjaCBrZXkgaXMgYSBtZW51IHNlY3Rpb24gaWQgKGUuZy4sIFwidGdtLW9tXCIsIFwiYWRtaW5pc3RyYXRpb25cIikuXG4gICAqIEl0ZW1zIHdpdGhvdXQgbWVudVNlY3Rpb24gZGVmYXVsdCB0byBcImFkbWluaXN0cmF0aW9uXCIuXG4gICAqXG4gICAqIEBwYXJhbSBiYXNlVXJsIC0gUm91dGUgYmFzZSBwYXRoIGZvciBDTVMgcGFnZXNcbiAgICogQHBhcmFtIGRlZmF1bHRJY29uIC0gRGVmYXVsdCBpY29uIHdoZW4gbWVudUljb24gbm90IHNldFxuICAgKi9cbiAgZ2V0TWVudUl0ZW1zQnlTZWN0aW9uKGJhc2VVcmwgPSAnY21zJywgZGVmYXVsdEljb24gPSAnZGF0YWJhc2UnKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBDbXNNZW51SXRlbVtdPj4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbnRlbnRUeXBlcygpLnBpcGUoXG4gICAgICBtYXAoKGNvbnRlbnRUeXBlczogQ29udGVudFR5cGVTY2hlbWFbXSkgPT4ge1xuICAgICAgICBjb25zdCBncm91cGVkOiBSZWNvcmQ8c3RyaW5nLCBDbXNNZW51SXRlbVtdPiA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgY3Qgb2YgY29udGVudFR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGN0LmluZm8/Lm1lbnVTZWN0aW9uIHx8ICdhZG1pbmlzdHJhdGlvbic7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMudG9NZW51SXRlbShjdCwgYmFzZVVybCwgZGVmYXVsdEljb24pO1xuXG4gICAgICAgICAgaWYgKCFncm91cGVkW3NlY3Rpb25dKSBncm91cGVkW3NlY3Rpb25dID0gW107XG4gICAgICAgICAgZ3JvdXBlZFtzZWN0aW9uXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwZWQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYWxsIGNvbnRlbnQgdHlwZXMgYXMgYSBmbGF0IGxpc3Qgb2YgbWVudSBpdGVtcy5cbiAgICogVXNlIGdldE1lbnVJdGVtc0J5U2VjdGlvbigpIGluc3RlYWQgaWYgeW91IG5lZWQgcGxhY2VtZW50IGNvbnRyb2wuXG4gICAqL1xuICBnZXRNZW51SXRlbXMoYmFzZVVybCA9ICdjbXMnLCBkZWZhdWx0SWNvbiA9ICdkYXRhYmFzZScpOiBPYnNlcnZhYmxlPENtc01lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50VHlwZXMoKS5waXBlKFxuICAgICAgbWFwKChjb250ZW50VHlwZXM6IENvbnRlbnRUeXBlU2NoZW1hW10pID0+XG4gICAgICAgIGNvbnRlbnRUeXBlcy5tYXAoY3QgPT4gdGhpcy50b01lbnVJdGVtKGN0LCBiYXNlVXJsLCBkZWZhdWx0SWNvbikpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIFwiQ3VzdG9tIE9iamVjdHNcIiBzZWN0aW9uIGZvciBpdGVtcyB0aGF0IHRhcmdldCBcImFkbWluaXN0cmF0aW9uXCIuXG4gICAqIEl0ZW1zIHRhcmdldGluZyBvdGhlciBzZWN0aW9ucyBhcmUgZXhjbHVkZWQg4oCUIHVzZSBnZXRNZW51SXRlbXNCeVNlY3Rpb24oKSBmb3IgdGhvc2UuXG4gICAqL1xuICBnZXRNZW51U2VjdGlvbihcbiAgICBiYXNlVXJsID0gJ2NtcycsXG4gICAgcm9sZXM6IHN0cmluZ1tdID0gWydBZG1pbmlzdHJhdGlvbi5SZWFkJ11cbiAgKTogT2JzZXJ2YWJsZTxDbXNNZW51U2VjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmdldE1lbnVJdGVtc0J5U2VjdGlvbihiYXNlVXJsKS5waXBlKFxuICAgICAgbWFwKGdyb3VwZWQgPT4gKHtcbiAgICAgICAgaWQ6ICdjdXN0b20tb2JqZWN0cycsXG4gICAgICAgIHR5cGU6ICdzZWN0aW9uJyBhcyBjb25zdCxcbiAgICAgICAgdGl0bGU6ICdDdXN0b20gT2JqZWN0cycsXG4gICAgICAgIHRyYW5zbGF0ZTogJ01FTlUuQURNSU5JU1RSQVRJT04uQ1VTVE9NX09CSkVDVFMnLFxuICAgICAgICBpY29uOiAnbGF5ZXJzJyxcbiAgICAgICAgcm9sZTogcm9sZXMsXG4gICAgICAgIGF2YWlsYWJsZU9uTW9iaWxlTmF0aXZlOiBmYWxzZSxcbiAgICAgICAgbW9iaWxlT25seTogZmFsc2UsXG4gICAgICAgIGNoaWxkcmVuOiBncm91cGVkWydhZG1pbmlzdHJhdGlvbiddIHx8IFtdLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9NZW51SXRlbShjdDogQ29udGVudFR5cGVTY2hlbWEsIGJhc2VVcmw6IHN0cmluZywgZGVmYXVsdEljb246IHN0cmluZyk6IENtc01lbnVJdGVtIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBjbXMtJHtjdC5jb2xsZWN0aW9uTmFtZX1gLFxuICAgICAgdGl0bGU6IGN0LmluZm8/LmRpc3BsYXlOYW1lIHx8IGN0LmNvbGxlY3Rpb25OYW1lLFxuICAgICAgdHlwZTogJ2l0ZW0nLFxuICAgICAgaWNvbjogY3QuaW5mbz8ubWVudUljb24gfHwgZGVmYXVsdEljb24sXG4gICAgICB1cmw6IGAke2Jhc2VVcmx9LyR7Y3QuY29sbGVjdGlvbk5hbWV9YCxcbiAgICAgIGF2YWlsYWJsZU9uTW9iaWxlTmF0aXZlOiBmYWxzZSxcbiAgICAgIG1vYmlsZU9ubHk6IGZhbHNlLFxuICAgICAgLy8gU3RvcmUgdGhlIHRhcmdldCBzZWN0aW9uIGZvciBncm91cGluZ1xuICAgICAgX21lbnVTZWN0aW9uOiBjdC5pbmZvPy5tZW51U2VjdGlvbiB8fCAnYWRtaW5pc3RyYXRpb24nLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBNZW51IGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRnbS1tYW5hZ2VyLXVpIENvcmVNZW51SXRlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbXNNZW51SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHR5cGU6ICdpdGVtJyB8ICdzZWN0aW9uJyB8ICdjb2xsYXBzaWJsZSc7XG4gIGljb24/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgcm9sZT86IHN0cmluZ1tdO1xuICB0cmFuc2xhdGU/OiBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgYXZhaWxhYmxlT25Nb2JpbGVOYXRpdmU/OiBib29sZWFuO1xuICBtb2JpbGVPbmx5PzogYm9vbGVhbjtcbiAgYmFkZ2U/OiB7IHRpdGxlPzogc3RyaW5nOyB0cmFuc2xhdGU/OiBzdHJpbmc7IGNsYXNzZXM/OiBzdHJpbmcgfTtcbiAgY2hpbGRyZW4/OiBDbXNNZW51SXRlbVtdO1xuICAvKiogSW50ZXJuYWw6IHRhcmdldCBtZW51IHNlY3Rpb24gaWQgKi9cbiAgX21lbnVTZWN0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXBsZXRlIG1lbnUgc2VjdGlvbiByZWFkeSBmb3Igc2lkZWJhciBpbmplY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ21zTWVudVNlY3Rpb24gZXh0ZW5kcyBDbXNNZW51SXRlbSB7XG4gIGNoaWxkcmVuOiBDbXNNZW51SXRlbVtdO1xufVxuIl19
|
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { InjectionToken, Injectable, Inject, Optional, NgModule, inject, ViewChild, Input, Component, EventEmitter, Output, HostListener } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common/http';
|
|
4
4
|
import { HttpClient, HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
|
|
5
|
-
import { BehaviorSubject, Subject, catchError, throwError, take, switchMap, takeUntil, share, tap, map } from 'rxjs';
|
|
5
|
+
import { BehaviorSubject, Subject, catchError, throwError, take, switchMap, takeUntil, share, tap, shareReplay, map } from 'rxjs';
|
|
6
6
|
import { Client } from '@stomp/stompjs';
|
|
7
7
|
import * as SockJSModule from 'sockjs-client';
|
|
8
8
|
import * as i2 from '@angular/common';
|
|
@@ -6893,77 +6893,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
6893
6893
|
}], ctorParameters: () => [{ type: TgmHttpClient }] });
|
|
6894
6894
|
|
|
6895
6895
|
/**
|
|
6896
|
-
*
|
|
6897
|
-
* Frontend devs can inject these into the sidebar dynamically.
|
|
6896
|
+
* Transforms CMS content types into sidebar menu items.
|
|
6898
6897
|
*
|
|
6899
|
-
*
|
|
6898
|
+
* Each content type can specify where it appears via info.menuSection:
|
|
6899
|
+
* - "tgm-om" → TGM O&M section
|
|
6900
|
+
* - "tgm-economics" → TGM Economics section
|
|
6901
|
+
* - "tgm-inventory-management" → Inventory section
|
|
6902
|
+
* - "administration" (default) → Administration → Custom Objects
|
|
6903
|
+
* - Any other menu section id from menu.ts
|
|
6900
6904
|
*
|
|
6901
|
-
*
|
|
6902
|
-
* // In AppComponent or a module initializer:
|
|
6903
|
-
* cmsMenuHelper.getMenuItems('administration/cms').subscribe(items => {
|
|
6904
|
-
* // items is a CoreMenuItem[] array ready to inject into the sidebar
|
|
6905
|
-
* const adminSection = menu.find(m => m.id === 'administration');
|
|
6906
|
-
* const cmsGroup = {
|
|
6907
|
-
* id: 'custom-objects',
|
|
6908
|
-
* type: 'section' as const,
|
|
6909
|
-
* title: 'Custom Objects',
|
|
6910
|
-
* icon: 'layers',
|
|
6911
|
-
* role: [Role['Administration.Read']],
|
|
6912
|
-
* children: items
|
|
6913
|
-
* };
|
|
6914
|
-
* const moreIdx = adminSection.children.findIndex(c => c.id === 'more');
|
|
6915
|
-
* adminSection.children.splice(moreIdx, 0, cmsGroup);
|
|
6916
|
-
* });
|
|
6917
|
-
* ```
|
|
6905
|
+
* Usage in AppComponent.initializeMenu():
|
|
6918
6906
|
*
|
|
6919
|
-
* Route setup in administraton.module.ts:
|
|
6920
6907
|
* ```typescript
|
|
6921
|
-
* {
|
|
6922
|
-
*
|
|
6923
|
-
*
|
|
6924
|
-
*
|
|
6925
|
-
*
|
|
6908
|
+
* this.cmsMenuHelper.getMenuItemsBySection('cms').subscribe(grouped => {
|
|
6909
|
+
* for (const [sectionId, items] of Object.entries(grouped)) {
|
|
6910
|
+
* const section = menu.find(m => m.id === sectionId);
|
|
6911
|
+
* if (section?.children) {
|
|
6912
|
+
* section.children.push(...items);
|
|
6913
|
+
* }
|
|
6914
|
+
* }
|
|
6915
|
+
* });
|
|
6926
6916
|
* ```
|
|
6927
6917
|
*/
|
|
6928
6918
|
class CmsMenuHelper {
|
|
6929
6919
|
contentTypeService = inject(CmsContentTypeService);
|
|
6920
|
+
/** Cached content types — shared across subscribers, auto-refreshes on invalidate() */
|
|
6921
|
+
_cache$ = null;
|
|
6922
|
+
getContentTypes() {
|
|
6923
|
+
if (!this._cache$) {
|
|
6924
|
+
this._cache$ = this.getContentTypes().pipe(shareReplay({ bufferSize: 1, refCount: false }));
|
|
6925
|
+
}
|
|
6926
|
+
return this._cache$;
|
|
6927
|
+
}
|
|
6928
|
+
/** Invalidate the cache — call after creating/updating/deleting a content type */
|
|
6929
|
+
invalidate() {
|
|
6930
|
+
this._cache$ = null;
|
|
6931
|
+
}
|
|
6930
6932
|
/**
|
|
6931
|
-
* Fetch all
|
|
6933
|
+
* Fetch all content types and return menu items grouped by menuSection.
|
|
6934
|
+
* Each key is a menu section id (e.g., "tgm-om", "administration").
|
|
6935
|
+
* Items without menuSection default to "administration".
|
|
6932
6936
|
*
|
|
6933
|
-
* @param baseUrl -
|
|
6934
|
-
* @param defaultIcon - Default icon
|
|
6935
|
-
* @returns Observable of menu items array
|
|
6937
|
+
* @param baseUrl - Route base path for CMS pages
|
|
6938
|
+
* @param defaultIcon - Default icon when menuIcon not set
|
|
6936
6939
|
*/
|
|
6937
|
-
|
|
6938
|
-
return this.
|
|
6940
|
+
getMenuItemsBySection(baseUrl = 'cms', defaultIcon = 'database') {
|
|
6941
|
+
return this.getContentTypes().pipe(map((contentTypes) => {
|
|
6942
|
+
const grouped = {};
|
|
6943
|
+
for (const ct of contentTypes) {
|
|
6944
|
+
const section = ct.info?.menuSection || 'administration';
|
|
6945
|
+
const item = this.toMenuItem(ct, baseUrl, defaultIcon);
|
|
6946
|
+
if (!grouped[section])
|
|
6947
|
+
grouped[section] = [];
|
|
6948
|
+
grouped[section].push(item);
|
|
6949
|
+
}
|
|
6950
|
+
return grouped;
|
|
6951
|
+
}));
|
|
6939
6952
|
}
|
|
6940
6953
|
/**
|
|
6941
|
-
*
|
|
6954
|
+
* Fetch all content types as a flat list of menu items.
|
|
6955
|
+
* Use getMenuItemsBySection() instead if you need placement control.
|
|
6942
6956
|
*/
|
|
6943
|
-
|
|
6944
|
-
return
|
|
6945
|
-
id: `cms-${ct.collectionName}`,
|
|
6946
|
-
title: ct.info?.displayName || ct.collectionName,
|
|
6947
|
-
type: 'item',
|
|
6948
|
-
icon: defaultIcon,
|
|
6949
|
-
url: `${baseUrl}/${ct.collectionName}`,
|
|
6950
|
-
// These match CoreMenuItem from tgm-manager-ui
|
|
6951
|
-
availableOnMobileNative: false,
|
|
6952
|
-
mobileOnly: false,
|
|
6953
|
-
badge: ct.options?.draftAndPublish
|
|
6954
|
-
? { title: 'D/P', classes: 'badge-light-primary' }
|
|
6955
|
-
: undefined,
|
|
6956
|
-
};
|
|
6957
|
+
getMenuItems(baseUrl = 'cms', defaultIcon = 'database') {
|
|
6958
|
+
return this.getContentTypes().pipe(map((contentTypes) => contentTypes.map(ct => this.toMenuItem(ct, baseUrl, defaultIcon))));
|
|
6957
6959
|
}
|
|
6958
6960
|
/**
|
|
6959
|
-
* Build a
|
|
6960
|
-
*
|
|
6961
|
-
*
|
|
6962
|
-
* @param baseUrl - Route base path
|
|
6963
|
-
* @param roles - Required roles to see this section
|
|
6961
|
+
* Build a "Custom Objects" section for items that target "administration".
|
|
6962
|
+
* Items targeting other sections are excluded — use getMenuItemsBySection() for those.
|
|
6964
6963
|
*/
|
|
6965
|
-
getMenuSection(baseUrl = '
|
|
6966
|
-
return this.
|
|
6964
|
+
getMenuSection(baseUrl = 'cms', roles = ['Administration.Read']) {
|
|
6965
|
+
return this.getMenuItemsBySection(baseUrl).pipe(map(grouped => ({
|
|
6967
6966
|
id: 'custom-objects',
|
|
6968
6967
|
type: 'section',
|
|
6969
6968
|
title: 'Custom Objects',
|
|
@@ -6972,9 +6971,22 @@ class CmsMenuHelper {
|
|
|
6972
6971
|
role: roles,
|
|
6973
6972
|
availableOnMobileNative: false,
|
|
6974
6973
|
mobileOnly: false,
|
|
6975
|
-
children:
|
|
6974
|
+
children: grouped['administration'] || [],
|
|
6976
6975
|
})));
|
|
6977
6976
|
}
|
|
6977
|
+
toMenuItem(ct, baseUrl, defaultIcon) {
|
|
6978
|
+
return {
|
|
6979
|
+
id: `cms-${ct.collectionName}`,
|
|
6980
|
+
title: ct.info?.displayName || ct.collectionName,
|
|
6981
|
+
type: 'item',
|
|
6982
|
+
icon: ct.info?.menuIcon || defaultIcon,
|
|
6983
|
+
url: `${baseUrl}/${ct.collectionName}`,
|
|
6984
|
+
availableOnMobileNative: false,
|
|
6985
|
+
mobileOnly: false,
|
|
6986
|
+
// Store the target section for grouping
|
|
6987
|
+
_menuSection: ct.info?.menuSection || 'administration',
|
|
6988
|
+
};
|
|
6989
|
+
}
|
|
6978
6990
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CmsMenuHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6979
6991
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CmsMenuHelper, providedIn: 'root' });
|
|
6980
6992
|
}
|