@unipin/angular-applet 18.6.13 → 18.6.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/approval/index.mjs +2 -1
- package/esm2022/lib/components/approval/list/approval-list.component.mjs +7 -6
- package/esm2022/lib/components/approval/list/provide-approval-entities.util.mjs +9 -0
- package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +4 -3
- package/esm2022/lib/components/containers/applet-container/provide-applet-config.util.mjs +9 -0
- package/esm2022/lib/components/containers/index.mjs +2 -1
- package/esm2022/lib/components/filter/filter.component.mjs +21 -4
- package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +5 -3
- package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +5 -3
- package/esm2022/lib/components/index.mjs +3 -3
- package/esm2022/lib/interceptors/header/header.interceptor.mjs +10 -19
- package/esm2022/lib/interceptors/index.mjs +3 -3
- package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +30 -41
- package/esm2022/lib/modules/index.mjs +2 -2
- package/esm2022/lib/modules/permission/index.mjs +2 -2
- package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +18 -10
- package/esm2022/lib/modules/permission/pages/loading/provide-loading-config.util.mjs +9 -0
- package/esm2022/lib/services/auth/auth.service.mjs +1 -1
- package/esm2022/public-api.mjs +5 -5
- package/fesm2022/unipin-angular-applet.mjs +112 -93
- package/fesm2022/unipin-angular-applet.mjs.map +1 -1
- package/lib/components/approval/index.d.ts +1 -0
- package/lib/components/approval/list/provide-approval-entities.util.d.ts +3 -0
- package/lib/components/containers/applet-container/applet-container.component.d.ts +3 -26
- package/lib/components/containers/applet-container/provide-applet-config.util.d.ts +15 -0
- package/lib/components/containers/index.d.ts +1 -0
- package/lib/components/index.d.ts +2 -2
- package/lib/interceptors/header/header.interceptor.d.ts +2 -8
- package/lib/interceptors/index.d.ts +2 -2
- package/lib/interceptors/refresh-token/refresh-token.interceptor.d.ts +2 -11
- package/lib/modules/index.d.ts +1 -1
- package/lib/modules/permission/index.d.ts +1 -1
- package/lib/modules/permission/pages/loading/loading.page.d.ts +3 -13
- package/lib/modules/permission/pages/loading/provide-loading-config.util.d.ts +10 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -4
- package/esm2022/lib/modules/permission/permission.module.mjs +0 -20
- package/lib/modules/permission/permission.module.d.ts +0 -7
package/esm2022/public-api.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { ButtonGroupComponent, ButtonLoadingComponent, FormDateComponent, FormInputComponent, FormNumberComponent, FormPasswordComponent, FormSearchableSelectComponent, FormSelectComponent, FormTextareaComponent, FormImagePickerComponent, FormCurrencyInputComponent, FormCountryInputComponent, FilterComponent, GridService, GridPaginationComponent, GridSnapshotComponent, AppletContainerComponent, ColumnContainerComponent, ColumnHeaderContainerComponent, ListPaginationContainerComponent, ListSnapshotContainerComponent, ModalContainerComponent, TabContentComponent, TabGroupComponent, AuditListComponent, AuditDetailComponent, ApprovalListComponent, ApprovalDetailComponent } from './lib/components';
|
|
1
|
+
export { ButtonGroupComponent, ButtonLoadingComponent, FormDateComponent, FormInputComponent, FormNumberComponent, FormPasswordComponent, FormSearchableSelectComponent, FormSelectComponent, FormTextareaComponent, FormImagePickerComponent, FormCurrencyInputComponent, FormCountryInputComponent, FilterComponent, GridService, GridPaginationComponent, GridSnapshotComponent, provideAppletConfig, AppletContainerComponent, ColumnContainerComponent, ColumnHeaderContainerComponent, ListPaginationContainerComponent, ListSnapshotContainerComponent, ModalContainerComponent, TabContentComponent, TabGroupComponent, AuditListComponent, AuditDetailComponent, APPROVAL_ENTITIES, provideApprovalEntities, ApprovalListComponent, ApprovalDetailComponent } from './lib/components';
|
|
2
2
|
export { InfiniteScrollDirective, InfiniteScrollComponent } from './lib/components/infinite-scroll';
|
|
3
3
|
export { AuthGuard } from './lib/guards';
|
|
4
|
-
export {
|
|
5
|
-
export { bootstrap, LoadingPage, UnauthorizedPage, PermissionDirective, PermissionGuard, PermissionService,
|
|
4
|
+
export { headerInterceptor, refreshTokenInterceptor } from './lib/interceptors';
|
|
5
|
+
export { bootstrap, provideLoadingConfig, LoadingPage, UnauthorizedPage, PermissionDirective, PermissionGuard, PermissionService, } from './lib/modules';
|
|
6
6
|
export { AuthResolver } from './lib/resolvers';
|
|
7
7
|
export { AuthService, CurrencyService, CountryService, ProfileService } from './lib/services';
|
|
8
|
-
export { formatCapitalize, generateContrastColor, getFormErrorMessage
|
|
8
|
+
export { formatCapitalize, generateContrastColor, getFormErrorMessage } from './lib/utils';
|
|
9
9
|
export { GridApi } from '@ag-grid-community/core';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBRXRCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUt6QixlQUFlLEVBR2YsV0FBVyxFQUNYLHVCQUF1QixFQUN2QixxQkFBcUIsRUFHckIsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUV4Qix3QkFBd0IsRUFDeEIsOEJBQThCLEVBRTlCLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIsdUJBQXVCLEVBRXZCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFHakIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUVwQixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUVyQix1QkFBdUIsRUFDeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN4QixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFDTCxTQUFTLEVBQ1YsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQU01QixPQUFPLEVBQ0wsU0FBUyxFQUdULG9CQUFvQixFQUNwQixXQUFXLEVBRVgsZ0JBQWdCLEVBRWhCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxZQUFZLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFDTCxPQUFPLEVBS1IsTUFBTSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdW5pcGluLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IHtcbiAgQnV0dG9uR3JvdXBDb25maWcsXG4gIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICBCdXR0b25Mb2FkaW5nQ29tcG9uZW50LFxuXG4gIEZvcm1EYXRlQ29tcG9uZW50LFxuICBGb3JtSW5wdXRDb21wb25lbnQsXG4gIEZvcm1OdW1iZXJDb21wb25lbnQsXG4gIEZvcm1QYXNzd29yZENvbXBvbmVudCxcbiAgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnQsXG4gIEZvcm1TZWxlY3RDb21wb25lbnQsXG4gIEZvcm1UZXh0YXJlYUNvbXBvbmVudCxcbiAgRm9ybUltYWdlUGlja2VyQ29tcG9uZW50LFxuICBGb3JtQ3VycmVuY3lJbnB1dENvbXBvbmVudCxcbiAgRm9ybUNvdW50cnlJbnB1dENvbXBvbmVudCxcbiAgXG4gIEZpbHRlckNvbmZpZyxcbiAgRmlsdGVyRmllbGQsXG4gIEZpbHRlclNlYXJjaEV2ZW50LFxuICBGaWx0ZXJDb21wb25lbnQsXG5cbiAgR3JpZENvbmZpZyxcbiAgR3JpZFNlcnZpY2UsXG4gIEdyaWRQYWdpbmF0aW9uQ29tcG9uZW50LFxuICBHcmlkU25hcHNob3RDb21wb25lbnQsXG5cbiAgQXBwbGV0Q29uZmlnLFxuICBwcm92aWRlQXBwbGV0Q29uZmlnLFxuICBBcHBsZXRDb250YWluZXJDb21wb25lbnQsXG5cbiAgQ29sdW1uQ29udGFpbmVyQ29tcG9uZW50LFxuICBDb2x1bW5IZWFkZXJDb250YWluZXJDb21wb25lbnQsXG4gIExpc3RDb250YWluZXJDb25maWcsIFxuICBMaXN0UGFnaW5hdGlvbkNvbnRhaW5lckNvbXBvbmVudCwgXG4gIExpc3RTbmFwc2hvdENvbnRhaW5lckNvbXBvbmVudCxcbiAgTW9kYWxDb250YWluZXJDb21wb25lbnQsXG5cbiAgVGFiQ29udGVudENvbXBvbmVudCxcbiAgVGFiR3JvdXBDb21wb25lbnQsXG4gIFRhYnNDaGFuZ2VkRXZlbnQsXG5cbiAgQXVkaXRMaXN0Q29tcG9uZW50LFxuICBBdWRpdERldGFpbENvbXBvbmVudCxcblxuICBBUFBST1ZBTF9FTlRJVElFUyxcbiAgcHJvdmlkZUFwcHJvdmFsRW50aXRpZXMsXG4gIEFwcHJvdmFsTGlzdENvbXBvbmVudCxcbiAgXG4gIEFwcHJvdmFsRGV0YWlsQ29tcG9uZW50XG59IGZyb20gJy4vbGliL2NvbXBvbmVudHMnO1xuXG5leHBvcnQge1xuICBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSxcbiAgSW5maW5pdGVTY3JvbGxDb21wb25lbnRcbn0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9pbmZpbml0ZS1zY3JvbGwnO1xuXG5leHBvcnQge1xuICBBdXRoR3VhcmRcbn0gZnJvbSAnLi9saWIvZ3VhcmRzJztcblxuZXhwb3J0IHtcbiAgaGVhZGVySW50ZXJjZXB0b3IsXG4gIHJlZnJlc2hUb2tlbkludGVyY2VwdG9yXG59IGZyb20gJy4vbGliL2ludGVyY2VwdG9ycyc7XG5cbmV4cG9ydCB7XG4gIFVzZXJcbn0gZnJvbSAnLi9saWIvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7IFxuICBib290c3RyYXAsXG5cbiAgTG9hZGluZ0NvbmZpZyxcbiAgcHJvdmlkZUxvYWRpbmdDb25maWcsXG4gIExvYWRpbmdQYWdlLFxuXG4gIFVuYXV0aG9yaXplZFBhZ2UsXG5cbiAgUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgUGVybWlzc2lvbkd1YXJkLFxuICBQZXJtaXNzaW9uU2VydmljZSwgIFxufSBmcm9tICcuL2xpYi9tb2R1bGVzJztcblxuZXhwb3J0IHtcbiAgQXV0aFJlc29sdmVyXG59IGZyb20gJy4vbGliL3Jlc29sdmVycyc7XG5cbmV4cG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBDdXJyZW5jeVNlcnZpY2UsXG4gIENvdW50cnlTZXJ2aWNlLFxuICBQcm9maWxlU2VydmljZVxufSBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5cbmV4cG9ydCB7XG4gIGZvcm1hdENhcGl0YWxpemUsXG4gIGdlbmVyYXRlQ29udHJhc3RDb2xvcixcbiAgZ2V0Rm9ybUVycm9yTWVzc2FnZVxufSBmcm9tICcuL2xpYi91dGlscyc7XG5cbmV4cG9ydCB7XG4gIEdyaWRBcGksXG4gIEdyaWRSZWFkeUV2ZW50LFxuICBJQ2VsbFJlbmRlcmVyUGFyYW1zLFxuICBWYWx1ZUZvcm1hdHRlclBhcmFtcyxcbiAgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50XG59IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcblxuZXhwb3J0IHtcbiAgSUNlbGxSZW5kZXJlckFuZ3VsYXJDb21wXG59IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9hbmd1bGFyJztcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, ViewChild, input, Attribute, HostBinding, enableProdMode, NgZone, Injectable, Inject, Directive, inject,
|
|
2
|
+
import { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, ViewChild, input, Attribute, HostBinding, InjectionToken, enableProdMode, NgZone, Injectable, Inject, Directive, inject, HostListener, Pipe, ContentChild, output, contentChildren } from '@angular/core';
|
|
3
3
|
import * as i1 from '@ionic/angular';
|
|
4
4
|
import { IonButton, IonicModule } from '@ionic/angular';
|
|
5
5
|
import * as i1$2 from '@angular/router';
|
|
@@ -105,6 +105,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
105
105
|
args: ['class.d-none']
|
|
106
106
|
}] } });
|
|
107
107
|
|
|
108
|
+
const APPLET_CONFIG = new InjectionToken('APPLET_CONFIG');
|
|
109
|
+
function provideAppletConfig(config) {
|
|
110
|
+
return {
|
|
111
|
+
provide: APPLET_CONFIG,
|
|
112
|
+
useValue: config
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
108
116
|
const packageNamespace = '@angular-architects/module-federation-tools';
|
|
109
117
|
function getGlobalState() {
|
|
110
118
|
const globalState = window;
|
|
@@ -168,6 +176,14 @@ function isLocalhost() {
|
|
|
168
176
|
return hostname === 'localhost' || hostname === '127.0.0.1';
|
|
169
177
|
}
|
|
170
178
|
|
|
179
|
+
const LOADING_CONFIG = new InjectionToken('LOADING_CONFIG');
|
|
180
|
+
function provideLoadingConfig(config) {
|
|
181
|
+
return {
|
|
182
|
+
provide: LOADING_CONFIG,
|
|
183
|
+
useValue: config
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
171
187
|
class PermissionService {
|
|
172
188
|
constructor(apollo) {
|
|
173
189
|
this.apollo = apollo;
|
|
@@ -224,7 +240,15 @@ class LoadingPage {
|
|
|
224
240
|
return;
|
|
225
241
|
}
|
|
226
242
|
const permCodeList = [];
|
|
227
|
-
this.sub = this.permissionService.getPermissions({
|
|
243
|
+
this.sub = this.permissionService.getPermissions({
|
|
244
|
+
subjectGuid,
|
|
245
|
+
pageSize: 1000,
|
|
246
|
+
permModule: this.config.permModules,
|
|
247
|
+
permType: this.config.permTypes
|
|
248
|
+
}, this.config.fetchPolicy).subscribe({
|
|
249
|
+
error: () => {
|
|
250
|
+
this.router.navigate(['401']);
|
|
251
|
+
},
|
|
228
252
|
next: ({ data: { authMsPermission: { data } } }) => {
|
|
229
253
|
data.forEach(({ permCode }) => {
|
|
230
254
|
if (!permCode)
|
|
@@ -232,28 +256,27 @@ class LoadingPage {
|
|
|
232
256
|
permCodeList.push(permCode);
|
|
233
257
|
});
|
|
234
258
|
this.permissionService.isInitiated = true;
|
|
235
|
-
this.permissionService.setPermission(permCodeList, this.config.
|
|
259
|
+
this.permissionService.setPermission(permCodeList, this.config.permModules);
|
|
236
260
|
this.router.navigateByUrl(this.route.snapshot.queryParamMap.get('url') ?? '');
|
|
237
|
-
}
|
|
238
|
-
error: () => this.router.navigate(['401'])
|
|
261
|
+
}
|
|
239
262
|
});
|
|
240
263
|
}
|
|
241
264
|
ngOnDestroy() {
|
|
242
265
|
this.sub?.unsubscribe();
|
|
243
266
|
}
|
|
244
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoadingPage, deps: [{ token:
|
|
245
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LoadingPage, isStandalone: true, selector: "up-loading", host: { classAttribute: "d-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto" }, ngImport: i0, template: "<ion-spinner class=\"mb-4\" />\n<h3 class=\"text-center\">Please wait, we're preparing the applet. Drink water or coffee while waiting.</h3>\n", styles: ["ion-spinner{height:50px;width:50px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] }); }
|
|
267
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoadingPage, deps: [{ token: LOADING_CONFIG }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
268
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LoadingPage, isStandalone: true, selector: "up-loading", host: { classAttribute: "d-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto" }, ngImport: i0, template: "<ion-spinner class=\"mb-4\" />\n<h3 class=\"text-center\">Please wait, we're preparing the applet. Drink water or coffee while waiting.</h3>\n", styles: ["ion-spinner{height:50px;width:50px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
246
269
|
}
|
|
247
270
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoadingPage, decorators: [{
|
|
248
271
|
type: Component,
|
|
249
|
-
args: [{ standalone: true, selector: 'up-loading', host: {
|
|
272
|
+
args: [{ standalone: true, selector: 'up-loading', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
250
273
|
class: 'd-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto'
|
|
251
274
|
}, imports: [
|
|
252
275
|
IonicModule
|
|
253
276
|
], template: "<ion-spinner class=\"mb-4\" />\n<h3 class=\"text-center\">Please wait, we're preparing the applet. Drink water or coffee while waiting.</h3>\n", styles: ["ion-spinner{height:50px;width:50px}\n"] }]
|
|
254
277
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
255
278
|
type: Inject,
|
|
256
|
-
args: [
|
|
279
|
+
args: [LOADING_CONFIG]
|
|
257
280
|
}] }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: PermissionService }] });
|
|
258
281
|
|
|
259
282
|
class PermissionDirective {
|
|
@@ -316,23 +339,6 @@ const PermissionGuard = (route) => {
|
|
|
316
339
|
return false;
|
|
317
340
|
};
|
|
318
341
|
|
|
319
|
-
class PermissionModule {
|
|
320
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
321
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule, imports: [PermissionDirective], exports: [PermissionDirective] }); }
|
|
322
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule }); }
|
|
323
|
-
}
|
|
324
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionModule, decorators: [{
|
|
325
|
-
type: NgModule,
|
|
326
|
-
args: [{
|
|
327
|
-
imports: [
|
|
328
|
-
PermissionDirective
|
|
329
|
-
],
|
|
330
|
-
exports: [
|
|
331
|
-
PermissionDirective
|
|
332
|
-
]
|
|
333
|
-
}]
|
|
334
|
-
}] });
|
|
335
|
-
|
|
336
342
|
class UnauthorizedPage {
|
|
337
343
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UnauthorizedPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
338
344
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UnauthorizedPage, isStandalone: true, selector: "up-unauthorized", host: { classAttribute: "d-flex flex-column align-items-center justify-content-center h-100 w-75 mx-auto" }, ngImport: i0, template: "<ion-icon name=\"lock-closed\" class=\"mb-4\" />\n<h3 class=\"text-center\">Oops! You're not authorized to access this page.</h3>\n<p class=\"text-center\">Please log in or re-check your permissions.</p>\n", styles: ["ion-icon{font-size:5rem}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
@@ -374,7 +380,7 @@ class AppletContainerComponent {
|
|
|
374
380
|
selectMenu() {
|
|
375
381
|
dispatchEvent(new CustomEvent('menuEvent', { detail: { isActive: false } }));
|
|
376
382
|
}
|
|
377
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppletContainerComponent, deps: [{ token:
|
|
383
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppletContainerComponent, deps: [{ token: APPLET_CONFIG }, { token: i0.ChangeDetectorRef }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
378
384
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppletContainerComponent, isStandalone: true, selector: "up-applet-container", host: { classAttribute: "d-flex h-100 w-100" }, ngImport: i0, template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n \n <div class=\"tenant pt-1 fw-medium\">\n v{{ config.version }}\n </div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n @for (c of config.containers; track $index) {\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[$index]? 'd-none' : 'd-flex' }}\" routerLinkActive=\"fw-medium\" title=\"{{ c.label }}\" [routerLink]=\"c.path\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n }\n </div>\n\n @if (config.enabledSetting) {\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n }\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.overflow-y-auto{overflow-y:auto;overflow-x:hidden}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i1.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
379
385
|
}
|
|
380
386
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppletContainerComponent, decorators: [{
|
|
@@ -388,7 +394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
388
394
|
], template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n \n <div class=\"tenant pt-1 fw-medium\">\n v{{ config.version }}\n </div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n @for (c of config.containers; track $index) {\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[$index]? 'd-none' : 'd-flex' }}\" routerLinkActive=\"fw-medium\" title=\"{{ c.label }}\" [routerLink]=\"c.path\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n }\n </div>\n\n @if (config.enabledSetting) {\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n }\n</div>\n\n<div class=\"flex-grow-1 w-100 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.overflow-y-auto{overflow-y:auto;overflow-x:hidden}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"] }]
|
|
389
395
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
390
396
|
type: Inject,
|
|
391
|
-
args: [
|
|
397
|
+
args: [APPLET_CONFIG]
|
|
392
398
|
}] }, { type: i0.ChangeDetectorRef }, { type: PermissionService }] });
|
|
393
399
|
|
|
394
400
|
class LazyRouteDirective {
|
|
@@ -2563,11 +2569,21 @@ class FilterComponent {
|
|
|
2563
2569
|
key.forEach((k, i) => this.createFormControl(k, initialValue?.at(i)));
|
|
2564
2570
|
}
|
|
2565
2571
|
});
|
|
2572
|
+
const savedState = localStorage.getItem(`${this.id}`);
|
|
2573
|
+
if (savedState) {
|
|
2574
|
+
const state = JSON.parse(savedState);
|
|
2575
|
+
this.activeFilter = state.activeFilter;
|
|
2576
|
+
this.form.patchValue(state.formValues);
|
|
2577
|
+
this.emitValue();
|
|
2578
|
+
}
|
|
2579
|
+
}
|
|
2580
|
+
close() {
|
|
2581
|
+
this.popoverCtrl.dismiss();
|
|
2566
2582
|
}
|
|
2567
|
-
close() { this.popoverCtrl.dismiss(); }
|
|
2568
2583
|
clear() {
|
|
2569
2584
|
this.resetValue();
|
|
2570
2585
|
this.form.reset();
|
|
2586
|
+
localStorage.removeItem(`${this.id}`);
|
|
2571
2587
|
this.onSearch.emit({ mode: this.config.mode, data: null });
|
|
2572
2588
|
}
|
|
2573
2589
|
removeFilter(i) {
|
|
@@ -2578,6 +2594,9 @@ class FilterComponent {
|
|
|
2578
2594
|
search() {
|
|
2579
2595
|
this.resetValue();
|
|
2580
2596
|
this.emitValue((k, v) => this.activeFilter.push({ key: k, value: v, label: `${k}:${k.includes('date') ? formatDate(v, 'dd MMM yyyy', 'en-US') : v}` }));
|
|
2597
|
+
if (this.activeFilter.length === 0) {
|
|
2598
|
+
localStorage.removeItem(`${this.id}`);
|
|
2599
|
+
}
|
|
2581
2600
|
this.close();
|
|
2582
2601
|
}
|
|
2583
2602
|
add() {
|
|
@@ -2620,6 +2639,10 @@ class FilterComponent {
|
|
|
2620
2639
|
extraAction?.(k, f[k]);
|
|
2621
2640
|
});
|
|
2622
2641
|
this.onSearch.emit({ mode: this.config.mode, data: flag ? data : null });
|
|
2642
|
+
localStorage.setItem(`${this.id}`, JSON.stringify({
|
|
2643
|
+
activeFilter: this.activeFilter,
|
|
2644
|
+
formValues: this.form.getRawValue()
|
|
2645
|
+
}));
|
|
2623
2646
|
}
|
|
2624
2647
|
createFormControl(key, val) {
|
|
2625
2648
|
this.form.addControl(key, new FormControl(''));
|
|
@@ -2629,7 +2652,7 @@ class FilterComponent {
|
|
|
2629
2652
|
}
|
|
2630
2653
|
}
|
|
2631
2654
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2632
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation", "minDate", "maxDate"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2655
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation", "minDate", "maxDate"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2633
2656
|
}
|
|
2634
2657
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, decorators: [{
|
|
2635
2658
|
type: Component,
|
|
@@ -2642,7 +2665,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2642
2665
|
ReactiveFormsModule,
|
|
2643
2666
|
FormSelectComponent,
|
|
2644
2667
|
FormSearchableSelectComponent
|
|
2645
|
-
], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
|
|
2668
|
+
], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter overflow-auto\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select \n class=\"my-4\"\n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [items]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select \n class=\"my-4\" \n appendTo=\"body\" \n label=\"{{ c.label }}\" \n formControlName=\"{{ c.key }}\" \n [queryFunc]=\"c.getOptions!\" \n [initialItems]=\"c.options!\" \n [multiple]=\"c.multiple || false\"\n /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
|
|
2646
2669
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
2647
2670
|
type: Attribute,
|
|
2648
2671
|
args: ['placeholder']
|
|
@@ -2712,8 +2735,10 @@ class GridSnapshotComponent {
|
|
|
2712
2735
|
this.onGridReady.emit(ev);
|
|
2713
2736
|
this.service.setApi(this.id, this.gridApi);
|
|
2714
2737
|
const state = JSON.parse(localStorage.getItem(this.id));
|
|
2715
|
-
if (state)
|
|
2716
|
-
|
|
2738
|
+
if (state) {
|
|
2739
|
+
this.gridApi.applyColumnState({ state, applyOrder: true });
|
|
2740
|
+
this.gridApi.setColumnsVisible(this.gridApi.getAllGridColumns(), true);
|
|
2741
|
+
}
|
|
2717
2742
|
this.reset();
|
|
2718
2743
|
}
|
|
2719
2744
|
reset() {
|
|
@@ -2813,8 +2838,10 @@ class GridPaginationComponent {
|
|
|
2813
2838
|
this.onGridReady.emit(ev);
|
|
2814
2839
|
this.service.setApi(this.id, this.gridApi);
|
|
2815
2840
|
const state = JSON.parse(localStorage.getItem(this.id));
|
|
2816
|
-
if (state)
|
|
2817
|
-
|
|
2841
|
+
if (state) {
|
|
2842
|
+
this.gridApi.applyColumnState({ state, applyOrder: true });
|
|
2843
|
+
this.gridApi.setColumnsVisible(this.gridApi.getAllGridColumns(), true);
|
|
2844
|
+
}
|
|
2818
2845
|
if (this.rowModelType === 'clientSide')
|
|
2819
2846
|
this.gridApi.setGridOption('rowData', this.rowData);
|
|
2820
2847
|
if (this.rowModelType !== 'infinite')
|
|
@@ -3290,6 +3317,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3290
3317
|
], template: "<up-tab-group class=\"h-100\">\n <up-tab-content header=\"Detail\" fragment=\"detail\">\n @if (isLoading) {\n @for(i of [0,1,2,3,4,5,6]; track $index) {\n <ion-skeleton-text class=\"sk-input mx-4 mb-4\" />\n }\n } @else {\n <form [formGroup]=\"form\" class=\"px-4 pb-4\">\n <div class=\"d-flex align-items-center gap-2 pb-3\">\n <ion-icon name=\"information-circle\" />\n <h5 class=\"m-0\">Information</h5>\n </div>\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-lg-4\" label=\"Action\" formControlName=\"action\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Source IP\" formControlName=\"sourceIp\" />\n </div>\n </div>\n \n <up-input class=\"mb-4\" label=\"User Name\" formControlName=\"userName\" />\n <up-textarea class=\"mb-4\" label=\"Description\" formControlName=\"description\" />\n \n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\">\n <ion-icon name=\"laptop\" />\n <h5 class=\"m-0\">System Information</h5>\n </div>\n \n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Action Date\" formControlName=\"createdAt\" />\n <up-input class=\"mb-lg-4\" label=\"Source Platform\" formControlName=\"sourcePlatform\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"MS Source\" formControlName=\"msSource\" />\n <up-input class=\"mb-4\" label=\"Function\" formControlName=\"function\" />\n </div>\n </div>\n </form>\n } \n </up-tab-content>\n\n <up-tab-content header=\"Attributes\" fragment=\"attributes\">\n <up-pagination-grid id=\"grid-audit-detail\" rowModelType=\"clientSide\" [config]=\"gridConfig\" (onGridReady)=\"setGridApi($event)\" />\n </up-tab-content>\n</up-tab-group>\n", styles: ["ion-icon{font-size:24px;margin-right:5px}\n"] }]
|
|
3291
3318
|
}], ctorParameters: () => [{ type: i1$3.FormBuilder }, { type: AuditService }, { type: i1$2.ActivatedRoute }, { type: i1.NavController }] });
|
|
3292
3319
|
|
|
3320
|
+
const APPROVAL_ENTITIES = new InjectionToken('APPROVAL_ENTITIES');
|
|
3321
|
+
function provideApprovalEntities(entities) {
|
|
3322
|
+
return {
|
|
3323
|
+
provide: APPROVAL_ENTITIES,
|
|
3324
|
+
useValue: entities
|
|
3325
|
+
};
|
|
3326
|
+
}
|
|
3327
|
+
|
|
3293
3328
|
class ApprovalService {
|
|
3294
3329
|
constructor(apollo) {
|
|
3295
3330
|
this.apollo = apollo;
|
|
@@ -3417,12 +3452,12 @@ class ApprovalListComponent {
|
|
|
3417
3452
|
}
|
|
3418
3453
|
});
|
|
3419
3454
|
}
|
|
3420
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApprovalListComponent, deps: [{ token:
|
|
3421
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ApprovalListComponent, isStandalone: true, selector: "up-approval-list", host: { classAttribute: "d-flex flex-column h-100 w-100" }, ngImport: i0, template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">Approval</h3>\n\n <up-btn-group id=\"approval-list\" [config]=\"btnConfig\" />\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\">\n <up-filter placeholder=\"Type to search\" id=\"filter-approval-list\" [config]=\"filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-pagination-grid [config]=\"gridConfig\" id=\"grid-approval-list\" rowSelection=\"multiple\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" (onSelectionChanged)=\"selectApprovals()\" />\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: ButtonGroupComponent, selector: "up-btn-group", inputs: ["config"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection", "getRowClass"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }] }); }
|
|
3455
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApprovalListComponent, deps: [{ token: APPROVAL_ENTITIES }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: ApprovalService }, { token: i1.AlertController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3456
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ApprovalListComponent, isStandalone: true, selector: "up-approval-list", host: { classAttribute: "d-flex flex-column h-100 w-100" }, ngImport: i0, template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">Approval</h3>\n\n <up-btn-group id=\"approval-list\" [config]=\"btnConfig\" />\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\">\n <up-filter placeholder=\"Type to search\" id=\"filter-approval-list\" [config]=\"filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-pagination-grid [config]=\"gridConfig\" id=\"grid-approval-list\" rowSelection=\"multiple\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" (onSelectionChanged)=\"selectApprovals()\" />\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: ButtonGroupComponent, selector: "up-btn-group", inputs: ["config"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection", "getRowClass"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3422
3457
|
}
|
|
3423
3458
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApprovalListComponent, decorators: [{
|
|
3424
3459
|
type: Component,
|
|
3425
|
-
args: [{ standalone: true, selector: 'up-approval-list', host: {
|
|
3460
|
+
args: [{ standalone: true, selector: 'up-approval-list', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
3426
3461
|
class: 'd-flex flex-column h-100 w-100'
|
|
3427
3462
|
}, imports: [
|
|
3428
3463
|
FilterComponent,
|
|
@@ -3431,7 +3466,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3431
3466
|
], template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">Approval</h3>\n\n <up-btn-group id=\"approval-list\" [config]=\"btnConfig\" />\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\">\n <up-filter placeholder=\"Type to search\" id=\"filter-approval-list\" [config]=\"filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-pagination-grid [config]=\"gridConfig\" id=\"grid-approval-list\" rowSelection=\"multiple\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" (onSelectionChanged)=\"selectApprovals()\" />\n</div>\n" }]
|
|
3432
3467
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
3433
3468
|
type: Inject,
|
|
3434
|
-
args: [
|
|
3469
|
+
args: [APPROVAL_ENTITIES]
|
|
3435
3470
|
}] }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: ApprovalService }, { type: i1.AlertController }] });
|
|
3436
3471
|
|
|
3437
3472
|
class ApprovalFormComponent {
|
|
@@ -3781,62 +3816,46 @@ const AuthGuard = () => {
|
|
|
3781
3816
|
return true;
|
|
3782
3817
|
};
|
|
3783
3818
|
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
}
|
|
3794
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3795
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderInterceptor }); }
|
|
3796
|
-
}
|
|
3797
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderInterceptor, decorators: [{
|
|
3798
|
-
type: Injectable
|
|
3799
|
-
}] });
|
|
3819
|
+
const headerInterceptor = (request, next) => {
|
|
3820
|
+
return next(request.clone({
|
|
3821
|
+
headers: request.headers,
|
|
3822
|
+
setHeaders: {
|
|
3823
|
+
project: 'unipin',
|
|
3824
|
+
authorization: AuthService.authToken,
|
|
3825
|
+
},
|
|
3826
|
+
}));
|
|
3827
|
+
};
|
|
3800
3828
|
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
location.href = '/auth/login';
|
|
3828
|
-
return throwError(() => errors[0]);
|
|
3829
|
-
}));
|
|
3830
|
-
}
|
|
3829
|
+
const refreshTokenInterceptor = (request, next) => {
|
|
3830
|
+
const authService = inject(AuthService);
|
|
3831
|
+
return next(request).pipe(catchError(({ error: { errors } }) => {
|
|
3832
|
+
if (errors[0].extensions.code !== 'USER_INVALID_TOKEN') {
|
|
3833
|
+
return throwError(() => errors[0]);
|
|
3834
|
+
}
|
|
3835
|
+
return authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(switchMap(({ data }) => {
|
|
3836
|
+
const { accessToken, refreshToken } = data.authMsRefreshAccessToken;
|
|
3837
|
+
AuthService.authToken = accessToken;
|
|
3838
|
+
AuthService.refreshToken = refreshToken;
|
|
3839
|
+
localStorage.setItem('authToken', accessToken);
|
|
3840
|
+
localStorage.setItem('refreshToken', refreshToken);
|
|
3841
|
+
return next(request.clone({
|
|
3842
|
+
setHeaders: {
|
|
3843
|
+
authorization: accessToken,
|
|
3844
|
+
},
|
|
3845
|
+
}));
|
|
3846
|
+
}), catchError(() => {
|
|
3847
|
+
localStorage.removeItem('roles');
|
|
3848
|
+
localStorage.removeItem('userGuid');
|
|
3849
|
+
localStorage.removeItem('authToken');
|
|
3850
|
+
localStorage.removeItem('refreshToken');
|
|
3851
|
+
AuthService.authToken = '';
|
|
3852
|
+
AuthService.refreshToken = '';
|
|
3853
|
+
authService.user = undefined;
|
|
3854
|
+
location.href = '/auth/login';
|
|
3831
3855
|
return throwError(() => errors[0]);
|
|
3832
3856
|
}));
|
|
3833
|
-
}
|
|
3834
|
-
|
|
3835
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor }); }
|
|
3836
|
-
}
|
|
3837
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, decorators: [{
|
|
3838
|
-
type: Injectable
|
|
3839
|
-
}], ctorParameters: () => [{ type: AuthService }] });
|
|
3857
|
+
}));
|
|
3858
|
+
};
|
|
3840
3859
|
|
|
3841
|
-
export { AppletContainerComponent, ApprovalDetailComponent, ApprovalListComponent, AuditDetailComponent, AuditListComponent, AuthGuard, AuthResolver, AuthService, ButtonGroupComponent, ButtonLoadingComponent, ColumnContainerComponent, ColumnHeaderContainerComponent, CountryService, CurrencyService, FilterComponent, FormCountryInputComponent, FormCurrencyInputComponent, FormDateComponent, FormImagePickerComponent, FormInputComponent, FormNumberComponent, FormPasswordComponent, FormSearchableSelectComponent, FormSelectComponent, FormTextareaComponent, GridPaginationComponent, GridService, GridSnapshotComponent,
|
|
3860
|
+
export { APPROVAL_ENTITIES, AppletContainerComponent, ApprovalDetailComponent, ApprovalListComponent, AuditDetailComponent, AuditListComponent, AuthGuard, AuthResolver, AuthService, ButtonGroupComponent, ButtonLoadingComponent, ColumnContainerComponent, ColumnHeaderContainerComponent, CountryService, CurrencyService, FilterComponent, FormCountryInputComponent, FormCurrencyInputComponent, FormDateComponent, FormImagePickerComponent, FormInputComponent, FormNumberComponent, FormPasswordComponent, FormSearchableSelectComponent, FormSelectComponent, FormTextareaComponent, GridPaginationComponent, GridService, GridSnapshotComponent, InfiniteScrollComponent, InfiniteScrollDirective, ListPaginationContainerComponent, ListSnapshotContainerComponent, LoadingPage, ModalContainerComponent, PermissionDirective, PermissionGuard, PermissionService, ProfileService, TabContentComponent, TabGroupComponent, UnauthorizedPage, bootstrap, formatCapitalize, generateContrastColor, getFormErrorMessage, headerInterceptor, provideAppletConfig, provideApprovalEntities, provideLoadingConfig, refreshTokenInterceptor };
|
|
3842
3861
|
//# sourceMappingURL=unipin-angular-applet.mjs.map
|