newportsite 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/newportsite-1.1.3.tgz +0 -0
  2. package/ng-package.json +7 -0
  3. package/obfuscate.js +70 -0
  4. package/package.json +15 -0
  5. package/src/lib/app.component.ts +47 -0
  6. package/src/lib/app.routing.ts +38 -0
  7. package/src/lib/auth/alert.component.html +5 -0
  8. package/src/lib/auth/alert.component.ts +24 -0
  9. package/src/lib/auth/auth.component.html +1 -0
  10. package/src/lib/auth/auth.component.ts +10 -0
  11. package/src/lib/auth/auth.routes.ts +16 -0
  12. package/src/lib/auth/index.ts +4 -0
  13. package/src/lib/auth/login.component.html +87 -0
  14. package/src/lib/auth/login.component.ts +158 -0
  15. package/src/lib/auth/models/index.ts +1 -0
  16. package/src/lib/auth/models/user.ts +25 -0
  17. package/src/lib/auth/register.component.html +157 -0
  18. package/src/lib/auth/register.component.ts +219 -0
  19. package/src/lib/auth/services/alert.service.ts +47 -0
  20. package/src/lib/auth/services/auth.service.ts +28 -0
  21. package/src/lib/auth/services/index.ts +3 -0
  22. package/src/lib/auth/services/user.service.spec.ts +112 -0
  23. package/src/lib/auth/services/user.service.ts +47 -0
  24. package/src/lib/common/card.component.html +72 -0
  25. package/src/lib/common/card.component.ts +102 -0
  26. package/src/lib/common/commands.component.html +8 -0
  27. package/src/lib/common/commands.component.ts +42 -0
  28. package/src/lib/common/context.component.html +9 -0
  29. package/src/lib/common/context.component.ts +38 -0
  30. package/src/lib/common/grid.component.html +20 -0
  31. package/src/lib/common/grid.component.ts +747 -0
  32. package/src/lib/common/index.ts +9 -0
  33. package/src/lib/common/loader.component.html +5 -0
  34. package/src/lib/common/loader.component.ts +27 -0
  35. package/src/lib/common/lookup.component.html +29 -0
  36. package/src/lib/common/lookup.component.ts +115 -0
  37. package/src/lib/common/messagebox.component.html +39 -0
  38. package/src/lib/common/messagebox.component.ts +74 -0
  39. package/src/lib/common/theme-toggle.component.ts +139 -0
  40. package/src/lib/config.ts +62 -0
  41. package/src/lib/containers/default-layout/default-layout.component.html +191 -0
  42. package/src/lib/containers/default-layout/default-layout.component.ts +158 -0
  43. package/src/lib/containers/default-layout/index.ts +1 -0
  44. package/src/lib/containers/index.ts +1 -0
  45. package/src/lib/directives/component.draggable.ts +80 -0
  46. package/src/lib/directives/index.ts +2 -0
  47. package/src/lib/directives/input.directive.spec.ts +158 -0
  48. package/src/lib/directives/input.directive.ts +210 -0
  49. package/src/lib/home/dashboard/dashboard.component.html +38 -0
  50. package/src/lib/home/dashboard/dashboard.component.ts +50 -0
  51. package/src/lib/home/dashboard/index.ts +1 -0
  52. package/src/lib/home/index.component.html +1 -0
  53. package/src/lib/home/index.component.ts +10 -0
  54. package/src/lib/home/index.routes.ts +29 -0
  55. package/src/lib/home/index.ts +1 -0
  56. package/src/lib/home/info/index.ts +1 -0
  57. package/src/lib/home/info/info.component.css +476 -0
  58. package/src/lib/home/info/info.component.html +174 -0
  59. package/src/lib/home/info/info.component.ts +287 -0
  60. package/src/lib/home/model/article.component.html +10 -0
  61. package/src/lib/home/model/article.component.ts +50 -0
  62. package/src/lib/home/model/barchart.component.html +8 -0
  63. package/src/lib/home/model/barchart.component.ts +59 -0
  64. package/src/lib/home/model/index.ts +7 -0
  65. package/src/lib/home/model/itemdetail.component.html +25 -0
  66. package/src/lib/home/model/itemdetail.component.ts +93 -0
  67. package/src/lib/home/model/itemtab.component.html +25 -0
  68. package/src/lib/home/model/itemtab.component.ts +105 -0
  69. package/src/lib/home/model/model.component.html +121 -0
  70. package/src/lib/home/model/model.component.ts +510 -0
  71. package/src/lib/home/model/modeltoolbar.component.html +111 -0
  72. package/src/lib/home/model/modeltoolbar.component.ts +157 -0
  73. package/src/lib/home/model/navigation.component.html +86 -0
  74. package/src/lib/home/model/navigation.component.ts +247 -0
  75. package/src/lib/home/model/services/index.ts +1 -0
  76. package/src/lib/home/model/services/model.service.spec.ts +423 -0
  77. package/src/lib/home/model/services/model.service.ts +319 -0
  78. package/src/lib/home/modelsearch/index.ts +1 -0
  79. package/src/lib/home/modelsearch/modelsearch.component.html +124 -0
  80. package/src/lib/home/modelsearch/modelsearch.component.ts +453 -0
  81. package/src/lib/interfaces/data.interface.ts +131 -0
  82. package/src/lib/interfaces/index.ts +2 -0
  83. package/src/lib/interfaces/item.interface.ts +438 -0
  84. package/src/lib/players/lookup/lookup.directive.ts +6 -0
  85. package/src/lib/players/lookup/lookup.item.component.ts +37 -0
  86. package/src/lib/players/lookup/lookup.item.ts +9 -0
  87. package/src/lib/players/lookup/lookup.player.component.ts +59 -0
  88. package/src/lib/players/lookup/lookup.selector.component.ts +41 -0
  89. package/src/lib/players/model/model.directive.ts +6 -0
  90. package/src/lib/players/model/model.item.component.spec.ts +311 -0
  91. package/src/lib/players/model/model.item.component.ts +3457 -0
  92. package/src/lib/players/model/model.item.ts +9 -0
  93. package/src/lib/players/model/model.player.component.ts +109 -0
  94. package/src/lib/players/model/model.selector.component.ts +59 -0
  95. package/src/lib/scheduler/scheduler.component.html +13 -0
  96. package/src/lib/scheduler/scheduler.component.scss +6 -0
  97. package/src/lib/scheduler/scheduler.component.ts +296 -0
  98. package/src/lib/scheduler/scheduler.routes.ts +15 -0
  99. package/src/lib/scheduler/schedulerdialog.component.html +72 -0
  100. package/src/lib/scheduler/schedulerdialog.component.ts +208 -0
  101. package/src/lib/scheduler/services/scheduler.service.ts +133 -0
  102. package/src/lib/services/auth-state.service.ts +129 -0
  103. package/src/lib/services/auth.interceptor.spec.ts +144 -0
  104. package/src/lib/services/auth.interceptor.ts +44 -0
  105. package/src/lib/services/cache.service.spec.ts +143 -0
  106. package/src/lib/services/cache.service.ts +71 -0
  107. package/src/lib/services/global-error-handler.spec.ts +39 -0
  108. package/src/lib/services/global-error-handler.ts +28 -0
  109. package/src/lib/services/global.service.spec.ts +801 -0
  110. package/src/lib/services/global.service.ts +724 -0
  111. package/src/lib/services/message.service.ts +556 -0
  112. package/src/lib/services/theme.service.ts +96 -0
  113. package/src/lib/template/authtemplate.component.html +6 -0
  114. package/src/lib/template/authtemplate.component.ts +13 -0
  115. package/src/lib/template/basetemplate.component.html +7 -0
  116. package/src/lib/template/basetemplate.component.ts +13 -0
  117. package/src/lib/template/index.ts +3 -0
  118. package/src/lib/template/modeltemplate.component.html +7 -0
  119. package/src/lib/template/modeltemplate.component.ts +21 -0
  120. package/src/lib/utils/piva.spec.ts +56 -0
  121. package/src/lib/utils/piva.ts +29 -0
  122. package/src/lib/validators/email.validator.spec.ts +57 -0
  123. package/src/lib/validators/email.validator.ts +17 -0
  124. package/src/lib/validators/equalPasswords.validator.spec.ts +54 -0
  125. package/src/lib/validators/equalPasswords.validator.ts +17 -0
  126. package/src/lib/validators/index.ts +2 -0
  127. package/src/lib/version.ts +1 -0
  128. package/src/public-api.ts +64 -0
  129. package/src/typings.d.ts +2 -0
  130. package/tsconfig.lib.json +18 -0
  131. package/tsconfig.lib.prod.json +9 -0
@@ -0,0 +1,143 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { CacheService } from './cache.service';
3
+
4
+ describe('CacheService', () => {
5
+ let svc: CacheService;
6
+
7
+ beforeEach(() => {
8
+ TestBed.configureTestingModule({});
9
+ svc = TestBed.inject(CacheService);
10
+ });
11
+
12
+ // ── getData / setData / removeData ────────────────────────────────────────
13
+
14
+ describe('getData / setData / removeData', () => {
15
+ it('returns undefined for an unknown key', () => {
16
+ expect(svc.getData('UNKNOWN')).toBeUndefined();
17
+ });
18
+
19
+ it('stores and retrieves entity data by key', () => {
20
+ const data = { entities: [] } as any;
21
+ svc.setData('APP.ENT.2024', data);
22
+ expect(svc.getData('APP.ENT.2024')).toBe(data);
23
+ });
24
+
25
+ it('overwrites an existing entry on a second setData call', () => {
26
+ const first = { entities: [{ name: 'a' }] } as any;
27
+ const second = { entities: [{ name: 'b' }] } as any;
28
+ svc.setData('KEY', first);
29
+ svc.setData('KEY', second);
30
+ expect(svc.getData('KEY')).toBe(second);
31
+ });
32
+
33
+ it('removes the entry for the given key', () => {
34
+ svc.setData('APP.ENT.2024', { entities: [] } as any);
35
+ svc.removeData('APP.ENT.2024');
36
+ expect(svc.getData('APP.ENT.2024')).toBeUndefined();
37
+ });
38
+
39
+ it('removing one key does not affect other keys', () => {
40
+ svc.setData('A', { entities: [] } as any);
41
+ svc.setData('B', { entities: [] } as any);
42
+ svc.removeData('A');
43
+ expect(svc.getData('B')).toBeDefined();
44
+ });
45
+
46
+ it('removeData on a non-existing key does not throw', () => {
47
+ expect(() => svc.removeData('NOT_THERE')).not.toThrow();
48
+ });
49
+ });
50
+
51
+ // ── getFields / setFields ─────────────────────────────────────────────────
52
+
53
+ describe('getFields / setFields', () => {
54
+ it('returns undefined for an unknown key', () => {
55
+ expect(svc.getFields('NONE')).toBeUndefined();
56
+ });
57
+
58
+ it('stores and retrieves a Member array', () => {
59
+ const fields = [{ id: 'field1' }] as any[];
60
+ svc.setFields('KEY', fields);
61
+ expect(svc.getFields('KEY')).toBe(fields);
62
+ });
63
+
64
+ it('overwrites fields when setFields is called twice for the same key', () => {
65
+ svc.setFields('KEY', [{ id: 'old' }] as any[]);
66
+ const updated = [{ id: 'new' }] as any[];
67
+ svc.setFields('KEY', updated);
68
+ expect(svc.getFields('KEY')).toBe(updated);
69
+ });
70
+ });
71
+
72
+ // ── getProjectItems / setProjectItems / clearProjectItems ─────────────────
73
+
74
+ describe('getProjectItems / setProjectItems / clearProjectItems', () => {
75
+ it('returns undefined for an unknown key', () => {
76
+ expect(svc.getProjectItems('NONE')).toBeUndefined();
77
+ });
78
+
79
+ it('stores and retrieves a project items array', () => {
80
+ const items = [{ id: 'item1' }] as any[];
81
+ svc.setProjectItems('PRJ.2024', items);
82
+ expect(svc.getProjectItems('PRJ.2024')).toBe(items);
83
+ });
84
+
85
+ it('clearProjectItems removes all project entries', () => {
86
+ svc.setProjectItems('PRJ.2024', [] as any[]);
87
+ svc.setProjectItems('PRJ.2025', [] as any[]);
88
+ svc.clearProjectItems();
89
+ expect(svc.getProjectItems('PRJ.2024')).toBeUndefined();
90
+ expect(svc.getProjectItems('PRJ.2025')).toBeUndefined();
91
+ });
92
+ });
93
+
94
+ // ── getDataJson / setDataJson ─────────────────────────────────────────────
95
+
96
+ describe('getDataJson / setDataJson', () => {
97
+ it('returns undefined for an unknown key', () => {
98
+ expect(svc.getDataJson('NONE')).toBeUndefined();
99
+ });
100
+
101
+ it('stores and retrieves JSON entity data', () => {
102
+ const data = { entities: [] } as any;
103
+ svc.setDataJson('PRJ.2024', data);
104
+ expect(svc.getDataJson('PRJ.2024')).toBe(data);
105
+ });
106
+ });
107
+
108
+ // ── getSchemaJson / setSchemaJson ─────────────────────────────────────────
109
+
110
+ describe('getSchemaJson / setSchemaJson', () => {
111
+ it('returns undefined for an unknown key', () => {
112
+ expect(svc.getSchemaJson('NONE')).toBeUndefined();
113
+ });
114
+
115
+ it('stores and retrieves schema (Entities)', () => {
116
+ const schema = { entities: [] } as any;
117
+ svc.setSchemaJson('PRJ.2024', schema);
118
+ expect(svc.getSchemaJson('PRJ.2024')).toBe(schema);
119
+ });
120
+ });
121
+
122
+ // ── Key isolation ─────────────────────────────────────────────────────────
123
+
124
+ describe('key isolation', () => {
125
+ it('similar keys do not collide in the data map', () => {
126
+ const d1 = { entities: [{ name: '2024' }] } as any;
127
+ const d2 = { entities: [{ name: '2025' }] } as any;
128
+ svc.setData('APP.ENT.2024', d1);
129
+ svc.setData('APP.ENT.2025', d2);
130
+ expect(svc.getData('APP.ENT.2024')).toBe(d1);
131
+ expect(svc.getData('APP.ENT.2025')).toBe(d2);
132
+ });
133
+
134
+ it('similar keys do not collide in the schema map', () => {
135
+ const s1 = { entities: [{ name: 'a' }] } as any;
136
+ const s2 = { entities: [{ name: 'b' }] } as any;
137
+ svc.setSchemaJson('PRJ.2024', s1);
138
+ svc.setSchemaJson('PRJ.2025', s2);
139
+ expect(svc.getSchemaJson('PRJ.2024')).toBe(s1);
140
+ expect(svc.getSchemaJson('PRJ.2025')).toBe(s2);
141
+ });
142
+ });
143
+ });
@@ -0,0 +1,71 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { EntitiesData, Entities, Member, ItemInterface } from '../interfaces/index';
3
+
4
+ @Injectable({ providedIn: 'root' })
5
+ export class CacheService {
6
+ private datas = new Map<string, EntitiesData>();
7
+ private fields: Record<string, Member[]> = {};
8
+ private projectItems: Record<string, ItemInterface[]> = {};
9
+ private dataJson: Record<string, EntitiesData> = {};
10
+ private schemaJson: Record<string, Entities> = {};
11
+
12
+ /** Returns the cached EntitiesData for the given key, or undefined if not present. */
13
+ public getData(id: string): EntitiesData | undefined {
14
+ return this.datas.get(id);
15
+ }
16
+
17
+ /** Stores EntitiesData under the given key. */
18
+ public setData(id: string, data: EntitiesData): void {
19
+ this.datas.set(id, data);
20
+ }
21
+
22
+ /** Removes the EntitiesData entry for the given key. */
23
+ public removeData(id: string): void {
24
+ this.datas.delete(id);
25
+ }
26
+
27
+ /** Returns the cached Member array for the given key. */
28
+ public getFields(id: string): Member[] {
29
+ return this.fields[id];
30
+ }
31
+
32
+ /** Stores a Member array under the given key. */
33
+ public setFields(id: string, fields: Member[]): void {
34
+ this.fields[id] = fields;
35
+ }
36
+
37
+ /** Returns the cached ItemInterface array for the given project key. */
38
+ public getProjectItems(id: string): ItemInterface[] {
39
+ return this.projectItems[id];
40
+ }
41
+
42
+ /** Stores an ItemInterface array under the given project key. */
43
+ public setProjectItems(id: string, items: ItemInterface[]): void {
44
+ this.projectItems[id] = items;
45
+ }
46
+
47
+ /** Clears all cached project items. */
48
+ public clearProjectItems(): void {
49
+ this.projectItems = {};
50
+ }
51
+
52
+ /** Returns the cached JSON entity data for the given key. */
53
+ public getDataJson(id: string): EntitiesData {
54
+ return this.dataJson[id];
55
+ }
56
+
57
+ /** Stores JSON entity data under the given key. */
58
+ public setDataJson(id: string, data: EntitiesData): void {
59
+ this.dataJson[id] = data;
60
+ }
61
+
62
+ /** Returns the cached schema (Entities) for the given key. */
63
+ public getSchemaJson(id: string): Entities {
64
+ return this.schemaJson[id];
65
+ }
66
+
67
+ /** Stores a schema (Entities) under the given key. */
68
+ public setSchemaJson(id: string, schema: Entities): void {
69
+ this.schemaJson[id] = schema;
70
+ }
71
+ }
@@ -0,0 +1,39 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { HttpErrorResponse } from '@angular/common/http';
3
+ import { GlobalErrorHandler } from './global-error-handler';
4
+
5
+ describe('GlobalErrorHandler', () => {
6
+ let handler: GlobalErrorHandler;
7
+
8
+ beforeEach(() => {
9
+ TestBed.configureTestingModule({});
10
+ handler = TestBed.inject(GlobalErrorHandler);
11
+ });
12
+
13
+ it('sets lastError with the message of an Error instance', () => {
14
+ handler.handleError(new Error('something broke'));
15
+ expect(handler.lastError()).toBe('something broke');
16
+ });
17
+
18
+ it('sets lastError to string representation for non-Error values', () => {
19
+ handler.handleError('raw string error');
20
+ expect(handler.lastError()).toBe('raw string error');
21
+ });
22
+
23
+ it('ignores HttpErrorResponse (handled by the auth interceptor)', () => {
24
+ handler.handleError(new HttpErrorResponse({ status: 500 }));
25
+ expect(handler.lastError()).toBeNull();
26
+ });
27
+
28
+ it('clearError resets lastError to null', () => {
29
+ handler.handleError(new Error('test'));
30
+ handler.clearError();
31
+ expect(handler.lastError()).toBeNull();
32
+ });
33
+
34
+ it('overwrites a previous error with a newer one', () => {
35
+ handler.handleError(new Error('first'));
36
+ handler.handleError(new Error('second'));
37
+ expect(handler.lastError()).toBe('second');
38
+ });
39
+ });
@@ -0,0 +1,28 @@
1
+ import { ErrorHandler, Injectable, isDevMode, signal } from '@angular/core';
2
+ import { HttpErrorResponse } from '@angular/common/http';
3
+
4
+ @Injectable({ providedIn: 'root' })
5
+ export class GlobalErrorHandler implements ErrorHandler {
6
+ readonly lastError = signal<string | null>(null);
7
+
8
+ /** Captures unhandled errors; ignores HTTP errors already handled by the interceptor. */
9
+ handleError(error: unknown): void {
10
+ // HTTP errors are already handled by the auth interceptor
11
+ if (error instanceof HttpErrorResponse) {
12
+ return;
13
+ }
14
+
15
+ const message = error instanceof Error ? error.message : String(error);
16
+
17
+ if (isDevMode()) {
18
+ console.error('[GlobalErrorHandler]', error);
19
+ }
20
+
21
+ this.lastError.set(message);
22
+ }
23
+
24
+ /** Clears the last captured error signal. */
25
+ clearError(): void {
26
+ this.lastError.set(null);
27
+ }
28
+ }