RED-9321: refactored submodules of admin to standalone components.
This commit is contained in:
parent
5cd5c39916
commit
3d7dca1f43
@ -1,4 +1,4 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { inject, 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';
|
||||
@ -20,148 +20,157 @@ 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 { LicenseService } from '@services/license.service';
|
||||
|
||||
const entityRoutes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
children: [{ path: '', component: EntitiesListingScreenComponent }],
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: `:${ENTITY_TYPE}`,
|
||||
loadChildren: () => import('./screens/entities/entities.module').then(m => m.EntitiesModule),
|
||||
component: BaseEntityScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, entityExistsGuard()],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
{
|
||||
path: 'info',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
loadChildren: () => import('./screens/info/dossier-template-info.module').then(m => m.DossierTemplateInfoModule),
|
||||
path: 'entities',
|
||||
children: entityRoutes,
|
||||
},
|
||||
{
|
||||
path: 'entities',
|
||||
path: '',
|
||||
component: BaseDossierTemplateScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
component: EntitiesListingScreenComponent,
|
||||
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',
|
||||
},
|
||||
},
|
||||
{
|
||||
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',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'component-mappings',
|
||||
component: ComponentMappingsScreenComponent,
|
||||
canActivate: [CompositeRouteGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: `:${ENTITY_TYPE}`,
|
||||
component: BaseEntityScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, entityExistsGuard()],
|
||||
loadChildren: () => import('./screens/entities/entities.module').then(m => m.EntitiesModule),
|
||||
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.module').then(m => m.WatermarkModule),
|
||||
},
|
||||
{
|
||||
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',
|
||||
},
|
||||
},
|
||||
},
|
||||
{ path: '', redirectTo: 'info', pathMatch: 'full' },
|
||||
],
|
||||
},
|
||||
{
|
||||
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,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
loadComponent: () =>
|
||||
import(
|
||||
'./screens/dossier-templates-listing/dossier-templates-listing-screen/dossier-templates-listing-screen.component'
|
||||
),
|
||||
},
|
||||
],
|
||||
canActivate: [IqserAuthGuard],
|
||||
loadChildren: () =>
|
||||
import('./screens/dossier-templates-listing/dossier-templates-listing.module').then(m => m.DossierTemplatesListingModule),
|
||||
},
|
||||
{
|
||||
path: `:${DOSSIER_TEMPLATE_ID}`,
|
||||
@ -171,7 +180,6 @@ const dossierTemplatesRoutes: IqserRoutes = [
|
||||
];
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
|
||||
{
|
||||
path: 'dossier-templates',
|
||||
children: dossierTemplatesRoutes,
|
||||
@ -186,101 +194,85 @@ const routes: IqserRoutes = [
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'users',
|
||||
path: '',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
path: 'users',
|
||||
component: UserListingScreenComponent,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.users.read, 'RED_USER_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
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: '',
|
||||
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',
|
||||
loadComponent: () => import('./screens/license/license-screen/license-screen.component'),
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.license.readReport, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
licenseData: () => inject(LicenseService).loadLicenseData(),
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'digital-signature',
|
||||
component: DigitalSignatureScreenComponent,
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.digitalSignature.read, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.digitalSignature.read, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'audit',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
path: 'audit',
|
||||
component: AuditScreenComponent,
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.searchAudit, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
canActivate: [IqserAuthGuard, IqserPermissionsGuard, RedRoleGuard],
|
||||
data: {
|
||||
permissions: {
|
||||
allow: [Roles.searchAudit, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'general-config',
|
||||
component: BaseAdminScreenComponent,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
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: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
|
||||
],
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [PendingChangesGuard],
|
||||
data: {
|
||||
routeGuards: [IqserAuthGuard, RedRoleGuard],
|
||||
permissions: {
|
||||
allow: [Roles.generalConfiguration.read, Roles.smtp.read, 'RED_ADMIN'],
|
||||
redirectTo: '/',
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 } from '@angular/material/select';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
|
||||
export interface ConfirmDeleteDossierStateDialogData {
|
||||
readonly toBeDeletedState: DossierState;
|
||||
@ -18,6 +23,19 @@ 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,
|
||||
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,20 @@ 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, DatePipe, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IqserUsersModule } from '@common-ui/users';
|
||||
import { DossierTemplateActionsComponent } from '../../../shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
|
||||
@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, IqserUsersModule, DatePipe, DossierTemplateActionsComponent],
|
||||
})
|
||||
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,14 +1,49 @@
|
||||
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 } 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,
|
||||
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 } from '@angular/material/select';
|
||||
import { ActiveFieldsListingComponent } from './active-fields-listing/active-fields-listing.component';
|
||||
|
||||
export interface IFileAttributesCSVImportData {
|
||||
readonly csv: File;
|
||||
@ -22,6 +37,23 @@ 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,
|
||||
MatSelect,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
InputWithActionComponent,
|
||||
IconButtonComponent,
|
||||
NgForOf,
|
||||
ActiveFieldsListingComponent,
|
||||
],
|
||||
})
|
||||
export class FileAttributesCsvImportDialogComponent extends ListingComponent<IField> {
|
||||
readonly iconButtonTypes = IconButtonTypes;
|
||||
|
||||
@ -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 {}
|
||||
@ -4,7 +4,7 @@ import { GeneralConfigFormComponent } from './general-config-form/general-config
|
||||
import { SmtpFormComponent } from './smtp-form/smtp-form.component';
|
||||
import { BaseFormComponent } 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';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-general-config-screen',
|
||||
|
||||
@ -4,6 +4,10 @@ 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, DatePipe, NgIf } from '@angular/common';
|
||||
import { IqserUsersModule } from '@common-ui/users';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
interface Context {
|
||||
readonly dossierTemplate: DossierTemplate;
|
||||
@ -14,6 +18,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, IqserUsersModule, MatIcon, TranslateModule, DatePipe],
|
||||
})
|
||||
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,35 @@
|
||||
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, DatePipe, 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';
|
||||
|
||||
@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 {}
|
||||
@ -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 {}
|
||||
Loading…
x
Reference in New Issue
Block a user