@flusys/ng-shared 3.0.0-rc → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +603 -322
- package/fesm2022/flusys-ng-shared.mjs +193 -283
- package/fesm2022/flusys-ng-shared.mjs.map +1 -1
- package/package.json +9 -9
- package/types/flusys-ng-shared.d.ts +63 -169
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, PLATFORM_ID, Injectable, DOCUMENT, REQUEST, signal, computed, ElementRef, input, effect, Directive, TemplateRef, ViewContainerRef, output, NgModule, Injector, runInInjectionContext, resource, model, untracked, forwardRef, ChangeDetectionStrategy, Component,
|
|
3
|
-
import
|
|
4
|
-
import { isPlatformServer, CommonModule, NgOptimizedImage, NgComponentOutlet, DatePipe } from '@angular/common';
|
|
2
|
+
import { inject, PLATFORM_ID, Injectable, DOCUMENT, REQUEST, signal, computed, ElementRef, input, effect, Directive, TemplateRef, ViewContainerRef, output, NgModule, Injector, runInInjectionContext, resource, model, untracked, forwardRef, ChangeDetectionStrategy, Component, ApplicationRef, viewChild, afterNextRender, ViewEncapsulation, DestroyRef, InjectionToken, isDevMode } from '@angular/core';
|
|
3
|
+
import { isPlatformServer, CommonModule, NgOptimizedImage, NgComponentOutlet, DatePipe, DOCUMENT as DOCUMENT$1 } from '@angular/common';
|
|
5
4
|
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
|
6
5
|
import { APP_CONFIG, getServiceUrl } from '@flusys/ng-core';
|
|
7
6
|
import { of, firstValueFrom, map as map$1 } from 'rxjs';
|
|
@@ -38,7 +37,7 @@ import * as i2$1 from 'primeng/progressbar';
|
|
|
38
37
|
import { ProgressBarModule } from 'primeng/progressbar';
|
|
39
38
|
import { RadioButtonModule } from 'primeng/radiobutton';
|
|
40
39
|
import { RippleModule } from 'primeng/ripple';
|
|
41
|
-
import * as i3
|
|
40
|
+
import * as i3 from 'primeng/select';
|
|
42
41
|
import { SelectModule } from 'primeng/select';
|
|
43
42
|
import { SelectButtonModule } from 'primeng/selectbutton';
|
|
44
43
|
import { SkeletonModule } from 'primeng/skeleton';
|
|
@@ -49,23 +48,15 @@ import { TabsModule } from 'primeng/tabs';
|
|
|
49
48
|
import { TagModule } from 'primeng/tag';
|
|
50
49
|
import { TextareaModule } from 'primeng/textarea';
|
|
51
50
|
import { ToastModule } from 'primeng/toast';
|
|
51
|
+
import { ToggleButtonModule } from 'primeng/togglebutton';
|
|
52
52
|
import { ToggleSwitchModule } from 'primeng/toggleswitch';
|
|
53
53
|
import { TooltipModule } from 'primeng/tooltip';
|
|
54
54
|
import { TreeTableModule } from 'primeng/treetable';
|
|
55
|
+
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
56
|
+
import { ColorPickerModule } from 'primeng/colorpicker';
|
|
55
57
|
import { MessageService, ConfirmationService } from 'primeng/api';
|
|
56
58
|
import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
57
59
|
|
|
58
|
-
/**
|
|
59
|
-
* Centralized Permission Codes
|
|
60
|
-
*
|
|
61
|
-
* Single source of truth for all permission codes used across the application.
|
|
62
|
-
* Use these constants instead of hardcoded strings to prevent typos and enable easy refactoring.
|
|
63
|
-
*
|
|
64
|
-
* Naming Convention: <entity>.<action>
|
|
65
|
-
* - entity: The resource being accessed (e.g., user, role, company)
|
|
66
|
-
* - action: The operation being performed (create, read, update, delete, assign)
|
|
67
|
-
*/
|
|
68
|
-
// ==================== AUTH MODULE ====================
|
|
69
60
|
const USER_PERMISSIONS = {
|
|
70
61
|
CREATE: 'user.create',
|
|
71
62
|
READ: 'user.read',
|
|
@@ -84,7 +75,6 @@ const BRANCH_PERMISSIONS = {
|
|
|
84
75
|
UPDATE: 'branch.update',
|
|
85
76
|
DELETE: 'branch.delete',
|
|
86
77
|
};
|
|
87
|
-
// ==================== IAM MODULE ====================
|
|
88
78
|
const ACTION_PERMISSIONS = {
|
|
89
79
|
CREATE: 'action.create',
|
|
90
80
|
READ: 'action.read',
|
|
@@ -113,7 +103,6 @@ const COMPANY_ACTION_PERMISSIONS = {
|
|
|
113
103
|
READ: 'company-action.read',
|
|
114
104
|
ASSIGN: 'company-action.assign',
|
|
115
105
|
};
|
|
116
|
-
// ==================== STORAGE MODULE ====================
|
|
117
106
|
const FILE_PERMISSIONS = {
|
|
118
107
|
CREATE: 'file.create',
|
|
119
108
|
READ: 'file.read',
|
|
@@ -132,7 +121,6 @@ const STORAGE_CONFIG_PERMISSIONS = {
|
|
|
132
121
|
UPDATE: 'storage-config.update',
|
|
133
122
|
DELETE: 'storage-config.delete',
|
|
134
123
|
};
|
|
135
|
-
// ==================== EMAIL MODULE ====================
|
|
136
124
|
const EMAIL_CONFIG_PERMISSIONS = {
|
|
137
125
|
CREATE: 'email-config.create',
|
|
138
126
|
READ: 'email-config.read',
|
|
@@ -145,38 +133,49 @@ const EMAIL_TEMPLATE_PERMISSIONS = {
|
|
|
145
133
|
UPDATE: 'email-template.update',
|
|
146
134
|
DELETE: 'email-template.delete',
|
|
147
135
|
};
|
|
148
|
-
// ==================== FORM BUILDER MODULE ====================
|
|
149
136
|
const FORM_PERMISSIONS = {
|
|
150
137
|
CREATE: 'form.create',
|
|
151
138
|
READ: 'form.read',
|
|
152
139
|
UPDATE: 'form.update',
|
|
153
140
|
DELETE: 'form.delete',
|
|
154
141
|
};
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
142
|
+
const EVENT_PERMISSIONS = {
|
|
143
|
+
CREATE: 'event.create',
|
|
144
|
+
READ: 'event.read',
|
|
145
|
+
UPDATE: 'event.update',
|
|
146
|
+
DELETE: 'event.delete',
|
|
147
|
+
};
|
|
148
|
+
const EVENT_PARTICIPANT_PERMISSIONS = {
|
|
149
|
+
CREATE: 'event-participant.create',
|
|
150
|
+
READ: 'event-participant.read',
|
|
151
|
+
UPDATE: 'event-participant.update',
|
|
152
|
+
DELETE: 'event-participant.delete',
|
|
153
|
+
};
|
|
154
|
+
const NOTIFICATION_PERMISSIONS = {
|
|
155
|
+
CREATE: 'notification.create',
|
|
156
|
+
READ: 'notification.read',
|
|
157
|
+
UPDATE: 'notification.update',
|
|
158
|
+
DELETE: 'notification.delete',
|
|
159
|
+
};
|
|
159
160
|
const PERMISSIONS = {
|
|
160
|
-
// Auth
|
|
161
161
|
USER: USER_PERMISSIONS,
|
|
162
162
|
COMPANY: COMPANY_PERMISSIONS,
|
|
163
163
|
BRANCH: BRANCH_PERMISSIONS,
|
|
164
|
-
// IAM
|
|
165
164
|
ACTION: ACTION_PERMISSIONS,
|
|
166
165
|
ROLE: ROLE_PERMISSIONS,
|
|
167
166
|
ROLE_ACTION: ROLE_ACTION_PERMISSIONS,
|
|
168
167
|
USER_ROLE: USER_ROLE_PERMISSIONS,
|
|
169
168
|
USER_ACTION: USER_ACTION_PERMISSIONS,
|
|
170
169
|
COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,
|
|
171
|
-
// Storage
|
|
172
170
|
FILE: FILE_PERMISSIONS,
|
|
173
171
|
FOLDER: FOLDER_PERMISSIONS,
|
|
174
172
|
STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,
|
|
175
|
-
// Email
|
|
176
173
|
EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,
|
|
177
174
|
EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,
|
|
178
|
-
// Form Builder
|
|
179
175
|
FORM: FORM_PERMISSIONS,
|
|
176
|
+
EVENT: EVENT_PERMISSIONS,
|
|
177
|
+
EVENT_PARTICIPANT: EVENT_PARTICIPANT_PERMISSIONS,
|
|
178
|
+
NOTIFICATION: NOTIFICATION_PERMISSIONS,
|
|
180
179
|
};
|
|
181
180
|
|
|
182
181
|
/**
|
|
@@ -266,10 +265,10 @@ class PlatformService {
|
|
|
266
265
|
get isServer() {
|
|
267
266
|
return isPlatformServer(this.platformId);
|
|
268
267
|
}
|
|
269
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
270
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
268
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PlatformService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
269
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PlatformService, providedIn: 'root' });
|
|
271
270
|
}
|
|
272
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PlatformService, decorators: [{
|
|
273
272
|
type: Injectable,
|
|
274
273
|
args: [{ providedIn: 'root' }]
|
|
275
274
|
}] });
|
|
@@ -281,10 +280,10 @@ class CookieService {
|
|
|
281
280
|
get() {
|
|
282
281
|
return !this.platformService.isServer ? this.doc.cookie : this.request?.headers.get('cookie') ?? "";
|
|
283
282
|
}
|
|
284
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
285
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
283
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CookieService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
284
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CookieService, providedIn: 'root' });
|
|
286
285
|
}
|
|
287
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CookieService, decorators: [{
|
|
288
287
|
type: Injectable,
|
|
289
288
|
args: [{
|
|
290
289
|
providedIn: 'root',
|
|
@@ -357,10 +356,10 @@ class FileUrlService {
|
|
|
357
356
|
.map((id) => cache.get(id))
|
|
358
357
|
.filter((f) => f !== undefined);
|
|
359
358
|
}
|
|
360
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
361
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
359
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileUrlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
360
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileUrlService, providedIn: 'root' });
|
|
362
361
|
}
|
|
363
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileUrlService, decorators: [{
|
|
364
363
|
type: Injectable,
|
|
365
364
|
args: [{ providedIn: 'root' }]
|
|
366
365
|
}] });
|
|
@@ -452,10 +451,10 @@ class PermissionValidatorService {
|
|
|
452
451
|
isPermissionsLoaded() {
|
|
453
452
|
return this._isLoaded();
|
|
454
453
|
}
|
|
455
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
456
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
454
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionValidatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
455
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionValidatorService, providedIn: 'root' });
|
|
457
456
|
}
|
|
458
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
457
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PermissionValidatorService, decorators: [{
|
|
459
458
|
type: Injectable,
|
|
460
459
|
args: [{ providedIn: 'root' }]
|
|
461
460
|
}] });
|
|
@@ -490,15 +489,19 @@ class EditModeElementChangerDirective {
|
|
|
490
489
|
}
|
|
491
490
|
}
|
|
492
491
|
if (inputElement.tagName === 'P-SELECT') {
|
|
492
|
+
const dropdown = inputElement.querySelector('.p-select-dropdown');
|
|
493
|
+
const label = inputElement.querySelector('.p-select-label');
|
|
493
494
|
if (!editMode) {
|
|
494
495
|
inputElement.classList.add('edit-mode-element-css', 'overflow-hidden');
|
|
495
|
-
|
|
496
|
-
|
|
496
|
+
if (dropdown)
|
|
497
|
+
dropdown.style.display = 'none';
|
|
498
|
+
label?.classList.add('edit-mode-element-css');
|
|
497
499
|
}
|
|
498
500
|
else {
|
|
499
501
|
inputElement.classList.remove('edit-mode-element-css', 'overflow-hidden');
|
|
500
|
-
|
|
501
|
-
|
|
502
|
+
if (dropdown)
|
|
503
|
+
dropdown.style.display = 'flex';
|
|
504
|
+
label?.classList.remove('edit-mode-element-css');
|
|
502
505
|
}
|
|
503
506
|
}
|
|
504
507
|
if (inputElement.tagName === 'P-CALENDAR') {
|
|
@@ -513,10 +516,10 @@ class EditModeElementChangerDirective {
|
|
|
513
516
|
}
|
|
514
517
|
}
|
|
515
518
|
}
|
|
516
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
517
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.
|
|
519
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: EditModeElementChangerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
520
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.5", type: EditModeElementChangerDirective, isStandalone: true, selector: "[appEditModeElementChanger]", inputs: { isEditMode: { classPropertyName: "isEditMode", publicName: "isEditMode", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
518
521
|
}
|
|
519
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
522
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: EditModeElementChangerDirective, decorators: [{
|
|
520
523
|
type: Directive,
|
|
521
524
|
args: [{
|
|
522
525
|
selector: '[appEditModeElementChanger]',
|
|
@@ -636,10 +639,10 @@ class HasPermissionDirective {
|
|
|
636
639
|
this.viewCreated = false;
|
|
637
640
|
}
|
|
638
641
|
}
|
|
639
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
640
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.
|
|
642
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: HasPermissionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
643
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.5", type: HasPermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: { classPropertyName: "hasPermission", publicName: "hasPermission", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
641
644
|
}
|
|
642
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
645
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: HasPermissionDirective, decorators: [{
|
|
643
646
|
type: Directive,
|
|
644
647
|
args: [{
|
|
645
648
|
selector: '[hasPermission]',
|
|
@@ -660,10 +663,10 @@ class IsEmptyImageDirective {
|
|
|
660
663
|
onError() {
|
|
661
664
|
this.hasError.set(true);
|
|
662
665
|
}
|
|
663
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
664
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.
|
|
666
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: IsEmptyImageDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
667
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.5", type: IsEmptyImageDirective, isStandalone: true, selector: "img", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "error": "onError()" }, properties: { "src": "imageSrc()" } }, ngImport: i0 });
|
|
665
668
|
}
|
|
666
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
669
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: IsEmptyImageDirective, decorators: [{
|
|
667
670
|
type: Directive,
|
|
668
671
|
args: [{
|
|
669
672
|
selector: 'img',
|
|
@@ -701,10 +704,10 @@ class PreventDefaultDirective {
|
|
|
701
704
|
event.preventDefault();
|
|
702
705
|
this.action.emit(event);
|
|
703
706
|
}
|
|
704
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
705
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.
|
|
707
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PreventDefaultDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
708
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.5", type: PreventDefaultDirective, isStandalone: true, selector: "[appPreventDefault]", inputs: { eventType: { classPropertyName: "eventType", publicName: "eventType", isSignal: true, isRequired: false, transformFunction: null }, preventKey: { classPropertyName: "preventKey", publicName: "preventKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeydown($event)", "keyup": "onKeyup($event)" } }, ngImport: i0 });
|
|
706
709
|
}
|
|
707
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
710
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PreventDefaultDirective, decorators: [{
|
|
708
711
|
type: Directive,
|
|
709
712
|
args: [{
|
|
710
713
|
selector: '[appPreventDefault]',
|
|
@@ -717,8 +720,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
717
720
|
}], propDecorators: { eventType: [{ type: i0.Input, args: [{ isSignal: true, alias: "eventType", required: false }] }], preventKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "preventKey", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
|
|
718
721
|
|
|
719
722
|
class AngularModule {
|
|
720
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
721
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.
|
|
723
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AngularModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
724
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.5", ngImport: i0, type: AngularModule, imports: [CommonModule,
|
|
722
725
|
FormsModule,
|
|
723
726
|
ReactiveFormsModule,
|
|
724
727
|
RouterOutlet,
|
|
@@ -737,13 +740,13 @@ class AngularModule {
|
|
|
737
740
|
NgOptimizedImage,
|
|
738
741
|
NgComponentOutlet,
|
|
739
742
|
PreventDefaultDirective] });
|
|
740
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.
|
|
743
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AngularModule, providers: [DatePipe], imports: [CommonModule,
|
|
741
744
|
FormsModule,
|
|
742
745
|
ReactiveFormsModule, CommonModule,
|
|
743
746
|
FormsModule,
|
|
744
747
|
ReactiveFormsModule] });
|
|
745
748
|
}
|
|
746
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
749
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: AngularModule, decorators: [{
|
|
747
750
|
type: NgModule,
|
|
748
751
|
args: [{
|
|
749
752
|
imports: [
|
|
@@ -775,8 +778,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
775
778
|
}] });
|
|
776
779
|
|
|
777
780
|
class PrimeModule {
|
|
778
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
779
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.
|
|
781
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PrimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
782
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.5", ngImport: i0, type: PrimeModule, exports: [AutoCompleteModule,
|
|
780
783
|
AvatarModule,
|
|
781
784
|
ButtonModule,
|
|
782
785
|
CardModule,
|
|
@@ -810,10 +813,13 @@ class PrimeModule {
|
|
|
810
813
|
TagModule,
|
|
811
814
|
TextareaModule,
|
|
812
815
|
ToastModule,
|
|
816
|
+
ToggleButtonModule,
|
|
813
817
|
ToggleSwitchModule,
|
|
814
818
|
TooltipModule,
|
|
815
|
-
TreeTableModule
|
|
816
|
-
|
|
819
|
+
TreeTableModule,
|
|
820
|
+
ProgressSpinnerModule,
|
|
821
|
+
ColorPickerModule] });
|
|
822
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PrimeModule, imports: [AutoCompleteModule,
|
|
817
823
|
AvatarModule,
|
|
818
824
|
ButtonModule,
|
|
819
825
|
CardModule,
|
|
@@ -847,11 +853,14 @@ class PrimeModule {
|
|
|
847
853
|
TagModule,
|
|
848
854
|
TextareaModule,
|
|
849
855
|
ToastModule,
|
|
856
|
+
ToggleButtonModule,
|
|
850
857
|
ToggleSwitchModule,
|
|
851
858
|
TooltipModule,
|
|
852
|
-
TreeTableModule
|
|
859
|
+
TreeTableModule,
|
|
860
|
+
ProgressSpinnerModule,
|
|
861
|
+
ColorPickerModule] });
|
|
853
862
|
}
|
|
854
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
863
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: PrimeModule, decorators: [{
|
|
855
864
|
type: NgModule,
|
|
856
865
|
args: [{
|
|
857
866
|
exports: [
|
|
@@ -889,55 +898,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
889
898
|
TagModule,
|
|
890
899
|
TextareaModule,
|
|
891
900
|
ToastModule,
|
|
901
|
+
ToggleButtonModule,
|
|
892
902
|
ToggleSwitchModule,
|
|
893
903
|
TooltipModule,
|
|
894
904
|
TreeTableModule,
|
|
905
|
+
ProgressSpinnerModule,
|
|
906
|
+
ColorPickerModule,
|
|
895
907
|
],
|
|
896
908
|
}]
|
|
897
909
|
}] });
|
|
898
910
|
|
|
899
|
-
// =============================================================================
|
|
900
|
-
// API Resource Service - Signal-based CRUD with Angular Resource API
|
|
901
|
-
// =============================================================================
|
|
902
911
|
/**
|
|
903
912
|
* Abstract base class for API services using Angular 21 resource() API.
|
|
904
913
|
* Provides signal-based reactive data fetching with automatic loading states.
|
|
905
|
-
* Response types match FLUSYS_NEST backend DTOs.
|
|
906
|
-
*
|
|
907
|
-
* ## Endpoint Mapping
|
|
908
|
-
*
|
|
909
|
-
* All endpoints use POST method (RPC-style API):
|
|
910
|
-
* - `POST /{resource}/insert` - Create single item
|
|
911
|
-
* - `POST /{resource}/insert-many` - Create multiple items
|
|
912
|
-
* - `POST /{resource}/get/:id` - Get single item by ID
|
|
913
|
-
* - `POST /{resource}/get-all?q=` - List with pagination/filter
|
|
914
|
-
* - `POST /{resource}/update` - Update single item
|
|
915
|
-
* - `POST /{resource}/update-many` - Update multiple items
|
|
916
|
-
* - `POST /{resource}/delete` - Delete/restore/permanent delete
|
|
917
914
|
*
|
|
918
915
|
* @example
|
|
919
916
|
* ```typescript
|
|
920
|
-
* // Define service
|
|
921
917
|
* @Injectable({ providedIn: 'root' })
|
|
922
918
|
* export class UserService extends ApiResourceService<UserDto, User> {
|
|
923
|
-
* constructor(
|
|
924
|
-
* super('users',
|
|
919
|
+
* constructor() {
|
|
920
|
+
* super('auth/users', inject(HttpClient));
|
|
925
921
|
* }
|
|
926
922
|
* }
|
|
927
|
-
*
|
|
928
|
-
* // In component - use signals
|
|
929
|
-
* userService = inject(UserService);
|
|
930
|
-
* users = this.userService.data; // Signal<User[]>
|
|
931
|
-
* isLoading = this.userService.isLoading; // Signal<boolean>
|
|
932
|
-
* total = this.userService.total; // Signal<number>
|
|
933
|
-
*
|
|
934
|
-
* // Trigger fetch
|
|
935
|
-
* this.userService.fetchList('search', { pagination: { currentPage: 0, pageSize: 10 } });
|
|
936
|
-
*
|
|
937
|
-
* // CRUD operations
|
|
938
|
-
* await this.userService.insertAsync({ name: 'John', email: 'john@example.com' });
|
|
939
|
-
* await this.userService.updateAsync({ id: '123', name: 'John Updated' });
|
|
940
|
-
* await this.userService.deleteAsync({ id: '123', type: 'delete' });
|
|
941
923
|
* ```
|
|
942
924
|
*/
|
|
943
925
|
class ApiResourceService {
|
|
@@ -945,43 +927,22 @@ class ApiResourceService {
|
|
|
945
927
|
injector = inject(Injector);
|
|
946
928
|
http;
|
|
947
929
|
moduleApiName;
|
|
948
|
-
// ==========================================================================
|
|
949
|
-
// State Signals for List Queries
|
|
950
|
-
// ==========================================================================
|
|
951
|
-
/** Current search term */
|
|
952
930
|
searchTerm = signal('', ...(ngDevMode ? [{ debugName: "searchTerm" }] : []));
|
|
953
|
-
/** Current filter and pagination state */
|
|
954
931
|
filterData = signal({
|
|
955
932
|
pagination: { currentPage: 0, pageSize: 10 },
|
|
956
933
|
filter: {},
|
|
957
934
|
select: [],
|
|
958
935
|
sort: {},
|
|
959
936
|
}, ...(ngDevMode ? [{ debugName: "filterData" }] : []));
|
|
960
|
-
/**
|
|
961
|
-
* Resource for list data - lazy initialized to prevent auto-fetch on service injection.
|
|
962
|
-
* Call initListResource() or any list method (fetchList, reload, etc.) to initialize.
|
|
963
|
-
*/
|
|
964
937
|
_listResource = null;
|
|
965
|
-
/** Whether the list resource has been initialized */
|
|
966
938
|
_resourceInitialized = false;
|
|
967
|
-
/**
|
|
968
|
-
* Signal to track resource initialization for computed signals.
|
|
969
|
-
* This allows computed signals to re-evaluate when the resource is created.
|
|
970
|
-
* Without this, computed signals would not detect when _listResource changes from null.
|
|
971
|
-
*/
|
|
972
939
|
_resourceInitSignal = signal(false, ...(ngDevMode ? [{ debugName: "_resourceInitSignal" }] : []));
|
|
973
|
-
/** Get or create the list resource (lazy initialization) */
|
|
974
940
|
get listResource() {
|
|
975
941
|
if (!this._listResource) {
|
|
976
942
|
this.initListResource();
|
|
977
943
|
}
|
|
978
944
|
return this._listResource;
|
|
979
945
|
}
|
|
980
|
-
/**
|
|
981
|
-
* Initialize the list resource. Called automatically when accessing listResource
|
|
982
|
-
* or any list-related computed signals/methods.
|
|
983
|
-
* Uses runInInjectionContext to support lazy initialization outside constructor.
|
|
984
|
-
*/
|
|
985
946
|
initListResource() {
|
|
986
947
|
if (this._resourceInitialized)
|
|
987
948
|
return;
|
|
@@ -991,80 +952,49 @@ class ApiResourceService {
|
|
|
991
952
|
search: this.searchTerm(),
|
|
992
953
|
filter: this.filterData(),
|
|
993
954
|
}),
|
|
994
|
-
loader: async ({ params }) =>
|
|
995
|
-
const { search, filter } = params;
|
|
996
|
-
return this.fetchAllAsync(search, filter);
|
|
997
|
-
} });
|
|
955
|
+
loader: async ({ params }) => this.getAllAsync(params.filter, params.search) });
|
|
998
956
|
});
|
|
999
|
-
// Signal that resource is now initialized - triggers computed re-evaluation
|
|
1000
957
|
this._resourceInitSignal.set(true);
|
|
1001
958
|
}
|
|
1002
|
-
// ==========================================================================
|
|
1003
|
-
// Computed State Accessors
|
|
1004
|
-
// ==========================================================================
|
|
1005
|
-
/**
|
|
1006
|
-
* Whether data is currently loading.
|
|
1007
|
-
* Tracks _resourceInitSignal to re-evaluate when resource is created.
|
|
1008
|
-
*/
|
|
1009
959
|
isLoading = computed(() => {
|
|
1010
|
-
this._resourceInitSignal();
|
|
960
|
+
this._resourceInitSignal();
|
|
1011
961
|
return this._listResource?.isLoading() ?? false;
|
|
1012
962
|
}, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
1013
|
-
/**
|
|
1014
|
-
* List data array.
|
|
1015
|
-
* Tracks _resourceInitSignal to re-evaluate when resource is created.
|
|
1016
|
-
*/
|
|
1017
963
|
data = computed(() => {
|
|
1018
|
-
this._resourceInitSignal();
|
|
964
|
+
this._resourceInitSignal();
|
|
1019
965
|
return this._listResource?.value()?.data ?? [];
|
|
1020
966
|
}, ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
1021
|
-
/**
|
|
1022
|
-
* Total count of items.
|
|
1023
|
-
* Tracks _resourceInitSignal to re-evaluate when resource is created.
|
|
1024
|
-
*/
|
|
1025
967
|
total = computed(() => {
|
|
1026
|
-
this._resourceInitSignal();
|
|
968
|
+
this._resourceInitSignal();
|
|
1027
969
|
return this._listResource?.value()?.meta?.total ?? 0;
|
|
1028
970
|
}, ...(ngDevMode ? [{ debugName: "total" }] : []));
|
|
1029
|
-
/**
|
|
1030
|
-
* Pagination metadata.
|
|
1031
|
-
* Tracks _resourceInitSignal to re-evaluate when resource is created.
|
|
1032
|
-
*/
|
|
1033
971
|
pageInfo = computed(() => {
|
|
1034
|
-
this._resourceInitSignal();
|
|
972
|
+
this._resourceInitSignal();
|
|
1035
973
|
return this._listResource?.value()?.meta;
|
|
1036
974
|
}, ...(ngDevMode ? [{ debugName: "pageInfo" }] : []));
|
|
1037
|
-
/**
|
|
1038
|
-
* Whether there are more pages.
|
|
1039
|
-
* Tracks _resourceInitSignal to re-evaluate when resource is created.
|
|
1040
|
-
*/
|
|
1041
975
|
hasMore = computed(() => {
|
|
1042
|
-
this._resourceInitSignal();
|
|
976
|
+
this._resourceInitSignal();
|
|
1043
977
|
const meta = this._listResource?.value()?.meta;
|
|
1044
978
|
if (!meta)
|
|
1045
979
|
return false;
|
|
1046
980
|
return meta.hasMore ?? (meta.page + 1) * meta.pageSize < meta.total;
|
|
1047
981
|
}, ...(ngDevMode ? [{ debugName: "hasMore" }] : []));
|
|
1048
|
-
constructor(moduleApiName, http) {
|
|
1049
|
-
this.moduleApiName = moduleApiName;
|
|
1050
|
-
|
|
982
|
+
constructor(moduleApiName, http, serviceName) {
|
|
983
|
+
this.moduleApiName = moduleApiName || serviceName || 'api';
|
|
984
|
+
const config = inject(APP_CONFIG);
|
|
985
|
+
const serviceBaseUrl = serviceName ? getServiceUrl(config, serviceName) : config.apiBaseUrl;
|
|
986
|
+
this.baseUrl = moduleApiName ? `${serviceBaseUrl}/${moduleApiName}` : serviceBaseUrl;
|
|
1051
987
|
this.http = http;
|
|
1052
|
-
// Resource is now lazy-initialized, not created in constructor
|
|
1053
988
|
}
|
|
1054
989
|
getHttpOptions(endpoint, params) {
|
|
1055
990
|
return {
|
|
1056
|
-
headers: new HttpHeaders({
|
|
1057
|
-
'x-loader-tag': `${this.moduleApiName}/${endpoint}`,
|
|
1058
|
-
}),
|
|
991
|
+
headers: new HttpHeaders({ 'x-loader-tag': `${this.moduleApiName}/${endpoint}` }),
|
|
1059
992
|
...(params ? { params } : {}),
|
|
1060
993
|
};
|
|
1061
994
|
}
|
|
1062
995
|
// ==========================================================================
|
|
1063
|
-
// List Management
|
|
996
|
+
// List Management
|
|
1064
997
|
// ==========================================================================
|
|
1065
|
-
/**
|
|
1066
|
-
* Fetch list data (triggers resource initialization and reload)
|
|
1067
|
-
*/
|
|
1068
998
|
fetchList(search = '', filter) {
|
|
1069
999
|
this.initListResource();
|
|
1070
1000
|
this.searchTerm.set(search);
|
|
@@ -1072,16 +1002,10 @@ class ApiResourceService {
|
|
|
1072
1002
|
this.filterData.update((prev) => ({ ...prev, ...filter }));
|
|
1073
1003
|
}
|
|
1074
1004
|
}
|
|
1075
|
-
/**
|
|
1076
|
-
* Update pagination
|
|
1077
|
-
*/
|
|
1078
1005
|
setPagination(pagination) {
|
|
1079
1006
|
this.initListResource();
|
|
1080
1007
|
this.filterData.update((prev) => ({ ...prev, pagination }));
|
|
1081
1008
|
}
|
|
1082
|
-
/**
|
|
1083
|
-
* Go to next page
|
|
1084
|
-
*/
|
|
1085
1009
|
nextPage() {
|
|
1086
1010
|
this.initListResource();
|
|
1087
1011
|
this.filterData.update((prev) => ({
|
|
@@ -1092,9 +1016,6 @@ class ApiResourceService {
|
|
|
1092
1016
|
},
|
|
1093
1017
|
}));
|
|
1094
1018
|
}
|
|
1095
|
-
/**
|
|
1096
|
-
* Reset to first page
|
|
1097
|
-
*/
|
|
1098
1019
|
resetPagination() {
|
|
1099
1020
|
this.initListResource();
|
|
1100
1021
|
this.filterData.update((prev) => ({
|
|
@@ -1102,42 +1023,21 @@ class ApiResourceService {
|
|
|
1102
1023
|
pagination: { currentPage: 0, pageSize: prev.pagination?.pageSize ?? 10 },
|
|
1103
1024
|
}));
|
|
1104
1025
|
}
|
|
1105
|
-
/**
|
|
1106
|
-
* Reload current data
|
|
1107
|
-
*/
|
|
1108
1026
|
reload() {
|
|
1109
|
-
|
|
1110
|
-
this._listResource.reload();
|
|
1111
|
-
}
|
|
1027
|
+
this._listResource?.reload();
|
|
1112
1028
|
}
|
|
1113
1029
|
// ==========================================================================
|
|
1114
|
-
// Observable
|
|
1030
|
+
// Observable API (IApiService interface)
|
|
1115
1031
|
// ==========================================================================
|
|
1116
|
-
/**
|
|
1117
|
-
* Insert single item (Observable)
|
|
1118
|
-
* POST /{resource}/insert
|
|
1119
|
-
*/
|
|
1120
1032
|
insert(dto) {
|
|
1121
1033
|
return this.http.post(`${this.baseUrl}/insert`, dto, this.getHttpOptions('insert'));
|
|
1122
1034
|
}
|
|
1123
|
-
/**
|
|
1124
|
-
* Insert multiple items (Observable)
|
|
1125
|
-
* POST /{resource}/insert-many
|
|
1126
|
-
*/
|
|
1127
1035
|
insertMany(dtos) {
|
|
1128
1036
|
return this.http.post(`${this.baseUrl}/insert-many`, dtos, this.getHttpOptions('insert-many'));
|
|
1129
1037
|
}
|
|
1130
|
-
/**
|
|
1131
|
-
* Find single item by ID (Observable)
|
|
1132
|
-
* POST /{resource}/get/:id
|
|
1133
|
-
*/
|
|
1134
1038
|
findById(id, select) {
|
|
1135
1039
|
return this.http.post(`${this.baseUrl}/get/${id}`, { select }, this.getHttpOptions(`get/${id}`));
|
|
1136
1040
|
}
|
|
1137
|
-
/**
|
|
1138
|
-
* Get all items with pagination (Observable)
|
|
1139
|
-
* POST /{resource}/get-all?q=search
|
|
1140
|
-
*/
|
|
1141
1041
|
getAll(search, filter) {
|
|
1142
1042
|
let params = new HttpParams();
|
|
1143
1043
|
if (search) {
|
|
@@ -1145,70 +1045,36 @@ class ApiResourceService {
|
|
|
1145
1045
|
}
|
|
1146
1046
|
return this.http.post(`${this.baseUrl}/get-all`, filter, this.getHttpOptions('get-all', params));
|
|
1147
1047
|
}
|
|
1148
|
-
/**
|
|
1149
|
-
* Update single item (Observable)
|
|
1150
|
-
* POST /{resource}/update
|
|
1151
|
-
*/
|
|
1152
1048
|
update(dto) {
|
|
1153
1049
|
return this.http.post(`${this.baseUrl}/update`, dto, this.getHttpOptions('update'));
|
|
1154
1050
|
}
|
|
1155
|
-
/**
|
|
1156
|
-
* Update multiple items (Observable)
|
|
1157
|
-
* POST /{resource}/update-many
|
|
1158
|
-
*/
|
|
1159
1051
|
updateMany(dtos) {
|
|
1160
1052
|
return this.http.post(`${this.baseUrl}/update-many`, dtos, this.getHttpOptions('update-many'));
|
|
1161
1053
|
}
|
|
1162
|
-
/**
|
|
1163
|
-
* Delete items (Observable)
|
|
1164
|
-
* POST /{resource}/delete
|
|
1165
|
-
* @param deleteDto - { id: string | string[], type: 'delete' | 'restore' | 'permanent' }
|
|
1166
|
-
*/
|
|
1167
1054
|
delete(deleteDto) {
|
|
1168
1055
|
return this.http.post(`${this.baseUrl}/delete`, deleteDto, this.getHttpOptions('delete'));
|
|
1169
1056
|
}
|
|
1170
1057
|
// ==========================================================================
|
|
1171
|
-
//
|
|
1058
|
+
// Async API
|
|
1172
1059
|
// ==========================================================================
|
|
1173
|
-
|
|
1174
|
-
* Fetch paginated list (async)
|
|
1175
|
-
*/
|
|
1176
|
-
async fetchAllAsync(search, filter) {
|
|
1060
|
+
async getAllAsync(filter, search = '') {
|
|
1177
1061
|
return firstValueFrom(this.getAll(search, filter));
|
|
1178
1062
|
}
|
|
1179
|
-
/**
|
|
1180
|
-
* Find single item by ID (async)
|
|
1181
|
-
*/
|
|
1182
1063
|
async findByIdAsync(id, select) {
|
|
1183
1064
|
return firstValueFrom(this.findById(id, select));
|
|
1184
1065
|
}
|
|
1185
|
-
/**
|
|
1186
|
-
* Insert single item (async)
|
|
1187
|
-
*/
|
|
1188
1066
|
async insertAsync(dto) {
|
|
1189
1067
|
return firstValueFrom(this.insert(dto));
|
|
1190
1068
|
}
|
|
1191
|
-
/**
|
|
1192
|
-
* Insert multiple items (async)
|
|
1193
|
-
*/
|
|
1194
1069
|
async insertManyAsync(dtos) {
|
|
1195
1070
|
return firstValueFrom(this.insertMany(dtos));
|
|
1196
1071
|
}
|
|
1197
|
-
/**
|
|
1198
|
-
* Update single item (async)
|
|
1199
|
-
*/
|
|
1200
1072
|
async updateAsync(dto) {
|
|
1201
1073
|
return firstValueFrom(this.update(dto));
|
|
1202
1074
|
}
|
|
1203
|
-
/**
|
|
1204
|
-
* Update multiple items (async)
|
|
1205
|
-
*/
|
|
1206
1075
|
async updateManyAsync(dtos) {
|
|
1207
1076
|
return firstValueFrom(this.updateMany(dtos));
|
|
1208
1077
|
}
|
|
1209
|
-
/**
|
|
1210
|
-
* Delete items (async)
|
|
1211
|
-
*/
|
|
1212
1078
|
async deleteAsync(deleteDto) {
|
|
1213
1079
|
return firstValueFrom(this.delete(deleteDto));
|
|
1214
1080
|
}
|
|
@@ -1311,10 +1177,10 @@ class BaseFormControl {
|
|
|
1311
1177
|
this.onTouched();
|
|
1312
1178
|
}
|
|
1313
1179
|
}
|
|
1314
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1315
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.
|
|
1180
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseFormControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1181
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.5", type: BaseFormControl, isStandalone: true, inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", touched: "touchedChange" }, ngImport: i0 });
|
|
1316
1182
|
}
|
|
1317
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseFormControl, decorators: [{
|
|
1318
1184
|
type: Directive
|
|
1319
1185
|
}], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }] } });
|
|
1320
1186
|
/**
|
|
@@ -1341,8 +1207,8 @@ class IconComponent {
|
|
|
1341
1207
|
icon = input.required(...(ngDevMode ? [{ debugName: "icon" }] : []));
|
|
1342
1208
|
iconType = input(IconTypeEnum.PRIMENG_ICON, ...(ngDevMode ? [{ debugName: "iconType" }] : []));
|
|
1343
1209
|
IconTypeEnum = IconTypeEnum; // Needed for template reference
|
|
1344
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1345
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
1210
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1211
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: IconComponent, isStandalone: true, selector: "lib-icon", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null }, iconType: { classPropertyName: "iconType", publicName: "iconType", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1346
1212
|
@if (icon()) {
|
|
1347
1213
|
@if (iconType() === IconTypeEnum.PRIMENG_ICON) {
|
|
1348
1214
|
<i [class]="icon()"></i>
|
|
@@ -1354,7 +1220,7 @@ class IconComponent {
|
|
|
1354
1220
|
}
|
|
1355
1221
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: IsEmptyImageDirective, selector: "img", inputs: ["src"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1356
1222
|
}
|
|
1357
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1223
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: IconComponent, decorators: [{
|
|
1358
1224
|
type: Component,
|
|
1359
1225
|
args: [{
|
|
1360
1226
|
selector: 'lib-icon',
|
|
@@ -1417,10 +1283,14 @@ function checkScrollPagination(event, config) {
|
|
|
1417
1283
|
* - Signal forms: `[formField]="formTree.field"`
|
|
1418
1284
|
*/
|
|
1419
1285
|
class LazyMultiSelectComponent extends BaseFormControl {
|
|
1420
|
-
|
|
1286
|
+
document = inject(DOCUMENT$1);
|
|
1287
|
+
appRef = inject(ApplicationRef);
|
|
1421
1288
|
onDocumentClickBound = this.handleDocumentClick.bind(this);
|
|
1422
1289
|
// View references
|
|
1423
1290
|
pSelectRef = viewChild.required('pSelect');
|
|
1291
|
+
overlayTemplate = viewChild.required('overlayTpl');
|
|
1292
|
+
// Portal state
|
|
1293
|
+
overlayViewRef = null;
|
|
1424
1294
|
// Inputs
|
|
1425
1295
|
placeHolder = input('Select Options', ...(ngDevMode ? [{ debugName: "placeHolder" }] : []));
|
|
1426
1296
|
isEditMode = input.required(...(ngDevMode ? [{ debugName: "isEditMode" }] : []));
|
|
@@ -1481,13 +1351,16 @@ class LazyMultiSelectComponent extends BaseFormControl {
|
|
|
1481
1351
|
});
|
|
1482
1352
|
});
|
|
1483
1353
|
// Document click listener for closing dropdown
|
|
1484
|
-
afterNextRender(
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
document.removeEventListener('click', this.onDocumentClickBound);
|
|
1354
|
+
afterNextRender({
|
|
1355
|
+
write: () => {
|
|
1356
|
+
this.document.addEventListener('click', this.onDocumentClickBound);
|
|
1357
|
+
},
|
|
1489
1358
|
});
|
|
1490
1359
|
}
|
|
1360
|
+
ngOnDestroy() {
|
|
1361
|
+
this.document.removeEventListener('click', this.onDocumentClickBound);
|
|
1362
|
+
this.closeOverlay();
|
|
1363
|
+
}
|
|
1491
1364
|
onScroll(event) {
|
|
1492
1365
|
const nextPagination = checkScrollPagination(event, {
|
|
1493
1366
|
pagination: this.pagination(),
|
|
@@ -1498,29 +1371,62 @@ class LazyMultiSelectComponent extends BaseFormControl {
|
|
|
1498
1371
|
this.onPagination.emit(nextPagination);
|
|
1499
1372
|
}
|
|
1500
1373
|
}
|
|
1501
|
-
onSelectClick(
|
|
1502
|
-
if (this.disabled())
|
|
1374
|
+
onSelectClick() {
|
|
1375
|
+
if (this.disabled() || !this.isEditMode())
|
|
1503
1376
|
return;
|
|
1377
|
+
if (this.openOptions()) {
|
|
1378
|
+
this.closeOverlay();
|
|
1379
|
+
}
|
|
1380
|
+
else {
|
|
1381
|
+
this.openOverlay();
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
openOverlay() {
|
|
1504
1385
|
this.pSelectRef()?.nativeElement.classList.add('p-focus');
|
|
1505
|
-
this.openOptions.
|
|
1386
|
+
this.openOptions.set(true);
|
|
1387
|
+
// Create embedded view and append to body (portal pattern)
|
|
1388
|
+
this.overlayViewRef = this.overlayTemplate().createEmbeddedView({});
|
|
1389
|
+
this.appRef.attachView(this.overlayViewRef);
|
|
1390
|
+
const overlayEl = this.overlayViewRef.rootNodes[0];
|
|
1391
|
+
this.document.body.appendChild(overlayEl);
|
|
1392
|
+
// Override positioning for portal (CSS class handles visual styles)
|
|
1393
|
+
const rect = this.pSelectRef()?.nativeElement.getBoundingClientRect();
|
|
1394
|
+
if (rect) {
|
|
1395
|
+
overlayEl.style.cssText = `
|
|
1396
|
+
position: fixed !important;
|
|
1397
|
+
top: ${rect.bottom + 2}px !important;
|
|
1398
|
+
left: ${rect.left}px !important;
|
|
1399
|
+
width: ${rect.width}px !important;
|
|
1400
|
+
max-width: ${rect.width}px !important;
|
|
1401
|
+
min-width: ${rect.width}px !important;
|
|
1402
|
+
z-index: 999999999999 !important;
|
|
1403
|
+
`;
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
closeOverlay() {
|
|
1407
|
+
this.openOptions.set(false);
|
|
1408
|
+
this.pSelectRef()?.nativeElement.classList.remove('p-focus');
|
|
1409
|
+
if (this.overlayViewRef) {
|
|
1410
|
+
this.appRef.detachView(this.overlayViewRef);
|
|
1411
|
+
this.overlayViewRef.destroy();
|
|
1412
|
+
this.overlayViewRef = null;
|
|
1413
|
+
}
|
|
1506
1414
|
}
|
|
1507
1415
|
onOverlayClick(event) {
|
|
1508
1416
|
event.stopPropagation();
|
|
1509
1417
|
}
|
|
1510
1418
|
handleDocumentClick(event) {
|
|
1511
|
-
const
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1419
|
+
const target = event.target;
|
|
1420
|
+
const clickedInSelect = this.pSelectRef()?.nativeElement.contains(target);
|
|
1421
|
+
const clickedInOverlay = this.overlayViewRef?.rootNodes[0]?.contains(target);
|
|
1422
|
+
if (!clickedInSelect && !clickedInOverlay) {
|
|
1423
|
+
this.closeOverlay();
|
|
1515
1424
|
this.markAsTouched();
|
|
1516
1425
|
}
|
|
1517
1426
|
}
|
|
1518
1427
|
isSelected(data) {
|
|
1519
1428
|
return this.value()?.includes(data.value) ?? false;
|
|
1520
1429
|
}
|
|
1521
|
-
key(option) {
|
|
1522
|
-
return option.value;
|
|
1523
|
-
}
|
|
1524
1430
|
selectValue(event, option) {
|
|
1525
1431
|
const previousValue = this.value() ?? [];
|
|
1526
1432
|
if (event.checked) {
|
|
@@ -1544,13 +1450,13 @@ class LazyMultiSelectComponent extends BaseFormControl {
|
|
|
1544
1450
|
event.stopPropagation();
|
|
1545
1451
|
this.value.set([]);
|
|
1546
1452
|
}
|
|
1547
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1548
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
1453
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LazyMultiSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1454
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: LazyMultiSelectComponent, isStandalone: true, selector: "lib-lazy-multi-select", inputs: { placeHolder: { classPropertyName: "placeHolder", publicName: "placeHolder", isSignal: true, isRequired: false, transformFunction: null }, isEditMode: { classPropertyName: "isEditMode", publicName: "isEditMode", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: true, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: true, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: true, transformFunction: null }, selectDataList: { classPropertyName: "selectDataList", publicName: "selectDataList", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onSearch: "onSearch", onPagination: "onPagination" }, providers: [provideValueAccessor(LazyMultiSelectComponent)], viewQueries: [{ propertyName: "pSelectRef", first: true, predicate: ["pSelect"], descendants: true, isSignal: true }, { propertyName: "overlayTemplate", first: true, predicate: ["overlayTpl"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"p-select w-full\"\n #pSelect\n (click)=\"onSelectClick()\"\n [class.p-disabled]=\"disabled()\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n [class.overflow-hidden]=\"!isEditMode()\"\n>\n @if (selectedValueDisplay()) {\n <span class=\"p-select-label\" [class.edit-mode-element-css]=\"!isEditMode()\">\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"p-select-label p-placeholder\">{{ placeHolder() }}</span>\n }\n\n @if (isEditMode()) {\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\">\n <i class=\"pi pi-times\"></i>\n </span>\n\n <div class=\"p-select-dropdown\">\n <span class=\"p-select-dropdown-icon flex items-center\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"p-multiselect-dropdown-icon p-icon\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n </div>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div class=\"p-select-overlay\" (click)=\"onOverlayClick($event)\">\n <div class=\"p-select-header flex flex-row gap-2 items-center\">\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n pInputText\n class=\"w-full\"\n placeholder=\"Search...\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track data.value) {\n <li\n class=\"p-select-option flex flex-row gap-2 items-center\"\n [class.p-select-option-selected]=\"isSelected(data)\"\n >\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelected(data)\"\n [disabled]=\"disabled()\"\n (onChange)=\"selectValue($event, data)\"\n />\n <span>{{ data.label }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n</ng-template>\n", styles: [".p-select-overlay{display:flex;flex-direction:column;max-height:250px;overflow:hidden}.p-select-header{padding:.75rem;border-bottom:1px solid var(--p-surface-border);background:var(--p-content-hover-background);flex-shrink:0;width:100%;box-sizing:border-box}.p-select-header input{background:var(--p-form-field-background);border-color:var(--p-form-field-border-color);color:var(--p-text-color)}.p-select-header input::placeholder{color:var(--p-text-muted-color)}.p-select-list-container{flex:1;overflow-y:auto;min-height:0;width:100%}.p-select-list{margin:0;padding:.25rem 0;list-style:none;background:var(--p-surface-overlay);color:var(--p-text-color);width:100%}.p-select-option{padding:.5rem .75rem;cursor:pointer;transition:background-color .2s ease;color:var(--p-text-color)}.p-select-option:hover{background:var(--p-content-hover-background)}.p-select-option.p-select-option-selected{background:var(--p-highlight-background);color:var(--p-highlight-color)}.p-select-option.p-select-option-selected:hover{background:var(--p-highlight-focus-background);color:var(--p-highlight-focus-color)}.p-select-clear-icon{display:flex;align-items:center;padding:0 .5rem;color:var(--p-text-muted-color);cursor:pointer;transition:color .2s ease}.p-select-clear-icon:hover{color:var(--p-text-color)}\n"], dependencies: [{ kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i1.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["hostName", "value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1549
1455
|
}
|
|
1550
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1456
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LazyMultiSelectComponent, decorators: [{
|
|
1551
1457
|
type: Component,
|
|
1552
|
-
args: [{ selector: 'lib-lazy-multi-select', imports: [PrimeModule, AngularModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideValueAccessor(LazyMultiSelectComponent)], template: "<div
|
|
1553
|
-
}], ctorParameters: () => [], propDecorators: { pSelectRef: [{ type: i0.ViewChild, args: ['pSelect', { isSignal: true }] }], placeHolder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeHolder", required: false }] }], isEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isEditMode", required: true }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: true }] }], total: [{ type: i0.Input, args: [{ isSignal: true, alias: "total", required: true }] }], pagination: [{ type: i0.Input, args: [{ isSignal: true, alias: "pagination", required: true }] }], selectDataList: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectDataList", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], onSearch: [{ type: i0.Output, args: ["onSearch"] }], onPagination: [{ type: i0.Output, args: ["onPagination"] }] } });
|
|
1458
|
+
args: [{ selector: 'lib-lazy-multi-select', imports: [PrimeModule, AngularModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [provideValueAccessor(LazyMultiSelectComponent)], template: "<div\n class=\"p-select w-full\"\n #pSelect\n (click)=\"onSelectClick()\"\n [class.p-disabled]=\"disabled()\"\n [class.edit-mode-element-css]=\"!isEditMode()\"\n [class.overflow-hidden]=\"!isEditMode()\"\n>\n @if (selectedValueDisplay()) {\n <span class=\"p-select-label\" [class.edit-mode-element-css]=\"!isEditMode()\">\n {{ selectedValueDisplay() }}\n </span>\n } @else {\n <span class=\"p-select-label p-placeholder\">{{ placeHolder() }}</span>\n }\n\n @if (isEditMode()) {\n <span class=\"p-select-clear-icon\" (click)=\"clear($event)\">\n <i class=\"pi pi-times\"></i>\n </span>\n\n <div class=\"p-select-dropdown\">\n <span class=\"p-select-dropdown-icon flex items-center\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"p-multiselect-dropdown-icon p-icon\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n </div>\n }\n</div>\n\n<ng-template #overlayTpl>\n <div class=\"p-select-overlay\" (click)=\"onOverlayClick($event)\">\n <div class=\"p-select-header flex flex-row gap-2 items-center\">\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelectAll()\"\n [disabled]=\"disabled()\"\n (onChange)=\"changeSelectAll($event)\"\n />\n <input\n type=\"text\"\n pInputText\n class=\"w-full\"\n placeholder=\"Search...\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </div>\n <div class=\"p-select-list-container\" (scroll)=\"onScroll($event)\">\n <ul class=\"p-select-list\">\n @for (data of selectDataList(); track data.value) {\n <li\n class=\"p-select-option flex flex-row gap-2 items-center\"\n [class.p-select-option-selected]=\"isSelected(data)\"\n >\n <p-checkbox\n [binary]=\"true\"\n [ngModel]=\"isSelected(data)\"\n [disabled]=\"disabled()\"\n (onChange)=\"selectValue($event, data)\"\n />\n <span>{{ data.label }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n</ng-template>\n", styles: [".p-select-overlay{display:flex;flex-direction:column;max-height:250px;overflow:hidden}.p-select-header{padding:.75rem;border-bottom:1px solid var(--p-surface-border);background:var(--p-content-hover-background);flex-shrink:0;width:100%;box-sizing:border-box}.p-select-header input{background:var(--p-form-field-background);border-color:var(--p-form-field-border-color);color:var(--p-text-color)}.p-select-header input::placeholder{color:var(--p-text-muted-color)}.p-select-list-container{flex:1;overflow-y:auto;min-height:0;width:100%}.p-select-list{margin:0;padding:.25rem 0;list-style:none;background:var(--p-surface-overlay);color:var(--p-text-color);width:100%}.p-select-option{padding:.5rem .75rem;cursor:pointer;transition:background-color .2s ease;color:var(--p-text-color)}.p-select-option:hover{background:var(--p-content-hover-background)}.p-select-option.p-select-option-selected{background:var(--p-highlight-background);color:var(--p-highlight-color)}.p-select-option.p-select-option-selected:hover{background:var(--p-highlight-focus-background);color:var(--p-highlight-focus-color)}.p-select-clear-icon{display:flex;align-items:center;padding:0 .5rem;color:var(--p-text-muted-color);cursor:pointer;transition:color .2s ease}.p-select-clear-icon:hover{color:var(--p-text-color)}\n"] }]
|
|
1459
|
+
}], ctorParameters: () => [], propDecorators: { pSelectRef: [{ type: i0.ViewChild, args: ['pSelect', { isSignal: true }] }], overlayTemplate: [{ type: i0.ViewChild, args: ['overlayTpl', { isSignal: true }] }], placeHolder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeHolder", required: false }] }], isEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isEditMode", required: true }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: true }] }], total: [{ type: i0.Input, args: [{ isSignal: true, alias: "total", required: true }] }], pagination: [{ type: i0.Input, args: [{ isSignal: true, alias: "pagination", required: true }] }], selectDataList: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectDataList", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], onSearch: [{ type: i0.Output, args: ["onSearch"] }], onPagination: [{ type: i0.Output, args: ["onPagination"] }] } });
|
|
1554
1460
|
|
|
1555
1461
|
/**
|
|
1556
1462
|
* Lazy-loading single select component with search and pagination.
|
|
@@ -1564,6 +1470,7 @@ class LazySelectComponent extends BaseFormControl {
|
|
|
1564
1470
|
destroyRef = inject(DestroyRef);
|
|
1565
1471
|
onScrollBound = this.onScroll.bind(this);
|
|
1566
1472
|
scrollTargetEl = null;
|
|
1473
|
+
isDestroyed = false;
|
|
1567
1474
|
// View references
|
|
1568
1475
|
scrollContainer = viewChild.required('scrollContainer');
|
|
1569
1476
|
// Inputs
|
|
@@ -1609,6 +1516,7 @@ class LazySelectComponent extends BaseFormControl {
|
|
|
1609
1516
|
});
|
|
1610
1517
|
// Cleanup scroll listener on destroy
|
|
1611
1518
|
this.destroyRef.onDestroy(() => {
|
|
1519
|
+
this.isDestroyed = true;
|
|
1612
1520
|
if (this.scrollTargetEl) {
|
|
1613
1521
|
this.scrollTargetEl.removeEventListener('scroll', this.onScrollBound);
|
|
1614
1522
|
}
|
|
@@ -1631,6 +1539,8 @@ class LazySelectComponent extends BaseFormControl {
|
|
|
1631
1539
|
const isNowVisible = this.isPanelShow();
|
|
1632
1540
|
if (isNowVisible) {
|
|
1633
1541
|
afterNextRender(() => {
|
|
1542
|
+
if (this.isDestroyed)
|
|
1543
|
+
return;
|
|
1634
1544
|
const containerEl = this.scrollContainer().nativeElement;
|
|
1635
1545
|
const target = containerEl.querySelector('.p-select-list-container');
|
|
1636
1546
|
if (target) {
|
|
@@ -1647,10 +1557,10 @@ class LazySelectComponent extends BaseFormControl {
|
|
|
1647
1557
|
onBlur() {
|
|
1648
1558
|
this.markAsTouched();
|
|
1649
1559
|
}
|
|
1650
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1651
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.
|
|
1560
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LazySelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1561
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.5", type: LazySelectComponent, isStandalone: true, selector: "lib-lazy-select", inputs: { placeHolder: { classPropertyName: "placeHolder", publicName: "placeHolder", isSignal: true, isRequired: false, transformFunction: null }, optionLabel: { classPropertyName: "optionLabel", publicName: "optionLabel", isSignal: true, isRequired: true, transformFunction: null }, optionValue: { classPropertyName: "optionValue", publicName: "optionValue", isSignal: true, isRequired: true, transformFunction: null }, isEditMode: { classPropertyName: "isEditMode", publicName: "isEditMode", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: true, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: true, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: true, transformFunction: null }, selectDataList: { classPropertyName: "selectDataList", publicName: "selectDataList", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onSearch: "onSearch", onPagination: "onPagination" }, providers: [provideValueAccessor(LazySelectComponent)], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #scrollContainer class=\"lib-scroll-container\">\n <p-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"placeHolder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\n >\n <ng-template #filter let-filter>\n <input\n pInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n {{ item[optionLabel()] }}\n </ng-template>\n </p-select>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimeModule }, { kind: "directive", type: i2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i3.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: EditModeElementChangerDirective, selector: "[appEditModeElementChanger]", inputs: ["isEditMode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1652
1562
|
}
|
|
1653
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1563
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: LazySelectComponent, decorators: [{
|
|
1654
1564
|
type: Component,
|
|
1655
1565
|
args: [{ selector: 'lib-lazy-select', imports: [AngularModule, PrimeModule, EditModeElementChangerDirective], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideValueAccessor(LazySelectComponent)], template: "<div #scrollContainer class=\"lib-scroll-container\">\n <p-select\n class=\"w-full\"\n [options]=\"selectDataList()\"\n [optionLabel]=\"optionLabel()\"\n [optionValue]=\"optionValue()\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"placeHolder()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n appEditModeElementChanger\n [isEditMode]=\"isEditMode()\"\n (click)=\"showPanel()\"\n (onBlur)=\"onBlur()\"\n >\n <ng-template #filter let-filter>\n <input\n pInputText\n class=\"w-full\"\n [ngModel]=\"searchTerm()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"searchTerm.set($event)\"\n />\n </ng-template>\n <ng-template #selectedItem let-selectedOption>\n {{ selectedOption[optionLabel()] }}\n </ng-template>\n <ng-template #item let-item>\n {{ item[optionLabel()] }}\n </ng-template>\n </p-select>\n</div>\n" }]
|
|
1656
1566
|
}], ctorParameters: () => [], propDecorators: { scrollContainer: [{ type: i0.ViewChild, args: ['scrollContainer', { isSignal: true }] }], placeHolder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeHolder", required: false }] }], optionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionLabel", required: true }] }], optionValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionValue", required: true }] }], isEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isEditMode", required: true }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: true }] }], total: [{ type: i0.Input, args: [{ isSignal: true, alias: "total", required: true }] }], pagination: [{ type: i0.Input, args: [{ isSignal: true, alias: "pagination", required: true }] }], selectDataList: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectDataList", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], onSearch: [{ type: i0.Output, args: ["onSearch"] }], onPagination: [{ type: i0.Output, args: ["onPagination"] }] } });
|
|
@@ -1876,10 +1786,10 @@ class BaseUserSelectComponent {
|
|
|
1876
1786
|
})),
|
|
1877
1787
|
})));
|
|
1878
1788
|
}
|
|
1879
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1880
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.
|
|
1789
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseUserSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1790
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.5", type: BaseUserSelectComponent, isStandalone: true, inputs: { loadUsers: { classPropertyName: "loadUsers", publicName: "loadUsers", isSignal: true, isRequired: false, transformFunction: null }, placeHolder: { classPropertyName: "placeHolder", publicName: "placeHolder", isSignal: true, isRequired: false, transformFunction: null }, isEditMode: { classPropertyName: "isEditMode", publicName: "isEditMode", isSignal: true, isRequired: true, transformFunction: null }, filterActive: { classPropertyName: "filterActive", publicName: "filterActive", isSignal: true, isRequired: false, transformFunction: null }, additionalFilters: { classPropertyName: "additionalFilters", publicName: "additionalFilters", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onError: "onError" }, ngImport: i0 });
|
|
1881
1791
|
}
|
|
1882
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1792
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseUserSelectComponent, decorators: [{
|
|
1883
1793
|
type: Directive
|
|
1884
1794
|
}], ctorParameters: () => [], propDecorators: { loadUsers: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadUsers", required: false }] }], placeHolder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeHolder", required: false }] }], isEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isEditMode", required: true }] }], filterActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterActive", required: false }] }], additionalFilters: [{ type: i0.Input, args: [{ isSignal: true, alias: "additionalFilters", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], onError: [{ type: i0.Output, args: ["onError"] }] } });
|
|
1885
1795
|
|
|
@@ -1931,8 +1841,8 @@ class UserSelectComponent extends BaseUserSelectComponent {
|
|
|
1931
1841
|
});
|
|
1932
1842
|
});
|
|
1933
1843
|
}
|
|
1934
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
1935
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.
|
|
1844
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1845
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.5", type: UserSelectComponent, isStandalone: true, selector: "lib-user-select", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", userSelected: "userSelected" }, usesInheritance: true, ngImport: i0, template: `
|
|
1936
1846
|
<lib-lazy-select
|
|
1937
1847
|
[(value)]="value"
|
|
1938
1848
|
[placeHolder]="placeHolder()"
|
|
@@ -1948,7 +1858,7 @@ class UserSelectComponent extends BaseUserSelectComponent {
|
|
|
1948
1858
|
/>
|
|
1949
1859
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: LazySelectComponent, selector: "lib-lazy-select", inputs: ["placeHolder", "optionLabel", "optionValue", "isEditMode", "isLoading", "total", "pagination", "selectDataList", "value"], outputs: ["valueChange", "onSearch", "onPagination"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1950
1860
|
}
|
|
1951
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1861
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserSelectComponent, decorators: [{
|
|
1952
1862
|
type: Component,
|
|
1953
1863
|
args: [{
|
|
1954
1864
|
selector: 'lib-user-select',
|
|
@@ -2016,8 +1926,8 @@ class UserMultiSelectComponent extends BaseUserSelectComponent {
|
|
|
2016
1926
|
});
|
|
2017
1927
|
});
|
|
2018
1928
|
}
|
|
2019
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
2020
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.
|
|
1929
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserMultiSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1930
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.5", type: UserMultiSelectComponent, isStandalone: true, selector: "lib-user-multi-select", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", usersSelected: "usersSelected" }, usesInheritance: true, ngImport: i0, template: `
|
|
2021
1931
|
<lib-lazy-multi-select
|
|
2022
1932
|
[(value)]="value"
|
|
2023
1933
|
[placeHolder]="placeHolder()"
|
|
@@ -2031,7 +1941,7 @@ class UserMultiSelectComponent extends BaseUserSelectComponent {
|
|
|
2031
1941
|
/>
|
|
2032
1942
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: LazyMultiSelectComponent, selector: "lib-lazy-multi-select", inputs: ["placeHolder", "isEditMode", "isLoading", "total", "pagination", "selectDataList", "value"], outputs: ["valueChange", "onSearch", "onPagination"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2033
1943
|
}
|
|
2034
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
1944
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UserMultiSelectComponent, decorators: [{
|
|
2035
1945
|
type: Component,
|
|
2036
1946
|
args: [{
|
|
2037
1947
|
selector: 'lib-user-multi-select',
|
|
@@ -2221,8 +2131,8 @@ class FileUploaderComponent {
|
|
|
2221
2131
|
const mb = kb / 1024;
|
|
2222
2132
|
return `${mb.toFixed(1)} MB`;
|
|
2223
2133
|
}
|
|
2224
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
2225
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
2134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileUploaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2135
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: FileUploaderComponent, isStandalone: true, selector: "lib-file-uploader", inputs: { uploadFile: { classPropertyName: "uploadFile", publicName: "uploadFile", isSignal: true, isRequired: true, transformFunction: null }, acceptTypes: { classPropertyName: "acceptTypes", publicName: "acceptTypes", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, maxFiles: { classPropertyName: "maxFiles", publicName: "maxFiles", isSignal: true, isRequired: false, transformFunction: null }, maxSizeMb: { classPropertyName: "maxSizeMb", publicName: "maxSizeMb", isSignal: true, isRequired: false, transformFunction: null }, uploadOptions: { classPropertyName: "uploadOptions", publicName: "uploadOptions", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showPreview: { classPropertyName: "showPreview", publicName: "showPreview", isSignal: true, isRequired: false, transformFunction: null }, autoUpload: { classPropertyName: "autoUpload", publicName: "autoUpload", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileUploaded: "fileUploaded", filesUploaded: "filesUploaded", onError: "onError", fileSelected: "fileSelected" }, ngImport: i0, template: `
|
|
2226
2136
|
<div
|
|
2227
2137
|
class="w-full"
|
|
2228
2138
|
[class.opacity-60]="disabled()"
|
|
@@ -2300,7 +2210,7 @@ class FileUploaderComponent {
|
|
|
2300
2210
|
</div>
|
|
2301
2211
|
`, isInline: true, styles: [".upload-zone{border-color:var(--p-surface-300);background:var(--p-surface-50)}.upload-zone:hover:not(.cursor-not-allowed){border-color:var(--p-primary-color);background:var(--p-surface-100)}.upload-zone.drag-over{border-color:var(--p-primary-color);background:var(--p-primary-50)}:host-context(.p-dark) .upload-zone,.dark .upload-zone{border-color:var(--p-surface-600);background:var(--p-surface-800)}:host-context(.p-dark) .upload-zone:hover:not(.cursor-not-allowed),.dark .upload-zone:hover:not(.cursor-not-allowed){border-color:var(--p-primary-color);background:var(--p-surface-700)}:host-context(.p-dark) .upload-zone.drag-over,.dark .upload-zone.drag-over{border-color:var(--p-primary-color);background:var(--p-primary-900)}.file-preview-item{border:1px solid var(--p-surface-200);background:var(--p-surface-0)}:host-context(.p-dark) .file-preview-item,.dark .file-preview-item{border-color:var(--p-surface-600);background:var(--p-surface-800)}\n"], dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i2$1.ProgressBar, selector: "p-progressBar, p-progressbar, p-progress-bar", inputs: ["value", "showValue", "styleClass", "valueStyleClass", "unit", "mode", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2302
2212
|
}
|
|
2303
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
2213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileUploaderComponent, decorators: [{
|
|
2304
2214
|
type: Component,
|
|
2305
2215
|
args: [{ selector: 'lib-file-uploader', imports: [AngularModule, PrimeModule], template: `
|
|
2306
2216
|
<div
|
|
@@ -2602,8 +2512,8 @@ class FileSelectorDialogComponent {
|
|
|
2602
2512
|
this.isLoading.set(false);
|
|
2603
2513
|
}
|
|
2604
2514
|
}
|
|
2605
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
2606
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
2515
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2516
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: FileSelectorDialogComponent, isStandalone: true, selector: "lib-file-selector-dialog", inputs: { loadFiles: { classPropertyName: "loadFiles", publicName: "loadFiles", isSignal: true, isRequired: true, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, acceptTypes: { classPropertyName: "acceptTypes", publicName: "acceptTypes", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, maxSelection: { classPropertyName: "maxSelection", publicName: "maxSelection", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange", fileSelected: "fileSelected", filesSelected: "filesSelected", closed: "closed", onError: "onError" }, ngImport: i0, template: `
|
|
2607
2517
|
<p-dialog
|
|
2608
2518
|
[header]="header()"
|
|
2609
2519
|
[(visible)]="visible"
|
|
@@ -2712,7 +2622,7 @@ class FileSelectorDialogComponent {
|
|
|
2712
2622
|
</p-dialog>
|
|
2713
2623
|
`, isInline: true, styles: [".file-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;max-height:300px;overflow-y:auto;padding:.5rem}@media(min-width:480px){.file-grid{grid-template-columns:repeat(3,1fr);max-height:350px}}@media(min-width:640px){.file-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:1rem;max-height:400px}}.file-card{border:2px solid var(--p-surface-300);border-radius:var(--p-border-radius);cursor:pointer;transition:all .2s ease;overflow:hidden;background:var(--p-surface-0)}:host-context(.p-dark) .file-card,.dark .file-card{border-color:var(--p-surface-600);background:var(--p-surface-800)}.file-card:hover:not(.disabled){border-color:var(--p-primary-color);transform:translateY(-2px);box-shadow:var(--p-overlay-shadow)}.file-card.selected{border-color:var(--p-primary-color);background:var(--p-primary-50)}:host-context(.p-dark) .file-card.selected,.dark .file-card.selected{background:var(--p-primary-900)}.file-card.disabled{opacity:.5;cursor:not-allowed}.file-preview{position:relative;height:80px;display:flex;align-items:center;justify-content:center;background:var(--p-surface-100)}@media(min-width:640px){.file-preview{height:100px}}:host-context(.p-dark) .file-preview,.dark .file-preview{background:var(--p-surface-700)}.selected-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(var(--p-primary-500-rgb, 59, 130, 246),.3)}.selected-overlay i{color:var(--p-primary-color);background:var(--p-surface-0);border-radius:50%;padding:.5rem}:host-context(.p-dark) .selected-overlay i,.dark .selected-overlay i{background:var(--p-surface-900)}\n"], dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IsEmptyImageDirective, selector: "img", inputs: ["src"] }, { kind: "ngmodule", type: PrimeModule }, { kind: "directive", type: i1$2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: i4.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2714
2624
|
}
|
|
2715
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
2625
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileSelectorDialogComponent, decorators: [{
|
|
2716
2626
|
type: Component,
|
|
2717
2627
|
args: [{ selector: 'lib-file-selector-dialog', imports: [AngularModule, PrimeModule], template: `
|
|
2718
2628
|
<p-dialog
|
|
@@ -3075,10 +2985,10 @@ class BaseFormPage {
|
|
|
3075
2985
|
detail,
|
|
3076
2986
|
});
|
|
3077
2987
|
}
|
|
3078
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
3079
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.
|
|
2988
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseFormPage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2989
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: BaseFormPage, isStandalone: true, ngImport: i0 });
|
|
3080
2990
|
}
|
|
3081
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
2991
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseFormPage, decorators: [{
|
|
3082
2992
|
type: Directive
|
|
3083
2993
|
}], ctorParameters: () => [] });
|
|
3084
2994
|
|
|
@@ -3239,10 +3149,10 @@ class BaseListPage {
|
|
|
3239
3149
|
navigateTo(path) {
|
|
3240
3150
|
this.router.navigate(path);
|
|
3241
3151
|
}
|
|
3242
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
3243
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.
|
|
3152
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseListPage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3153
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: BaseListPage, isStandalone: true, ngImport: i0 });
|
|
3244
3154
|
}
|
|
3245
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
3155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseListPage, decorators: [{
|
|
3246
3156
|
type: Directive
|
|
3247
3157
|
}] });
|
|
3248
3158
|
|
|
@@ -3252,5 +3162,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
3252
3162
|
* Generated bundle index. Do not edit.
|
|
3253
3163
|
*/
|
|
3254
3164
|
|
|
3255
|
-
export { ACTION_PERMISSIONS, AUTH_STATE_PROVIDER, AngularModule, ApiResourceService, ApiResourceService as ApiService, BRANCH_PERMISSIONS, BaseFormControl, BaseFormPage, BaseListPage, BaseUserSelectComponent, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, COMPANY_PERMISSIONS, ContactTypeEnum, CookieService, EMAIL_CONFIG_PERMISSIONS, EMAIL_TEMPLATE_PERMISSIONS, EditModeElementChangerDirective, FILE_PERMISSIONS, FILE_TYPE_FILTERS, FOLDER_PERMISSIONS, FORM_PERMISSIONS, FileSelectorDialogComponent, FileUploaderComponent, FileUrlService, HasPermissionDirective, IconComponent, IconTypeEnum, IsEmptyImageDirective, LazyMultiSelectComponent, LazySelectComponent, PERMISSIONS, PROFILE_PERMISSION_PROVIDER, PROFILE_UPLOAD_PROVIDER, PermissionValidatorService, PlatformService, PreventDefaultDirective, PrimeModule, ROLE_ACTION_PERMISSIONS, ROLE_PERMISSIONS, STORAGE_CONFIG_PERMISSIONS, USER_ACTION_PERMISSIONS, USER_LIST_PROVIDER, USER_PERMISSIONS, USER_PERMISSION_PROVIDER, USER_PROVIDER, USER_ROLE_PERMISSIONS, UserMultiSelectComponent, UserSelectComponent, allPermissionsGuard, anyPermissionGuard, checkScrollPagination, evaluateLogicNode, evaluatePermission, formatFileSize, getAcceptString, getFileIconClass, hasAllPermissions, hasAnyPermission, hasPermission, isFileTypeAllowed, permissionGuard, provideValueAccessor };
|
|
3165
|
+
export { ACTION_PERMISSIONS, AUTH_STATE_PROVIDER, AngularModule, ApiResourceService, ApiResourceService as ApiService, BRANCH_PERMISSIONS, BaseFormControl, BaseFormPage, BaseListPage, BaseUserSelectComponent, COMPANY_ACTION_PERMISSIONS, COMPANY_API_PROVIDER, COMPANY_PERMISSIONS, ContactTypeEnum, CookieService, EMAIL_CONFIG_PERMISSIONS, EMAIL_TEMPLATE_PERMISSIONS, EVENT_PARTICIPANT_PERMISSIONS, EVENT_PERMISSIONS, EditModeElementChangerDirective, FILE_PERMISSIONS, FILE_TYPE_FILTERS, FOLDER_PERMISSIONS, FORM_PERMISSIONS, FileSelectorDialogComponent, FileUploaderComponent, FileUrlService, HasPermissionDirective, IconComponent, IconTypeEnum, IsEmptyImageDirective, LazyMultiSelectComponent, LazySelectComponent, NOTIFICATION_PERMISSIONS, PERMISSIONS, PROFILE_PERMISSION_PROVIDER, PROFILE_UPLOAD_PROVIDER, PermissionValidatorService, PlatformService, PreventDefaultDirective, PrimeModule, ROLE_ACTION_PERMISSIONS, ROLE_PERMISSIONS, STORAGE_CONFIG_PERMISSIONS, USER_ACTION_PERMISSIONS, USER_LIST_PROVIDER, USER_PERMISSIONS, USER_PERMISSION_PROVIDER, USER_PROVIDER, USER_ROLE_PERMISSIONS, UserMultiSelectComponent, UserSelectComponent, allPermissionsGuard, anyPermissionGuard, checkScrollPagination, evaluateLogicNode, evaluatePermission, formatFileSize, getAcceptString, getFileIconClass, hasAllPermissions, hasAnyPermission, hasPermission, isFileTypeAllowed, permissionGuard, provideValueAccessor };
|
|
3256
3166
|
//# sourceMappingURL=flusys-ng-shared.mjs.map
|