@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.
Files changed (38) hide show
  1. package/esm2022/lib/components/approval/index.mjs +2 -1
  2. package/esm2022/lib/components/approval/list/approval-list.component.mjs +7 -6
  3. package/esm2022/lib/components/approval/list/provide-approval-entities.util.mjs +9 -0
  4. package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +4 -3
  5. package/esm2022/lib/components/containers/applet-container/provide-applet-config.util.mjs +9 -0
  6. package/esm2022/lib/components/containers/index.mjs +2 -1
  7. package/esm2022/lib/components/filter/filter.component.mjs +21 -4
  8. package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +5 -3
  9. package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +5 -3
  10. package/esm2022/lib/components/index.mjs +3 -3
  11. package/esm2022/lib/interceptors/header/header.interceptor.mjs +10 -19
  12. package/esm2022/lib/interceptors/index.mjs +3 -3
  13. package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +30 -41
  14. package/esm2022/lib/modules/index.mjs +2 -2
  15. package/esm2022/lib/modules/permission/index.mjs +2 -2
  16. package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +18 -10
  17. package/esm2022/lib/modules/permission/pages/loading/provide-loading-config.util.mjs +9 -0
  18. package/esm2022/lib/services/auth/auth.service.mjs +1 -1
  19. package/esm2022/public-api.mjs +5 -5
  20. package/fesm2022/unipin-angular-applet.mjs +112 -93
  21. package/fesm2022/unipin-angular-applet.mjs.map +1 -1
  22. package/lib/components/approval/index.d.ts +1 -0
  23. package/lib/components/approval/list/provide-approval-entities.util.d.ts +3 -0
  24. package/lib/components/containers/applet-container/applet-container.component.d.ts +3 -26
  25. package/lib/components/containers/applet-container/provide-applet-config.util.d.ts +15 -0
  26. package/lib/components/containers/index.d.ts +1 -0
  27. package/lib/components/index.d.ts +2 -2
  28. package/lib/interceptors/header/header.interceptor.d.ts +2 -8
  29. package/lib/interceptors/index.d.ts +2 -2
  30. package/lib/interceptors/refresh-token/refresh-token.interceptor.d.ts +2 -11
  31. package/lib/modules/index.d.ts +1 -1
  32. package/lib/modules/permission/index.d.ts +1 -1
  33. package/lib/modules/permission/pages/loading/loading.page.d.ts +3 -13
  34. package/lib/modules/permission/pages/loading/provide-loading-config.util.d.ts +10 -0
  35. package/package.json +1 -1
  36. package/public-api.d.ts +4 -4
  37. package/esm2022/lib/modules/permission/permission.module.mjs +0 -20
  38. package/lib/modules/permission/permission.module.d.ts +0 -7
@@ -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 { HeaderInterceptor, RefreshTokenInterceptor } from './lib/interceptors';
5
- export { bootstrap, LoadingPage, UnauthorizedPage, PermissionDirective, PermissionGuard, PermissionService, PermissionModule } from './lib/modules';
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, } from './lib/utils';
8
+ export { formatCapitalize, generateContrastColor, getFormErrorMessage } from './lib/utils';
9
9
  export { GridApi } from '@ag-grid-community/core';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBRXRCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUt6QixlQUFlLEVBR2YsV0FBVyxFQUNYLHVCQUF1QixFQUN2QixxQkFBcUIsRUFFckIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFFOUIsZ0NBQWdDLEVBQ2hDLDhCQUE4QixFQUM5Qix1QkFBdUIsRUFFdkIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUdqQixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBRXBCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN4QixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFDTCxTQUFTLEVBQ1YsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQU01QixPQUFPLEVBQ0wsU0FBUyxFQUVULFdBQVcsRUFDWCxnQkFBZ0IsRUFFaEIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixpQkFBaUIsRUFJakIsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxZQUFZLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsbUJBQW1CLEdBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFDTCxPQUFPLEVBS1IsTUFBTSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdW5pcGluLWFuZ3VsYXJcbiAqL1xuZXhwb3J0IHtcbiAgQnV0dG9uR3JvdXBDb25maWcsXG4gIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICBCdXR0b25Mb2FkaW5nQ29tcG9uZW50LFxuXG4gIEZvcm1EYXRlQ29tcG9uZW50LFxuICBGb3JtSW5wdXRDb21wb25lbnQsXG4gIEZvcm1OdW1iZXJDb21wb25lbnQsXG4gIEZvcm1QYXNzd29yZENvbXBvbmVudCxcbiAgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnQsXG4gIEZvcm1TZWxlY3RDb21wb25lbnQsXG4gIEZvcm1UZXh0YXJlYUNvbXBvbmVudCxcbiAgRm9ybUltYWdlUGlja2VyQ29tcG9uZW50LFxuICBGb3JtQ3VycmVuY3lJbnB1dENvbXBvbmVudCxcbiAgRm9ybUNvdW50cnlJbnB1dENvbXBvbmVudCxcbiAgXG4gIEZpbHRlckNvbmZpZyxcbiAgRmlsdGVyRmllbGQsXG4gIEZpbHRlclNlYXJjaEV2ZW50LFxuICBGaWx0ZXJDb21wb25lbnQsXG5cbiAgR3JpZENvbmZpZyxcbiAgR3JpZFNlcnZpY2UsXG4gIEdyaWRQYWdpbmF0aW9uQ29tcG9uZW50LFxuICBHcmlkU25hcHNob3RDb21wb25lbnQsXG5cbiAgQXBwbGV0Q29udGFpbmVyQ29tcG9uZW50LFxuICBDb2x1bW5Db250YWluZXJDb21wb25lbnQsXG4gIENvbHVtbkhlYWRlckNvbnRhaW5lckNvbXBvbmVudCxcbiAgTGlzdENvbnRhaW5lckNvbmZpZywgXG4gIExpc3RQYWdpbmF0aW9uQ29udGFpbmVyQ29tcG9uZW50LCBcbiAgTGlzdFNuYXBzaG90Q29udGFpbmVyQ29tcG9uZW50LFxuICBNb2RhbENvbnRhaW5lckNvbXBvbmVudCxcblxuICBUYWJDb250ZW50Q29tcG9uZW50LFxuICBUYWJHcm91cENvbXBvbmVudCxcbiAgVGFic0NoYW5nZWRFdmVudCxcblxuICBBdWRpdExpc3RDb21wb25lbnQsXG4gIEF1ZGl0RGV0YWlsQ29tcG9uZW50LFxuXG4gIEFwcHJvdmFsTGlzdENvbXBvbmVudCxcbiAgQXBwcm92YWxEZXRhaWxDb21wb25lbnRcbn0gZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5cbmV4cG9ydCB7XG4gIEluZmluaXRlU2Nyb2xsRGlyZWN0aXZlLFxuICBJbmZpbml0ZVNjcm9sbENvbXBvbmVudFxufSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2luZmluaXRlLXNjcm9sbCc7XG5cbmV4cG9ydCB7XG4gIEF1dGhHdWFyZFxufSBmcm9tICcuL2xpYi9ndWFyZHMnO1xuXG5leHBvcnQge1xuICBIZWFkZXJJbnRlcmNlcHRvcixcbiAgUmVmcmVzaFRva2VuSW50ZXJjZXB0b3Jcbn0gZnJvbSAnLi9saWIvaW50ZXJjZXB0b3JzJztcblxuZXhwb3J0IHtcbiAgVXNlclxufSBmcm9tICcuL2xpYi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgXG4gIGJvb3RzdHJhcCxcblxuICBMb2FkaW5nUGFnZSxcbiAgVW5hdXRob3JpemVkUGFnZSxcblxuICBQZXJtaXNzaW9uRGlyZWN0aXZlLFxuICBQZXJtaXNzaW9uR3VhcmQsXG4gIFBlcm1pc3Npb25TZXJ2aWNlLFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgV2lsbCBiZSByZW1vdmVkIGF0IDE4LjcuMFxuICAgKi9cbiAgUGVybWlzc2lvbk1vZHVsZVxufSBmcm9tICcuL2xpYi9tb2R1bGVzJztcblxuZXhwb3J0IHtcbiAgQXV0aFJlc29sdmVyXG59IGZyb20gJy4vbGliL3Jlc29sdmVycyc7XG5cbmV4cG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBDdXJyZW5jeVNlcnZpY2UsXG4gIENvdW50cnlTZXJ2aWNlLFxuICBQcm9maWxlU2VydmljZVxufSBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5cbmV4cG9ydCB7XG4gIGZvcm1hdENhcGl0YWxpemUsXG4gIGdlbmVyYXRlQ29udHJhc3RDb2xvcixcbiAgZ2V0Rm9ybUVycm9yTWVzc2FnZSxcbn0gZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5leHBvcnQge1xuICBHcmlkQXBpLFxuICBHcmlkUmVhZHlFdmVudCxcbiAgSUNlbGxSZW5kZXJlclBhcmFtcyxcbiAgVmFsdWVGb3JtYXR0ZXJQYXJhbXMsXG4gIFNlbGVjdGlvbkNoYW5nZWRFdmVudFxufSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY29yZSc7XG5cbmV4cG9ydCB7XG4gIElDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcFxufSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvYW5ndWxhcic7XG4iXX0=
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, NgModule, HostListener, Pipe, ContentChild, output, contentChildren } from '@angular/core';
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({ pageSize: 1000, subjectGuid, permModule: this.config.permModule, permType: this.config.permType }, this.config.fetchPolicy).subscribe({
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.permModule);
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: 'LOADING_CONFIG' }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
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: ['LOADING_CONFIG']
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: 'APPLET_CONFIG' }, { token: i0.ChangeDetectorRef }, { token: PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
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: ['APPLET_CONFIG']
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
- ev.api.applyColumnState({ state, applyOrder: true });
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
- ev.api.applyColumnState({ state, applyOrder: true });
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: 'ENTITIES' }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: ApprovalService }, { token: i1.AlertController }], target: i0.ɵɵFactoryTarget.Component }); }
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: ['ENTITIES']
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
- class HeaderInterceptor {
3785
- intercept(request, next) {
3786
- return next.handle(request.clone({
3787
- headers: request.headers,
3788
- setHeaders: {
3789
- authorization: AuthService.authToken,
3790
- project: 'unipin'
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
- class RefreshTokenInterceptor {
3802
- constructor(authService) {
3803
- this.authService = authService;
3804
- }
3805
- intercept(request, next) {
3806
- return next.handle(request).pipe(catchError(({ error: { errors } }) => {
3807
- if (errors[0].extensions.code === 'USER_INVALID_TOKEN') {
3808
- return this.authService.refreshToken({ refreshToken: AuthService.refreshToken }).pipe(switchMap(({ data }) => {
3809
- const { accessToken, refreshToken } = data.authMsRefreshAccessToken;
3810
- AuthService.authToken = accessToken;
3811
- AuthService.refreshToken = refreshToken;
3812
- localStorage.setItem('authToken', accessToken);
3813
- localStorage.setItem('refreshToken', refreshToken);
3814
- return next.handle(request.clone({
3815
- setHeaders: {
3816
- authorization: accessToken
3817
- }
3818
- }));
3819
- }), catchError(() => {
3820
- localStorage.removeItem('roles');
3821
- localStorage.removeItem('userGuid');
3822
- localStorage.removeItem('authToken');
3823
- localStorage.removeItem('refreshToken');
3824
- AuthService.authToken = '';
3825
- AuthService.refreshToken = '';
3826
- this.authService.user = undefined;
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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefreshTokenInterceptor, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
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, HeaderInterceptor, InfiniteScrollComponent, InfiniteScrollDirective, ListPaginationContainerComponent, ListSnapshotContainerComponent, LoadingPage, ModalContainerComponent, PermissionDirective, PermissionGuard, PermissionModule, PermissionService, ProfileService, RefreshTokenInterceptor, TabContentComponent, TabGroupComponent, UnauthorizedPage, bootstrap, formatCapitalize, generateContrastColor, getFormErrorMessage };
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