@acorex/modules 18.1.4 → 18.1.5
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/backend/lib/data/api/comment.mock.service.d.ts +6 -6
- package/backend/lib/data/api/notification.mock.service.d.ts +34 -0
- package/esm2022/application-management/lib/application-management.service.mjs +3 -3
- package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +1 -1
- package/esm2022/auth/lib/account/profile/profile-slot.component.mjs +3 -3
- package/esm2022/backend/lib/backend.module.mjs +11 -1
- package/esm2022/backend/lib/data/api/comment.mock.service.mjs +3 -3
- package/esm2022/backend/lib/data/api/notification.mock.service.mjs +71 -0
- package/esm2022/form-management/lib/form-management.module.mjs +5 -4
- package/esm2022/language-management/acorex-modules-language-management.mjs +5 -0
- package/esm2022/language-management/index.mjs +2 -0
- package/esm2022/language-management/lib/entities/language.entity.mjs +242 -0
- package/esm2022/language-management/lib/language-management.module.mjs +39 -0
- package/esm2022/language-management/lib/notification-management.service.mjs +23 -0
- package/esm2022/notification-management/index.mjs +4 -1
- package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-item/admin-notification-item.component.mjs +47 -0
- package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-panel/admin-notification-panel.component.mjs +131 -0
- package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-slot/admin-notification-slot.component.mjs +36 -0
- package/esm2022/notification-management/lib/entities/notification-channel.entity.mjs +17 -1
- package/esm2022/notification-management/lib/entities/notification.entity.mjs +207 -0
- package/esm2022/notification-management/lib/notification-management-mock-data.mjs +40 -5
- package/esm2022/notification-management/lib/notification-management.module.mjs +31 -9
- package/esm2022/notification-management/lib/notification-management.service.mjs +21 -12
- package/esm2022/notification-management/lib/notification-management.type.mjs +2 -0
- package/esm2022/notification-management/lib/notification.service.mjs +3 -0
- package/esm2022/template-management/lib/template-management.service.mjs +3 -3
- package/fesm2022/{acorex-modules-application-management-module-designer.component-C-lY0Apl.mjs → acorex-modules-application-management-module-designer.component-CFLXuP2G.mjs} +2 -2
- package/fesm2022/{acorex-modules-application-management-module-designer.component-C-lY0Apl.mjs.map → acorex-modules-application-management-module-designer.component-CFLXuP2G.mjs.map} +1 -1
- package/fesm2022/acorex-modules-application-management.mjs +3 -3
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-4OzzidjS.mjs → acorex-modules-auth-acorex-modules-auth-iGiPFEeb.mjs} +10 -10
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-iGiPFEeb.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-CHTEeWgx.mjs → acorex-modules-auth-app-chooser.component-BB3SIzCP.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-CHTEeWgx.mjs.map → acorex-modules-auth-app-chooser.component-BB3SIzCP.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-blank.layout-Bq822Iz4.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-DMit4yw0.mjs → acorex-modules-auth-login.module-ChEv9c5I.mjs} +4 -4
- package/fesm2022/acorex-modules-auth-login.module-ChEv9c5I.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-master.layout-BCYIjTB0.mjs → acorex-modules-auth-master.layout-CZv3BD5c.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-BCYIjTB0.mjs.map → acorex-modules-auth-master.layout-CZv3BD5c.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-WA-CA0Ln.mjs → acorex-modules-auth-password.component-CPWiBXdG.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-WA-CA0Ln.mjs.map → acorex-modules-auth-password.component-CPWiBXdG.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-D16ms36y.mjs → acorex-modules-auth-password.component-CxZ1weks.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-D16ms36y.mjs.map → acorex-modules-auth-password.component-CxZ1weks.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-C3ye31RS.mjs → acorex-modules-auth-routes-C7r2Jm6s.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-C3ye31RS.mjs.map → acorex-modules-auth-routes-C7r2Jm6s.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-CHr5_kh7.mjs.map +1 -1
- package/fesm2022/acorex-modules-auth-two-factor-code.component-B_7l39pX.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-CkZCBo0B.mjs → acorex-modules-auth-two-factor.module-BgkJYe7T.mjs} +2 -2
- package/fesm2022/acorex-modules-auth-two-factor.module-BgkJYe7T.mjs.map +1 -0
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-backend.mjs +79 -2
- package/fesm2022/acorex-modules-backend.mjs.map +1 -1
- package/fesm2022/acorex-modules-form-management-designer.page-SoPH2V7i.mjs.map +1 -1
- package/fesm2022/acorex-modules-form-management.mjs +4 -3
- package/fesm2022/acorex-modules-form-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-language-management-language.entity-CwD5FHGc.mjs +266 -0
- package/fesm2022/acorex-modules-language-management-language.entity-CwD5FHGc.mjs.map +1 -0
- package/fesm2022/acorex-modules-language-management.mjs +46 -0
- package/fesm2022/acorex-modules-language-management.mjs.map +1 -0
- package/fesm2022/acorex-modules-notification-management.mjs +500 -25
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-template-management.mjs +2 -2
- package/fesm2022/acorex-modules-template-management.mjs.map +1 -1
- package/form-management/lib/form-management.module.d.ts +2 -1
- package/language-management/README.md +3 -0
- package/language-management/index.d.ts +1 -0
- package/language-management/lib/entities/language.entity.d.ts +3 -0
- package/language-management/lib/language-management.module.d.ts +12 -0
- package/language-management/lib/notification-management.service.d.ts +9 -0
- package/notification-management/index.d.ts +3 -0
- package/notification-management/lib/admin-notification-slot/admin-notification-item/admin-notification-item.component.d.ts +14 -0
- package/notification-management/lib/admin-notification-slot/admin-notification-panel/admin-notification-panel.component.d.ts +30 -0
- package/notification-management/lib/admin-notification-slot/admin-notification-slot/admin-notification-slot.component.d.ts +7 -0
- package/notification-management/lib/entities/notification.entity.d.ts +3 -0
- package/notification-management/lib/notification-management-mock-data.d.ts +31 -3
- package/notification-management/lib/notification-management.module.d.ts +6 -5
- package/notification-management/lib/notification-management.service.d.ts +8 -4
- package/notification-management/lib/notification-management.type.d.ts +42 -0
- package/notification-management/lib/notification.service.d.ts +7 -0
- package/package.json +6 -6
- package/esm2022/notification/acorex-modules-notification.mjs +0 -5
- package/esm2022/notification/index.mjs +0 -4
- package/esm2022/notification/lib/notification.module.mjs +0 -16
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-4OzzidjS.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-login.module-DMit4yw0.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-two-factor.module-CkZCBo0B.mjs.map +0 -1
- package/fesm2022/acorex-modules-notification.mjs +0 -26
- package/fesm2022/acorex-modules-notification.mjs.map +0 -1
- package/notification/README.md +0 -4
- package/notification/index.d.ts +0 -1
- package/notification/lib/notification.module.d.ts +0 -6
@@ -0,0 +1,242 @@
|
|
1
|
+
import { AXPDataGenerator, AXPEntityCommandScope, AXPEntityQueryType } from '@acorex/platform/common';
|
2
|
+
import { applyFilterArray, applySortArray } from '@acorex/platform/core';
|
3
|
+
import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
|
4
|
+
import { LanguageManagementService } from '../notification-management.service';
|
5
|
+
export async function languageEntityFactory(injector) {
|
6
|
+
const dataService = injector.get(LanguageManagementService);
|
7
|
+
const entityDef = {
|
8
|
+
module: 'common',
|
9
|
+
name: 'language',
|
10
|
+
source: 'common.language',
|
11
|
+
title: 'Language',
|
12
|
+
formats: {
|
13
|
+
individual: 'Language',
|
14
|
+
plural: 'Languages',
|
15
|
+
},
|
16
|
+
relatedEntities: [],
|
17
|
+
groups: [
|
18
|
+
{
|
19
|
+
id: 'language',
|
20
|
+
title: 'Language',
|
21
|
+
},
|
22
|
+
],
|
23
|
+
properties: [
|
24
|
+
{
|
25
|
+
name: 'title',
|
26
|
+
title: 'Title',
|
27
|
+
groupId: 'language',
|
28
|
+
schema: {
|
29
|
+
dataType: 'string',
|
30
|
+
interface: {
|
31
|
+
type: AXPWidgetsCatalog.text,
|
32
|
+
},
|
33
|
+
},
|
34
|
+
validations: [
|
35
|
+
{
|
36
|
+
rule: 'required',
|
37
|
+
},
|
38
|
+
],
|
39
|
+
},
|
40
|
+
{
|
41
|
+
name: 'code',
|
42
|
+
title: 'Code',
|
43
|
+
groupId: 'language',
|
44
|
+
schema: {
|
45
|
+
dataType: 'string',
|
46
|
+
interface: {
|
47
|
+
type: AXPWidgetsCatalog.text,
|
48
|
+
},
|
49
|
+
},
|
50
|
+
},
|
51
|
+
],
|
52
|
+
columns: [{ name: 'title' }, { name: 'code' }],
|
53
|
+
commands: {
|
54
|
+
create: {
|
55
|
+
execute: async (data) => {
|
56
|
+
const entity = Object.assign(data, { id: AXPDataGenerator.uuid() });
|
57
|
+
dataService.languageDataProvider.insertOne(entity);
|
58
|
+
return Promise.resolve(entity);
|
59
|
+
},
|
60
|
+
},
|
61
|
+
delete: {
|
62
|
+
execute: async (id) => {
|
63
|
+
await await dataService.languageDataProvider.deleteOne(id);
|
64
|
+
return Promise.resolve();
|
65
|
+
},
|
66
|
+
},
|
67
|
+
update: {
|
68
|
+
execute: async (data) => {
|
69
|
+
debugger;
|
70
|
+
return new Promise((resolve) => {
|
71
|
+
setTimeout(async () => {
|
72
|
+
await dataService.languageDataProvider.updateOne(data.id, data);
|
73
|
+
resolve(data);
|
74
|
+
}, 1000);
|
75
|
+
});
|
76
|
+
},
|
77
|
+
},
|
78
|
+
},
|
79
|
+
queries: {
|
80
|
+
byKey: {
|
81
|
+
execute: async (id) => {
|
82
|
+
return new Promise((resolve) => {
|
83
|
+
setTimeout(async () => {
|
84
|
+
const entity = await dataService.languageDataProvider.getOne(id);
|
85
|
+
resolve(entity);
|
86
|
+
}, 500);
|
87
|
+
});
|
88
|
+
},
|
89
|
+
type: AXPEntityQueryType.Single,
|
90
|
+
},
|
91
|
+
list: {
|
92
|
+
execute: async (e) => {
|
93
|
+
const list = await dataService.languageDataProvider.getAll();
|
94
|
+
const sortedItems = applySortArray(list, e.sort);
|
95
|
+
const filteredItems = applyFilterArray(sortedItems, e.filter ? [e.filter] : []);
|
96
|
+
return Promise.resolve({
|
97
|
+
total: filteredItems.length,
|
98
|
+
items: filteredItems.slice(e.skip, (e.skip ?? 0) + (e.take ?? 0)),
|
99
|
+
});
|
100
|
+
},
|
101
|
+
type: AXPEntityQueryType.List,
|
102
|
+
},
|
103
|
+
},
|
104
|
+
interfaces: {
|
105
|
+
master: {
|
106
|
+
create: {
|
107
|
+
sections: [
|
108
|
+
{
|
109
|
+
id: 'language',
|
110
|
+
},
|
111
|
+
],
|
112
|
+
properties: [
|
113
|
+
{
|
114
|
+
name: 'title',
|
115
|
+
layout: {
|
116
|
+
positions: {
|
117
|
+
lg: {
|
118
|
+
colSpan: 6,
|
119
|
+
},
|
120
|
+
},
|
121
|
+
},
|
122
|
+
},
|
123
|
+
{
|
124
|
+
name: 'code',
|
125
|
+
layout: {
|
126
|
+
positions: {
|
127
|
+
lg: {
|
128
|
+
colSpan: 6,
|
129
|
+
},
|
130
|
+
},
|
131
|
+
},
|
132
|
+
},
|
133
|
+
],
|
134
|
+
},
|
135
|
+
update: {
|
136
|
+
sections: [
|
137
|
+
{
|
138
|
+
id: 'language',
|
139
|
+
},
|
140
|
+
],
|
141
|
+
properties: [
|
142
|
+
{
|
143
|
+
name: 'title',
|
144
|
+
layout: {
|
145
|
+
positions: {
|
146
|
+
lg: {
|
147
|
+
colSpan: 6,
|
148
|
+
},
|
149
|
+
},
|
150
|
+
},
|
151
|
+
},
|
152
|
+
{
|
153
|
+
name: 'code',
|
154
|
+
layout: {
|
155
|
+
positions: {
|
156
|
+
lg: {
|
157
|
+
colSpan: 6,
|
158
|
+
},
|
159
|
+
},
|
160
|
+
},
|
161
|
+
},
|
162
|
+
],
|
163
|
+
},
|
164
|
+
single: {
|
165
|
+
title: '{{title}}',
|
166
|
+
sections: [
|
167
|
+
{
|
168
|
+
id: 'language',
|
169
|
+
},
|
170
|
+
],
|
171
|
+
properties: [
|
172
|
+
{
|
173
|
+
name: 'title',
|
174
|
+
layout: {
|
175
|
+
positions: {
|
176
|
+
lg: {
|
177
|
+
colSpan: 6,
|
178
|
+
},
|
179
|
+
},
|
180
|
+
},
|
181
|
+
},
|
182
|
+
{
|
183
|
+
name: 'code',
|
184
|
+
layout: {
|
185
|
+
positions: {
|
186
|
+
lg: {
|
187
|
+
colSpan: 6,
|
188
|
+
},
|
189
|
+
},
|
190
|
+
},
|
191
|
+
},
|
192
|
+
],
|
193
|
+
actions: [],
|
194
|
+
},
|
195
|
+
list: {
|
196
|
+
actions: [
|
197
|
+
{
|
198
|
+
title: 'Create New',
|
199
|
+
command: 'create-entity',
|
200
|
+
priority: 'primary',
|
201
|
+
type: 'create',
|
202
|
+
scope: AXPEntityCommandScope.TypeLevel,
|
203
|
+
},
|
204
|
+
{
|
205
|
+
title: 'Delete Items',
|
206
|
+
command: 'delete-entity',
|
207
|
+
priority: 'primary',
|
208
|
+
type: 'delete',
|
209
|
+
scope: AXPEntityCommandScope.Selected,
|
210
|
+
},
|
211
|
+
{
|
212
|
+
title: 'Details',
|
213
|
+
command: 'open-entity',
|
214
|
+
priority: 'primary',
|
215
|
+
type: 'view',
|
216
|
+
scope: AXPEntityCommandScope.Individual,
|
217
|
+
},
|
218
|
+
{
|
219
|
+
title: 'Delete',
|
220
|
+
command: 'delete-entity',
|
221
|
+
priority: 'primary',
|
222
|
+
type: 'delete',
|
223
|
+
scope: AXPEntityCommandScope.Individual,
|
224
|
+
},
|
225
|
+
],
|
226
|
+
views: [
|
227
|
+
{
|
228
|
+
name: 'all',
|
229
|
+
title: 'All Items',
|
230
|
+
fixed: true,
|
231
|
+
columns: [],
|
232
|
+
conditions: [],
|
233
|
+
sorts: [],
|
234
|
+
},
|
235
|
+
],
|
236
|
+
},
|
237
|
+
},
|
238
|
+
},
|
239
|
+
};
|
240
|
+
return entityDef;
|
241
|
+
}
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UuZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2xhbmd1YWdlLW1hbmFnZW1lbnQvc3JjL2xpYi9lbnRpdGllcy9sYW5ndWFnZS5lbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFhLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRS9FLE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsUUFBa0I7SUFDNUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRTVELE1BQU0sU0FBUyxHQUFjO1FBQzNCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLElBQUksRUFBRSxVQUFVO1FBQ2hCLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsS0FBSyxFQUFFLFVBQVU7UUFDakIsT0FBTyxFQUFFO1lBQ1AsVUFBVSxFQUFFLFVBQVU7WUFDdEIsTUFBTSxFQUFFLFdBQVc7U0FDcEI7UUFDRCxlQUFlLEVBQUUsRUFBRTtRQUNuQixNQUFNLEVBQUU7WUFDTjtnQkFDRSxFQUFFLEVBQUUsVUFBVTtnQkFDZCxLQUFLLEVBQUUsVUFBVTthQUNsQjtTQUNGO1FBQ0QsVUFBVSxFQUFFO1lBQ1Y7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsU0FBUyxFQUFFO3dCQUNULElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO3FCQUM3QjtpQkFDRjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1g7d0JBQ0UsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCO2lCQUNGO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsTUFBTTtnQkFDYixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxRQUFRO29CQUNsQixTQUFTLEVBQUU7d0JBQ1QsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUk7cUJBQzdCO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzlDLFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRTtnQkFDTixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO29CQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRXBFLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ25ELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakMsQ0FBQzthQUNGO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBTyxFQUFFLEVBQUU7b0JBQ3pCLE1BQU0sTUFBTSxXQUFXLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQzthQUNGO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7b0JBQzNCLFFBQVEsQ0FBQztvQkFDVCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzdCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTs0QkFDcEIsTUFBTSxXQUFXLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQ2hFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDaEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNYLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7YUFDRjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsS0FBSyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBVSxFQUFFLEVBQUU7b0JBQzVCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDN0IsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFOzRCQUNwQixNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ2pFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDbEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNWLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE1BQU07YUFDaEM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFNLEVBQUUsRUFBRTtvQkFDeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFXLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzdELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqRCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7d0JBQ3JCLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTTt3QkFDM0IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUNsRSxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsSUFBSTthQUM5QjtTQUNGO1FBQ0QsVUFBVSxFQUFFO1lBQ1YsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUU7d0JBQ1I7NEJBQ0UsRUFBRSxFQUFFLFVBQVU7eUJBQ2Y7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLElBQUksRUFBRSxPQUFPOzRCQUNiLE1BQU0sRUFBRTtnQ0FDTixTQUFTLEVBQUU7b0NBQ1QsRUFBRSxFQUFFO3dDQUNGLE9BQU8sRUFBRSxDQUFDO3FDQUNYO2lDQUNGOzZCQUNGO3lCQUNGO3dCQUNEOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLE1BQU0sRUFBRTtnQ0FDTixTQUFTLEVBQUU7b0NBQ1QsRUFBRSxFQUFFO3dDQUNGLE9BQU8sRUFBRSxDQUFDO3FDQUNYO2lDQUNGOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUU7d0JBQ1I7NEJBQ0UsRUFBRSxFQUFFLFVBQVU7eUJBQ2Y7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLElBQUksRUFBRSxPQUFPOzRCQUNiLE1BQU0sRUFBRTtnQ0FDTixTQUFTLEVBQUU7b0NBQ1QsRUFBRSxFQUFFO3dDQUNGLE9BQU8sRUFBRSxDQUFDO3FDQUNYO2lDQUNGOzZCQUNGO3lCQUNGO3dCQUNEOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLE1BQU0sRUFBRTtnQ0FDTixTQUFTLEVBQUU7b0NBQ1QsRUFBRSxFQUFFO3dDQUNGLE9BQU8sRUFBRSxDQUFDO3FDQUNYO2lDQUNGOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELE1BQU0sRUFBRTtvQkFDTixLQUFLLEVBQUUsV0FBVztvQkFDbEIsUUFBUSxFQUFFO3dCQUNSOzRCQUNFLEVBQUUsRUFBRSxVQUFVO3lCQUNmO3FCQUNGO29CQUNELFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxJQUFJLEVBQUUsT0FBTzs0QkFDYixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsQ0FBQztxQ0FDWDtpQ0FDRjs2QkFDRjt5QkFDRjt3QkFDRDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsQ0FBQztxQ0FDWDtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxPQUFPLEVBQUUsRUFBRTtpQkFDWjtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFO3dCQUNQOzRCQUNFLEtBQUssRUFBRSxZQUFZOzRCQUNuQixPQUFPLEVBQUUsZUFBZTs0QkFDeEIsUUFBUSxFQUFFLFNBQVM7NEJBQ25CLElBQUksRUFBRSxRQUFROzRCQUNkLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxTQUFTO3lCQUN2Qzt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsY0FBYzs0QkFDckIsT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLFFBQVEsRUFBRSxTQUFTOzRCQUNuQixJQUFJLEVBQUUsUUFBUTs0QkFDZCxLQUFLLEVBQUUscUJBQXFCLENBQUMsUUFBUTt5QkFDdEM7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLFNBQVM7NEJBQ2hCLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixRQUFRLEVBQUUsU0FBUzs0QkFDbkIsSUFBSSxFQUFFLE1BQU07NEJBQ1osS0FBSyxFQUFFLHFCQUFxQixDQUFDLFVBQVU7eUJBQ3hDO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxRQUFROzRCQUNmLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixRQUFRLEVBQUUsU0FBUzs0QkFDbkIsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsS0FBSyxFQUFFLHFCQUFxQixDQUFDLFVBQVU7eUJBQ3hDO3FCQUNGO29CQUNELEtBQUssRUFBRTt3QkFDTDs0QkFDRSxJQUFJLEVBQUUsS0FBSzs0QkFDWCxLQUFLLEVBQUUsV0FBVzs0QkFDbEIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsT0FBTyxFQUFFLEVBQUU7NEJBQ1gsVUFBVSxFQUFFLEVBQUU7NEJBQ2QsS0FBSyxFQUFFLEVBQUU7eUJBQ1Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBEYXRhR2VuZXJhdG9yLCBBWFBFbnRpdHksIEFYUEVudGl0eUNvbW1hbmRTY29wZSwgQVhQRW50aXR5UXVlcnlUeXBlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgYXBwbHlGaWx0ZXJBcnJheSwgYXBwbHlTb3J0QXJyYXkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV2lkZ2V0c0NhdGFsb2cgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9idWlsZGVyJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYW5ndWFnZU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQuc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYW5ndWFnZUVudGl0eUZhY3RvcnkoaW5qZWN0b3I6IEluamVjdG9yKTogUHJvbWlzZTxBWFBFbnRpdHkgfCBudWxsPiB7XG4gIGNvbnN0IGRhdGFTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KExhbmd1YWdlTWFuYWdlbWVudFNlcnZpY2UpO1xuXG4gIGNvbnN0IGVudGl0eURlZjogQVhQRW50aXR5ID0ge1xuICAgIG1vZHVsZTogJ2NvbW1vbicsXG4gICAgbmFtZTogJ2xhbmd1YWdlJyxcbiAgICBzb3VyY2U6ICdjb21tb24ubGFuZ3VhZ2UnLFxuICAgIHRpdGxlOiAnTGFuZ3VhZ2UnLFxuICAgIGZvcm1hdHM6IHtcbiAgICAgIGluZGl2aWR1YWw6ICdMYW5ndWFnZScsXG4gICAgICBwbHVyYWw6ICdMYW5ndWFnZXMnLFxuICAgIH0sXG4gICAgcmVsYXRlZEVudGl0aWVzOiBbXSxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdsYW5ndWFnZScsXG4gICAgICAgIHRpdGxlOiAnTGFuZ3VhZ2UnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgdGl0bGU6ICdUaXRsZScsXG4gICAgICAgIGdyb3VwSWQ6ICdsYW5ndWFnZScsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRhdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydWxlOiAncmVxdWlyZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgIHRpdGxlOiAnQ29kZScsXG4gICAgICAgIGdyb3VwSWQ6ICdsYW5ndWFnZScsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb2x1bW5zOiBbeyBuYW1lOiAndGl0bGUnIH0sIHsgbmFtZTogJ2NvZGUnIH1dLFxuICAgIGNvbW1hbmRzOiB7XG4gICAgICBjcmVhdGU6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgeyBpZDogQVhQRGF0YUdlbmVyYXRvci51dWlkKCkgfSk7XG5cbiAgICAgICAgICBkYXRhU2VydmljZS5sYW5ndWFnZURhdGFQcm92aWRlci5pbnNlcnRPbmUoZW50aXR5KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudGl0eSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGVsZXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpZDogYW55KSA9PiB7XG4gICAgICAgICAgYXdhaXQgYXdhaXQgZGF0YVNlcnZpY2UubGFuZ3VhZ2VEYXRhUHJvdmlkZXIuZGVsZXRlT25lKGlkKTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBkYXRhU2VydmljZS5sYW5ndWFnZURhdGFQcm92aWRlci51cGRhdGVPbmUoZGF0YS5pZCwgZGF0YSk7XG4gICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyaWVzOiB7XG4gICAgICBieUtleToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGF3YWl0IGRhdGFTZXJ2aWNlLmxhbmd1YWdlRGF0YVByb3ZpZGVyLmdldE9uZShpZCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoZW50aXR5KTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEFYUEVudGl0eVF1ZXJ5VHlwZS5TaW5nbGUsXG4gICAgICB9LFxuICAgICAgbGlzdDoge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGRhdGFTZXJ2aWNlLmxhbmd1YWdlRGF0YVByb3ZpZGVyLmdldEFsbCgpO1xuICAgICAgICAgIGNvbnN0IHNvcnRlZEl0ZW1zID0gYXBwbHlTb3J0QXJyYXkobGlzdCwgZS5zb3J0KTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gYXBwbHlGaWx0ZXJBcnJheShzb3J0ZWRJdGVtcywgZS5maWx0ZXIgPyBbZS5maWx0ZXJdIDogW10pO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgdG90YWw6IGZpbHRlcmVkSXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlcmVkSXRlbXMuc2xpY2UoZS5za2lwLCAoZS5za2lwID8/IDApICsgKGUudGFrZSA/PyAwKSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEFYUEVudGl0eVF1ZXJ5VHlwZS5MaXN0LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGludGVyZmFjZXM6IHtcbiAgICAgIG1hc3Rlcjoge1xuICAgICAgICBjcmVhdGU6IHtcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ2xhbmd1YWdlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGU6IHtcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ2xhbmd1YWdlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBzaW5nbGU6IHtcbiAgICAgICAgICB0aXRsZTogJ3t7dGl0bGV9fScsXG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdsYW5ndWFnZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhY3Rpb25zOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgbGlzdDoge1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6ICdDcmVhdGUgTmV3JyxcbiAgICAgICAgICAgICAgY29tbWFuZDogJ2NyZWF0ZS1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgICAgc2NvcGU6IEFYUEVudGl0eUNvbW1hbmRTY29wZS5UeXBlTGV2ZWwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBJdGVtcycsXG4gICAgICAgICAgICAgIGNvbW1hbmQ6ICdkZWxldGUtZW50aXR5JyxcbiAgICAgICAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuU2VsZWN0ZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aXRsZTogJ0RldGFpbHMnLFxuICAgICAgICAgICAgICBjb21tYW5kOiAnb3Blbi1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAndmlldycsXG4gICAgICAgICAgICAgIHNjb3BlOiBBWFBFbnRpdHlDb21tYW5kU2NvcGUuSW5kaXZpZHVhbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiAnRGVsZXRlJyxcbiAgICAgICAgICAgICAgY29tbWFuZDogJ2RlbGV0ZS1lbnRpdHknLFxuICAgICAgICAgICAgICBwcmlvcml0eTogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgc2NvcGU6IEFYUEVudGl0eUNvbW1hbmRTY29wZS5JbmRpdmlkdWFsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZpZXdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICAgICAgICB0aXRsZTogJ0FsbCBJdGVtcycsXG4gICAgICAgICAgICAgIGZpeGVkOiB0cnVlLFxuICAgICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgICAgY29uZGl0aW9uczogW10sXG4gICAgICAgICAgICAgIHNvcnRzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZW50aXR5RGVmO1xufVxuIl19
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';
|
2
|
+
import { Inject, Injector, NgModule, Optional } from '@angular/core';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
export class LanguageManagementModule {
|
5
|
+
static forRoot() {
|
6
|
+
return {
|
7
|
+
ngModule: LanguageManagementModule,
|
8
|
+
providers: [
|
9
|
+
{
|
10
|
+
provide: 'AXP_REGISTER_LANGUAGE',
|
11
|
+
useFactory: async (entityRegistry, injector) => {
|
12
|
+
const languageEntity = await (await import('./entities/language.entity')).languageEntityFactory(injector);
|
13
|
+
entityRegistry.register(languageEntity);
|
14
|
+
},
|
15
|
+
deps: [AXPEntityDefinitionRegistryService, Injector], // Add any dependencies if needed
|
16
|
+
},
|
17
|
+
],
|
18
|
+
};
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* @ignore
|
22
|
+
*/
|
23
|
+
constructor(instances) { }
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: LanguageManagementModule, deps: [{ token: 'AXP_REGISTER_LANGUAGE', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
25
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: LanguageManagementModule }); }
|
26
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: LanguageManagementModule }); }
|
27
|
+
}
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: LanguageManagementModule, decorators: [{
|
29
|
+
type: NgModule,
|
30
|
+
args: [{
|
31
|
+
imports: [],
|
32
|
+
}]
|
33
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
34
|
+
type: Optional
|
35
|
+
}, {
|
36
|
+
type: Inject,
|
37
|
+
args: ['AXP_REGISTER_LANGUAGE']
|
38
|
+
}] }] });
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtbWFuYWdlbWVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvbGFuZ3VhZ2UtbWFuYWdlbWVudC9zcmMvbGliL2xhbmd1YWdlLW1hbmFnZW1lbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsxRixNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTztZQUNMLFFBQVEsRUFBRSx3QkFBd0I7WUFDbEMsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSx1QkFBdUI7b0JBQ2hDLFVBQVUsRUFBRSxLQUFLLEVBQUUsY0FBa0QsRUFBRSxRQUFrQixFQUFFLEVBQUU7d0JBQzNGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsY0FBcUIsQ0FBQyxDQUFDO29CQUNqRCxDQUFDO29CQUNELElBQUksRUFBRSxDQUFDLGtDQUFrQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLGlDQUFpQztpQkFDeEY7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUF5RCxTQUFnQixJQUFHLENBQUM7OEdBcEJsRSx3QkFBd0Isa0JBb0JILHVCQUF1QjsrR0FwQjVDLHdCQUF3QjsrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUhwQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxFQUFFO2lCQUNaOzswQkFxQmMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0b3IsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VtZW50TW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxMYW5ndWFnZU1hbmFnZW1lbnRNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IExhbmd1YWdlTWFuYWdlbWVudE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogJ0FYUF9SRUdJU1RFUl9MQU5HVUFHRScsXG4gICAgICAgICAgdXNlRmFjdG9yeTogYXN5bmMgKGVudGl0eVJlZ2lzdHJ5OiBBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlLCBpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlRW50aXR5ID0gYXdhaXQgKGF3YWl0IGltcG9ydCgnLi9lbnRpdGllcy9sYW5ndWFnZS5lbnRpdHknKSkubGFuZ3VhZ2VFbnRpdHlGYWN0b3J5KGluamVjdG9yKTtcbiAgICAgICAgICAgIGVudGl0eVJlZ2lzdHJ5LnJlZ2lzdGVyKGxhbmd1YWdlRW50aXR5IGFzIGFueSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXBzOiBbQVhQRW50aXR5RGVmaW5pdGlvblJlZ2lzdHJ5U2VydmljZSwgSW5qZWN0b3JdLCAvLyBBZGQgYW55IGRlcGVuZGVuY2llcyBpZiBuZWVkZWRcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KCdBWFBfUkVHSVNURVJfTEFOR1VBR0UnKSBpbnN0YW5jZXM6IGFueVtdKSB7fVxufVxuIl19
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { AXPEntityDataProviderImpl, AXPEntityStorageService } from '@acorex/platform/common';
|
2
|
+
import { Injectable, Injector } from '@angular/core';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
export class LanguageManagementService {
|
5
|
+
constructor(injector) {
|
6
|
+
const storageService = injector.get(AXPEntityStorageService);
|
7
|
+
//
|
8
|
+
this._languageDataProvider = new AXPEntityDataProviderImpl(storageService, 'language');
|
9
|
+
// this._languageDataProvider.initial(NOTIFICATION_TEMPLATES);
|
10
|
+
}
|
11
|
+
get languageDataProvider() {
|
12
|
+
return this._languageDataProvider;
|
13
|
+
}
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: LanguageManagementService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
15
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: LanguageManagementService, providedIn: 'root' }); }
|
16
|
+
}
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: LanguageManagementService, decorators: [{
|
18
|
+
type: Injectable,
|
19
|
+
args: [{
|
20
|
+
providedIn: 'root',
|
21
|
+
}]
|
22
|
+
}], ctorParameters: () => [{ type: i0.Injector }] });
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLW1hbmFnZW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9sYW5ndWFnZS1tYW5hZ2VtZW50L3NyYy9saWIvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLckQsTUFBTSxPQUFPLHlCQUF5QjtJQUdwQyxZQUFZLFFBQWtCO1FBQzVCLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUM3RCxFQUFFO1FBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUkseUJBQXlCLENBQU0sY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVGLDhEQUE4RDtJQUNoRSxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQzs4R0FaVSx5QkFBeUI7a0hBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzsyRkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQRW50aXR5RGF0YVByb3ZpZGVySW1wbCwgQVhQRW50aXR5U3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VtZW50U2VydmljZSB7XG4gIHByb3RlY3RlZCBfbGFuZ3VhZ2VEYXRhUHJvdmlkZXI6IGFueTtcblxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBjb25zdCBzdG9yYWdlU2VydmljZSA9IGluamVjdG9yLmdldChBWFBFbnRpdHlTdG9yYWdlU2VydmljZSk7XG4gICAgLy9cbiAgICB0aGlzLl9sYW5ndWFnZURhdGFQcm92aWRlciA9IG5ldyBBWFBFbnRpdHlEYXRhUHJvdmlkZXJJbXBsPGFueT4oc3RvcmFnZVNlcnZpY2UsICdsYW5ndWFnZScpO1xuICAgIC8vIHRoaXMuX2xhbmd1YWdlRGF0YVByb3ZpZGVyLmluaXRpYWwoTk9USUZJQ0FUSU9OX1RFTVBMQVRFUyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhbmd1YWdlRGF0YVByb3ZpZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZURhdGFQcm92aWRlcjtcbiAgfVxufVxuIl19
|
@@ -1,4 +1,7 @@
|
|
1
1
|
export * from './lib/notification-management.module';
|
2
|
+
export * from './lib/notification-management.type';
|
3
|
+
export * from './lib/notification.service';
|
2
4
|
export * from './lib/entities/notification-channel.entity';
|
3
5
|
export * from './lib/entities/notification-template.entity';
|
4
|
-
|
6
|
+
export * from './lib/entities/notification.entity';
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50LnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbnRpdGllcy9ub3RpZmljYXRpb24tY2hhbm5lbC5lbnRpdHknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW50aXRpZXMvbm90aWZpY2F0aW9uLXRlbXBsYXRlLmVudGl0eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbnRpdGllcy9ub3RpZmljYXRpb24uZW50aXR5JztcbiJdfQ==
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import { AXAvatarModule } from '@acorex/components/avatar';
|
2
|
+
import { AXBadgeModule } from '@acorex/components/badge';
|
3
|
+
import { AXButtonModule } from '@acorex/components/button';
|
4
|
+
import { AXDecoratorModule } from '@acorex/components/decorators';
|
5
|
+
import { AXImageModule } from '@acorex/components/image';
|
6
|
+
import { AXFormatModule } from '@acorex/core/format';
|
7
|
+
import { AXPSessionService } from '@acorex/platform/auth';
|
8
|
+
import { CommonModule } from '@angular/common';
|
9
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';
|
10
|
+
import { Router } from '@angular/router';
|
11
|
+
import * as i0 from "@angular/core";
|
12
|
+
import * as i1 from "@angular/common";
|
13
|
+
import * as i2 from "@acorex/components/button";
|
14
|
+
import * as i3 from "@acorex/components/decorators";
|
15
|
+
import * as i4 from "@acorex/components/avatar";
|
16
|
+
import * as i5 from "@acorex/components/image";
|
17
|
+
import * as i6 from "@acorex/core/format";
|
18
|
+
export class AXMAdminNotificationItemComponent {
|
19
|
+
constructor() {
|
20
|
+
this.data = input.required();
|
21
|
+
this.onPressNotificationItem = output();
|
22
|
+
this.router = inject(Router);
|
23
|
+
this.sessionStorage = inject(AXPSessionService);
|
24
|
+
this.differentTime = computed(() => Date.now() - this.data().createAt.getTime());
|
25
|
+
}
|
26
|
+
pressNotificationItem(id) {
|
27
|
+
this.onPressNotificationItem.emit(id);
|
28
|
+
//const [module, entity] = this.data().RelativeType?.split('.') as [string, string];
|
29
|
+
//const url = `${this.sessionStorage.application?.name}/m/${module}/e/${entity}/${this.data().RelativeId}`;
|
30
|
+
//console.log(url);
|
31
|
+
}
|
32
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
33
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMAdminNotificationItemComponent, isStandalone: true, selector: "axp-master-notification-item", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onPressNotificationItem: "onPressNotificationItem" }, ngImport: i0, template: "<div\n class=\"notification-item\"\n [id]=\"data().id\"\n (click)=\"pressNotificationItem(data().id)\"\n [class]=\"[data().template.prority, data().readAt ? 'read' : 'unread']\"\n>\n <ax-avatar look=\"rounded\" color=\"primary\">\n @if(data().user.image){\n <ax-image src=\"https://i.pravatar.cc/300\"></ax-image>\n }@else {\n <ax-icon>\n <i class=\"fa-solid fa-lock\"></i>\n </ax-icon>\n }\n </ax-avatar>\n <div>\n <div class=\"notification-item-title\">{{ data().title }}</div>\n <div class=\"notification-item-body\">{{ data().body }}</div>\n @if(true){\n <div>\n <div class=\"notification-file\">\n <ax-avatar color=\"primary\">\n <ax-icon>\n <i class=\"fa-solid fa-file-word ax-text-2xl\"></i>\n </ax-icon>\n </ax-avatar>\n <div>\n <div class=\"notification-file-name\">New project details.docx</div>\n <div class=\"notification-file-size\">250 KB</div>\n </div>\n <ax-button look=\"blank\">\n <ax-icon>\n <i class=\"fa-solid fa-download\"></i>\n </ax-icon>\n </ax-button>\n </div>\n </div>\n }\n <div class=\"notification-item-time\">{{ differentTime() | format : 'timeleft' | async }}</div>\n </div>\n @if(!data().template.isPinned){\n <div class=\"pin-notification\">\n <ax-icon>\n <i class=\"fa-solid fa-thumbtack\"></i>\n </ax-icon>\n </div>\n }\n</div>\n", styles: [".notification-item{position:relative;display:flex;cursor:pointer;gap:.75rem;overflow-x:hidden;padding:1rem}.notification-item.read{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.notification-item.unread{background:rgb(var(--ax-color-on-surface))}.notification-item:hover{background:rgba(var(--ax-color-primary-400),.1)}.notification-item.Notice:before,.notification-item.Danger:before,.notification-item.Warning:before{content:\"\";position:absolute;height:95%;width:.2rem;inset-inline-start:0;top:50%;transform:translateY(-50%)}.notification-item.Notice:before{background:rgb(var(--ax-color-success-500))}.notification-item.Danger:before{background:rgb(var(--ax-color-danger-500))}.notification-item.Warning:before{background:rgb(var(--ax-color-warning-500))}.notification-item ax-avatar ax-badge{position:absolute;bottom:0;inset-inline-end:.25rem;top:auto;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-surface),var(--tw-border-opacity))}.notification-item>div{display:flex;flex:1 1 0%;flex-direction:column}.notification-item>div .notification-item-title,.notification-item>div .notification-file-name{max-width:20rem;font-size:1rem;font-weight:600;line-height:1.5rem}.notification-item>div .notification-item-time,.notification-item>div .notification-file-size{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgba(var(--ax-color-neutral-400),var(--tw-text-opacity))}.notification-item>div .notification-item-body{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;max-width:20rem;font-size:.875rem;font-weight:400;line-height:1.5rem}.notification-item>ax-badge{position:absolute;top:1rem;inset-inline-end:1rem}.notification-item .notification-file{margin-top:.5rem;margin-bottom:.5rem;display:flex;gap:.5rem;border-radius:.5rem;border-width:1px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.5rem}.notification-item .notification-file>div{flex:1 1 0%}.notification-item .pin-notification{position:absolute;top:0;right:0;--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));padding:1rem;--tw-text-opacity: 1;color:rgba(var(--ax-color-neutral-400),var(--tw-text-opacity))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "component", type: i4.AXAvatarComponent, selector: "ax-avatar", inputs: ["color", "size", "look"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i5.AXImageComponent, selector: "ax-image", inputs: ["overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i6.AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
34
|
+
}
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationItemComponent, decorators: [{
|
36
|
+
type: Component,
|
37
|
+
args: [{ selector: 'axp-master-notification-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
38
|
+
CommonModule,
|
39
|
+
AXButtonModule,
|
40
|
+
AXDecoratorModule,
|
41
|
+
AXAvatarModule,
|
42
|
+
AXImageModule,
|
43
|
+
AXBadgeModule,
|
44
|
+
AXFormatModule,
|
45
|
+
], template: "<div\n class=\"notification-item\"\n [id]=\"data().id\"\n (click)=\"pressNotificationItem(data().id)\"\n [class]=\"[data().template.prority, data().readAt ? 'read' : 'unread']\"\n>\n <ax-avatar look=\"rounded\" color=\"primary\">\n @if(data().user.image){\n <ax-image src=\"https://i.pravatar.cc/300\"></ax-image>\n }@else {\n <ax-icon>\n <i class=\"fa-solid fa-lock\"></i>\n </ax-icon>\n }\n </ax-avatar>\n <div>\n <div class=\"notification-item-title\">{{ data().title }}</div>\n <div class=\"notification-item-body\">{{ data().body }}</div>\n @if(true){\n <div>\n <div class=\"notification-file\">\n <ax-avatar color=\"primary\">\n <ax-icon>\n <i class=\"fa-solid fa-file-word ax-text-2xl\"></i>\n </ax-icon>\n </ax-avatar>\n <div>\n <div class=\"notification-file-name\">New project details.docx</div>\n <div class=\"notification-file-size\">250 KB</div>\n </div>\n <ax-button look=\"blank\">\n <ax-icon>\n <i class=\"fa-solid fa-download\"></i>\n </ax-icon>\n </ax-button>\n </div>\n </div>\n }\n <div class=\"notification-item-time\">{{ differentTime() | format : 'timeleft' | async }}</div>\n </div>\n @if(!data().template.isPinned){\n <div class=\"pin-notification\">\n <ax-icon>\n <i class=\"fa-solid fa-thumbtack\"></i>\n </ax-icon>\n </div>\n }\n</div>\n", styles: [".notification-item{position:relative;display:flex;cursor:pointer;gap:.75rem;overflow-x:hidden;padding:1rem}.notification-item.read{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.notification-item.unread{background:rgb(var(--ax-color-on-surface))}.notification-item:hover{background:rgba(var(--ax-color-primary-400),.1)}.notification-item.Notice:before,.notification-item.Danger:before,.notification-item.Warning:before{content:\"\";position:absolute;height:95%;width:.2rem;inset-inline-start:0;top:50%;transform:translateY(-50%)}.notification-item.Notice:before{background:rgb(var(--ax-color-success-500))}.notification-item.Danger:before{background:rgb(var(--ax-color-danger-500))}.notification-item.Warning:before{background:rgb(var(--ax-color-warning-500))}.notification-item ax-avatar ax-badge{position:absolute;bottom:0;inset-inline-end:.25rem;top:auto;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-surface),var(--tw-border-opacity))}.notification-item>div{display:flex;flex:1 1 0%;flex-direction:column}.notification-item>div .notification-item-title,.notification-item>div .notification-file-name{max-width:20rem;font-size:1rem;font-weight:600;line-height:1.5rem}.notification-item>div .notification-item-time,.notification-item>div .notification-file-size{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgba(var(--ax-color-neutral-400),var(--tw-text-opacity))}.notification-item>div .notification-item-body{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;max-width:20rem;font-size:.875rem;font-weight:400;line-height:1.5rem}.notification-item>ax-badge{position:absolute;top:1rem;inset-inline-end:1rem}.notification-item .notification-file{margin-top:.5rem;margin-bottom:.5rem;display:flex;gap:.5rem;border-radius:.5rem;border-width:1px;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.5rem}.notification-item .notification-file>div{flex:1 1 0%}.notification-item .pin-notification{position:absolute;top:0;right:0;--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));padding:1rem;--tw-text-opacity: 1;color:rgba(var(--ax-color-neutral-400),var(--tw-text-opacity))}\n"] }]
|
46
|
+
}] });
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbm90aWZpY2F0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLWl0ZW0vYWRtaW4tbm90aWZpY2F0aW9uLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLWl0ZW0vYWRtaW4tbm90aWZpY2F0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQW1CekMsTUFBTSxPQUFPLGlDQUFpQztJQWhCOUM7UUFpQkUsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXVCLENBQUM7UUFDN0MsNEJBQXVCLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFFM0MsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTNDLGtCQUFhLEdBQUcsUUFBUSxDQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FRckY7SUFOQyxxQkFBcUIsQ0FBQyxFQUFVO1FBQzlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsb0ZBQW9GO1FBQ3BGLDJHQUEyRztRQUMzRyxtQkFBbUI7SUFDckIsQ0FBQzs4R0FkVSxpQ0FBaUM7a0dBQWpDLGlDQUFpQyx5UkM1QjlDLHM3Q0FnREEsdWdGRDdCSSxZQUFZLG1GQUNaLGNBQWMsdVpBQ2QsaUJBQWlCLCtIQUNqQixjQUFjLG9LQUNkLGFBQWEsaU1BQ2IsYUFBYSw4QkFDYixjQUFjOzsyRkFHTCxpQ0FBaUM7a0JBaEI3QyxTQUFTOytCQUNFLDhCQUE4QixtQkFHdkIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsY0FBYztxQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQXZhdGFyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2F2YXRhcic7XG5pbXBvcnQgeyBBWEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYSW1hZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvaW1hZ2UnO1xuaW1wb3J0IHsgQVhGb3JtYXRNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQVhNTm90aWZpY2F0aW9uSXRlbSB9IGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50LnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheHAtbWFzdGVyLW5vdGlmaWNhdGlvbi1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkbWluLW5vdGlmaWNhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWRtaW4tbm90aWZpY2F0aW9uLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhBdmF0YXJNb2R1bGUsXG4gICAgQVhJbWFnZU1vZHVsZSxcbiAgICBBWEJhZGdlTW9kdWxlLFxuICAgIEFYRm9ybWF0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1BZG1pbk5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQge1xuICBkYXRhID0gaW5wdXQucmVxdWlyZWQ8QVhNTm90aWZpY2F0aW9uSXRlbT4oKTtcbiAgb25QcmVzc05vdGlmaWNhdGlvbkl0ZW0gPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBzZXNzaW9uU3RvcmFnZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG5cbiAgZGlmZmVyZW50VGltZSA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4gRGF0ZS5ub3coKSAtIHRoaXMuZGF0YSgpLmNyZWF0ZUF0LmdldFRpbWUoKSk7XG5cbiAgcHJlc3NOb3RpZmljYXRpb25JdGVtKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uUHJlc3NOb3RpZmljYXRpb25JdGVtLmVtaXQoaWQpO1xuICAgIC8vY29uc3QgW21vZHVsZSwgZW50aXR5XSA9IHRoaXMuZGF0YSgpLlJlbGF0aXZlVHlwZT8uc3BsaXQoJy4nKSBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgIC8vY29uc3QgdXJsID0gYCR7dGhpcy5zZXNzaW9uU3RvcmFnZS5hcHBsaWNhdGlvbj8ubmFtZX0vbS8ke21vZHVsZX0vZS8ke2VudGl0eX0vJHt0aGlzLmRhdGEoKS5SZWxhdGl2ZUlkfWA7XG4gICAgLy9jb25zb2xlLmxvZyh1cmwpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibm90aWZpY2F0aW9uLWl0ZW1cIlxuICBbaWRdPVwiZGF0YSgpLmlkXCJcbiAgKGNsaWNrKT1cInByZXNzTm90aWZpY2F0aW9uSXRlbShkYXRhKCkuaWQpXCJcbiAgW2NsYXNzXT1cIltkYXRhKCkudGVtcGxhdGUucHJvcml0eSwgZGF0YSgpLnJlYWRBdCA/ICdyZWFkJyA6ICd1bnJlYWQnXVwiXG4+XG4gIDxheC1hdmF0YXIgbG9vaz1cInJvdW5kZWRcIiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICBAaWYoZGF0YSgpLnVzZXIuaW1hZ2Upe1xuICAgIDxheC1pbWFnZSBzcmM9XCJodHRwczovL2kucHJhdmF0YXIuY2MvMzAwXCI+PC9heC1pbWFnZT5cbiAgICB9QGVsc2Uge1xuICAgIDxheC1pY29uPlxuICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1sb2NrXCI+PC9pPlxuICAgIDwvYXgtaWNvbj5cbiAgICB9XG4gIDwvYXgtYXZhdGFyPlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24taXRlbS10aXRsZVwiPnt7IGRhdGEoKS50aXRsZSB9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24taXRlbS1ib2R5XCI+e3sgZGF0YSgpLmJvZHkgfX08L2Rpdj5cbiAgICBAaWYodHJ1ZSl7XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tZmlsZVwiPlxuICAgICAgICA8YXgtYXZhdGFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1maWxlLXdvcmQgYXgtdGV4dC0yeGxcIj48L2k+XG4gICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICA8L2F4LWF2YXRhcj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLWZpbGUtbmFtZVwiPk5ldyBwcm9qZWN0IGRldGFpbHMuZG9jeDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tZmlsZS1zaXplXCI+MjUwIEtCPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiPlxuICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24taXRlbS10aW1lXCI+e3sgZGlmZmVyZW50VGltZSgpIHwgZm9ybWF0IDogJ3RpbWVsZWZ0JyB8IGFzeW5jIH19PC9kaXY+XG4gIDwvZGl2PlxuICBAaWYoIWRhdGEoKS50ZW1wbGF0ZS5pc1Bpbm5lZCl7XG4gIDxkaXYgY2xhc3M9XCJwaW4tbm90aWZpY2F0aW9uXCI+XG4gICAgPGF4LWljb24+XG4gICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRodW1idGFja1wiPjwvaT5cbiAgICA8L2F4LWljb24+XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
|
@@ -0,0 +1,131 @@
|
|
1
|
+
import { AXBadgeModule } from '@acorex/components/badge';
|
2
|
+
import { AXButtonModule } from '@acorex/components/button';
|
3
|
+
import { AXDecoratorModule } from '@acorex/components/decorators';
|
4
|
+
import { AXPopoverModule } from '@acorex/components/popover';
|
5
|
+
import { AXTabsModule } from '@acorex/components/tabs';
|
6
|
+
import { AXToastService } from '@acorex/components/toast';
|
7
|
+
import { AXFormatModule } from '@acorex/core/format';
|
8
|
+
import { CommonModule } from '@angular/common';
|
9
|
+
import { ChangeDetectionStrategy, Component, computed, effect, inject, output, signal } from '@angular/core';
|
10
|
+
import { AXMNotificationService } from '../../notification.service';
|
11
|
+
import { AXMAdminNotificationItemComponent } from '../admin-notification-item/admin-notification-item.component';
|
12
|
+
import * as i0 from "@angular/core";
|
13
|
+
import * as i1 from "@acorex/components/button";
|
14
|
+
import * as i2 from "@acorex/components/tabs";
|
15
|
+
import * as i3 from "@acorex/components/decorators";
|
16
|
+
import * as i4 from "@acorex/components/badge";
|
17
|
+
export class AXMAdminNotificationPanelComponent {
|
18
|
+
constructor() {
|
19
|
+
this.onNewNotfication = output();
|
20
|
+
this.notificationService = inject(AXMNotificationService);
|
21
|
+
this.toastService = inject(AXToastService);
|
22
|
+
this.notifications = signal(undefined);
|
23
|
+
this.totalNotifications = signal(undefined);
|
24
|
+
this.tabItems = computed(() => this.getTabItems(this.notifications()), {
|
25
|
+
equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),
|
26
|
+
});
|
27
|
+
this.activeTab = signal('All');
|
28
|
+
this.NewNotification = computed(() => this.getNewNotification(this.tabItems()));
|
29
|
+
this.NewNotificationEffect = effect(() => this.onNewNotfication.emit(this.NewNotification()));
|
30
|
+
this.onPressNotificationItem = (id) => {
|
31
|
+
this.notifications.update((old) => old?.map((item) => (item.id === id && !item.readAt ? { ...item, readAt: new Date() } : item)));
|
32
|
+
};
|
33
|
+
}
|
34
|
+
changeActiveTab(tab) {
|
35
|
+
this.activeTab.set(tab);
|
36
|
+
}
|
37
|
+
ngOnInit() {
|
38
|
+
this.loadNotification();
|
39
|
+
}
|
40
|
+
async loadNotification() {
|
41
|
+
try {
|
42
|
+
const response = await this.notificationService.getList();
|
43
|
+
this.totalNotifications.set(response.total);
|
44
|
+
const orderedResponse = response.items.sort((a, b) => {
|
45
|
+
if (a.template.isPinned === b.template.isPinned) {
|
46
|
+
return new Date(a.createAt).getTime() - new Date(b.createAt).getTime();
|
47
|
+
}
|
48
|
+
return a.template.isPinned ? 1 : -1;
|
49
|
+
});
|
50
|
+
this.notifications.set(orderedResponse);
|
51
|
+
}
|
52
|
+
catch (error) {
|
53
|
+
this.toastService.show({
|
54
|
+
content: typeof error === 'string' ? error : 'Failed to load notifications!',
|
55
|
+
color: 'danger',
|
56
|
+
location: 'bottom-center',
|
57
|
+
closeButton: true,
|
58
|
+
timeOut: 3000,
|
59
|
+
timeOutProgress: true,
|
60
|
+
});
|
61
|
+
}
|
62
|
+
}
|
63
|
+
getTabItems(notifications) {
|
64
|
+
if (!notifications) {
|
65
|
+
return [
|
66
|
+
{
|
67
|
+
text: 'All',
|
68
|
+
//active: true,
|
69
|
+
count: 0,
|
70
|
+
},
|
71
|
+
];
|
72
|
+
}
|
73
|
+
const categoryCountMap = new Map();
|
74
|
+
notifications.forEach((notification) => {
|
75
|
+
const category = notification.template.category;
|
76
|
+
if (!categoryCountMap.has(category)) {
|
77
|
+
categoryCountMap.set(category, 0);
|
78
|
+
}
|
79
|
+
if (!notification.readAt) {
|
80
|
+
categoryCountMap.set(category, categoryCountMap.get(category) + 1);
|
81
|
+
}
|
82
|
+
});
|
83
|
+
const tabItems = Array.from(categoryCountMap.entries()).map(([category, count]) => ({
|
84
|
+
text: category,
|
85
|
+
count: count,
|
86
|
+
}));
|
87
|
+
const totalCount = Array.from(categoryCountMap.values()).reduce((a, b) => a + b, 0);
|
88
|
+
tabItems.unshift({
|
89
|
+
text: 'All',
|
90
|
+
count: totalCount,
|
91
|
+
});
|
92
|
+
return tabItems;
|
93
|
+
}
|
94
|
+
getNewNotification(data) {
|
95
|
+
const total = data.filter((tab) => tab.text !== 'All').reduce((sum, tab) => sum + tab.count, 0);
|
96
|
+
return total;
|
97
|
+
}
|
98
|
+
getNotificationItems(category) {
|
99
|
+
if (category === 'All') {
|
100
|
+
return this.notifications();
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
return this.notifications()?.filter((item) => item.template.category === category);
|
104
|
+
}
|
105
|
+
}
|
106
|
+
//
|
107
|
+
markAllAsRead() {
|
108
|
+
this.notifications.update((notification) => notification?.map((item) => {
|
109
|
+
if (!item.readAt) {
|
110
|
+
return { ...item, readAt: new Date() };
|
111
|
+
}
|
112
|
+
return item;
|
113
|
+
}));
|
114
|
+
}
|
115
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
116
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMAdminNotificationPanelComponent, isStandalone: true, selector: "axm-admin-notification-panel", outputs: { onNewNotfication: "onNewNotfication" }, ngImport: i0, template: "<div class=\"ax-p-4 ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-xl\">Notifications</span>\n <ax-button color=\"default\" look=\"blank\">\n <ax-icon>\n <i class=\"fa-regular fa-gear fa-lg\"></i>\n </ax-icon>\n </ax-button>\n</div>\n<ax-tabs [content]=\"cons\" look=\"with-line\" location=\"bottom\">\n @for(tab of tabItems(); track tab.text){\n <ax-tab-item [text]=\"tab.text\" [active]=\"activeTab() === tab.text\" (activeChange)=\"changeActiveTab(tab.text)\">\n <ax-suffix>\n @if(tab.count){\n <ax-badge [color]=\"activeTab() === tab.text ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"ax-max-h-[50vh] ax-overflow-y-auto\">\n @for(notif of getNotificationItems(tab.text); track notif.id){\n <axp-master-notification-item\n [data]=\"notif\"\n (onPressNotificationItem)=\"onPressNotificationItem($event)\"\n ></axp-master-notification-item>\n }\n </div>\n <div class=\"ax-flex ax-gap-4 ax-justify-between ax-p-4 ax-border-t ax-border-default\">\n <ax-button\n [disabled]=\"NewNotification() === 0\"\n color=\"ghost\"\n text=\"Mark all as read\"\n (onClick)=\"markAllAsRead()\"\n ></ax-button>\n <ax-button color=\"primary\" text=\"View all notifications\"></ax-button>\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #cons=\"axTabContent\"></ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "directive", type: i2.AXTabContentDirective, selector: "[axTabContent]", inputs: ["axTabContent"], exportAs: ["axTabContent"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i4.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: AXMAdminNotificationItemComponent, selector: "axp-master-notification-item", inputs: ["data"], outputs: ["onPressNotificationItem"] }, { kind: "ngmodule", type: AXFormatModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
117
|
+
}
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMAdminNotificationPanelComponent, decorators: [{
|
119
|
+
type: Component,
|
120
|
+
args: [{ selector: 'axm-admin-notification-panel', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
121
|
+
CommonModule,
|
122
|
+
AXButtonModule,
|
123
|
+
AXTabsModule,
|
124
|
+
AXDecoratorModule,
|
125
|
+
AXBadgeModule,
|
126
|
+
AXPopoverModule,
|
127
|
+
AXMAdminNotificationItemComponent,
|
128
|
+
AXFormatModule,
|
129
|
+
], template: "<div class=\"ax-p-4 ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-xl\">Notifications</span>\n <ax-button color=\"default\" look=\"blank\">\n <ax-icon>\n <i class=\"fa-regular fa-gear fa-lg\"></i>\n </ax-icon>\n </ax-button>\n</div>\n<ax-tabs [content]=\"cons\" look=\"with-line\" location=\"bottom\">\n @for(tab of tabItems(); track tab.text){\n <ax-tab-item [text]=\"tab.text\" [active]=\"activeTab() === tab.text\" (activeChange)=\"changeActiveTab(tab.text)\">\n <ax-suffix>\n @if(tab.count){\n <ax-badge [color]=\"activeTab() === tab.text ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"ax-max-h-[50vh] ax-overflow-y-auto\">\n @for(notif of getNotificationItems(tab.text); track notif.id){\n <axp-master-notification-item\n [data]=\"notif\"\n (onPressNotificationItem)=\"onPressNotificationItem($event)\"\n ></axp-master-notification-item>\n }\n </div>\n <div class=\"ax-flex ax-gap-4 ax-justify-between ax-p-4 ax-border-t ax-border-default\">\n <ax-button\n [disabled]=\"NewNotification() === 0\"\n color=\"ghost\"\n text=\"Mark all as read\"\n (onClick)=\"markAllAsRead()\"\n ></ax-button>\n <ax-button color=\"primary\" text=\"View all notifications\"></ax-button>\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #cons=\"axTabContent\"></ng-template>\n" }]
|
130
|
+
}] });
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbm90aWZpY2F0aW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9ub3RpZmljYXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2FkbWluLW5vdGlmaWNhdGlvbi1zbG90L2FkbWluLW5vdGlmaWNhdGlvbi1wYW5lbC9hZG1pbi1ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvYWRtaW4tbm90aWZpY2F0aW9uLXNsb3QvYWRtaW4tbm90aWZpY2F0aW9uLXBhbmVsL2FkbWluLW5vdGlmaWNhdGlvbi1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTXJILE9BQU8sRUFBRSxzQkFBc0Is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SSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQTBCLENBQUM7UUFDOUcsQ0FBQztJQUNILENBQUM7SUFDRCxFQUFFO0lBQ1EsYUFBYTtRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ3pDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQixPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0E1R1Usa0NBQWtDO2tHQUFsQyxrQ0FBa0MsMklDaEMvQywwaERBd0NBLDJDRGxCSSxZQUFZLDhCQUNaLGNBQWMsdVpBQ2QsWUFBWSwyaUJBQ1osaUJBQWlCLHVWQUNqQixhQUFhLHlJQUNiLGVBQWUsK0JBQ2YsaUNBQWlDLGdJQUNqQyxjQUFjOzsyRkFHTCxrQ0FBa0M7a0JBaEI5QyxTQUFTOytCQUNFLDhCQUE4QixjQUU1QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsaUNBQWlDO3dCQUNqQyxjQUFjO3FCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCYWRnZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRhYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGFicyc7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWEZvcm1hdE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhNTm90aWZpY2F0aW9uQ2F0ZWdvcnksXG4gIEFYTU5vdGlmaWNhdGlvbkl0ZW0sXG4gIEFYTU5vdGlmaWNhdGlvblJlc3BvbnNlLFxufSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb24tbWFuYWdlbWVudC50eXBlJztcbmltcG9ydCB7IEFYTU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBWE1BZG1pbk5vdGlmaWNhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9hZG1pbi1ub3RpZmljYXRpb24taXRlbS9hZG1pbi1ub3RpZmljYXRpb24taXRlbS5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLWFkbWluLW5vdGlmaWNhdGlvbi1wYW5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZG1pbi1ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWFRhYnNNb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWFBvcG92ZXJNb2R1bGUsXG4gICAgQVhNQWRtaW5Ob3RpZmljYXRpb25JdGVtQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1BZG1pbk5vdGlmaWNhdGlvblBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgb25OZXdOb3RmaWNhdGlvbiA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYTU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG5cbiAgbm90aWZpY2F0aW9ucyA9IHNpZ25hbDxBWE1Ob3RpZmljYXRpb25JdGVtW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHRvdGFsTm90aWZpY2F0aW9ucyA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgdGFiSXRlbXMgPSBjb21wdXRlZDxBWFRhYkRhdGFbXT4oKCkgPT4gdGhpcy5nZXRUYWJJdGVtcyh0aGlzLm5vdGlmaWNhdGlvbnMoKSksIHtcbiAgICBlcXVhbDogKGEsIGIpID0+IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKSxcbiAgfSk7XG4gIGFjdGl2ZVRhYiA9IHNpZ25hbDxBWE1UYWJEYXRhVGV4dD4oJ0FsbCcpO1xuXG4gIGNoYW5nZUFjdGl2ZVRhYih0YWI6IEFYTVRhYkRhdGFUZXh0KSB7XG4gICAgdGhpcy5hY3RpdmVUYWIuc2V0KHRhYik7XG4gIH1cblxuICBOZXdOb3RpZmljYXRpb24gPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHRoaXMuZ2V0TmV3Tm90aWZpY2F0aW9uKHRoaXMudGFiSXRlbXMoKSkpO1xuICBOZXdOb3RpZmljYXRpb25FZmZlY3QgPSBlZmZlY3QoKCkgPT4gdGhpcy5vbk5ld05vdGZpY2F0aW9uLmVtaXQodGhpcy5OZXdOb3RpZmljYXRpb24oKSkpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZE5vdGlmaWNhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTm90aWZpY2F0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZTogQVhNTm90aWZpY2F0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0TGlzdCgpO1xuICAgICAgdGhpcy50b3RhbE5vdGlmaWNhdGlvbnMuc2V0KHJlc3BvbnNlLnRvdGFsKTtcbiAgICAgIGNvbnN0IG9yZGVyZWRSZXNwb25zZSA9IHJlc3BvbnNlLml0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEudGVtcGxhdGUuaXNQaW5uZWQgPT09IGIudGVtcGxhdGUuaXNQaW5uZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5jcmVhdGVBdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5jcmVhdGVBdCkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLnRlbXBsYXRlLmlzUGlubmVkID8gMSA6IC0xO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc2V0KG9yZGVyZWRSZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICBjb250ZW50OiB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiAnRmFpbGVkIHRvIGxvYWQgbm90aWZpY2F0aW9ucyEnLFxuICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICB0aW1lT3V0OiAzMDAwLFxuICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25QcmVzc05vdGlmaWNhdGlvbkl0ZW0gPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIHRoaXMubm90aWZpY2F0aW9ucy51cGRhdGUoKG9sZCkgPT5cbiAgICAgIG9sZD8ubWFwKChpdGVtKSA9PiAoaXRlbS5pZCA9PT0gaWQgJiYgIWl0ZW0ucmVhZEF0ID8geyAuLi5pdGVtLCByZWFkQXQ6IG5ldyBEYXRlKCkgfSA6IGl0ZW0pKVxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBnZXRUYWJJdGVtcyhub3RpZmljYXRpb25zOiBBWE1Ob3RpZmljYXRpb25JdGVtW10gfCB1bmRlZmluZWQpOiBBWFRhYkRhdGFbXSB7XG4gICAgaWYgKCFub3RpZmljYXRpb25zKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0FsbCcsXG4gICAgICAgICAgLy9hY3RpdmU6IHRydWUsXG4gICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjYXRlZ29yeUNvdW50TWFwID0gbmV3IE1hcDxBWE1UYWJEYXRhVGV4dCwgbnVtYmVyPigpO1xuICAgIG5vdGlmaWNhdGlvbnMuZm9yRWFjaCgobm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjYXRlZ29yeSA9IG5vdGlmaWNhdGlvbi50ZW1wbGF0ZS5jYXRlZ29yeTtcbiAgICAgIGlmICghY2F0ZWdvcnlDb3VudE1hcC5oYXMoY2F0ZWdvcnkpKSB7XG4gICAgICAgIGNhdGVnb3J5Q291bnRNYXAuc2V0KGNhdGVnb3J5LCAwKTtcbiAgICAgIH1cbiAgICAgIGlmICghbm90aWZpY2F0aW9uLnJlYWRBdCkge1xuICAgICAgICBjYXRlZ29yeUNvdW50TWFwLnNldChjYXRlZ29yeSwgY2F0ZWdvcnlDb3VudE1hcC5nZXQoY2F0ZWdvcnkpISArIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRhYkl0ZW1zID0gQXJyYXkuZnJvbShjYXRlZ29yeUNvdW50TWFwLmVudHJpZXMoKSkubWFwKChbY2F0ZWdvcnksIGNvdW50XSkgPT4gKHtcbiAgICAgIHRleHQ6IGNhdGVnb3J5LFxuICAgICAgY291bnQ6IGNvdW50LFxuICAgIH0pKTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gQXJyYXkuZnJvbShjYXRlZ29yeUNvdW50TWFwLnZhbHVlcygpKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICB0YWJJdGVtcy51bnNoaWZ0KHtcbiAgICAgIHRleHQ6ICdBbGwnLFxuICAgICAgY291bnQ6IHRvdGFsQ291bnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRhYkl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXdOb3RpZmljYXRpb24oZGF0YTogQVhUYWJEYXRhW10pOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsID0gZGF0YS5maWx0ZXIoKHRhYikgPT4gdGFiLnRleHQgIT09ICdBbGwnKS5yZWR1Y2UoKHN1bSwgdGFiKSA9PiBzdW0gKyB0YWIuY291bnQsIDApO1xuICAgIHJldHVybiB0b3RhbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXROb3RpZmljYXRpb25JdGVtcyhjYXRlZ29yeTogQVhNVGFiRGF0YVRleHQpIHtcbiAgICBpZiAoY2F0ZWdvcnkgPT09ICdBbGwnKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RpZmljYXRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMoKT8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRlbXBsYXRlLmNhdGVnb3J5ID09PSBjYXRlZ29yeSkgYXMgQVhNTm90aWZpY2F0aW9uSXRlbVtdO1xuICAgIH1cbiAgfVxuICAvL1xuICBwcm90ZWN0ZWQgbWFya0FsbEFzUmVhZCgpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMudXBkYXRlKChub3RpZmljYXRpb24pID0+XG4gICAgICBub3RpZmljYXRpb24/Lm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0ucmVhZEF0KSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgcmVhZEF0OiBuZXcgRGF0ZSgpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEFYVGFiRGF0YSB7XG4gIHRleHQ6IEFYTVRhYkRhdGFUZXh0O1xuICBjb3VudDogbnVtYmVyO1xufVxudHlwZSBBWE1UYWJEYXRhVGV4dCA9IEFYTU5vdGlmaWNhdGlvbkNhdGVnb3J5IHwgJ0FsbCc7XG4iLCI8ZGl2IGNsYXNzPVwiYXgtcC00IGF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWl0ZW1zLWNlbnRlclwiPlxuICA8c3BhbiBjbGFzcz1cImF4LXRleHQteGxcIj5Ob3RpZmljYXRpb25zPC9zcGFuPlxuICA8YXgtYnV0dG9uIGNvbG9yPVwiZGVmYXVsdFwiIGxvb2s9XCJibGFua1wiPlxuICAgIDxheC1pY29uPlxuICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWdlYXIgZmEtbGdcIj48L2k+XG4gICAgPC9heC1pY29uPlxuICA8L2F4LWJ1dHRvbj5cbjwvZGl2PlxuPGF4LXRhYnMgW2NvbnRlbnRdPVwiY29uc1wiIGxvb2s9XCJ3aXRoLWxpbmVcIiBsb2NhdGlvbj1cImJvdHRvbVwiPlxuICBAZm9yKHRhYiBvZiB0YWJJdGVtcygpOyB0cmFjayB0YWIudGV4dCl7XG4gIDxheC10YWItaXRlbSBbdGV4dF09XCJ0YWIudGV4dFwiIFthY3RpdmVdPVwiYWN0aXZlVGFiKCkgPT09IHRhYi50ZXh0XCIgKGFjdGl2ZUNoYW5nZSk9XCJjaGFuZ2VBY3RpdmVUYWIodGFiLnRleHQpXCI+XG4gICAgPGF4LXN1ZmZpeD5cbiAgICAgIEBpZih0YWIuY291bnQpe1xuICAgICAgPGF4LWJhZGdlIFtjb2xvcl09XCJhY3RpdmVUYWIoKSA9PT0gdGFiLnRleHQgPyAncHJpbWFyeScgOiAnZ2hvc3QnXCIgW3RleHRdPVwidGFiLmNvdW50LnRvU3RyaW5nKClcIj48L2F4LWJhZGdlPlxuICAgICAgfVxuICAgIDwvYXgtc3VmZml4PlxuICAgIDxheC1jb250ZW50PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LW1heC1oLVs1MHZoXSBheC1vdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgQGZvcihub3RpZiBvZiBnZXROb3RpZmljYXRpb25JdGVtcyh0YWIudGV4dCk7IHRyYWNrIG5vdGlmLmlkKXtcbiAgICAgICAgPGF4cC1tYXN0ZXItbm90aWZpY2F0aW9uLWl0ZW1cbiAgICAgICAgICBbZGF0YV09XCJub3RpZlwiXG4gICAgICAgICAgKG9uUHJlc3NOb3RpZmljYXRpb25JdGVtKT1cIm9uUHJlc3NOb3RpZmljYXRpb25JdGVtKCRldmVudClcIlxuICAgICAgICA+PC9heHAtbWFzdGVyLW5vdGlmaWNhdGlvbi1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC00IGF4LWp1c3RpZnktYmV0d2VlbiBheC1wLTQgYXgtYm9yZGVyLXQgYXgtYm9yZGVyLWRlZmF1bHRcIj5cbiAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJOZXdOb3RpZmljYXRpb24oKSA9PT0gMFwiXG4gICAgICAgICAgY29sb3I9XCJnaG9zdFwiXG4gICAgICAgICAgdGV4dD1cIk1hcmsgYWxsIGFzIHJlYWRcIlxuICAgICAgICAgIChvbkNsaWNrKT1cIm1hcmtBbGxBc1JlYWQoKVwiXG4gICAgICAgID48L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0ZXh0PVwiVmlldyBhbGwgbm90aWZpY2F0aW9uc1wiPjwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9heC1jb250ZW50PlxuICA8L2F4LXRhYi1pdGVtPlxuICB9XG48L2F4LXRhYnM+XG5cbjxuZy10ZW1wbGF0ZSBbYXhUYWJDb250ZW50XSAjY29ucz1cImF4VGFiQ29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4iXX0=
|