Pull request #138: Refactor in separate modules + lazy loading

Merge in RED/ui from modules-refactoring to master

* commit 'a4c8e4dd4ba2d0f5e928787f53a0d7da61edc3f7':
  Fixed services
  Refactor in separate modules + lazy loading
This commit is contained in:
Timo Bejan 2021-03-29 08:54:14 +02:00
commit d2bbe7e224
277 changed files with 1107 additions and 1051 deletions

View File

@ -1,29 +1,14 @@
import { AuthErrorComponent } from './screens/auth-error/auth-error.component';
import { AuthGuard } from './auth/auth.guard';
import { PdfViewerScreenComponent } from './screens/pdf-viewer-screen/pdf-viewer-screen.component';
import { CompositeRouteGuard } from './utils/composite-route.guard';
import { RedRoleGuard } from './auth/red-role.guard';
import { HtmlDebugScreenComponent } from './screens/html-debug-screen/html-debug-screen.component';
import { BaseScreenComponent } from './screens/base-screen/base-screen.component';
import { ProjectListingScreenComponent } from './screens/project-listing-screen/project-listing-screen.component';
import { AppStateGuard } from './state/app-state.guard';
import { ProjectOverviewScreenComponent } from './screens/project-overview-screen/project-overview-screen.component';
import { FilePreviewScreenComponent } from './screens/file/file-preview-screen/file-preview-screen.component';
import { DownloadsListScreenComponent } from './screens/downloads-list-screen/downloads-list-screen.component';
import { RuleSetsListingScreenComponent } from './screens/admin/rule-sets-listing-screen/rule-sets-listing-screen.component';
import { DictionaryListingScreenComponent } from './screens/admin/dictionary-listing-screen/dictionary-listing-screen.component';
import { DictionaryOverviewScreenComponent } from './screens/admin/dictionary-overview-screen/dictionary-overview-screen.component';
import { PendingChangesGuard } from './utils/can-deactivate.guard';
import { RulesScreenComponent } from './screens/admin/rules-screen/rules-screen.component';
import { FileAttributesListingScreenComponent } from './screens/admin/file-attributes-listing-screen/file-attributes-listing-screen.component';
import { WatermarkScreenComponent } from './screens/admin/watermark-screen/watermark-screen.component';
import { DefaultColorsScreenComponent } from './screens/admin/default-colors-screen/default-colors-screen.component';
import { UserListingScreenComponent } from './screens/admin/user-listing-screen/user-listing-screen.component';
import { LicenseInformationScreenComponent } from './screens/admin/license-information-screen/license-information-screen.component';
import { DigitalSignatureScreenComponent } from './screens/admin/digital-signature-screen/digital-signature-screen.component';
import { AuditScreenComponent } from './screens/admin/audit-screen/audit-screen.component';
import { AuthErrorComponent } from './components/auth-error/auth-error.component';
import { AuthGuard } from './modules/auth/auth.guard';
import { PdfViewerScreenComponent } from './components/pdf-viewer-screen/pdf-viewer-screen.component';
import { CompositeRouteGuard } from './guards/composite-route.guard';
import { RedRoleGuard } from './modules/auth/red-role.guard';
import { HtmlDebugScreenComponent } from './components/html-debug-screen/html-debug-screen.component';
import { BaseScreenComponent } from './components/base-screen/base-screen.component';
import { RouterModule } from '@angular/router';
import { NgModule } from '@angular/core';
import { DownloadsListScreenComponent } from './components/downloads-list-screen/downloads-list-screen.component';
import { AppStateGuard } from './state/app-state.guard';
const routes = [
{
@ -52,156 +37,23 @@ const routes = [
routeGuards: [AuthGuard, RedRoleGuard]
}
},
{
path: 'ui',
path: 'ui/admin',
component: BaseScreenComponent,
children: [
{
path: 'projects',
component: ProjectListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'projects/:projectId',
component: ProjectOverviewScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'projects/:projectId/file/:fileId',
component: FilePreviewScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'downloads',
component: DownloadsListScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'admin',
children: [
{ path: '', redirectTo: 'project-templates', pathMatch: 'full' },
{
path: 'project-templates',
children: [
{
path: '',
component: RuleSetsListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: ':ruleSetId',
children: [
{
path: 'dictionaries',
children: [
{
path: '',
component: DictionaryListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: ':type',
component: DictionaryOverviewScreenComponent,
canActivate: [CompositeRouteGuard],
canDeactivate: [PendingChangesGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
}
]
},
{
path: 'rules',
component: RulesScreenComponent,
canActivate: [CompositeRouteGuard],
canDeactivate: [PendingChangesGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'file-attributes',
component: FileAttributesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'watermark',
component: WatermarkScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'default-colors',
component: DefaultColorsScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{ path: '', redirectTo: 'dictionaries', pathMatch: 'full' }
]
}
]
},
{
path: 'users',
component: UserListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'license-info',
component: LicenseInformationScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'digital-signature',
component: DigitalSignatureScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'audit',
component: AuditScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
}
]
}
]
loadChildren: () => import('./modules/admin/admin.module').then((m) => m.AdminModule)
},
{
path: 'ui/projects',
component: BaseScreenComponent,
loadChildren: () => import('./modules/projects/projects.module').then((m) => m.ProjectsModule)
},
{
path: 'downloads',
component: DownloadsListScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
}
];

View File

@ -1,5 +1,5 @@
import { Component, ViewContainerRef } from '@angular/core';
import { AppLoadStateService } from './utils/app-load-state.service';
import { AppLoadStateService } from './services/app-load-state.service';
declare var ace;

View File

@ -3,243 +3,57 @@ import { APP_INITIALIZER, NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { ActivatedRoute, Router } from '@angular/router';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';
import { BaseScreenComponent } from './screens/base-screen/base-screen.component';
import { ProjectListingScreenComponent } from './screens/project-listing-screen/project-listing-screen.component';
import { ProjectOverviewScreenComponent } from './screens/project-overview-screen/project-overview-screen.component';
import { MatToolbarModule } from '@angular/material/toolbar';
import { BaseScreenComponent } from './components/base-screen/base-screen.component';
import { ApiModule } from '@redaction/red-ui-http';
import { ApiPathInterceptorService } from './interceptor/api-path-interceptor.service';
import { MatButtonModule } from '@angular/material/button';
import { ApiPathInterceptor } from './utils/api-path-interceptor';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { MatMenuModule } from '@angular/material/menu';
import { languageInitializer } from './i18n/language.initializer';
import { LanguageService } from './i18n/language.service';
import { MomentDateAdapter } from '@angular/material-moment-adapter';
import { MatIconModule } from '@angular/material/icon';
import { IconsModule } from './icons/icons.module';
import { AddEditProjectDialogComponent } from './dialogs/add-edit-project-dialog/add-edit-project-dialog.component';
import { MatDialogModule } from '@angular/material/dialog';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { ConfirmationDialogComponent } from './dialogs/confirmation-dialog/confirmation-dialog.component';
import { FilePreviewScreenComponent } from './screens/file/file-preview-screen/file-preview-screen.component';
import { PdfViewerComponent } from './screens/file/pdf-viewer/pdf-viewer.component';
import { MatTabsModule } from '@angular/material/tabs';
import { MatButtonToggleModule } from '@angular/material/button-toggle';
import { NgpSortModule } from 'ngp-sort-pipe';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from '@angular/material/sidenav';
import { ToastrModule } from 'ngx-toastr';
import { ServiceWorkerModule } from '@angular/service-worker';
import { environment } from '../environments/environment';
import { AuthModule } from './auth/auth.module';
import { FileUploadDownloadModule } from './upload-download/file-upload-download.module';
import { FullPageLoadingIndicatorComponent } from './components/full-page-loading-indicator/full-page-loading-indicator.component';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { InitialsAvatarComponent } from './components/initials-avatar/initials-avatar.component';
import { StatusBarComponent } from './components/status-bar/status-bar.component';
import { LogoComponent } from './logo/logo.component';
import { SimpleDoughnutChartComponent } from './components/simple-doughnut-chart/simple-doughnut-chart.component';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { AnnotationIconComponent } from './components/annotation-icon/annotation-icon.component';
import { AuthErrorComponent } from './screens/auth-error/auth-error.component';
import { MatListModule } from '@angular/material/list';
import { AssignOwnerDialogComponent } from './dialogs/assign-owner-dialog/assign-owner-dialog.component';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';
import { MatInputModule } from '@angular/material/input';
import { HumanizePipe } from './utils/humanize.pipe';
import { CommentsComponent } from './components/comments/comments.component';
import { ManualAnnotationDialogComponent } from './dialogs/manual-redaction-dialog/manual-annotation-dialog.component';
import { AuthModule } from './modules/auth/auth.module';
import { LogoComponent } from './components/logo/logo.component';
import { AuthErrorComponent } from './components/auth-error/auth-error.component';
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
import { ToastComponent } from './components/toast/toast.component';
import { FilterComponent } from './components/filter/filter.component';
import { TableColNameComponent } from './components/table-col-name/table-col-name.component';
import { ProjectDetailsComponent } from './components/project-details/project-details.component';
import { PageIndicatorComponent } from './screens/file/page-indicator/page-indicator.component';
import { NeedsWorkBadgeComponent } from './components/needs-work-badge/needs-work-badge.component';
import { ProjectListingEmptyComponent } from './components/empty-states/project-listing-empty/project-listing-empty.component';
import { AnnotationActionsComponent } from './screens/file/annotation-actions/annotation-actions.component';
import { ProjectListingDetailsComponent } from './components/project-listing-details/project-listing-details.component';
import { FileActionsComponent } from './components/file-actions/file-actions.component';
import { TypeAnnotationIconComponent } from './components/type-annotation-icon/type-annotation-icon.component';
import { TypeFilterComponent } from './components/type-filter/type-filter.component';
import { DictionaryAnnotationIconComponent } from './components/dictionary-annotation-icon/dictionary-annotation-icon.component';
import { ProjectOverviewBulkActionsComponent } from './components/bulk-actions/project-overview-bulk-actions.component';
import { HttpCacheInterceptor } from '@redaction/red-cache';
import { HiddenActionComponent } from './components/hidden-action/hidden-action.component';
import { IconButtonComponent } from './components/buttons/icon-button/icon-button.component';
import { UserButtonComponent } from './components/buttons/user-button/user-button.component';
import { CircleButtonComponent } from './components/buttons/circle-button/circle-button.component';
import { ChevronButtonComponent } from './components/buttons/chevron-button/chevron-button.component';
import { DictionaryListingScreenComponent } from './screens/admin/dictionary-listing-screen/dictionary-listing-screen.component';
import { SyncWidthDirective } from './utils/sync-width.directive';
import { AddEditDictionaryDialogComponent } from './dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component';
import { DictionaryOverviewScreenComponent } from './screens/admin/dictionary-overview-screen/dictionary-overview-screen.component';
import { ColorPickerModule } from 'ngx-color-picker';
import { AceEditorModule } from 'ng2-ace-editor';
import { TeamMembersComponent } from './components/team-members/team-members.component';
import { AdminBreadcrumbsComponent } from './components/admin-page-header/admin-breadcrumbs.component';
import { UserListingScreenComponent } from './screens/admin/user-listing-screen/user-listing-screen.component';
import { NotificationsComponent } from './components/notifications/notifications.component';
import { RulesScreenComponent } from './screens/admin/rules-screen/rules-screen.component';
import { WatermarkScreenComponent } from './screens/admin/watermark-screen/watermark-screen.component';
import { PdfViewerScreenComponent } from './screens/pdf-viewer-screen/pdf-viewer-screen.component';
import { HtmlDebugScreenComponent } from './screens/html-debug-screen/html-debug-screen.component';
import { ProjectListingActionsComponent } from './components/project-listing-actions/project-listing-actions.component';
import { HasScrollbarDirective } from './utils/has-scrollbar.directive';
import { RuleSetsListingScreenComponent } from './screens/admin/rule-sets-listing-screen/rule-sets-listing-screen.component';
import { AddEditRuleSetDialogComponent } from './dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component';
import { RuleSetActionsComponent } from './components/rule-set-actions/rule-set-actions.component';
import { TabsComponent } from './components/rule-set-view-switch/tabs.component';
import { MatSliderModule } from '@angular/material/slider';
import { OverwriteFilesDialogComponent } from './dialogs/overwrite-files-dialog/overwrite-files-dialog.component';
import { PdfViewerScreenComponent } from './components/pdf-viewer-screen/pdf-viewer-screen.component';
import { HtmlDebugScreenComponent } from './components/html-debug-screen/html-debug-screen.component';
import { KeycloakService } from 'keycloak-angular';
import { FileDownloadBtnComponent } from './components/buttons/file-download-btn/file-download-btn.component';
import { LicenseInformationScreenComponent } from './screens/admin/license-information-screen/license-information-screen.component';
import { DefaultColorsScreenComponent } from './screens/admin/default-colors-screen/default-colors-screen.component';
import { EditColorDialogComponent } from './dialogs/edit-color-dialog/edit-color-dialog.component';
import { DownloadsListScreenComponent } from './screens/downloads-list-screen/downloads-list-screen.component';
import { DigitalSignatureScreenComponent } from './screens/admin/digital-signature-screen/digital-signature-screen.component';
import { ScrollingModule } from '@angular/cdk/scrolling';
import { RemoveAnnotationsDialogComponent } from './dialogs/remove-annotations-dialog/remove-annotations-dialog.component';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { ComboChartComponent, ComboSeriesVerticalComponent } from './components/combo-chart';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { ForceRedactionDialogComponent } from './dialogs/force-redaction-dialog/force-redaction-dialog.component';
import { AuditScreenComponent } from './screens/admin/audit-screen/audit-screen.component';
import { PaginationComponent } from './components/pagination/pagination.component';
import { FileAttributesListingScreenComponent } from './screens/admin/file-attributes-listing-screen/file-attributes-listing-screen.component';
import { SearchInputComponent } from './components/search-input/search-input.component';
import { DownloadsListScreenComponent } from './components/downloads-list-screen/downloads-list-screen.component';
import { AppRoutingModule } from './app-routing.module';
import { AddEditFileAttributeDialogComponent } from './dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component';
import { ConfirmDeleteFileAttributeDialogComponent } from './dialogs/confirm-delete-file-attribute-dialog/confirm-delete-file-attribute-dialog.component';
import { DocumentInfoDialogComponent } from './dialogs/document-info-dialog/document-info-dialog.component';
import { DocumentInfoComponent } from './components/document-info/document-info.component';
import { FileWorkloadComponent } from './components/file-workload/file-workload.component';
import { SharedModule } from './modules/shared/shared.module';
import { FileUploadDownloadModule } from './modules/upload-download/file-upload-download.module';
export function HttpLoaderFactory(httpClient: HttpClient) {
return new TranslateHttpLoader(httpClient, '/assets/i18n/', '.json');
}
const matImports = [
MatDialogModule,
MatNativeDateModule,
MatToolbarModule,
MatButtonModule,
MatSlideToggleModule,
MatSliderModule,
MatMenuModule,
MatIconModule,
MatTooltipModule,
MatSnackBarModule,
MatTabsModule,
MatButtonToggleModule,
MatFormFieldModule,
MatProgressSpinnerModule,
MatCheckboxModule,
MatListModule,
MatDatepickerModule,
MatInputModule,
MatSelectModule,
MatSidenavModule
];
const screens = [BaseScreenComponent, PdfViewerScreenComponent, HtmlDebugScreenComponent, DownloadsListScreenComponent];
const components = [AppComponent, LogoComponent, AuthErrorComponent, ToastComponent, NotificationsComponent, ...screens];
@NgModule({
declarations: [
AppComponent,
BaseScreenComponent,
ProjectListingScreenComponent,
ProjectOverviewScreenComponent,
AddEditProjectDialogComponent,
ConfirmationDialogComponent,
OverwriteFilesDialogComponent,
FilePreviewScreenComponent,
PdfViewerComponent,
AssignOwnerDialogComponent,
FullPageLoadingIndicatorComponent,
InitialsAvatarComponent,
StatusBarComponent,
LogoComponent,
SimpleDoughnutChartComponent,
ManualAnnotationDialogComponent,
ForceRedactionDialogComponent,
AnnotationIconComponent,
AuthErrorComponent,
HumanizePipe,
CommentsComponent,
ToastComponent,
FilterComponent,
TableColNameComponent,
ProjectDetailsComponent,
PageIndicatorComponent,
NeedsWorkBadgeComponent,
ProjectListingEmptyComponent,
AnnotationActionsComponent,
ProjectListingEmptyComponent,
ProjectListingDetailsComponent,
FileActionsComponent,
TypeAnnotationIconComponent,
TypeFilterComponent,
DictionaryAnnotationIconComponent,
ProjectOverviewBulkActionsComponent,
FileActionsComponent,
HiddenActionComponent,
IconButtonComponent,
UserButtonComponent,
CircleButtonComponent,
ChevronButtonComponent,
DictionaryListingScreenComponent,
RuleSetsListingScreenComponent,
AddEditRuleSetDialogComponent,
SyncWidthDirective,
HasScrollbarDirective,
AddEditDictionaryDialogComponent,
DictionaryOverviewScreenComponent,
TeamMembersComponent,
AdminBreadcrumbsComponent,
UserListingScreenComponent,
NotificationsComponent,
RulesScreenComponent,
WatermarkScreenComponent,
PdfViewerScreenComponent,
HtmlDebugScreenComponent,
FileDownloadBtnComponent,
ProjectListingActionsComponent,
RuleSetActionsComponent,
TabsComponent,
LicenseInformationScreenComponent,
DefaultColorsScreenComponent,
EditColorDialogComponent,
DownloadsListScreenComponent,
DigitalSignatureScreenComponent,
RemoveAnnotationsDialogComponent,
ComboChartComponent,
ComboSeriesVerticalComponent,
AuditScreenComponent,
PaginationComponent,
FileAttributesListingScreenComponent,
SearchInputComponent,
AddEditFileAttributeDialogComponent,
ConfirmDeleteFileAttributeDialogComponent,
DocumentInfoDialogComponent,
DocumentInfoComponent,
FileWorkloadComponent
],
declarations: [...components],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
ReactiveFormsModule,
SharedModule,
FileUploadDownloadModule,
HttpClientModule,
AuthModule,
IconsModule,
ApiModule,
NgxChartsModule,
AppRoutingModule,
ToastrModule.forRoot({
closeButton: true,
enableHtml: true,
toastComponent: ToastComponent
}),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
@ -247,26 +61,13 @@ const matImports = [
deps: [HttpClient]
}
}),
AppRoutingModule,
NgpSortModule,
...matImports,
ToastrModule.forRoot({
closeButton: true,
enableHtml: true,
toastComponent: ToastComponent
}),
FileUploadDownloadModule,
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }),
ColorPickerModule,
AceEditorModule,
ScrollingModule,
MatProgressBarModule
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
],
providers: [
{
provide: HTTP_INTERCEPTORS,
multi: true,
useClass: ApiPathInterceptorService
useClass: ApiPathInterceptor
},
{
provide: HTTP_INTERCEPTORS,

View File

@ -1,15 +1,8 @@
<section>
<p class="heading-xl" [translate]="'auth-error.heading'" *ngIf="!configuredAdminName && !configuredAdminUrl"></p>
<p
class="heading-xl"
[translate]="'auth-error.heading'"
*ngIf="!configuredAdminName && !configuredAdminUrl"
></p>
<p
class="heading-xl"
[innerHTML]="
'auth-error.heading-with-name-and-link'
| translate: { adminName: configuredAdminName, adminUrl: configuredAdminUrl }
"
[innerHTML]="'auth-error.heading-with-name-and-link' | translate: { adminName: configuredAdminName, adminUrl: configuredAdminUrl }"
*ngIf="configuredAdminName && configuredAdminUrl"
></p>
<p

View File

@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { UserService } from '../../user/user.service';
import { AppConfigKey, AppConfigService } from '../../app-config/app-config.service';
import { UserService } from '../../services/user.service';
import { AppConfigKey, AppConfigService } from '../../modules/app-config/app-config.service';
@Component({
selector: 'redaction-auth-error',
@ -11,15 +11,10 @@ export class AuthErrorComponent implements OnInit {
configuredAdminName: string;
configuredAdminUrl: string;
constructor(
private readonly _userService: UserService,
private readonly _appConfigService: AppConfigService
) {}
constructor(private readonly _userService: UserService, private readonly _appConfigService: AppConfigService) {}
ngOnInit(): void {
this.configuredAdminName = this._appConfigService.getConfig(
AppConfigKey.ADMIN_CONTACT_NAME
);
this.configuredAdminName = this._appConfigService.getConfig(AppConfigKey.ADMIN_CONTACT_NAME);
this.configuredAdminUrl = this._appConfigService.getConfig(AppConfigKey.ADMIN_CONTACT_URL);
}

View File

@ -1,14 +1,14 @@
import { Component } from '@angular/core';
import { UserService } from '../../user/user.service';
import { UserService } from '../../services/user.service';
import { AppStateService } from '../../state/app-state.service';
import { LanguageService } from '../../i18n/language.service';
import { PermissionsService } from '../../utils/permissions.service';
import { UserPreferenceService } from '../../utils/user-preference.service';
import { PermissionsService } from '../../services/permissions.service';
import { UserPreferenceService } from '../../services/user-preference.service';
import { Router } from '@angular/router';
import { AppConfigService } from '../../app-config/app-config.service';
import { AppConfigService } from '../../modules/app-config/app-config.service';
import { Title } from '@angular/platform-browser';
import { FileDownloadService } from '../../upload-download/file-download.service';
import { StatusOverlayService } from '../../upload-download/status-overlay.service';
import { FileDownloadService } from '../../modules/upload-download/services/file-download.service';
import { StatusOverlayService } from '../../modules/upload-download/services/status-overlay.service';
@Component({
selector: 'redaction-base-screen',

View File

@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { FileDownloadService } from '../../upload-download/file-download.service';
import { DownloadStatusWrapper } from '../../upload-download/model/download-status.wrapper';
import { FileDownloadService } from '../../modules/upload-download/services/file-download.service';
import { DownloadStatusWrapper } from '../../modules/upload-download/model/download-status.wrapper';
import { DownloadControllerService } from '@redaction/red-ui-http';
@Component({

View File

@ -1,7 +1,7 @@
import { ChangeDetectorRef, Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { DebugControllerService, FileManagementControllerService } from '@redaction/red-ui-http';
import { FileStatusWrapper } from '../file/model/file-status.wrapper';
import { FileStatusWrapper } from '../../models/file/file-status.wrapper';
import { mergeMap } from 'rxjs/operators';
@Component({

View File

@ -2,7 +2,7 @@ import { ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild } from '@an
import WebViewer, { WebViewerInstance } from '@pdftron/webviewer';
import { environment } from '../../../environments/environment';
import { ActivatedRoute } from '@angular/router';
import { FileStatusWrapper } from '../file/model/file-status.wrapper';
import { FileStatusWrapper } from '../../models/file/file-status.wrapper';
import { FileManagementControllerService } from '@redaction/red-ui-http';
@Component({

View File

@ -1,24 +1,14 @@
import {
ActivatedRouteSnapshot,
CanActivate,
Router,
RouterStateSnapshot,
UrlTree
} from '@angular/router';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
import { Injectable, Injector } from '@angular/core';
import { from, Observable, of } from 'rxjs';
import { catchError, map, mergeMap, tap } from 'rxjs/operators';
import { AppLoadStateService } from './app-load-state.service';
import { AppLoadStateService } from '../services/app-load-state.service';
@Injectable({
providedIn: 'root'
})
export class CompositeRouteGuard implements CanActivate {
constructor(
protected readonly _router: Router,
protected readonly _injector: Injector,
private readonly _appLoadStateService: AppLoadStateService
) {}
constructor(protected readonly _router: Router, protected readonly _injector: Injector, private readonly _appLoadStateService: AppLoadStateService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
this._appLoadStateService.pushLoadingEvent(true);
@ -33,15 +23,10 @@ export class CompositeRouteGuard implements CanActivate {
if (canActivateResult instanceof Promise) {
canActivateResult = from(canActivateResult);
}
if (
typeof canActivateResult === 'boolean' ||
canActivateResult instanceof UrlTree
) {
if (typeof canActivateResult === 'boolean' || canActivateResult instanceof UrlTree) {
canActivateResult = of(canActivateResult);
}
const canActivatePipe: Observable<boolean> = canActivateResult.pipe(
map((m) => !!m)
);
const canActivatePipe: Observable<boolean> = canActivateResult.pipe(map((m) => !!m));
compositeCanActivateObservable = compositeCanActivateObservable.pipe(
mergeMap((bool) => {
if (!bool) {

View File

@ -1,4 +1,4 @@
import { UserWrapper } from '../../../user/user.service';
import { UserWrapper } from '../../services/user.service';
import { AnnotationWrapper } from './annotation.wrapper';
export class AnnotationPermissions {

View File

@ -9,7 +9,7 @@ import {
ViewedPages
} from '@redaction/red-ui-http';
import { FileStatusWrapper } from './file-status.wrapper';
import { UserWrapper } from '../../../user/user.service';
import { UserWrapper } from '../../services/user.service';
import { AnnotationWrapper } from './annotation.wrapper';
import { RedactionLogEntryWrapper } from './redaction-log-entry.wrapper';
import { ViewMode } from './view-mode';

View File

@ -1,5 +1,5 @@
import { FileStatus } from '@redaction/red-ui-http';
import { StatusSorter } from '../../../utils/sorters/status-sorter';
import { StatusSorter } from '../../utils/sorters/status-sorter';
export class FileStatusWrapper {
constructor(public fileStatus: FileStatus, public reviewerName: string) {}

View File

@ -0,0 +1,16 @@
import { ManualRedactionEntryWrapper } from './manual-redaction-entry.wrapper';
import { ManualAddResponse } from '@redaction/red-ui-http';
export class ManualAnnotationResponse {
annotationId;
commentId;
constructor(public manualRedactionEntryWrapper: ManualRedactionEntryWrapper, public manualAddResponse: ManualAddResponse) {
this.annotationId = manualAddResponse?.annotationId ? manualAddResponse.annotationId : new Date().getTime();
this.commentId = manualAddResponse?.commentId ? manualAddResponse.commentId : new Date().getTime();
}
get dictionary() {
return this.manualRedactionEntryWrapper.manualRedactionEntry.type;
}
}

View File

@ -0,0 +1,134 @@
import { NgModule } from '@angular/core';
import { AuthGuard } from '../auth/auth.guard';
import { CompositeRouteGuard } from '../../guards/composite-route.guard';
import { RedRoleGuard } from '../auth/red-role.guard';
import { AppStateGuard } from '../../state/app-state.guard';
import { RuleSetsListingScreenComponent } from './screens/rule-sets-listing/rule-sets-listing-screen.component';
import { DictionaryListingScreenComponent } from './screens/dictionary-listing/dictionary-listing-screen.component';
import { DictionaryOverviewScreenComponent } from './screens/dictionary-overview/dictionary-overview-screen.component';
import { PendingChangesGuard } from '../../guards/can-deactivate.guard';
import { RulesScreenComponent } from './screens/rules/rules-screen.component';
import { FileAttributesListingScreenComponent } from './screens/file-attributes-listing/file-attributes-listing-screen.component';
import { WatermarkScreenComponent } from './screens/watermark/watermark-screen.component';
import { DefaultColorsScreenComponent } from './screens/default-colors/default-colors-screen.component';
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
import { LicenseInformationScreenComponent } from './screens/license-information/license-information-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';
const routes = [
{ path: '', redirectTo: 'project-templates', pathMatch: 'full' },
{
path: 'project-templates',
children: [
{
path: '',
component: RuleSetsListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: ':ruleSetId',
children: [
{
path: 'dictionaries',
children: [
{
path: '',
component: DictionaryListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: ':type',
component: DictionaryOverviewScreenComponent,
canActivate: [CompositeRouteGuard],
canDeactivate: [PendingChangesGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
}
]
},
{
path: 'rules',
component: RulesScreenComponent,
canActivate: [CompositeRouteGuard],
canDeactivate: [PendingChangesGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'file-attributes',
component: FileAttributesListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'watermark',
component: WatermarkScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'default-colors',
component: DefaultColorsScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{ path: '', redirectTo: 'dictionaries', pathMatch: 'full' }
]
}
]
},
{
path: 'users',
component: UserListingScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'license-info',
component: LicenseInformationScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'digital-signature',
component: DigitalSignatureScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
},
{
path: 'audit',
component: AuditScreenComponent,
canActivate: [CompositeRouteGuard],
data: {
routeGuards: [AuthGuard, RedRoleGuard, AppStateGuard]
}
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class AdminRoutingModule {}

View File

@ -0,0 +1,67 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AdminRoutingModule } from './admin-routing.module';
import { RulesScreenComponent } from './screens/rules/rules-screen.component';
import { SharedModule } from '../shared/shared.module';
import { RuleSetsListingScreenComponent } from './screens/rule-sets-listing/rule-sets-listing-screen.component';
import { AuditScreenComponent } from './screens/audit/audit-screen.component';
import { DefaultColorsScreenComponent } from './screens/default-colors/default-colors-screen.component';
import { DictionaryListingScreenComponent } from './screens/dictionary-listing/dictionary-listing-screen.component';
import { DictionaryOverviewScreenComponent } from './screens/dictionary-overview/dictionary-overview-screen.component';
import { DigitalSignatureScreenComponent } from './screens/digital-signature/digital-signature-screen.component';
import { FileAttributesListingScreenComponent } from './screens/file-attributes-listing/file-attributes-listing-screen.component';
import { LicenseInformationScreenComponent } from './screens/license-information/license-information-screen.component';
import { UserListingScreenComponent } from './screens/user-listing/user-listing-screen.component';
import { WatermarkScreenComponent } from './screens/watermark/watermark-screen.component';
import { AdminBreadcrumbsComponent } from './components/breadcrumbs/admin-breadcrumbs.component';
import { RuleSetActionsComponent } from './components/rule-set-actions/rule-set-actions.component';
import { TabsComponent } from './components/tabs/tabs.component';
import { AceEditorModule } from 'ng2-ace-editor';
import { ColorPickerModule } from 'ngx-color-picker';
import { AddEditFileAttributeDialogComponent } from './dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component';
import { AddEditRuleSetDialogComponent } from './dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component';
import { AddEditDictionaryDialogComponent } from './dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component';
import { ConfirmDeleteFileAttributeDialogComponent } from './dialogs/confirm-delete-file-attribute-dialog/confirm-delete-file-attribute-dialog.component';
import { EditColorDialogComponent } from './dialogs/edit-color-dialog/edit-color-dialog.component';
import { ComboChartComponent, ComboSeriesVerticalComponent } from './components/combo-chart';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { AdminDialogService } from './services/admin-dialog-service.service';
const dialogs = [
AddEditRuleSetDialogComponent,
AddEditDictionaryDialogComponent,
AddEditFileAttributeDialogComponent,
ConfirmDeleteFileAttributeDialogComponent,
EditColorDialogComponent
];
const screens = [
RuleSetsListingScreenComponent,
RulesScreenComponent,
AuditScreenComponent,
DefaultColorsScreenComponent,
DictionaryListingScreenComponent,
DictionaryOverviewScreenComponent,
DigitalSignatureScreenComponent,
FileAttributesListingScreenComponent,
LicenseInformationScreenComponent,
UserListingScreenComponent,
WatermarkScreenComponent
];
const components = [
AdminBreadcrumbsComponent,
RuleSetActionsComponent,
TabsComponent,
ComboChartComponent,
ComboSeriesVerticalComponent,
...dialogs,
...screens
];
@NgModule({
declarations: [...components],
providers: [AdminDialogService],
imports: [CommonModule, SharedModule, AdminRoutingModule, AceEditorModule, NgxChartsModule, ColorPickerModule]
})
export class AdminModule {}

View File

@ -1,7 +1,7 @@
import { Component, Input } from '@angular/core';
import { AppStateService } from '../../state/app-state.service';
import { UserPreferenceService } from '../../utils/user-preference.service';
import { PermissionsService } from '../../utils/permissions.service';
import { AppStateService } from '../../../../state/app-state.service';
import { UserPreferenceService } from '../../../../services/user-preference.service';
import { PermissionsService } from '../../../../services/permissions.service';
@Component({
selector: 'redaction-admin-breadcrumbs',

View File

@ -1,8 +1,8 @@
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { DialogService } from '../../dialogs/dialog.service';
import { PermissionsService } from '../../utils/permissions.service';
import { AppStateService } from '../../state/app-state.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { AppStateService } from '../../../../state/app-state.service';
import { Router } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog-service.service';
@Component({
selector: 'redaction-rule-set-actions',
@ -14,7 +14,7 @@ export class RuleSetActionsComponent {
@Output() loadRuleSetsData = new EventEmitter<any>();
constructor(
private readonly _dialogService: DialogService,
private readonly _dialogService: AdminDialogService,
private readonly _appStateService: AppStateService,
private readonly _router: Router,
public readonly permissionsService: PermissionsService

View File

@ -1,8 +1,8 @@
import { Component, Input, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AppStateService } from '../../state/app-state.service';
import { UserPreferenceService } from '../../utils/user-preference.service';
import { PermissionsService } from '../../utils/permissions.service';
import { AppStateService } from '../../../../state/app-state.service';
import { UserPreferenceService } from '../../../../services/user-preference.service';
import { PermissionsService } from '../../../../services/permissions.service';
@Component({
selector: 'redaction-tabs',

View File

@ -1,4 +1,4 @@
@import '../../../assets/styles/red-variables';
@import '../../../../../assets/styles/red-variables';
.first-row {
display: flex;

View File

@ -1,10 +1,10 @@
import { Component, Inject } from '@angular/core';
import { AppStateService } from '../../state/app-state.service';
import { AppStateService } from '../../../../state/app-state.service';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { DictionaryControllerService, TypeValue } from '@redaction/red-ui-http';
import { Observable } from 'rxjs';
import { NotificationService, NotificationType } from '../../notification/notification.service';
import { NotificationService, NotificationType } from '../../../../services/notification.service';
import { TranslateService } from '@ngx-translate/core';
@Component({

View File

@ -1,6 +1,6 @@
import { Component, Inject } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AppStateService } from '../../state/app-state.service';
import { AppStateService } from '../../../../state/app-state.service';
import { FileAttributeConfig, FileAttributesControllerService } from '@redaction/red-ui-http';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';

View File

@ -1,5 +1,5 @@
import { Component, Inject } from '@angular/core';
import { AppStateService } from '../../state/app-state.service';
import { AppStateService } from '../../../../state/app-state.service';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import * as moment from 'moment';

View File

@ -1,5 +1,5 @@
import { Component, Inject } from '@angular/core';
import { AppStateService } from '../../state/app-state.service';
import { AppStateService } from '../../../../state/app-state.service';
import { FileAttributeConfig, FileAttributesControllerService } from '@redaction/red-ui-http';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';

View File

@ -1,7 +1,7 @@
import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Colors, DictionaryControllerService } from '@redaction/red-ui-http';
import { NotificationService, NotificationType } from '../../notification/notification.service';
import { NotificationService, NotificationType } from '../../../../services/notification.service';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { PermissionsService } from '../../../utils/permissions.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { FormBuilder, FormGroup } from '@angular/forms';
import { AuditControllerService, AuditResponse, AuditSearchRequest } from '@redaction/red-ui-http';
import { TranslateService } from '@ngx-translate/core';

View File

@ -1,10 +1,10 @@
import { Component } from '@angular/core';
import { AppStateService } from '../../../state/app-state.service';
import { Colors, DictionaryControllerService, TypeValue } from '@redaction/red-ui-http';
import { AppStateService } from '../../../../state/app-state.service';
import { Colors, DictionaryControllerService } from '@redaction/red-ui-http';
import { ActivatedRoute } from '@angular/router';
import { SortingOption, SortingService } from '../../../utils/sorting.service';
import { PermissionsService } from '../../../utils/permissions.service';
import { DialogService } from '../../../dialogs/dialog.service';
import { SortingOption, SortingService } from '../../../../services/sorting.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { AdminDialogService } from '../../services/admin-dialog-service.service';
@Component({
selector: 'redaction-default-colors-screen',
@ -21,7 +21,7 @@ export class DefaultColorsScreenComponent {
private readonly _activatedRoute: ActivatedRoute,
private readonly _dictionaryControllerService: DictionaryControllerService,
private readonly _sortingService: SortingService,
private readonly _dialogService: DialogService,
private readonly _dialogService: AdminDialogService,
public readonly permissionsService: PermissionsService
) {
this._appStateService.activateRuleSet(_activatedRoute.snapshot.params.ruleSetId);

View File

@ -1,5 +1,5 @@
@import '../../../../assets/styles/red-variables';
@import '../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/red-variables';
@import '../../../../../assets/styles/red-mixins';
.header-item {
padding: 0 16px 0 10px;

View File

@ -1,15 +1,15 @@
import { Component, OnInit } from '@angular/core';
import { DoughnutChartConfig } from '../../../components/simple-doughnut-chart/simple-doughnut-chart.component';
import { DoughnutChartConfig } from '../../../shared/components/simple-doughnut-chart/simple-doughnut-chart.component';
import { DictionaryControllerService, TypeValue } from '@redaction/red-ui-http';
import { SortingOption, SortingService } from '../../../utils/sorting.service';
import { DialogService } from '../../../dialogs/dialog.service';
import { AppStateService } from '../../../state/app-state.service';
import { SortingOption, SortingService } from '../../../../services/sorting.service';
import { AppStateService } from '../../../../state/app-state.service';
import { tap } from 'rxjs/operators';
import { forkJoin } from 'rxjs';
import { PermissionsService } from '../../../utils/permissions.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { FormBuilder, FormGroup } from '@angular/forms';
import { debounce } from '../../../utils/debounce';
import { debounce } from '../../../../utils/debounce';
import { ActivatedRoute } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog-service.service';
@Component({
selector: 'redaction-dictionary-listing-screen',
@ -24,7 +24,7 @@ export class DictionaryListingScreenComponent implements OnInit {
public searchForm: FormGroup;
constructor(
private readonly _dialogService: DialogService,
private readonly _dialogService: AdminDialogService,
private readonly _sortingService: SortingService,
private readonly _formBuilder: FormBuilder,
private readonly _dictionaryControllerService: DictionaryControllerService,

View File

@ -1,5 +1,5 @@
@import '../../../../assets/styles/red-variables';
@import '../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/red-variables';
@import '../../../../../assets/styles/red-mixins';
.editor-container {
height: calc(100% - 50px);

View File

@ -1,17 +1,17 @@
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { DictionaryControllerService, RuleSetModel, TypeValue } from '@redaction/red-ui-http';
import { DialogService } from '../../../dialogs/dialog.service';
import { AppStateService } from '../../../state/app-state.service';
import { PermissionsService } from '../../../utils/permissions.service';
import { AppStateService } from '../../../../state/app-state.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { ActivatedRoute, Router } from '@angular/router';
import { AceEditorComponent } from 'ng2-ace-editor';
import { debounce } from '../../../utils/debounce';
import { NotificationService, NotificationType } from '../../../notification/notification.service';
import { debounce } from '../../../../utils/debounce';
import { NotificationService, NotificationType } from '../../../../services/notification.service';
import { TranslateService } from '@ngx-translate/core';
import { Observable } from 'rxjs';
import { saveAs } from 'file-saver';
import { ComponentHasChanges } from '../../../utils/can-deactivate.guard';
import { ComponentHasChanges } from '../../../../guards/can-deactivate.guard';
import { FormBuilder, FormGroup } from '@angular/forms';
import { AdminDialogService } from '../../services/admin-dialog-service.service';
declare var ace;
@ -50,7 +50,7 @@ export class DictionaryOverviewScreenComponent extends ComponentHasChanges imple
private readonly _notificationService: NotificationService,
protected readonly _translateService: TranslateService,
private readonly _dictionaryControllerService: DictionaryControllerService,
private readonly _dialogService: DialogService,
private readonly _dialogService: AdminDialogService,
private readonly _router: Router,
private readonly _activatedRoute: ActivatedRoute,
private readonly _appStateService: AppStateService,

View File

@ -1,5 +1,5 @@
@import '../../../../assets/styles/red-mixins';
@import '../../../../assets/styles/red-variables';
@import '../../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/red-variables';
.left-container {
width: 100vw;

View File

@ -1,10 +1,10 @@
import { Component } from '@angular/core';
import { DigitalSignature, DigitalSignatureControllerService } from '@redaction/red-ui-http';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NotificationService, NotificationType } from '../../../notification/notification.service';
import { NotificationService, NotificationType } from '../../../../services/notification.service';
import { TranslateService } from '@ngx-translate/core';
import { PermissionsService } from '../../../utils/permissions.service';
import { lastIndexOfEnd } from '../../../utils/functions';
import { PermissionsService } from '../../../../services/permissions.service';
import { lastIndexOfEnd } from '../../../../utils/functions';
@Component({
selector: 'redaction-digital-signature-screen',

View File

@ -1,12 +1,12 @@
import { Component, OnInit } from '@angular/core';
import { PermissionsService } from '../../../utils/permissions.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { FormBuilder, FormGroup } from '@angular/forms';
import { FileAttributeConfig, FileAttributesControllerService } from '@redaction/red-ui-http';
import { AppStateService } from '../../../state/app-state.service';
import { AppStateService } from '../../../../state/app-state.service';
import { ActivatedRoute } from '@angular/router';
import { debounce } from '../../../utils/debounce';
import { SortingOption, SortingService } from '../../../utils/sorting.service';
import { DialogService } from '../../../dialogs/dialog.service';
import { debounce } from '../../../../utils/debounce';
import { SortingOption, SortingService } from '../../../../services/sorting.service';
import { AdminDialogService } from '../../services/admin-dialog-service.service';
@Component({
selector: 'redaction-file-attributes-listing-screen',
@ -27,7 +27,7 @@ export class FileAttributesListingScreenComponent implements OnInit {
private readonly _fileAttributesService: FileAttributesControllerService,
private readonly _appStateService: AppStateService,
private readonly _activatedRoute: ActivatedRoute,
private readonly _dialogService: DialogService
private readonly _dialogService: AdminDialogService
) {
this._appStateService.activateRuleSet(_activatedRoute.snapshot.params.ruleSetId);

View File

@ -1,5 +1,5 @@
@import '../../../../assets/styles/red-mixins';
@import '../../../../assets/styles/red-variables';
@import '../../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/red-variables';
.left-container {
width: 100vw;

View File

@ -1,10 +1,9 @@
import { Component, OnInit } from '@angular/core';
import { PermissionsService } from '../../../utils/permissions.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { LicenseReport, LicenseReportControllerService } from '@redaction/red-ui-http';
import { AppConfigService } from '../../../app-config/app-config.service';
import * as moment from 'moment';
import { TranslateService } from '@ngx-translate/core';
import { Moment } from 'moment';
@Component({
selector: 'redaction-license-information-screen',
@ -75,7 +74,7 @@ export class LicenseInformationScreenComponent implements OnInit {
});
}
private async _setMonthlyStats(startDate: Moment, endDate: Moment) {
private async _setMonthlyStats(startDate: moment.Moment, endDate: moment.Moment) {
const [startMonth, startYear] = [startDate.month(), startDate.year()];
const [endMonth, endYear] = [endDate.month(), endDate.year()];
moment.locale(this._translateService.currentLang);

View File

@ -1,5 +1,5 @@
@import '../../../../assets/styles/red-variables';
@import '../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/red-variables';
@import '../../../../../assets/styles/red-mixins';
.header-item {
padding: 0 24px 0 10px;

View File

@ -1,12 +1,12 @@
import { Component, OnInit } from '@angular/core';
import { SortingOption, SortingService } from '../../../utils/sorting.service';
import { DialogService } from '../../../dialogs/dialog.service';
import { AppStateService } from '../../../state/app-state.service';
import { PermissionsService } from '../../../utils/permissions.service';
import { SortingOption, SortingService } from '../../../../services/sorting.service';
import { AppStateService } from '../../../../state/app-state.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { FormBuilder, FormGroup } from '@angular/forms';
import { debounce } from '../../../utils/debounce';
import { debounce } from '../../../../utils/debounce';
import { RuleSetModel } from '@redaction/red-ui-http';
import { UserPreferenceService } from '../../../utils/user-preference.service';
import { UserPreferenceService } from '../../../../services/user-preference.service';
import { AdminDialogService } from '../../services/admin-dialog-service.service';
@Component({
selector: 'redaction-rule-sets-listing-screen',
@ -20,7 +20,7 @@ export class RuleSetsListingScreenComponent implements OnInit {
public searchForm: FormGroup;
constructor(
private readonly _dialogService: DialogService,
private readonly _dialogService: AdminDialogService,
private readonly _sortingService: SortingService,
private readonly _formBuilder: FormBuilder,
private readonly _appStateService: AppStateService,

View File

@ -1,4 +1,4 @@
@import '../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/red-mixins';
.editor-container {
width: 100%;

View File

@ -1,13 +1,13 @@
import { Component, ElementRef, ViewChild } from '@angular/core';
import { PermissionsService } from '../../../utils/permissions.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { AceEditorComponent } from 'ng2-ace-editor';
import { RulesControllerService, RuleSetModel } from '@redaction/red-ui-http';
import { NotificationService, NotificationType } from '../../../notification/notification.service';
import { NotificationService, NotificationType } from '../../../../services/notification.service';
import { TranslateService } from '@ngx-translate/core';
import { saveAs } from 'file-saver';
import { ComponentHasChanges } from '../../../utils/can-deactivate.guard';
import { ComponentHasChanges } from '../../../../guards/can-deactivate.guard';
import { ActivatedRoute } from '@angular/router';
import { AppStateService } from '../../../state/app-state.service';
import { AppStateService } from '../../../../state/app-state.service';
declare var ace;

View File

@ -1,9 +1,9 @@
import { Component, OnInit } from '@angular/core';
import { PermissionsService } from '../../../utils/permissions.service';
import { UserService } from '../../../user/user.service';
import { PermissionsService } from '../../../../services/permissions.service';
import { UserService } from '../../../../services/user.service';
import { User } from '@redaction/red-ui-http';
import { FormBuilder, FormGroup } from '@angular/forms';
import { debounce } from '../../../utils/debounce';
import { debounce } from '../../../../utils/debounce';
@Component({
selector: 'redaction-user-listing-screen',

View File

@ -1,4 +1,4 @@
@import '../../../../assets/styles/red-variables';
@import '../../../../../assets/styles/red-variables';
.page-header .actions {
display: flex;

View File

@ -1,16 +1,16 @@
import { ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { PermissionsService } from '../../../utils/permissions.service';
import { PermissionsService } from '../../../../services/permissions.service';
import WebViewer, { WebViewerInstance } from '@pdftron/webviewer';
import { AppStateService } from '../../../state/app-state.service';
import { environment } from '../../../../environments/environment';
import { AppStateService } from '../../../../state/app-state.service';
import { environment } from '../../../../../environments/environment';
import { HttpClient } from '@angular/common/http';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { debounce } from '../../../utils/debounce';
import { debounce } from '../../../../utils/debounce';
import { WatermarkControllerService, WatermarkModel } from '@redaction/red-ui-http';
import { NotificationService, NotificationType } from '../../../notification/notification.service';
import { NotificationService, NotificationType } from '../../../../services/notification.service';
import { TranslateService } from '@ngx-translate/core';
import { ActivatedRoute } from '@angular/router';
import { hexToRgb } from '../../../utils/functions';
import { hexToRgb } from '../../../../utils/functions';
export const DEFAULT_WATERMARK: WatermarkModel = {
text: null,

View File

@ -0,0 +1,155 @@
import { Injectable } from '@angular/core';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import {
Colors,
DictionaryControllerService,
FileAttributeConfig,
FileManagementControllerService,
FileStatus,
ManualRedactionControllerService,
RuleSetControllerService,
RuleSetModel,
TypeValue
} from '@redaction/red-ui-http';
import { AddEditFileAttributeDialogComponent } from '../dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component';
import { AddEditDictionaryDialogComponent } from '../dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component';
import { AddEditRuleSetDialogComponent } from '../dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component';
import { NotificationService, NotificationType } from '../../../services/notification.service';
import { ConfirmationDialogComponent, ConfirmationDialogInput } from '../../shared/dialogs/confirmation-dialog/confirmation-dialog.component';
import { ProjectWrapper } from '../../../state/model/project.wrapper';
import { AppStateService } from '../../../state/app-state.service';
import { ConfirmDeleteFileAttributeDialogComponent } from '../dialogs/confirm-delete-file-attribute-dialog/confirm-delete-file-attribute-dialog.component';
import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component';
import { TranslateService } from '@ngx-translate/core';
const dialogConfig = {
width: '662px',
maxWidth: '90vw',
autoFocus: false
};
@Injectable()
export class AdminDialogService {
constructor(
private readonly _dialog: MatDialog,
private readonly _translateService: TranslateService,
private readonly _appStateService: AppStateService,
private readonly _ruleSetControllerService: RuleSetControllerService,
private readonly _dictionaryControllerService: DictionaryControllerService,
private readonly _fileManagementControllerService: FileManagementControllerService,
private readonly _notificationService: NotificationService,
private readonly _manualRedactionControllerService: ManualRedactionControllerService
) {}
public openDeleteDictionaryDialog($event: MouseEvent, dictionary: TypeValue, ruleSetId: string, cb?: Function): MatDialogRef<ConfirmationDialogComponent> {
$event.stopPropagation();
const ref = this._dialog.open(ConfirmationDialogComponent, dialogConfig);
ref.afterClosed().subscribe(async (result) => {
if (result) {
await this._dictionaryControllerService.deleteType(dictionary.type, ruleSetId).toPromise();
if (cb) cb();
}
});
return ref;
}
public openDeleteRuleSetDialog($event: MouseEvent, ruleSet: RuleSetModel, cb?: Function): MatDialogRef<ConfirmationDialogComponent> {
$event.stopPropagation();
const ref = this._dialog.open(ConfirmationDialogComponent, dialogConfig);
ref.afterClosed().subscribe(async (result) => {
if (result) {
await this._ruleSetControllerService.getAllRuleSets(ruleSet.ruleSetId).toPromise();
if (cb) await cb();
}
});
return ref;
}
public openAddEditDictionaryDialog(dictionary: TypeValue, ruleSetId: string, cb?: Function): MatDialogRef<AddEditDictionaryDialogComponent> {
const ref = this._dialog.open(AddEditDictionaryDialogComponent, {
...dialogConfig,
data: { dictionary, ruleSetId },
autoFocus: true
});
ref.afterClosed().subscribe((result) => {
if (result && cb) {
cb(result);
}
});
return ref;
}
public openEditColorsDialog(colors: Colors, colorKey: string, ruleSetId: string, cb?: Function): MatDialogRef<EditColorDialogComponent> {
const ref = this._dialog.open(EditColorDialogComponent, {
...dialogConfig,
data: { colors, colorKey, ruleSetId },
autoFocus: true
});
ref.afterClosed().subscribe((result) => {
if (result && cb) {
cb(result);
}
});
return ref;
}
public openAddEditRuleSetDialog(ruleSet: RuleSetModel, cb?: Function): MatDialogRef<AddEditRuleSetDialogComponent> {
const ref = this._dialog.open(AddEditRuleSetDialogComponent, {
...dialogConfig,
data: ruleSet,
autoFocus: true
});
ref.afterClosed().subscribe((result) => {
if (result && cb) {
cb(result);
}
});
return ref;
}
public openAddEditFileAttributeDialog(
fileAttribute: FileAttributeConfig,
ruleSetId: string,
cb?: Function
): MatDialogRef<AddEditFileAttributeDialogComponent> {
const ref = this._dialog.open(AddEditFileAttributeDialogComponent, {
...dialogConfig,
data: { fileAttribute, ruleSetId },
autoFocus: true
});
ref.afterClosed().subscribe((result) => {
if (result && cb) {
cb(result);
}
});
return ref;
}
public openConfirmDeleteFileAttributeDialog(
fileAttribute: FileAttributeConfig,
ruleSetId: string,
cb?: Function
): MatDialogRef<ConfirmDeleteFileAttributeDialogComponent> {
const ref = this._dialog.open(ConfirmDeleteFileAttributeDialogComponent, {
...dialogConfig,
data: { fileAttribute, ruleSetId },
autoFocus: true
});
ref.afterClosed().subscribe((result) => {
if (result && cb) {
cb(result);
}
});
return ref;
}
}

View File

@ -3,7 +3,7 @@ import { HttpClient } from '@angular/common/http';
import { tap } from 'rxjs/operators';
import { Observable } from 'rxjs';
import { Title } from '@angular/platform-browser';
import { version } from '../../../../../package.json';
import { version } from '../../../../../../package.json';
export enum AppConfigKey {
OAUTH_URL = 'OAUTH_URL',

View File

@ -1,8 +1,8 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
import { KeycloakAuthGuard, KeycloakService } from 'keycloak-angular';
import { UserService } from '../user/user.service';
import { AppLoadStateService } from '../utils/app-load-state.service';
import { UserService } from '../../services/user.service';
import { AppLoadStateService } from '../../services/app-load-state.service';
@Injectable({
providedIn: 'root'

Some files were not shown because too many files have changed in this diff Show More