Merge branch 'RED-9321' into 'master'
Migrate to lazy load routes See merge request redactmanager/red-ui!464
This commit is contained in:
commit
ab550a2831
@ -8,7 +8,7 @@ import { DossierFilesGuard } from '@guards/dossier-files-guard';
|
||||
import { templateExistsWhenEnteringDossierList } from '@guards/dossier-template-exists.guard';
|
||||
import { DossierTemplatesGuard } from '@guards/dossier-templates.guard';
|
||||
import { loadActiveDossiersGuard, loadAllDossiersGuard, loadArchivedDossiersGuard } from '@guards/dossiers.guard';
|
||||
import { editAttributeGuard } from '@guards/edit-attribute.guard';
|
||||
import { isNotEditingFileAttributeGuard } from '@guards/file-attribute.guard';
|
||||
import { FeaturesGuard } from '@guards/features-guard.service';
|
||||
import { ifLoggedIn } from '@guards/if-logged-in.guard';
|
||||
import { TrashGuard } from '@guards/trash.guard';
|
||||
@ -38,7 +38,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
{
|
||||
path: `:${DOSSIER_ID}`,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [editAttributeGuard],
|
||||
canDeactivate: [isNotEditingFileAttributeGuard],
|
||||
data: {
|
||||
routeGuards: [DossierFilesGuard],
|
||||
breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier],
|
||||
@ -49,7 +49,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
},
|
||||
skeleton: 'dossier',
|
||||
},
|
||||
loadChildren: () => import('./modules/dossier-overview/dossier-overview.module').then(m => m.DossierOverviewModule),
|
||||
loadChildren: () => import('./modules/dossier-overview/dossier-overview.routes'),
|
||||
},
|
||||
{
|
||||
path: `:${DOSSIER_ID}/file/:${FILE_ID}`,
|
||||
@ -63,12 +63,12 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
redirectTo: '/auth-error',
|
||||
},
|
||||
},
|
||||
loadChildren: () => import('./modules/file-preview/file-preview.module').then(m => m.FilePreviewModule),
|
||||
loadChildren: () => import('./modules/file-preview/file-preview.routes'),
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
pathMatch: 'full',
|
||||
loadChildren: () => import('./modules/dossiers-listing/dossiers-listing.module').then(m => m.DossiersListingModule),
|
||||
loadChildren: () => import('./modules/dossiers-listing/dossiers-listing.routes'),
|
||||
data: {
|
||||
breadcrumbs: [BreadcrumbTypes.dossierTemplate],
|
||||
},
|
||||
@ -77,7 +77,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
},
|
||||
{
|
||||
path: `${ARCHIVE_ROUTE}`,
|
||||
loadChildren: () => import('./modules/archive/archive.module').then(m => m.ArchiveModule),
|
||||
loadChildren: () => import('./modules/archive/archive.routes'),
|
||||
canActivate: [CompositeRouteGuard, webViewerLoadedGuard(), loadArchivedDossiersGuard()],
|
||||
data: {
|
||||
routeGuards: [FeaturesGuard],
|
||||
@ -99,16 +99,16 @@ const mainRoutes: IqserRoutes = [
|
||||
},
|
||||
{
|
||||
path: 'account',
|
||||
loadChildren: () => import('./modules/account/account.module').then(m => m.AccountModule),
|
||||
loadChildren: () => import('./modules/account/account.routes'),
|
||||
},
|
||||
{
|
||||
path: 'admin',
|
||||
loadChildren: () => import('./modules/admin/admin.module').then(m => m.AdminModule),
|
||||
loadChildren: () => import('./modules/admin/admin.routes'),
|
||||
canActivate: [RedRoleGuard],
|
||||
},
|
||||
{
|
||||
path: 'dashboard',
|
||||
loadChildren: () => import('./modules/dashboard/dashboard.module').then(m => m.DashboardModule),
|
||||
loadChildren: () => import('./modules/dashboard/dashboard.routes'),
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard, IqserPermissionsGuard, DossierTemplatesGuard, DashboardGuard],
|
||||
@ -147,7 +147,7 @@ const mainRoutes: IqserRoutes = [
|
||||
},
|
||||
{
|
||||
path: 'search',
|
||||
loadChildren: () => import('./modules/search/search.module').then(m => m.SearchModule),
|
||||
loadComponent: () => import('./modules/search/search-screen/search-screen.component'),
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard, loadAllDossiersGuard()],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
@ -159,7 +159,7 @@ const mainRoutes: IqserRoutes = [
|
||||
},
|
||||
{
|
||||
path: 'trash',
|
||||
loadChildren: () => import('./modules/trash/trash.module').then(m => m.TrashModule),
|
||||
loadChildren: () => import('./modules/trash/trash.routes'),
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard, TrashGuard],
|
||||
|
||||
@ -2,11 +2,16 @@ import { APP_BASE_HREF, DatePipe as BaseDatePipe } from '@angular/common';
|
||||
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
||||
import { ENVIRONMENT_INITIALIZER, ErrorHandler, inject, NgModule } from '@angular/core';
|
||||
import { MatDividerModule } from '@angular/material/divider';
|
||||
import { MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
|
||||
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
||||
import { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltip } from '@angular/material/tooltip';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { ServiceWorkerModule } from '@angular/service-worker';
|
||||
import { HelpModeKey } from '@common-ui/help-mode/types';
|
||||
import { GET_TENANT_FROM_PATH_FN, UI_ROOT } from '@common-ui/utils';
|
||||
import { AuthErrorComponent } from '@components/auth-error/auth-error.component';
|
||||
import { BaseScreenComponent } from '@components/base-screen/base-screen.component';
|
||||
import { BreadcrumbsComponent } from '@components/breadcrumbs/breadcrumbs.component';
|
||||
import { DownloadsListScreenComponent } from '@components/downloads-list-screen/downloads-list-screen.component';
|
||||
@ -24,13 +29,13 @@ import {
|
||||
ChevronButtonComponent,
|
||||
CircleButtonComponent,
|
||||
EmptyStateComponent,
|
||||
HelpModeKey,
|
||||
HelpButtonComponent,
|
||||
HelpModeComponent,
|
||||
HiddenActionDirective,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IqserDenyDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserLoadingModule,
|
||||
IqserTranslateModule,
|
||||
@ -42,9 +47,10 @@ import {
|
||||
StopPropagationDirective,
|
||||
} from '@iqser/common-ui';
|
||||
import { CommonUiModule } from '@iqser/common-ui/lib/common-ui.module';
|
||||
import { provideHelpMode } from '@iqser/common-ui/lib/help-mode/utils/help-mode.provider';
|
||||
import { LogoComponent, SkeletonComponent, ToastComponent } from '@iqser/common-ui/lib/shared';
|
||||
import { TenantsModule } from '@iqser/common-ui/lib/tenants';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';
|
||||
import { MissingTranslationHandler } from '@ngx-translate/core';
|
||||
import { AppConfig, ILoggerConfig } from '@red/domain';
|
||||
@ -53,9 +59,8 @@ import { ActiveDossiersService } from '@services/dossiers/active-dossiers.servic
|
||||
import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.service';
|
||||
import { GlobalErrorHandler } from '@services/global-error-handler.service';
|
||||
import { LoggerRulesService } from '@services/logger-rules.service';
|
||||
import { provideCustomDateFormatter } from '@shared/custom-date-formatting.provider';
|
||||
import { DatePipe } from '@shared/pipes/date.pipe';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { FileUploadDownloadModule } from '@upload-download/file-upload-download.module';
|
||||
import { RedRoleGuard } from '@users/red-role.guard';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { UserService } from '@users/user.service';
|
||||
@ -66,9 +71,9 @@ import { ToastrModule } from 'ngx-toastr';
|
||||
import * as helpModeKeys from '../assets/help-mode/help-mode-keys.json';
|
||||
import { AppRoutingModule } from './app-routing.module';
|
||||
import { AppComponent } from './app.component';
|
||||
import { IconsModule } from './modules/icons/icons.module';
|
||||
import { PdfViewerModule } from './modules/pdf-viewer/pdf-viewer.module';
|
||||
import { ACTIVE_DOSSIERS_SERVICE, ARCHIVED_DOSSIERS_SERVICE } from './tokens';
|
||||
import { AuthErrorComponent } from '@components/auth-error/auth-error.component';
|
||||
|
||||
export const appModuleFactory = (config: AppConfig) => {
|
||||
@NgModule({
|
||||
@ -90,8 +95,6 @@ export const appModuleFactory = (config: AppConfig) => {
|
||||
imports: [
|
||||
BrowserModule,
|
||||
BrowserAnimationsModule,
|
||||
SharedModule,
|
||||
FileUploadDownloadModule,
|
||||
AppRoutingModule,
|
||||
MonacoEditorModule,
|
||||
CommonUiModule.forRoot({
|
||||
@ -104,7 +107,6 @@ export const appModuleFactory = (config: AppConfig) => {
|
||||
existingRoleGuard: RedRoleGuard,
|
||||
}),
|
||||
CachingModule.forRoot(UI_CACHES),
|
||||
IqserHelpModeModule.forRoot(helpModeKeys as HelpModeKey[]),
|
||||
PdfViewerModule,
|
||||
ToastrModule.forRoot({
|
||||
closeButton: true,
|
||||
@ -186,6 +188,17 @@ export const appModuleFactory = (config: AppConfig) => {
|
||||
IconButtonComponent,
|
||||
MatDividerModule,
|
||||
ChevronButtonComponent,
|
||||
InitialsAvatarComponent,
|
||||
HelpModeComponent,
|
||||
HelpButtonComponent,
|
||||
MatMenuTrigger,
|
||||
MatMenuItem,
|
||||
MatIcon,
|
||||
MatMenu,
|
||||
MatMenuContent,
|
||||
MatTooltip,
|
||||
MatProgressSpinner,
|
||||
IconsModule,
|
||||
],
|
||||
providers: [
|
||||
{
|
||||
@ -249,6 +262,8 @@ export const appModuleFactory = (config: AppConfig) => {
|
||||
},
|
||||
BaseDatePipe,
|
||||
DatePipe,
|
||||
...provideCustomDateFormatter(),
|
||||
...provideHelpMode(helpModeKeys as HelpModeKey[]),
|
||||
],
|
||||
bootstrap: [AppComponent],
|
||||
})
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
import { inject } from '@angular/core';
|
||||
import { CanDeactivateFn } from '@angular/router';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import { DossierOverviewScreenComponent } from '../modules/dossier-overview/screen/dossier-overview-screen.component';
|
||||
|
||||
// TODO: rename to something like "isNotEditingFileAttributeGuard"
|
||||
export const editAttributeGuard: CanDeactivateFn<DossierOverviewScreenComponent> = () =>
|
||||
!inject(FileAttributesService).isEditingFileAttribute();
|
||||
7
apps/red-ui/src/app/guards/file-attribute.guard.ts
Normal file
7
apps/red-ui/src/app/guards/file-attribute.guard.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { inject } from '@angular/core';
|
||||
import { CanDeactivateFn } from '@angular/router';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import DossierOverviewScreenComponent from '../modules/dossier-overview/screen/dossier-overview-screen.component';
|
||||
|
||||
export const isNotEditingFileAttributeGuard: CanDeactivateFn<DossierOverviewScreenComponent> = () =>
|
||||
!inject(FileAttributesService).isEditingFileAttribute();
|
||||
@ -1,7 +1,7 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, CanActivate } from '@angular/router';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { EntityPermissionsService } from '@services/entity-permissions/entity-permissions.service';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class PermissionsGuard implements CanActivate {
|
||||
|
||||
@ -4,6 +4,10 @@ import { IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { Roles } from '@users/roles';
|
||||
import { User } from '@red/domain';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { SideNavComponent } from '@common-ui/shared';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { RouterLink, RouterLinkActive } from '@angular/router';
|
||||
|
||||
interface NavItem {
|
||||
readonly label: string;
|
||||
@ -17,6 +21,8 @@ interface NavItem {
|
||||
templateUrl: './account-side-nav.component.html',
|
||||
styleUrls: ['./account-side-nav.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [SideNavComponent, TranslateModule, NgForOf, NgIf, RouterLinkActive, RouterLink],
|
||||
})
|
||||
export class AccountSideNavComponent {
|
||||
readonly currentUser = getCurrentUser<User>();
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { AccountRoutingModule } from './account-routing.module';
|
||||
import { AccountSideNavComponent } from './account-side-nav/account-side-nav.component';
|
||||
import { BaseAccountScreenComponent } from './base-account-screen/base-account-screen-component';
|
||||
import { NotificationPreferencesService } from './services/notification-preferences.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IconButtonComponent, IqserAllowDirective, IqserHelpModeModule } from '@iqser/common-ui';
|
||||
import { PreferencesComponent } from './screens/preferences/preferences.component';
|
||||
import { SideNavComponent } from '@iqser/common-ui/lib/shared';
|
||||
import { DialogDefaultsComponent } from './screens/preferences/dialog-defaults/dialog-defaults.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [AccountSideNavComponent, BaseAccountScreenComponent, PreferencesComponent, DialogDefaultsComponent],
|
||||
imports: [
|
||||
CommonModule,
|
||||
SharedModule,
|
||||
AccountRoutingModule,
|
||||
TranslateModule,
|
||||
IqserHelpModeModule,
|
||||
IconButtonComponent,
|
||||
SideNavComponent,
|
||||
IqserAllowDirective,
|
||||
],
|
||||
providers: [NotificationPreferencesService],
|
||||
})
|
||||
export class AccountModule {}
|
||||
@ -1,13 +1,13 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { CompositeRouteGuard, IqserPermissionsGuard, IqserRoutes } from '@iqser/common-ui';
|
||||
import { RedRoleGuard } from '@users/red-role.guard';
|
||||
import { BaseAccountScreenComponent } from './base-account-screen/base-account-screen-component';
|
||||
import { PreferencesComponent } from './screens/preferences/preferences.component';
|
||||
import { Roles } from '@users/roles';
|
||||
import { IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { NotificationPreferencesService } from './services/notification-preferences.service';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
export default [
|
||||
{ path: '', redirectTo: 'user-profile', pathMatch: 'full' },
|
||||
{
|
||||
path: 'user-profile',
|
||||
@ -16,12 +16,13 @@ const routes: IqserRoutes = [
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
loadChildren: () => import('./screens/user-profile/user-profile.module').then(m => m.UserProfileModule),
|
||||
loadChildren: () => import('./screens/user-profile/user-profile.routes'),
|
||||
},
|
||||
{
|
||||
path: 'notifications',
|
||||
component: BaseAccountScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
@ -29,7 +30,8 @@ const routes: IqserRoutes = [
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
loadChildren: () => import('./screens/notifications/notifications.module').then(m => m.NotificationsModule),
|
||||
providers: [NotificationPreferencesService],
|
||||
loadChildren: () => import('./screens/notifications/notifications.routes'),
|
||||
},
|
||||
{
|
||||
path: 'preferences',
|
||||
@ -61,10 +63,4 @@ const routes: IqserRoutes = [
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule],
|
||||
})
|
||||
export class AccountRoutingModule {}
|
||||
] satisfies IqserRoutes;
|
||||
@ -1,12 +1,17 @@
|
||||
import { ChangeDetectionStrategy, Component, OnInit, ViewContainerRef } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { Router, RouterOutlet } from '@angular/router';
|
||||
import { accountTranslations } from '@translations/account-translations';
|
||||
import { NgClass, NgIf } from '@angular/common';
|
||||
import { AccountSideNavComponent } from '../account-side-nav/account-side-nav.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-base-account-screen',
|
||||
templateUrl: './base-account-screen-component.html',
|
||||
styleUrls: ['./base-account-screen-component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [NgClass, NgIf, RouterOutlet, AccountSideNavComponent, TranslateModule],
|
||||
})
|
||||
export class BaseAccountScreenComponent implements OnInit {
|
||||
readonly translations = accountTranslations;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit } from '@angular/core';
|
||||
import { UntypedFormBuilder } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
|
||||
import { NotificationPreferencesService } from '../../../services/notification-preferences.service';
|
||||
import { BaseFormComponent, getConfig, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { BaseFormComponent, getConfig, IconButtonComponent, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import {
|
||||
DocumentNotificationsTypes,
|
||||
@ -14,6 +14,10 @@ import {
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { notificationsSettingsTranslations } from '@translations/notifications-settings-translations';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
|
||||
const RSS_EXCLUDED_SETTINGS = ['USER_PROMOTED_TO_APPROVER', 'USER_DEGRADED_TO_REVIEWER', 'ASSIGN_REVIEWER'];
|
||||
|
||||
@ -21,6 +25,8 @@ const RSS_EXCLUDED_SETTINGS = ['USER_PROMOTED_TO_APPROVER', 'USER_DEGRADED_TO_RE
|
||||
templateUrl: './notifications-screen.component.html',
|
||||
styleUrls: ['./notifications-screen.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, NgForOf, MatSlideToggle, TranslateModule, NgIf, MatCheckbox, IconButtonComponent],
|
||||
})
|
||||
export class NotificationsScreenComponent extends BaseFormComponent implements OnInit {
|
||||
readonly #toaster = inject(Toaster);
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { NotificationsScreenComponent } from './notifications-screen/notifications-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IconButtonComponent } from '@iqser/common-ui';
|
||||
|
||||
const routes = [{ path: '', component: NotificationsScreenComponent, canDeactivate: [PendingChangesGuard] }];
|
||||
|
||||
@NgModule({
|
||||
declarations: [NotificationsScreenComponent],
|
||||
imports: [RouterModule.forChild(routes), CommonModule, SharedModule, TranslateModule, IconButtonComponent],
|
||||
})
|
||||
export class NotificationsModule {}
|
||||
@ -0,0 +1,11 @@
|
||||
import { NotificationsScreenComponent } from './notifications-screen/notifications-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { IqserRoutes } from '@iqser/common-ui';
|
||||
|
||||
export default [
|
||||
{
|
||||
path: '',
|
||||
component: NotificationsScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
] satisfies IqserRoutes;
|
||||
@ -1,14 +1,20 @@
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { ChangeDetectorRef, Component, inject } from '@angular/core';
|
||||
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect } from '@angular/material/select';
|
||||
import { BaseFormComponent } from '@common-ui/form';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { AsControl } from '@common-ui/utils';
|
||||
import { IconButtonComponent } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { PreferencesKeys, UserPreferenceService } from '@users/user-preference.service';
|
||||
import {
|
||||
RedactOrHintOption,
|
||||
RedactOrHintOptions,
|
||||
RemoveRedactionOption,
|
||||
RemoveRedactionOptions,
|
||||
} from '../../../../file-preview/utils/dialog-options';
|
||||
import { PreferencesKeys, UserPreferenceService } from '@users/user-preference.service';
|
||||
import { AsControl } from '@common-ui/utils';
|
||||
} from '../../../../file-preview/utils/dialog-types';
|
||||
import {
|
||||
hintAddOptions,
|
||||
recommendationRemoveOptions,
|
||||
@ -35,6 +41,8 @@ interface DefaultOptionsForm {
|
||||
selector: 'redaction-dialog-defaults',
|
||||
templateUrl: './dialog-defaults.component.html',
|
||||
styleUrl: './dialog-defaults.component.scss',
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, TranslateModule, MatFormField, MatSelect, MatOption, NgForOf, MatCheckbox, NgIf, IconButtonComponent],
|
||||
})
|
||||
export class DialogDefaultsComponent extends BaseFormComponent {
|
||||
readonly #formBuilder = inject(FormBuilder);
|
||||
@ -60,6 +68,10 @@ export class DialogDefaultsComponent extends BaseFormComponent {
|
||||
readonly redactionRemoveOptions = redactionRemoveOptions;
|
||||
readonly recommendationRemoveOptions = recommendationRemoveOptions;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
get displayExtraOptionAddRedaction() {
|
||||
return RedactOrHintOptions.IN_DOSSIER === this.form.controls.addRedaction.value;
|
||||
}
|
||||
@ -84,10 +96,6 @@ export class DialogDefaultsComponent extends BaseFormComponent {
|
||||
return RemoveRedactionOptions.DO_NOT_RECOMMEND === this.form.controls.removeRecommendation.value;
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
async save(): Promise<any> {
|
||||
const formValue = this.form.value;
|
||||
|
||||
|
||||
@ -1,10 +1,24 @@
|
||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { BaseFormComponent, getConfig, IqserPermissionsService, isIqserDevMode, KEYS, LoadingService } from '@iqser/common-ui';
|
||||
import {
|
||||
BaseFormComponent,
|
||||
getConfig,
|
||||
IconButtonComponent,
|
||||
IqserAllowDirective,
|
||||
IqserPermissionsService,
|
||||
isIqserDevMode,
|
||||
KEYS,
|
||||
LoadingService,
|
||||
} from '@iqser/common-ui';
|
||||
import { AsControl } from '@iqser/common-ui/lib/utils';
|
||||
import { Roles } from '@users/roles';
|
||||
import { PreferencesKeys, UserPreferenceService } from '@users/user-preference.service';
|
||||
import { DialogDefaultsComponent } from './dialog-defaults/dialog-defaults.component';
|
||||
import { NgClass, NgIf } from '@angular/common';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
|
||||
interface PreferencesForm {
|
||||
// preferences
|
||||
@ -30,6 +44,18 @@ const Screens = {
|
||||
templateUrl: './preferences.component.html',
|
||||
styleUrls: ['./preferences.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [
|
||||
DialogDefaultsComponent,
|
||||
NgClass,
|
||||
NgIf,
|
||||
ReactiveFormsModule,
|
||||
MatSlideToggle,
|
||||
TranslateModule,
|
||||
IqserAllowDirective,
|
||||
MatCheckbox,
|
||||
IconButtonComponent,
|
||||
],
|
||||
})
|
||||
export class PreferencesComponent extends BaseFormComponent implements OnInit {
|
||||
readonly form: FormGroup<AsControl<PreferencesForm>>;
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { BaseDialogComponent, CircleButtonComponent, IconButtonComponent } from '@iqser/common-ui';
|
||||
import { MatDialogRef } from '@angular/material/dialog';
|
||||
import { AbstractControl, FormGroup, Validators } from '@angular/forms';
|
||||
import { AbstractControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
interface FormType {
|
||||
password: AbstractControl<string>;
|
||||
@ -9,6 +10,8 @@ interface FormType {
|
||||
|
||||
@Component({
|
||||
templateUrl: './confirm-password-dialog.component.html',
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, IconButtonComponent, TranslateModule, CircleButtonComponent],
|
||||
})
|
||||
export class ConfirmPasswordDialogComponent extends BaseDialogComponent {
|
||||
constructor(protected readonly _dialogRef: MatDialogRef<ConfirmPasswordDialogComponent>) {
|
||||
|
||||
@ -1,8 +1,15 @@
|
||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { BaseFormComponent, IqserPermissionsService, LanguageService, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import {
|
||||
BaseFormComponent,
|
||||
IconButtonComponent,
|
||||
IqserPermissionsService,
|
||||
LanguageService,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||
import { IProfile } from '@red/domain';
|
||||
import { languagesTranslations } from '@translations/languages-translations';
|
||||
import { Roles } from '@users/roles';
|
||||
@ -10,11 +17,17 @@ import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { UserProfileDialogService } from '../services/user-profile-dialog.service';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect } from '@angular/material/select';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
|
||||
@Component({
|
||||
templateUrl: './user-profile-screen.component.html',
|
||||
styleUrls: ['./user-profile-screen.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, NgIf, MatFormField, MatSelect, MatOption, NgForOf, TranslateModule, MatSlideToggle, IconButtonComponent],
|
||||
})
|
||||
export class UserProfileScreenComponent extends BaseFormComponent implements OnInit {
|
||||
#profileModel: IProfile;
|
||||
|
||||
@ -1,19 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { UserProfileScreenComponent } from './user-profile-screen/user-profile-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ConfirmPasswordDialogComponent } from './confirm-password-dialog/confirm-password-dialog.component';
|
||||
import { UserProfileDialogService } from './services/user-profile-dialog.service';
|
||||
import { CircleButtonComponent, IconButtonComponent } from '@iqser/common-ui';
|
||||
|
||||
const routes = [{ path: '', component: UserProfileScreenComponent, canDeactivate: [PendingChangesGuard] }];
|
||||
|
||||
@NgModule({
|
||||
declarations: [UserProfileScreenComponent, ConfirmPasswordDialogComponent],
|
||||
imports: [RouterModule.forChild(routes), CommonModule, SharedModule, TranslateModule, IconButtonComponent, CircleButtonComponent],
|
||||
providers: [UserProfileDialogService],
|
||||
})
|
||||
export class UserProfileModule {}
|
||||
@ -0,0 +1,8 @@
|
||||
import { UserProfileScreenComponent } from './user-profile-screen/user-profile-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { UserProfileDialogService } from './services/user-profile-dialog.service';
|
||||
import { IqserRoutes } from '@iqser/common-ui';
|
||||
|
||||
export default [
|
||||
{ path: '', component: UserProfileScreenComponent, canDeactivate: [PendingChangesGuard], providers: [UserProfileDialogService] },
|
||||
] satisfies IqserRoutes;
|
||||
@ -1,8 +1,8 @@
|
||||
import { redactTextTranslations } from '@translations/redact-text-translations';
|
||||
import { RedactOrHintOptions, RemoveRedactionOptions } from '../../file-preview/utils/dialog-options';
|
||||
import { removeRedactionTranslations } from '@translations/remove-redaction-translations';
|
||||
import { addHintTranslations } from '@translations/add-hint-translations';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { addHintTranslations } from '@translations/add-hint-translations';
|
||||
import { redactTextTranslations } from '@translations/redact-text-translations';
|
||||
import { removeRedactionTranslations } from '@translations/remove-redaction-translations';
|
||||
import { RedactOrHintOptions, RemoveRedactionOptions } from '../../file-preview/utils/dialog-types';
|
||||
|
||||
export const SystemDefaults = {
|
||||
ADD_REDACTION_DEFAULT: RedactOrHintOptions.IN_DOSSIER,
|
||||
|
||||
@ -1,291 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CompositeRouteGuard, IqserPermissionsGuard, IqserRoutes } from '@iqser/common-ui';
|
||||
import { RedRoleGuard } from '@users/red-role.guard';
|
||||
import { EntitiesListingScreenComponent } from './screens/entities-listing/entities-listing-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { DefaultColorsScreenComponent } from './screens/default-colors/default-colors-screen.component';
|
||||
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
|
||||
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
|
||||
import { AuditScreenComponent } from './screens/audit/audit-screen.component';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { GeneralConfigScreenComponent } from './screens/general-config/general-config-screen.component';
|
||||
import { BaseAdminScreenComponent } from './base-admin-screen/base-admin-screen.component';
|
||||
import { BaseDossierTemplateScreenComponent } from './base-dossier-templates-screen/base-dossier-template-screen.component';
|
||||
import { DossierTemplatesGuard } from '@guards/dossier-templates.guard';
|
||||
import { DOSSIER_TEMPLATE_ID, ENTITY_TYPE } from '@red/domain';
|
||||
import { templateExistsWhenEnteringAdmin } from '@guards/dossier-template-exists.guard';
|
||||
import { entityExistsGuard } from '@guards/entity-exists-guard.service';
|
||||
import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-screen.component';
|
||||
import { PermissionsGuard } from '@guards/permissions-guard';
|
||||
import { Roles } from '@users/roles';
|
||||
import { IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
||||
import { ComponentMappingsScreenComponent } from './screens/component-mappings/component-mappings-screen.component';
|
||||
|
||||
const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
{
|
||||
path: 'info',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () => import('./screens/info/dossier-template-info.module').then(m => m.DossierTemplateInfoModule),
|
||||
},
|
||||
{
|
||||
path: 'entities',
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: EntitiesListingScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: `:${ENTITY_TYPE}`,
|
||||
component: BaseEntityScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, entityExistsGuard()],
|
||||
loadChildren: () => import('./screens/entities/entities.module').then(m => m.EntitiesModule),
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: 'entity-rules',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.rules.read],
|
||||
redirectTo: 'info',
|
||||
},
|
||||
type: 'ENTITY',
|
||||
},
|
||||
loadChildren: () => import('./screens/rules/rules.module').then(m => m.RulesModule),
|
||||
},
|
||||
{
|
||||
path: 'component-rules',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.rules.read],
|
||||
redirectTo: 'info',
|
||||
},
|
||||
type: 'COMPONENT',
|
||||
},
|
||||
loadChildren: () => import('./screens/rules/rules.module').then(m => m.RulesModule),
|
||||
},
|
||||
{
|
||||
path: 'component-mappings',
|
||||
component: ComponentMappingsScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'file-attributes',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () =>
|
||||
import('./screens/file-attributes-listing/file-attributes-listing.module').then(m => m.FileAttributesListingModule),
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'watermarks',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () => import('./screens/watermark/watermark.module').then(m => m.WatermarkModule),
|
||||
},
|
||||
{
|
||||
path: 'reports',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () => import('./screens/reports/reports.module').then(m => m.ReportsModule),
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.reportTemplates.read],
|
||||
redirectTo: '/auth-error',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dossier-attributes',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () =>
|
||||
import('./screens/dossier-attributes-listing/dossier-attributes-listing.module').then(m => m.DossierAttributesListingModule),
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dossier-states',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () =>
|
||||
import('./screens/dossier-states-listing/dossier-states-listing.module').then(m => m.DossierStatesListingModule),
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'default-colors',
|
||||
component: DefaultColorsScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'justifications',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () => import('./screens/justifications/justifications.module').then(m => m.JustificationsModule),
|
||||
canActivate: [IqserPermissionsGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.legalBasis.read],
|
||||
redirectTo: '/auth-error',
|
||||
},
|
||||
},
|
||||
},
|
||||
{ path: '', redirectTo: 'info', pathMatch: 'full' },
|
||||
];
|
||||
|
||||
const dossierTemplatesRoutes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: BaseAdminScreenComponent,
|
||||
canActivate: [IqserAuthGuard],
|
||||
loadChildren: () =>
|
||||
import('./screens/dossier-templates-listing/dossier-templates-listing.module').then(m => m.DossierTemplatesListingModule),
|
||||
},
|
||||
{
|
||||
path: `:${DOSSIER_TEMPLATE_ID}`,
|
||||
children: dossierTemplateIdRoutes,
|
||||
canActivate: [templateExistsWhenEnteringAdmin()],
|
||||
},
|
||||
];
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
|
||||
{
|
||||
path: 'dossier-templates',
|
||||
children: dossierTemplatesRoutes,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard, DossierTemplatesGuard],
|
||||
requiredRoles: ['RED_MANAGER', 'RED_ADMIN'],
|
||||
permissions: {
|
||||
allow: [Roles.templates.read],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'users',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: UserListingScreenComponent,
|
||||
},
|
||||
],
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.users.read, 'RED_USER_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dossier-permissions',
|
||||
component: BaseAdminScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard, PermissionsGuard],
|
||||
permissionsObject: 'Dossier',
|
||||
permissions: {
|
||||
allow: [Roles.manageAclPermissions, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
loadChildren: () => import('./screens/permissions/permissions.module').then(m => m.PermissionsModule),
|
||||
},
|
||||
{
|
||||
path: 'license-info',
|
||||
component: BaseAdminScreenComponent,
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.license.readReport, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
loadChildren: () => import('./screens/license/license.module').then(m => m.LicenseModule),
|
||||
},
|
||||
{
|
||||
path: 'digital-signature',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: DigitalSignatureScreenComponent,
|
||||
},
|
||||
],
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.digitalSignature.read, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'audit',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: AuditScreenComponent,
|
||||
},
|
||||
],
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.searchAudit, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'general-config',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: GeneralConfigScreenComponent,
|
||||
},
|
||||
],
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.generalConfiguration.read, Roles.smtp.read, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule],
|
||||
})
|
||||
export class AdminRoutingModule {}
|
||||
@ -1,132 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { AdminRoutingModule } from './admin-routing.module';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { AuditScreenComponent } from './screens/audit/audit-screen.component';
|
||||
import { DefaultColorsScreenComponent } from './screens/default-colors/default-colors-screen.component';
|
||||
import { EntitiesListingScreenComponent } from './screens/entities-listing/entities-listing-screen.component';
|
||||
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
|
||||
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
|
||||
import { DossierTemplateBreadcrumbsComponent } from './shared/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
|
||||
import { AddEntityDialogComponent } from './dialogs/add-entity-dialog/add-entity-dialog.component';
|
||||
import { EditColorDialogComponent } from './dialogs/edit-color-dialog/edit-color-dialog.component';
|
||||
import { AdminDialogService } from './services/admin-dialog.service';
|
||||
import { GeneralConfigScreenComponent } from './screens/general-config/general-config-screen.component';
|
||||
import { SmtpAuthDialogComponent } from './dialogs/smtp-auth-dialog/smtp-auth-dialog.component';
|
||||
import { AddEditUserDialogComponent } from './dialogs/add-edit-user-dialog/add-edit-user-dialog.component';
|
||||
import { UsersStatsComponent } from './components/users-stats/users-stats.component';
|
||||
import { ResetPasswordComponent } from './dialogs/add-edit-user-dialog/reset-password/reset-password.component';
|
||||
import { UserDetailsComponent } from './dialogs/add-edit-user-dialog/user-details/user-details.component';
|
||||
import { AuditService } from './services/audit.service';
|
||||
import { DigitalSignatureService } from './services/digital-signature.service';
|
||||
import { BaseAdminScreenComponent } from './base-admin-screen/base-admin-screen.component';
|
||||
import { RulesService } from './services/rules.service';
|
||||
import { SmtpConfigService } from './services/smtp-config.service';
|
||||
import { UploadDictionaryDialogComponent } from './dialogs/upload-dictionary-dialog/upload-dictionary-dialog.component';
|
||||
import { GeneralConfigFormComponent } from './screens/general-config/general-config-form/general-config-form.component';
|
||||
import { SmtpFormComponent } from './screens/general-config/smtp-form/smtp-form.component';
|
||||
import { BaseDossierTemplateScreenComponent } from './base-dossier-templates-screen/base-dossier-template-screen.component';
|
||||
import { A11yModule } from '@angular/cdk/a11y';
|
||||
import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-screen.component';
|
||||
import { AdminSideNavComponent } from './shared/components/admin-side-nav/admin-side-nav.component';
|
||||
import { SystemPreferencesFormComponent } from './screens/general-config/system-preferences-form/system-preferences-form.component';
|
||||
import { ConfigureCertificateDialogComponent } from './dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component';
|
||||
import { PkcsSignatureConfigurationComponent } from './dialogs/configure-digital-signature-dialog/form/pkcs-signature-configuration/pkcs-signature-configuration.component';
|
||||
import { KmsSignatureConfigurationComponent } from './dialogs/configure-digital-signature-dialog/form/kms-signature-configuration/kms-signature-configuration.component';
|
||||
import {
|
||||
ChevronButtonComponent,
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
EditableInputComponent,
|
||||
EmptyStateComponent,
|
||||
HasScrollbarDirective,
|
||||
HumanizePipe,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IqserDenyDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserUploadFileModule,
|
||||
RoundCheckboxComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AuditInfoDialogComponent } from './dialogs/audit-info-dialog/audit-info-dialog.component';
|
||||
import { DossierTemplateActionsComponent } from './shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { SelectComponent } from '@shared/components/select/select.component';
|
||||
import { PaginationComponent } from '@common-ui/pagination/pagination.component';
|
||||
import { AddCloneDossierTemplateDialogComponent } from './dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component';
|
||||
import { ComponentMappingsScreenComponent } from './screens/component-mappings/component-mappings-screen.component';
|
||||
|
||||
const dialogs = [
|
||||
AddCloneDossierTemplateDialogComponent,
|
||||
AddEntityDialogComponent,
|
||||
EditColorDialogComponent,
|
||||
SmtpAuthDialogComponent,
|
||||
AddEditUserDialogComponent,
|
||||
UploadDictionaryDialogComponent,
|
||||
ConfigureCertificateDialogComponent,
|
||||
AuditInfoDialogComponent,
|
||||
];
|
||||
|
||||
const screens = [
|
||||
AuditScreenComponent,
|
||||
DefaultColorsScreenComponent,
|
||||
EntitiesListingScreenComponent,
|
||||
DigitalSignatureScreenComponent,
|
||||
UserListingScreenComponent,
|
||||
GeneralConfigScreenComponent,
|
||||
ComponentMappingsScreenComponent,
|
||||
];
|
||||
|
||||
const components = [
|
||||
UsersStatsComponent,
|
||||
ResetPasswordComponent,
|
||||
UserDetailsComponent,
|
||||
BaseAdminScreenComponent,
|
||||
BaseDossierTemplateScreenComponent,
|
||||
BaseEntityScreenComponent,
|
||||
GeneralConfigFormComponent,
|
||||
SmtpFormComponent,
|
||||
SystemPreferencesFormComponent,
|
||||
PkcsSignatureConfigurationComponent,
|
||||
KmsSignatureConfigurationComponent,
|
||||
|
||||
...dialogs,
|
||||
...screens,
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [...components],
|
||||
providers: [AdminDialogService, AuditService, DigitalSignatureService, RulesService, SmtpConfigService],
|
||||
imports: [
|
||||
CommonModule,
|
||||
SharedModule,
|
||||
AdminRoutingModule,
|
||||
A11yModule,
|
||||
IqserUsersModule,
|
||||
TranslateModule,
|
||||
HumanizePipe,
|
||||
IqserListingModule,
|
||||
IqserUploadFileModule,
|
||||
IqserHelpModeModule,
|
||||
AdminSideNavComponent,
|
||||
DossierTemplateActionsComponent,
|
||||
DossierTemplateBreadcrumbsComponent,
|
||||
IconButtonComponent,
|
||||
CircleButtonComponent,
|
||||
ChevronButtonComponent,
|
||||
EmptyStateComponent,
|
||||
HasScrollbarDirective,
|
||||
RoundCheckboxComponent,
|
||||
InputWithActionComponent,
|
||||
EditableInputComponent,
|
||||
DetailsRadioComponent,
|
||||
IqserAllowDirective,
|
||||
IqserDenyDirective,
|
||||
SelectComponent,
|
||||
PaginationComponent,
|
||||
],
|
||||
})
|
||||
export class AdminModule {}
|
||||
282
apps/red-ui/src/app/modules/admin/admin.routes.ts
Normal file
282
apps/red-ui/src/app/modules/admin/admin.routes.ts
Normal file
@ -0,0 +1,282 @@
|
||||
import { CompositeRouteGuard, IqserPermissionsGuard, IqserRoutes } from '@iqser/common-ui';
|
||||
import { RedRoleGuard } from '@users/red-role.guard';
|
||||
import { EntitiesListingScreenComponent } from './screens/entities-listing/entities-listing-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { DefaultColorsScreenComponent } from './screens/default-colors/default-colors-screen.component';
|
||||
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
|
||||
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
|
||||
import { AuditScreenComponent } from './screens/audit/audit-screen.component';
|
||||
import { GeneralConfigScreenComponent } from './screens/general-config/general-config-screen.component';
|
||||
import { BaseAdminScreenComponent } from './base-admin-screen/base-admin-screen.component';
|
||||
import { BaseDossierTemplateScreenComponent } from './base-dossier-templates-screen/base-dossier-template-screen.component';
|
||||
import { DossierTemplatesGuard } from '@guards/dossier-templates.guard';
|
||||
import { DOSSIER_TEMPLATE_ID, ENTITY_TYPE } from '@red/domain';
|
||||
import { templateExistsWhenEnteringAdmin } from '@guards/dossier-template-exists.guard';
|
||||
import { entityExistsGuard } from '@guards/entity-exists-guard.service';
|
||||
import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-screen.component';
|
||||
import { PermissionsGuard } from '@guards/permissions-guard';
|
||||
import { Roles } from '@users/roles';
|
||||
import { IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
||||
import { ComponentMappingsScreenComponent } from './screens/component-mappings/component-mappings-screen.component';
|
||||
import { AdminDialogService } from './services/admin-dialog.service';
|
||||
import { AuditService } from './services/audit.service';
|
||||
import { DigitalSignatureService } from './services/digital-signature.service';
|
||||
import { RulesService } from './services/rules.service';
|
||||
import { SmtpConfigService } from './services/smtp-config.service';
|
||||
|
||||
const entityRoutes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
children: [{ path: '', component: EntitiesListingScreenComponent }],
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: `:${ENTITY_TYPE}`,
|
||||
component: BaseEntityScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, entityExistsGuard()],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
loadChildren: () => import('./screens/entities/entities.routes'),
|
||||
},
|
||||
];
|
||||
|
||||
const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
{ path: '', redirectTo: 'info', pathMatch: 'full' },
|
||||
{
|
||||
path: 'entities',
|
||||
children: entityRoutes,
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: 'info',
|
||||
loadComponent: () => import('./screens/info/dossier-template-info-screen/dossier-template-info-screen.component'),
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
{
|
||||
path: 'entity-rules',
|
||||
loadComponent: () => import('./screens/rules/rules-screen/rules-screen.component'),
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.rules.read],
|
||||
redirectTo: 'info',
|
||||
},
|
||||
type: 'ENTITY',
|
||||
},
|
||||
providers: [RulesService],
|
||||
},
|
||||
{
|
||||
path: 'component-rules',
|
||||
loadComponent: () => import('./screens/rules/rules-screen/rules-screen.component'),
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.rules.read],
|
||||
redirectTo: 'info',
|
||||
},
|
||||
type: 'COMPONENT',
|
||||
},
|
||||
providers: [RulesService],
|
||||
},
|
||||
{
|
||||
path: 'component-mappings',
|
||||
component: ComponentMappingsScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'file-attributes',
|
||||
loadComponent: () => import('./screens/file-attributes-listing/file-attributes-listing-screen.component'),
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'watermarks',
|
||||
loadChildren: () => import('./screens/watermark/watermark.routes'),
|
||||
},
|
||||
{
|
||||
path: 'reports',
|
||||
loadComponent: () => import('./screens/reports/reports-screen/reports-screen.component'),
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.reportTemplates.read],
|
||||
redirectTo: '/auth-error',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dossier-attributes',
|
||||
loadComponent: () => import('./screens/dossier-attributes-listing/dossier-attributes-listing-screen.component'),
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dossier-states',
|
||||
loadComponent: () =>
|
||||
import('./screens/dossier-states-listing/dossier-states-listing-screen/dossier-states-listing-screen.component'),
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'default-colors',
|
||||
component: DefaultColorsScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'justifications',
|
||||
loadComponent: () => import('./screens/justifications/justifications-screen/justifications-screen.component'),
|
||||
canActivate: [IqserPermissionsGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.legalBasis.read],
|
||||
redirectTo: '/auth-error',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const dossierTemplatesRoutes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
loadComponent: () =>
|
||||
import(
|
||||
'./screens/dossier-templates-listing/dossier-templates-listing-screen/dossier-templates-listing-screen.component'
|
||||
),
|
||||
},
|
||||
],
|
||||
canActivate: [IqserAuthGuard],
|
||||
},
|
||||
{
|
||||
path: `:${DOSSIER_TEMPLATE_ID}`,
|
||||
children: dossierTemplateIdRoutes,
|
||||
canActivate: [templateExistsWhenEnteringAdmin()],
|
||||
},
|
||||
];
|
||||
|
||||
export default [
|
||||
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
|
||||
{
|
||||
path: 'dossier-templates',
|
||||
children: dossierTemplatesRoutes,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard, DossierTemplatesGuard],
|
||||
requiredRoles: ['RED_MANAGER', 'RED_ADMIN'],
|
||||
permissions: {
|
||||
allow: [Roles.templates.read],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
component: BaseAdminScreenComponent,
|
||||
providers: [AdminDialogService],
|
||||
children: [
|
||||
{
|
||||
path: 'users',
|
||||
component: UserListingScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.users.read, 'RED_USER_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'dossier-permissions',
|
||||
loadComponent: () => import('./screens/permissions/permissions-screen/permissions-screen.component'),
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard, PermissionsGuard],
|
||||
permissionsObject: 'Dossier',
|
||||
permissions: {
|
||||
allow: [Roles.manageAclPermissions, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'license-info',
|
||||
loadChildren: () => import('./screens/license/license.routes'),
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.license.readReport, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'digital-signature',
|
||||
component: DigitalSignatureScreenComponent,
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.digitalSignature.read, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
providers: [DigitalSignatureService],
|
||||
},
|
||||
{
|
||||
path: 'audit',
|
||||
component: AuditScreenComponent,
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.searchAudit, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
providers: [AuditService],
|
||||
},
|
||||
{
|
||||
path: 'general-config',
|
||||
component: GeneralConfigScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.generalConfiguration.read, Roles.smtp.read, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
providers: [SmtpConfigService],
|
||||
},
|
||||
],
|
||||
},
|
||||
] satisfies IqserRoutes;
|
||||
@ -1,7 +1,11 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { AdminSideNavComponent } from '../shared/components/admin-side-nav/admin-side-nav.component';
|
||||
import { RouterOutlet } from '@angular/router';
|
||||
|
||||
@Component({
|
||||
templateUrl: './base-admin-screen.component.html',
|
||||
styleUrls: ['./base-admin-screen.component.scss'],
|
||||
standalone: true,
|
||||
imports: [AdminSideNavComponent, RouterOutlet],
|
||||
})
|
||||
export class BaseAdminScreenComponent {}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
<!--TODO: Use this for all dossier template screens -->
|
||||
|
||||
<section>
|
||||
<div class="page-header">
|
||||
<redaction-dossier-template-breadcrumbs class="flex-1"></redaction-dossier-template-breadcrumbs>
|
||||
|
||||
@ -1,7 +1,23 @@
|
||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||
import { DossierTemplateBreadcrumbsComponent } from '../shared/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
|
||||
import { DossierTemplateActionsComponent } from '../shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { CircleButtonComponent } from '@iqser/common-ui';
|
||||
import { RouterLink, RouterOutlet } from '@angular/router';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AdminSideNavComponent } from '../shared/components/admin-side-nav/admin-side-nav.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './base-dossier-template-screen.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [
|
||||
DossierTemplateBreadcrumbsComponent,
|
||||
DossierTemplateActionsComponent,
|
||||
CircleButtonComponent,
|
||||
RouterLink,
|
||||
TranslateModule,
|
||||
AdminSideNavComponent,
|
||||
RouterOutlet,
|
||||
],
|
||||
})
|
||||
export class BaseDossierTemplateScreenComponent {}
|
||||
|
||||
@ -1,19 +1,34 @@
|
||||
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
|
||||
import { DOSSIER_TEMPLATE_ID, ENTITY_TYPE } from '@red/domain';
|
||||
import { Router } from '@angular/router';
|
||||
import { Router, RouterLink, RouterOutlet } from '@angular/router';
|
||||
import { firstValueFrom, Observable } from 'rxjs';
|
||||
import { AdminDialogService } from '../services/admin-dialog.service';
|
||||
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
||||
import { LoadingService } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, LoadingService } from '@iqser/common-ui';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { DossierTemplateBreadcrumbsComponent } from '../shared/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AdminSideNavComponent } from '../shared/components/admin-side-nav/admin-side-nav.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './base-entity-screen.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [
|
||||
DossierTemplateBreadcrumbsComponent,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
AsyncPipe,
|
||||
TranslateModule,
|
||||
RouterLink,
|
||||
AdminSideNavComponent,
|
||||
RouterOutlet,
|
||||
],
|
||||
})
|
||||
export class BaseEntityScreenComponent implements OnInit {
|
||||
readonly disabledItems$: Observable<string[]>;
|
||||
|
||||
@ -1,10 +1,15 @@
|
||||
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { DonutChartConfig } from '@red/domain';
|
||||
import { CircleButtonComponent } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DonutChartComponent } from '@shared/components/donut-chart/donut-chart.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-users-stats',
|
||||
templateUrl: './users-stats.component.html',
|
||||
styleUrls: ['./users-stats.component.scss'],
|
||||
standalone: true,
|
||||
imports: [CircleButtonComponent, TranslateModule, DonutChartComponent],
|
||||
})
|
||||
export class UsersStatsComponent {
|
||||
@Output() toggleCollapse = new EventEmitter();
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
import { HttpStatusCode } from '@angular/common/http';
|
||||
import { Component, Inject } from '@angular/core';
|
||||
import { Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { BaseDialogComponent, getConfig, SaveOptions } from '@iqser/common-ui';
|
||||
import { BaseDialogComponent, CircleButtonComponent, getConfig, IconButtonComponent, SaveOptions } from '@iqser/common-ui';
|
||||
import { DossierTemplate } from '@red/domain';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
import { Router } from '@angular/router';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
export interface CloneTemplateData {
|
||||
dossierTemplateId?: string;
|
||||
@ -15,6 +16,8 @@ export interface CloneTemplateData {
|
||||
@Component({
|
||||
templateUrl: './add-clone-dossier-template-dialog.component.html',
|
||||
styleUrls: ['./add-clone-dossier-template-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [TranslateModule, ReactiveFormsModule, IconButtonComponent, CircleButtonComponent],
|
||||
})
|
||||
export class AddCloneDossierTemplateDialogComponent extends BaseDialogComponent {
|
||||
readonly dossierTemplate?: DossierTemplate;
|
||||
|
||||
@ -1,18 +1,24 @@
|
||||
import { Component, Inject, ViewChild } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent, CircleButtonComponent } from '@iqser/common-ui';
|
||||
import { User } from '@red/domain';
|
||||
import { ResetPasswordComponent } from './reset-password/reset-password.component';
|
||||
import { UserDetailsComponent } from './user-details/user-details.component';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-add-edit-user-dialog',
|
||||
templateUrl: './add-edit-user-dialog.component.html',
|
||||
standalone: true,
|
||||
imports: [UserDetailsComponent, ResetPasswordComponent, CircleButtonComponent],
|
||||
})
|
||||
export class AddEditUserDialogComponent extends BaseDialogComponent {
|
||||
resettingPassword = false;
|
||||
@ViewChild(UserDetailsComponent) private readonly _userDetailsComponent: UserDetailsComponent;
|
||||
resettingPassword = false;
|
||||
|
||||
constructor(protected readonly _dialogRef: MatDialogRef<AddEditUserDialogComponent>, @Inject(MAT_DIALOG_DATA) readonly user: User) {
|
||||
constructor(
|
||||
protected readonly _dialogRef: MatDialogRef<AddEditUserDialogComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) readonly user: User,
|
||||
) {
|
||||
super(_dialogRef, !!user);
|
||||
}
|
||||
|
||||
|
||||
@ -1,13 +1,17 @@
|
||||
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { IconButtonTypes, LoadingService } from '@iqser/common-ui';
|
||||
import { IconButtonComponent, IconButtonTypes, LoadingService } from '@iqser/common-ui';
|
||||
import { User } from '@red/domain';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NamePipe } from '@common-ui/users/name.pipe';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-reset-password',
|
||||
templateUrl: './reset-password.component.html',
|
||||
standalone: true,
|
||||
imports: [TranslateModule, NamePipe, ReactiveFormsModule, IconButtonComponent],
|
||||
})
|
||||
export class ResetPasswordComponent {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';
|
||||
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { AdminDialogService } from '../../../services/admin-dialog.service';
|
||||
import { BaseFormComponent, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { BaseFormComponent, IconButtonComponent, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { rolesTranslations } from '@translations/roles-translations';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { User } from '@red/domain';
|
||||
@ -9,11 +9,16 @@ import { UserService } from '@users/user.service';
|
||||
import { HttpStatusCode } from '@angular/common/http';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { IProfileUpdateRequest } from '@iqser/common-ui/lib/users';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-user-details',
|
||||
templateUrl: './user-details.component.html',
|
||||
styleUrls: ['./user-details.component.scss'],
|
||||
standalone: true,
|
||||
imports: [TranslateModule, ReactiveFormsModule, MatCheckbox, NgForOf, IconButtonComponent, NgIf],
|
||||
})
|
||||
export class UserDetailsComponent extends BaseFormComponent implements OnChanges {
|
||||
/** e.g. a RED_ADMIN is automatically a RED_USER_ADMIN => can't disable RED_USER_ADMIN as long as RED_ADMIN is checked */
|
||||
|
||||
@ -1,7 +1,16 @@
|
||||
import { Component, inject, ViewChild } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent, getConfig, IconButtonTypes } from '@iqser/common-ui';
|
||||
import {
|
||||
BaseDialogComponent,
|
||||
CircleButtonComponent,
|
||||
getConfig,
|
||||
HelpButtonComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
} from '@iqser/common-ui';
|
||||
import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
interface DialogData {
|
||||
readonly dossierTemplateId: string;
|
||||
@ -10,6 +19,8 @@ interface DialogData {
|
||||
@Component({
|
||||
templateUrl: './add-entity-dialog.component.html',
|
||||
styleUrls: ['./add-entity-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [AddEditEntityComponent, TranslateModule, IconButtonComponent, NgIf, CircleButtonComponent, HelpButtonComponent],
|
||||
})
|
||||
export class AddEntityDialogComponent extends BaseDialogComponent {
|
||||
@ViewChild(AddEditEntityComponent, { static: true }) private readonly _addEditEntityComponent: AddEditEntityComponent;
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import { KeyValue } from '@angular/common';
|
||||
import { KeyValue, KeyValuePipe, NgForOf } from '@angular/common';
|
||||
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { BaseDialogComponent, CircleButtonComponent, HumanizePipe } from '@iqser/common-ui';
|
||||
import { IAudit } from '@red/domain';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
interface DialogData {
|
||||
readonly auditEntry: IAudit;
|
||||
@ -15,6 +16,8 @@ type OrderFn = (a: KeyValue<string, string>, b: KeyValue<string, string>) => num
|
||||
templateUrl: './audit-info-dialog.component.html',
|
||||
styleUrls: ['./audit-info-dialog.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [TranslateModule, NgForOf, KeyValuePipe, HumanizePipe, CircleButtonComponent],
|
||||
})
|
||||
export class AuditInfoDialogComponent extends BaseDialogComponent {
|
||||
constructor(
|
||||
|
||||
@ -1,12 +1,22 @@
|
||||
import { ChangeDetectorRef, Component, ViewChild } from '@angular/core';
|
||||
import { digitalSignatureDialogTranslations } from '../../translations/digital-signature-dialog-translations';
|
||||
import { BaseDialogComponent, DetailsRadioOption } from '@iqser/common-ui';
|
||||
import { MatDialogRef } from '@angular/material/dialog';
|
||||
import {
|
||||
BaseDialogComponent,
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
IconButtonComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { MatDialogClose, MatDialogRef } from '@angular/material/dialog';
|
||||
import { PkcsSignatureConfigurationComponent } from './form/pkcs-signature-configuration/pkcs-signature-configuration.component';
|
||||
import { KmsSignatureConfigurationComponent } from './form/kms-signature-configuration/kms-signature-configuration.component';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { HttpStatusCode } from '@angular/common/http';
|
||||
import { DigitalSignatureOption, DigitalSignatureOptions } from '@red/domain';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DigitalSignatureService } from '../../services/digital-signature.service';
|
||||
|
||||
const DEFAULT_DIALOG_WIDTH = '662px';
|
||||
const KMS_SIGNATURE_DIALOG_WIDTH = '810px';
|
||||
@ -14,6 +24,19 @@ const KMS_SIGNATURE_DIALOG_WIDTH = '810px';
|
||||
@Component({
|
||||
templateUrl: './configure-certificate-dialog.component.html',
|
||||
styleUrls: ['./configure-certificate-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
DetailsRadioComponent,
|
||||
NgIf,
|
||||
ReactiveFormsModule,
|
||||
TranslateModule,
|
||||
PkcsSignatureConfigurationComponent,
|
||||
KmsSignatureConfigurationComponent,
|
||||
IconButtonComponent,
|
||||
MatDialogClose,
|
||||
CircleButtonComponent,
|
||||
],
|
||||
providers: [DigitalSignatureService],
|
||||
})
|
||||
export class ConfigureCertificateDialogComponent extends BaseDialogComponent {
|
||||
@ViewChild(PkcsSignatureConfigurationComponent) pkcsSignatureConfigurationComponent: PkcsSignatureConfigurationComponent;
|
||||
|
||||
@ -1,20 +1,28 @@
|
||||
import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
|
||||
import { UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { BaseSignatureConfigurationComponent } from '../base-signature-configuration-component';
|
||||
import { DigitalSignatureOptions, IKmsDigitalSignature, IKmsDigitalSignatureRequest } from '@red/domain';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { DigitalSignatureService } from '../../../../services/digital-signature.service';
|
||||
import { UploadFileComponent } from '@iqser/common-ui';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-kms-signature-configuration',
|
||||
templateUrl: './kms-signature-configuration.component.html',
|
||||
styleUrls: ['./kms-signature-configuration.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [UploadFileComponent, ReactiveFormsModule, NgIf, TranslateModule],
|
||||
})
|
||||
export class KmsSignatureConfigurationComponent extends BaseSignatureConfigurationComponent implements OnInit {
|
||||
@Input() digitalSignature!: IKmsDigitalSignatureRequest;
|
||||
|
||||
constructor(protected readonly _digitalSignatureService: DigitalSignatureService, private readonly _formBuilder: UntypedFormBuilder) {
|
||||
constructor(
|
||||
protected readonly _digitalSignatureService: DigitalSignatureService,
|
||||
private readonly _formBuilder: UntypedFormBuilder,
|
||||
) {
|
||||
super(_digitalSignatureService, DigitalSignatureOptions.KMS);
|
||||
}
|
||||
|
||||
|
||||
@ -1,16 +1,21 @@
|
||||
import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
|
||||
import { UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { DigitalSignatureOptions, IPkcsDigitalSignature, IPkcsDigitalSignatureRequest } from '@red/domain';
|
||||
import { lastIndexOfEnd } from '@utils/functions';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { DigitalSignatureService } from '../../../../services/digital-signature.service';
|
||||
import { BaseSignatureConfigurationComponent } from '../base-signature-configuration-component';
|
||||
import { UploadFileComponent } from '@iqser/common-ui';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-pkcs-signature-configuration',
|
||||
templateUrl: './pkcs-signature-configuration.component.html',
|
||||
styleUrls: ['./pkcs-signature-configuration.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [UploadFileComponent, ReactiveFormsModule, NgIf, TranslateModule],
|
||||
})
|
||||
export class PkcsSignatureConfigurationComponent extends BaseSignatureConfigurationComponent implements OnInit {
|
||||
@Input() digitalSignature!: IPkcsDigitalSignatureRequest;
|
||||
|
||||
@ -1,12 +1,16 @@
|
||||
import { Component, Inject } from '@angular/core';
|
||||
import { DefaultColorType } from '@red/domain';
|
||||
import { BaseDialogComponent, IconButtonTypes } from '@iqser/common-ui';
|
||||
import { UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { BaseDialogComponent, CircleButtonComponent, IconButtonComponent, IconButtonTypes } from '@iqser/common-ui';
|
||||
import { ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { defaultColorsTranslations } from '@translations/default-colors-translations';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { DefaultColorsService } from '@services/entity-services/default-colors.service';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
interface IEditColorData {
|
||||
colorKey: DefaultColorType;
|
||||
@ -16,6 +20,8 @@ interface IEditColorData {
|
||||
@Component({
|
||||
templateUrl: './edit-color-dialog.component.html',
|
||||
styleUrls: ['./edit-color-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, TranslateModule, ColorPickerModule, MatIcon, NgIf, IconButtonComponent, CircleButtonComponent],
|
||||
})
|
||||
export class EditColorDialogComponent extends BaseDialogComponent {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
|
||||
@ -1,13 +1,16 @@
|
||||
import { Component, Inject } from '@angular/core';
|
||||
import { Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogClose, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent, CircleButtonComponent, IconButtonComponent } from '@iqser/common-ui';
|
||||
import { ISmtpConfiguration } from '@red/domain';
|
||||
import { getCurrentUser } from '@users/user.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-smtp-auth-dialog',
|
||||
templateUrl: './smtp-auth-dialog.component.html',
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, TranslateModule, IconButtonComponent, CircleButtonComponent, MatDialogClose],
|
||||
})
|
||||
export class SmtpAuthDialogComponent extends BaseDialogComponent {
|
||||
readonly #currentUser = getCurrentUser();
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||
import { MatDialogRef } from '@angular/material/dialog';
|
||||
import { IconButtonTypes } from '@iqser/common-ui';
|
||||
import { IconButtonComponent, IconButtonTypes } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
templateUrl: './upload-dictionary-dialog.component.html',
|
||||
styleUrls: ['./upload-dictionary-dialog.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [IconButtonComponent, TranslateModule],
|
||||
})
|
||||
export class UploadDictionaryDialogComponent {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
|
||||
@ -1,8 +1,17 @@
|
||||
import { Component, inject, OnDestroy, OnInit } from '@angular/core';
|
||||
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { IqserPermissionsService, ListingComponent, listingProvidersFactory, LoadingService, TableColumnConfig } from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
HumanizePipe,
|
||||
IqserListingModule,
|
||||
IqserPermissionsService,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
TableColumnConfig,
|
||||
} from '@iqser/common-ui';
|
||||
import { getCurrentUser, InitialsAvatarComponent } from '@iqser/common-ui/lib/users';
|
||||
import { Audit, IAudit, IAuditResponse, IAuditSearchRequest, User } from '@red/domain';
|
||||
import { RouterHistoryService } from '@services/router-history.service';
|
||||
import { auditCategoriesTranslations } from '@translations/audit-categories-translations';
|
||||
@ -12,6 +21,14 @@ import { Dayjs } from 'dayjs';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { AdminDialogService } from '../../services/admin-dialog.service';
|
||||
import { AuditService } from '../../services/audit.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { PaginationComponent } from '@common-ui/pagination';
|
||||
import { MatFormField, MatSuffix } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { DatePipe } from '@shared/pipes/date.pipe';
|
||||
|
||||
const PAGE_SIZE = 50;
|
||||
|
||||
@ -19,6 +36,27 @@ const PAGE_SIZE = 50;
|
||||
templateUrl: './audit-screen.component.html',
|
||||
styleUrls: ['./audit-screen.component.scss'],
|
||||
providers: listingProvidersFactory(AuditScreenComponent),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
PaginationComponent,
|
||||
ReactiveFormsModule,
|
||||
MatFormField,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
InitialsAvatarComponent,
|
||||
NgIf,
|
||||
MatIcon,
|
||||
MatSuffix,
|
||||
AsyncPipe,
|
||||
DatePipe,
|
||||
HumanizePipe,
|
||||
CircleButtonComponent,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatDatepickerModule,
|
||||
],
|
||||
})
|
||||
export class AuditScreenComponent extends ListingComponent<Audit> implements OnInit, OnDestroy {
|
||||
private _previousFrom: Dayjs;
|
||||
@ -26,7 +64,7 @@ export class AuditScreenComponent extends ListingComponent<Audit> implements OnI
|
||||
readonly ALL_CATEGORIES = 'allCategories';
|
||||
readonly ALL_USERS = _('audit-screen.all-users');
|
||||
readonly translations = auditCategoriesTranslations;
|
||||
readonly form: UntypedFormGroup = this._getForm();
|
||||
readonly form: UntypedFormGroup = this.#getForm();
|
||||
readonly routerHistoryService = inject(RouterHistoryService);
|
||||
readonly permissionsService = inject(IqserPermissionsService);
|
||||
readonly roles = Roles;
|
||||
@ -59,17 +97,17 @@ export class AuditScreenComponent extends ListingComponent<Audit> implements OnI
|
||||
}
|
||||
|
||||
async pageChanged(page: number) {
|
||||
await this._fetchData(page);
|
||||
await this.#fetchData(page);
|
||||
}
|
||||
|
||||
async ngOnInit() {
|
||||
this.sortingService.setSortingOption({ column: 'recordDate', order: 'desc' });
|
||||
await this._fetchData();
|
||||
await this.#fetchData();
|
||||
}
|
||||
|
||||
async filterChange() {
|
||||
if (!this._updateDateFilters(this.form.value)) {
|
||||
await this._fetchData();
|
||||
if (!this.#updateDateFilters(this.form.value)) {
|
||||
await this.#fetchData();
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,7 +115,7 @@ export class AuditScreenComponent extends ListingComponent<Audit> implements OnI
|
||||
this._dialogService.openDialog('auditInfo', { auditEntry: log });
|
||||
}
|
||||
|
||||
private _getForm(): UntypedFormGroup {
|
||||
#getForm(): UntypedFormGroup {
|
||||
return this._formBuilder.group({
|
||||
category: [this.ALL_CATEGORIES],
|
||||
userId: [this.ALL_USERS],
|
||||
@ -86,7 +124,7 @@ export class AuditScreenComponent extends ListingComponent<Audit> implements OnI
|
||||
});
|
||||
}
|
||||
|
||||
private _updateDateFilters(value): boolean {
|
||||
#updateDateFilters(value): boolean {
|
||||
if (applyIntervalConstraints(value, this._previousFrom, this._previousTo, this.form, 'from', 'to')) {
|
||||
return true;
|
||||
}
|
||||
@ -96,7 +134,7 @@ export class AuditScreenComponent extends ListingComponent<Audit> implements OnI
|
||||
return false;
|
||||
}
|
||||
|
||||
private async _fetchData(page?: number) {
|
||||
async #fetchData(page?: number) {
|
||||
this._loadingService.start();
|
||||
const promises = [];
|
||||
const category = this.form.get('category').value;
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialogComponent, IqserUploadFileModule } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialogComponent, UploadFileComponent } from '@iqser/common-ui';
|
||||
import { FileAttributeEncodingTypes, IComponentMapping } from '@red/domain';
|
||||
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatOption } from '@angular/material/autocomplete';
|
||||
import { MatSelect } from '@angular/material/select';
|
||||
import { MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { fileAttributeEncodingTypesTranslations } from '@translations/file-attribute-encoding-types-translations';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { ComponentMappingsService } from '@services/entity-services/component-mappings.service';
|
||||
@ -35,11 +35,12 @@ interface DialogResult {
|
||||
MatFormFieldModule,
|
||||
NgForOf,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
IqserUploadFileModule,
|
||||
MatDialogModule,
|
||||
MatOption,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
IconButtonComponent,
|
||||
UploadFileComponent,
|
||||
],
|
||||
})
|
||||
export class AddEditComponentMappingDialogComponent
|
||||
|
||||
@ -6,6 +6,11 @@ import {
|
||||
LoadingService,
|
||||
IconButtonTypes,
|
||||
IqserDialog,
|
||||
CircleButtonComponent,
|
||||
IqserListingModule,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
IqserAllowDirective,
|
||||
} from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { defaultColorsTranslations } from '@translations/default-colors-translations';
|
||||
@ -19,11 +24,32 @@ import { map, tap } from 'rxjs/operators';
|
||||
import { AddEditComponentMappingDialogComponent } from './add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component';
|
||||
import { AdminDialogService } from '../../services/admin-dialog.service';
|
||||
import { getParam } from '@common-ui/utils';
|
||||
import { DossierTemplateBreadcrumbsComponent } from '../../shared/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { DossierTemplateActionsComponent } from '../../shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { RouterLink } from '@angular/router';
|
||||
import { AdminSideNavComponent } from '../../shared/components/admin-side-nav/admin-side-nav.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './component-mappings-screen.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
providers: listingProvidersFactory(ComponentMappingsScreenComponent),
|
||||
standalone: true,
|
||||
imports: [
|
||||
DossierTemplateBreadcrumbsComponent,
|
||||
AsyncPipe,
|
||||
NgIf,
|
||||
DossierTemplateActionsComponent,
|
||||
CircleButtonComponent,
|
||||
TranslateModule,
|
||||
RouterLink,
|
||||
AdminSideNavComponent,
|
||||
IqserListingModule,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
IqserAllowDirective,
|
||||
],
|
||||
})
|
||||
export class ComponentMappingsScreenComponent extends ListingComponent<ComponentMapping> implements OnInit {
|
||||
tableColumnConfigs: readonly TableColumnConfig<ComponentMapping>[] = [
|
||||
|
||||
@ -1,29 +1,6 @@
|
||||
<section *ngIf="context$ | async as context">
|
||||
<div class="page-header">
|
||||
<redaction-dossier-template-breadcrumbs class="flex-1"></redaction-dossier-template-breadcrumbs>
|
||||
|
||||
<div class="flex-1 actions">
|
||||
<redaction-dossier-template-actions></redaction-dossier-template-actions>
|
||||
|
||||
<iqser-circle-button
|
||||
[routerLink]="['../..']"
|
||||
[tooltip]="'common.close' | translate"
|
||||
icon="iqser:close"
|
||||
tooltipPosition="below"
|
||||
></iqser-circle-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-inner">
|
||||
<div class="overlay-shadow"></div>
|
||||
|
||||
<redaction-admin-side-nav type="dossierTemplates"></redaction-admin-side-nav>
|
||||
|
||||
<div class="content-container">
|
||||
<iqser-table [itemSize]="80" [tableColumnConfigs]="tableColumnConfigs" emptyColumnWidth="2fr"></iqser-table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="content-container" *ngIf="context$ | async as context">
|
||||
<iqser-table [itemSize]="80" [tableColumnConfigs]="tableColumnConfigs" emptyColumnWidth="2fr"></iqser-table>
|
||||
</div>
|
||||
|
||||
<ng-template #tableItemTemplate let-entity="entity">
|
||||
<div>
|
||||
|
||||
@ -1,6 +1,16 @@
|
||||
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { getConfig, IListable, ListingComponent, listingProvidersFactory, LoadingService, TableColumnConfig } from '@iqser/common-ui';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
getConfig,
|
||||
IListable,
|
||||
IqserAllowDirective,
|
||||
IqserListingModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
TableColumnConfig,
|
||||
} from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { DefaultColorTypes, DOSSIER_TEMPLATE_ID, User } from '@red/domain';
|
||||
@ -10,6 +20,8 @@ import { Roles } from '@users/roles';
|
||||
import { combineLatest } from 'rxjs';
|
||||
import { map, tap } from 'rxjs/operators';
|
||||
import { AdminDialogService } from '../../services/admin-dialog.service';
|
||||
import { AsyncPipe, NgIf, NgStyle } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
interface ListItem extends IListable {
|
||||
readonly key: string;
|
||||
@ -21,6 +33,8 @@ interface ListItem extends IListable {
|
||||
styleUrls: ['./default-colors-screen.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
providers: listingProvidersFactory(DefaultColorsScreenComponent),
|
||||
standalone: true,
|
||||
imports: [IqserListingModule, NgStyle, CircleButtonComponent, IqserAllowDirective, TranslateModule, AsyncPipe, NgIf],
|
||||
})
|
||||
export class DefaultColorsScreenComponent extends ListingComponent<ListItem> implements OnInit {
|
||||
readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
|
||||
@ -1,5 +1,13 @@
|
||||
import { ChangeDetectorRef, Component, computed, OnInit, ViewChild } from '@angular/core';
|
||||
import { IconButtonTypes, IqserPermissionsService, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
EmptyStateComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserListingModule,
|
||||
IqserPermissionsService,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { RouterHistoryService } from '@services/router-history.service';
|
||||
import { DigitalSignatureService } from '../../services/digital-signature.service';
|
||||
@ -10,11 +18,24 @@ import { KmsSignatureConfigurationComponent } from '../../dialogs/configure-digi
|
||||
import { DigitalSignatureOptions, IKmsDigitalSignatureRequest, IPkcsDigitalSignatureRequest, User } from '@red/domain';
|
||||
import { Roles } from '@users/roles';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-digital-signature-screen',
|
||||
templateUrl: './digital-signature-screen.component.html',
|
||||
styleUrls: ['./digital-signature-screen.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
EmptyStateComponent,
|
||||
NgIf,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
PkcsSignatureConfigurationComponent,
|
||||
KmsSignatureConfigurationComponent,
|
||||
IconButtonComponent,
|
||||
],
|
||||
})
|
||||
export class DigitalSignatureScreenComponent implements OnInit {
|
||||
@ViewChild(PkcsSignatureConfigurationComponent) pkcsSignatureConfigurationComponent: PkcsSignatureConfigurationComponent;
|
||||
|
||||
@ -2,8 +2,12 @@ import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
defaultDialogConfig,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
InputWithActionComponent,
|
||||
IqserListingModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
@ -20,6 +24,9 @@ import {
|
||||
AddEditDossierAttributeDialogComponent,
|
||||
AddEditDossierAttributeDialogData,
|
||||
} from './add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { TableItemComponent } from './table-item/table-item.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './dossier-attributes-listing-screen.component.html',
|
||||
@ -28,8 +35,20 @@ import {
|
||||
entitiesService: DossierAttributesService,
|
||||
component: DossierAttributesListingScreenComponent,
|
||||
}),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
AsyncPipe,
|
||||
NgIf,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
NgForOf,
|
||||
TableItemComponent,
|
||||
],
|
||||
})
|
||||
export class DossierAttributesListingScreenComponent extends ListingComponent<DossierAttributeConfig> implements OnInit {
|
||||
export default class DossierAttributesListingScreenComponent extends ListingComponent<DossierAttributeConfig> implements OnInit {
|
||||
readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
readonly currentUser = getCurrentUser<User>();
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { DossierAttributesListingScreenComponent } from './dossier-attributes-listing-screen.component';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserRoutes,
|
||||
} from '@iqser/common-ui';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
import { TableItemComponent } from './table-item/table-item.component';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: DossierAttributesListingScreenComponent,
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [DossierAttributesListingScreenComponent, TableItemComponent],
|
||||
imports: [
|
||||
CommonModule,
|
||||
RouterModule.forChild(routes),
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
IqserHelpModeModule,
|
||||
MatTooltipModule,
|
||||
IqserListingModule,
|
||||
],
|
||||
})
|
||||
export class DossierAttributesListingModule {}
|
||||
@ -1,11 +1,17 @@
|
||||
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { DossierAttributeConfig, IDossierAttributeConfig } from '@red/domain';
|
||||
import { dossierAttributeTypesTranslations } from '@translations/dossier-attribute-types-translations';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { CircleButtonComponent } from '@iqser/common-ui';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-table-item [attribute] [canEditDossierAttributes]',
|
||||
templateUrl: './table-item.component.html',
|
||||
styleUrls: ['./table-item.component.scss'],
|
||||
standalone: true,
|
||||
imports: [MatTooltip, TranslateModule, CircleButtonComponent, NgIf],
|
||||
})
|
||||
export class TableItemComponent {
|
||||
readonly translations = dossierAttributeTypesTranslations;
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
import { Component, Inject } from '@angular/core';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { Validators } from '@angular/forms';
|
||||
import { BaseDialogComponent, CircleButtonComponent, IconButtonComponent } from '@iqser/common-ui';
|
||||
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { IDossierState } from '@red/domain';
|
||||
import { DossierStatesService } from '@services/entity-services/dossier-states.service';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
export interface AddEditDossierStateDialogData {
|
||||
readonly dossierState?: IDossierState;
|
||||
@ -14,6 +18,8 @@ export interface AddEditDossierStateDialogData {
|
||||
@Component({
|
||||
templateUrl: './add-edit-dossier-state-dialog.component.html',
|
||||
styleUrls: ['./add-edit-dossier-state-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [TranslateModule, ReactiveFormsModule, ColorPickerModule, MatIcon, NgIf, IconButtonComponent, CircleButtonComponent],
|
||||
})
|
||||
export class AddEditDossierStateDialogComponent extends BaseDialogComponent {
|
||||
readonly type = this.data.dossierState ? 'edit' : 'create';
|
||||
|
||||
@ -1,13 +1,18 @@
|
||||
import { Component, Inject } from '@angular/core';
|
||||
import { DossierState } from '@red/domain';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { FormBuilder } from '@angular/forms';
|
||||
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { combineLatest, firstValueFrom } from 'rxjs';
|
||||
import { DossierStatesService } from '@services/entity-services/dossier-states.service';
|
||||
import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
|
||||
export interface ConfirmDeleteDossierStateDialogData {
|
||||
readonly toBeDeletedState: DossierState;
|
||||
@ -18,6 +23,20 @@ export interface ConfirmDeleteDossierStateDialogData {
|
||||
@Component({
|
||||
templateUrl: './confirm-delete-dossier-state-dialog.component.html',
|
||||
styleUrls: ['./confirm-delete-dossier-state-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
TranslateModule,
|
||||
ReactiveFormsModule,
|
||||
MatCheckbox,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
IconButtonComponent,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
],
|
||||
})
|
||||
export class ConfirmDeleteDossierStateDialogComponent {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
|
||||
@ -1,7 +1,10 @@
|
||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import {
|
||||
defaultDialogConfig,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
InputWithActionComponent,
|
||||
IqserListingModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
@ -21,13 +24,28 @@ import {
|
||||
} from '../add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component';
|
||||
import { SortingOrders } from '@iqser/common-ui/lib/sorting';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { DonutChartComponent } from '@shared/components/donut-chart/donut-chart.component';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DossierStatesTableItemComponent } from '../dossier-states-table-item/dossier-states-table-item.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './dossier-states-listing-screen.component.html',
|
||||
styleUrls: ['./dossier-states-listing-screen.component.scss'],
|
||||
providers: listingProvidersFactory(DossierStatesListingScreenComponent),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
DonutChartComponent,
|
||||
AsyncPipe,
|
||||
NgIf,
|
||||
TranslateModule,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
DossierStatesTableItemComponent,
|
||||
],
|
||||
})
|
||||
export class DossierStatesListingScreenComponent extends ListingComponent<DossierState> implements OnInit, OnDestroy {
|
||||
export default class DossierStatesListingScreenComponent extends ListingComponent<DossierState> implements OnInit, OnDestroy {
|
||||
readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
readonly tableHeaderLabel = _('dossier-states-listing.table-header.title');
|
||||
|
||||
@ -1,62 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { DossierStatesListingScreenComponent } from './dossier-states-listing-screen/dossier-states-listing-screen.component';
|
||||
import { DossierStatesTableItemComponent } from './dossier-states-table-item/dossier-states-table-item.component';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
} from '@iqser/common-ui';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DonutChartComponent } from '@shared/components/donut-chart/donut-chart.component';
|
||||
import { AdminSideNavComponent } from '../../shared/components/admin-side-nav/admin-side-nav.component';
|
||||
import { DossierTemplateActionsComponent } from '../../shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { DossierTemplateBreadcrumbsComponent } from '../../shared/components/dossier-template-breadcrumbs/dossier-template-breadcrumbs.component';
|
||||
import { AddEditDossierStateDialogComponent } from './add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { ConfirmDeleteDossierStateDialogComponent } from './confirm-delete-dossier-state-dialog/confirm-delete-dossier-state-dialog.component';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
DossierStatesListingScreenComponent,
|
||||
DossierStatesTableItemComponent,
|
||||
AddEditDossierStateDialogComponent,
|
||||
ConfirmDeleteDossierStateDialogComponent,
|
||||
],
|
||||
imports: [
|
||||
CommonModule,
|
||||
RouterModule.forChild([
|
||||
{
|
||||
path: '',
|
||||
component: DossierStatesListingScreenComponent,
|
||||
},
|
||||
]),
|
||||
MatDialogModule,
|
||||
CircleButtonComponent,
|
||||
IqserHelpModeModule,
|
||||
MatTooltipModule,
|
||||
IconButtonComponent,
|
||||
TranslateModule,
|
||||
IqserListingModule,
|
||||
DonutChartComponent,
|
||||
AdminSideNavComponent,
|
||||
DossierTemplateActionsComponent,
|
||||
InputWithActionComponent,
|
||||
DossierTemplateBreadcrumbsComponent,
|
||||
ReactiveFormsModule,
|
||||
ColorPickerModule,
|
||||
MatIconModule,
|
||||
MatCheckboxModule,
|
||||
MatSelectModule,
|
||||
],
|
||||
})
|
||||
export class DossierStatesListingModule {}
|
||||
@ -1,6 +1,6 @@
|
||||
import { Component, inject, Input } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { defaultDialogConfig, EntitiesService } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, defaultDialogConfig, EntitiesService } from '@iqser/common-ui';
|
||||
import { DossierState, IDossierState } from '@red/domain';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import {
|
||||
@ -11,11 +11,16 @@ import {
|
||||
ConfirmDeleteDossierStateDialogComponent,
|
||||
ConfirmDeleteDossierStateDialogData,
|
||||
} from '../confirm-delete-dossier-state-dialog/confirm-delete-dossier-state-dialog.component';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-dossier-states-table-item',
|
||||
templateUrl: './dossier-states-table-item.component.html',
|
||||
styleUrls: ['./dossier-states-table-item.component.scss'],
|
||||
standalone: true,
|
||||
imports: [MatTooltip, CircleButtonComponent, TranslateModule, NgIf],
|
||||
})
|
||||
export class DossierStatesTableItemComponent {
|
||||
readonly #dialog = inject(MatDialog);
|
||||
|
||||
@ -1,7 +1,12 @@
|
||||
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IqserListingModule,
|
||||
IqserPermissionsService,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
@ -16,6 +21,9 @@ import { Roles } from '@users/roles';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { AdminDialogService } from '../../../services/admin-dialog.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AsyncPipe } from '@angular/common';
|
||||
import { TableItemComponent } from '../table-item/table-item.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './dossier-templates-listing-screen.component.html',
|
||||
@ -25,8 +33,19 @@ import { AdminDialogService } from '../../../services/admin-dialog.service';
|
||||
entitiesService: DossierTemplatesService,
|
||||
component: DossierTemplatesListingScreenComponent,
|
||||
}),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
CircleButtonComponent,
|
||||
IqserAllowDirective,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
TableItemComponent,
|
||||
],
|
||||
})
|
||||
export class DossierTemplatesListingScreenComponent extends ListingComponent<DossierTemplate> implements OnInit {
|
||||
export default class DossierTemplatesListingScreenComponent extends ListingComponent<DossierTemplate> implements OnInit {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
readonly roles = Roles;
|
||||
readonly currentUser = getCurrentUser<User>();
|
||||
@ -58,7 +77,7 @@ export class DossierTemplatesListingScreenComponent extends ListingComponent<Dos
|
||||
|
||||
openBulkDeleteTemplatesDialog() {
|
||||
return this._dialogService.openDialog('confirm', null, () => {
|
||||
this._loadingService.loadWhile(this._deleteTemplates());
|
||||
this._loadingService.loadWhile(this.#deleteTemplates());
|
||||
});
|
||||
}
|
||||
|
||||
@ -66,7 +85,7 @@ export class DossierTemplatesListingScreenComponent extends ListingComponent<Dos
|
||||
this._dialogService.openDialog('addCloneDossierTemplate', {});
|
||||
}
|
||||
|
||||
private async _deleteTemplates(templateIds = this.listingService.selected.map(d => d.dossierTemplateId)) {
|
||||
async #deleteTemplates(templateIds = this.listingService.selected.map(d => d.dossierTemplateId)) {
|
||||
await firstValueFrom(this._dossierTemplatesService.delete(templateIds));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { TableItemComponent } from './table-item/table-item.component';
|
||||
import { DossierTemplatesListingScreenComponent } from './dossier-templates-listing-screen/dossier-templates-listing-screen.component';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserRoutes,
|
||||
} from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DossierTemplateActionsComponent } from '../../shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
|
||||
const routes: IqserRoutes = [{ path: '', component: DossierTemplatesListingScreenComponent }];
|
||||
|
||||
@NgModule({
|
||||
declarations: [TableItemComponent, DossierTemplatesListingScreenComponent],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
SharedModule,
|
||||
IqserUsersModule,
|
||||
TranslateModule,
|
||||
IqserListingModule,
|
||||
IqserHelpModeModule,
|
||||
DossierTemplateActionsComponent,
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
],
|
||||
})
|
||||
export class DossierTemplatesListingModule {}
|
||||
@ -4,12 +4,21 @@ import { BehaviorSubject, Observable } from 'rxjs';
|
||||
import { DossierTemplateStatsService } from '@services/entity-services/dossier-template-stats.service';
|
||||
import { switchMap } from 'rxjs/operators';
|
||||
import { dossierTemplateStatusTranslations } from '@translations/dossier-template-status-translations';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DossierTemplateActionsComponent } from '../../../shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { InitialsAvatarComponent } from '@common-ui/users';
|
||||
import { DatePipe } from '@shared/pipes/date.pipe';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-table-item [dossierTemplate]',
|
||||
templateUrl: './table-item.component.html',
|
||||
styleUrls: ['./table-item.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MatTooltip, NgIf, AsyncPipe, MatIcon, TranslateModule, DatePipe, DossierTemplateActionsComponent, InitialsAvatarComponent],
|
||||
})
|
||||
export class TableItemComponent implements OnChanges {
|
||||
@Input() dossierTemplate!: DossierTemplate;
|
||||
|
||||
@ -1,41 +1,18 @@
|
||||
<section>
|
||||
<div class="page-header">
|
||||
<redaction-dossier-template-breadcrumbs class="flex-1"></redaction-dossier-template-breadcrumbs>
|
||||
|
||||
<div class="flex-1 actions">
|
||||
<redaction-dossier-template-actions></redaction-dossier-template-actions>
|
||||
|
||||
<iqser-circle-button
|
||||
[routerLink]="['../..']"
|
||||
[tooltip]="'common.close' | translate"
|
||||
icon="iqser:close"
|
||||
tooltipPosition="below"
|
||||
></iqser-circle-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content-inner">
|
||||
<div class="overlay-shadow"></div>
|
||||
|
||||
<redaction-admin-side-nav type="dossierTemplates"></redaction-admin-side-nav>
|
||||
|
||||
<div class="content-container">
|
||||
<iqser-table
|
||||
(noDataAction)="openAddEntityDialog()"
|
||||
[bulkActions]="bulkActions"
|
||||
[headerTemplate]="headerTemplate"
|
||||
[itemSize]="80"
|
||||
[noDataButtonIcon]="'iqser:plus'"
|
||||
[noDataButtonLabel]="'entities-listing.no-data.action' | translate"
|
||||
[noDataText]="'entities-listing.no-data.title' | translate"
|
||||
[noMatchText]="'entities-listing.no-match.title' | translate"
|
||||
[showNoDataButton]="permissionsService.canEditEntities()"
|
||||
[tableColumnConfigs]="tableColumnConfigs"
|
||||
noDataIcon="red:dictionary"
|
||||
></iqser-table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="content-container">
|
||||
<iqser-table
|
||||
(noDataAction)="openAddEntityDialog()"
|
||||
[bulkActions]="bulkActions"
|
||||
[headerTemplate]="headerTemplate"
|
||||
[itemSize]="80"
|
||||
[noDataButtonIcon]="'iqser:plus'"
|
||||
[noDataButtonLabel]="'entities-listing.no-data.action' | translate"
|
||||
[noDataText]="'entities-listing.no-data.title' | translate"
|
||||
[noMatchText]="'entities-listing.no-match.title' | translate"
|
||||
[showNoDataButton]="permissionsService.canEditEntities()"
|
||||
[tableColumnConfigs]="tableColumnConfigs"
|
||||
noDataIcon="red:dictionary"
|
||||
></iqser-table>
|
||||
</div>
|
||||
|
||||
<ng-template #bulkActions>
|
||||
<iqser-circle-button
|
||||
|
||||
@ -1,6 +1,16 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { IconButtonTypes, ListingComponent, listingProvidersFactory, LoadingService, TableColumnConfig } from '@iqser/common-ui';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
InputWithActionComponent,
|
||||
IqserListingModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
TableColumnConfig,
|
||||
} from '@iqser/common-ui';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { Dictionary, DOSSIER_TEMPLATE_ID, DossierTemplateStats } from '@red/domain';
|
||||
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
|
||||
@ -10,11 +20,28 @@ import { PermissionsService } from '@services/permissions.service';
|
||||
import { firstValueFrom, Observable } from 'rxjs';
|
||||
import { tap } from 'rxjs/operators';
|
||||
import { AdminDialogService } from '../../services/admin-dialog.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AsyncPipe, NgIf, NgStyle } from '@angular/common';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
import { RouterLink } from '@angular/router';
|
||||
|
||||
@Component({
|
||||
templateUrl: './entities-listing-screen.component.html',
|
||||
styleUrls: ['./entities-listing-screen.component.scss'],
|
||||
providers: listingProvidersFactory(EntitiesListingScreenComponent),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
NgStyle,
|
||||
AnnotationIconComponent,
|
||||
AsyncPipe,
|
||||
RouterLink,
|
||||
],
|
||||
})
|
||||
export class EntitiesListingScreenComponent extends ListingComponent<Dictionary> implements OnInit {
|
||||
readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
|
||||
@ -1,50 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { DictionaryScreenComponent } from './screens/dictionary/dictionary-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { EntityInfoComponent } from './screens/entity-info/entity-info.component';
|
||||
import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { HasScrollbarDirective, IconButtonComponent, IqserDenyDirective, IqserHelpModeModule } from '@iqser/common-ui';
|
||||
|
||||
const routes: Routes = [
|
||||
{ path: '', redirectTo: 'info', pathMatch: 'full' },
|
||||
{
|
||||
path: 'info',
|
||||
component: EntityInfoComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
{
|
||||
path: 'dictionary',
|
||||
component: DictionaryScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
{
|
||||
path: 'false-positive',
|
||||
component: DictionaryScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
{
|
||||
path: 'false-recommendations',
|
||||
component: DictionaryScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [DictionaryScreenComponent, EntityInfoComponent],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
SharedModule,
|
||||
MonacoEditorModule,
|
||||
TranslateModule,
|
||||
IqserHelpModeModule,
|
||||
IconButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
IqserDenyDirective,
|
||||
],
|
||||
})
|
||||
export class EntitiesModule {}
|
||||
@ -0,0 +1,28 @@
|
||||
import { IqserRoutes } from '@iqser/common-ui';
|
||||
import { EntityInfoComponent } from './screens/entity-info/entity-info.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { DictionaryScreenComponent } from './screens/dictionary/dictionary-screen.component';
|
||||
|
||||
export default [
|
||||
{ path: '', redirectTo: 'info', pathMatch: 'full' },
|
||||
{
|
||||
path: 'info',
|
||||
component: EntityInfoComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
{
|
||||
path: 'dictionary',
|
||||
component: DictionaryScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
{
|
||||
path: 'false-positive',
|
||||
component: DictionaryScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
{
|
||||
path: 'false-recommendations',
|
||||
component: DictionaryScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
] satisfies IqserRoutes;
|
||||
@ -10,11 +10,14 @@ import { Roles } from '@users/roles';
|
||||
import { NGXLogger } from 'ngx-logger';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { getParam, List } from '@iqser/common-ui/lib/utils';
|
||||
import { AsyncPipe } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
templateUrl: './dictionary-screen.component.html',
|
||||
styleUrls: ['./dictionary-screen.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [AsyncPipe, DictionaryManagerComponent],
|
||||
})
|
||||
export class DictionaryScreenComponent implements OnInit {
|
||||
protected readonly currentUser = getCurrentUser<User>();
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { ChangeDetectionStrategy, Component, HostListener, ViewChild } from '@angular/core';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { getConfig, IconButtonTypes } from '@iqser/common-ui';
|
||||
import { getConfig, HasScrollbarDirective, HelpButtonComponent, IconButtonComponent, IconButtonTypes } from '@iqser/common-ui';
|
||||
import { IqserEventTarget } from '@iqser/common-ui/lib/utils';
|
||||
import { Dictionary, DOSSIER_TEMPLATE_ID, ENTITY_TYPE } from '@red/domain';
|
||||
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
|
||||
@ -8,12 +8,26 @@ import { PermissionsService } from '@services/permissions.service';
|
||||
import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component';
|
||||
import { getCurrentUser } from '@users/user.service';
|
||||
import { Observable } from 'rxjs';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-entity-info',
|
||||
templateUrl: './entity-info.component.html',
|
||||
styleUrls: ['./entity-info.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [
|
||||
HasScrollbarDirective,
|
||||
MatIcon,
|
||||
NgIf,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
IconButtonComponent,
|
||||
AddEditEntityComponent,
|
||||
HelpButtonComponent,
|
||||
],
|
||||
})
|
||||
export class EntityInfoComponent {
|
||||
@ViewChild(AddEditEntityComponent) private readonly _addEditEntityComponent: AddEditEntityComponent;
|
||||
|
||||
@ -3,7 +3,7 @@ import { ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { FileAttributeConfigTypes, IFileAttributeConfig } from '@red/domain';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { fileAttributeTypesTranslations } from '@translations/file-attribute-types-translations';
|
||||
import { BaseDialogComponent, CircleButtonComponent, getConfig, IconButtonComponent, IqserHelpModeModule } from '@iqser/common-ui';
|
||||
import { BaseDialogComponent, CircleButtonComponent, getConfig, HelpButtonComponent, IconButtonComponent } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
@ -34,8 +34,8 @@ export interface AddEditFileAttributeDialogData {
|
||||
MatTooltipModule,
|
||||
IconButtonComponent,
|
||||
CircleButtonComponent,
|
||||
IqserHelpModeModule,
|
||||
NgIf,
|
||||
HelpButtonComponent,
|
||||
],
|
||||
})
|
||||
export class AddEditFileAttributeDialogComponent extends BaseDialogComponent {
|
||||
|
||||
@ -1,14 +1,50 @@
|
||||
import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ListingComponent, listingProvidersFactory, TableColumnConfig } from '@iqser/common-ui';
|
||||
import {
|
||||
ChevronButtonComponent,
|
||||
CircleButtonComponent,
|
||||
EditableInputComponent,
|
||||
IqserListingModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
RoundCheckboxComponent,
|
||||
TableColumnConfig,
|
||||
} from '@iqser/common-ui';
|
||||
import { FileAttributeConfigTypes, IField } from '@red/domain';
|
||||
import { fileAttributeTypesTranslations } from '@translations/file-attribute-types-translations';
|
||||
import { MatMenu, MatMenuTrigger } from '@angular/material/menu';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-active-fields-listing',
|
||||
templateUrl: './active-fields-listing.component.html',
|
||||
styleUrls: ['./active-fields-listing.component.scss'],
|
||||
providers: listingProvidersFactory(ActiveFieldsListingComponent),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
CircleButtonComponent,
|
||||
MatMenuTrigger,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
ChevronButtonComponent,
|
||||
MatMenu,
|
||||
EditableInputComponent,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
FormsModule,
|
||||
MatSlideToggle,
|
||||
RoundCheckboxComponent,
|
||||
NgForOf,
|
||||
NgIf,
|
||||
],
|
||||
})
|
||||
export class ActiveFieldsListingComponent extends ListingComponent<IField> implements OnChanges {
|
||||
readonly translations = fileAttributeTypesTranslations;
|
||||
|
||||
@ -1,15 +1,30 @@
|
||||
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
|
||||
import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms';
|
||||
import { AbstractControl, ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import * as Papa from 'papaparse';
|
||||
import { firstValueFrom, Observable } from 'rxjs';
|
||||
import { map, startWith } from 'rxjs/operators';
|
||||
import { IconButtonTypes, ListingComponent, listingProvidersFactory, TableColumnConfig, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
InputWithActionComponent,
|
||||
IqserTranslateModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
TableColumnConfig,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { FileAttributeConfig, FileAttributeConfigTypes, FileAttributeEncodingTypes, IField, IFileAttributesConfig } from '@red/domain';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import { fileAttributeEncodingTypesTranslations } from '@translations/file-attribute-encoding-types-translations';
|
||||
import { trackByFactory } from '@iqser/common-ui/lib/utils';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatAutocomplete, MatAutocompleteTrigger, MatOption } from '@angular/material/autocomplete';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { ActiveFieldsListingComponent } from './active-fields-listing/active-fields-listing.component';
|
||||
|
||||
export interface IFileAttributesCSVImportData {
|
||||
readonly csv: File;
|
||||
@ -22,6 +37,24 @@ export interface IFileAttributesCSVImportData {
|
||||
styleUrls: ['./file-attributes-csv-import-dialog.component.scss'],
|
||||
providers: listingProvidersFactory(),
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserTranslateModule,
|
||||
ReactiveFormsModule,
|
||||
MatFormField,
|
||||
MatAutocompleteTrigger,
|
||||
MatAutocomplete,
|
||||
AsyncPipe,
|
||||
MatOption,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
NgForOf,
|
||||
ActiveFieldsListingComponent,
|
||||
],
|
||||
})
|
||||
export class FileAttributesCsvImportDialogComponent extends ListingComponent<IField> {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
@ -49,7 +82,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
@Inject(MAT_DIALOG_DATA) readonly data: IFileAttributesCSVImportData,
|
||||
) {
|
||||
super();
|
||||
this.form = this._getForm();
|
||||
this.form = this.#getForm();
|
||||
this.readFile();
|
||||
}
|
||||
|
||||
@ -85,7 +118,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
this.parseResult.meta.fields = Object.keys(this.parseResult.data[0]);
|
||||
}
|
||||
|
||||
this.entitiesService.setEntities(this.parseResult.meta.fields.map(field => this._buildAttribute(field)));
|
||||
this.entitiesService.setEntities(this.parseResult.meta.fields.map(field => this.#buildAttribute(field)));
|
||||
this.activeFields = [];
|
||||
|
||||
for (const entity of this.allEntities) {
|
||||
@ -123,7 +156,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
encoding: this.form.get('encoding').value,
|
||||
};
|
||||
});
|
||||
reader.readAsText(this.data.csv, this._mapEncoding(this.form.get('encoding').value));
|
||||
reader.readAsText(this.data.csv, this.#mapEncoding(this.form.get('encoding').value));
|
||||
}
|
||||
|
||||
getSample(csvColumn: string) {
|
||||
@ -213,15 +246,15 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
}, 0);
|
||||
}
|
||||
|
||||
private _getForm(): UntypedFormGroup {
|
||||
#getForm(): UntypedFormGroup {
|
||||
return this._formBuilder.group({
|
||||
filenameMappingColumnHeaderName: ['', [Validators.required, this._autocompleteStringValidator()]],
|
||||
filenameMappingColumnHeaderName: ['', [Validators.required, this.#autocompleteStringValidator()]],
|
||||
delimiter: [undefined, Validators.required],
|
||||
encoding: [this.data.existingConfiguration?.encoding, Validators.required],
|
||||
});
|
||||
}
|
||||
|
||||
private _autocompleteStringValidator(): ValidatorFn {
|
||||
#autocompleteStringValidator(): ValidatorFn {
|
||||
return (control: AbstractControl): { [key: string]: any } | null => {
|
||||
if ((this.parseResult?.meta?.fields || []).indexOf(control.value) !== -1) {
|
||||
return null; /* valid option selected */
|
||||
@ -230,7 +263,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
};
|
||||
}
|
||||
|
||||
private _buildAttribute(csvColumn: string): IField {
|
||||
#buildAttribute(csvColumn: string): IField {
|
||||
const sample = this.getSample(csvColumn);
|
||||
const isNumber = sample && !isNaN(sample);
|
||||
return {
|
||||
@ -244,7 +277,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
};
|
||||
}
|
||||
|
||||
private _mapEncoding(encoding: string) {
|
||||
#mapEncoding(encoding: string) {
|
||||
if (!encoding) {
|
||||
return 'UTF-8';
|
||||
}
|
||||
|
||||
@ -1,47 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { FileAttributesCsvImportDialogComponent } from './file-attributes-csv-import-dialog.component';
|
||||
import { ActiveFieldsListingComponent } from './active-fields-listing/active-fields-listing.component';
|
||||
import {
|
||||
ChevronButtonComponent,
|
||||
CircleButtonComponent,
|
||||
EditableInputComponent,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserListingModule,
|
||||
RoundCheckboxComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatMenuModule } from '@angular/material/menu';
|
||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||
|
||||
@NgModule({
|
||||
declarations: [FileAttributesCsvImportDialogComponent, ActiveFieldsListingComponent],
|
||||
imports: [
|
||||
CommonModule,
|
||||
CircleButtonComponent,
|
||||
TranslateModule,
|
||||
MatDialogModule,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
MatFormFieldModule,
|
||||
MatSelectModule,
|
||||
ReactiveFormsModule,
|
||||
MatAutocompleteModule,
|
||||
MatInputModule,
|
||||
IqserListingModule,
|
||||
MatMenuModule,
|
||||
ChevronButtonComponent,
|
||||
EditableInputComponent,
|
||||
FormsModule,
|
||||
MatSlideToggleModule,
|
||||
RoundCheckboxComponent,
|
||||
],
|
||||
})
|
||||
export class FileAttributesCsvImportDialogModule {}
|
||||
@ -3,12 +3,18 @@ import { Component, ElementRef, OnDestroy, OnInit, TemplateRef, ViewChild } from
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
defaultDialogConfig,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IqserListingModule,
|
||||
largeDialogConfig,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
RoundCheckboxComponent,
|
||||
TableColumnConfig,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
@ -31,13 +37,32 @@ import {
|
||||
FileAttributesCsvImportDialogComponent,
|
||||
IFileAttributesCSVImportData,
|
||||
} from './file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
templateUrl: './file-attributes-listing-screen.component.html',
|
||||
styleUrls: ['./file-attributes-listing-screen.component.scss'],
|
||||
providers: listingProvidersFactory(FileAttributesListingScreenComponent),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
NgForOf,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
AsyncPipe,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IconButtonComponent,
|
||||
MatIcon,
|
||||
MatTooltip,
|
||||
RoundCheckboxComponent,
|
||||
],
|
||||
})
|
||||
export class FileAttributesListingScreenComponent extends ListingComponent<FileAttributeConfig> implements OnInit, OnDestroy {
|
||||
export default class FileAttributesListingScreenComponent extends ListingComponent<FileAttributeConfig> implements OnInit, OnDestroy {
|
||||
@ViewChild('impactedTemplates') private readonly _impactedTemplatesRef: TemplateRef<unknown>;
|
||||
#existingConfiguration: IFileAttributesConfig;
|
||||
@ViewChild('fileInput') private _fileInput: ElementRef;
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { FileAttributesListingScreenComponent } from './file-attributes-listing-screen.component';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserRoutes,
|
||||
RoundCheckboxComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: FileAttributesListingScreenComponent,
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [FileAttributesListingScreenComponent],
|
||||
imports: [
|
||||
CommonModule,
|
||||
RouterModule.forChild(routes),
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserHelpModeModule,
|
||||
IqserAllowDirective,
|
||||
IconButtonComponent,
|
||||
MatIconModule,
|
||||
MatTooltipModule,
|
||||
RoundCheckboxComponent,
|
||||
],
|
||||
})
|
||||
export class FileAttributesListingModule {}
|
||||
@ -1,15 +1,20 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { BaseFormComponent, IqserPermissionsService, LoadingService } from '@iqser/common-ui';
|
||||
import { BaseFormComponent, IconButtonComponent, IqserPermissionsService, LoadingService } from '@iqser/common-ui';
|
||||
import { GeneralSettingsService } from '@services/general-settings.service';
|
||||
import { IGeneralConfiguration } from '@red/domain';
|
||||
import { ConfigService } from '@services/config.service';
|
||||
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { Roles } from '@users/roles';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-general-config-form',
|
||||
templateUrl: './general-config-form.component.html',
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, TranslateModule, NgIf, MatSlideToggle, IconButtonComponent],
|
||||
})
|
||||
export class GeneralConfigFormComponent extends BaseFormComponent implements OnInit {
|
||||
private _initialConfiguration: IGeneralConfiguration;
|
||||
|
||||
@ -2,14 +2,17 @@ import { AfterViewInit, Component, inject, ViewChild } from '@angular/core';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { GeneralConfigFormComponent } from './general-config-form/general-config-form.component';
|
||||
import { SmtpFormComponent } from './smtp-form/smtp-form.component';
|
||||
import { BaseFormComponent } from '@iqser/common-ui';
|
||||
import { BaseFormComponent, IqserListingModule } from '@iqser/common-ui';
|
||||
import { SystemPreferencesFormComponent } from './system-preferences-form/system-preferences-form.component';
|
||||
import { RouterHistoryService } from '../../../../services/router-history.service';
|
||||
import { RouterHistoryService } from '@services/router-history.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-general-config-screen',
|
||||
templateUrl: './general-config-screen.component.html',
|
||||
styleUrls: ['./general-config-screen.component.scss'],
|
||||
standalone: true,
|
||||
imports: [IqserListingModule, GeneralConfigFormComponent, SystemPreferencesFormComponent, SmtpFormComponent, TranslateModule],
|
||||
})
|
||||
export class GeneralConfigScreenComponent extends BaseFormComponent implements AfterViewInit {
|
||||
readonly currentUser = inject(UserService).currentUser;
|
||||
|
||||
@ -1,16 +1,28 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { FormBuilder, Validators } from '@angular/forms';
|
||||
import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { BaseFormComponent, IconButtonTypes, IqserPermissionsService, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
BaseFormComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserPermissionsService,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { ISmtpConfiguration } from '@red/domain';
|
||||
import { Roles } from '@users/roles';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { AdminDialogService } from '../../../services/admin-dialog.service';
|
||||
import { SmtpConfigService } from '../../../services/smtp-config.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-smtp-form',
|
||||
templateUrl: './smtp-form.component.html',
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, TranslateModule, MatSlideToggle, IconButtonComponent, NgIf],
|
||||
})
|
||||
export class SmtpFormComponent extends BaseFormComponent implements OnInit {
|
||||
#initialConfiguration: ISmtpConfiguration;
|
||||
|
||||
@ -1,17 +1,22 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { SystemPreferences } from '@red/domain';
|
||||
import { BaseFormComponent, IqserPermissionsService, LoadingService } from '@iqser/common-ui';
|
||||
import { BaseFormComponent, IconButtonComponent, IqserPermissionsService, LoadingService } from '@iqser/common-ui';
|
||||
import { SystemPreferencesService } from '@services/system-preferences.service';
|
||||
import { systemPreferencesTranslations } from '@translations/system-preferences-translations';
|
||||
import { Roles } from '@users/roles';
|
||||
import { KeysOf } from '@iqser/common-ui/lib/utils';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
|
||||
export type ValueType = 'number' | 'string' | 'boolean';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-system-preferences-form',
|
||||
templateUrl: './system-preferences-form.component.html',
|
||||
standalone: true,
|
||||
imports: [NgIf, ReactiveFormsModule, NgForOf, TranslateModule, MatSlideToggle, IconButtonComponent],
|
||||
})
|
||||
export class SystemPreferencesFormComponent extends BaseFormComponent {
|
||||
#initialConfiguration: SystemPreferences;
|
||||
|
||||
@ -4,6 +4,11 @@ import { type DossierTemplate, type DossierTemplateStats } from '@red/domain';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
import { DossierTemplateStatsService } from '@services/entity-services/dossier-template-stats.service';
|
||||
import { dossierTemplateStatusTranslations } from '@translations/dossier-template-status-translations';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { InitialsAvatarComponent } from '@common-ui/users';
|
||||
import { DatePipe } from '@shared/pipes/date.pipe';
|
||||
|
||||
interface Context {
|
||||
readonly dossierTemplate: DossierTemplate;
|
||||
@ -14,6 +19,8 @@ interface Context {
|
||||
selector: 'redaction-dossier-template-details',
|
||||
templateUrl: './dossier-template-details.component.html',
|
||||
styleUrls: ['./dossier-template-details.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgIf, AsyncPipe, MatIcon, TranslateModule, DatePipe, InitialsAvatarComponent],
|
||||
})
|
||||
export class DossierTemplateDetailsComponent extends ContextComponent<Context> implements OnInit {
|
||||
readonly translations = dossierTemplateStatusTranslations;
|
||||
|
||||
@ -1,5 +1,13 @@
|
||||
import { Component, OnInit, signal, untracked, WritableSignal } from '@angular/core';
|
||||
import { BaseFormComponent, getConfig, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
BaseFormComponent,
|
||||
getConfig,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { DOSSIER_TEMPLATE_ID, type DossierTemplate, IDossierTemplate } from '@red/domain';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
@ -8,9 +16,16 @@ import dayjs, { Dayjs } from 'dayjs';
|
||||
import { HttpStatusCode } from '@angular/common/http';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { applyIntervalConstraints } from '@utils/date-inputs-utils';
|
||||
import { AbstractControl, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { AbstractControl, ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { downloadTypesTranslations } from '@translations/download-types-translations';
|
||||
import { Observable } from 'rxjs';
|
||||
import { DossierTemplateDetailsComponent } from '../dossier-template-details/dossier-template-details.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { SelectComponent } from '@shared/components/select/select.component';
|
||||
|
||||
const downloadTypes = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(type => ({
|
||||
key: type,
|
||||
@ -20,8 +35,21 @@ const downloadTypes = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(t
|
||||
@Component({
|
||||
templateUrl: './dossier-template-info-screen.component.html',
|
||||
styleUrls: ['./dossier-template-info-screen.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
HasScrollbarDirective,
|
||||
ReactiveFormsModule,
|
||||
DossierTemplateDetailsComponent,
|
||||
TranslateModule,
|
||||
MatCheckbox,
|
||||
NgIf,
|
||||
MatDatepickerModule,
|
||||
SelectComponent,
|
||||
IconButtonComponent,
|
||||
MatIcon,
|
||||
],
|
||||
})
|
||||
export class DossierTemplateInfoScreenComponent extends BaseFormComponent implements OnInit {
|
||||
export default class DossierTemplateInfoScreenComponent extends BaseFormComponent implements OnInit {
|
||||
readonly translations = dossierTemplateStatusTranslations;
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
@ -31,10 +59,14 @@ export class DossierTemplateInfoScreenComponent extends BaseFormComponent implem
|
||||
readonly dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
readonly hasValidFrom: WritableSignal<boolean>;
|
||||
readonly hasValidTo: WritableSignal<boolean>;
|
||||
private _previousValidFrom: Dayjs;
|
||||
private _previousValidTo: Dayjs;
|
||||
private _lastValidFrom: Dayjs;
|
||||
private _lastValidTo: Dayjs;
|
||||
#previousValidFrom: Dayjs;
|
||||
#previousValidTo: Dayjs;
|
||||
#lastValidFrom: Dayjs;
|
||||
#lastValidTo: Dayjs;
|
||||
|
||||
get disabled(): boolean {
|
||||
return !this.valid || !this.changed;
|
||||
}
|
||||
|
||||
constructor(
|
||||
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||
@ -50,8 +82,8 @@ export class DossierTemplateInfoScreenComponent extends BaseFormComponent implem
|
||||
this.hasValidFrom = signal(!!this.form.get('validFrom').value);
|
||||
this.hasValidTo = signal(!!this.form.get('validTo').value);
|
||||
|
||||
this._previousValidFrom = this._lastValidFrom = this.form.get('validFrom').value;
|
||||
this._previousValidTo = this._lastValidTo = this.form.get('validTo').value;
|
||||
this.#previousValidFrom = this.#lastValidFrom = this.form.get('validFrom').value;
|
||||
this.#previousValidTo = this.#lastValidTo = this.form.get('validTo').value;
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
@ -62,11 +94,11 @@ export class DossierTemplateInfoScreenComponent extends BaseFormComponent implem
|
||||
if (extremity === 'from') {
|
||||
const prevValue = untracked(this.hasValidFrom);
|
||||
this.hasValidFrom.set(!prevValue);
|
||||
this.form.controls['validFrom'].setValue(!prevValue ? this._lastValidFrom : null);
|
||||
this.form.controls['validFrom'].setValue(!prevValue ? this.#lastValidFrom : null);
|
||||
} else {
|
||||
const prevValue = untracked(this.hasValidTo);
|
||||
this.hasValidTo.set(!prevValue);
|
||||
this.form.controls['validTo'].setValue(!prevValue ? this._lastValidTo : null);
|
||||
this.form.controls['validTo'].setValue(!prevValue ? this.#lastValidTo : null);
|
||||
}
|
||||
this.applyValidityIntervalConstraints();
|
||||
}
|
||||
@ -95,12 +127,12 @@ export class DossierTemplateInfoScreenComponent extends BaseFormComponent implem
|
||||
|
||||
applyValidityIntervalConstraints(): void {
|
||||
const formValue = this.form.value;
|
||||
applyIntervalConstraints(formValue, this._previousValidFrom, this._previousValidTo, this.form, 'validFrom', 'validTo');
|
||||
applyIntervalConstraints(formValue, this.#previousValidFrom, this.#previousValidTo, this.form, 'validFrom', 'validTo');
|
||||
|
||||
this._previousValidFrom = this.form.get('validFrom').value;
|
||||
this._previousValidTo = this.form.get('validTo').value;
|
||||
this._lastValidFrom = this._previousValidFrom || this._lastValidFrom;
|
||||
this._lastValidTo = this._previousValidTo || this._lastValidTo;
|
||||
this.#previousValidFrom = this.form.get('validFrom').value;
|
||||
this.#previousValidTo = this.form.get('validTo').value;
|
||||
this.#lastValidFrom = this.#previousValidFrom || this.#lastValidFrom;
|
||||
this.#lastValidTo = this.#previousValidTo || this.#lastValidTo;
|
||||
}
|
||||
|
||||
#getForm(dossierTemplate: DossierTemplate) {
|
||||
|
||||
@ -1,36 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { DossierTemplateInfoScreenComponent } from './dossier-template-info-screen/dossier-template-info-screen.component';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { CircleButtonComponent, HasScrollbarDirective, IconButtonComponent, IqserHelpModeModule } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { SelectComponent } from '@shared/components/select/select.component';
|
||||
import { DossierTemplateDetailsComponent } from './dossier-template-details/dossier-template-details.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: '',
|
||||
component: DossierTemplateInfoScreenComponent,
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [DossierTemplateInfoScreenComponent, DossierTemplateDetailsComponent],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
SharedModule,
|
||||
IqserUsersModule,
|
||||
TranslateModule,
|
||||
IqserHelpModeModule,
|
||||
HasScrollbarDirective,
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
SelectComponent,
|
||||
],
|
||||
})
|
||||
export class DossierTemplateInfoModule {}
|
||||
@ -1,10 +1,11 @@
|
||||
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
|
||||
import { UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { Justification } from '@red/domain';
|
||||
import { JustificationsService } from '@services/entity-services/justifications.service';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { BaseDialogComponent, CircleButtonComponent, IconButtonComponent } from '@iqser/common-ui';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
interface DialogData {
|
||||
justification?: Justification;
|
||||
@ -14,6 +15,8 @@ interface DialogData {
|
||||
@Component({
|
||||
templateUrl: './add-edit-justification-dialog.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [TranslateModule, ReactiveFormsModule, IconButtonComponent, CircleButtonComponent],
|
||||
})
|
||||
export class AddEditJustificationDialogComponent extends BaseDialogComponent {
|
||||
constructor(
|
||||
|
||||
@ -1,26 +1,42 @@
|
||||
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { IconButtonTypes, ListingComponent, listingProvidersFactory, LoadingService, TableColumnConfig } from '@iqser/common-ui';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserListingModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
TableColumnConfig,
|
||||
} from '@iqser/common-ui';
|
||||
import { SortingOrders } from '@iqser/common-ui/lib/sorting';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { DOSSIER_TEMPLATE_ID, Justification } from '@red/domain';
|
||||
import { JustificationsService } from '@services/entity-services/justifications.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { JustificationsDialogService } from '../justifications-dialog.service';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TableItemComponent } from '../table-item/table-item.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-justifications-screen',
|
||||
templateUrl: './justifications-screen.component.html',
|
||||
styleUrls: ['./justifications-screen.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
providers: listingProvidersFactory<Justification>({
|
||||
entitiesService: JustificationsService,
|
||||
component: JustificationsScreenComponent,
|
||||
}),
|
||||
providers: [
|
||||
...listingProvidersFactory<Justification>({
|
||||
entitiesService: JustificationsService,
|
||||
component: JustificationsScreenComponent,
|
||||
}),
|
||||
JustificationsDialogService,
|
||||
],
|
||||
standalone: true,
|
||||
imports: [IqserListingModule, CircleButtonComponent, NgIf, TableItemComponent, TranslateModule, AsyncPipe, IconButtonComponent],
|
||||
})
|
||||
export class JustificationsScreenComponent extends ListingComponent<Justification> implements OnInit {
|
||||
export default class JustificationsScreenComponent extends ListingComponent<Justification> implements OnInit {
|
||||
readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
readonly tableHeaderLabel = _('justifications-listing.table-header');
|
||||
@ -35,7 +51,6 @@ export class JustificationsScreenComponent extends ListingComponent<Justificatio
|
||||
private readonly _justificationService: JustificationsService,
|
||||
private readonly _loadingService: LoadingService,
|
||||
private readonly _dialogService: JustificationsDialogService,
|
||||
readonly userPreferenceService: UserPreferenceService,
|
||||
readonly permissionsService: PermissionsService,
|
||||
) {
|
||||
super();
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { JustificationsScreenComponent } from './justifications-screen/justifications-screen.component';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { TableItemComponent } from './table-item/table-item.component';
|
||||
import { JustificationsDialogService } from './justifications-dialog.service';
|
||||
import { AddEditJustificationDialogComponent } from './add-edit-justification-dialog/add-edit-justification-dialog.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { CircleButtonComponent, HasScrollbarDirective, IconButtonComponent, IqserListingModule } from '@iqser/common-ui';
|
||||
|
||||
const routes = [{ path: '', component: JustificationsScreenComponent }];
|
||||
|
||||
@NgModule({
|
||||
declarations: [JustificationsScreenComponent, TableItemComponent, AddEditJustificationDialogComponent],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
SharedModule,
|
||||
TranslateModule,
|
||||
IqserListingModule,
|
||||
IconButtonComponent,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
],
|
||||
providers: [JustificationsDialogService],
|
||||
})
|
||||
export class JustificationsModule {}
|
||||
@ -3,11 +3,17 @@ import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { DOSSIER_TEMPLATE_ID, Justification } from '@red/domain';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { JustificationsDialogService } from '../justifications-dialog.service';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { CircleButtonComponent } from '@iqser/common-ui';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-table-item',
|
||||
templateUrl: './table-item.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MatTooltip, CircleButtonComponent, NgIf, TranslateModule],
|
||||
})
|
||||
export class TableItemComponent {
|
||||
readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
import { Component, Input, OnChanges } from '@angular/core';
|
||||
import { ChartConfiguration, ChartDataset } from 'chart.js';
|
||||
import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-chart',
|
||||
templateUrl: './chart.component.html',
|
||||
styleUrls: ['./chart.component.scss'],
|
||||
standalone: true,
|
||||
imports: [BaseChartDirective],
|
||||
providers: [provideCharts(withDefaultRegisterables())],
|
||||
})
|
||||
export class ChartComponent implements OnChanges {
|
||||
@Input({ required: true }) datasets: ChartDataset[];
|
||||
|
||||
@ -8,11 +8,16 @@ import { TranslateService } from '@ngx-translate/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { size } from '@iqser/common-ui/lib/utils';
|
||||
import { ILicenseData } from '@red/domain';
|
||||
import { SizePipe } from '@common-ui/pipes';
|
||||
import { AsyncPipe, DecimalPipe, NgIf } from '@angular/common';
|
||||
import { ChartComponent } from '../chart/chart.component';
|
||||
|
||||
@Component({
|
||||
selector: 'red-license-analysis-capacity-usage',
|
||||
templateUrl: './license-analysis-capacity-usage.component.html',
|
||||
styleUrls: ['./license-analysis-capacity-usage.component.scss'],
|
||||
standalone: true,
|
||||
imports: [SizePipe, DecimalPipe, ChartComponent, AsyncPipe, NgIf],
|
||||
})
|
||||
export class LicenseAnalysisCapacityUsageComponent {
|
||||
readonly data$ = this.licenseService.selectedLicense$.pipe(map(() => this.#getData()));
|
||||
|
||||
@ -4,14 +4,18 @@ import { map } from 'rxjs/operators';
|
||||
import { ChartDataset } from 'chart.js';
|
||||
import { ChartBlue, ChartGreen, ChartRed } from '../../utils/constants';
|
||||
import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonthAndYear } from '../../utils/functions';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ILicenseData } from '@red/domain';
|
||||
import { AsyncPipe, DecimalPipe, NgIf } from '@angular/common';
|
||||
import { ChartComponent } from '../chart/chart.component';
|
||||
|
||||
@Component({
|
||||
selector: 'red-license-page-usage',
|
||||
templateUrl: './license-page-usage.component.html',
|
||||
styleUrls: ['./license-page-usage.component.scss'],
|
||||
standalone: true,
|
||||
imports: [DecimalPipe, TranslateModule, ChartComponent, NgIf, AsyncPipe],
|
||||
})
|
||||
export class LicensePageUsageComponent {
|
||||
readonly data$ = this.licenseService.selectedLicense$.pipe(map(() => this.#getData()));
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||
import { size } from '@iqser/common-ui/lib/utils';
|
||||
import { LicenseService } from '@services/license.service';
|
||||
import { map } from 'rxjs/operators';
|
||||
@ -8,11 +8,17 @@ import { ChartDataset } from 'chart.js';
|
||||
import { ChartBlack, ChartBlue, ChartGreen, ChartGrey, ChartRed } from '../../utils/constants';
|
||||
import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig } from '../../utils/functions';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { SizePipe } from '@common-ui/pipes';
|
||||
import { AsyncPipe, DecimalPipe, NgIf } from '@angular/common';
|
||||
import { DonutChartComponent } from '@shared/components/donut-chart/donut-chart.component';
|
||||
import { ChartComponent } from '../chart/chart.component';
|
||||
|
||||
@Component({
|
||||
selector: 'red-license-retention-capacity',
|
||||
templateUrl: './license-retention-capacity.component.html',
|
||||
styleUrls: ['./license-retention-capacity.component.scss'],
|
||||
standalone: true,
|
||||
imports: [SizePipe, DecimalPipe, NgIf, DonutChartComponent, AsyncPipe, ChartComponent, TranslateModule],
|
||||
})
|
||||
export class LicenseRetentionCapacityComponent {
|
||||
readonly formatSize = size;
|
||||
|
||||
@ -4,6 +4,11 @@ import { ILicense } from '@red/domain';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { map, tap } from 'rxjs/operators';
|
||||
import { LoadingService } from '@iqser/common-ui';
|
||||
import { AsyncPipe, NgForOf, NgIf, NgTemplateOutlet, UpperCasePipe } from '@angular/common';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
const translations = {
|
||||
active: _('license-info-screen.status.active'),
|
||||
@ -14,6 +19,20 @@ const translations = {
|
||||
selector: 'redaction-license-select',
|
||||
templateUrl: './license-select.component.html',
|
||||
styleUrls: ['./license-select.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
AsyncPipe,
|
||||
NgIf,
|
||||
MatFormField,
|
||||
MatSelect,
|
||||
MatSelectTrigger,
|
||||
FormsModule,
|
||||
NgTemplateOutlet,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
TranslateModule,
|
||||
UpperCasePipe,
|
||||
],
|
||||
})
|
||||
export class LicenseSelectComponent {
|
||||
value: ILicense;
|
||||
|
||||
@ -1,16 +1,36 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { getConfig, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { getConfig, IqserListingModule, IqserPermissionsService, SizePipe } from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import type { AppConfig, User } from '@red/domain';
|
||||
import { LicenseService } from '@services/license.service';
|
||||
import { RouterHistoryService } from '@services/router-history.service';
|
||||
import { Roles } from '@users/roles';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { LicenseSelectComponent } from '../components/license-select/license-select.component';
|
||||
import { LicensePageUsageComponent } from '../components/license-page-usage/license-page-usage.component';
|
||||
import { LicenseAnalysisCapacityUsageComponent } from '../components/license-analysis-capacity-usage/license-analysis-capacity-usage.component';
|
||||
import { LicenseRetentionCapacityComponent } from '../components/license-retention-capacity-usage/license-retention-capacity.component';
|
||||
import { DatePipe } from '@shared/pipes/date.pipe';
|
||||
|
||||
@Component({
|
||||
templateUrl: './license-screen.component.html',
|
||||
styleUrls: ['./license-screen.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
LicenseSelectComponent,
|
||||
NgIf,
|
||||
DatePipe,
|
||||
SizePipe,
|
||||
LicensePageUsageComponent,
|
||||
LicenseAnalysisCapacityUsageComponent,
|
||||
LicenseRetentionCapacityComponent,
|
||||
],
|
||||
})
|
||||
export class LicenseScreenComponent {
|
||||
export default class LicenseScreenComponent {
|
||||
protected readonly config = getConfig<AppConfig>();
|
||||
protected readonly roles = Roles;
|
||||
protected readonly currentUser = getCurrentUser<User>();
|
||||
|
||||
@ -1,51 +0,0 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { inject, NgModule } from '@angular/core';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
import { IqserHelpModeModule, IqserListingModule, SizePipe } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { LicenseService } from '@services/license.service';
|
||||
import { DonutChartComponent } from '@shared/components/donut-chart/donut-chart.component';
|
||||
import { BaseChartDirective, provideCharts, withDefaultRegisterables } from 'ng2-charts';
|
||||
import { ChartComponent } from './components/chart/chart.component';
|
||||
import { LicenseAnalysisCapacityUsageComponent } from './components/license-analysis-capacity-usage/license-analysis-capacity-usage.component';
|
||||
import { LicensePageUsageComponent } from './components/license-page-usage/license-page-usage.component';
|
||||
import { LicenseRetentionCapacityComponent } from './components/license-retention-capacity-usage/license-retention-capacity.component';
|
||||
import { LicenseSelectComponent } from './components/license-select/license-select.component';
|
||||
import { LicenseScreenComponent } from './license-screen/license-screen.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: LicenseScreenComponent,
|
||||
resolve: {
|
||||
licenseData: () => inject(LicenseService).loadLicenseData(),
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
LicenseScreenComponent,
|
||||
LicenseSelectComponent,
|
||||
ChartComponent,
|
||||
LicenseRetentionCapacityComponent,
|
||||
LicensePageUsageComponent,
|
||||
LicenseAnalysisCapacityUsageComponent,
|
||||
],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
TranslateModule,
|
||||
MatSelectModule,
|
||||
FormsModule,
|
||||
IqserListingModule,
|
||||
IqserHelpModeModule,
|
||||
SizePipe,
|
||||
DonutChartComponent,
|
||||
BaseChartDirective,
|
||||
],
|
||||
providers: [provideCharts(withDefaultRegisterables())],
|
||||
})
|
||||
export class LicenseModule {}
|
||||
@ -0,0 +1,14 @@
|
||||
import { IqserRoutes } from '@iqser/common-ui';
|
||||
import LicenseScreenComponent from './license-screen/license-screen.component';
|
||||
import { inject } from '@angular/core';
|
||||
import { LicenseService } from '@services/license.service';
|
||||
|
||||
export default [
|
||||
{
|
||||
path: '',
|
||||
component: LicenseScreenComponent,
|
||||
resolve: {
|
||||
licenseData: () => inject(LicenseService).loadLicenseData(),
|
||||
},
|
||||
},
|
||||
] satisfies IqserRoutes;
|
||||
@ -1,6 +1,7 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import {
|
||||
getConfig,
|
||||
IqserListingModule,
|
||||
IqserPermissionsService,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
@ -21,13 +22,18 @@ import { Roles } from '@users/roles';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { SortingOrders } from '@iqser/common-ui/lib/sorting';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
templateUrl: './permissions-screen.component.html',
|
||||
styleUrls: ['./permissions-screen.component.scss'],
|
||||
providers: listingProvidersFactory(PermissionsScreenComponent),
|
||||
standalone: true,
|
||||
imports: [IqserListingModule, NgIf, NgForOf, MatSlideToggle, AsyncPipe, TranslateModule],
|
||||
})
|
||||
export class PermissionsScreenComponent extends ListingComponent<PermissionsMapping> implements OnInit {
|
||||
export default class PermissionsScreenComponent extends ListingComponent<PermissionsMapping> implements OnInit {
|
||||
readonly #config = getConfig();
|
||||
readonly roles = Roles;
|
||||
readonly currentUser = getCurrentUser<User>();
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { PermissionsScreenComponent } from './permissions-screen/permissions-screen.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IqserHelpModeModule, IqserListingModule } from '@iqser/common-ui';
|
||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||
|
||||
const routes = [{ path: '', component: PermissionsScreenComponent }];
|
||||
|
||||
@NgModule({
|
||||
declarations: [PermissionsScreenComponent],
|
||||
imports: [RouterModule.forChild(routes), CommonModule, TranslateModule, IqserListingModule, IqserHelpModeModule, MatSlideToggleModule],
|
||||
})
|
||||
export class PermissionsModule {}
|
||||
@ -1,7 +1,15 @@
|
||||
import { ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
|
||||
import { DOSSIER_TEMPLATE_ID, IPlaceholdersResponse, IReportTemplate, User } from '@red/domain';
|
||||
import { download } from '@utils/file-download-utils';
|
||||
import { getConfig, IConfirmationDialogData, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
getConfig,
|
||||
HasScrollbarDirective,
|
||||
IConfirmationDialogData,
|
||||
IqserAllowDirective,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import {
|
||||
generalPlaceholdersDescriptionsTranslations,
|
||||
@ -15,6 +23,8 @@ import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
||||
import { Roles } from '@users/roles';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
interface Placeholder {
|
||||
placeholder: string;
|
||||
@ -30,8 +40,10 @@ const placeholderTypes: PlaceholderType[] = ['generalPlaceholders', 'fileAttribu
|
||||
templateUrl: './reports-screen.component.html',
|
||||
styleUrls: ['./reports-screen.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [HasScrollbarDirective, NgIf, NgForOf, AsyncPipe, TranslateModule, CircleButtonComponent, IqserAllowDirective],
|
||||
})
|
||||
export class ReportsScreenComponent implements OnInit {
|
||||
export default class ReportsScreenComponent implements OnInit {
|
||||
@ViewChild('fileInput') private readonly _fileInput: ElementRef;
|
||||
readonly placeholders$ = new BehaviorSubject<Placeholder[]>([]);
|
||||
readonly availableTemplates$ = new BehaviorSubject<IReportTemplate[]>([]);
|
||||
|
||||
@ -1,22 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { ReportsScreenComponent } from './reports-screen/reports-screen.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { CircleButtonComponent, HasScrollbarDirective, IqserAllowDirective, IqserHelpModeModule, IqserRoutes } from '@iqser/common-ui';
|
||||
|
||||
const routes: IqserRoutes = [{ path: '', component: ReportsScreenComponent }];
|
||||
|
||||
@NgModule({
|
||||
declarations: [ReportsScreenComponent],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
TranslateModule,
|
||||
IqserHelpModeModule,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
IqserAllowDirective,
|
||||
],
|
||||
})
|
||||
export class ReportsModule {}
|
||||
@ -1,6 +1,6 @@
|
||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, OnChanges, OnInit, signal, SimpleChanges } from '@angular/core';
|
||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, OnInit, signal } from '@angular/core';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { IconButtonComponent, IconButtonTypes, IqserTranslateModule, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { RulesService } from '../../../services/rules.service';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { DOSSIER_TEMPLATE_ID, DroolsKeywords, IRules } from '@red/domain';
|
||||
@ -12,6 +12,10 @@ import { rulesScreenTranslations } from '../../../translations/rules-screen-tran
|
||||
import ICodeEditor = monaco.editor.ICodeEditor;
|
||||
import IModelDeltaDecoration = monaco.editor.IModelDeltaDecoration;
|
||||
import IStandaloneEditorConstructionOptions = monaco.editor.IStandaloneEditorConstructionOptions;
|
||||
import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
interface SyntaxError {
|
||||
line: number;
|
||||
@ -32,8 +36,10 @@ const RULE_VALIDATION_TIMEOUT = 2000;
|
||||
templateUrl: './rules-screen.component.html',
|
||||
styleUrls: ['./rules-screen.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MonacoEditorModule, MatIcon, FormsModule, IqserTranslateModule, IconButtonComponent, NgIf],
|
||||
})
|
||||
export class RulesScreenComponent implements OnInit, ComponentCanDeactivate {
|
||||
export default class RulesScreenComponent implements OnInit, ComponentCanDeactivate {
|
||||
readonly translations = rulesScreenTranslations;
|
||||
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { RulesScreenComponent } from './rules-screen/rules-screen.component';
|
||||
import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IconButtonComponent } from '@iqser/common-ui';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
|
||||
const routes = [{ path: '', component: RulesScreenComponent, canDeactivate: [PendingChangesGuard] }];
|
||||
|
||||
@NgModule({
|
||||
declarations: [RulesScreenComponent],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
MonacoEditorModule,
|
||||
TranslateModule,
|
||||
IconButtonComponent,
|
||||
FormsModule,
|
||||
MatIconModule,
|
||||
],
|
||||
})
|
||||
export class RulesModule {}
|
||||
@ -1,8 +1,16 @@
|
||||
import { AsyncPipe, NgClass, NgIf } from '@angular/common';
|
||||
import { Component, inject, OnInit } from '@angular/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { InitialsAvatarComponent } from '@common-ui/users';
|
||||
import {
|
||||
ButtonConfig,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
IconButtonTypes,
|
||||
IqserAllowDirective,
|
||||
IqserListingModule,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
LoadingService,
|
||||
@ -10,7 +18,7 @@ import {
|
||||
TableColumnConfig,
|
||||
} from '@iqser/common-ui';
|
||||
import { NestedFilter } from '@iqser/common-ui/lib/filtering';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||
import { DonutChartConfig, User, UserTypes } from '@red/domain';
|
||||
import { RouterHistoryService } from '@services/router-history.service';
|
||||
import { TranslateChartService } from '@services/translate-chart.service';
|
||||
@ -20,6 +28,8 @@ import { UserService } from '@users/user.service';
|
||||
import { firstValueFrom, Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { userTypeChecker, userTypeFilters } from '../../../../utils';
|
||||
import { UsersStatsComponent } from '../../components/users-stats/users-stats.component';
|
||||
import { AddEditUserDialogComponent } from '../../dialogs/add-edit-user-dialog/add-edit-user-dialog.component';
|
||||
import { AdminDialogService } from '../../services/admin-dialog.service';
|
||||
|
||||
function configToFilter({ key, label }: DonutChartConfig) {
|
||||
@ -36,6 +46,21 @@ function configToFilter({ key, label }: DonutChartConfig) {
|
||||
entitiesService: UserService,
|
||||
component: UserListingScreenComponent,
|
||||
}),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
UsersStatsComponent,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
NgIf,
|
||||
AsyncPipe,
|
||||
InitialsAvatarComponent,
|
||||
MatSlideToggle,
|
||||
MatIcon,
|
||||
NgClass,
|
||||
IqserAllowDirective,
|
||||
],
|
||||
})
|
||||
export class UserListingScreenComponent extends ListingComponent<User> implements OnInit {
|
||||
readonly routerHistoryService = inject(RouterHistoryService);
|
||||
@ -88,7 +113,7 @@ export class UserListingScreenComponent extends ListingComponent<User> implement
|
||||
}
|
||||
|
||||
openAddEditUserDialog(user?: User) {
|
||||
this._dialogService.openDialog('addEditUser', user, async () => {
|
||||
this._dialogService.open(AddEditUserDialogComponent, user, { autoFocus: true }, async () => {
|
||||
await this.#loadData();
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,9 +1,12 @@
|
||||
import { Component, EventEmitter, Output } from '@angular/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-paginator',
|
||||
templateUrl: './paginator.component.html',
|
||||
styleUrls: ['./paginator.component.scss'],
|
||||
standalone: true,
|
||||
imports: [MatIcon],
|
||||
})
|
||||
export class PaginatorComponent {
|
||||
@Output() readonly changePage = new EventEmitter<number>();
|
||||
|
||||
@ -1,10 +1,18 @@
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { ChangeDetectorRef, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
||||
import { Router } from '@angular/router';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { environment } from '@environments/environment';
|
||||
import { getConfig, IconButtonTypes, IqserPermissionsService, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
getConfig,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserPermissionsService,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { AsControl, Debounce, getParam, trackByFactory, UI_ROOT_PATH_FN } from '@iqser/common-ui/lib/utils';
|
||||
import WebViewer, { WebViewerInstance } from '@pdftron/webviewer';
|
||||
@ -31,6 +39,13 @@ import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { stampPDFPage } from '@utils/page-stamper';
|
||||
import { BehaviorSubject, firstValueFrom, Observable, of } from 'rxjs';
|
||||
import { tap } from 'rxjs/operators';
|
||||
import { PaginatorComponent } from '../paginator/paginator.component';
|
||||
import { AsyncPipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MatSlider, MatSliderThumb } from '@angular/material/slider';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
|
||||
export const DEFAULT_WATERMARK: Partial<IWatermark> = {
|
||||
text: 'Watermark',
|
||||
@ -59,6 +74,23 @@ interface WatermarkForm {
|
||||
@Component({
|
||||
templateUrl: './watermark-screen.component.html',
|
||||
styleUrls: ['./watermark-screen.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
PaginatorComponent,
|
||||
NgIf,
|
||||
IconButtonComponent,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
ReactiveFormsModule,
|
||||
HasScrollbarDirective,
|
||||
NgForOf,
|
||||
NgClass,
|
||||
MatTooltip,
|
||||
MatIcon,
|
||||
MatSlider,
|
||||
ColorPickerModule,
|
||||
MatSliderThumb,
|
||||
],
|
||||
})
|
||||
export class WatermarkScreenComponent implements OnInit {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
|
||||
@ -1,77 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { WatermarkScreenComponent } from './watermark-screen/watermark-screen.component';
|
||||
import { WatermarksListingScreenComponent } from './watermarks-listing/watermarks-listing-screen.component';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
CompositeRouteGuard,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IqserAllowDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserRoutes,
|
||||
} from '@iqser/common-ui';
|
||||
import { RedRoleGuard } from '@users/red-role.guard';
|
||||
import { WATERMARK_ID } from '@red/domain';
|
||||
import { watermarkExistsGuard } from '@guards/watermark-exists.guard';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { PaginatorComponent } from './paginator/paginator.component';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatSliderModule } from '@angular/material/slider';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||
import { IqserAuthGuard, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: WatermarksListingScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
component: WatermarkScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: `:${WATERMARK_ID}`,
|
||||
component: WatermarkScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, watermarkExistsGuard()],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [WatermarkScreenComponent, WatermarksListingScreenComponent, PaginatorComponent],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
IqserUsersModule,
|
||||
TranslateModule,
|
||||
IqserListingModule,
|
||||
IqserHelpModeModule,
|
||||
MatIconModule,
|
||||
IconButtonComponent,
|
||||
ReactiveFormsModule,
|
||||
MatSliderModule,
|
||||
ColorPickerModule,
|
||||
MatSlideToggleModule,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
IqserAllowDirective,
|
||||
MatTooltipModule,
|
||||
],
|
||||
})
|
||||
export class WatermarkModule {}
|
||||
@ -0,0 +1,34 @@
|
||||
import { WatermarksListingScreenComponent } from './watermarks-listing/watermarks-listing-screen.component';
|
||||
import { CompositeRouteGuard, IqserRoutes } from '@iqser/common-ui';
|
||||
import { IqserAuthGuard } from '@common-ui/users';
|
||||
import { RedRoleGuard } from '@users/red-role.guard';
|
||||
import { WatermarkScreenComponent } from './watermark-screen/watermark-screen.component';
|
||||
import { WATERMARK_ID } from '@red/domain';
|
||||
import { watermarkExistsGuard } from '@guards/watermark-exists.guard';
|
||||
|
||||
export default [
|
||||
{
|
||||
path: '',
|
||||
component: WatermarksListingScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
component: WatermarkScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: `:${WATERMARK_ID}`,
|
||||
component: WatermarkScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, watermarkExistsGuard()],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
] satisfies IqserRoutes;
|
||||
@ -1,8 +1,12 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IConfirmationDialogData,
|
||||
IqserAllowDirective,
|
||||
IqserListingModule,
|
||||
IqserPermissionsService,
|
||||
ListingComponent,
|
||||
listingProvidersFactory,
|
||||
@ -10,18 +14,36 @@ import {
|
||||
TableColumnConfig,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { getCurrentUser, InitialsAvatarComponent } from '@iqser/common-ui/lib/users';
|
||||
import { getParam } from '@iqser/common-ui/lib/utils';
|
||||
import { DOSSIER_TEMPLATE_ID, User, Watermark } from '@red/domain';
|
||||
import { WatermarkService } from '@services/entity-services/watermark.service';
|
||||
import { WatermarksMapService } from '@services/entity-services/watermarks-map.service';
|
||||
import { Roles } from '@users/roles';
|
||||
import { AdminDialogService } from '../../../services/admin-dialog.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { RouterLink } from '@angular/router';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { AsyncPipe } from '@angular/common';
|
||||
import { DatePipe } from '@shared/pipes/date.pipe';
|
||||
|
||||
@Component({
|
||||
templateUrl: './watermarks-listing-screen.component.html',
|
||||
styleUrls: ['./watermarks-listing-screen.component.scss'],
|
||||
providers: listingProvidersFactory(WatermarksListingScreenComponent),
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
IconButtonComponent,
|
||||
IqserAllowDirective,
|
||||
RouterLink,
|
||||
MatSlideToggle,
|
||||
InitialsAvatarComponent,
|
||||
CircleButtonComponent,
|
||||
AsyncPipe,
|
||||
DatePipe,
|
||||
],
|
||||
})
|
||||
export class WatermarksListingScreenComponent extends ListingComponent<Watermark> implements OnInit {
|
||||
readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
|
||||
@ -1,9 +1,6 @@
|
||||
import { Injectable, TemplateRef } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { AddEntityDialogComponent } from '../dialogs/add-entity-dialog/add-entity-dialog.component';
|
||||
import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component';
|
||||
import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component';
|
||||
import { AddEditUserDialogComponent } from '../dialogs/add-edit-user-dialog/add-edit-user-dialog.component';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import {
|
||||
ConfirmationDialogComponent,
|
||||
ConfirmOptions,
|
||||
@ -13,29 +10,30 @@ import {
|
||||
LoadingService,
|
||||
TitleColors,
|
||||
} from '@iqser/common-ui';
|
||||
import { UploadDictionaryDialogComponent } from '../dialogs/upload-dictionary-dialog/upload-dictionary-dialog.component';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { firstValueFrom, forkJoin } from 'rxjs';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { IDossierAttributeConfig, IFileAttributeConfig, IReportTemplate } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { ReportTemplateService } from '@services/report-template.service';
|
||||
import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component';
|
||||
import { AuditInfoDialogComponent } from '../dialogs/audit-info-dialog/audit-info-dialog.component';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { firstValueFrom, forkJoin } from 'rxjs';
|
||||
import { AddCloneDossierTemplateDialogComponent } from '../dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component';
|
||||
import { AddEntityDialogComponent } from '../dialogs/add-entity-dialog/add-entity-dialog.component';
|
||||
import { AuditInfoDialogComponent } from '../dialogs/audit-info-dialog/audit-info-dialog.component';
|
||||
import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component';
|
||||
import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component';
|
||||
import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component';
|
||||
import { UploadDictionaryDialogComponent } from '../dialogs/upload-dictionary-dialog/upload-dictionary-dialog.component';
|
||||
|
||||
type DialogType =
|
||||
| 'confirm'
|
||||
| 'addEntity'
|
||||
| 'editColor'
|
||||
| 'addEditUser'
|
||||
| 'smtpAuthConfig'
|
||||
| 'addCloneDossierTemplate'
|
||||
| 'auditInfo'
|
||||
| 'uploadDictionary'
|
||||
| 'configureCertificate';
|
||||
|
||||
@Injectable()
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class AdminDialogService extends DialogService<DialogType> {
|
||||
protected readonly _config: DialogConfig<DialogType> = {
|
||||
confirm: {
|
||||
@ -50,10 +48,6 @@ export class AdminDialogService extends DialogService<DialogType> {
|
||||
component: EditColorDialogComponent,
|
||||
dialogConfig: { autoFocus: true },
|
||||
},
|
||||
addEditUser: {
|
||||
component: AddEditUserDialogComponent,
|
||||
dialogConfig: { autoFocus: true },
|
||||
},
|
||||
smtpAuthConfig: {
|
||||
component: SmtpAuthDialogComponent,
|
||||
dialogConfig: { autoFocus: true },
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user