Merge branch 'RED-2045'

This commit is contained in:
Adina Țeudan 2021-08-25 14:37:49 +03:00
commit 8d2011d1f9
89 changed files with 240 additions and 477 deletions

View File

@ -1,2 +1,3 @@
<router-outlet></router-outlet>
<redaction-full-page-loading-indicator></redaction-full-page-loading-indicator>
<iqser-full-page-loading-indicator></iqser-full-page-loading-indicator>
<iqser-full-page-error></iqser-full-page-error>

View File

@ -1,5 +1,4 @@
import { Component } from '@angular/core';
import { LoadingService } from '@services/loading.service';
@Component({
selector: 'redaction-root',
@ -7,5 +6,5 @@ import { LoadingService } from '@services/loading.service';
styleUrls: ['./app.component.scss']
})
export class AppComponent {
constructor(readonly loadingService: LoadingService) {}
constructor() {}
}

View File

@ -37,6 +37,7 @@ import { PruningTranslationLoader } from '@utils/pruning-translation-loader';
import { DatePipe } from '@shared/pipes/date.pipe';
import * as links from '../assets/help-mode/links.json';
import { HELP_DOCS, IqserHelpModeModule } from '@iqser/common-ui';
import { ServerErrorInterceptor } from '@utils/server-error-interceptor';
export function httpLoaderFactory(httpClient: HttpClient) {
return new PruningTranslationLoader(httpClient, '/assets/i18n/', '.json');
@ -96,6 +97,11 @@ const components = [
ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
],
providers: [
{
provide: HTTP_INTERCEPTORS,
multi: true,
useClass: ServerErrorInterceptor
},
{
provide: ErrorHandler,
useClass: GlobalErrorHandler

View File

@ -1,9 +1,8 @@
@import '../../../assets/styles/variables';
@import '../../../assets/styles/red-mixins';
.dev-mode {
background-color: #dd4d50;
color: #fff;
background-color: $primary;
color: $white;
font-size: 22px;
line-height: 16px;
text-align: center;

View File

@ -2,9 +2,8 @@ import { Component, Injector, OnInit } from '@angular/core';
import { FileDownloadService } from '@upload-download/services/file-download.service';
import { DownloadStatusWrapper } from '@upload-download/model/download-status.wrapper';
import { DownloadControllerService } from '@redaction/red-ui-http';
import { CircleButtonTypes, DefaultListingServices, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import { CircleButtonTypes, DefaultListingServices, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { LoadingService } from '@services/loading.service';
import { timer } from 'rxjs';
import { RouterHistoryService } from '@services/router-history.service';
@ -16,7 +15,6 @@ import { RouterHistoryService } from '@services/router-history.service';
})
export class DownloadsListScreenComponent extends ListingComponent<DownloadStatusWrapper> implements OnInit {
readonly itemSize = 80;
protected readonly _primaryKey = 'storageId';
readonly circleButtonTypes = CircleButtonTypes;
readonly tableHeaderLabel = _('downloads-list.table-header.title');
readonly tableColumnConfigs: readonly TableColumnConfig<DownloadStatusWrapper>[] = [
@ -25,6 +23,7 @@ export class DownloadsListScreenComponent extends ListingComponent<DownloadStatu
{ label: _('downloads-list.table-col-names.date') },
{ label: _('downloads-list.table-col-names.status') }
];
protected readonly _primaryKey = 'storageId';
constructor(
protected readonly _injector: Injector,

View File

@ -1,4 +1,5 @@
@import '../../../assets/styles/red-mixins';
@import '../../../assets/styles/variables';
@import 'libs/common-ui/src/assets/styles/mixins';
.content-container {
background-color: $grey-2;

View File

@ -8,7 +8,7 @@ import { UserControllerService } from '@redaction/red-ui-http';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import { DomSanitizer } from '@angular/platform-browser';
import { languagesTranslations } from '../../translations/languages-translations';
import { LoadingService } from '@services/loading.service';
import { LoadingService } from '@iqser/common-ui';
@Component({
selector: 'redaction-user-profile-screen',

View File

@ -1,7 +1,7 @@
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';
import { Injectable, Injector } from '@angular/core';
import { from, of } from 'rxjs';
import { LoadingService } from '@services/loading.service';
import { LoadingService } from '@iqser/common-ui';
@Injectable({
providedIn: 'root'

View File

@ -3,8 +3,7 @@ import { AppStateService } from '@state/app-state.service';
import { Router } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { DossierTemplateControllerService } from '@redaction/red-ui-http';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes } from '@iqser/common-ui';
import { CircleButtonTypes, LoadingService } from '@iqser/common-ui';
import { UserService } from '@services/user.service';
@Component({
@ -28,14 +27,14 @@ export class DossierTemplateActionsComponent implements OnInit {
private readonly _dossierTemplateControllerService: DossierTemplateControllerService
) {}
ngOnInit() {
this.dossierTemplateId ??= this._appStateService.activeDossierTemplateId;
}
get dossierTemplate() {
return this._appStateService.getDossierTemplateById(this.dossierTemplateId);
}
ngOnInit() {
this.dossierTemplateId ??= this._appStateService.activeDossierTemplateId;
}
openEditDossierTemplateDialog($event: any) {
this._dialogService.openDialog('addEditDossierTemplate', $event, this.dossierTemplate, () => {
this.loadDossierTemplatesData?.emit();

View File

@ -2,13 +2,12 @@ import { Component, Inject, OnDestroy } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { DossierAttributeConfig, FileAttributeConfig } from '@redaction/red-ui-http';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { LoadingService } from '@services/loading.service';
import { AutoUnsubscribe, LoadingService } from '@iqser/common-ui';
import { HttpErrorResponse } from '@angular/common/http';
import { Toaster } from '@iqser/common-ui';
import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service';
import { dossierAttributeTypesTranslations } from '../../translations/dossier-attribute-types-translations';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { AutoUnsubscribe } from '@iqser/common-ui';
@Component({
templateUrl: './add-edit-dossier-attribute-dialog.component.html',

View File

@ -2,7 +2,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';
import { UserControllerService } from '@redaction/red-ui-http';
import { UserService, UserWrapper } from '@services/user.service';
import { LoadingService } from '@services/loading.service';
import { LoadingService } from '@iqser/common-ui';
@Component({
selector: 'redaction-reset-password',

View File

@ -2,9 +2,8 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { UserControllerService } from '@redaction/red-ui-http';
import { AdminDialogService } from '../../../services/admin-dialog.service';
import { LoadingService } from '@services/loading.service';
import { IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { rolesTranslations } from '../../../../../translations/roles-translations';
import { IconButtonTypes } from '@iqser/common-ui';
import { UserWrapper } from '@services/user.service';
@Component({

View File

@ -2,7 +2,7 @@ import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { UserControllerService } from '@redaction/red-ui-http';
import { AppStateService } from '@state/app-state.service';
import { LoadingService } from '@services/loading.service';
import { LoadingService } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { UserWrapper } from '@services/user.service';

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.sub-header {
display: flex;

View File

@ -3,8 +3,7 @@ import { FormBuilder, FormGroup } from '@angular/forms';
import { AuditControllerService, AuditResponse, AuditSearchRequest } from '@redaction/red-ui-http';
import { Moment } from 'moment';
import { applyIntervalConstraints } from '@utils/date-inputs-utils';
import { LoadingService } from '@services/loading.service';
import { AutoUnsubscribe } from '@iqser/common-ui';
import { AutoUnsubscribe, LoadingService } from '@iqser/common-ui';
import { auditCategoriesTranslations } from '../../translations/audit-categories-translations';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { UserService } from '@services/user.service';

View File

@ -3,8 +3,7 @@ import { AppStateService } from '@state/app-state.service';
import { Colors, DictionaryControllerService } from '@redaction/red-ui-http';
import { ActivatedRoute } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui';
import { DefaultColorType } from '@models/default-color-key.model';
import { defaultColorsTranslations } from '../../translations/default-colors-translations';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@ -22,7 +21,6 @@ interface ListItem extends Listable {
providers: [...DefaultListingServices]
})
export class DefaultColorsScreenComponent extends ListingComponent<ListItem> implements OnInit {
protected readonly _primaryKey = 'key';
readonly circleButtonTypes = CircleButtonTypes;
readonly currentUser = this._userService.currentUser;
readonly translations = defaultColorsTranslations;
@ -34,7 +32,7 @@ export class DefaultColorsScreenComponent extends ListingComponent<ListItem> imp
},
{ label: _('default-colors-screen.table-col-names.color'), class: 'flex-center' }
];
protected readonly _primaryKey = 'key';
private _colorsObj: Colors;
constructor(

View File

@ -1,6 +1,3 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
iqser-table-header::ng-deep .header-item {
padding-right: 16px;
}

View File

@ -7,8 +7,14 @@ import { forkJoin, of } from 'rxjs';
import { ActivatedRoute } from '@angular/router';
import { TypeValueWrapper } from '@models/file/type-value.wrapper';
import { TranslateService } from '@ngx-translate/core';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes, DefaultListingServices, IconButtonTypes, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import {
CircleButtonTypes,
DefaultListingServices,
IconButtonTypes,
ListingComponent,
LoadingService,
TableColumnConfig
} from '@iqser/common-ui';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { UserService } from '@services/user.service';

View File

@ -1,6 +1,3 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
.right-container {
width: 353px;
min-width: 353px;

View File

@ -9,8 +9,7 @@ import { AdminDialogService } from '../../services/admin-dialog.service';
import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component';
import { DictionarySaveService } from '@shared/services/dictionary-save.service';
import { TypeValueWrapper } from '@models/file/type-value.wrapper';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes } from '@iqser/common-ui';
import { CircleButtonTypes, LoadingService } from '@iqser/common-ui';
import { UserService } from '@services/user.service';
@Component({

View File

@ -1,9 +1,8 @@
import { Component, OnDestroy } from '@angular/core';
import { DigitalSignature, DigitalSignatureControllerService } from '@redaction/red-ui-http';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AutoUnsubscribe, IconButtonTypes, Toaster } from '@iqser/common-ui';
import { lastIndexOfEnd } from '@utils/functions';
import { LoadingService } from '@services/loading.service';
import { AutoUnsubscribe, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { UserService } from '@services/user.service';
import { RouterHistoryService } from '@services/router-history.service';

View File

@ -1,38 +1,34 @@
@import '../../../../../assets/styles/red-mixins';
.page-header .actions {
display: flex;
justify-content: flex-end;
}
.header-item {
padding: 0 24px 0 10px;
}
iqser-table-header::ng-deep .attributes-actions-container {
display: flex;
flex: 1;
justify-content: flex-end;
iqser-table-column-name::ng-deep {
> div {
padding-left: 10px !important;
> *:not(:last-child) {
margin-right: 10px;
}
}
.content-container {
cdk-virtual-scroll-viewport {
cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 2fr 1fr 1fr 11px;
.table-item > div {
height: 50px;
&:not(.scrollbar-placeholder) {
padding-left: 10px;
}
}
}
&.has-scrollbar:hover {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 2fr 1fr 1fr 11px;
.table-item > div {
height: 50px;
&:not(.scrollbar-placeholder) {
padding-left: 10px;
}
}
}
&.has-scrollbar:hover {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 2fr 1fr 1fr;
}
grid-template-columns: auto 2fr 2fr 1fr 1fr;
}
}
}

View File

@ -1,10 +1,16 @@
import { Component, Injector, OnInit } from '@angular/core';
import { CircleButtonTypes, DefaultListingServices, IconButtonTypes, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import {
CircleButtonTypes,
DefaultListingServices,
IconButtonTypes,
ListingComponent,
LoadingService,
TableColumnConfig
} from '@iqser/common-ui';
import { DossierAttributeConfig } from '@redaction/red-ui-http';
import { AppStateService } from '@state/app-state.service';
import { ActivatedRoute } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { LoadingService } from '@services/loading.service';
import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service';
import { dossierAttributeTypesTranslations } from '../../translations/dossier-attribute-types-translations';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@ -16,7 +22,6 @@ import { UserService } from '@services/user.service';
providers: [...DefaultListingServices]
})
export class DossierAttributesListingScreenComponent extends ListingComponent<DossierAttributeConfig> implements OnInit {
protected readonly _primaryKey = 'label';
readonly iconButtonTypes = IconButtonTypes;
readonly circleButtonTypes = CircleButtonTypes;
readonly currentUser = this._userService.currentUser;
@ -33,6 +38,7 @@ export class DossierAttributesListingScreenComponent extends ListingComponent<Do
sortByKey: 'type'
}
];
protected readonly _primaryKey = 'label';
constructor(
protected readonly _injector: Injector,

View File

@ -1,40 +1,25 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 1fr 1fr 1fr 1fr 11px;
.header-item {
padding: 0 24px 0 10px;
}
.table-item {
> div:not(.scrollbar-placeholder) {
padding-left: 10px;
iqser-table-column-name::ng-deep {
> div {
padding-left: 10px !important;
}
}
.stats-subtitle {
margin-top: 4px;
}
.content-container {
cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 1fr 1fr 1fr 1fr 11px;
.table-item {
> div:not(.scrollbar-placeholder) {
padding-left: 10px;
.stats-subtitle {
margin-top: 4px;
}
.table-item-title {
max-width: 100%;
}
.table-item-title {
max-width: 100%;
}
}
}
}
&.has-scrollbar:hover {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 1fr 1fr 1fr 1fr;
}
&.has-scrollbar:hover {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 1fr 1fr 1fr 1fr;
}
}
}

View File

@ -3,9 +3,15 @@ import { AppStateService } from '@state/app-state.service';
import { UserPreferenceService } from '@services/user-preference.service';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper';
import { LoadingService } from '@services/loading.service';
import {
CircleButtonTypes,
DefaultListingServices,
IconButtonTypes,
ListingComponent,
LoadingService,
TableColumnConfig
} from '@iqser/common-ui';
import { DossierTemplateControllerService } from '@redaction/red-ui-http';
import { CircleButtonTypes, DefaultListingServices, IconButtonTypes, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import { UserService } from '@services/user.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { RouterHistoryService } from '@services/router-history.service';
@ -17,7 +23,6 @@ import { RouterHistoryService } from '@services/router-history.service';
providers: [...DefaultListingServices]
})
export class DossierTemplatesListingScreenComponent extends ListingComponent<DossierTemplateModelWrapper> implements OnInit {
protected readonly _primaryKey = 'name';
readonly iconButtonTypes = IconButtonTypes;
readonly circleButtonTypes = CircleButtonTypes;
readonly currentUser = this._userService.currentUser;
@ -37,6 +42,7 @@ export class DossierTemplatesListingScreenComponent extends ListingComponent<Dos
sortByKey: 'dateModified'
}
];
protected readonly _primaryKey = 'name';
constructor(
protected readonly _injector: Injector,

View File

@ -1,14 +1,10 @@
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.page-header .actions {
display: flex;
justify-content: flex-end;
}
iqser-table-header::ng-deep .header-item {
padding: 0 24px 0 10px;
}
.content-container cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 11px;

View File

@ -3,8 +3,14 @@ import { FileAttributeConfig, FileAttributesConfig, FileAttributesControllerServ
import { AppStateService } from '@state/app-state.service';
import { ActivatedRoute } from '@angular/router';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes, DefaultListingServices, IconButtonTypes, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import {
CircleButtonTypes,
DefaultListingServices,
IconButtonTypes,
ListingComponent,
LoadingService,
TableColumnConfig
} from '@iqser/common-ui';
import { fileAttributeTypesTranslations } from '../../translations/file-attribute-types-translations';
import { UserService } from '@services/user.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
@ -16,7 +22,6 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
providers: [...DefaultListingServices]
})
export class FileAttributesListingScreenComponent extends ListingComponent<FileAttributeConfig> implements OnInit, OnDestroy {
protected readonly _primaryKey = 'label';
readonly iconButtonTypes = IconButtonTypes;
readonly circleButtonTypes = CircleButtonTypes;
readonly currentUser = this._userService.currentUser;
@ -52,7 +57,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent<FileA
rightIconTooltip: _('file-attributes-listing.table-col-names.primary-info-tooltip')
}
];
protected readonly _primaryKey = 'label';
private _existingConfiguration: FileAttributesConfig;
@ViewChild('fileInput') private _fileInput: ElementRef;

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.content-container {
background-color: $grey-2;

View File

@ -8,9 +8,7 @@ import {
SMTPConfigurationModel
} from '@redaction/red-ui-http';
import { AppConfigService } from '@app-config/app-config.service';
import { AutoUnsubscribe, IconButtonTypes } from '@iqser/common-ui';
import { Toaster } from '@iqser/common-ui';
import { LoadingService } from '@services/loading.service';
import { AutoUnsubscribe, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { UserService } from '@services/user.service';

View File

@ -1,4 +1,4 @@
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
@import '../../../../../assets/styles/variables';
.content-container {

View File

@ -3,9 +3,8 @@ import { LicenseReport, LicenseReportControllerService } from '@redaction/red-ui
import { AppConfigService } from '@app-config/app-config.service';
import * as moment from 'moment';
import { TranslateService } from '@ngx-translate/core';
import { LoadingService } from '@services/loading.service';
import { IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { ButtonConfig } from '@shared/components/page-header/models/button-config.model';
import { IconButtonTypes } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { UserService } from '@services/user.service';
import { RouterHistoryService } from '@services/router-history.service';

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.page-header .actions {
display: flex;

View File

@ -3,7 +3,7 @@ import { ActivatedRoute } from '@angular/router';
import { AppStateService } from '@state/app-state.service';
import { PlaceholdersResponse, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http';
import { download } from '@utils/file-download-utils';
import { LoadingService } from '@services/loading.service';
import { LoadingService } from '@iqser/common-ui';
import { PermissionsService } from '@services/permissions.service';
import {
generalPlaceholdersDescriptionsTranslations,

View File

@ -1,5 +1,3 @@
@import '../../../../../assets/styles/red-mixins';
.editor-container {
width: 100%;
padding: 15px;

View File

@ -7,9 +7,8 @@ import { saveAs } from 'file-saver';
import { ComponentHasChanges } from '@guards/can-deactivate.guard';
import { ActivatedRoute } from '@angular/router';
import { AppStateService } from '@state/app-state.service';
import { Debounce, IconButtonTypes } from '@iqser/common-ui';
import { Debounce, IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { LoadingService } from '@services/loading.service';
import ICodeEditor = monaco.editor.ICodeEditor;
import IModelDeltaDecoration = monaco.editor.IModelDeltaDecoration;
import IStandaloneEditorConstructionOptions = monaco.editor.IStandaloneEditorConstructionOptions;

View File

@ -1,5 +1,4 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
.bulk-actions {
display: flex;
@ -10,12 +9,6 @@
}
}
iqser-table-column-name::ng-deep {
> div {
padding-left: 10px !important;
}
}
.content-container {
cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {

View File

@ -1,9 +1,8 @@
import { ChangeDetectionStrategy, Component, Injector, OnInit } from '@angular/core';
import { Dossier } from '@redaction/red-ui-http';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes, DefaultListingServices, ListingComponent, LoadingService, Listable, TableColumnConfig } from '@iqser/common-ui';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import * as moment from 'moment';
import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import { DossiersService } from '../../../dossier/services/dossiers.service';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';

View File

@ -1,33 +1,21 @@
.content-container {
.header-item {
padding: 0 24px 0 10px;
}
cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 1fr 1fr 1fr auto 11px;
iqser-table-column-name::ng-deep {
> div {
padding: 0 13px 0 10px !important;
}
}
.table-item {
> div:not(.scrollbar-placeholder) {
padding-left: 10px;
cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 1fr 1fr 1fr auto 11px;
.table-item {
> div:not(.scrollbar-placeholder) {
padding-left: 10px;
&.center {
align-items: center;
}
&.center {
align-items: center;
}
}
}
}
&.has-scrollbar:hover {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 1fr 1fr 1fr auto;
}
&.has-scrollbar:hover {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 2fr 1fr 1fr 1fr auto;
}
}
}

View File

@ -5,9 +5,15 @@ import { AdminDialogService } from '../../services/admin-dialog.service';
import { TranslateService } from '@ngx-translate/core';
import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component';
import { TranslateChartService } from '@services/translate-chart.service';
import { LoadingService } from '@services/loading.service';
import {
CircleButtonTypes,
DefaultListingServices,
IconButtonTypes,
ListingComponent,
LoadingService,
TableColumnConfig
} from '@iqser/common-ui';
import { InitialsAvatarComponent } from '@shared/components/initials-avatar/initials-avatar.component';
import { CircleButtonTypes, DefaultListingServices, IconButtonTypes, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { rolesTranslations } from '../../../../translations/roles-translations';

View File

@ -5,14 +5,13 @@ 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, IconButtonTypes } from '@iqser/common-ui';
import { Debounce, IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { WatermarkControllerService, WatermarkModelRes } from '@redaction/red-ui-http';
import { Toaster } from '@iqser/common-ui';
import { ActivatedRoute } from '@angular/router';
import { BASE_HREF } from '../../../../tokens';
import { stampPDFPage } from '@utils/page-stamper';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { LoadingService } from '@services/loading.service';
export const DEFAULT_WATERMARK: WatermarkModelRes = {
text: null,

View File

@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
import { UserService } from '@services/user.service';
import { LoadingService } from '@services/loading.service';
import { LoadingService } from '@iqser/common-ui';
import { Observable } from 'rxjs';
@Injectable({

View File

@ -6,9 +6,8 @@ import { FileStatusWrapper } from '@models/file/file-status.wrapper';
import { FileActionService } from '../../services/file-action.service';
import { Observable } from 'rxjs';
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes, EntitiesService, LoadingService } from '@iqser/common-ui';
import { ConfirmationDialogInput } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
import { CircleButtonTypes, EntitiesService } from '@iqser/common-ui';
import { TranslateService } from '@ngx-translate/core';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
:host {
display: block;

View File

@ -1,6 +1,6 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-components';
@import '../../../../../assets/styles/red-text-styles';
@import 'libs/common-ui/src/assets/styles/texts';
:host {
@extend .stats-subtitle;

View File

@ -5,10 +5,9 @@ import { AppStateService } from '@state/app-state.service';
import { FileActionService } from '../../services/file-action.service';
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
import { ConfirmationDialogInput } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
import { LoadingService } from '@services/loading.service';
import { AutoUnsubscribe, CircleButtonType, CircleButtonTypes, LoadingService, StatusBarConfig } from '@iqser/common-ui';
import { FileManagementControllerService, FileStatus } from '@redaction/red-ui-http';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { AutoUnsubscribe, CircleButtonType, CircleButtonTypes, StatusBarConfig } from '@iqser/common-ui';
import { UserService } from '@services/user.service';
import { filter } from 'rxjs/operators';
@ -64,27 +63,6 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnInit, OnD
return this.fileStatus?.excluded ? _('file-preview.toggle-analysis.enable') : _('file-preview.toggle-analysis.disable');
}
private _setup() {
this.statusBarConfig = [{ color: this.fileStatus.status, length: 1 }];
this.tooltipPosition = this.screen === 'file-preview' ? 'below' : 'above';
this.assignTooltip = this.fileStatus.isUnderApproval
? _('dossier-overview.assign-approver')
: _('dossier-overview.assign-reviewer');
this.buttonType = this.screen === 'file-preview' ? CircleButtonTypes.default : CircleButtonTypes.dark;
this.isWorkable = this.fileStatus.isWorkable;
this.toggleTooltip = this._toggleTooltip;
this.canUndoApproval = this.permissionsService.canUndoApproval(this.fileStatus);
this.canAssignToSelf = this.permissionsService.canAssignToSelf(this.fileStatus);
this.canAssign = this.permissionsService.canAssignUser(this.fileStatus);
this.canDelete = this.permissionsService.canDeleteFile(this.fileStatus);
this.canReanalyse = this.permissionsService.canReanalyseFile(this.fileStatus);
this.canSetToUnderReview = this.permissionsService.canSetUnderReview(this.fileStatus);
this.canSetToUnderApproval = this.permissionsService.canSetUnderApproval(this.fileStatus);
this.readyForApproval = this.permissionsService.isReadyForApproval(this.fileStatus);
this.canToggleAnalysis = this.permissionsService.canToggleAnalysis(this.fileStatus);
}
ngOnInit(): void {
if (this.fileStatus) {
this.screen = 'dossier-overview';
@ -201,4 +179,25 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnInit, OnD
await this.appStateService.getFiles();
this.actionPerformed.emit(this.fileStatus?.excluded ? 'enable-analysis' : 'disable-analysis');
}
private _setup() {
this.statusBarConfig = [{ color: this.fileStatus.status, length: 1 }];
this.tooltipPosition = this.screen === 'file-preview' ? 'below' : 'above';
this.assignTooltip = this.fileStatus.isUnderApproval
? _('dossier-overview.assign-approver')
: _('dossier-overview.assign-reviewer');
this.buttonType = this.screen === 'file-preview' ? CircleButtonTypes.default : CircleButtonTypes.dark;
this.isWorkable = this.fileStatus.isWorkable;
this.toggleTooltip = this._toggleTooltip;
this.canUndoApproval = this.permissionsService.canUndoApproval(this.fileStatus);
this.canAssignToSelf = this.permissionsService.canAssignToSelf(this.fileStatus);
this.canAssign = this.permissionsService.canAssignUser(this.fileStatus);
this.canDelete = this.permissionsService.canDeleteFile(this.fileStatus);
this.canReanalyse = this.permissionsService.canReanalyseFile(this.fileStatus);
this.canSetToUnderReview = this.permissionsService.canSetUnderReview(this.fileStatus);
this.canSetToUnderApproval = this.permissionsService.canSetUnderApproval(this.fileStatus);
this.readyForApproval = this.permissionsService.isReadyForApproval(this.fileStatus);
this.canToggleAnalysis = this.permissionsService.canToggleAnalysis(this.fileStatus);
}
}

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.read-only {
padding: 13px 16px;

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
:host {
height: 100%;

View File

@ -1,8 +1,7 @@
import { Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';
import { PermissionsService } from '@services/permissions.service';
import { PageRange, ReanalysisControllerService } from '@redaction/red-ui-http';
import { InputWithActionComponent, Toaster } from '@iqser/common-ui';
import { LoadingService } from '@services/loading.service';
import { InputWithActionComponent, Toaster, LoadingService } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { FileStatusWrapper } from '@models/file/file-status.wrapper';

View File

@ -24,7 +24,7 @@ import { AnnotationActionsService } from '../../services/annotation-actions.serv
import { UserPreferenceService } from '@services/user-preference.service';
import { BASE_HREF } from '../../../../tokens';
import { AppConfigKey, AppConfigService } from '../../../app-config/app-config.service';
import { LoadingService } from '@services/loading.service';
import { LoadingService } from '@iqser/common-ui';
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
import { ConfirmationDialogInput } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component';
import { loadCompareDocumentWrapper } from '../../utils/compare-mode.utils';

View File

@ -1,4 +1,4 @@
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.search-container {
margin-top: 16px;

View File

@ -3,12 +3,11 @@ import { EditDossierSectionInterface } from '../edit-dossier-section.interface';
import { DossierWrapper } from '@state/model/dossier.wrapper';
import { AppStateService } from '@state/app-state.service';
import { PermissionsService } from '@services/permissions.service';
import { LoadingService } from '@services/loading.service';
import { CircleButtonTypes, IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { FormBuilder, FormGroup } from '@angular/forms';
import * as moment from 'moment';
import { DossierAttributeWithValue } from '@models/dossier-attributes.model';
import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service';
import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui';
@Component({
selector: 'redaction-edit-dossier-attributes',

View File

@ -1,5 +1,5 @@
@import '../../../../../../assets/styles/variables';
@import '../../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.instructions {
color: $grey-7;

View File

@ -1,10 +1,9 @@
import { Component, EventEmitter, Injector, Input, OnInit, Output } from '@angular/core';
import { EditDossierSectionInterface } from '../edit-dossier-section.interface';
import { DossierWrapper } from '@state/model/dossier.wrapper';
import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import { CircleButtonTypes, DefaultListingServices, ListingComponent, Listable, LoadingService, TableColumnConfig } from '@iqser/common-ui';
import { FileManagementControllerService, FileStatus, StatusControllerService } from '@redaction/red-ui-http';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { LoadingService } from '@services/loading.service';
import * as moment from 'moment';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import { getLeftDateTime } from '@utils/functions';

View File

@ -6,9 +6,8 @@ import { PermissionsService } from '@services/permissions.service';
import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component';
import { DictionarySaveService } from '@shared/services/dictionary-save.service';
import { FormBuilder } from '@angular/forms';
import { CircleButtonTypes } from '@iqser/common-ui';
import { CircleButtonTypes, LoadingService } from '@iqser/common-ui';
import { Dictionary, DictionaryControllerService } from '@redaction/red-ui-http';
import { LoadingService } from '@services/loading.service';
@Component({
selector: 'redaction-edit-dossier-dictionary',

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.dialog-content {
padding: 0;

View File

@ -1,4 +1,3 @@
@import '../../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/variables';
.content-container {

View File

@ -1,5 +1,4 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
:root {
--dynamic-columns: '1fr';
@ -9,16 +8,6 @@
display: none;
}
.header-item {
padding: 0 24px 0 10px;
}
iqser-table-column-name::ng-deep {
> div {
padding-left: 10px !important;
}
}
cdk-virtual-scroll-viewport {
::ng-deep.cdk-virtual-scroll-content-wrapper {
grid-template-columns: auto 3fr 2fr repeat(var(--dynamic-columns, 1), 1fr) 2fr 1fr auto 11px;

View File

@ -10,15 +10,6 @@ import {
TemplateRef,
ViewChild
} from '@angular/core';
import {
CircleButtonTypes,
DefaultListingServices,
keyChecker,
ListingComponent,
NestedFilter,
TableColumnConfig,
Toaster
} from '@iqser/common-ui';
import { AppStateService } from '@state/app-state.service';
import { FileDropOverlayService } from '@upload-download/services/file-drop-overlay.service';
import { FileUploadModel } from '@upload-download/model/file-upload.model';
@ -38,7 +29,16 @@ import { DossiersDialogService } from '../../services/dossiers-dialog.service';
import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy';
import { AppConfigKey, AppConfigService } from '@app-config/app-config.service';
import { ActionConfig } from '@shared/components/page-header/models/action-config.model';
import { LoadingService } from '@services/loading.service';
import {
CircleButtonTypes,
DefaultListingServices,
keyChecker,
ListingComponent,
LoadingService,
NestedFilter,
TableColumnConfig,
Toaster
} from '@iqser/common-ui';
import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service';
import { DossierAttributeWithValue } from '@models/dossier-attributes.model';
import { UserPreferenceService } from '@services/user-preference.service';
@ -70,6 +70,12 @@ export class DossierOverviewScreenComponent extends ListingComponent<FileStatusW
hide: !this.currentUser.isManager
}
];
tableColumnConfigs: readonly TableColumnConfig<FileStatusWrapper>[] = [];
collapsedDetails = false;
dossierAttributes: DossierAttributeWithValue[] = [];
fileAttributeConfigs: FileAttributeConfig[];
dynamicColumnsCount = 0;
protected readonly _primaryKey = 'filename';
private readonly _defaultTableConfigs: readonly TableColumnConfig<FileStatusWrapper>[] = [
{
label: _('dossier-overview.table-col-names.name'),
@ -97,14 +103,6 @@ export class DossierOverviewScreenComponent extends ListingComponent<FileStatusW
sortByKey: 'statusSort'
}
];
tableColumnConfigs: readonly TableColumnConfig<FileStatusWrapper>[] = [];
collapsedDetails = false;
dossierAttributes: DossierAttributeWithValue[] = [];
fileAttributeConfigs: FileAttributeConfig[];
protected readonly _primaryKey = 'filename';
dynamicColumnsCount = 0;
@ViewChild(DossierDetailsComponent, { static: false })
private readonly _dossierDetailsComponent: DossierDetailsComponent;
private _lastScrolledIndex: number;
@ -149,6 +147,10 @@ export class DossierOverviewScreenComponent extends ListingComponent<FileStatusW
return this.filterService.getGroup('quickFilters')?.filters.filter(f => !f.required && f.checked);
}
get displayedInFileListAttributes() {
return this.fileAttributeConfigs.filter(config => config.displayedInFileList);
}
async ngOnInit(): Promise<void> {
this._loadingService.start();
try {
@ -273,10 +275,6 @@ export class DossierOverviewScreenComponent extends ListingComponent<FileStatusW
this.collapsedDetails = !this.collapsedDetails;
}
get displayedInFileListAttributes() {
return this.fileAttributeConfigs.filter(config => config.displayedInFileList);
}
recentlyModifiedChecker = (file: FileStatusWrapper) =>
moment(file.lastUpdated).add(this._appConfigService.getConfig(AppConfigKey.RECENT_PERIOD_IN_HOURS), 'hours').isAfter(moment());

View File

@ -1,5 +1,4 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
.vertical-line {
width: 1px;

View File

@ -3,7 +3,15 @@ import { ActivatedRoute, ActivatedRouteSnapshot, NavigationExtras, Router } from
import { AppStateService } from '@state/app-state.service';
import { Annotations, WebViewerInstance } from '@pdftron/webviewer';
import { PdfViewerComponent } from '../../components/pdf-viewer/pdf-viewer.component';
import { AutoUnsubscribe, CircleButtonTypes, Debounce, FilterService, NestedFilter, processFilters } from '@iqser/common-ui';
import {
AutoUnsubscribe,
CircleButtonTypes,
Debounce,
FilterService,
LoadingService,
NestedFilter,
processFilters
} from '@iqser/common-ui';
import { MatDialogRef, MatDialogState } from '@angular/material/dialog';
import { ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry.wrapper';
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
@ -30,7 +38,6 @@ import { ViewMode } from '@models/file/view-mode';
import { FileWorkloadComponent } from '../../components/file-workload/file-workload.component';
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy';
import { LoadingService } from '@services/loading.service';
import { clearStamps, stampPDFPage } from '@utils/page-stamper';
import { TranslateService } from '@ngx-translate/core';
import { fileStatusTranslations } from '../../translations/file-status-translations';
@ -61,10 +68,10 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni
displayPDFViewer = false;
viewDocumentInfo = false;
excludePages = false;
@ViewChild(PdfViewerComponent) readonly viewerComponent: PdfViewerComponent;
private _instance: WebViewerInstance;
private _lastPage: string;
private _reloadFileOnReanalysis = false;
@ViewChild(PdfViewerComponent) readonly viewerComponent: PdfViewerComponent;
@ViewChild('fileWorkloadComponent') private readonly _workloadComponent: FileWorkloadComponent;
@ViewChild('annotationFilterTemplate', {
read: TemplateRef,

View File

@ -1,4 +1,4 @@
@import 'apps/red-ui/src/assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
@import '../../../../../assets/styles/variables';
.content-container {

View File

@ -1,12 +1,11 @@
import { Component, Injector, OnDestroy } from '@angular/core';
import { DefaultListingServices, keyChecker, Listable, ListingComponent, TableColumnConfig } from '@iqser/common-ui';
import { DefaultListingServices, keyChecker, Listable, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui';
import { MatchedDocument, SearchControllerService, SearchResult } from '@redaction/red-ui-http';
import { BehaviorSubject, Observable } from 'rxjs';
import { debounceTime, map, skip, switchMap, tap } from 'rxjs/operators';
import { ActivatedRoute, Router } from '@angular/router';
import { AppStateService } from '@state/app-state.service';
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
import { LoadingService } from '@services/loading.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { fileStatusTranslations } from '../../translations/file-status-translations';
import { SearchPositions } from '@shared/components/page-header/models/search-positions.type';
@ -40,7 +39,6 @@ export class SearchScreenComponent extends ListingComponent<ListItem> implements
readonly searchPositions = SearchPositions;
readonly itemSize = 85;
protected readonly _primaryKey = 'filename';
readonly tableHeaderLabel = _('search-screen.table-header');
readonly tableColumnConfigs: TableColumnConfig<ListItem>[] = [
{ label: _('search-screen.cols.document') },
@ -56,6 +54,7 @@ export class SearchScreenComponent extends ListingComponent<ListItem> implements
tap(result => this.entitiesService.setEntities(result)),
tap(() => this._loadingService.stop())
);
protected readonly _primaryKey = 'filename';
constructor(
private readonly _router: Router,

View File

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

View File

@ -1,4 +1,4 @@
@import '../../../../../assets/styles/red-mixins';
@import '../../../../../assets/styles/variables';
.empty-state {
display: flex;

View File

@ -1,7 +0,0 @@
<ng-container *ngIf="loadingService.isLoading$ | async">
<section class="full-page-load-section"></section>
<section class="full-page-load-spinner">
<mat-spinner diameter="40"></mat-spinner>
<ng-content></ng-content>
</section>
</ng-container>

View File

@ -1,24 +0,0 @@
@import '../../../../../assets/styles/variables';
.full-page-load-section,
.full-page-load-spinner {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.full-page-load-section {
opacity: 0.7;
background: $white;
z-index: 900;
}
.full-page-load-spinner {
z-index: 1000;
justify-content: center;
align-items: center;
flex-direction: column;
display: flex;
}

View File

@ -1,12 +0,0 @@
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { LoadingService } from '@services/loading.service';
@Component({
selector: 'redaction-full-page-loading-indicator',
templateUrl: './full-page-loading-indicator.component.html',
styleUrls: ['./full-page-loading-indicator.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class FullPageLoadingIndicatorComponent {
constructor(readonly loadingService: LoadingService) {}
}

View File

@ -1,5 +1,5 @@
@import '../../../../../assets/styles/variables';
@import '../../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
:host {
display: block;

View File

@ -1,6 +1,5 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FullPageLoadingIndicatorComponent } from './components/full-page-loading-indicator/full-page-loading-indicator.component';
import { InitialsAvatarComponent } from './components/initials-avatar/initials-avatar.component';
import { ScrollingModule } from '@angular/cdk/scrolling';
import { PaginationComponent } from './components/pagination/pagination.component';
@ -31,7 +30,6 @@ import { DatePipe } from '@shared/pipes/date.pipe';
const buttons = [FileDownloadBtnComponent, UserButtonComponent];
const components = [
FullPageLoadingIndicatorComponent,
InitialsAvatarComponent,
PaginationComponent,
AnnotationIconComponent,

View File

@ -1,5 +1,5 @@
@import '../../../../assets/styles/variables';
@import '../../../../assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.red-upload-download-overlay {
background: $white;

View File

@ -1,44 +0,0 @@
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
const MIN_LOADING_TIME = 300;
@Injectable({
providedIn: 'root'
})
export class LoadingService {
private readonly _loadingEvent$ = new BehaviorSubject(false);
readonly isLoading$ = this._loadingEvent$.asObservable();
private _loadingStarted: number;
start(): void {
setTimeout(() => {
this._loadingEvent$.next(true);
this._loadingStarted = new Date().getTime();
});
}
stop(): void {
const timeSinceStarted = new Date().getTime() - this._loadingStarted;
const remainingLoadingTime = MIN_LOADING_TIME - timeSinceStarted;
return remainingLoadingTime > 0 ? this._stopAfter(remainingLoadingTime) : this._stop();
}
loadWhile(func: Promise<void>) {
this.start();
func.then(
() => this.stop(),
() => this.stop()
);
}
private _stop() {
setTimeout(() => this._loadingEvent$.next(false));
}
private _stopAfter(timeout: number) {
setTimeout(() => this._stop(), timeout);
}
}

View File

@ -0,0 +1,20 @@
import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { ErrorService } from '@iqser/common-ui';
import { Observable, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
@Injectable()
export class ServerErrorInterceptor implements HttpInterceptor {
constructor(private readonly _errorService: ErrorService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
map((event: HttpEvent<any>) => event),
catchError((error: HttpErrorResponse) => {
if ([0, 500].includes(error.status)) this._errorService.set(error);
return throwError(error);
})
);
}
}

View File

@ -846,6 +846,10 @@
"side-nav-title": "Configurations",
"unsaved-changes": "You have unsaved changes. Save or revert before changing the tab."
},
"error": {
"generic": "Oops! Something went wrong...",
"reload": "Reload"
},
"exact-date": "{day} {month} {year} at {hour}:{minute}",
"file": "File",
"file-attribute-types": {

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="20px" version="1.1" viewBox="0 0 20 20" width="20px"
xmlns="http://www.w3.org/2000/svg">
<!-- Generator: Sketch 49.1 (51147) - http://www.bohemiancoding.com/sketch -->
<defs></defs>
<g fill="none" fill-rule="evenodd" id="Upload" stroke="none" stroke-width="1">
<g fill="currentColor" id="Upload-Errors-01"
transform="translate(-1388.000000, -622.000000)">
<path
d="M1405.075,639.075 C1406.88516,637.26484 1408,634.761 1408,632 C1408,629.2398 1406.88516,626.7352 1405.075,624.925 C1403.26484,623.1148 1400.761,622 1398,622 C1395.2398,622 1392.7352,623.11484 1390.925,624.925 C1389.1148,626.73516 1388,629.239 1388,632 C1388,634.7602 1389.11484,637.2648 1390.925,639.075 C1392.73516,640.8852 1395.239,642 1398,642 C1400.7602,642 1403.2648,640.88516 1405.075,639.075 Z M1399.3532,635.8578 C1399.3532,635.10858 1398.75008,634.50468 1398.00008,634.50468 C1397.25086,634.50468 1396.62898,635.1078 1396.62898,635.8578 C1396.62898,636.60702 1397.25086,637.2289 1398.00008,637.2289 C1398.7493,637.2289 1399.3532,636.60702 1399.3532,635.8578 Z M1398.00008,633.1336 C1397.50632,633.1336 1397.1407,632.73126 1397.08602,632.21954 L1396.62898,628.14294 C1396.55554,627.42966 1397.30554,626.77184 1398.00008,626.77184 C1398.69462,626.77184 1399.44462,627.42966 1399.3532,628.14294 L1398.91414,632.21954 C1398.85945,632.73126 1398.49382,633.1336 1398.00008,633.1336 Z"
id="error_icon"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,5 +1,5 @@
@import 'variables';
@import 'red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.mat-autocomplete-panel {
@include scroll-bar;

View File

@ -1,5 +1,5 @@
@import 'variables';
@import 'red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.breadcrumbs-container {
display: flex;

View File

@ -1,5 +1,5 @@
@import 'variables';
@import 'red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.oval,
.square {

View File

@ -1,5 +1,4 @@
@import 'variables';
@import 'red-mixins';
.changed-row-marker {
background: rgba($primary, 0.1);

View File

@ -1,5 +1,5 @@
@import 'variables';
@import 'red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.mat-menu-panel {
border-radius: 8px !important;

View File

@ -1,23 +0,0 @@
@import '../../../../../libs/common-ui/src/assets/styles/mixins';
@import 'variables';
@mixin line-clamp($lines) {
display: -webkit-box;
-webkit-line-clamp: $lines;
-webkit-box-orient: vertical;
overflow: hidden;
display: block;
@if $lines == 1 {
text-overflow: ellipsis;
white-space: nowrap;
}
}
@mixin inset-shadow {
box-shadow: inset 0 4px 3px -2px $grey-4;
}
@mixin drop-shadow {
box-shadow: 0 4px 3px 2px $grey-4;
}

View File

@ -1,5 +1,5 @@
@import 'variables';
@import 'red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
html,
body {

View File

@ -1,5 +1,5 @@
@import 'variables';
@import 'red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.mat-select-panel {
@include scroll-bar;

View File

@ -1,5 +1,5 @@
@import 'variables';
@import 'red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
.default-table {
border-collapse: collapse;

View File

@ -1,87 +0,0 @@
@import 'variables';
@import 'red-mixins';
a {
color: $primary;
transition: color 0.1s;
&:hover {
color: lighten($primary, 10%);
}
&.with-underline {
&:hover {
text-decoration: underline;
}
}
cursor: pointer;
}
pre {
font-family: Inter, sans-serif;
color: $accent;
}
.heading-xl {
font-size: 24px;
font-weight: 600;
line-height: 29px;
}
.info {
font-size: 13px;
line-height: 18px;
opacity: 0.7;
}
.page-title {
font-size: 13px;
font-weight: 600;
line-height: 18px;
text-align: center;
padding: 0 20px;
}
.small-label {
opacity: 0.7;
font-size: 11px;
line-height: 14px;
font-weight: initial;
}
.link-action {
font-size: 11px;
line-height: 14px;
text-decoration: underline;
cursor: pointer;
&:hover {
text-decoration: none;
}
}
.large-label {
color: $accent;
font-size: 13px;
line-height: 16px;
}
.clamp-1 {
@include line-clamp(1);
}
.clamp-2 {
@include line-clamp(2);
}
.text-overflow {
display: block !important;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.no-wrap {
white-space: nowrap;
}

View File

@ -2,7 +2,6 @@
@import '~ngx-toastr/toastr';
@import 'red-material-theme';
@import 'red-page-layout';
@import 'red-text-styles';
@import 'red-select';
@import 'red-autocomplete';
@import 'red-list';

@ -1 +1 @@
Subproject commit 007aedbe09c80fce4ca44a1b00d669685a9e1d36
Subproject commit 82f27f1ed9ff98c98877c4cf128b4b41832a1724

View File

@ -21,7 +21,7 @@
"format:check": "nx format:check",
"format:write": "nx format:write",
"help": "nx help",
"i18n:extract": "ngx-translate-extract --input ./apps/red-ui/src --output apps/red-ui/src/assets/i18n/en.json --clean --sort --format namespaced-json && prettier apps/red-ui/src/assets/i18n/*.json --write",
"i18n:extract": "ngx-translate-extract --input ./apps/red-ui/src ./libs/common-ui/src --output apps/red-ui/src/assets/i18n/en.json --clean --sort --format namespaced-json && prettier apps/red-ui/src/assets/i18n/*.json --write",
"postinstall": "ngcc --properties es2015 browser module main",
"lint": "nx workspace-lint && nx lint",
"lint-fix": "nx workspace-lint --fix && nx lint --fix",

View File

@ -1,5 +1,5 @@
@import '../apps/red-ui/src/assets/styles/variables';
@import '../apps/red-ui/src/assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
@import 'mixin';
.site-sidebar {

View File

@ -1,5 +1,5 @@
@import '../apps/red-ui/src/assets/styles/variables';
@import '../apps/red-ui/src/assets/styles/red-mixins';
@import 'libs/common-ui/src/assets/styles/mixins';
@import 'fonts';
@import 'header';
@import 'homepage';