@acorex/connectivity 21.0.0-next.15 → 21.0.0-next.17

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.
@@ -9,7 +9,7 @@ import { inject, Injectable, NgModule, Injector, runInInjectionContext, signal,
9
9
  import { AXMAssetManagementFeatureKeys, RootConfig as RootConfig$2, AXMAssetStatus } from '@acorex/modules/asset-management';
10
10
  import { AXMAssessmentManagementFeatureKeys, RootConfig as RootConfig$1, AXMAssessmentManagementPermissionKeys } from '@acorex/modules/assessment-management';
11
11
  import { AXPCommonFeatureKeys, AXPWidgetsList } from '@acorex/modules/common';
12
- import { AXMDataManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$2, RootConfig as RootConfig$c, AXMMetaDataDefinitionService, META_DATA_SELECTOR_FIELD, AXMQueryServiceImpl, AXMQueryService } from '@acorex/modules/data-management';
12
+ import { AXMDataManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$2, RootConfig as RootConfig$c, AXMMetaDataDefinitionService, META_DATA_SELECTOR_FIELD, AXMQueryServiceImpl, ShowMetaDataSelectorPopupCommand, AXMQueryService } from '@acorex/modules/data-management';
13
13
  import { AXPHumanCapitalManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$4, RootConfig as RootConfig$4 } from '@acorex/modules/human-capital-management';
14
14
  import { AXPSystemStatusType, AXPAppVersionService, AXPSystemStatuses, AXPFileStorageStatus, AXPFileStorageService, AXVChangeType as AXVChangeType$1, AXP_SEARCH_PROVIDER, AXPLockService, AXPVersioningService } from '@acorex/platform/common';
15
15
  import { RootConfig, AXMPermissionsKeys, AXMApplicationService, AXMEditionService } from '@acorex/modules/application-management';
@@ -1558,6 +1558,11 @@ const questionnaireMock = [
1558
1558
  title: 'Employee Annual Survey 2025',
1559
1559
  description: 'Annual employee satisfaction and engagement survey',
1560
1560
  type: 'survey',
1561
+ preEnabled: true,
1562
+ preContent: { 'en-US': '<p>Welcome to the Employee Annual Survey 2025.</p><p>This survey will take approximately 10 minutes. Your responses are confidential.</p><p>Click <strong>Start</strong> when you are ready to begin.</p>', 'fa-IR': '<p>به نظرسنجی سالانه کارکنان 2025 خوش آمدید.</p><p>این نظرسنجی حدود 10 دقیقه طول می‌کشد. پاسخ‌های شما محرمانه است.</p><p>وقتی آماده هستید روی <strong>شروع</strong> کلیک کنید.</p>' },
1563
+ postReviewEnabled: true,
1564
+ postSummaryEnabled: true,
1565
+ postSummaryContent: { 'en-US': '<p>Thank you for completing the survey!</p><p>Your score: <strong>{{score}}%</strong></p><p>You answered <strong>{{answeredCount}}</strong> of <strong>{{totalQuestions}}</strong> questions.</p>', 'fa-IR': '<p>از تکمیل نظرسنجی متشکریم!</p><p>امتیاز شما: <strong>{{score}}٪</strong></p><p>شما به <strong>{{answeredCount}}</strong> از <strong>{{totalQuestions}}</strong> سوال پاسخ دادید.</p>' },
1561
1566
  categoryIds: [QUESTIONNAIRE_CATEGORY_MOCK.find((c) => c.title === 'Annual Review').id],
1562
1567
  categories: [QUESTIONNAIRE_CATEGORY_MOCK.find((c) => c.title === 'Annual Review')],
1563
1568
  structure: {
@@ -8431,7 +8436,10 @@ const visibilityFilterMiddleware = {
8431
8436
  // The issue: we only have the paginated items, but need to filter ALL records to get correct total
8432
8437
  // Solution: Re-run the query with the same filters but without pagination to get all filtered records,
8433
8438
  // then apply visibility filtering, then recalculate total and re-apply pagination
8434
- if (ctx.result.items && Array.isArray(ctx.result.items)) {
8439
+ // Skip re-query for Policy entity - it's system config, avoids N+1 Policy queries from visibility filter
8440
+ const policyEntityFullName = `${RootConfig$5.module.name}.${RootConfig$5.entities.policy.name}`;
8441
+ const isPolicyEntity = ctx.entityName === policyEntityFullName;
8442
+ if (ctx.result.items && Array.isArray(ctx.result.items) && !isPolicyEntity) {
8435
8443
  const skip = ctx.request?.skip ?? 0;
8436
8444
  const take = ctx.request?.take ?? 0;
8437
8445
  // Re-run the query with the same filters but without pagination to get all filtered records
@@ -10321,11 +10329,15 @@ class AXCFileStorageService {
10321
10329
  if (!file) {
10322
10330
  throw new Error('File not found');
10323
10331
  }
10332
+ const metadata = request.metadata ?? {};
10324
10333
  const updatedFileInfo = {
10325
10334
  ...file,
10326
- ...request.metadata,
10335
+ ...metadata,
10327
10336
  name: request.name !== undefined ? request.name : file.name,
10328
10337
  isPrimary: request.isPrimary !== undefined ? request.isPrimary : file.isPrimary,
10338
+ // Persist optional title/description so findMany can return them
10339
+ ...(metadata['title'] !== undefined && { title: metadata['title'] }),
10340
+ ...(metadata['description'] !== undefined && { description: metadata['description'] }),
10329
10341
  };
10330
10342
  await db.files.put(updatedFileInfo);
10331
10343
  return this.mapToFileStorageInfo(updatedFileInfo);
@@ -10385,15 +10397,20 @@ class AXCFileStorageService {
10385
10397
  }
10386
10398
  async findMany(ids) {
10387
10399
  const files = await db.files.where('fileId').anyOf(ids).toArray();
10388
- return Promise.all(files.map(async (file) => ({
10389
- id: file.fileId,
10390
- fileId: file.fileId,
10391
- refId: file.refId,
10392
- refType: file.refType,
10393
- size: file.size,
10394
- name: file.name,
10395
- url: file.binary ? await this.fileService.blobToBase64(file.binary) : undefined,
10396
- })));
10400
+ return Promise.all(files.map(async (file) => {
10401
+ const record = file;
10402
+ return {
10403
+ id: file.fileId,
10404
+ fileId: file.fileId,
10405
+ refId: file.refId,
10406
+ refType: file.refType,
10407
+ size: file.size,
10408
+ name: file.name,
10409
+ url: file.binary ? await this.fileService.blobToBase64(file.binary) : undefined,
10410
+ ...(record['title'] !== undefined && { title: record['title'] }),
10411
+ ...(record['description'] !== undefined && { description: record['description'] }),
10412
+ };
10413
+ }));
10397
10414
  }
10398
10415
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCFileStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
10399
10416
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCFileStorageService }); }
@@ -15008,1941 +15025,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
15008
15025
  }]
15009
15026
  }] });
15010
15027
 
15011
- const REPORT_ID = AXPDataGenerator.uuid();
15012
- const child1 = {
15013
- id: AXPDataGenerator.uuid(),
15014
- title: 'Financial Reports',
15015
- parentId: REPORT_ID,
15016
- childrenCount: 0,
15017
- };
15018
- const child2 = {
15019
- id: AXPDataGenerator.uuid(),
15020
- title: 'User Reports',
15021
- parentId: REPORT_ID,
15022
- childrenCount: 0,
15023
- };
15024
- const child3 = {
15025
- id: AXPDataGenerator.uuid(),
15026
- title: 'System Reports',
15027
- parentId: REPORT_ID,
15028
- childrenCount: 0,
15029
- };
15030
- const QUERY_CATEGORY_MOCK = [
15031
- {
15032
- id: AXPDataGenerator.uuid(),
15033
- title: 'General Queries',
15034
- childrenCount: 0,
15035
- },
15036
- {
15037
- id: REPORT_ID,
15038
- title: 'Reports',
15039
- childrenCount: 3,
15040
- },
15041
- child1,
15042
- child2,
15043
- child3,
15044
- {
15045
- id: AXPDataGenerator.uuid(),
15046
- title: 'Analytics',
15047
- childrenCount: 0,
15048
- },
15049
- ];
15050
- const QUERY_MOCK = [
15051
- {
15052
- id: AXPDataGenerator.uuid(),
15053
- name: 'user-list-query',
15054
- title: 'User List Query',
15055
- categoryIds: [QUERY_CATEGORY_MOCK[0].id],
15056
- categories: [{ id: QUERY_CATEGORY_MOCK[0].id, title: QUERY_CATEGORY_MOCK[0].title }],
15057
- },
15058
- {
15059
- id: AXPDataGenerator.uuid(),
15060
- name: 'financial-report-query',
15061
- title: 'Financial Report Query',
15062
- categoryIds: [child1.id],
15063
- categories: [{ id: child1.id, title: child1.title }],
15064
- },
15065
- {
15066
- id: AXPDataGenerator.uuid(),
15067
- name: 'system-status-query',
15068
- title: 'System Status Query',
15069
- categoryIds: [child3.id],
15070
- categories: [{ id: child3.id, title: child3.title }],
15071
- },
15072
- {
15073
- id: AXPDataGenerator.uuid(),
15074
- name: 'analytics-dashboard-query',
15075
- title: 'Analytics Dashboard Query',
15076
- categoryIds: [QUERY_CATEGORY_MOCK[5].id],
15077
- categories: [{ id: QUERY_CATEGORY_MOCK[5].id, title: QUERY_CATEGORY_MOCK[5].title }],
15078
- },
15079
- ];
15080
-
15081
- class AXCQueryDataSeeder {
15082
- constructor() {
15083
- this.storageService = inject(AXPEntityStorageService);
15084
- }
15085
- async seed() {
15086
- await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.queryCategory.name}`, QUERY_CATEGORY_MOCK);
15087
- await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.query.name}`, QUERY_MOCK);
15088
- }
15089
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
15090
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryDataSeeder }); }
15091
- }
15092
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryDataSeeder, decorators: [{
15093
- type: Injectable
15094
- }] });
15095
-
15096
- const metadataCategoryMocks = (() => {
15097
- const ids = new Map();
15098
- // Root categories
15099
- const general = {
15100
- id: AXPDataGenerator.uuid(),
15101
- title: 'General',
15102
- description: 'Common metadata fields used across all document types',
15103
- parentId: undefined,
15104
- childrenCount: 0,
15105
- };
15106
- ids.set('General', general.id);
15107
- const location = {
15108
- id: AXPDataGenerator.uuid(),
15109
- title: 'Location',
15110
- description: 'Geographic location metadata (country, province, city)',
15111
- parentId: undefined,
15112
- childrenCount: 0,
15113
- };
15114
- ids.set('Location', location.id);
15115
- const documentManagement = {
15116
- id: AXPDataGenerator.uuid(),
15117
- title: 'Document Management',
15118
- description: 'Document creation, storage, and retrieval metadata',
15119
- parentId: undefined,
15120
- childrenCount: 3,
15121
- };
15122
- ids.set('Document Management', documentManagement.id);
15123
- const qualityControl = {
15124
- id: AXPDataGenerator.uuid(),
15125
- title: 'Quality Control',
15126
- description: 'Quality assurance and control metadata',
15127
- parentId: undefined,
15128
- childrenCount: 3,
15129
- };
15130
- ids.set('Quality Control', qualityControl.id);
15131
- const compliance = {
15132
- id: AXPDataGenerator.uuid(),
15133
- title: 'Compliance',
15134
- description: 'Regulatory compliance and audit metadata',
15135
- parentId: undefined,
15136
- childrenCount: 3,
15137
- };
15138
- ids.set('Compliance', compliance.id);
15139
- const projectManagement = {
15140
- id: AXPDataGenerator.uuid(),
15141
- title: 'Project Management',
15142
- description: 'Project planning and execution metadata',
15143
- parentId: undefined,
15144
- childrenCount: 3,
15145
- };
15146
- ids.set('Project Management', projectManagement.id);
15147
- const electronicsAndAppliances = {
15148
- id: AXPDataGenerator.uuid(),
15149
- title: 'Electronics & Appliances',
15150
- description: 'Electronics and home appliances metadata',
15151
- parentId: undefined,
15152
- childrenCount: 7,
15153
- };
15154
- ids.set('Electronics & Appliances', electronicsAndAppliances.id);
15155
- // Document Management children
15156
- const versionControl = {
15157
- id: AXPDataGenerator.uuid(),
15158
- title: 'Version Control',
15159
- description: 'Document versioning and change tracking',
15160
- parentId: documentManagement.id,
15161
- childrenCount: 0,
15162
- };
15163
- ids.set('Version Control', versionControl.id);
15164
- const accessControl = {
15165
- id: AXPDataGenerator.uuid(),
15166
- title: 'Access Control',
15167
- description: 'User permissions and access management',
15168
- parentId: documentManagement.id,
15169
- childrenCount: 0,
15170
- };
15171
- ids.set('Access Control', accessControl.id);
15172
- const documentTypes = {
15173
- id: AXPDataGenerator.uuid(),
15174
- title: 'Document Types',
15175
- description: 'Classification and categorization of documents',
15176
- parentId: documentManagement.id,
15177
- childrenCount: 0,
15178
- };
15179
- ids.set('Document Types', documentTypes.id);
15180
- // Quality Control children
15181
- const standards = {
15182
- id: AXPDataGenerator.uuid(),
15183
- title: 'Standards',
15184
- description: 'Quality standards and specifications',
15185
- parentId: qualityControl.id,
15186
- childrenCount: 0,
15187
- };
15188
- ids.set('Standards', standards.id);
15189
- const testing = {
15190
- id: AXPDataGenerator.uuid(),
15191
- title: 'Testing',
15192
- description: 'Test procedures and results tracking',
15193
- parentId: qualityControl.id,
15194
- childrenCount: 0,
15195
- };
15196
- ids.set('Testing', testing.id);
15197
- const validation = {
15198
- id: AXPDataGenerator.uuid(),
15199
- title: 'Validation',
15200
- description: 'Data validation and verification processes',
15201
- parentId: qualityControl.id,
15202
- childrenCount: 0,
15203
- };
15204
- ids.set('Validation', validation.id);
15205
- // Compliance children
15206
- const regulations = {
15207
- id: AXPDataGenerator.uuid(),
15208
- title: 'Regulations',
15209
- description: 'Regulatory requirements and compliance rules',
15210
- parentId: compliance.id,
15211
- childrenCount: 0,
15212
- };
15213
- ids.set('Regulations', regulations.id);
15214
- const auditTrail = {
15215
- id: AXPDataGenerator.uuid(),
15216
- title: 'Audit Trail',
15217
- description: 'Activity logging and audit documentation',
15218
- parentId: compliance.id,
15219
- childrenCount: 0,
15220
- };
15221
- ids.set('Audit Trail', auditTrail.id);
15222
- const certifications = {
15223
- id: AXPDataGenerator.uuid(),
15224
- title: 'Certifications',
15225
- description: 'Certification and accreditation tracking',
15226
- parentId: compliance.id,
15227
- childrenCount: 0,
15228
- };
15229
- ids.set('Certifications', certifications.id);
15230
- // Project Management children
15231
- const planning = {
15232
- id: AXPDataGenerator.uuid(),
15233
- title: 'Planning',
15234
- description: 'Project planning and scheduling metadata',
15235
- parentId: projectManagement.id,
15236
- childrenCount: 0,
15237
- };
15238
- ids.set('Planning', planning.id);
15239
- const resources = {
15240
- id: AXPDataGenerator.uuid(),
15241
- title: 'Resources',
15242
- description: 'Resource allocation and management',
15243
- parentId: projectManagement.id,
15244
- childrenCount: 0,
15245
- };
15246
- ids.set('Resources', resources.id);
15247
- const timeline = {
15248
- id: AXPDataGenerator.uuid(),
15249
- title: 'Timeline',
15250
- description: 'Project timeline and milestone tracking',
15251
- parentId: projectManagement.id,
15252
- childrenCount: 0,
15253
- };
15254
- ids.set('Timeline', timeline.id);
15255
- // Electronics & Appliances children
15256
- const mobilePhonesAndTablets = {
15257
- id: AXPDataGenerator.uuid(),
15258
- title: 'Mobile Phones & Tablets',
15259
- description: 'Mobile phones, smartphones, and tablet devices',
15260
- parentId: electronicsAndAppliances.id,
15261
- childrenCount: 0,
15262
- };
15263
- ids.set('Mobile Phones & Tablets', mobilePhonesAndTablets.id);
15264
- const laptopsAndComputers = {
15265
- id: AXPDataGenerator.uuid(),
15266
- title: 'Laptops & Computers',
15267
- description: 'Laptops, desktops, and computer systems',
15268
- parentId: electronicsAndAppliances.id,
15269
- childrenCount: 0,
15270
- };
15271
- ids.set('Laptops & Computers', laptopsAndComputers.id);
15272
- const monitors = {
15273
- id: AXPDataGenerator.uuid(),
15274
- title: 'Monitors',
15275
- description: 'Computer monitors and display screens',
15276
- parentId: electronicsAndAppliances.id,
15277
- childrenCount: 0,
15278
- };
15279
- ids.set('Monitors', monitors.id);
15280
- const accessories = {
15281
- id: AXPDataGenerator.uuid(),
15282
- title: 'Accessories (Cables, Chargers, Cases…)',
15283
- description: 'Electronic accessories including cables, chargers, cases, and more',
15284
- parentId: electronicsAndAppliances.id,
15285
- childrenCount: 0,
15286
- };
15287
- ids.set('Accessories (Cables, Chargers, Cases…)', accessories.id);
15288
- const homeAppliances = {
15289
- id: AXPDataGenerator.uuid(),
15290
- title: 'Home Appliances',
15291
- description: 'Home and kitchen appliances',
15292
- parentId: electronicsAndAppliances.id,
15293
- childrenCount: 0,
15294
- };
15295
- ids.set('Home Appliances', homeAppliances.id);
15296
- const audioAndVideo = {
15297
- id: AXPDataGenerator.uuid(),
15298
- title: 'Audio & Video',
15299
- description: 'Audio and video equipment and devices',
15300
- parentId: electronicsAndAppliances.id,
15301
- childrenCount: 0,
15302
- };
15303
- ids.set('Audio & Video', audioAndVideo.id);
15304
- const cameras = {
15305
- id: AXPDataGenerator.uuid(),
15306
- title: 'Cameras',
15307
- description: 'Digital cameras and photography equipment',
15308
- parentId: electronicsAndAppliances.id,
15309
- childrenCount: 0,
15310
- };
15311
- ids.set('Cameras', cameras.id);
15312
- return [
15313
- general,
15314
- location,
15315
- documentManagement,
15316
- qualityControl,
15317
- compliance,
15318
- projectManagement,
15319
- electronicsAndAppliances,
15320
- versionControl,
15321
- accessControl,
15322
- documentTypes,
15323
- standards,
15324
- testing,
15325
- validation,
15326
- regulations,
15327
- auditTrail,
15328
- certifications,
15329
- planning,
15330
- resources,
15331
- timeline,
15332
- mobilePhonesAndTablets,
15333
- laptopsAndComputers,
15334
- monitors,
15335
- accessories,
15336
- homeAppliances,
15337
- audioAndVideo,
15338
- cameras,
15339
- ];
15340
- })();
15341
-
15342
- const findCategory$2 = (title) => metadataCategoryMocks.find((cat) => cat.title === title);
15343
- const METADATA_MOCK = [
15344
- // General - Common metadata fields
15345
- {
15346
- id: AXPDataGenerator.uuid(),
15347
- name: 'title',
15348
- title: 'Title',
15349
- defaultValue: '',
15350
- interface: titleInterface,
15351
- categoryIds: [findCategory$2('General').id],
15352
- categories: [findCategory$2('General')],
15353
- },
15354
- {
15355
- id: AXPDataGenerator.uuid(),
15356
- name: 'description',
15357
- title: 'Description',
15358
- defaultValue: '',
15359
- interface: descriptionInterface,
15360
- categoryIds: [findCategory$2('General').id],
15361
- categories: [findCategory$2('General')],
15362
- },
15363
- {
15364
- id: AXPDataGenerator.uuid(),
15365
- name: 'created-date',
15366
- title: 'Created Date',
15367
- defaultValue: '',
15368
- interface: dateInterface,
15369
- categoryIds: [findCategory$2('General').id],
15370
- categories: [findCategory$2('General')],
15371
- },
15372
- {
15373
- id: AXPDataGenerator.uuid(),
15374
- name: 'status',
15375
- title: 'Status',
15376
- defaultValue: 'Draft',
15377
- interface: {
15378
- type: 'select-editor',
15379
- options: {
15380
- dataSource: [
15381
- { id: 'Draft', title: 'Draft' },
15382
- { id: 'In Review', title: 'In Review' },
15383
- { id: 'Approved', title: 'Approved' },
15384
- { id: 'Published', title: 'Published' },
15385
- { id: 'Archived', title: 'Archived' },
15386
- ],
15387
- placeholder: 'Select status',
15388
- },
15389
- },
15390
- categoryIds: [findCategory$2('General').id],
15391
- categories: [findCategory$2('General')],
15392
- },
15393
- {
15394
- id: AXPDataGenerator.uuid(),
15395
- name: 'priority',
15396
- title: 'Priority',
15397
- defaultValue: 'Medium',
15398
- interface: {
15399
- type: 'select-editor',
15400
- options: {
15401
- dataSource: [
15402
- { id: 'Low', title: 'Low' },
15403
- { id: 'Medium', title: 'Medium' },
15404
- { id: 'High', title: 'High' },
15405
- { id: 'Critical', title: 'Critical' },
15406
- ],
15407
- placeholder: 'Select priority',
15408
- },
15409
- },
15410
- categoryIds: [findCategory$2('General').id],
15411
- categories: [findCategory$2('General')],
15412
- },
15413
- {
15414
- id: AXPDataGenerator.uuid(),
15415
- name: 'tags',
15416
- title: 'Tags',
15417
- defaultValue: '',
15418
- interface: textAreaInterface,
15419
- categoryIds: [findCategory$2('General').id],
15420
- categories: [findCategory$2('General')],
15421
- },
15422
- {
15423
- id: AXPDataGenerator.uuid(),
15424
- name: 'keywords',
15425
- title: 'Keywords',
15426
- defaultValue: '',
15427
- interface: textAreaInterface,
15428
- categoryIds: [findCategory$2('General').id],
15429
- categories: [findCategory$2('General')],
15430
- },
15431
- {
15432
- id: AXPDataGenerator.uuid(),
15433
- name: 'language',
15434
- title: 'Language',
15435
- defaultValue: 'English',
15436
- interface: {
15437
- type: 'select-editor',
15438
- options: {
15439
- dataSource: [
15440
- { id: 'English', title: 'English' },
15441
- { id: 'Spanish', title: 'Spanish' },
15442
- { id: 'French', title: 'French' },
15443
- { id: 'German', title: 'German' },
15444
- { id: 'Chinese', title: 'Chinese' },
15445
- { id: 'Japanese', title: 'Japanese' },
15446
- { id: 'Arabic', title: 'Arabic' },
15447
- { id: 'Portuguese', title: 'Portuguese' },
15448
- ],
15449
- placeholder: 'Select language',
15450
- },
15451
- },
15452
- categoryIds: [findCategory$2('General').id],
15453
- categories: [findCategory$2('General')],
15454
- },
15455
- {
15456
- id: AXPDataGenerator.uuid(),
15457
- name: 'is-confidential',
15458
- title: 'Confidential',
15459
- defaultValue: 'false',
15460
- interface: checkboxInterface,
15461
- categoryIds: [findCategory$2('General').id],
15462
- categories: [findCategory$2('General')],
15463
- },
15464
- // Location - Country / Province / City (uses existing datasources: countries, provinces, cities)
15465
- {
15466
- id: AXPDataGenerator.uuid(),
15467
- name: 'country',
15468
- title: 'Country',
15469
- defaultValue: '',
15470
- interface: {
15471
- type: 'select-editor',
15472
- options: {
15473
- dataSource: 'countries',
15474
- valueField: 'id',
15475
- textField: 'title',
15476
- placeholder: 'Select country',
15477
- hasClearButton: true,
15478
- },
15479
- },
15480
- categoryIds: [findCategory$2('Location').id],
15481
- categories: [findCategory$2('Location')],
15482
- },
15483
- {
15484
- id: AXPDataGenerator.uuid(),
15485
- name: 'province',
15486
- title: 'Province',
15487
- defaultValue: '',
15488
- interface: {
15489
- type: 'select-editor',
15490
- options: {
15491
- dataSource: 'provinces',
15492
- valueField: 'id',
15493
- textField: 'title',
15494
- placeholder: 'Select province',
15495
- hasClearButton: true,
15496
- filter: {
15497
- logic: 'and',
15498
- filters: [
15499
- { field: 'parentId', operator: { type: 'equal' }, value: '{{ context.eval("country.id") }}' },
15500
- ],
15501
- },
15502
- },
15503
- triggers: [{ event: "{{ events.context('country') }}", action: '{{ widget.refresh() }}' }],
15504
- },
15505
- categoryIds: [findCategory$2('Location').id],
15506
- categories: [findCategory$2('Location')],
15507
- },
15508
- {
15509
- id: AXPDataGenerator.uuid(),
15510
- name: 'city',
15511
- title: 'City',
15512
- defaultValue: '',
15513
- interface: {
15514
- type: 'select-editor',
15515
- options: {
15516
- dataSource: 'cities',
15517
- valueField: 'id',
15518
- textField: 'title',
15519
- placeholder: 'Select city',
15520
- hasClearButton: true,
15521
- filter: {
15522
- logic: 'and',
15523
- filters: [
15524
- { field: 'parentId', operator: { type: 'equal' }, value: '{{ context.eval("province.id") }}' },
15525
- ],
15526
- },
15527
- },
15528
- triggers: [{ event: "{{ events.context('province') }}", action: '{{ widget.refresh() }}' }],
15529
- },
15530
- categoryIds: [findCategory$2('Location').id],
15531
- categories: [findCategory$2('Location')],
15532
- },
15533
- // Document Management - Version Control
15534
- {
15535
- id: AXPDataGenerator.uuid(),
15536
- name: 'document-title',
15537
- title: 'Document Title',
15538
- defaultValue: '',
15539
- interface: titleInterface,
15540
- categoryIds: [findCategory$2('Version Control').id],
15541
- categories: [findCategory$2('Version Control')],
15542
- },
15543
- {
15544
- id: AXPDataGenerator.uuid(),
15545
- name: 'document-version',
15546
- title: 'Document Version',
15547
- defaultValue: '1.0',
15548
- interface: versionInterface,
15549
- categoryIds: [findCategory$2('Version Control').id],
15550
- categories: [findCategory$2('Version Control')],
15551
- },
15552
- {
15553
- id: AXPDataGenerator.uuid(),
15554
- name: 'last-modified',
15555
- title: 'Last Modified',
15556
- defaultValue: '',
15557
- interface: dateInterface,
15558
- categoryIds: [findCategory$2('Version Control').id],
15559
- categories: [findCategory$2('Version Control')],
15560
- },
15561
- {
15562
- id: AXPDataGenerator.uuid(),
15563
- name: 'change-log',
15564
- title: 'Change Log',
15565
- defaultValue: '',
15566
- interface: textAreaInterface,
15567
- categoryIds: [findCategory$2('Version Control').id],
15568
- categories: [findCategory$2('Version Control')],
15569
- },
15570
- // Document Management - Access Control
15571
- {
15572
- id: AXPDataGenerator.uuid(),
15573
- name: 'access-level',
15574
- title: 'Access Level',
15575
- defaultValue: 'Public',
15576
- interface: {
15577
- type: 'select-editor',
15578
- options: {
15579
- dataSource: [
15580
- { id: 'Public', title: 'Public' },
15581
- { id: 'Internal', title: 'Internal' },
15582
- { id: 'Confidential', title: 'Confidential' },
15583
- { id: 'Restricted', title: 'Restricted' },
15584
- { id: 'Private', title: 'Private' },
15585
- ],
15586
- placeholder: 'Select access level',
15587
- },
15588
- },
15589
- categoryIds: [findCategory$2('Access Control').id],
15590
- categories: [findCategory$2('Access Control')],
15591
- },
15592
- {
15593
- id: AXPDataGenerator.uuid(),
15594
- name: 'permissions',
15595
- title: 'Permissions',
15596
- defaultValue: '',
15597
- interface: textAreaInterface,
15598
- categoryIds: [findCategory$2('Access Control').id],
15599
- categories: [findCategory$2('Access Control')],
15600
- },
15601
- // Document Management - Document Types
15602
- {
15603
- id: AXPDataGenerator.uuid(),
15604
- name: 'document-type',
15605
- title: 'Document Type',
15606
- defaultValue: '',
15607
- interface: {
15608
- type: 'select-editor',
15609
- options: {
15610
- dataSource: [
15611
- { id: 'Report', title: 'Report' },
15612
- { id: 'Manual', title: 'Manual' },
15613
- { id: 'Policy', title: 'Policy' },
15614
- { id: 'Procedure', title: 'Procedure' },
15615
- { id: 'Form', title: 'Form' },
15616
- { id: 'Contract', title: 'Contract' },
15617
- { id: 'Specification', title: 'Specification' },
15618
- ],
15619
- placeholder: 'Select document type',
15620
- },
15621
- },
15622
- categoryIds: [findCategory$2('Document Types').id],
15623
- categories: [findCategory$2('Document Types')],
15624
- },
15625
- {
15626
- id: AXPDataGenerator.uuid(),
15627
- name: 'document-category',
15628
- title: 'Document Category',
15629
- defaultValue: '',
15630
- interface: {
15631
- type: 'select-editor',
15632
- options: {
15633
- dataSource: [
15634
- { id: 'Technical', title: 'Technical' },
15635
- { id: 'Administrative', title: 'Administrative' },
15636
- { id: 'Legal', title: 'Legal' },
15637
- { id: 'Financial', title: 'Financial' },
15638
- { id: 'HR', title: 'HR' },
15639
- { id: 'Marketing', title: 'Marketing' },
15640
- ],
15641
- placeholder: 'Select document category',
15642
- },
15643
- },
15644
- categoryIds: [findCategory$2('Document Types').id],
15645
- categories: [findCategory$2('Document Types')],
15646
- },
15647
- {
15648
- id: AXPDataGenerator.uuid(),
15649
- name: 'file-format',
15650
- title: 'File Format',
15651
- defaultValue: '',
15652
- interface: {
15653
- type: 'select-editor',
15654
- options: {
15655
- dataSource: [
15656
- { id: 'PDF', title: 'PDF' },
15657
- { id: 'DOCX', title: 'DOCX' },
15658
- { id: 'XLSX', title: 'XLSX' },
15659
- { id: 'PPTX', title: 'PPTX' },
15660
- { id: 'TXT', title: 'TXT' },
15661
- { id: 'HTML', title: 'HTML' },
15662
- { id: 'XML', title: 'XML' },
15663
- { id: 'JSON', title: 'JSON' },
15664
- ],
15665
- placeholder: 'Select file format',
15666
- },
15667
- },
15668
- categoryIds: [findCategory$2('Document Types').id],
15669
- categories: [findCategory$2('Document Types')],
15670
- },
15671
- // Quality Control - Standards
15672
- {
15673
- id: AXPDataGenerator.uuid(),
15674
- name: 'quality-standard',
15675
- title: 'Quality Standard',
15676
- defaultValue: '',
15677
- interface: {
15678
- type: 'select-editor',
15679
- options: {
15680
- dataSource: [
15681
- { id: 'ISO 9001', title: 'ISO 9001' },
15682
- { id: 'ISO 14001', title: 'ISO 14001' },
15683
- { id: 'ISO 27001', title: 'ISO 27001' },
15684
- { id: 'ISO 45001', title: 'ISO 45001' },
15685
- { id: 'Six Sigma', title: 'Six Sigma' },
15686
- { id: 'CMMI', title: 'CMMI' },
15687
- ],
15688
- placeholder: 'Select quality standard',
15689
- },
15690
- },
15691
- categoryIds: [findCategory$2('Standards').id],
15692
- categories: [findCategory$2('Standards')],
15693
- },
15694
- {
15695
- id: AXPDataGenerator.uuid(),
15696
- name: 'compliance-level',
15697
- title: 'Compliance Level',
15698
- defaultValue: '',
15699
- interface: {
15700
- type: 'select-editor',
15701
- options: {
15702
- dataSource: [
15703
- { id: 'Level 1', title: 'Level 1 - Basic' },
15704
- { id: 'Level 2', title: 'Level 2 - Intermediate' },
15705
- { id: 'Level 3', title: 'Level 3 - Advanced' },
15706
- { id: 'Level 4', title: 'Level 4 - Expert' },
15707
- { id: 'Level 5', title: 'Level 5 - Master' },
15708
- ],
15709
- placeholder: 'Select compliance level',
15710
- },
15711
- },
15712
- categoryIds: [findCategory$2('Standards').id],
15713
- categories: [findCategory$2('Standards')],
15714
- },
15715
- {
15716
- id: AXPDataGenerator.uuid(),
15717
- name: 'standard-version',
15718
- title: 'Standard Version',
15719
- defaultValue: '',
15720
- interface: versionInterface,
15721
- categoryIds: [findCategory$2('Standards').id],
15722
- categories: [findCategory$2('Standards')],
15723
- },
15724
- // Quality Control - Testing
15725
- {
15726
- id: AXPDataGenerator.uuid(),
15727
- name: 'test-status',
15728
- title: 'Test Status',
15729
- defaultValue: 'Pending',
15730
- interface: {
15731
- type: 'select-editor',
15732
- options: {
15733
- dataSource: [
15734
- { id: 'Pending', title: 'Pending' },
15735
- { id: 'In Progress', title: 'In Progress' },
15736
- { id: 'Passed', title: 'Passed' },
15737
- { id: 'Failed', title: 'Failed' },
15738
- { id: 'Blocked', title: 'Blocked' },
15739
- { id: 'Skipped', title: 'Skipped' },
15740
- ],
15741
- placeholder: 'Select test status',
15742
- },
15743
- },
15744
- categoryIds: [findCategory$2('Testing').id],
15745
- categories: [findCategory$2('Testing')],
15746
- },
15747
- {
15748
- id: AXPDataGenerator.uuid(),
15749
- name: 'test-results',
15750
- title: 'Test Results',
15751
- defaultValue: '',
15752
- interface: textAreaInterface,
15753
- categoryIds: [findCategory$2('Testing').id],
15754
- categories: [findCategory$2('Testing')],
15755
- },
15756
- {
15757
- id: AXPDataGenerator.uuid(),
15758
- name: 'test-date',
15759
- title: 'Test Date',
15760
- defaultValue: '',
15761
- interface: dateInterface,
15762
- categoryIds: [findCategory$2('Testing').id],
15763
- categories: [findCategory$2('Testing')],
15764
- },
15765
- // Quality Control - Validation
15766
- {
15767
- id: AXPDataGenerator.uuid(),
15768
- name: 'validation-status',
15769
- title: 'Validation Status',
15770
- defaultValue: 'Not Validated',
15771
- interface: {
15772
- type: 'select-editor',
15773
- options: {
15774
- dataSource: [
15775
- { id: 'Not Validated', title: 'Not Validated' },
15776
- { id: 'In Validation', title: 'In Validation' },
15777
- { id: 'Validated', title: 'Validated' },
15778
- { id: 'Validation Failed', title: 'Validation Failed' },
15779
- { id: 'Requires Review', title: 'Requires Review' },
15780
- ],
15781
- placeholder: 'Select validation status',
15782
- },
15783
- },
15784
- categoryIds: [findCategory$2('Validation').id],
15785
- categories: [findCategory$2('Validation')],
15786
- },
15787
- {
15788
- id: AXPDataGenerator.uuid(),
15789
- name: 'validation-notes',
15790
- title: 'Validation Notes',
15791
- defaultValue: '',
15792
- interface: textAreaInterface,
15793
- categoryIds: [findCategory$2('Validation').id],
15794
- categories: [findCategory$2('Validation')],
15795
- },
15796
- // Compliance - Regulations
15797
- {
15798
- id: AXPDataGenerator.uuid(),
15799
- name: 'regulatory-framework',
15800
- title: 'Regulatory Framework',
15801
- defaultValue: '',
15802
- interface: {
15803
- type: 'select-editor',
15804
- options: {
15805
- dataSource: [
15806
- { id: 'GDPR', title: 'GDPR' },
15807
- { id: 'HIPAA', title: 'HIPAA' },
15808
- { id: 'SOX', title: 'SOX' },
15809
- { id: 'PCI DSS', title: 'PCI DSS' },
15810
- { id: 'FDA', title: 'FDA' },
15811
- { id: 'FCC', title: 'FCC' },
15812
- { id: 'EU Directives', title: 'EU Directives' },
15813
- ],
15814
- placeholder: 'Select regulatory framework',
15815
- },
15816
- },
15817
- categoryIds: [findCategory$2('Regulations').id],
15818
- categories: [findCategory$2('Regulations')],
15819
- },
15820
- {
15821
- id: AXPDataGenerator.uuid(),
15822
- name: 'compliance-status',
15823
- title: 'Compliance Status',
15824
- defaultValue: 'Under Review',
15825
- interface: {
15826
- type: 'select-editor',
15827
- options: {
15828
- dataSource: [
15829
- { id: 'Under Review', title: 'Under Review' },
15830
- { id: 'Compliant', title: 'Compliant' },
15831
- { id: 'Non-Compliant', title: 'Non-Compliant' },
15832
- { id: 'Partially Compliant', title: 'Partially Compliant' },
15833
- { id: 'Exempt', title: 'Exempt' },
15834
- ],
15835
- placeholder: 'Select compliance status',
15836
- },
15837
- },
15838
- categoryIds: [findCategory$2('Regulations').id],
15839
- categories: [findCategory$2('Regulations')],
15840
- },
15841
- {
15842
- id: AXPDataGenerator.uuid(),
15843
- name: 'regulation-reference',
15844
- title: 'Regulation Reference',
15845
- defaultValue: '',
15846
- interface: textAreaInterface,
15847
- categoryIds: [findCategory$2('Regulations').id],
15848
- categories: [findCategory$2('Regulations')],
15849
- },
15850
- // Compliance - Audit Trail
15851
- {
15852
- id: AXPDataGenerator.uuid(),
15853
- name: 'audit-trail',
15854
- title: 'Audit Trail',
15855
- defaultValue: '',
15856
- interface: textAreaInterface,
15857
- categoryIds: [findCategory$2('Audit Trail').id],
15858
- categories: [findCategory$2('Audit Trail')],
15859
- },
15860
- {
15861
- id: AXPDataGenerator.uuid(),
15862
- name: 'audit-date',
15863
- title: 'Audit Date',
15864
- defaultValue: '',
15865
- interface: dateInterface,
15866
- categoryIds: [findCategory$2('Audit Trail').id],
15867
- categories: [findCategory$2('Audit Trail')],
15868
- },
15869
- // Compliance - Certifications
15870
- {
15871
- id: AXPDataGenerator.uuid(),
15872
- name: 'certification-type',
15873
- title: 'Certification Type',
15874
- defaultValue: '',
15875
- interface: {
15876
- type: 'select-editor',
15877
- options: {
15878
- dataSource: [
15879
- { id: 'ISO Certification', title: 'ISO Certification' },
15880
- { id: 'Industry Standard', title: 'Industry Standard' },
15881
- { id: 'Professional Certification', title: 'Professional Certification' },
15882
- { id: 'Product Certification', title: 'Product Certification' },
15883
- { id: 'Quality Certification', title: 'Quality Certification' },
15884
- ],
15885
- placeholder: 'Select certification type',
15886
- },
15887
- },
15888
- categoryIds: [findCategory$2('Certifications').id],
15889
- categories: [findCategory$2('Certifications')],
15890
- },
15891
- {
15892
- id: AXPDataGenerator.uuid(),
15893
- name: 'certification-number',
15894
- title: 'Certification Number',
15895
- defaultValue: '',
15896
- interface: textInterface,
15897
- categoryIds: [findCategory$2('Certifications').id],
15898
- categories: [findCategory$2('Certifications')],
15899
- },
15900
- {
15901
- id: AXPDataGenerator.uuid(),
15902
- name: 'certification-expiry',
15903
- title: 'Certification Expiry',
15904
- defaultValue: '',
15905
- interface: dateInterface,
15906
- categoryIds: [findCategory$2('Certifications').id],
15907
- categories: [findCategory$2('Certifications')],
15908
- },
15909
- // Project Management - Planning
15910
- {
15911
- id: AXPDataGenerator.uuid(),
15912
- name: 'project-phase',
15913
- title: 'Project Phase',
15914
- defaultValue: 'Planning',
15915
- interface: {
15916
- type: 'select-editor',
15917
- options: {
15918
- dataSource: [
15919
- { id: 'Planning', title: 'Planning' },
15920
- { id: 'Initiation', title: 'Initiation' },
15921
- { id: 'Execution', title: 'Execution' },
15922
- { id: 'Monitoring', title: 'Monitoring' },
15923
- { id: 'Closing', title: 'Closing' },
15924
- ],
15925
- placeholder: 'Select project phase',
15926
- },
15927
- },
15928
- categoryIds: [findCategory$2('Planning').id],
15929
- categories: [findCategory$2('Planning')],
15930
- },
15931
- {
15932
- id: AXPDataGenerator.uuid(),
15933
- name: 'project-milestone',
15934
- title: 'Project Milestone',
15935
- defaultValue: '',
15936
- interface: textAreaInterface,
15937
- categoryIds: [findCategory$2('Planning').id],
15938
- categories: [findCategory$2('Planning')],
15939
- },
15940
- {
15941
- id: AXPDataGenerator.uuid(),
15942
- name: 'project-objectives',
15943
- title: 'Project Objectives',
15944
- defaultValue: '',
15945
- interface: textAreaInterface,
15946
- categoryIds: [findCategory$2('Planning').id],
15947
- categories: [findCategory$2('Planning')],
15948
- },
15949
- // Project Management - Resources
15950
- {
15951
- id: AXPDataGenerator.uuid(),
15952
- name: 'resource-allocation',
15953
- title: 'Resource Allocation',
15954
- defaultValue: '',
15955
- interface: textAreaInterface,
15956
- categoryIds: [findCategory$2('Resources').id],
15957
- categories: [findCategory$2('Resources')],
15958
- },
15959
- {
15960
- id: AXPDataGenerator.uuid(),
15961
- name: 'budget',
15962
- title: 'Budget',
15963
- defaultValue: '',
15964
- interface: numberInterface,
15965
- categoryIds: [findCategory$2('Resources').id],
15966
- categories: [findCategory$2('Resources')],
15967
- },
15968
- {
15969
- id: AXPDataGenerator.uuid(),
15970
- name: 'team-members',
15971
- title: 'Team Members',
15972
- defaultValue: '',
15973
- interface: textAreaInterface,
15974
- categoryIds: [findCategory$2('Resources').id],
15975
- categories: [findCategory$2('Resources')],
15976
- },
15977
- // Project Management - Timeline
15978
- {
15979
- id: AXPDataGenerator.uuid(),
15980
- name: 'start-date',
15981
- title: 'Start Date',
15982
- defaultValue: '',
15983
- interface: dateInterface,
15984
- categoryIds: [findCategory$2('Timeline').id],
15985
- categories: [findCategory$2('Timeline')],
15986
- },
15987
- {
15988
- id: AXPDataGenerator.uuid(),
15989
- name: 'end-date',
15990
- title: 'End Date',
15991
- defaultValue: '',
15992
- interface: dateInterface,
15993
- categoryIds: [findCategory$2('Timeline').id],
15994
- categories: [findCategory$2('Timeline')],
15995
- },
15996
- {
15997
- id: AXPDataGenerator.uuid(),
15998
- name: 'deadline',
15999
- title: 'Deadline',
16000
- defaultValue: '',
16001
- interface: dateInterface,
16002
- categoryIds: [findCategory$2('Timeline').id],
16003
- categories: [findCategory$2('Timeline')],
16004
- },
16005
- // Electronics & Appliances - Mobile Phones & Tablets
16006
- {
16007
- id: AXPDataGenerator.uuid(),
16008
- name: 'screen-size',
16009
- title: 'Screen Size',
16010
- defaultValue: '',
16011
- interface: textInterface,
16012
- categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
16013
- categories: [findCategory$2('Mobile Phones & Tablets')],
16014
- },
16015
- {
16016
- id: AXPDataGenerator.uuid(),
16017
- name: 'operating-system',
16018
- title: 'Operating System',
16019
- defaultValue: '',
16020
- interface: {
16021
- type: 'select-editor',
16022
- options: {
16023
- dataSource: [
16024
- { id: 'Android', title: 'Android' },
16025
- { id: 'iOS', title: 'iOS' },
16026
- { id: 'Windows', title: 'Windows' },
16027
- { id: 'HarmonyOS', title: 'HarmonyOS' },
16028
- ],
16029
- placeholder: 'Select operating system',
16030
- },
16031
- },
16032
- categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
16033
- categories: [findCategory$2('Mobile Phones & Tablets')],
16034
- },
16035
- {
16036
- id: AXPDataGenerator.uuid(),
16037
- name: 'storage-capacity',
16038
- title: 'Storage Capacity',
16039
- defaultValue: '',
16040
- interface: {
16041
- type: 'select-editor',
16042
- options: {
16043
- dataSource: [
16044
- { id: '32GB', title: '32 GB' },
16045
- { id: '64GB', title: '64 GB' },
16046
- { id: '128GB', title: '128 GB' },
16047
- { id: '256GB', title: '256 GB' },
16048
- { id: '512GB', title: '512 GB' },
16049
- { id: '1TB', title: '1 TB' },
16050
- ],
16051
- placeholder: 'Select storage capacity',
16052
- },
16053
- },
16054
- categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
16055
- categories: [findCategory$2('Mobile Phones & Tablets')],
16056
- },
16057
- {
16058
- id: AXPDataGenerator.uuid(),
16059
- name: 'ram',
16060
- title: 'RAM',
16061
- defaultValue: '',
16062
- interface: {
16063
- type: 'select-editor',
16064
- options: {
16065
- dataSource: [
16066
- { id: '2GB', title: '2 GB' },
16067
- { id: '3GB', title: '3 GB' },
16068
- { id: '4GB', title: '4 GB' },
16069
- { id: '6GB', title: '6 GB' },
16070
- { id: '8GB', title: '8 GB' },
16071
- { id: '12GB', title: '12 GB' },
16072
- { id: '16GB', title: '16 GB' },
16073
- ],
16074
- placeholder: 'Select RAM',
16075
- },
16076
- },
16077
- categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
16078
- categories: [findCategory$2('Mobile Phones & Tablets')],
16079
- },
16080
- {
16081
- id: AXPDataGenerator.uuid(),
16082
- name: 'battery-capacity',
16083
- title: 'Battery Capacity',
16084
- defaultValue: '',
16085
- interface: textInterface,
16086
- categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
16087
- categories: [findCategory$2('Mobile Phones & Tablets')],
16088
- },
16089
- {
16090
- id: AXPDataGenerator.uuid(),
16091
- name: 'camera-resolution',
16092
- title: 'Camera Resolution',
16093
- defaultValue: '',
16094
- interface: textInterface,
16095
- categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
16096
- categories: [findCategory$2('Mobile Phones & Tablets')],
16097
- },
16098
- // Electronics & Appliances - Laptops & Computers
16099
- {
16100
- id: AXPDataGenerator.uuid(),
16101
- name: 'processor',
16102
- title: 'Processor',
16103
- defaultValue: '',
16104
- interface: textInterface,
16105
- categoryIds: [findCategory$2('Laptops & Computers').id],
16106
- categories: [findCategory$2('Laptops & Computers')],
16107
- },
16108
- {
16109
- id: AXPDataGenerator.uuid(),
16110
- name: 'memory',
16111
- title: 'Memory (RAM)',
16112
- defaultValue: '',
16113
- interface: {
16114
- type: 'select-editor',
16115
- options: {
16116
- dataSource: [
16117
- { id: '4GB', title: '4 GB' },
16118
- { id: '8GB', title: '8 GB' },
16119
- { id: '16GB', title: '16 GB' },
16120
- { id: '32GB', title: '32 GB' },
16121
- { id: '64GB', title: '64 GB' },
16122
- ],
16123
- placeholder: 'Select memory (RAM)',
16124
- },
16125
- },
16126
- categoryIds: [findCategory$2('Laptops & Computers').id],
16127
- categories: [findCategory$2('Laptops & Computers')],
16128
- },
16129
- {
16130
- id: AXPDataGenerator.uuid(),
16131
- name: 'hard-drive',
16132
- title: 'Hard Drive',
16133
- defaultValue: '',
16134
- interface: {
16135
- type: 'select-editor',
16136
- options: {
16137
- dataSource: [
16138
- { id: '256GB SSD', title: '256 GB SSD' },
16139
- { id: '512GB SSD', title: '512 GB SSD' },
16140
- { id: '1TB SSD', title: '1 TB SSD' },
16141
- { id: '2TB SSD', title: '2 TB SSD' },
16142
- { id: '500GB HDD', title: '500 GB HDD' },
16143
- { id: '1TB HDD', title: '1 TB HDD' },
16144
- { id: '2TB HDD', title: '2 TB HDD' },
16145
- ],
16146
- placeholder: 'Select hard drive',
16147
- },
16148
- },
16149
- categoryIds: [findCategory$2('Laptops & Computers').id],
16150
- categories: [findCategory$2('Laptops & Computers')],
16151
- },
16152
- {
16153
- id: AXPDataGenerator.uuid(),
16154
- name: 'graphics-card',
16155
- title: 'Graphics Card',
16156
- defaultValue: '',
16157
- interface: textInterface,
16158
- categoryIds: [findCategory$2('Laptops & Computers').id],
16159
- categories: [findCategory$2('Laptops & Computers')],
16160
- },
16161
- {
16162
- id: AXPDataGenerator.uuid(),
16163
- name: 'display-size',
16164
- title: 'Display Size',
16165
- defaultValue: '',
16166
- interface: textInterface,
16167
- categoryIds: [findCategory$2('Laptops & Computers').id],
16168
- categories: [findCategory$2('Laptops & Computers')],
16169
- },
16170
- {
16171
- id: AXPDataGenerator.uuid(),
16172
- name: 'weight',
16173
- title: 'Weight',
16174
- defaultValue: '',
16175
- interface: numberInterface,
16176
- categoryIds: [findCategory$2('Laptops & Computers').id],
16177
- categories: [findCategory$2('Laptops & Computers')],
16178
- },
16179
- // Electronics & Appliances - Monitors
16180
- {
16181
- id: AXPDataGenerator.uuid(),
16182
- name: 'monitor-size',
16183
- title: 'Monitor Size',
16184
- defaultValue: '',
16185
- interface: textInterface,
16186
- categoryIds: [findCategory$2('Monitors').id],
16187
- categories: [findCategory$2('Monitors')],
16188
- },
16189
- {
16190
- id: AXPDataGenerator.uuid(),
16191
- name: 'resolution',
16192
- title: 'Resolution',
16193
- defaultValue: '',
16194
- interface: {
16195
- type: 'select-editor',
16196
- options: {
16197
- dataSource: [
16198
- { id: '1920x1080', title: '1920x1080 (Full HD)' },
16199
- { id: '2560x1440', title: '2560x1440 (QHD)' },
16200
- { id: '3840x2160', title: '3840x2160 (4K UHD)' },
16201
- { id: '5120x2880', title: '5120x2880 (5K)' },
16202
- { id: '7680x4320', title: '7680x4320 (8K UHD)' },
16203
- ],
16204
- placeholder: 'Select resolution',
16205
- },
16206
- },
16207
- categoryIds: [findCategory$2('Monitors').id],
16208
- categories: [findCategory$2('Monitors')],
16209
- },
16210
- {
16211
- id: AXPDataGenerator.uuid(),
16212
- name: 'refresh-rate',
16213
- title: 'Refresh Rate',
16214
- defaultValue: '',
16215
- interface: textInterface,
16216
- categoryIds: [findCategory$2('Monitors').id],
16217
- categories: [findCategory$2('Monitors')],
16218
- },
16219
- {
16220
- id: AXPDataGenerator.uuid(),
16221
- name: 'panel-type',
16222
- title: 'Panel Type',
16223
- defaultValue: '',
16224
- interface: {
16225
- type: 'select-editor',
16226
- options: {
16227
- dataSource: [
16228
- { id: 'IPS', title: 'IPS' },
16229
- { id: 'VA', title: 'VA' },
16230
- { id: 'TN', title: 'TN' },
16231
- { id: 'OLED', title: 'OLED' },
16232
- { id: 'QLED', title: 'QLED' },
16233
- ],
16234
- placeholder: 'Select panel type',
16235
- },
16236
- },
16237
- categoryIds: [findCategory$2('Monitors').id],
16238
- categories: [findCategory$2('Monitors')],
16239
- },
16240
- {
16241
- id: AXPDataGenerator.uuid(),
16242
- name: 'connectivity',
16243
- title: 'Connectivity',
16244
- defaultValue: '',
16245
- interface: textAreaInterface,
16246
- categoryIds: [findCategory$2('Monitors').id],
16247
- categories: [findCategory$2('Monitors')],
16248
- },
16249
- // Electronics & Appliances - Accessories (Cables, Chargers, Cases…)
16250
- {
16251
- id: AXPDataGenerator.uuid(),
16252
- name: 'accessory-type',
16253
- title: 'Accessory Type',
16254
- defaultValue: '',
16255
- interface: {
16256
- type: 'select-editor',
16257
- options: {
16258
- dataSource: [
16259
- { id: 'Cable', title: 'Cable' },
16260
- { id: 'Charger', title: 'Charger' },
16261
- { id: 'Case', title: 'Case' },
16262
- { id: 'Screen Protector', title: 'Screen Protector' },
16263
- { id: 'Stand', title: 'Stand' },
16264
- { id: 'Adapter', title: 'Adapter' },
16265
- { id: 'Dock', title: 'Dock' },
16266
- ],
16267
- placeholder: 'Select accessory type',
16268
- },
16269
- },
16270
- categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
16271
- categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
16272
- },
16273
- {
16274
- id: AXPDataGenerator.uuid(),
16275
- name: 'compatibility',
16276
- title: 'Compatibility',
16277
- defaultValue: '',
16278
- interface: textAreaInterface,
16279
- categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
16280
- categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
16281
- },
16282
- {
16283
- id: AXPDataGenerator.uuid(),
16284
- name: 'cable-length',
16285
- title: 'Cable Length',
16286
- defaultValue: '',
16287
- interface: textInterface,
16288
- categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
16289
- categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
16290
- },
16291
- {
16292
- id: AXPDataGenerator.uuid(),
16293
- name: 'power-output',
16294
- title: 'Power Output',
16295
- defaultValue: '',
16296
- interface: textInterface,
16297
- categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
16298
- categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
16299
- },
16300
- {
16301
- id: AXPDataGenerator.uuid(),
16302
- name: 'material',
16303
- title: 'Material',
16304
- defaultValue: '',
16305
- interface: {
16306
- type: 'select-editor',
16307
- options: {
16308
- dataSource: [
16309
- { id: 'Silicone', title: 'Silicone' },
16310
- { id: 'Leather', title: 'Leather' },
16311
- { id: 'Plastic', title: 'Plastic' },
16312
- { id: 'Metal', title: 'Metal' },
16313
- { id: 'Fabric', title: 'Fabric' },
16314
- { id: 'TPU', title: 'TPU' },
16315
- { id: 'Carbon Fiber', title: 'Carbon Fiber' },
16316
- ],
16317
- placeholder: 'Select material',
16318
- },
16319
- },
16320
- categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
16321
- categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
16322
- },
16323
- // Electronics & Appliances - Home Appliances
16324
- {
16325
- id: AXPDataGenerator.uuid(),
16326
- name: 'appliance-type',
16327
- title: 'Appliance Type',
16328
- defaultValue: '',
16329
- interface: {
16330
- type: 'select-editor',
16331
- options: {
16332
- dataSource: [
16333
- { id: 'Refrigerator', title: 'Refrigerator' },
16334
- { id: 'Washing Machine', title: 'Washing Machine' },
16335
- { id: 'Dishwasher', title: 'Dishwasher' },
16336
- { id: 'Oven', title: 'Oven' },
16337
- { id: 'Microwave', title: 'Microwave' },
16338
- { id: 'Air Conditioner', title: 'Air Conditioner' },
16339
- { id: 'Vacuum Cleaner', title: 'Vacuum Cleaner' },
16340
- ],
16341
- placeholder: 'Select appliance type',
16342
- },
16343
- },
16344
- categoryIds: [findCategory$2('Home Appliances').id],
16345
- categories: [findCategory$2('Home Appliances')],
16346
- },
16347
- {
16348
- id: AXPDataGenerator.uuid(),
16349
- name: 'energy-rating',
16350
- title: 'Energy Rating',
16351
- defaultValue: '',
16352
- interface: {
16353
- type: 'select-editor',
16354
- options: {
16355
- dataSource: [
16356
- { id: 'A+++', title: 'A+++' },
16357
- { id: 'A++', title: 'A++' },
16358
- { id: 'A+', title: 'A+' },
16359
- { id: 'A', title: 'A' },
16360
- { id: 'B', title: 'B' },
16361
- { id: 'C', title: 'C' },
16362
- { id: 'D', title: 'D' },
16363
- ],
16364
- placeholder: 'Select energy rating',
16365
- },
16366
- },
16367
- categoryIds: [findCategory$2('Home Appliances').id],
16368
- categories: [findCategory$2('Home Appliances')],
16369
- },
16370
- {
16371
- id: AXPDataGenerator.uuid(),
16372
- name: 'capacity',
16373
- title: 'Capacity',
16374
- defaultValue: '',
16375
- interface: textInterface,
16376
- categoryIds: [findCategory$2('Home Appliances').id],
16377
- categories: [findCategory$2('Home Appliances')],
16378
- },
16379
- {
16380
- id: AXPDataGenerator.uuid(),
16381
- name: 'power-consumption',
16382
- title: 'Power Consumption',
16383
- defaultValue: '',
16384
- interface: textInterface,
16385
- categoryIds: [findCategory$2('Home Appliances').id],
16386
- categories: [findCategory$2('Home Appliances')],
16387
- },
16388
- {
16389
- id: AXPDataGenerator.uuid(),
16390
- name: 'dimensions',
16391
- title: 'Dimensions',
16392
- defaultValue: '',
16393
- interface: textInterface,
16394
- categoryIds: [findCategory$2('Home Appliances').id],
16395
- categories: [findCategory$2('Home Appliances')],
16396
- },
16397
- {
16398
- id: AXPDataGenerator.uuid(),
16399
- name: 'features',
16400
- title: 'Features',
16401
- defaultValue: '',
16402
- interface: textAreaInterface,
16403
- categoryIds: [findCategory$2('Home Appliances').id],
16404
- categories: [findCategory$2('Home Appliances')],
16405
- },
16406
- // Electronics & Appliances - Audio & Video
16407
- {
16408
- id: AXPDataGenerator.uuid(),
16409
- name: 'audio-video-type',
16410
- title: 'Audio/Video Type',
16411
- defaultValue: '',
16412
- interface: {
16413
- type: 'select-editor',
16414
- options: {
16415
- dataSource: [
16416
- { id: 'Headphones', title: 'Headphones' },
16417
- { id: 'Speakers', title: 'Speakers' },
16418
- { id: 'Soundbar', title: 'Soundbar' },
16419
- { id: 'TV', title: 'TV' },
16420
- { id: 'Projector', title: 'Projector' },
16421
- { id: 'Home Theater', title: 'Home Theater' },
16422
- { id: 'Microphone', title: 'Microphone' },
16423
- ],
16424
- placeholder: 'Select audio/video type',
16425
- },
16426
- },
16427
- categoryIds: [findCategory$2('Audio & Video').id],
16428
- categories: [findCategory$2('Audio & Video')],
16429
- },
16430
- {
16431
- id: AXPDataGenerator.uuid(),
16432
- name: 'audio-output',
16433
- title: 'Audio Output',
16434
- defaultValue: '',
16435
- interface: textInterface,
16436
- categoryIds: [findCategory$2('Audio & Video').id],
16437
- categories: [findCategory$2('Audio & Video')],
16438
- },
16439
- {
16440
- id: AXPDataGenerator.uuid(),
16441
- name: 'video-resolution',
16442
- title: 'Video Resolution',
16443
- defaultValue: '',
16444
- interface: {
16445
- type: 'select-editor',
16446
- options: {
16447
- dataSource: [
16448
- { id: '720p', title: '720p (HD)' },
16449
- { id: '1080p', title: '1080p (Full HD)' },
16450
- { id: '1440p', title: '1440p (QHD)' },
16451
- { id: '2160p', title: '2160p (4K UHD)' },
16452
- { id: '4320p', title: '4320p (8K UHD)' },
16453
- ],
16454
- placeholder: 'Select video resolution',
16455
- },
16456
- },
16457
- categoryIds: [findCategory$2('Audio & Video').id],
16458
- categories: [findCategory$2('Audio & Video')],
16459
- },
16460
- {
16461
- id: AXPDataGenerator.uuid(),
16462
- name: 'connectivity-options',
16463
- title: 'Connectivity Options',
16464
- defaultValue: '',
16465
- interface: textAreaInterface,
16466
- categoryIds: [findCategory$2('Audio & Video').id],
16467
- categories: [findCategory$2('Audio & Video')],
16468
- },
16469
- {
16470
- id: AXPDataGenerator.uuid(),
16471
- name: 'frequency-response',
16472
- title: 'Frequency Response',
16473
- defaultValue: '',
16474
- interface: textInterface,
16475
- categoryIds: [findCategory$2('Audio & Video').id],
16476
- categories: [findCategory$2('Audio & Video')],
16477
- },
16478
- {
16479
- id: AXPDataGenerator.uuid(),
16480
- name: 'wattage',
16481
- title: 'Wattage',
16482
- defaultValue: '',
16483
- interface: numberInterface,
16484
- categoryIds: [findCategory$2('Audio & Video').id],
16485
- categories: [findCategory$2('Audio & Video')],
16486
- },
16487
- // Electronics & Appliances - Cameras
16488
- {
16489
- id: AXPDataGenerator.uuid(),
16490
- name: 'camera-type',
16491
- title: 'Camera Type',
16492
- defaultValue: '',
16493
- interface: {
16494
- type: 'select-editor',
16495
- options: {
16496
- dataSource: [
16497
- { id: 'DSLR', title: 'DSLR' },
16498
- { id: 'Mirrorless', title: 'Mirrorless' },
16499
- { id: 'Point and Shoot', title: 'Point and Shoot' },
16500
- { id: 'Action Camera', title: 'Action Camera' },
16501
- { id: 'Instant Camera', title: 'Instant Camera' },
16502
- { id: 'Film Camera', title: 'Film Camera' },
16503
- ],
16504
- placeholder: 'Select camera type',
16505
- },
16506
- },
16507
- categoryIds: [findCategory$2('Cameras').id],
16508
- categories: [findCategory$2('Cameras')],
16509
- },
16510
- {
16511
- id: AXPDataGenerator.uuid(),
16512
- name: 'megapixels',
16513
- title: 'Megapixels',
16514
- defaultValue: '',
16515
- interface: numberInterface,
16516
- categoryIds: [findCategory$2('Cameras').id],
16517
- categories: [findCategory$2('Cameras')],
16518
- },
16519
- {
16520
- id: AXPDataGenerator.uuid(),
16521
- name: 'sensor-size',
16522
- title: 'Sensor Size',
16523
- defaultValue: '',
16524
- interface: textInterface,
16525
- categoryIds: [findCategory$2('Cameras').id],
16526
- categories: [findCategory$2('Cameras')],
16527
- },
16528
- {
16529
- id: AXPDataGenerator.uuid(),
16530
- name: 'lens-type',
16531
- title: 'Lens Type',
16532
- defaultValue: '',
16533
- interface: {
16534
- type: 'select-editor',
16535
- options: {
16536
- dataSource: [
16537
- { id: 'Prime', title: 'Prime' },
16538
- { id: 'Zoom', title: 'Zoom' },
16539
- { id: 'Wide Angle', title: 'Wide Angle' },
16540
- { id: 'Telephoto', title: 'Telephoto' },
16541
- { id: 'Macro', title: 'Macro' },
16542
- { id: 'Fisheye', title: 'Fisheye' },
16543
- ],
16544
- placeholder: 'Select lens type',
16545
- },
16546
- },
16547
- categoryIds: [findCategory$2('Cameras').id],
16548
- categories: [findCategory$2('Cameras')],
16549
- },
16550
- {
16551
- id: AXPDataGenerator.uuid(),
16552
- name: 'iso-range',
16553
- title: 'ISO Range',
16554
- defaultValue: '',
16555
- interface: textInterface,
16556
- categoryIds: [findCategory$2('Cameras').id],
16557
- categories: [findCategory$2('Cameras')],
16558
- },
16559
- {
16560
- id: AXPDataGenerator.uuid(),
16561
- name: 'video-recording',
16562
- title: 'Video Recording',
16563
- defaultValue: '',
16564
- interface: textInterface,
16565
- categoryIds: [findCategory$2('Cameras').id],
16566
- categories: [findCategory$2('Cameras')],
16567
- },
16568
- {
16569
- id: AXPDataGenerator.uuid(),
16570
- name: 'battery-life',
16571
- title: 'Battery Life',
16572
- defaultValue: '',
16573
- interface: textInterface,
16574
- categoryIds: [findCategory$2('Cameras').id],
16575
- categories: [findCategory$2('Cameras')],
16576
- },
16577
- ];
16578
-
16579
- class AXCMetaDataDefinitionDataSeeder {
16580
- constructor() {
16581
- this.storageService = inject(AXPEntityStorageService);
16582
- }
16583
- async seed() {
16584
- await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.metaDataDefinition.name}`, METADATA_MOCK);
16585
- }
16586
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetaDataDefinitionDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16587
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetaDataDefinitionDataSeeder }); }
16588
- }
16589
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetaDataDefinitionDataSeeder, decorators: [{
16590
- type: Injectable
16591
- }] });
16592
-
16593
- class AXCQueryCategoryMetadataInheritanceQuery {
16594
- constructor() {
16595
- this.injector = inject(Injector);
16596
- this.metaDataService = inject(AXMMetaDataDefinitionService);
16597
- }
16598
- async fetch(params) {
16599
- const { entityName, categoryId } = params;
16600
- //1a25158a-3e0f-4e9c-bdc2-d6cc0ece86ba
16601
- const service = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl(`${params.entityName}Category`));
16602
- // Find the category by ID
16603
- const category = await this.findCategoryById(categoryId, service);
16604
- if (!category) {
16605
- throw new Error(`Category with ID ${categoryId} not found`);
16606
- }
16607
- // Build the hierarchy (traverse up to root)
16608
- const hierarchy = await this.buildCategoryHierarchy(category, service);
16609
- // Collect and merge groups from all categories in hierarchy
16610
- const mergedGroups = this.mergeMetadataGroupsFromHierarchy(hierarchy);
16611
- return mergedGroups;
16612
- }
16613
- async findCategoryById(categoryId, service) {
16614
- try {
16615
- const result = await service.query({
16616
- filter: {
16617
- logic: 'and',
16618
- filters: [
16619
- {
16620
- field: 'id',
16621
- operator: {
16622
- type: 'equal',
16623
- },
16624
- value: categoryId,
16625
- },
16626
- ],
16627
- },
16628
- take: 1,
16629
- skip: 0,
16630
- });
16631
- return result.items.length > 0 ? result.items[0] : null;
16632
- }
16633
- catch (error) {
16634
- console.error('Error finding category by ID:', error);
16635
- return null;
16636
- }
16637
- }
16638
- async buildCategoryHierarchy(category, service) {
16639
- const hierarchy = [category];
16640
- let currentCategory = category;
16641
- // Traverse up the parent hierarchy
16642
- while (currentCategory.parentId) {
16643
- try {
16644
- const parentResult = await service.query({
16645
- filter: {
16646
- logic: 'and',
16647
- filters: [
16648
- {
16649
- field: 'id',
16650
- operator: {
16651
- type: 'equal',
16652
- },
16653
- value: currentCategory.parentId,
16654
- },
16655
- ],
16656
- },
16657
- take: 1,
16658
- skip: 0,
16659
- });
16660
- if (parentResult.items.length > 0) {
16661
- const parent = parentResult.items[0];
16662
- hierarchy.unshift(parent); // Add to beginning to maintain hierarchy order
16663
- currentCategory = parent;
16664
- }
16665
- else {
16666
- break; // Parent not found, stop traversal
16667
- }
16668
- }
16669
- catch (error) {
16670
- console.error('Error finding parent category:', error);
16671
- break;
16672
- }
16673
- }
16674
- return hierarchy;
16675
- }
16676
- /**
16677
- * Merge metadata groups from category hierarchy, preserving group structure
16678
- * Groups are merged by name, with fields from child categories taking precedence
16679
- */
16680
- mergeMetadataGroupsFromHierarchy(hierarchy) {
16681
- const groupsMap = new Map();
16682
- const seenFieldIds = new Set();
16683
- // Process hierarchy from root to leaf (child categories override parent fields)
16684
- for (const category of hierarchy) {
16685
- // Type: AXMMetaDataSelectorValue from @acorex/modules/data-management
16686
- const metaDataList = get(category, META_DATA_SELECTOR_FIELD);
16687
- if (!metaDataList || !metaDataList.groups || !Array.isArray(metaDataList.groups)) {
16688
- continue;
16689
- }
16690
- // Process each group in the category's metadata
16691
- for (const group of metaDataList.groups) {
16692
- const groupName = group.name || 'default';
16693
- // Get or create group
16694
- if (!groupsMap.has(groupName)) {
16695
- groupsMap.set(groupName, {
16696
- name: groupName,
16697
- title: group.title,
16698
- description: group.description,
16699
- order: group.order ?? 0,
16700
- fields: [],
16701
- });
16702
- }
16703
- const mergedGroup = groupsMap.get(groupName);
16704
- // Process fields in this group
16705
- if (group.fields && Array.isArray(group.fields)) {
16706
- for (const field of group.fields) {
16707
- // Skip if we've already seen this field (child categories override)
16708
- if (seenFieldIds.has(field.id)) {
16709
- // Remove existing field and add new one (child overrides parent)
16710
- mergedGroup.fields = mergedGroup.fields.filter(f => f.id !== field.id);
16711
- }
16712
- // Add field to merged group
16713
- // Ensure title is always present (use name as fallback)
16714
- mergedGroup.fields.push({
16715
- id: field.id,
16716
- name: field.name,
16717
- title: field.title || field.name || 'Untitled Field',
16718
- description: field.description,
16719
- interface: field.interface,
16720
- configuration: field.configuration,
16721
- order: field.order ?? mergedGroup.fields.length,
16722
- });
16723
- seenFieldIds.add(field.id);
16724
- }
16725
- }
16726
- }
16727
- }
16728
- // Convert map to array and sort by order
16729
- const result = Array.from(groupsMap.values())
16730
- .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))
16731
- .map(group => ({
16732
- ...group,
16733
- fields: group.fields.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),
16734
- }));
16735
- return result;
16736
- }
16737
- async collectInheritedMetadata(hierarchy) {
16738
- const allMetadata = [];
16739
- const seenMetadataIds = new Set();
16740
- // Collect metadata from each level in the hierarchy
16741
- for (const category of hierarchy) {
16742
- try {
16743
- const metadataResult = await this.metaDataService.query({
16744
- filter: {
16745
- logic: 'and',
16746
- filters: [
16747
- {
16748
- field: 'categoryIds',
16749
- operator: {
16750
- type: 'contains',
16751
- },
16752
- value: category.id,
16753
- },
16754
- ],
16755
- },
16756
- take: 1000,
16757
- skip: 0,
16758
- });
16759
- // Add metadata fields that haven't been seen before (avoid duplicates)
16760
- for (const metadata of metadataResult.items) {
16761
- if (!seenMetadataIds.has(metadata.id)) {
16762
- allMetadata.push(metadata);
16763
- seenMetadataIds.add(metadata.id);
16764
- }
16765
- }
16766
- }
16767
- catch (error) {
16768
- console.error(`Error collecting metadata for category ${category.id}:`, error);
16769
- }
16770
- }
16771
- return allMetadata;
16772
- }
16773
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16774
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, providedIn: 'root' }); }
16775
- }
16776
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, decorators: [{
16777
- type: Injectable,
16778
- args: [{
16779
- providedIn: 'root'
16780
- }]
16781
- }] });
16782
-
16783
- var categoryMetadataInheritance_query = /*#__PURE__*/Object.freeze({
16784
- __proto__: null,
16785
- AXCQueryCategoryMetadataInheritanceQuery: AXCQueryCategoryMetadataInheritanceQuery
16786
- });
16787
-
16788
- class AXCMetadataCategorySeeder {
16789
- constructor() {
16790
- this.storageService = inject(AXPEntityStorageService);
16791
- }
16792
- async seed() {
16793
- await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.metaDataDefinition.name}Category`, metadataCategoryMocks);
16794
- }
16795
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetadataCategorySeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16796
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetadataCategorySeeder }); }
16797
- }
16798
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetadataCategorySeeder, decorators: [{
16799
- type: Injectable
16800
- }] });
16801
-
16802
- //#endregion
16803
- //#region ---- Tag Mock Data ----
16804
- const TAGS_MOCK = [
16805
- // System Tags
16806
- {
16807
- id: AXPDataGenerator.uuid(),
16808
- title: 'Important',
16809
- color: '#F44336', // Red - Material Design
16810
- description: 'Marks items as important',
16811
- scope: 'system',
16812
- createdAt: new Date('2024-01-01'),
16813
- },
16814
- {
16815
- id: AXPDataGenerator.uuid(),
16816
- title: 'Urgent',
16817
- color: '#FF9800', // Orange - Material Design
16818
- description: 'Marks items as urgent',
16819
- scope: 'system',
16820
- createdAt: new Date('2024-01-01'),
16821
- },
16822
- {
16823
- id: AXPDataGenerator.uuid(),
16824
- title: 'To Do',
16825
- color: '#2196F3', // Blue - Material Design
16826
- description: 'Items pending action',
16827
- scope: 'system',
16828
- createdAt: new Date('2024-01-01'),
16829
- },
16830
- {
16831
- id: AXPDataGenerator.uuid(),
16832
- title: 'In Progress',
16833
- color: '#03A9F4', // Light Blue - Material Design
16834
- description: 'Currently being worked on',
16835
- scope: 'system',
16836
- createdAt: new Date('2024-01-01'),
16837
- },
16838
- {
16839
- id: AXPDataGenerator.uuid(),
16840
- title: 'Completed',
16841
- color: '#4CAF50', // Green - Material Design
16842
- description: 'Finished items',
16843
- scope: 'system',
16844
- createdAt: new Date('2024-01-01'),
16845
- },
16846
- {
16847
- id: AXPDataGenerator.uuid(),
16848
- title: 'Blocked',
16849
- color: '#FF5722', // Deep Orange - Material Design
16850
- description: 'Items that are blocked',
16851
- scope: 'system',
16852
- createdAt: new Date('2024-01-01'),
16853
- },
16854
- {
16855
- id: AXPDataGenerator.uuid(),
16856
- title: 'Review',
16857
- color: '#FFC107', // Amber - Material Design
16858
- description: 'Items pending review',
16859
- scope: 'system',
16860
- createdAt: new Date('2024-01-01'),
16861
- },
16862
- {
16863
- id: AXPDataGenerator.uuid(),
16864
- title: 'Bug',
16865
- color: '#E91E63', // Pink - Material Design
16866
- description: 'Bug reports',
16867
- scope: 'system',
16868
- createdAt: new Date('2024-01-01'),
16869
- },
16870
- {
16871
- id: AXPDataGenerator.uuid(),
16872
- title: 'Feature',
16873
- color: '#009688', // Teal - Material Design
16874
- description: 'New feature requests',
16875
- scope: 'system',
16876
- createdAt: new Date('2024-01-01'),
16877
- },
16878
- {
16879
- id: AXPDataGenerator.uuid(),
16880
- title: 'Documentation',
16881
- color: '#00BCD4', // Cyan - Material Design
16882
- description: 'Documentation related',
16883
- scope: 'system',
16884
- createdAt: new Date('2024-01-01'),
16885
- },
16886
- // Tenant Tags
16887
- {
16888
- id: AXPDataGenerator.uuid(),
16889
- title: 'High Priority',
16890
- color: '#9C27B0', // Purple - Material Design
16891
- description: 'High priority items for this organization',
16892
- scope: 'tenant',
16893
- createdAt: new Date('2024-06-01'),
16894
- },
16895
- {
16896
- id: AXPDataGenerator.uuid(),
16897
- title: 'Q4 Project',
16898
- color: '#3F51B5', // Indigo - Material Design
16899
- description: 'Related to Q4 projects',
16900
- scope: 'tenant',
16901
- createdAt: new Date('2024-09-01'),
16902
- },
16903
- {
16904
- id: AXPDataGenerator.uuid(),
16905
- title: 'Customer Facing',
16906
- color: '#8BC34A', // Light Green - Material Design
16907
- description: 'Customer-facing tasks and items',
16908
- scope: 'tenant',
16909
- createdAt: new Date('2024-07-01'),
16910
- },
16911
- // User Tags
16912
- {
16913
- id: AXPDataGenerator.uuid(),
16914
- title: 'Personal Project',
16915
- color: '#673AB7', // Deep Purple - Material Design
16916
- description: 'My personal projects',
16917
- scope: 'user',
16918
- createdAt: new Date('2024-10-01'),
16919
- },
16920
- {
16921
- id: AXPDataGenerator.uuid(),
16922
- title: 'Learning',
16923
- color: '#CDDC39', // Lime - Material Design
16924
- description: 'Items to learn or study',
16925
- scope: 'user',
16926
- createdAt: new Date('2024-10-15'),
16927
- },
16928
- ];
16929
- //#endregion
16930
-
16931
- //#region ---- Tag Data Seeder ----
16932
- class AXMTagDataSeeder {
16933
- constructor() {
16934
- this.storageService = inject(AXPEntityStorageService);
16935
- }
16936
- async seed() {
16937
- await this.storageService.initial(RootConfig$c.entities.tag.source, TAGS_MOCK);
16938
- }
16939
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXMTagDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16940
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXMTagDataSeeder }); }
16941
- }
16942
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXMTagDataSeeder, decorators: [{
16943
- type: Injectable
16944
- }] });
16945
-
16946
15028
  var equipmentTypeMetaDataListJson = [
16947
15029
  {
16948
15030
  name: "TR",
@@ -24162,132 +22244,1923 @@ var equipmentTypeMetaDataListJson = [
24162
22244
  }
24163
22245
  ];
24164
22246
 
24165
- const categoryMeta = {
24166
- 'eq-tr': {
24167
- description: 'Transformer',
24168
- icon: 'fa-light fa-bolt',
24169
- color: '#3b82f6',
24170
- },
24171
- 'eq-etr': {
24172
- description: 'Equipment Type ETR',
24173
- icon: 'fa-light fa-plug',
24174
- color: '#8b5cf6',
24175
- },
24176
- 'eq-lbt': {
24177
- description: 'Equipment Type LBT',
24178
- icon: 'fa-light fa-circle-nodes',
24179
- color: '#06b6d4',
24180
- },
24181
- };
24182
- const list = equipmentTypeMetaDataListJson;
24183
- const equipmentCategoryMocks = list.map((item) => {
24184
- const meta = categoryMeta[item.categoryId];
24185
- return {
24186
- id: item.categoryId,
24187
- title: item.typeCode,
24188
- description: meta?.description ?? item.typeCode,
24189
- childrenCount: 0,
24190
- icon: meta?.icon,
24191
- color: meta?.color,
24192
- metaDataList: item.metaDataList,
24193
- };
22247
+ const categoryMeta = {
22248
+ 'eq-tr': {
22249
+ description: 'Transformer',
22250
+ icon: 'fa-light fa-bolt',
22251
+ color: '#3b82f6',
22252
+ },
22253
+ 'eq-etr': {
22254
+ description: 'Equipment Type ETR',
22255
+ icon: 'fa-light fa-plug',
22256
+ color: '#8b5cf6',
22257
+ },
22258
+ 'eq-lbt': {
22259
+ description: 'Equipment Type LBT',
22260
+ icon: 'fa-light fa-circle-nodes',
22261
+ color: '#06b6d4',
22262
+ },
22263
+ };
22264
+ const list = equipmentTypeMetaDataListJson;
22265
+ const equipmentCategoryMocks = list.map((item) => {
22266
+ const meta = categoryMeta[item.categoryId];
22267
+ return {
22268
+ id: item.categoryId,
22269
+ title: item.typeCode,
22270
+ description: meta?.description ?? item.typeCode,
22271
+ childrenCount: 0,
22272
+ icon: meta?.icon,
22273
+ color: meta?.color,
22274
+ metaDataList: item.metaDataList,
22275
+ };
22276
+ });
22277
+
22278
+ function generateEquipments() {
22279
+ const trCategory = equipmentCategoryMocks.find((c) => c.id === 'eq-tr');
22280
+ const etrCategory = equipmentCategoryMocks.find((c) => c.id === 'eq-etr');
22281
+ const lbtCategory = equipmentCategoryMocks.find((c) => c.id === 'eq-lbt');
22282
+ return [
22283
+ {
22284
+ id: AXPDataGenerator.uuid(),
22285
+ code: 'EQ-001',
22286
+ title: 'Transformer TR-001',
22287
+ description: 'Main transformer unit',
22288
+ categoryIds: trCategory ? [trCategory.id] : undefined,
22289
+ categories: trCategory ? [{ id: trCategory.id, title: trCategory.title }] : undefined,
22290
+ },
22291
+ {
22292
+ id: AXPDataGenerator.uuid(),
22293
+ code: 'EQ-002',
22294
+ title: 'Transformer TR-002',
22295
+ description: 'Secondary transformer',
22296
+ categoryIds: trCategory ? [trCategory.id] : undefined,
22297
+ categories: trCategory ? [{ id: trCategory.id, title: trCategory.title }] : undefined,
22298
+ },
22299
+ {
22300
+ id: AXPDataGenerator.uuid(),
22301
+ code: 'EQ-003',
22302
+ title: 'ETR Unit A',
22303
+ description: 'ETR type equipment A',
22304
+ categoryIds: etrCategory ? [etrCategory.id] : undefined,
22305
+ categories: etrCategory ? [{ id: etrCategory.id, title: etrCategory.title }] : undefined,
22306
+ },
22307
+ {
22308
+ id: AXPDataGenerator.uuid(),
22309
+ code: 'EQ-004',
22310
+ title: 'ETR Unit B',
22311
+ description: 'ETR type equipment B',
22312
+ categoryIds: etrCategory ? [etrCategory.id] : undefined,
22313
+ categories: etrCategory ? [{ id: etrCategory.id, title: etrCategory.title }] : undefined,
22314
+ },
22315
+ {
22316
+ id: AXPDataGenerator.uuid(),
22317
+ code: 'EQ-005',
22318
+ title: 'LBT Device 1',
22319
+ description: 'LBT type device',
22320
+ categoryIds: lbtCategory ? [lbtCategory.id] : undefined,
22321
+ categories: lbtCategory ? [{ id: lbtCategory.id, title: lbtCategory.title }] : undefined,
22322
+ },
22323
+ {
22324
+ id: AXPDataGenerator.uuid(),
22325
+ code: 'EQ-006',
22326
+ title: 'LBT Device 2',
22327
+ description: 'LBT type device second unit',
22328
+ categoryIds: lbtCategory ? [lbtCategory.id] : undefined,
22329
+ categories: lbtCategory ? [{ id: lbtCategory.id, title: lbtCategory.title }] : undefined,
22330
+ },
22331
+ {
22332
+ id: AXPDataGenerator.uuid(),
22333
+ code: 'EQ-007',
22334
+ title: 'Mixed Type Equipment',
22335
+ description: 'Equipment in multiple categories',
22336
+ categoryIds: trCategory && etrCategory ? [trCategory.id, etrCategory.id] : undefined,
22337
+ categories: trCategory && etrCategory
22338
+ ? [
22339
+ { id: trCategory.id, title: trCategory.title },
22340
+ { id: etrCategory.id, title: etrCategory.title },
22341
+ ]
22342
+ : undefined,
22343
+ },
22344
+ ];
22345
+ }
22346
+ const equipmentMocks = generateEquipments();
22347
+
22348
+ class AXCEquipmentSeeder {
22349
+ constructor() {
22350
+ this.storageService = inject(AXPEntityStorageService);
22351
+ }
22352
+ async seed() {
22353
+ await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.equipment.name}`, equipmentMocks);
22354
+ }
22355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22356
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentSeeder }); }
22357
+ }
22358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentSeeder, decorators: [{
22359
+ type: Injectable
22360
+ }] });
22361
+
22362
+ class AXCEquipmentCategorySeeder {
22363
+ constructor() {
22364
+ this.storageService = inject(AXPEntityStorageService);
22365
+ }
22366
+ async seed() {
22367
+ await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.equipmentCategory.name}`, equipmentCategoryMocks);
22368
+ }
22369
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentCategorySeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22370
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentCategorySeeder }); }
22371
+ }
22372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentCategorySeeder, decorators: [{
22373
+ type: Injectable
22374
+ }] });
22375
+
22376
+ const metadataCategoryMocks = (() => {
22377
+ const ids = new Map();
22378
+ // Root categories
22379
+ const general = {
22380
+ id: AXPDataGenerator.uuid(),
22381
+ title: 'General',
22382
+ description: 'Common metadata fields used across all document types',
22383
+ parentId: undefined,
22384
+ childrenCount: 0,
22385
+ };
22386
+ ids.set('General', general.id);
22387
+ const location = {
22388
+ id: AXPDataGenerator.uuid(),
22389
+ title: 'Location',
22390
+ description: 'Geographic location metadata (country, province, city)',
22391
+ parentId: undefined,
22392
+ childrenCount: 0,
22393
+ };
22394
+ ids.set('Location', location.id);
22395
+ const documentManagement = {
22396
+ id: AXPDataGenerator.uuid(),
22397
+ title: 'Document Management',
22398
+ description: 'Document creation, storage, and retrieval metadata',
22399
+ parentId: undefined,
22400
+ childrenCount: 3,
22401
+ };
22402
+ ids.set('Document Management', documentManagement.id);
22403
+ const qualityControl = {
22404
+ id: AXPDataGenerator.uuid(),
22405
+ title: 'Quality Control',
22406
+ description: 'Quality assurance and control metadata',
22407
+ parentId: undefined,
22408
+ childrenCount: 3,
22409
+ };
22410
+ ids.set('Quality Control', qualityControl.id);
22411
+ const compliance = {
22412
+ id: AXPDataGenerator.uuid(),
22413
+ title: 'Compliance',
22414
+ description: 'Regulatory compliance and audit metadata',
22415
+ parentId: undefined,
22416
+ childrenCount: 3,
22417
+ };
22418
+ ids.set('Compliance', compliance.id);
22419
+ const projectManagement = {
22420
+ id: AXPDataGenerator.uuid(),
22421
+ title: 'Project Management',
22422
+ description: 'Project planning and execution metadata',
22423
+ parentId: undefined,
22424
+ childrenCount: 3,
22425
+ };
22426
+ ids.set('Project Management', projectManagement.id);
22427
+ const electronicsAndAppliances = {
22428
+ id: AXPDataGenerator.uuid(),
22429
+ title: 'Electronics & Appliances',
22430
+ description: 'Electronics and home appliances metadata',
22431
+ parentId: undefined,
22432
+ childrenCount: 7,
22433
+ };
22434
+ ids.set('Electronics & Appliances', electronicsAndAppliances.id);
22435
+ // Document Management children
22436
+ const versionControl = {
22437
+ id: AXPDataGenerator.uuid(),
22438
+ title: 'Version Control',
22439
+ description: 'Document versioning and change tracking',
22440
+ parentId: documentManagement.id,
22441
+ childrenCount: 0,
22442
+ };
22443
+ ids.set('Version Control', versionControl.id);
22444
+ const accessControl = {
22445
+ id: AXPDataGenerator.uuid(),
22446
+ title: 'Access Control',
22447
+ description: 'User permissions and access management',
22448
+ parentId: documentManagement.id,
22449
+ childrenCount: 0,
22450
+ };
22451
+ ids.set('Access Control', accessControl.id);
22452
+ const documentTypes = {
22453
+ id: AXPDataGenerator.uuid(),
22454
+ title: 'Document Types',
22455
+ description: 'Classification and categorization of documents',
22456
+ parentId: documentManagement.id,
22457
+ childrenCount: 0,
22458
+ };
22459
+ ids.set('Document Types', documentTypes.id);
22460
+ // Quality Control children
22461
+ const standards = {
22462
+ id: AXPDataGenerator.uuid(),
22463
+ title: 'Standards',
22464
+ description: 'Quality standards and specifications',
22465
+ parentId: qualityControl.id,
22466
+ childrenCount: 0,
22467
+ };
22468
+ ids.set('Standards', standards.id);
22469
+ const testing = {
22470
+ id: AXPDataGenerator.uuid(),
22471
+ title: 'Testing',
22472
+ description: 'Test procedures and results tracking',
22473
+ parentId: qualityControl.id,
22474
+ childrenCount: 0,
22475
+ };
22476
+ ids.set('Testing', testing.id);
22477
+ const validation = {
22478
+ id: AXPDataGenerator.uuid(),
22479
+ title: 'Validation',
22480
+ description: 'Data validation and verification processes',
22481
+ parentId: qualityControl.id,
22482
+ childrenCount: 0,
22483
+ };
22484
+ ids.set('Validation', validation.id);
22485
+ // Compliance children
22486
+ const regulations = {
22487
+ id: AXPDataGenerator.uuid(),
22488
+ title: 'Regulations',
22489
+ description: 'Regulatory requirements and compliance rules',
22490
+ parentId: compliance.id,
22491
+ childrenCount: 0,
22492
+ };
22493
+ ids.set('Regulations', regulations.id);
22494
+ const auditTrail = {
22495
+ id: AXPDataGenerator.uuid(),
22496
+ title: 'Audit Trail',
22497
+ description: 'Activity logging and audit documentation',
22498
+ parentId: compliance.id,
22499
+ childrenCount: 0,
22500
+ };
22501
+ ids.set('Audit Trail', auditTrail.id);
22502
+ const certifications = {
22503
+ id: AXPDataGenerator.uuid(),
22504
+ title: 'Certifications',
22505
+ description: 'Certification and accreditation tracking',
22506
+ parentId: compliance.id,
22507
+ childrenCount: 0,
22508
+ };
22509
+ ids.set('Certifications', certifications.id);
22510
+ // Project Management children
22511
+ const planning = {
22512
+ id: AXPDataGenerator.uuid(),
22513
+ title: 'Planning',
22514
+ description: 'Project planning and scheduling metadata',
22515
+ parentId: projectManagement.id,
22516
+ childrenCount: 0,
22517
+ };
22518
+ ids.set('Planning', planning.id);
22519
+ const resources = {
22520
+ id: AXPDataGenerator.uuid(),
22521
+ title: 'Resources',
22522
+ description: 'Resource allocation and management',
22523
+ parentId: projectManagement.id,
22524
+ childrenCount: 0,
22525
+ };
22526
+ ids.set('Resources', resources.id);
22527
+ const timeline = {
22528
+ id: AXPDataGenerator.uuid(),
22529
+ title: 'Timeline',
22530
+ description: 'Project timeline and milestone tracking',
22531
+ parentId: projectManagement.id,
22532
+ childrenCount: 0,
22533
+ };
22534
+ ids.set('Timeline', timeline.id);
22535
+ // Electronics & Appliances children
22536
+ const mobilePhonesAndTablets = {
22537
+ id: AXPDataGenerator.uuid(),
22538
+ title: 'Mobile Phones & Tablets',
22539
+ description: 'Mobile phones, smartphones, and tablet devices',
22540
+ parentId: electronicsAndAppliances.id,
22541
+ childrenCount: 0,
22542
+ };
22543
+ ids.set('Mobile Phones & Tablets', mobilePhonesAndTablets.id);
22544
+ const laptopsAndComputers = {
22545
+ id: AXPDataGenerator.uuid(),
22546
+ title: 'Laptops & Computers',
22547
+ description: 'Laptops, desktops, and computer systems',
22548
+ parentId: electronicsAndAppliances.id,
22549
+ childrenCount: 0,
22550
+ };
22551
+ ids.set('Laptops & Computers', laptopsAndComputers.id);
22552
+ const monitors = {
22553
+ id: AXPDataGenerator.uuid(),
22554
+ title: 'Monitors',
22555
+ description: 'Computer monitors and display screens',
22556
+ parentId: electronicsAndAppliances.id,
22557
+ childrenCount: 0,
22558
+ };
22559
+ ids.set('Monitors', monitors.id);
22560
+ const accessories = {
22561
+ id: AXPDataGenerator.uuid(),
22562
+ title: 'Accessories (Cables, Chargers, Cases…)',
22563
+ description: 'Electronic accessories including cables, chargers, cases, and more',
22564
+ parentId: electronicsAndAppliances.id,
22565
+ childrenCount: 0,
22566
+ };
22567
+ ids.set('Accessories (Cables, Chargers, Cases…)', accessories.id);
22568
+ const homeAppliances = {
22569
+ id: AXPDataGenerator.uuid(),
22570
+ title: 'Home Appliances',
22571
+ description: 'Home and kitchen appliances',
22572
+ parentId: electronicsAndAppliances.id,
22573
+ childrenCount: 0,
22574
+ };
22575
+ ids.set('Home Appliances', homeAppliances.id);
22576
+ const audioAndVideo = {
22577
+ id: AXPDataGenerator.uuid(),
22578
+ title: 'Audio & Video',
22579
+ description: 'Audio and video equipment and devices',
22580
+ parentId: electronicsAndAppliances.id,
22581
+ childrenCount: 0,
22582
+ };
22583
+ ids.set('Audio & Video', audioAndVideo.id);
22584
+ const cameras = {
22585
+ id: AXPDataGenerator.uuid(),
22586
+ title: 'Cameras',
22587
+ description: 'Digital cameras and photography equipment',
22588
+ parentId: electronicsAndAppliances.id,
22589
+ childrenCount: 0,
22590
+ };
22591
+ ids.set('Cameras', cameras.id);
22592
+ return [
22593
+ general,
22594
+ location,
22595
+ documentManagement,
22596
+ qualityControl,
22597
+ compliance,
22598
+ projectManagement,
22599
+ electronicsAndAppliances,
22600
+ versionControl,
22601
+ accessControl,
22602
+ documentTypes,
22603
+ standards,
22604
+ testing,
22605
+ validation,
22606
+ regulations,
22607
+ auditTrail,
22608
+ certifications,
22609
+ planning,
22610
+ resources,
22611
+ timeline,
22612
+ mobilePhonesAndTablets,
22613
+ laptopsAndComputers,
22614
+ monitors,
22615
+ accessories,
22616
+ homeAppliances,
22617
+ audioAndVideo,
22618
+ cameras,
22619
+ ];
22620
+ })();
22621
+
22622
+ const findCategory$2 = (title) => metadataCategoryMocks.find((cat) => cat.title === title);
22623
+ const METADATA_MOCK = [
22624
+ // General - Common metadata fields
22625
+ {
22626
+ id: AXPDataGenerator.uuid(),
22627
+ name: 'title',
22628
+ title: 'Title',
22629
+ defaultValue: '',
22630
+ interface: titleInterface,
22631
+ categoryIds: [findCategory$2('General').id],
22632
+ categories: [findCategory$2('General')],
22633
+ },
22634
+ {
22635
+ id: AXPDataGenerator.uuid(),
22636
+ name: 'description',
22637
+ title: 'Description',
22638
+ defaultValue: '',
22639
+ interface: descriptionInterface,
22640
+ categoryIds: [findCategory$2('General').id],
22641
+ categories: [findCategory$2('General')],
22642
+ },
22643
+ {
22644
+ id: AXPDataGenerator.uuid(),
22645
+ name: 'created-date',
22646
+ title: 'Created Date',
22647
+ defaultValue: '',
22648
+ interface: dateInterface,
22649
+ categoryIds: [findCategory$2('General').id],
22650
+ categories: [findCategory$2('General')],
22651
+ },
22652
+ {
22653
+ id: AXPDataGenerator.uuid(),
22654
+ name: 'status',
22655
+ title: 'Status',
22656
+ defaultValue: 'Draft',
22657
+ interface: {
22658
+ type: 'select-editor',
22659
+ options: {
22660
+ dataSource: [
22661
+ { id: 'Draft', title: 'Draft' },
22662
+ { id: 'In Review', title: 'In Review' },
22663
+ { id: 'Approved', title: 'Approved' },
22664
+ { id: 'Published', title: 'Published' },
22665
+ { id: 'Archived', title: 'Archived' },
22666
+ ],
22667
+ placeholder: 'Select status',
22668
+ },
22669
+ },
22670
+ categoryIds: [findCategory$2('General').id],
22671
+ categories: [findCategory$2('General')],
22672
+ },
22673
+ {
22674
+ id: AXPDataGenerator.uuid(),
22675
+ name: 'priority',
22676
+ title: 'Priority',
22677
+ defaultValue: 'Medium',
22678
+ interface: {
22679
+ type: 'select-editor',
22680
+ options: {
22681
+ dataSource: [
22682
+ { id: 'Low', title: 'Low' },
22683
+ { id: 'Medium', title: 'Medium' },
22684
+ { id: 'High', title: 'High' },
22685
+ { id: 'Critical', title: 'Critical' },
22686
+ ],
22687
+ placeholder: 'Select priority',
22688
+ },
22689
+ },
22690
+ categoryIds: [findCategory$2('General').id],
22691
+ categories: [findCategory$2('General')],
22692
+ },
22693
+ {
22694
+ id: AXPDataGenerator.uuid(),
22695
+ name: 'tags',
22696
+ title: 'Tags',
22697
+ defaultValue: '',
22698
+ interface: textAreaInterface,
22699
+ categoryIds: [findCategory$2('General').id],
22700
+ categories: [findCategory$2('General')],
22701
+ },
22702
+ {
22703
+ id: AXPDataGenerator.uuid(),
22704
+ name: 'keywords',
22705
+ title: 'Keywords',
22706
+ defaultValue: '',
22707
+ interface: textAreaInterface,
22708
+ categoryIds: [findCategory$2('General').id],
22709
+ categories: [findCategory$2('General')],
22710
+ },
22711
+ {
22712
+ id: AXPDataGenerator.uuid(),
22713
+ name: 'language',
22714
+ title: 'Language',
22715
+ defaultValue: 'English',
22716
+ interface: {
22717
+ type: 'select-editor',
22718
+ options: {
22719
+ dataSource: [
22720
+ { id: 'English', title: 'English' },
22721
+ { id: 'Spanish', title: 'Spanish' },
22722
+ { id: 'French', title: 'French' },
22723
+ { id: 'German', title: 'German' },
22724
+ { id: 'Chinese', title: 'Chinese' },
22725
+ { id: 'Japanese', title: 'Japanese' },
22726
+ { id: 'Arabic', title: 'Arabic' },
22727
+ { id: 'Portuguese', title: 'Portuguese' },
22728
+ ],
22729
+ placeholder: 'Select language',
22730
+ },
22731
+ },
22732
+ categoryIds: [findCategory$2('General').id],
22733
+ categories: [findCategory$2('General')],
22734
+ },
22735
+ {
22736
+ id: AXPDataGenerator.uuid(),
22737
+ name: 'is-confidential',
22738
+ title: 'Confidential',
22739
+ defaultValue: 'false',
22740
+ interface: checkboxInterface,
22741
+ categoryIds: [findCategory$2('General').id],
22742
+ categories: [findCategory$2('General')],
22743
+ },
22744
+ // Location - Country / Province / City (uses existing datasources: countries, provinces, cities)
22745
+ {
22746
+ id: AXPDataGenerator.uuid(),
22747
+ name: 'country',
22748
+ title: 'Country',
22749
+ defaultValue: '',
22750
+ interface: {
22751
+ type: 'select-editor',
22752
+ options: {
22753
+ dataSource: 'countries',
22754
+ valueField: 'id',
22755
+ textField: 'title',
22756
+ placeholder: 'Select country',
22757
+ hasClearButton: true,
22758
+ },
22759
+ },
22760
+ categoryIds: [findCategory$2('Location').id],
22761
+ categories: [findCategory$2('Location')],
22762
+ },
22763
+ {
22764
+ id: AXPDataGenerator.uuid(),
22765
+ name: 'province',
22766
+ title: 'Province',
22767
+ defaultValue: '',
22768
+ interface: {
22769
+ type: 'select-editor',
22770
+ options: {
22771
+ dataSource: 'provinces',
22772
+ valueField: 'id',
22773
+ textField: 'title',
22774
+ placeholder: 'Select province',
22775
+ hasClearButton: true,
22776
+ filter: {
22777
+ logic: 'and',
22778
+ filters: [
22779
+ { field: 'parentId', operator: { type: 'equal' }, value: '{{ context.eval("country.id") }}' },
22780
+ ],
22781
+ },
22782
+ },
22783
+ triggers: [{ event: "{{ events.context('country') }}", action: '{{ widget.refresh() }}' }],
22784
+ },
22785
+ categoryIds: [findCategory$2('Location').id],
22786
+ categories: [findCategory$2('Location')],
22787
+ },
22788
+ {
22789
+ id: AXPDataGenerator.uuid(),
22790
+ name: 'city',
22791
+ title: 'City',
22792
+ defaultValue: '',
22793
+ interface: {
22794
+ type: 'select-editor',
22795
+ options: {
22796
+ dataSource: 'cities',
22797
+ valueField: 'id',
22798
+ textField: 'title',
22799
+ placeholder: 'Select city',
22800
+ hasClearButton: true,
22801
+ filter: {
22802
+ logic: 'and',
22803
+ filters: [
22804
+ { field: 'parentId', operator: { type: 'equal' }, value: '{{ context.eval("province.id") }}' },
22805
+ ],
22806
+ },
22807
+ },
22808
+ triggers: [{ event: "{{ events.context('province') }}", action: '{{ widget.refresh() }}' }],
22809
+ },
22810
+ categoryIds: [findCategory$2('Location').id],
22811
+ categories: [findCategory$2('Location')],
22812
+ },
22813
+ // Document Management - Version Control
22814
+ {
22815
+ id: AXPDataGenerator.uuid(),
22816
+ name: 'document-title',
22817
+ title: 'Document Title',
22818
+ defaultValue: '',
22819
+ interface: titleInterface,
22820
+ categoryIds: [findCategory$2('Version Control').id],
22821
+ categories: [findCategory$2('Version Control')],
22822
+ },
22823
+ {
22824
+ id: AXPDataGenerator.uuid(),
22825
+ name: 'document-version',
22826
+ title: 'Document Version',
22827
+ defaultValue: '1.0',
22828
+ interface: versionInterface,
22829
+ categoryIds: [findCategory$2('Version Control').id],
22830
+ categories: [findCategory$2('Version Control')],
22831
+ },
22832
+ {
22833
+ id: AXPDataGenerator.uuid(),
22834
+ name: 'last-modified',
22835
+ title: 'Last Modified',
22836
+ defaultValue: '',
22837
+ interface: dateInterface,
22838
+ categoryIds: [findCategory$2('Version Control').id],
22839
+ categories: [findCategory$2('Version Control')],
22840
+ },
22841
+ {
22842
+ id: AXPDataGenerator.uuid(),
22843
+ name: 'change-log',
22844
+ title: 'Change Log',
22845
+ defaultValue: '',
22846
+ interface: textAreaInterface,
22847
+ categoryIds: [findCategory$2('Version Control').id],
22848
+ categories: [findCategory$2('Version Control')],
22849
+ },
22850
+ // Document Management - Access Control
22851
+ {
22852
+ id: AXPDataGenerator.uuid(),
22853
+ name: 'access-level',
22854
+ title: 'Access Level',
22855
+ defaultValue: 'Public',
22856
+ interface: {
22857
+ type: 'select-editor',
22858
+ options: {
22859
+ dataSource: [
22860
+ { id: 'Public', title: 'Public' },
22861
+ { id: 'Internal', title: 'Internal' },
22862
+ { id: 'Confidential', title: 'Confidential' },
22863
+ { id: 'Restricted', title: 'Restricted' },
22864
+ { id: 'Private', title: 'Private' },
22865
+ ],
22866
+ placeholder: 'Select access level',
22867
+ },
22868
+ },
22869
+ categoryIds: [findCategory$2('Access Control').id],
22870
+ categories: [findCategory$2('Access Control')],
22871
+ },
22872
+ {
22873
+ id: AXPDataGenerator.uuid(),
22874
+ name: 'permissions',
22875
+ title: 'Permissions',
22876
+ defaultValue: '',
22877
+ interface: textAreaInterface,
22878
+ categoryIds: [findCategory$2('Access Control').id],
22879
+ categories: [findCategory$2('Access Control')],
22880
+ },
22881
+ // Document Management - Document Types
22882
+ {
22883
+ id: AXPDataGenerator.uuid(),
22884
+ name: 'document-type',
22885
+ title: 'Document Type',
22886
+ defaultValue: '',
22887
+ interface: {
22888
+ type: 'select-editor',
22889
+ options: {
22890
+ dataSource: [
22891
+ { id: 'Report', title: 'Report' },
22892
+ { id: 'Manual', title: 'Manual' },
22893
+ { id: 'Policy', title: 'Policy' },
22894
+ { id: 'Procedure', title: 'Procedure' },
22895
+ { id: 'Form', title: 'Form' },
22896
+ { id: 'Contract', title: 'Contract' },
22897
+ { id: 'Specification', title: 'Specification' },
22898
+ ],
22899
+ placeholder: 'Select document type',
22900
+ },
22901
+ },
22902
+ categoryIds: [findCategory$2('Document Types').id],
22903
+ categories: [findCategory$2('Document Types')],
22904
+ },
22905
+ {
22906
+ id: AXPDataGenerator.uuid(),
22907
+ name: 'document-category',
22908
+ title: 'Document Category',
22909
+ defaultValue: '',
22910
+ interface: {
22911
+ type: 'select-editor',
22912
+ options: {
22913
+ dataSource: [
22914
+ { id: 'Technical', title: 'Technical' },
22915
+ { id: 'Administrative', title: 'Administrative' },
22916
+ { id: 'Legal', title: 'Legal' },
22917
+ { id: 'Financial', title: 'Financial' },
22918
+ { id: 'HR', title: 'HR' },
22919
+ { id: 'Marketing', title: 'Marketing' },
22920
+ ],
22921
+ placeholder: 'Select document category',
22922
+ },
22923
+ },
22924
+ categoryIds: [findCategory$2('Document Types').id],
22925
+ categories: [findCategory$2('Document Types')],
22926
+ },
22927
+ {
22928
+ id: AXPDataGenerator.uuid(),
22929
+ name: 'file-format',
22930
+ title: 'File Format',
22931
+ defaultValue: '',
22932
+ interface: {
22933
+ type: 'select-editor',
22934
+ options: {
22935
+ dataSource: [
22936
+ { id: 'PDF', title: 'PDF' },
22937
+ { id: 'DOCX', title: 'DOCX' },
22938
+ { id: 'XLSX', title: 'XLSX' },
22939
+ { id: 'PPTX', title: 'PPTX' },
22940
+ { id: 'TXT', title: 'TXT' },
22941
+ { id: 'HTML', title: 'HTML' },
22942
+ { id: 'XML', title: 'XML' },
22943
+ { id: 'JSON', title: 'JSON' },
22944
+ ],
22945
+ placeholder: 'Select file format',
22946
+ },
22947
+ },
22948
+ categoryIds: [findCategory$2('Document Types').id],
22949
+ categories: [findCategory$2('Document Types')],
22950
+ },
22951
+ // Quality Control - Standards
22952
+ {
22953
+ id: AXPDataGenerator.uuid(),
22954
+ name: 'quality-standard',
22955
+ title: 'Quality Standard',
22956
+ defaultValue: '',
22957
+ interface: {
22958
+ type: 'select-editor',
22959
+ options: {
22960
+ dataSource: [
22961
+ { id: 'ISO 9001', title: 'ISO 9001' },
22962
+ { id: 'ISO 14001', title: 'ISO 14001' },
22963
+ { id: 'ISO 27001', title: 'ISO 27001' },
22964
+ { id: 'ISO 45001', title: 'ISO 45001' },
22965
+ { id: 'Six Sigma', title: 'Six Sigma' },
22966
+ { id: 'CMMI', title: 'CMMI' },
22967
+ ],
22968
+ placeholder: 'Select quality standard',
22969
+ },
22970
+ },
22971
+ categoryIds: [findCategory$2('Standards').id],
22972
+ categories: [findCategory$2('Standards')],
22973
+ },
22974
+ {
22975
+ id: AXPDataGenerator.uuid(),
22976
+ name: 'compliance-level',
22977
+ title: 'Compliance Level',
22978
+ defaultValue: '',
22979
+ interface: {
22980
+ type: 'select-editor',
22981
+ options: {
22982
+ dataSource: [
22983
+ { id: 'Level 1', title: 'Level 1 - Basic' },
22984
+ { id: 'Level 2', title: 'Level 2 - Intermediate' },
22985
+ { id: 'Level 3', title: 'Level 3 - Advanced' },
22986
+ { id: 'Level 4', title: 'Level 4 - Expert' },
22987
+ { id: 'Level 5', title: 'Level 5 - Master' },
22988
+ ],
22989
+ placeholder: 'Select compliance level',
22990
+ },
22991
+ },
22992
+ categoryIds: [findCategory$2('Standards').id],
22993
+ categories: [findCategory$2('Standards')],
22994
+ },
22995
+ {
22996
+ id: AXPDataGenerator.uuid(),
22997
+ name: 'standard-version',
22998
+ title: 'Standard Version',
22999
+ defaultValue: '',
23000
+ interface: versionInterface,
23001
+ categoryIds: [findCategory$2('Standards').id],
23002
+ categories: [findCategory$2('Standards')],
23003
+ },
23004
+ // Quality Control - Testing
23005
+ {
23006
+ id: AXPDataGenerator.uuid(),
23007
+ name: 'test-status',
23008
+ title: 'Test Status',
23009
+ defaultValue: 'Pending',
23010
+ interface: {
23011
+ type: 'select-editor',
23012
+ options: {
23013
+ dataSource: [
23014
+ { id: 'Pending', title: 'Pending' },
23015
+ { id: 'In Progress', title: 'In Progress' },
23016
+ { id: 'Passed', title: 'Passed' },
23017
+ { id: 'Failed', title: 'Failed' },
23018
+ { id: 'Blocked', title: 'Blocked' },
23019
+ { id: 'Skipped', title: 'Skipped' },
23020
+ ],
23021
+ placeholder: 'Select test status',
23022
+ },
23023
+ },
23024
+ categoryIds: [findCategory$2('Testing').id],
23025
+ categories: [findCategory$2('Testing')],
23026
+ },
23027
+ {
23028
+ id: AXPDataGenerator.uuid(),
23029
+ name: 'test-results',
23030
+ title: 'Test Results',
23031
+ defaultValue: '',
23032
+ interface: textAreaInterface,
23033
+ categoryIds: [findCategory$2('Testing').id],
23034
+ categories: [findCategory$2('Testing')],
23035
+ },
23036
+ {
23037
+ id: AXPDataGenerator.uuid(),
23038
+ name: 'test-date',
23039
+ title: 'Test Date',
23040
+ defaultValue: '',
23041
+ interface: dateInterface,
23042
+ categoryIds: [findCategory$2('Testing').id],
23043
+ categories: [findCategory$2('Testing')],
23044
+ },
23045
+ // Quality Control - Validation
23046
+ {
23047
+ id: AXPDataGenerator.uuid(),
23048
+ name: 'validation-status',
23049
+ title: 'Validation Status',
23050
+ defaultValue: 'Not Validated',
23051
+ interface: {
23052
+ type: 'select-editor',
23053
+ options: {
23054
+ dataSource: [
23055
+ { id: 'Not Validated', title: 'Not Validated' },
23056
+ { id: 'In Validation', title: 'In Validation' },
23057
+ { id: 'Validated', title: 'Validated' },
23058
+ { id: 'Validation Failed', title: 'Validation Failed' },
23059
+ { id: 'Requires Review', title: 'Requires Review' },
23060
+ ],
23061
+ placeholder: 'Select validation status',
23062
+ },
23063
+ },
23064
+ categoryIds: [findCategory$2('Validation').id],
23065
+ categories: [findCategory$2('Validation')],
23066
+ },
23067
+ {
23068
+ id: AXPDataGenerator.uuid(),
23069
+ name: 'validation-notes',
23070
+ title: 'Validation Notes',
23071
+ defaultValue: '',
23072
+ interface: textAreaInterface,
23073
+ categoryIds: [findCategory$2('Validation').id],
23074
+ categories: [findCategory$2('Validation')],
23075
+ },
23076
+ // Compliance - Regulations
23077
+ {
23078
+ id: AXPDataGenerator.uuid(),
23079
+ name: 'regulatory-framework',
23080
+ title: 'Regulatory Framework',
23081
+ defaultValue: '',
23082
+ interface: {
23083
+ type: 'select-editor',
23084
+ options: {
23085
+ dataSource: [
23086
+ { id: 'GDPR', title: 'GDPR' },
23087
+ { id: 'HIPAA', title: 'HIPAA' },
23088
+ { id: 'SOX', title: 'SOX' },
23089
+ { id: 'PCI DSS', title: 'PCI DSS' },
23090
+ { id: 'FDA', title: 'FDA' },
23091
+ { id: 'FCC', title: 'FCC' },
23092
+ { id: 'EU Directives', title: 'EU Directives' },
23093
+ ],
23094
+ placeholder: 'Select regulatory framework',
23095
+ },
23096
+ },
23097
+ categoryIds: [findCategory$2('Regulations').id],
23098
+ categories: [findCategory$2('Regulations')],
23099
+ },
23100
+ {
23101
+ id: AXPDataGenerator.uuid(),
23102
+ name: 'compliance-status',
23103
+ title: 'Compliance Status',
23104
+ defaultValue: 'Under Review',
23105
+ interface: {
23106
+ type: 'select-editor',
23107
+ options: {
23108
+ dataSource: [
23109
+ { id: 'Under Review', title: 'Under Review' },
23110
+ { id: 'Compliant', title: 'Compliant' },
23111
+ { id: 'Non-Compliant', title: 'Non-Compliant' },
23112
+ { id: 'Partially Compliant', title: 'Partially Compliant' },
23113
+ { id: 'Exempt', title: 'Exempt' },
23114
+ ],
23115
+ placeholder: 'Select compliance status',
23116
+ },
23117
+ },
23118
+ categoryIds: [findCategory$2('Regulations').id],
23119
+ categories: [findCategory$2('Regulations')],
23120
+ },
23121
+ {
23122
+ id: AXPDataGenerator.uuid(),
23123
+ name: 'regulation-reference',
23124
+ title: 'Regulation Reference',
23125
+ defaultValue: '',
23126
+ interface: textAreaInterface,
23127
+ categoryIds: [findCategory$2('Regulations').id],
23128
+ categories: [findCategory$2('Regulations')],
23129
+ },
23130
+ // Compliance - Audit Trail
23131
+ {
23132
+ id: AXPDataGenerator.uuid(),
23133
+ name: 'audit-trail',
23134
+ title: 'Audit Trail',
23135
+ defaultValue: '',
23136
+ interface: textAreaInterface,
23137
+ categoryIds: [findCategory$2('Audit Trail').id],
23138
+ categories: [findCategory$2('Audit Trail')],
23139
+ },
23140
+ {
23141
+ id: AXPDataGenerator.uuid(),
23142
+ name: 'audit-date',
23143
+ title: 'Audit Date',
23144
+ defaultValue: '',
23145
+ interface: dateInterface,
23146
+ categoryIds: [findCategory$2('Audit Trail').id],
23147
+ categories: [findCategory$2('Audit Trail')],
23148
+ },
23149
+ // Compliance - Certifications
23150
+ {
23151
+ id: AXPDataGenerator.uuid(),
23152
+ name: 'certification-type',
23153
+ title: 'Certification Type',
23154
+ defaultValue: '',
23155
+ interface: {
23156
+ type: 'select-editor',
23157
+ options: {
23158
+ dataSource: [
23159
+ { id: 'ISO Certification', title: 'ISO Certification' },
23160
+ { id: 'Industry Standard', title: 'Industry Standard' },
23161
+ { id: 'Professional Certification', title: 'Professional Certification' },
23162
+ { id: 'Product Certification', title: 'Product Certification' },
23163
+ { id: 'Quality Certification', title: 'Quality Certification' },
23164
+ ],
23165
+ placeholder: 'Select certification type',
23166
+ },
23167
+ },
23168
+ categoryIds: [findCategory$2('Certifications').id],
23169
+ categories: [findCategory$2('Certifications')],
23170
+ },
23171
+ {
23172
+ id: AXPDataGenerator.uuid(),
23173
+ name: 'certification-number',
23174
+ title: 'Certification Number',
23175
+ defaultValue: '',
23176
+ interface: textInterface,
23177
+ categoryIds: [findCategory$2('Certifications').id],
23178
+ categories: [findCategory$2('Certifications')],
23179
+ },
23180
+ {
23181
+ id: AXPDataGenerator.uuid(),
23182
+ name: 'certification-expiry',
23183
+ title: 'Certification Expiry',
23184
+ defaultValue: '',
23185
+ interface: dateInterface,
23186
+ categoryIds: [findCategory$2('Certifications').id],
23187
+ categories: [findCategory$2('Certifications')],
23188
+ },
23189
+ // Project Management - Planning
23190
+ {
23191
+ id: AXPDataGenerator.uuid(),
23192
+ name: 'project-phase',
23193
+ title: 'Project Phase',
23194
+ defaultValue: 'Planning',
23195
+ interface: {
23196
+ type: 'select-editor',
23197
+ options: {
23198
+ dataSource: [
23199
+ { id: 'Planning', title: 'Planning' },
23200
+ { id: 'Initiation', title: 'Initiation' },
23201
+ { id: 'Execution', title: 'Execution' },
23202
+ { id: 'Monitoring', title: 'Monitoring' },
23203
+ { id: 'Closing', title: 'Closing' },
23204
+ ],
23205
+ placeholder: 'Select project phase',
23206
+ },
23207
+ },
23208
+ categoryIds: [findCategory$2('Planning').id],
23209
+ categories: [findCategory$2('Planning')],
23210
+ },
23211
+ {
23212
+ id: AXPDataGenerator.uuid(),
23213
+ name: 'project-milestone',
23214
+ title: 'Project Milestone',
23215
+ defaultValue: '',
23216
+ interface: textAreaInterface,
23217
+ categoryIds: [findCategory$2('Planning').id],
23218
+ categories: [findCategory$2('Planning')],
23219
+ },
23220
+ {
23221
+ id: AXPDataGenerator.uuid(),
23222
+ name: 'project-objectives',
23223
+ title: 'Project Objectives',
23224
+ defaultValue: '',
23225
+ interface: textAreaInterface,
23226
+ categoryIds: [findCategory$2('Planning').id],
23227
+ categories: [findCategory$2('Planning')],
23228
+ },
23229
+ // Project Management - Resources
23230
+ {
23231
+ id: AXPDataGenerator.uuid(),
23232
+ name: 'resource-allocation',
23233
+ title: 'Resource Allocation',
23234
+ defaultValue: '',
23235
+ interface: textAreaInterface,
23236
+ categoryIds: [findCategory$2('Resources').id],
23237
+ categories: [findCategory$2('Resources')],
23238
+ },
23239
+ {
23240
+ id: AXPDataGenerator.uuid(),
23241
+ name: 'budget',
23242
+ title: 'Budget',
23243
+ defaultValue: '',
23244
+ interface: numberInterface,
23245
+ categoryIds: [findCategory$2('Resources').id],
23246
+ categories: [findCategory$2('Resources')],
23247
+ },
23248
+ {
23249
+ id: AXPDataGenerator.uuid(),
23250
+ name: 'team-members',
23251
+ title: 'Team Members',
23252
+ defaultValue: '',
23253
+ interface: textAreaInterface,
23254
+ categoryIds: [findCategory$2('Resources').id],
23255
+ categories: [findCategory$2('Resources')],
23256
+ },
23257
+ // Project Management - Timeline
23258
+ {
23259
+ id: AXPDataGenerator.uuid(),
23260
+ name: 'start-date',
23261
+ title: 'Start Date',
23262
+ defaultValue: '',
23263
+ interface: dateInterface,
23264
+ categoryIds: [findCategory$2('Timeline').id],
23265
+ categories: [findCategory$2('Timeline')],
23266
+ },
23267
+ {
23268
+ id: AXPDataGenerator.uuid(),
23269
+ name: 'end-date',
23270
+ title: 'End Date',
23271
+ defaultValue: '',
23272
+ interface: dateInterface,
23273
+ categoryIds: [findCategory$2('Timeline').id],
23274
+ categories: [findCategory$2('Timeline')],
23275
+ },
23276
+ {
23277
+ id: AXPDataGenerator.uuid(),
23278
+ name: 'deadline',
23279
+ title: 'Deadline',
23280
+ defaultValue: '',
23281
+ interface: dateInterface,
23282
+ categoryIds: [findCategory$2('Timeline').id],
23283
+ categories: [findCategory$2('Timeline')],
23284
+ },
23285
+ // Electronics & Appliances - Mobile Phones & Tablets
23286
+ {
23287
+ id: AXPDataGenerator.uuid(),
23288
+ name: 'screen-size',
23289
+ title: 'Screen Size',
23290
+ defaultValue: '',
23291
+ interface: textInterface,
23292
+ categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
23293
+ categories: [findCategory$2('Mobile Phones & Tablets')],
23294
+ },
23295
+ {
23296
+ id: AXPDataGenerator.uuid(),
23297
+ name: 'operating-system',
23298
+ title: 'Operating System',
23299
+ defaultValue: '',
23300
+ interface: {
23301
+ type: 'select-editor',
23302
+ options: {
23303
+ dataSource: [
23304
+ { id: 'Android', title: 'Android' },
23305
+ { id: 'iOS', title: 'iOS' },
23306
+ { id: 'Windows', title: 'Windows' },
23307
+ { id: 'HarmonyOS', title: 'HarmonyOS' },
23308
+ ],
23309
+ placeholder: 'Select operating system',
23310
+ },
23311
+ },
23312
+ categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
23313
+ categories: [findCategory$2('Mobile Phones & Tablets')],
23314
+ },
23315
+ {
23316
+ id: AXPDataGenerator.uuid(),
23317
+ name: 'storage-capacity',
23318
+ title: 'Storage Capacity',
23319
+ defaultValue: '',
23320
+ interface: {
23321
+ type: 'select-editor',
23322
+ options: {
23323
+ dataSource: [
23324
+ { id: '32GB', title: '32 GB' },
23325
+ { id: '64GB', title: '64 GB' },
23326
+ { id: '128GB', title: '128 GB' },
23327
+ { id: '256GB', title: '256 GB' },
23328
+ { id: '512GB', title: '512 GB' },
23329
+ { id: '1TB', title: '1 TB' },
23330
+ ],
23331
+ placeholder: 'Select storage capacity',
23332
+ },
23333
+ },
23334
+ categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
23335
+ categories: [findCategory$2('Mobile Phones & Tablets')],
23336
+ },
23337
+ {
23338
+ id: AXPDataGenerator.uuid(),
23339
+ name: 'ram',
23340
+ title: 'RAM',
23341
+ defaultValue: '',
23342
+ interface: {
23343
+ type: 'select-editor',
23344
+ options: {
23345
+ dataSource: [
23346
+ { id: '2GB', title: '2 GB' },
23347
+ { id: '3GB', title: '3 GB' },
23348
+ { id: '4GB', title: '4 GB' },
23349
+ { id: '6GB', title: '6 GB' },
23350
+ { id: '8GB', title: '8 GB' },
23351
+ { id: '12GB', title: '12 GB' },
23352
+ { id: '16GB', title: '16 GB' },
23353
+ ],
23354
+ placeholder: 'Select RAM',
23355
+ },
23356
+ },
23357
+ categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
23358
+ categories: [findCategory$2('Mobile Phones & Tablets')],
23359
+ },
23360
+ {
23361
+ id: AXPDataGenerator.uuid(),
23362
+ name: 'battery-capacity',
23363
+ title: 'Battery Capacity',
23364
+ defaultValue: '',
23365
+ interface: textInterface,
23366
+ categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
23367
+ categories: [findCategory$2('Mobile Phones & Tablets')],
23368
+ },
23369
+ {
23370
+ id: AXPDataGenerator.uuid(),
23371
+ name: 'camera-resolution',
23372
+ title: 'Camera Resolution',
23373
+ defaultValue: '',
23374
+ interface: textInterface,
23375
+ categoryIds: [findCategory$2('Mobile Phones & Tablets').id],
23376
+ categories: [findCategory$2('Mobile Phones & Tablets')],
23377
+ },
23378
+ // Electronics & Appliances - Laptops & Computers
23379
+ {
23380
+ id: AXPDataGenerator.uuid(),
23381
+ name: 'processor',
23382
+ title: 'Processor',
23383
+ defaultValue: '',
23384
+ interface: textInterface,
23385
+ categoryIds: [findCategory$2('Laptops & Computers').id],
23386
+ categories: [findCategory$2('Laptops & Computers')],
23387
+ },
23388
+ {
23389
+ id: AXPDataGenerator.uuid(),
23390
+ name: 'memory',
23391
+ title: 'Memory (RAM)',
23392
+ defaultValue: '',
23393
+ interface: {
23394
+ type: 'select-editor',
23395
+ options: {
23396
+ dataSource: [
23397
+ { id: '4GB', title: '4 GB' },
23398
+ { id: '8GB', title: '8 GB' },
23399
+ { id: '16GB', title: '16 GB' },
23400
+ { id: '32GB', title: '32 GB' },
23401
+ { id: '64GB', title: '64 GB' },
23402
+ ],
23403
+ placeholder: 'Select memory (RAM)',
23404
+ },
23405
+ },
23406
+ categoryIds: [findCategory$2('Laptops & Computers').id],
23407
+ categories: [findCategory$2('Laptops & Computers')],
23408
+ },
23409
+ {
23410
+ id: AXPDataGenerator.uuid(),
23411
+ name: 'hard-drive',
23412
+ title: 'Hard Drive',
23413
+ defaultValue: '',
23414
+ interface: {
23415
+ type: 'select-editor',
23416
+ options: {
23417
+ dataSource: [
23418
+ { id: '256GB SSD', title: '256 GB SSD' },
23419
+ { id: '512GB SSD', title: '512 GB SSD' },
23420
+ { id: '1TB SSD', title: '1 TB SSD' },
23421
+ { id: '2TB SSD', title: '2 TB SSD' },
23422
+ { id: '500GB HDD', title: '500 GB HDD' },
23423
+ { id: '1TB HDD', title: '1 TB HDD' },
23424
+ { id: '2TB HDD', title: '2 TB HDD' },
23425
+ ],
23426
+ placeholder: 'Select hard drive',
23427
+ },
23428
+ },
23429
+ categoryIds: [findCategory$2('Laptops & Computers').id],
23430
+ categories: [findCategory$2('Laptops & Computers')],
23431
+ },
23432
+ {
23433
+ id: AXPDataGenerator.uuid(),
23434
+ name: 'graphics-card',
23435
+ title: 'Graphics Card',
23436
+ defaultValue: '',
23437
+ interface: textInterface,
23438
+ categoryIds: [findCategory$2('Laptops & Computers').id],
23439
+ categories: [findCategory$2('Laptops & Computers')],
23440
+ },
23441
+ {
23442
+ id: AXPDataGenerator.uuid(),
23443
+ name: 'display-size',
23444
+ title: 'Display Size',
23445
+ defaultValue: '',
23446
+ interface: textInterface,
23447
+ categoryIds: [findCategory$2('Laptops & Computers').id],
23448
+ categories: [findCategory$2('Laptops & Computers')],
23449
+ },
23450
+ {
23451
+ id: AXPDataGenerator.uuid(),
23452
+ name: 'weight',
23453
+ title: 'Weight',
23454
+ defaultValue: '',
23455
+ interface: numberInterface,
23456
+ categoryIds: [findCategory$2('Laptops & Computers').id],
23457
+ categories: [findCategory$2('Laptops & Computers')],
23458
+ },
23459
+ // Electronics & Appliances - Monitors
23460
+ {
23461
+ id: AXPDataGenerator.uuid(),
23462
+ name: 'monitor-size',
23463
+ title: 'Monitor Size',
23464
+ defaultValue: '',
23465
+ interface: textInterface,
23466
+ categoryIds: [findCategory$2('Monitors').id],
23467
+ categories: [findCategory$2('Monitors')],
23468
+ },
23469
+ {
23470
+ id: AXPDataGenerator.uuid(),
23471
+ name: 'resolution',
23472
+ title: 'Resolution',
23473
+ defaultValue: '',
23474
+ interface: {
23475
+ type: 'select-editor',
23476
+ options: {
23477
+ dataSource: [
23478
+ { id: '1920x1080', title: '1920x1080 (Full HD)' },
23479
+ { id: '2560x1440', title: '2560x1440 (QHD)' },
23480
+ { id: '3840x2160', title: '3840x2160 (4K UHD)' },
23481
+ { id: '5120x2880', title: '5120x2880 (5K)' },
23482
+ { id: '7680x4320', title: '7680x4320 (8K UHD)' },
23483
+ ],
23484
+ placeholder: 'Select resolution',
23485
+ },
23486
+ },
23487
+ categoryIds: [findCategory$2('Monitors').id],
23488
+ categories: [findCategory$2('Monitors')],
23489
+ },
23490
+ {
23491
+ id: AXPDataGenerator.uuid(),
23492
+ name: 'refresh-rate',
23493
+ title: 'Refresh Rate',
23494
+ defaultValue: '',
23495
+ interface: textInterface,
23496
+ categoryIds: [findCategory$2('Monitors').id],
23497
+ categories: [findCategory$2('Monitors')],
23498
+ },
23499
+ {
23500
+ id: AXPDataGenerator.uuid(),
23501
+ name: 'panel-type',
23502
+ title: 'Panel Type',
23503
+ defaultValue: '',
23504
+ interface: {
23505
+ type: 'select-editor',
23506
+ options: {
23507
+ dataSource: [
23508
+ { id: 'IPS', title: 'IPS' },
23509
+ { id: 'VA', title: 'VA' },
23510
+ { id: 'TN', title: 'TN' },
23511
+ { id: 'OLED', title: 'OLED' },
23512
+ { id: 'QLED', title: 'QLED' },
23513
+ ],
23514
+ placeholder: 'Select panel type',
23515
+ },
23516
+ },
23517
+ categoryIds: [findCategory$2('Monitors').id],
23518
+ categories: [findCategory$2('Monitors')],
23519
+ },
23520
+ {
23521
+ id: AXPDataGenerator.uuid(),
23522
+ name: 'connectivity',
23523
+ title: 'Connectivity',
23524
+ defaultValue: '',
23525
+ interface: textAreaInterface,
23526
+ categoryIds: [findCategory$2('Monitors').id],
23527
+ categories: [findCategory$2('Monitors')],
23528
+ },
23529
+ // Electronics & Appliances - Accessories (Cables, Chargers, Cases…)
23530
+ {
23531
+ id: AXPDataGenerator.uuid(),
23532
+ name: 'accessory-type',
23533
+ title: 'Accessory Type',
23534
+ defaultValue: '',
23535
+ interface: {
23536
+ type: 'select-editor',
23537
+ options: {
23538
+ dataSource: [
23539
+ { id: 'Cable', title: 'Cable' },
23540
+ { id: 'Charger', title: 'Charger' },
23541
+ { id: 'Case', title: 'Case' },
23542
+ { id: 'Screen Protector', title: 'Screen Protector' },
23543
+ { id: 'Stand', title: 'Stand' },
23544
+ { id: 'Adapter', title: 'Adapter' },
23545
+ { id: 'Dock', title: 'Dock' },
23546
+ ],
23547
+ placeholder: 'Select accessory type',
23548
+ },
23549
+ },
23550
+ categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
23551
+ categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
23552
+ },
23553
+ {
23554
+ id: AXPDataGenerator.uuid(),
23555
+ name: 'compatibility',
23556
+ title: 'Compatibility',
23557
+ defaultValue: '',
23558
+ interface: textAreaInterface,
23559
+ categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
23560
+ categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
23561
+ },
23562
+ {
23563
+ id: AXPDataGenerator.uuid(),
23564
+ name: 'cable-length',
23565
+ title: 'Cable Length',
23566
+ defaultValue: '',
23567
+ interface: textInterface,
23568
+ categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
23569
+ categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
23570
+ },
23571
+ {
23572
+ id: AXPDataGenerator.uuid(),
23573
+ name: 'power-output',
23574
+ title: 'Power Output',
23575
+ defaultValue: '',
23576
+ interface: textInterface,
23577
+ categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
23578
+ categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
23579
+ },
23580
+ {
23581
+ id: AXPDataGenerator.uuid(),
23582
+ name: 'material',
23583
+ title: 'Material',
23584
+ defaultValue: '',
23585
+ interface: {
23586
+ type: 'select-editor',
23587
+ options: {
23588
+ dataSource: [
23589
+ { id: 'Silicone', title: 'Silicone' },
23590
+ { id: 'Leather', title: 'Leather' },
23591
+ { id: 'Plastic', title: 'Plastic' },
23592
+ { id: 'Metal', title: 'Metal' },
23593
+ { id: 'Fabric', title: 'Fabric' },
23594
+ { id: 'TPU', title: 'TPU' },
23595
+ { id: 'Carbon Fiber', title: 'Carbon Fiber' },
23596
+ ],
23597
+ placeholder: 'Select material',
23598
+ },
23599
+ },
23600
+ categoryIds: [findCategory$2('Accessories (Cables, Chargers, Cases…)').id],
23601
+ categories: [findCategory$2('Accessories (Cables, Chargers, Cases…)')],
23602
+ },
23603
+ // Electronics & Appliances - Home Appliances
23604
+ {
23605
+ id: AXPDataGenerator.uuid(),
23606
+ name: 'appliance-type',
23607
+ title: 'Appliance Type',
23608
+ defaultValue: '',
23609
+ interface: {
23610
+ type: 'select-editor',
23611
+ options: {
23612
+ dataSource: [
23613
+ { id: 'Refrigerator', title: 'Refrigerator' },
23614
+ { id: 'Washing Machine', title: 'Washing Machine' },
23615
+ { id: 'Dishwasher', title: 'Dishwasher' },
23616
+ { id: 'Oven', title: 'Oven' },
23617
+ { id: 'Microwave', title: 'Microwave' },
23618
+ { id: 'Air Conditioner', title: 'Air Conditioner' },
23619
+ { id: 'Vacuum Cleaner', title: 'Vacuum Cleaner' },
23620
+ ],
23621
+ placeholder: 'Select appliance type',
23622
+ },
23623
+ },
23624
+ categoryIds: [findCategory$2('Home Appliances').id],
23625
+ categories: [findCategory$2('Home Appliances')],
23626
+ },
23627
+ {
23628
+ id: AXPDataGenerator.uuid(),
23629
+ name: 'energy-rating',
23630
+ title: 'Energy Rating',
23631
+ defaultValue: '',
23632
+ interface: {
23633
+ type: 'select-editor',
23634
+ options: {
23635
+ dataSource: [
23636
+ { id: 'A+++', title: 'A+++' },
23637
+ { id: 'A++', title: 'A++' },
23638
+ { id: 'A+', title: 'A+' },
23639
+ { id: 'A', title: 'A' },
23640
+ { id: 'B', title: 'B' },
23641
+ { id: 'C', title: 'C' },
23642
+ { id: 'D', title: 'D' },
23643
+ ],
23644
+ placeholder: 'Select energy rating',
23645
+ },
23646
+ },
23647
+ categoryIds: [findCategory$2('Home Appliances').id],
23648
+ categories: [findCategory$2('Home Appliances')],
23649
+ },
23650
+ {
23651
+ id: AXPDataGenerator.uuid(),
23652
+ name: 'capacity',
23653
+ title: 'Capacity',
23654
+ defaultValue: '',
23655
+ interface: textInterface,
23656
+ categoryIds: [findCategory$2('Home Appliances').id],
23657
+ categories: [findCategory$2('Home Appliances')],
23658
+ },
23659
+ {
23660
+ id: AXPDataGenerator.uuid(),
23661
+ name: 'power-consumption',
23662
+ title: 'Power Consumption',
23663
+ defaultValue: '',
23664
+ interface: textInterface,
23665
+ categoryIds: [findCategory$2('Home Appliances').id],
23666
+ categories: [findCategory$2('Home Appliances')],
23667
+ },
23668
+ {
23669
+ id: AXPDataGenerator.uuid(),
23670
+ name: 'dimensions',
23671
+ title: 'Dimensions',
23672
+ defaultValue: '',
23673
+ interface: textInterface,
23674
+ categoryIds: [findCategory$2('Home Appliances').id],
23675
+ categories: [findCategory$2('Home Appliances')],
23676
+ },
23677
+ {
23678
+ id: AXPDataGenerator.uuid(),
23679
+ name: 'features',
23680
+ title: 'Features',
23681
+ defaultValue: '',
23682
+ interface: textAreaInterface,
23683
+ categoryIds: [findCategory$2('Home Appliances').id],
23684
+ categories: [findCategory$2('Home Appliances')],
23685
+ },
23686
+ // Electronics & Appliances - Audio & Video
23687
+ {
23688
+ id: AXPDataGenerator.uuid(),
23689
+ name: 'audio-video-type',
23690
+ title: 'Audio/Video Type',
23691
+ defaultValue: '',
23692
+ interface: {
23693
+ type: 'select-editor',
23694
+ options: {
23695
+ dataSource: [
23696
+ { id: 'Headphones', title: 'Headphones' },
23697
+ { id: 'Speakers', title: 'Speakers' },
23698
+ { id: 'Soundbar', title: 'Soundbar' },
23699
+ { id: 'TV', title: 'TV' },
23700
+ { id: 'Projector', title: 'Projector' },
23701
+ { id: 'Home Theater', title: 'Home Theater' },
23702
+ { id: 'Microphone', title: 'Microphone' },
23703
+ ],
23704
+ placeholder: 'Select audio/video type',
23705
+ },
23706
+ },
23707
+ categoryIds: [findCategory$2('Audio & Video').id],
23708
+ categories: [findCategory$2('Audio & Video')],
23709
+ },
23710
+ {
23711
+ id: AXPDataGenerator.uuid(),
23712
+ name: 'audio-output',
23713
+ title: 'Audio Output',
23714
+ defaultValue: '',
23715
+ interface: textInterface,
23716
+ categoryIds: [findCategory$2('Audio & Video').id],
23717
+ categories: [findCategory$2('Audio & Video')],
23718
+ },
23719
+ {
23720
+ id: AXPDataGenerator.uuid(),
23721
+ name: 'video-resolution',
23722
+ title: 'Video Resolution',
23723
+ defaultValue: '',
23724
+ interface: {
23725
+ type: 'select-editor',
23726
+ options: {
23727
+ dataSource: [
23728
+ { id: '720p', title: '720p (HD)' },
23729
+ { id: '1080p', title: '1080p (Full HD)' },
23730
+ { id: '1440p', title: '1440p (QHD)' },
23731
+ { id: '2160p', title: '2160p (4K UHD)' },
23732
+ { id: '4320p', title: '4320p (8K UHD)' },
23733
+ ],
23734
+ placeholder: 'Select video resolution',
23735
+ },
23736
+ },
23737
+ categoryIds: [findCategory$2('Audio & Video').id],
23738
+ categories: [findCategory$2('Audio & Video')],
23739
+ },
23740
+ {
23741
+ id: AXPDataGenerator.uuid(),
23742
+ name: 'connectivity-options',
23743
+ title: 'Connectivity Options',
23744
+ defaultValue: '',
23745
+ interface: textAreaInterface,
23746
+ categoryIds: [findCategory$2('Audio & Video').id],
23747
+ categories: [findCategory$2('Audio & Video')],
23748
+ },
23749
+ {
23750
+ id: AXPDataGenerator.uuid(),
23751
+ name: 'frequency-response',
23752
+ title: 'Frequency Response',
23753
+ defaultValue: '',
23754
+ interface: textInterface,
23755
+ categoryIds: [findCategory$2('Audio & Video').id],
23756
+ categories: [findCategory$2('Audio & Video')],
23757
+ },
23758
+ {
23759
+ id: AXPDataGenerator.uuid(),
23760
+ name: 'wattage',
23761
+ title: 'Wattage',
23762
+ defaultValue: '',
23763
+ interface: numberInterface,
23764
+ categoryIds: [findCategory$2('Audio & Video').id],
23765
+ categories: [findCategory$2('Audio & Video')],
23766
+ },
23767
+ // Electronics & Appliances - Cameras
23768
+ {
23769
+ id: AXPDataGenerator.uuid(),
23770
+ name: 'camera-type',
23771
+ title: 'Camera Type',
23772
+ defaultValue: '',
23773
+ interface: {
23774
+ type: 'select-editor',
23775
+ options: {
23776
+ dataSource: [
23777
+ { id: 'DSLR', title: 'DSLR' },
23778
+ { id: 'Mirrorless', title: 'Mirrorless' },
23779
+ { id: 'Point and Shoot', title: 'Point and Shoot' },
23780
+ { id: 'Action Camera', title: 'Action Camera' },
23781
+ { id: 'Instant Camera', title: 'Instant Camera' },
23782
+ { id: 'Film Camera', title: 'Film Camera' },
23783
+ ],
23784
+ placeholder: 'Select camera type',
23785
+ },
23786
+ },
23787
+ categoryIds: [findCategory$2('Cameras').id],
23788
+ categories: [findCategory$2('Cameras')],
23789
+ },
23790
+ {
23791
+ id: AXPDataGenerator.uuid(),
23792
+ name: 'megapixels',
23793
+ title: 'Megapixels',
23794
+ defaultValue: '',
23795
+ interface: numberInterface,
23796
+ categoryIds: [findCategory$2('Cameras').id],
23797
+ categories: [findCategory$2('Cameras')],
23798
+ },
23799
+ {
23800
+ id: AXPDataGenerator.uuid(),
23801
+ name: 'sensor-size',
23802
+ title: 'Sensor Size',
23803
+ defaultValue: '',
23804
+ interface: textInterface,
23805
+ categoryIds: [findCategory$2('Cameras').id],
23806
+ categories: [findCategory$2('Cameras')],
23807
+ },
23808
+ {
23809
+ id: AXPDataGenerator.uuid(),
23810
+ name: 'lens-type',
23811
+ title: 'Lens Type',
23812
+ defaultValue: '',
23813
+ interface: {
23814
+ type: 'select-editor',
23815
+ options: {
23816
+ dataSource: [
23817
+ { id: 'Prime', title: 'Prime' },
23818
+ { id: 'Zoom', title: 'Zoom' },
23819
+ { id: 'Wide Angle', title: 'Wide Angle' },
23820
+ { id: 'Telephoto', title: 'Telephoto' },
23821
+ { id: 'Macro', title: 'Macro' },
23822
+ { id: 'Fisheye', title: 'Fisheye' },
23823
+ ],
23824
+ placeholder: 'Select lens type',
23825
+ },
23826
+ },
23827
+ categoryIds: [findCategory$2('Cameras').id],
23828
+ categories: [findCategory$2('Cameras')],
23829
+ },
23830
+ {
23831
+ id: AXPDataGenerator.uuid(),
23832
+ name: 'iso-range',
23833
+ title: 'ISO Range',
23834
+ defaultValue: '',
23835
+ interface: textInterface,
23836
+ categoryIds: [findCategory$2('Cameras').id],
23837
+ categories: [findCategory$2('Cameras')],
23838
+ },
23839
+ {
23840
+ id: AXPDataGenerator.uuid(),
23841
+ name: 'video-recording',
23842
+ title: 'Video Recording',
23843
+ defaultValue: '',
23844
+ interface: textInterface,
23845
+ categoryIds: [findCategory$2('Cameras').id],
23846
+ categories: [findCategory$2('Cameras')],
23847
+ },
23848
+ {
23849
+ id: AXPDataGenerator.uuid(),
23850
+ name: 'battery-life',
23851
+ title: 'Battery Life',
23852
+ defaultValue: '',
23853
+ interface: textInterface,
23854
+ categoryIds: [findCategory$2('Cameras').id],
23855
+ categories: [findCategory$2('Cameras')],
23856
+ },
23857
+ ];
23858
+
23859
+ class AXCMetaDataDefinitionDataSeeder {
23860
+ constructor() {
23861
+ this.storageService = inject(AXPEntityStorageService);
23862
+ }
23863
+ async seed() {
23864
+ await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.metaDataDefinition.name}`, METADATA_MOCK);
23865
+ }
23866
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetaDataDefinitionDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
23867
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetaDataDefinitionDataSeeder }); }
23868
+ }
23869
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetaDataDefinitionDataSeeder, decorators: [{
23870
+ type: Injectable
23871
+ }] });
23872
+
23873
+ class AXCQueryCategoryMetadataInheritanceQuery {
23874
+ constructor() {
23875
+ this.injector = inject(Injector);
23876
+ this.metaDataService = inject(AXMMetaDataDefinitionService);
23877
+ }
23878
+ async fetch(params) {
23879
+ const { entityName, categoryId } = params;
23880
+ //1a25158a-3e0f-4e9c-bdc2-d6cc0ece86ba
23881
+ const service = runInInjectionContext(this.injector, () => new AXMEntityCrudServiceImpl(`${params.entityName}Category`));
23882
+ // Find the category by ID
23883
+ const category = await this.findCategoryById(categoryId, service);
23884
+ if (!category) {
23885
+ throw new Error(`Category with ID ${categoryId} not found`);
23886
+ }
23887
+ // Build the hierarchy (traverse up to root)
23888
+ const hierarchy = await this.buildCategoryHierarchy(category, service);
23889
+ // Collect and merge groups from all categories in hierarchy
23890
+ const mergedGroups = this.mergeMetadataGroupsFromHierarchy(hierarchy);
23891
+ return mergedGroups;
23892
+ }
23893
+ async findCategoryById(categoryId, service) {
23894
+ try {
23895
+ const result = await service.query({
23896
+ filter: {
23897
+ logic: 'and',
23898
+ filters: [
23899
+ {
23900
+ field: 'id',
23901
+ operator: {
23902
+ type: 'equal',
23903
+ },
23904
+ value: categoryId,
23905
+ },
23906
+ ],
23907
+ },
23908
+ take: 1,
23909
+ skip: 0,
23910
+ });
23911
+ return result.items.length > 0 ? result.items[0] : null;
23912
+ }
23913
+ catch (error) {
23914
+ console.error('Error finding category by ID:', error);
23915
+ return null;
23916
+ }
23917
+ }
23918
+ async buildCategoryHierarchy(category, service) {
23919
+ const hierarchy = [category];
23920
+ let currentCategory = category;
23921
+ // Traverse up the parent hierarchy
23922
+ while (currentCategory.parentId) {
23923
+ try {
23924
+ const parentResult = await service.query({
23925
+ filter: {
23926
+ logic: 'and',
23927
+ filters: [
23928
+ {
23929
+ field: 'id',
23930
+ operator: {
23931
+ type: 'equal',
23932
+ },
23933
+ value: currentCategory.parentId,
23934
+ },
23935
+ ],
23936
+ },
23937
+ take: 1,
23938
+ skip: 0,
23939
+ });
23940
+ if (parentResult.items.length > 0) {
23941
+ const parent = parentResult.items[0];
23942
+ hierarchy.unshift(parent); // Add to beginning to maintain hierarchy order
23943
+ currentCategory = parent;
23944
+ }
23945
+ else {
23946
+ break; // Parent not found, stop traversal
23947
+ }
23948
+ }
23949
+ catch (error) {
23950
+ console.error('Error finding parent category:', error);
23951
+ break;
23952
+ }
23953
+ }
23954
+ return hierarchy;
23955
+ }
23956
+ /**
23957
+ * Merge metadata groups from category hierarchy, preserving group structure
23958
+ * Groups are merged by name, with fields from child categories taking precedence
23959
+ */
23960
+ mergeMetadataGroupsFromHierarchy(hierarchy) {
23961
+ const groupsMap = new Map();
23962
+ const seenFieldIds = new Set();
23963
+ // Process hierarchy from root to leaf (child categories override parent fields)
23964
+ for (const category of hierarchy) {
23965
+ // Type: AXMMetaDataSelectorValue from @acorex/modules/data-management
23966
+ const metaDataList = get(category, META_DATA_SELECTOR_FIELD);
23967
+ if (!metaDataList || !metaDataList.groups || !Array.isArray(metaDataList.groups)) {
23968
+ continue;
23969
+ }
23970
+ // Process each group in the category's metadata
23971
+ for (const group of metaDataList.groups) {
23972
+ const groupName = group.name || 'default';
23973
+ // Get or create group
23974
+ if (!groupsMap.has(groupName)) {
23975
+ groupsMap.set(groupName, {
23976
+ name: groupName,
23977
+ title: group.title,
23978
+ description: group.description,
23979
+ order: group.order ?? 0,
23980
+ fields: [],
23981
+ });
23982
+ }
23983
+ const mergedGroup = groupsMap.get(groupName);
23984
+ // Process fields in this group
23985
+ if (group.fields && Array.isArray(group.fields)) {
23986
+ for (const field of group.fields) {
23987
+ // Skip if we've already seen this field (child categories override)
23988
+ if (seenFieldIds.has(field.id)) {
23989
+ // Remove existing field and add new one (child overrides parent)
23990
+ mergedGroup.fields = mergedGroup.fields.filter(f => f.id !== field.id);
23991
+ }
23992
+ // Add field to merged group
23993
+ // Ensure title is always present (use name as fallback)
23994
+ mergedGroup.fields.push({
23995
+ id: field.id,
23996
+ name: field.name,
23997
+ title: field.title || field.name || 'Untitled Field',
23998
+ description: field.description,
23999
+ interface: field.interface,
24000
+ configuration: field.configuration,
24001
+ order: field.order ?? mergedGroup.fields.length,
24002
+ });
24003
+ seenFieldIds.add(field.id);
24004
+ }
24005
+ }
24006
+ }
24007
+ }
24008
+ // Convert map to array and sort by order
24009
+ const result = Array.from(groupsMap.values())
24010
+ .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))
24011
+ .map(group => ({
24012
+ ...group,
24013
+ fields: group.fields.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)),
24014
+ }));
24015
+ return result;
24016
+ }
24017
+ async collectInheritedMetadata(hierarchy) {
24018
+ const allMetadata = [];
24019
+ const seenMetadataIds = new Set();
24020
+ // Collect metadata from each level in the hierarchy
24021
+ for (const category of hierarchy) {
24022
+ try {
24023
+ const metadataResult = await this.metaDataService.query({
24024
+ filter: {
24025
+ logic: 'and',
24026
+ filters: [
24027
+ {
24028
+ field: 'categoryIds',
24029
+ operator: {
24030
+ type: 'contains',
24031
+ },
24032
+ value: category.id,
24033
+ },
24034
+ ],
24035
+ },
24036
+ take: 1000,
24037
+ skip: 0,
24038
+ });
24039
+ // Add metadata fields that haven't been seen before (avoid duplicates)
24040
+ for (const metadata of metadataResult.items) {
24041
+ if (!seenMetadataIds.has(metadata.id)) {
24042
+ allMetadata.push(metadata);
24043
+ seenMetadataIds.add(metadata.id);
24044
+ }
24045
+ }
24046
+ }
24047
+ catch (error) {
24048
+ console.error(`Error collecting metadata for category ${category.id}:`, error);
24049
+ }
24050
+ }
24051
+ return allMetadata;
24052
+ }
24053
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24054
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, providedIn: 'root' }); }
24055
+ }
24056
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryCategoryMetadataInheritanceQuery, decorators: [{
24057
+ type: Injectable,
24058
+ args: [{
24059
+ providedIn: 'root'
24060
+ }]
24061
+ }] });
24062
+
24063
+ var categoryMetadataInheritance_query = /*#__PURE__*/Object.freeze({
24064
+ __proto__: null,
24065
+ AXCQueryCategoryMetadataInheritanceQuery: AXCQueryCategoryMetadataInheritanceQuery
24194
24066
  });
24195
24067
 
24196
- class AXCEquipmentCategorySeeder {
24068
+ class AXCMetadataCategorySeeder {
24197
24069
  constructor() {
24198
24070
  this.storageService = inject(AXPEntityStorageService);
24199
24071
  }
24200
24072
  async seed() {
24201
- await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.equipmentCategory.name}`, equipmentCategoryMocks);
24073
+ await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.metaDataDefinition.name}Category`, metadataCategoryMocks);
24202
24074
  }
24203
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentCategorySeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24204
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentCategorySeeder }); }
24075
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetadataCategorySeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24076
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetadataCategorySeeder }); }
24205
24077
  }
24206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentCategorySeeder, decorators: [{
24078
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMetadataCategorySeeder, decorators: [{
24207
24079
  type: Injectable
24208
24080
  }] });
24209
24081
 
24210
- function generateEquipments() {
24211
- const trCategory = equipmentCategoryMocks.find((c) => c.id === 'eq-tr');
24212
- const etrCategory = equipmentCategoryMocks.find((c) => c.id === 'eq-etr');
24213
- const lbtCategory = equipmentCategoryMocks.find((c) => c.id === 'eq-lbt');
24214
- return [
24215
- {
24216
- id: AXPDataGenerator.uuid(),
24217
- code: 'EQ-001',
24218
- title: 'Transformer TR-001',
24219
- description: 'Main transformer unit',
24220
- categoryIds: trCategory ? [trCategory.id] : undefined,
24221
- categories: trCategory ? [{ id: trCategory.id, title: trCategory.title }] : undefined,
24222
- },
24223
- {
24224
- id: AXPDataGenerator.uuid(),
24225
- code: 'EQ-002',
24226
- title: 'Transformer TR-002',
24227
- description: 'Secondary transformer',
24228
- categoryIds: trCategory ? [trCategory.id] : undefined,
24229
- categories: trCategory ? [{ id: trCategory.id, title: trCategory.title }] : undefined,
24230
- },
24231
- {
24232
- id: AXPDataGenerator.uuid(),
24233
- code: 'EQ-003',
24234
- title: 'ETR Unit A',
24235
- description: 'ETR type equipment A',
24236
- categoryIds: etrCategory ? [etrCategory.id] : undefined,
24237
- categories: etrCategory ? [{ id: etrCategory.id, title: etrCategory.title }] : undefined,
24238
- },
24239
- {
24240
- id: AXPDataGenerator.uuid(),
24241
- code: 'EQ-004',
24242
- title: 'ETR Unit B',
24243
- description: 'ETR type equipment B',
24244
- categoryIds: etrCategory ? [etrCategory.id] : undefined,
24245
- categories: etrCategory ? [{ id: etrCategory.id, title: etrCategory.title }] : undefined,
24246
- },
24247
- {
24248
- id: AXPDataGenerator.uuid(),
24249
- code: 'EQ-005',
24250
- title: 'LBT Device 1',
24251
- description: 'LBT type device',
24252
- categoryIds: lbtCategory ? [lbtCategory.id] : undefined,
24253
- categories: lbtCategory ? [{ id: lbtCategory.id, title: lbtCategory.title }] : undefined,
24254
- },
24255
- {
24256
- id: AXPDataGenerator.uuid(),
24257
- code: 'EQ-006',
24258
- title: 'LBT Device 2',
24259
- description: 'LBT type device second unit',
24260
- categoryIds: lbtCategory ? [lbtCategory.id] : undefined,
24261
- categories: lbtCategory ? [{ id: lbtCategory.id, title: lbtCategory.title }] : undefined,
24262
- },
24263
- {
24264
- id: AXPDataGenerator.uuid(),
24265
- code: 'EQ-007',
24266
- title: 'Mixed Type Equipment',
24267
- description: 'Equipment in multiple categories',
24268
- categoryIds: trCategory && etrCategory ? [trCategory.id, etrCategory.id] : undefined,
24269
- categories: trCategory && etrCategory
24270
- ? [
24271
- { id: trCategory.id, title: trCategory.title },
24272
- { id: etrCategory.id, title: etrCategory.title },
24273
- ]
24274
- : undefined,
24275
- },
24276
- ];
24277
- }
24278
- const equipmentMocks = generateEquipments();
24082
+ const REPORT_ID = AXPDataGenerator.uuid();
24083
+ const child1 = {
24084
+ id: AXPDataGenerator.uuid(),
24085
+ title: 'Financial Reports',
24086
+ parentId: REPORT_ID,
24087
+ childrenCount: 0,
24088
+ };
24089
+ const child2 = {
24090
+ id: AXPDataGenerator.uuid(),
24091
+ title: 'User Reports',
24092
+ parentId: REPORT_ID,
24093
+ childrenCount: 0,
24094
+ };
24095
+ const child3 = {
24096
+ id: AXPDataGenerator.uuid(),
24097
+ title: 'System Reports',
24098
+ parentId: REPORT_ID,
24099
+ childrenCount: 0,
24100
+ };
24101
+ const QUERY_CATEGORY_MOCK = [
24102
+ {
24103
+ id: AXPDataGenerator.uuid(),
24104
+ title: 'General Queries',
24105
+ childrenCount: 0,
24106
+ },
24107
+ {
24108
+ id: REPORT_ID,
24109
+ title: 'Reports',
24110
+ childrenCount: 3,
24111
+ },
24112
+ child1,
24113
+ child2,
24114
+ child3,
24115
+ {
24116
+ id: AXPDataGenerator.uuid(),
24117
+ title: 'Analytics',
24118
+ childrenCount: 0,
24119
+ },
24120
+ ];
24121
+ const QUERY_MOCK = [
24122
+ {
24123
+ id: AXPDataGenerator.uuid(),
24124
+ name: 'user-list-query',
24125
+ title: 'User List Query',
24126
+ categoryIds: [QUERY_CATEGORY_MOCK[0].id],
24127
+ categories: [{ id: QUERY_CATEGORY_MOCK[0].id, title: QUERY_CATEGORY_MOCK[0].title }],
24128
+ },
24129
+ {
24130
+ id: AXPDataGenerator.uuid(),
24131
+ name: 'financial-report-query',
24132
+ title: 'Financial Report Query',
24133
+ categoryIds: [child1.id],
24134
+ categories: [{ id: child1.id, title: child1.title }],
24135
+ },
24136
+ {
24137
+ id: AXPDataGenerator.uuid(),
24138
+ name: 'system-status-query',
24139
+ title: 'System Status Query',
24140
+ categoryIds: [child3.id],
24141
+ categories: [{ id: child3.id, title: child3.title }],
24142
+ },
24143
+ {
24144
+ id: AXPDataGenerator.uuid(),
24145
+ name: 'analytics-dashboard-query',
24146
+ title: 'Analytics Dashboard Query',
24147
+ categoryIds: [QUERY_CATEGORY_MOCK[5].id],
24148
+ categories: [{ id: QUERY_CATEGORY_MOCK[5].id, title: QUERY_CATEGORY_MOCK[5].title }],
24149
+ },
24150
+ ];
24279
24151
 
24280
- class AXCEquipmentSeeder {
24152
+ class AXCQueryDataSeeder {
24281
24153
  constructor() {
24282
24154
  this.storageService = inject(AXPEntityStorageService);
24283
24155
  }
24284
24156
  async seed() {
24285
- await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.equipment.name}`, equipmentMocks);
24157
+ await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.queryCategory.name}`, QUERY_CATEGORY_MOCK);
24158
+ await this.storageService.initial(`${RootConfig$c.module.name}.${RootConfig$c.entities.query.name}`, QUERY_MOCK);
24286
24159
  }
24287
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24288
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentSeeder }); }
24160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24161
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryDataSeeder }); }
24289
24162
  }
24290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCEquipmentSeeder, decorators: [{
24163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCQueryDataSeeder, decorators: [{
24291
24164
  type: Injectable
24292
24165
  }] });
24293
24166
 
@@ -24635,10 +24508,176 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
24635
24508
  type: Injectable
24636
24509
  }] });
24637
24510
 
24511
+ /**
24512
+ * Mock override of ShowMetaDataSelectorPopupCommand for testing.
24513
+ * Extends the base command and overrides findRecord/updateRecord to allow
24514
+ * custom mock behavior (e.g. logging, alternative data sources).
24515
+ */
24516
+ class AXCMockMetaDataSelectorPopupCommand extends ShowMetaDataSelectorPopupCommand {
24517
+ findRecord(entity, id) {
24518
+ console.log('[AXCMockMetaDataSelectorPopupCommand] findRecord', { entity, id });
24519
+ return super.findRecord(entity, id);
24520
+ }
24521
+ updateRecord(entity, id, data) {
24522
+ console.log('[AXCMockMetaDataSelectorPopupCommand] updateRecord', { entity, id, data });
24523
+ return super.updateRecord(entity, id, data);
24524
+ }
24525
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMockMetaDataSelectorPopupCommand, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
24526
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMockMetaDataSelectorPopupCommand }); }
24527
+ }
24528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCMockMetaDataSelectorPopupCommand, decorators: [{
24529
+ type: Injectable
24530
+ }] });
24531
+
24532
+ //#endregion
24533
+ //#region ---- Tag Mock Data ----
24534
+ const TAGS_MOCK = [
24535
+ // System Tags
24536
+ {
24537
+ id: AXPDataGenerator.uuid(),
24538
+ title: 'Important',
24539
+ color: '#F44336', // Red - Material Design
24540
+ description: 'Marks items as important',
24541
+ scope: 'system',
24542
+ createdAt: new Date('2024-01-01'),
24543
+ },
24544
+ {
24545
+ id: AXPDataGenerator.uuid(),
24546
+ title: 'Urgent',
24547
+ color: '#FF9800', // Orange - Material Design
24548
+ description: 'Marks items as urgent',
24549
+ scope: 'system',
24550
+ createdAt: new Date('2024-01-01'),
24551
+ },
24552
+ {
24553
+ id: AXPDataGenerator.uuid(),
24554
+ title: 'To Do',
24555
+ color: '#2196F3', // Blue - Material Design
24556
+ description: 'Items pending action',
24557
+ scope: 'system',
24558
+ createdAt: new Date('2024-01-01'),
24559
+ },
24560
+ {
24561
+ id: AXPDataGenerator.uuid(),
24562
+ title: 'In Progress',
24563
+ color: '#03A9F4', // Light Blue - Material Design
24564
+ description: 'Currently being worked on',
24565
+ scope: 'system',
24566
+ createdAt: new Date('2024-01-01'),
24567
+ },
24568
+ {
24569
+ id: AXPDataGenerator.uuid(),
24570
+ title: 'Completed',
24571
+ color: '#4CAF50', // Green - Material Design
24572
+ description: 'Finished items',
24573
+ scope: 'system',
24574
+ createdAt: new Date('2024-01-01'),
24575
+ },
24576
+ {
24577
+ id: AXPDataGenerator.uuid(),
24578
+ title: 'Blocked',
24579
+ color: '#FF5722', // Deep Orange - Material Design
24580
+ description: 'Items that are blocked',
24581
+ scope: 'system',
24582
+ createdAt: new Date('2024-01-01'),
24583
+ },
24584
+ {
24585
+ id: AXPDataGenerator.uuid(),
24586
+ title: 'Review',
24587
+ color: '#FFC107', // Amber - Material Design
24588
+ description: 'Items pending review',
24589
+ scope: 'system',
24590
+ createdAt: new Date('2024-01-01'),
24591
+ },
24592
+ {
24593
+ id: AXPDataGenerator.uuid(),
24594
+ title: 'Bug',
24595
+ color: '#E91E63', // Pink - Material Design
24596
+ description: 'Bug reports',
24597
+ scope: 'system',
24598
+ createdAt: new Date('2024-01-01'),
24599
+ },
24600
+ {
24601
+ id: AXPDataGenerator.uuid(),
24602
+ title: 'Feature',
24603
+ color: '#009688', // Teal - Material Design
24604
+ description: 'New feature requests',
24605
+ scope: 'system',
24606
+ createdAt: new Date('2024-01-01'),
24607
+ },
24608
+ {
24609
+ id: AXPDataGenerator.uuid(),
24610
+ title: 'Documentation',
24611
+ color: '#00BCD4', // Cyan - Material Design
24612
+ description: 'Documentation related',
24613
+ scope: 'system',
24614
+ createdAt: new Date('2024-01-01'),
24615
+ },
24616
+ // Tenant Tags
24617
+ {
24618
+ id: AXPDataGenerator.uuid(),
24619
+ title: 'High Priority',
24620
+ color: '#9C27B0', // Purple - Material Design
24621
+ description: 'High priority items for this organization',
24622
+ scope: 'tenant',
24623
+ createdAt: new Date('2024-06-01'),
24624
+ },
24625
+ {
24626
+ id: AXPDataGenerator.uuid(),
24627
+ title: 'Q4 Project',
24628
+ color: '#3F51B5', // Indigo - Material Design
24629
+ description: 'Related to Q4 projects',
24630
+ scope: 'tenant',
24631
+ createdAt: new Date('2024-09-01'),
24632
+ },
24633
+ {
24634
+ id: AXPDataGenerator.uuid(),
24635
+ title: 'Customer Facing',
24636
+ color: '#8BC34A', // Light Green - Material Design
24637
+ description: 'Customer-facing tasks and items',
24638
+ scope: 'tenant',
24639
+ createdAt: new Date('2024-07-01'),
24640
+ },
24641
+ // User Tags
24642
+ {
24643
+ id: AXPDataGenerator.uuid(),
24644
+ title: 'Personal Project',
24645
+ color: '#673AB7', // Deep Purple - Material Design
24646
+ description: 'My personal projects',
24647
+ scope: 'user',
24648
+ createdAt: new Date('2024-10-01'),
24649
+ },
24650
+ {
24651
+ id: AXPDataGenerator.uuid(),
24652
+ title: 'Learning',
24653
+ color: '#CDDC39', // Lime - Material Design
24654
+ description: 'Items to learn or study',
24655
+ scope: 'user',
24656
+ createdAt: new Date('2024-10-15'),
24657
+ },
24658
+ ];
24659
+ //#endregion
24660
+
24661
+ //#region ---- Tag Data Seeder ----
24662
+ class AXMTagDataSeeder {
24663
+ constructor() {
24664
+ this.storageService = inject(AXPEntityStorageService);
24665
+ }
24666
+ async seed() {
24667
+ await this.storageService.initial(RootConfig$c.entities.tag.source, TAGS_MOCK);
24668
+ }
24669
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXMTagDataSeeder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24670
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXMTagDataSeeder }); }
24671
+ }
24672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXMTagDataSeeder, decorators: [{
24673
+ type: Injectable
24674
+ }] });
24675
+
24638
24676
  class AXCDataManagementMockModule {
24639
24677
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCDataManagementMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
24640
24678
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: AXCDataManagementMockModule }); }
24641
24679
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCDataManagementMockModule, providers: [
24680
+ AXCMockMetaDataSelectorPopupCommand,
24642
24681
  {
24643
24682
  provide: AXP_DATA_SEEDER_TOKEN,
24644
24683
  useClass: AXCQueryDataSeeder,
@@ -24670,16 +24709,22 @@ class AXCDataManagementMockModule {
24670
24709
  multi: true,
24671
24710
  },
24672
24711
  { provide: AXMQueryService, useClass: AXCQueryMockService },
24712
+ provideCommandSetups([
24713
+ {
24714
+ key: 'show-meta-data-selector-popup',
24715
+ command: () => Promise.resolve(AXCMockMetaDataSelectorPopupCommand),
24716
+ },
24717
+ ]),
24673
24718
  provideQuerySetups([
24674
24719
  {
24675
24720
  key: 'DataManagement:Metadata:GetCategoryWithItems',
24676
- loader: () => import('./acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs').then(m => m.AXCQueryCategoryWithItemsQuery),
24721
+ loader: () => import('./acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs').then((m) => m.AXCQueryCategoryWithItemsQuery),
24677
24722
  },
24678
24723
  {
24679
24724
  key: 'DataManagement:Metadata:GetCategoryInheritance',
24680
- loader: () => Promise.resolve().then(function () { return categoryMetadataInheritance_query; }).then(m => m.AXCQueryCategoryMetadataInheritanceQuery),
24681
- }
24682
- ])
24725
+ loader: () => Promise.resolve().then(function () { return categoryMetadataInheritance_query; }).then((m) => m.AXCQueryCategoryMetadataInheritanceQuery),
24726
+ },
24727
+ ]),
24683
24728
  ] }); }
24684
24729
  }
24685
24730
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXCDataManagementMockModule, decorators: [{
@@ -24689,6 +24734,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
24689
24734
  exports: [],
24690
24735
  declarations: [],
24691
24736
  providers: [
24737
+ AXCMockMetaDataSelectorPopupCommand,
24692
24738
  {
24693
24739
  provide: AXP_DATA_SEEDER_TOKEN,
24694
24740
  useClass: AXCQueryDataSeeder,
@@ -24720,16 +24766,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
24720
24766
  multi: true,
24721
24767
  },
24722
24768
  { provide: AXMQueryService, useClass: AXCQueryMockService },
24769
+ provideCommandSetups([
24770
+ {
24771
+ key: 'show-meta-data-selector-popup',
24772
+ command: () => Promise.resolve(AXCMockMetaDataSelectorPopupCommand),
24773
+ },
24774
+ ]),
24723
24775
  provideQuerySetups([
24724
24776
  {
24725
24777
  key: 'DataManagement:Metadata:GetCategoryWithItems',
24726
- loader: () => import('./acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs').then(m => m.AXCQueryCategoryWithItemsQuery),
24778
+ loader: () => import('./acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs').then((m) => m.AXCQueryCategoryWithItemsQuery),
24727
24779
  },
24728
24780
  {
24729
24781
  key: 'DataManagement:Metadata:GetCategoryInheritance',
24730
- loader: () => Promise.resolve().then(function () { return categoryMetadataInheritance_query; }).then(m => m.AXCQueryCategoryMetadataInheritanceQuery),
24731
- }
24732
- ])
24782
+ loader: () => Promise.resolve().then(function () { return categoryMetadataInheritance_query; }).then((m) => m.AXCQueryCategoryMetadataInheritanceQuery),
24783
+ },
24784
+ ]),
24733
24785
  ],
24734
24786
  }]
24735
24787
  }] });
@@ -50756,6 +50808,157 @@ const auditLoggerMiddleware = {
50756
50808
  };
50757
50809
  //#endregion
50758
50810
 
50811
+ /**
50812
+ * Category Resolver Middleware
50813
+ *
50814
+ * - On create/update: resolves categoryIds to full category objects with ancestor chain
50815
+ * and persists categories: [{id, parentId, title}, ...] on the record.
50816
+ * - On getOne/query/getAll: enriches records that have categoryIds but no categories
50817
+ * (e.g. seeded data) so the column can display full paths.
50818
+ *
50819
+ * Real API can return the same shape via JOIN; mock enriches at write and read time.
50820
+ */
50821
+ const categoryResolverMiddleware = {
50822
+ target: {
50823
+ ops: ['create', 'update', 'getOne', 'getAll', 'query'],
50824
+ order: 9,
50825
+ },
50826
+ execute: async (ctx, next) => {
50827
+ const registry = inject(AXPEntityDefinitionRegistryService);
50828
+ const [moduleName, entityName] = ctx.entityName.split('.');
50829
+ if (!moduleName || !entityName) {
50830
+ await next();
50831
+ return;
50832
+ }
50833
+ // For create/update, require ctx.data
50834
+ if ((ctx.op === 'create' || ctx.op === 'update') && (!ctx.data || typeof ctx.data !== 'object')) {
50835
+ await next();
50836
+ return;
50837
+ }
50838
+ try {
50839
+ const def = await registry.resolve(moduleName, entityName).catch(() => null);
50840
+ const categoryExt = def?.extensions?.category;
50841
+ if (!categoryExt?.entity) {
50842
+ await next();
50843
+ return;
50844
+ }
50845
+ const propertyName = categoryExt.propertyName ?? 'categoryIds';
50846
+ const textField = categoryExt.textField ?? 'title';
50847
+ const valueField = categoryExt.valueField ?? 'id';
50848
+ const parentKey = categoryExt.parentKey ?? 'parentId';
50849
+ const categoryEntityName = categoryExt.entity;
50850
+ if (ctx.op === 'create' || ctx.op === 'update') {
50851
+ const hasCategoryPayload = propertyName in ctx.data || 'categories' in ctx.data;
50852
+ if (!hasCategoryPayload) {
50853
+ await next();
50854
+ return;
50855
+ }
50856
+ let categoryIds = [];
50857
+ const rawIds = get(ctx.data, propertyName);
50858
+ if (Array.isArray(rawIds)) {
50859
+ categoryIds = rawIds
50860
+ .map((v) => (v != null && typeof v === 'object' ? get(v, valueField) : v))
50861
+ .filter((id) => id != null && id !== '')
50862
+ .map(String);
50863
+ }
50864
+ else if (rawIds != null && rawIds !== '') {
50865
+ categoryIds = [String(rawIds)];
50866
+ }
50867
+ // Fallback: derive from categories array (e.g. from form expose)
50868
+ if (categoryIds.length === 0) {
50869
+ const categories = get(ctx.data, 'categories');
50870
+ if (Array.isArray(categories)) {
50871
+ categoryIds = categories
50872
+ .map((c) => (c != null && typeof c === 'object' ? get(c, valueField) : c))
50873
+ .filter((id) => id != null && id !== '')
50874
+ .map(String);
50875
+ }
50876
+ }
50877
+ const categories = await resolveCategoriesWithAncestors(ctx.backend, categoryEntityName, categoryIds, valueField, textField, parentKey);
50878
+ set(ctx.data, 'categories', categories);
50879
+ }
50880
+ }
50881
+ catch (error) {
50882
+ console.error('[category-resolver] Failed to resolve categories:', error);
50883
+ }
50884
+ await next();
50885
+ // Enrich on read: records with categoryIds but no categories (e.g. seeded data)
50886
+ if ((ctx.op === 'getOne' || ctx.op === 'getAll' || ctx.op === 'query') && ctx.result) {
50887
+ try {
50888
+ const def = await registry.resolve(moduleName, entityName).catch(() => null);
50889
+ const categoryExt = def?.extensions?.category;
50890
+ if (!categoryExt?.entity)
50891
+ return;
50892
+ const propertyName = categoryExt.propertyName ?? 'categoryIds';
50893
+ const textField = categoryExt.textField ?? 'title';
50894
+ const valueField = categoryExt.valueField ?? 'id';
50895
+ const parentKey = categoryExt.parentKey ?? 'parentId';
50896
+ const categoryEntityName = categoryExt.entity;
50897
+ const rows = ctx.op === 'getOne'
50898
+ ? [ctx.result]
50899
+ : Array.isArray(ctx.result)
50900
+ ? ctx.result
50901
+ : Array.isArray(ctx.result?.items)
50902
+ ? ctx.result.items
50903
+ : [];
50904
+ for (const row of rows) {
50905
+ if (!row || get(row, 'categories')?.length > 0)
50906
+ continue;
50907
+ const ids = get(row, propertyName);
50908
+ const categoryIds = Array.isArray(ids)
50909
+ ? ids.filter((id) => id != null && id !== '').map(String)
50910
+ : ids != null && ids !== '' ? [String(ids)] : [];
50911
+ if (categoryIds.length === 0)
50912
+ continue;
50913
+ const categories = await resolveCategoriesWithAncestors(ctx.backend, categoryEntityName, categoryIds, valueField, textField, parentKey);
50914
+ set(row, 'categories', categories);
50915
+ }
50916
+ }
50917
+ catch (error) {
50918
+ console.error('[category-resolver] Failed to enrich on read:', error);
50919
+ }
50920
+ }
50921
+ },
50922
+ };
50923
+ async function resolveCategoriesWithAncestors(backend, categoryEntityName, categoryIds, valueField, textField, parentKey) {
50924
+ if (categoryIds.length === 0) {
50925
+ return [];
50926
+ }
50927
+ const allResult = await backend.query(categoryEntityName, {
50928
+ skip: 0,
50929
+ take: 10000,
50930
+ });
50931
+ const allItems = allResult?.items ?? [];
50932
+ const map = new Map();
50933
+ for (const item of allItems) {
50934
+ map.set(String(get(item, valueField)), item);
50935
+ }
50936
+ const collected = new Map();
50937
+ const collectAncestorChain = (id) => {
50938
+ if (collected.has(id))
50939
+ return;
50940
+ const item = map.get(id);
50941
+ if (!item)
50942
+ return;
50943
+ const parentId = get(item, parentKey);
50944
+ if (parentId != null &&
50945
+ parentId !== '' &&
50946
+ parentId !== 'all' &&
50947
+ String(parentId) !== id) {
50948
+ collectAncestorChain(String(parentId));
50949
+ }
50950
+ collected.set(id, {
50951
+ id: String(get(item, valueField)),
50952
+ parentId: parentId != null && parentId !== '' ? String(parentId) : null,
50953
+ title: String(get(item, textField) ?? ''),
50954
+ });
50955
+ };
50956
+ for (const id of categoryIds) {
50957
+ collectAncestorChain(id);
50958
+ }
50959
+ return Array.from(collected.values());
50960
+ }
50961
+
50759
50962
  const childCountMiddleware = {
50760
50963
  target: { ops: ['create', 'delete'], order: 20 },
50761
50964
  execute: async (ctx, next) => {
@@ -51002,21 +51205,25 @@ const createFileCastMiddleware = {
51002
51205
  file.source?.kind === 'fileId' &&
51003
51206
  typeof file.source.value === 'string') {
51004
51207
  const cleanFileId = ensureCleanFileId(file.source.value);
51005
- // If status is 'editing', check if name has changed and update file storage
51208
+ // If status is 'editing', persist name/title/description to file storage
51006
51209
  if (file.status === 'editing') {
51007
51210
  try {
51008
51211
  const existingFileInfo = await fileStorageService.getInfo(cleanFileId);
51009
- // If name has changed, update the file in storage
51010
- if (existingFileInfo && existingFileInfo.name !== file.name) {
51212
+ if (existingFileInfo) {
51213
+ const existingMeta = existingFileInfo.metadata || {};
51011
51214
  await fileStorageService.update({
51012
51215
  fileId: cleanFileId,
51013
51216
  name: file.name,
51014
- metadata: existingFileInfo.metadata || {},
51217
+ metadata: {
51218
+ ...existingMeta,
51219
+ title: file.title,
51220
+ description: file.description,
51221
+ },
51015
51222
  });
51016
51223
  }
51017
51224
  }
51018
51225
  catch (error) {
51019
- console.error('[file-cast] Failed to update file name during editing:', error);
51226
+ console.error('[file-cast] Failed to update file during editing:', error);
51020
51227
  }
51021
51228
  }
51022
51229
  // If it already has an ID and also carries meta, prefer returning as a document reference (if possible)
@@ -51214,7 +51421,7 @@ const createFileCastMiddleware = {
51214
51421
  return id;
51215
51422
  };
51216
51423
  const convertStorageInfoToFileListItem = (storageInfo) => {
51217
- return {
51424
+ const item = {
51218
51425
  id: storageInfo.fileId,
51219
51426
  name: storageInfo.name || 'Unknown',
51220
51427
  size: storageInfo.size,
@@ -51224,12 +51431,23 @@ const createFileCastMiddleware = {
51224
51431
  value: storageInfo.fileId,
51225
51432
  },
51226
51433
  };
51434
+ if (storageInfo.title !== undefined)
51435
+ item.title = storageInfo.title;
51436
+ if (storageInfo.description !== undefined)
51437
+ item.description = storageInfo.description;
51438
+ return item;
51227
51439
  };
51228
51440
  // CREATE/UPDATE Operations: Save files and replace with IDs
51229
51441
  // Note: Files with status 'deleted' will be removed from storage and excluded from the final data
51230
51442
  if (ctx.op === 'create' || ctx.op === 'update') {
51231
51443
  const fileKeys = findFileKeys(ctx.data);
51232
51444
  if (fileKeys.length > 0) {
51445
+ fileKeys.forEach((keyPath) => {
51446
+ const value = getValueByPath(ctx.data, keyPath);
51447
+ if (Array.isArray(value)) {
51448
+ console.log('[file-cast] incoming payload (before process)', keyPath, value.map((f) => ({ name: f?.name, title: f?.title, description: f?.description, status: f?.status })));
51449
+ }
51450
+ });
51233
51451
  // Process all keyPaths in parallel
51234
51452
  await Promise.all(fileKeys.map(async (keyPath) => {
51235
51453
  const value = getValueByPath(ctx.data, keyPath);
@@ -52486,6 +52704,7 @@ const AXCMockEntityLogListener = {
52486
52704
  };
52487
52705
  //#endregion
52488
52706
 
52707
+ const LOG_PREFIX = '[DexieStorage]';
52489
52708
  class AXCDexieEntityStorageService extends Dexie {
52490
52709
  constructor() {
52491
52710
  super('ACoreXPlatform');
@@ -52568,26 +52787,32 @@ class AXCDexieEntityStorageService extends Dexie {
52568
52787
  }
52569
52788
  //#endregion
52570
52789
  async getOne(entityName, id) {
52790
+ console.log(LOG_PREFIX, 'getOne', { entityName, id });
52571
52791
  return await this.table('entity-store').where({ entityName, id: id }).first();
52572
52792
  }
52573
52793
  async updateOne(entityName, id, keyValue) {
52794
+ console.log(LOG_PREFIX, 'updateOne', { entityName, id, keyValue });
52574
52795
  await this.table('entity-store').where({ entityName, id: id }).modify(keyValue);
52575
52796
  const newEntity = await this.getOne(entityName, id);
52576
52797
  return newEntity;
52577
52798
  }
52578
52799
  async deleteOne(entityName, id) {
52800
+ console.log(LOG_PREFIX, 'deleteOne', { entityName, id });
52579
52801
  await this.table('entity-store').where({ entityName, id: id }).delete();
52580
52802
  }
52581
52803
  async insertOne(entityName, entity) {
52804
+ console.log(LOG_PREFIX, 'insertOne', { entityName, entityId: entity?.id });
52582
52805
  // Use existing id if provided, otherwise generate new UUID
52583
52806
  const id = entity?.id || AXPDataGenerator.uuid();
52584
52807
  await this.table('entity-store').add({ ...entity, id, entityName });
52585
52808
  return id;
52586
52809
  }
52587
52810
  async getAll(entityName) {
52811
+ console.log(LOG_PREFIX, 'getAll', { entityName });
52588
52812
  return await this.table('entity-store').where({ entityName }).toArray();
52589
52813
  }
52590
52814
  async query(entityName, request) {
52815
+ console.log(LOG_PREFIX, 'query', { entityName, request });
52591
52816
  let result = await this.table('entity-store').where({ entityName }).toArray();
52592
52817
  if (request.sort && request.sort.length) {
52593
52818
  result = applySortArray(result, request.sort);
@@ -52616,21 +52841,24 @@ class AXCDexieEntityStorageService extends Dexie {
52616
52841
  return entityName.endsWith('Category');
52617
52842
  }
52618
52843
  /**
52619
- * Calculate childrenCount for each category entity
52844
+ * Calculate childrenCount for each category entity.
52845
+ * Uses stored childrenCount when present; computes only when missing or invalid.
52620
52846
  */
52621
52847
  async calculateChildrenCounts(items, entityName) {
52848
+ console.log(LOG_PREFIX, 'calculateChildrenCounts', { entityName, itemsCount: items.length });
52622
52849
  return Promise.all(items.map(async (item) => {
52850
+ if (typeof item.childrenCount === 'number') {
52851
+ return { ...item };
52852
+ }
52623
52853
  const childrenCount = await this.getDirectChildCount(item.id, entityName);
52624
- return {
52625
- ...item,
52626
- childrenCount
52627
- };
52854
+ return { ...item, childrenCount };
52628
52855
  }));
52629
52856
  }
52630
52857
  /**
52631
52858
  * Get the count of direct children for a category
52632
52859
  */
52633
52860
  async getDirectChildCount(categoryId, entityName) {
52861
+ console.log(LOG_PREFIX, 'getDirectChildCount', { categoryId, entityName });
52634
52862
  const children = await this.table('entity-store')
52635
52863
  .where({ entityName })
52636
52864
  .filter((item) => item.parentId === categoryId)
@@ -52658,6 +52886,7 @@ class AXCDexieEntityStorageService extends Dexie {
52658
52886
  * Apply recursive category filtering - finds entities that belong to the category or any of its children
52659
52887
  */
52660
52888
  async applyRecursiveCategoryFilter(result, filter, entityName) {
52889
+ console.log(LOG_PREFIX, 'applyRecursiveCategoryFilter', { entityName, resultCount: result.length, filter });
52661
52890
  // Handle compound filter - find the category filter within it
52662
52891
  let categoryFilter = filter;
52663
52892
  let otherFilters = [];
@@ -52699,6 +52928,7 @@ class AXCDexieEntityStorageService extends Dexie {
52699
52928
  * Recursively gets all child category IDs including the parent category itself
52700
52929
  */
52701
52930
  async getAllChildCategoryIds(categoryId, entityName) {
52931
+ console.log(LOG_PREFIX, 'getAllChildCategoryIds', { categoryId, entityName });
52702
52932
  const allIds = [categoryId];
52703
52933
  // Extract module name and entity name from entityName (e.g., "module.entity" -> "module" and "entity")
52704
52934
  const [moduleName, entityNameOnly] = entityName.split('.');
@@ -52722,6 +52952,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
52722
52952
  type: Injectable
52723
52953
  }], ctorParameters: () => [] });
52724
52954
 
52955
+ /** Cache TTL in ms - policies rarely change during a session */
52956
+ const POLICY_CACHE_TTL_MS = 30_000;
52957
+ /** In-memory cache for policies - avoids N+1 Policy queries per page (one per entity operation) */
52958
+ let policyCache = null;
52959
+ /** In-flight promise for request deduplication - parallel entity ops share one Policy load */
52960
+ let policyLoadPromise = null;
52725
52961
  /**
52726
52962
  * resolve whether a policy matches current entity by wildcard (*) or exact name
52727
52963
  */
@@ -52847,17 +53083,37 @@ const policyEnforceMiddleware = {
52847
53083
  // Prevent recursion: skip enforcement when querying the Policy entity itself
52848
53084
  const policyEntityFullName = `${RootConfig$5.module.name}.${RootConfig$5.entities.policy.name}`;
52849
53085
  if (ctx.entityName === policyEntityFullName) {
53086
+ // Invalidate cache when Policy is modified so next entity op gets fresh policies
53087
+ if (ctx.op === 'create' || ctx.op === 'update' || ctx.op === 'delete') {
53088
+ policyCache = null;
53089
+ }
52850
53090
  await next();
52851
53091
  return;
52852
53092
  }
52853
- // Load all policies (could be cached later); filter by resource.type === 'entity' and target match
53093
+ // Load all policies (cached + request deduplication - parallel entity ops share one Policy load)
52854
53094
  let policies = [];
52855
- try {
52856
- const res = await policyService.query({ skip: 0, take: 1000 });
52857
- policies = (res?.items ?? []);
53095
+ const now = Date.now();
53096
+ if (policyCache && now - policyCache.timestamp < POLICY_CACHE_TTL_MS) {
53097
+ policies = policyCache.policies;
52858
53098
  }
52859
- catch {
52860
- policies = [];
53099
+ else {
53100
+ if (!policyLoadPromise) {
53101
+ policyLoadPromise = (async () => {
53102
+ try {
53103
+ const res = await policyService.query({ skip: 0, take: 1000 });
53104
+ const items = (res?.items ?? []);
53105
+ policyCache = { policies: items, timestamp: Date.now() };
53106
+ return items;
53107
+ }
53108
+ catch {
53109
+ return [];
53110
+ }
53111
+ finally {
53112
+ policyLoadPromise = null;
53113
+ }
53114
+ })();
53115
+ }
53116
+ policies = await policyLoadPromise;
52861
53117
  }
52862
53118
  const applicable = policies.filter(p => p?.resource?.type === 'entity' && matchesEntity(p.resource?.target, ctx.entityName));
52863
53119
  if (applicable.length === 0) {
@@ -53267,17 +53523,18 @@ class AXCMiddlewaresModule {
53267
53523
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: lockGuardMiddleware }, // order: 10
53268
53524
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: uniqueFieldsMiddleware }, // order: 12
53269
53525
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: auditLoggerMiddleware }, // order: 15
53270
- { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: visibilityFilterMiddleware }, // order: 20
53271
53526
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: eventDispatchMiddleware },
53272
53527
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: lookupResolverMiddleware },
53528
+ { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: categoryResolverMiddleware },
53273
53529
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: mergeDetailRelationMiddleware },
53274
53530
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: identifierCommitMiddleware },
53275
53531
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: childCountMiddleware },
53276
53532
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: createFileCastMiddleware },
53277
53533
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: primaryMiddleware },
53278
53534
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: historyLoggerMiddleware },
53279
- { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: signatureLoaderMiddleware },
53280
- { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: groupOrderItemCalculatorMiddleware },
53535
+ //{ provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: visibilityFilterMiddleware }, // order: 20
53536
+ //{ provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: signatureLoaderMiddleware },
53537
+ //{ provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: groupOrderItemCalculatorMiddleware },
53281
53538
  // Sample entity event listener to show logs for all entity.* events
53282
53539
  //{ provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, multi: true, useValue: AXCMockEntityLogListener },
53283
53540
  ] }); }
@@ -53296,17 +53553,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
53296
53553
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: lockGuardMiddleware }, // order: 10
53297
53554
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: uniqueFieldsMiddleware }, // order: 12
53298
53555
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: auditLoggerMiddleware }, // order: 15
53299
- { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: visibilityFilterMiddleware }, // order: 20
53300
53556
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: eventDispatchMiddleware },
53301
53557
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: lookupResolverMiddleware },
53558
+ { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: categoryResolverMiddleware },
53302
53559
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: mergeDetailRelationMiddleware },
53303
53560
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: identifierCommitMiddleware },
53304
53561
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: childCountMiddleware },
53305
53562
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: createFileCastMiddleware },
53306
53563
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: primaryMiddleware },
53307
53564
  { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: historyLoggerMiddleware },
53308
- { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: signatureLoaderMiddleware },
53309
- { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: groupOrderItemCalculatorMiddleware },
53565
+ //{ provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: visibilityFilterMiddleware }, // order: 20
53566
+ //{ provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: signatureLoaderMiddleware },
53567
+ //{ provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: groupOrderItemCalculatorMiddleware },
53310
53568
  // Sample entity event listener to show logs for all entity.* events
53311
53569
  //{ provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, multi: true, useValue: AXCMockEntityLogListener },
53312
53570
  ],
@@ -67090,5 +67348,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
67090
67348
  * Generated bundle index. Do not edit.
67091
67349
  */
67092
67350
 
67093
- export { ACTIVITY_CATEGORIES, ACTIVITY_DEFINITIONS, APPLICATIONS, AXCActivityCategorySeeder, AXCActivityDefinitionSeeder, AXCAppTermDataSeeder, AXCAppVersionDataSeeder, AXCApplicationDataSeeder, AXCApplicationManagementMockModule, AXCAssessmentManagementMockModule, AXCAssetManagementMockModule, AXCAuthMockModule, AXCCalendarDataSeeder, AXCCalendarEventDataSeeder, AXCCalendarManagementMockModule, AXCCommonMockModule, AXCContactManagementMockModule, AXCContentManagementMockModule, AXCConversationMockModule, AXCCustomerManagementMockModule, AXCDashboardManagementMockModule, AXCDataManagementMockModule, AXCDexieEntityStorageService, AXCDocumentManagementMockModule, AXCEditionDataSeeder, AXCEquipmentCategorySeeder, AXCEquipmentSeeder, AXCFileStorageService, AXCFinancialCoreMockModule, AXCFormTemplateManagementMockModule, AXCGoogleStrategyMock, AXCHelpDeskMockModule, AXCHumanCapitalManagementMockModule, AXCIdentifierManagementMockModule, AXCImageCaptchaChallengeProviderMock, AXCJsaSeeder, AXCLearningManagementMockModule, AXCLocaleManagementMockModule, AXCLocationManagementMockModule, AXCLockService, AXCMeasurementCoreMockModule, AXCMeetingManagementMockModule, AXCMetaDataDefinitionDataSeeder, AXCMetaDataDefinitionElectricityDataSeeder, AXCMetadataCategorySeeder, AXCMetadataElectricityCategorySeeder, AXCMiddlewaresModule, AXCMockCaptchaChallengeComponent, AXCMockEntityLogListener, AXCMockModule, AXCNotificationManagementMockModule, AXCOrderManagementMockModule, AXCOrganizationManagementMockModule, AXCPersonManagementMockModule, AXCPlatformManagementMockModule, AXCProcurementManagementMockModule, AXCProductCatalogMockModule, AXCProjectManagementMockModule, AXCQueryCategoryMetadataInheritanceQuery, AXCReportManagementMockModule, AXCSecurityManagementMockModule, AXCSubscriptionManagementMockModule, AXCSupplierManagementMockModule, AXCTaskManagementMockModule, AXCTenantManagementMockModule, AXCTenantSeeder, AXCTokensDataSeeder, AXCUserPassStrategyMock, AXCVersionDB, AXCVersioningService, AXCWorkflowCategorySeeder, AXCWorkflowDefinitionDataSeeder, AXCWorkflowEngine, AXCWorkflowExecutionDB, AXCWorkflowManagementMockModule, AXMAiResponderService, AXMAssessmentCaseDataSeeder, AXMAssessmentSessionDataSeeder, AXMBusinessUnitDataSeeder, AXMCalendarEventTypeSeeder, AXMEmployeeDataSeeder, AXMEmploymentTypeDataSeeder, AXMFormDataSourcesProvider, AXMJobDefinitionDataSeeder, AXMJobLevelDataSeeder, AXMLeaveRequestDataSeeder, AXMMeetingDataSeeder, AXMMeetingFilesDataSeeder, AXMMeetingParticipantDataSeeder, AXMMeetingRoleTypeDataSeeder, AXMMeetingSessionDataSeeder, AXMMeetingTypeDataSeeder, AXMMeetingTypeFileTemplateDataSeeder, AXMPositionAssignmentDataSeeder, AXMPositionDataSeeder, AXMQuestionBankItemCategoryDataSeeder, AXMQuestionBankItemDataSeeder, AXMQuestionnaireCategoryDataSeeder, AXMQuestionnaireDataSeeder, AXMResponsibilityDataSeeder, AXMTagDataSeeder, AXMTeamDataSeeder, AXMTeamMemberDataSeeder, AXMTeamMemberRoleDataSeeder, AXPDashboardDataSeeder, AXPIdentifierDB, AXPMessageDataSeeder, AXPMockChecksumProvider, AXPMockClockProvider, AXPMockIdentifierService, AXPMockLookupProvider, AXPMockPolicyProvider, AXPMockSequenceProvider, AXPRoomDataSeeder, AXPSecurityManagementRoleDataSeeder, AXPSecurityManagementUserDataSeeder, AXPTaskBoardPlatformManagementTaskProvider, AXPTaskBoardProjectManagementTaskProvider, AXVChangeType, BUSINESS_UNITS_MOCK, COSTMANAGER_ENTERPRISE, COSTMANAGER_PROFESSIONAL, COSTMANAGER_STANDARD, CRM_ENTERPRISE, DASHBOARDS, EDITIONS, EMPLOYEES_MOCK, EMPLOYMENT_TYPES_MOCK, EQUIPMENT_CATEGORY_ID, FINANCE_BASIC, FINANCE_ENTERPRISE, FINANCE_PRO, HR_ENTERPRISE, JOB_DEFINITIONS_CATEGORY_MOCK, JOB_DEFINITIONS_MOCK, JOB_LEVELS_MOCK, LASER_PLUMBING_TENANT_ID, LEAVE_REQUESTS_MOCK, METADATA_ELECTRICITY_MOCK, ORDERING_BASIC, ORDERING_ENTERPRISE, ORDERING_STANDARD, OWNERSHIP_FILTER_BYPASS, PLATFORM_CONSOLE, PLATFORM_TENANT_ID, POSITIONS_CATEGORY_MOCK, POSITIONS_MOCK, POSITION_ASSIGNMENTS_MOCK, QUESTIONNAIRE_CATEGORY_MOCK, QUESTION_BANK_ITEM_CATEGORY_MOCK, RESPONSIBILITIES_CATEGORY_MOCK, RESPONSIBILITIES_MOCK, SAFETYMINDER_BASIC, SAFETYMINDER_ENTERPRISE, SAFETYMINDER_PROFESSIONAL, SHOP_BASIC, SHOP_ENTERPRISE, SHOP_PRO, TAGS_MOCK, TASKS, TASK_STATUSES, TASK_TEMPLATES, TASK_TYPES, TEAMS_MOCK, TEAM_MEMBERS_MOCK, TEAM_MEMBER_ROLES_MOCK, TIMEPLICITY_TENANT_ID, TOKENS, VISIBILITY_FILTER_BYPASS, WORKFLOW_CATEGORIES, activityCategoryMocks, assessmentCaseMock, assessmentSessionMock, auditLoggerMiddleware, avatarInterface, axVersionDB, axWorkflowExecutionDB, bypassAllFilters, bypassOwnershipFilter, bypassVisibilityFilter, calendarEventMock, calendarEventTypeMockData, calendarMock, checkboxInterface, childCountMiddleware, colorInterface, computeDiff, contactInterface, createAndSaveDashboardForUser, createDashboardForUser, createFileCastMiddleware, dateInterface, dateTimeInterface, descriptionInterface, emailInterface, equipmentCategoryMocks, equipmentMocks, fileUploaderInterface, findEmployeeById, findPersonById, generateUserDashboard, groupOrderItemCalculatorMiddleware, historyLoggerMiddleware, identifierCommitMiddleware, imageInterface, lockGuardMiddleware, longTextAnswerInterface, lookupInterface, lookupResolverMiddleware, mapInterface, meetingFilesMock, meetingIds, meetingMock, meetingParticipantMock, meetingRoleTypeMock, meetingSessionMock, meetingTimeSlotMock, meetingTypeFileTemplateMock, meetingTypeMock, mergeDetailRelationMiddleware, metadataCategoryMocks, metadataElectricityCategoryMocks, mockRoleDefinitions, mockUsers, multipleChoiceInterface, multipleSelectInterface, normalizeAnyFileArrayForView, normalizeSnapshotFileFieldsForView, numberInterface, participantIds, passwordInterface, phoneInterface, primaryMiddleware, qrcodeInterface, questionBankItemMock, questionnaireMock, ratingInterface, richTextInterface, scaleInterface, selectInterface, selectionListInterface, signatureInterface, signatureLoaderMiddleware, tagInterface, tenantMocks, textAreaInterface, textInterface, timeDurationInterface, titleInterface, toUiRows, toggleInterface, urlInterface, versionInterface, visibilityFilterMiddleware, workflowDefinitionEntityMock, workflowDefinitionIds, workflowDefinitionMock, yesNoInterface };
67351
+ export { ACTIVITY_CATEGORIES, ACTIVITY_DEFINITIONS, APPLICATIONS, AXCActivityCategorySeeder, AXCActivityDefinitionSeeder, AXCAppTermDataSeeder, AXCAppVersionDataSeeder, AXCApplicationDataSeeder, AXCApplicationManagementMockModule, AXCAssessmentManagementMockModule, AXCAssetManagementMockModule, AXCAuthMockModule, AXCCalendarDataSeeder, AXCCalendarEventDataSeeder, AXCCalendarManagementMockModule, AXCCommonMockModule, AXCContactManagementMockModule, AXCContentManagementMockModule, AXCConversationMockModule, AXCCustomerManagementMockModule, AXCDashboardManagementMockModule, AXCDataManagementMockModule, AXCDexieEntityStorageService, AXCDocumentManagementMockModule, AXCEditionDataSeeder, AXCEquipmentCategorySeeder, AXCEquipmentSeeder, AXCFileStorageService, AXCFinancialCoreMockModule, AXCFormTemplateManagementMockModule, AXCGoogleStrategyMock, AXCHelpDeskMockModule, AXCHumanCapitalManagementMockModule, AXCIdentifierManagementMockModule, AXCImageCaptchaChallengeProviderMock, AXCJsaSeeder, AXCLearningManagementMockModule, AXCLocaleManagementMockModule, AXCLocationManagementMockModule, AXCLockService, AXCMeasurementCoreMockModule, AXCMeetingManagementMockModule, AXCMetaDataDefinitionDataSeeder, AXCMetaDataDefinitionElectricityDataSeeder, AXCMetadataCategorySeeder, AXCMetadataElectricityCategorySeeder, AXCMiddlewaresModule, AXCMockCaptchaChallengeComponent, AXCMockEntityLogListener, AXCMockModule, AXCNotificationManagementMockModule, AXCOrderManagementMockModule, AXCOrganizationManagementMockModule, AXCPersonManagementMockModule, AXCPlatformManagementMockModule, AXCProcurementManagementMockModule, AXCProductCatalogMockModule, AXCProjectManagementMockModule, AXCQueryCategoryMetadataInheritanceQuery, AXCReportManagementMockModule, AXCSecurityManagementMockModule, AXCSubscriptionManagementMockModule, AXCSupplierManagementMockModule, AXCTaskManagementMockModule, AXCTenantManagementMockModule, AXCTenantSeeder, AXCTokensDataSeeder, AXCUserPassStrategyMock, AXCVersionDB, AXCVersioningService, AXCWorkflowCategorySeeder, AXCWorkflowDefinitionDataSeeder, AXCWorkflowEngine, AXCWorkflowExecutionDB, AXCWorkflowManagementMockModule, AXMAiResponderService, AXMAssessmentCaseDataSeeder, AXMAssessmentSessionDataSeeder, AXMBusinessUnitDataSeeder, AXMCalendarEventTypeSeeder, AXMEmployeeDataSeeder, AXMEmploymentTypeDataSeeder, AXMFormDataSourcesProvider, AXMJobDefinitionDataSeeder, AXMJobLevelDataSeeder, AXMLeaveRequestDataSeeder, AXMMeetingDataSeeder, AXMMeetingFilesDataSeeder, AXMMeetingParticipantDataSeeder, AXMMeetingRoleTypeDataSeeder, AXMMeetingSessionDataSeeder, AXMMeetingTypeDataSeeder, AXMMeetingTypeFileTemplateDataSeeder, AXMPositionAssignmentDataSeeder, AXMPositionDataSeeder, AXMQuestionBankItemCategoryDataSeeder, AXMQuestionBankItemDataSeeder, AXMQuestionnaireCategoryDataSeeder, AXMQuestionnaireDataSeeder, AXMResponsibilityDataSeeder, AXMTagDataSeeder, AXMTeamDataSeeder, AXMTeamMemberDataSeeder, AXMTeamMemberRoleDataSeeder, AXPDashboardDataSeeder, AXPIdentifierDB, AXPMessageDataSeeder, AXPMockChecksumProvider, AXPMockClockProvider, AXPMockIdentifierService, AXPMockLookupProvider, AXPMockPolicyProvider, AXPMockSequenceProvider, AXPRoomDataSeeder, AXPSecurityManagementRoleDataSeeder, AXPSecurityManagementUserDataSeeder, AXPTaskBoardPlatformManagementTaskProvider, AXPTaskBoardProjectManagementTaskProvider, AXVChangeType, BUSINESS_UNITS_MOCK, COSTMANAGER_ENTERPRISE, COSTMANAGER_PROFESSIONAL, COSTMANAGER_STANDARD, CRM_ENTERPRISE, DASHBOARDS, EDITIONS, EMPLOYEES_MOCK, EMPLOYMENT_TYPES_MOCK, EQUIPMENT_CATEGORY_ID, FINANCE_BASIC, FINANCE_ENTERPRISE, FINANCE_PRO, HR_ENTERPRISE, JOB_DEFINITIONS_CATEGORY_MOCK, JOB_DEFINITIONS_MOCK, JOB_LEVELS_MOCK, LASER_PLUMBING_TENANT_ID, LEAVE_REQUESTS_MOCK, METADATA_ELECTRICITY_MOCK, ORDERING_BASIC, ORDERING_ENTERPRISE, ORDERING_STANDARD, OWNERSHIP_FILTER_BYPASS, PLATFORM_CONSOLE, PLATFORM_TENANT_ID, POSITIONS_CATEGORY_MOCK, POSITIONS_MOCK, POSITION_ASSIGNMENTS_MOCK, QUESTIONNAIRE_CATEGORY_MOCK, QUESTION_BANK_ITEM_CATEGORY_MOCK, RESPONSIBILITIES_CATEGORY_MOCK, RESPONSIBILITIES_MOCK, SAFETYMINDER_BASIC, SAFETYMINDER_ENTERPRISE, SAFETYMINDER_PROFESSIONAL, SHOP_BASIC, SHOP_ENTERPRISE, SHOP_PRO, TAGS_MOCK, TASKS, TASK_STATUSES, TASK_TEMPLATES, TASK_TYPES, TEAMS_MOCK, TEAM_MEMBERS_MOCK, TEAM_MEMBER_ROLES_MOCK, TIMEPLICITY_TENANT_ID, TOKENS, VISIBILITY_FILTER_BYPASS, WORKFLOW_CATEGORIES, activityCategoryMocks, assessmentCaseMock, assessmentSessionMock, auditLoggerMiddleware, avatarInterface, axVersionDB, axWorkflowExecutionDB, bypassAllFilters, bypassOwnershipFilter, bypassVisibilityFilter, calendarEventMock, calendarEventTypeMockData, calendarMock, categoryResolverMiddleware, checkboxInterface, childCountMiddleware, colorInterface, computeDiff, contactInterface, createAndSaveDashboardForUser, createDashboardForUser, createFileCastMiddleware, dateInterface, dateTimeInterface, descriptionInterface, emailInterface, equipmentCategoryMocks, equipmentMocks, fileUploaderInterface, findEmployeeById, findPersonById, generateUserDashboard, groupOrderItemCalculatorMiddleware, historyLoggerMiddleware, identifierCommitMiddleware, imageInterface, lockGuardMiddleware, longTextAnswerInterface, lookupInterface, lookupResolverMiddleware, mapInterface, meetingFilesMock, meetingIds, meetingMock, meetingParticipantMock, meetingRoleTypeMock, meetingSessionMock, meetingTimeSlotMock, meetingTypeFileTemplateMock, meetingTypeMock, mergeDetailRelationMiddleware, metadataCategoryMocks, metadataElectricityCategoryMocks, mockRoleDefinitions, mockUsers, multipleChoiceInterface, multipleSelectInterface, normalizeAnyFileArrayForView, normalizeSnapshotFileFieldsForView, numberInterface, participantIds, passwordInterface, phoneInterface, primaryMiddleware, qrcodeInterface, questionBankItemMock, questionnaireMock, ratingInterface, richTextInterface, scaleInterface, selectInterface, selectionListInterface, signatureInterface, signatureLoaderMiddleware, tagInterface, tenantMocks, textAreaInterface, textInterface, timeDurationInterface, titleInterface, toUiRows, toggleInterface, urlInterface, versionInterface, visibilityFilterMiddleware, workflowDefinitionEntityMock, workflowDefinitionIds, workflowDefinitionMock, yesNoInterface };
67094
67352
  //# sourceMappingURL=acorex-connectivity-mock.mjs.map