From 404f1f6da03e1de695bbe8a06db9e555eb0d5a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Kilchenmann?= Date: Mon, 9 May 2022 17:47:42 +0200 Subject: [PATCH] refactor(message): use only one static error component (DEV-900) (#727) * fix(resource): show progress indicator until whole resource is loaded (DEV-638) * refactor(message): delete message component * refactor(error): update error message * refactor(error): update error message * refactor(admin): use app-error instead of app-message * chore(gh): merge wrong created branch into correct one (#728) * test(error): add tests * test(user): update tests * test(user): update tests * test(user): fix user form test * refactor(error/status): rename app-error into app-status * refactor: fix typo and clean up commented code --- src/app/app-routing.module.ts | 8 +- src/app/app.module.ts | 7 +- .../action/login-form/login-form.component.ts | 2 +- .../action/message/message.component.html | 61 ----- .../action/message/message.component.scss | 110 -------- .../action/message/message.component.spec.ts | 218 ---------------- .../main/action/message/message.component.ts | 209 --------------- src/app/main/cache/cache.service.ts | 2 +- src/app/main/dialog/dialog.component.html | 2 +- src/app/main/dialog/dialog.component.spec.ts | 4 +- src/app/main/error/error.component.spec.ts | 62 ----- src/app/main/help/help.component.spec.ts | 4 +- src/app/main/help/help.component.ts | 2 +- src/app/main/main.component.spec.ts | 4 +- src/app/main/main.component.ts | 2 +- .../main/services/authentication.service.ts | 2 +- .../error-handler.service.spec.ts | 0 .../error-handler.service.ts | 6 +- src/app/main/services/notification.service.ts | 4 +- .../status.component.html} | 21 +- .../status.component.scss} | 12 +- src/app/main/status/status.component.spec.ts | 145 +++++++++++ .../status.component.ts} | 69 +++-- src/app/project/board/board.component.spec.ts | 4 +- src/app/project/board/board.component.ts | 2 +- .../add-user/add-user.component.spec.ts | 4 +- .../add-user/add-user.component.ts | 2 +- .../collaboration.component.html | 2 +- .../collaboration.component.spec.ts | 4 +- .../collaboration/collaboration.component.ts | 2 +- .../select-group.component.spec.ts | 4 +- .../select-group/select-group.component.ts | 2 +- .../list-info-form.component.spec.ts | 4 +- .../list-info-form.component.ts | 2 +- .../edit-list-item.component.ts | 2 +- .../list-item-form.component.ts | 2 +- .../list/list-item/list-item.component.ts | 2 +- src/app/project/list/list.component.html | 7 +- src/app/project/list/list.component.ts | 2 +- .../ontology-form/ontology-form.component.ts | 2 +- .../project/ontology/ontology.component.html | 5 +- .../ontology/ontology.component.spec.ts | 4 +- .../project/ontology/ontology.component.ts | 2 +- .../property-form/property-form.component.ts | 2 +- .../property-info/property-info.component.ts | 2 +- .../resource-class-form.component.spec.ts | 4 +- .../resource-class-form.component.ts | 2 +- .../resource-class-info.component.ts | 2 +- .../add-group/add-group.component.html | 3 - .../permission/permission.component.html | 2 +- .../permission/permission.component.spec.ts | 4 +- .../permission/permission.component.ts | 2 +- .../project-form.component.spec.ts | 4 +- .../project-form/project-form.component.ts | 2 +- src/app/project/project.component.html | 6 +- src/app/project/project.component.spec.ts | 4 +- .../groups-list/groups-list.component.html | 2 +- .../groups-list/groups-list.component.ts | 6 - .../projects-list.component.spec.ts | 4 +- .../projects-list/projects-list.component.ts | 2 +- .../projects/projects.component.spec.ts | 4 +- src/app/system/projects/projects.component.ts | 2 +- src/app/system/system.component.html | 2 +- src/app/system/system.component.spec.ts | 4 +- .../users-list/users-list.component.spec.ts | 4 +- .../users/users-list/users-list.component.ts | 2 +- src/app/system/users/users.component.spec.ts | 4 +- src/app/system/users/users.component.ts | 2 +- .../user/account/account.component.spec.ts | 4 +- src/app/user/account/account.component.ts | 2 +- .../dashboard/dashboard.component.spec.ts | 4 +- src/app/user/dashboard/dashboard.component.ts | 2 +- .../membership/membership.component.spec.ts | 4 +- .../user/membership/membership.component.ts | 2 +- .../user/profile/profile.component.spec.ts | 4 +- src/app/user/profile/profile.component.ts | 2 +- .../password-form.component.html | 245 +++++++++--------- .../password-form.component.spec.ts | 4 +- .../password-form/password-form.component.ts | 75 +----- .../user/user-form/user-form.component.html | 188 +++++++------- .../user-form/user-form.component.spec.ts | 66 ++++- src/app/user/user-form/user-form.component.ts | 72 ++--- src/app/user/user-menu/user-menu.component.ts | 2 +- src/app/user/user.component.html | 2 +- src/app/user/user.component.spec.ts | 4 +- .../intermediate/intermediate.component.ts | 2 +- .../create-link-resource.component.ts | 2 +- .../properties/properties.component.ts | 2 +- .../archive/archive.component.ts | 2 +- .../representation/audio/audio.component.ts | 2 +- .../document/document.component.ts | 2 +- .../still-image/still-image.component.ts | 2 +- .../representation/video/video.component.ts | 2 +- .../resource-instance-form.component.ts | 2 +- .../resource-link-form.component.ts | 2 +- .../workspace/resource/resource.component.ts | 2 +- .../resource/services/project.service.ts | 2 +- .../values/list-value/list-value.component.ts | 2 +- .../results/list-view/list-view.component.ts | 2 +- .../advanced-search.component.html | 4 +- .../advanced-search.component.ts | 6 +- .../search-list-value.component.ts | 2 +- .../fulltext-search.component.ts | 2 +- src/assets/http/statusMsg.ts | 2 +- src/assets/images/dsp-error.svg | 6 +- 105 files changed, 651 insertions(+), 1174 deletions(-) delete mode 100644 src/app/main/action/message/message.component.html delete mode 100644 src/app/main/action/message/message.component.scss delete mode 100644 src/app/main/action/message/message.component.spec.ts delete mode 100644 src/app/main/action/message/message.component.ts delete mode 100644 src/app/main/error/error.component.spec.ts rename src/app/main/{error => services}/error-handler.service.spec.ts (100%) rename src/app/main/{error => services}/error-handler.service.ts (96%) rename src/app/main/{error/error.component.html => status/status.component.html} (52%) rename src/app/main/{error/error.component.scss => status/status.component.scss} (82%) create mode 100644 src/app/main/status/status.component.spec.ts rename src/app/main/{error/error.component.ts => status/status.component.ts} (64%) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 87d5c975c5..4e17aed31c 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -3,7 +3,7 @@ import { RouterModule, Routes } from '@angular/router'; import { AuthGuard } from './main/guard/auth.guard'; import { CookiePolicyComponent } from './main/cookie-policy/cookie-policy.component'; -import { ErrorComponent } from './main/error/error.component'; +import { StatusComponent } from './main/status/status.component'; import { HelpComponent } from './main/help/help.component'; import { LoginFormComponent } from './main/action/login-form/login-form.component'; import { MainComponent } from './main/main.component'; @@ -97,7 +97,7 @@ const routes: Routes = [ }, { path: '**', - component: ErrorComponent, + component: StatusComponent, data: { status: 404 } } ] @@ -181,12 +181,12 @@ const routes: Routes = [ }, { path: 'teapot', - component: ErrorComponent, + component: StatusComponent, data: { status: 418 } }, { path: '**', - component: ErrorComponent, + component: StatusComponent, data: { status: 404 } } ]; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c3499ef352..bbef519db6 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -20,7 +20,6 @@ import { AppComponent } from './app.component'; import { ConfirmationDialogComponent } from './main/action/confirmation-dialog/confirmation-dialog.component'; import { ConfirmationMessageComponent } from './main/action/confirmation-dialog/confirmation-message/confirmation-message.component'; import { LoginFormComponent } from './main/action/login-form/login-form.component'; -import { MessageComponent } from './main/action/message/message.component'; import { ProgressIndicatorComponent } from './main/action/progress-indicator/progress-indicator.component'; import { SelectedResourcesComponent } from './main/action/selected-resources/selected-resources.component'; import { SortButtonComponent } from './main/action/sort-button/sort-button.component'; @@ -35,7 +34,7 @@ import { ExistingNameDirective } from './main/directive/existing-name/existing-n import { ExternalLinksDirective } from './main/directive/external-links.directive'; import { GndDirective } from './main/directive/gnd/gnd.directive'; import { InvalidControlScrollDirective } from './main/directive/invalid-control-scroll.directive'; -import { ErrorComponent } from './main/error/error.component'; + import { FooterComponent } from './main/footer/footer.component'; import { GridComponent } from './main/grid/grid.component'; import { HeaderComponent } from './main/header/header.component'; @@ -51,6 +50,7 @@ import { TruncatePipe } from './main/pipes/string-transformation/truncate.pipe'; import { TimePipe } from './main/pipes/time.pipe'; import { SelectLanguageComponent } from './main/select-language/select-language.component'; import { DatadogRumService } from './main/services/datadog-rum.service'; +import { StatusComponent } from './main/status/status.component'; import { MaterialModule } from './material-module'; import { BoardComponent } from './project/board/board.component'; import { AddUserComponent } from './project/collaboration/add-user/add-user.component'; @@ -201,7 +201,6 @@ export function httpLoaderFactory(httpClient: HttpClient) { DocumentComponent, DragDropDirective, EditListItemComponent, - ErrorComponent, ExistingNameDirective, ExpertSearchComponent, ExternalLinksDirective, @@ -233,7 +232,6 @@ export function httpLoaderFactory(httpClient: HttpClient) { LoginFormComponent, MainComponent, MembershipComponent, - MessageComponent, OntologyComponent, OntologyFormComponent, PasswordFormComponent, @@ -282,6 +280,7 @@ export function httpLoaderFactory(httpClient: HttpClient) { SortButtonComponent, SpecifyPropertyValueComponent, SplitPipe, + StatusComponent, StillImageComponent, StringifyStringLiteralPipe, StringLiteralInputComponent, diff --git a/src/app/main/action/login-form/login-form.component.ts b/src/app/main/action/login-form/login-form.component.ts index a0fbdf5279..679c83746f 100644 --- a/src/app/main/action/login-form/login-form.component.ts +++ b/src/app/main/action/login-form/login-form.component.ts @@ -3,7 +3,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { ApiResponseData, ApiResponseError, KnoraApiConnection, LoginResponse } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from '../../declarations/dsp-api-tokens'; -import { ErrorHandlerService } from '../../error/error-handler.service'; +import { ErrorHandlerService } from '../../services/error-handler.service'; import { AuthenticationService } from '../../services/authentication.service'; import { ComponentCommunicationEventService, EmitEvent, Events } from '../../services/component-communication-event.service'; import { DatadogRumService } from '../../services/datadog-rum.service'; diff --git a/src/app/main/action/message/message.component.html b/src/app/main/action/message/message.component.html deleted file mode 100644 index 7f9a41cd87..0000000000 --- a/src/app/main/action/message/message.component.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - {{message?.type | uppercase }} {{message?.status}} | {{message?.statusMsg}} - - - - - - - - - → {{message?.route}} - - - - - - -

{{apiError.error.toString()}}

-
-
- - -

{{links.title}}

- - {{item.icon}} -

{{item.label}}

-
-
- -
- - - -

{{message.footnote}}

- - -

- Please come back in a few minutes and try to reload the page. -

- - - - mail_outline Contact the support team - -
- -
- - - -
- - {{message?.statusText}} - - -
- -
diff --git a/src/app/main/action/message/message.component.scss b/src/app/main/action/message/message.component.scss deleted file mode 100644 index f45b4cd4c8..0000000000 --- a/src/app/main/action/message/message.component.scss +++ /dev/null @@ -1,110 +0,0 @@ -@import '../../../../assets/style/responsive'; - -$accent: rgba(255, 196, 0, 1); -$primary: rgba(0, 105, 92, 1); -$warn: rgb(244, 67, 54); - -.app-panel { - display: flex; - box-sizing: border-box; - flex-direction: row; - white-space: nowrap; -} - -.fill-remaining-space { - flex-basis: auto; - flex-grow: 1; - flex-shrink: 1; -} - -.app-error { - background-color: rgba($warn, .5); -} - -.app-warning { - background-color: rgba($accent, .5); -} - -.app-note, -.app-hint { - background-color: $primary; - color: #fff; -} - -.app-error, -.app-warning, -.app-note, -.app-hint { - margin: 12px auto; - max-width: 640px; - - .message-subtitle { - padding-bottom: 12px; - - .left { - float: left; - left: 16px; - position: absolute; - text-align: left; - } - - .right { - float: right; - right: 16px; - position: absolute; - text-align: right; - - } - } - - .message-title { - padding-top: 12px; - - } - - .message-content { - margin-bottom: 48px; - margin-top: 48px; - - .link { - cursor: pointer; - } - } - - .message-footnote { - padding: 24px; - - .bolder { - font-weight: bolder; - } - - .action { - margin: 48px auto 0 auto; - display: table; - } - } -} - -.app-short-message { - - .app-short-message-text { - font-weight: bolder; - text-align: center; - } - -} - - -// mobile device: phone -@media (max-width: map-get($grid-breakpoints, phone)) { - - .app-panel { - white-space: normal; - } - - .app-short-message { - .app-short-message-text { - text-align: left; - } - } -} diff --git a/src/app/main/action/message/message.component.spec.ts b/src/app/main/action/message/message.component.spec.ts deleted file mode 100644 index 699956e37e..0000000000 --- a/src/app/main/action/message/message.component.spec.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { waitForAsync, ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing'; -import { MatCardModule } from '@angular/material/card'; -import { MatIconModule } from '@angular/material/icon'; -import { MatListModule } from '@angular/material/list'; -import { By } from '@angular/platform-browser'; -import { RouterTestingModule } from '@angular/router/testing'; -import { ApiResponseError } from '@dasch-swiss/dsp-js'; -import { StatusMsg } from 'src/assets/http/statusMsg'; -import { AppMessageData, MessageComponent } from './message.component'; - -/** - * test host component to simulate parent component. - */ -@Component({ - template: ` - ` -}) -class ShortMessageTestHostComponent implements OnInit { - - @ViewChild('message', { static: false }) messageComponent: MessageComponent; - - shortMessage: AppMessageData = { - status: 200, - statusMsg: 'Success', - statusText: 'You just updated the user profile.', - type: 'Note', - footnote: 'Close it' - }; - - size = 'short'; - - constructor() { - } - - ngOnInit() { } -} - -/** - * test host component to simulate parent component. - */ -@Component({ - template: '' -}) -class LongMessageTestHostComponent implements OnInit { - - @ViewChild('message', { static: false }) messageComponent: MessageComponent; - - errorMessage: ApiResponseError = { - status: 403, - url: 'http://0.0.0.0:3333/admin/projects/shortcode/001/members', - method: 'Http failure response for http://0.0.0.0:3333/admin/projects/shortcode/001/members: 400 Bad Request', - error: 'error message' - }; - - constructor() { - } - - ngOnInit() { } -} - -/** - * test host component to simulate parent component. - */ -@Component({ - template: '' -}) -class ShortMessageWithDurationTestHostComponent implements OnInit { - - @ViewChild('message', { static: false }) messageComponent: MessageComponent; - - shortMessage: AppMessageData = { - status: 200, - statusMsg: 'Success', - statusText: 'You just updated the user profile.', - type: 'Note', - footnote: 'Close it' - }; - - size = 'short'; - - constructor() { - } - - ngOnInit() { } -} - -describe('MessageComponent', () => { - let shortMsgTestHostComponent: ShortMessageTestHostComponent; - let shortMsgTestHostFixture: ComponentFixture; - - let longMsgTestHostComponent: LongMessageTestHostComponent; - let longMsgTestHostFixture: ComponentFixture; - - let shortMsgDurationTestHostComponent: ShortMessageWithDurationTestHostComponent; - let shortMsgDurationTestHostFixture: ComponentFixture; - - let status: StatusMsg; - let apiResonseError: ApiResponseError; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ - MatCardModule, - MatIconModule, - MatListModule, - RouterTestingModule - ], - providers: [ - StatusMsg, - ApiResponseError - ], - declarations: [ - MessageComponent, - ShortMessageTestHostComponent, - LongMessageTestHostComponent, - ShortMessageWithDurationTestHostComponent - ] - }).compileComponents(); - - status = TestBed.inject(StatusMsg); - apiResonseError = TestBed.inject(ApiResponseError); - - })); - - describe('display a short message', () => { - beforeEach(() => { - shortMsgTestHostFixture = TestBed.createComponent(ShortMessageTestHostComponent); - shortMsgTestHostComponent = shortMsgTestHostFixture.componentInstance; - shortMsgTestHostFixture.detectChanges(); - }); - - it('should create', () => { - expect(shortMsgTestHostComponent.messageComponent).toBeTruthy(); - }); - - it('should display a short message', () => { - expect(shortMsgTestHostComponent.messageComponent).toBeTruthy(); - expect(shortMsgTestHostComponent.messageComponent.message.status).toEqual(200); - expect(shortMsgTestHostComponent.messageComponent.message.statusMsg).toEqual('Success'); - - const hostCompDe = shortMsgTestHostFixture.debugElement; - - const messageEl = hostCompDe.query(By.directive(MessageComponent)); - - const spanShortMessageElement = messageEl.query(By.css('.app-short-message-text')); - - expect(spanShortMessageElement.nativeElement.innerText).toEqual('You just updated the user profile.'); - - }); - - }); - - describe('display a long message', () => { - beforeEach(() => { - longMsgTestHostFixture = TestBed.createComponent(LongMessageTestHostComponent); - longMsgTestHostComponent = longMsgTestHostFixture.componentInstance; - longMsgTestHostFixture.detectChanges(); - }); - - it('should create', () => { - expect(longMsgTestHostComponent.messageComponent).toBeTruthy(); - }); - - it('should display a long message', () => { - expect(longMsgTestHostComponent.messageComponent).toBeTruthy(); - - expect(longMsgTestHostComponent.messageComponent.message.status).toEqual(403); - expect(longMsgTestHostComponent.messageComponent.message.statusMsg).toEqual('Forbidden'); - expect(longMsgTestHostComponent.messageComponent.message.statusText).toEqual( - 'The request was a legal request, but the server is refusing to respond to it'); - - const hostCompDe = longMsgTestHostFixture.debugElement; - - const messageEl = hostCompDe.query(By.directive(MessageComponent)); - - const messageSubtitleElement = messageEl.query(By.css('.message-subtitle .left')); - - expect(messageSubtitleElement.nativeElement.innerText).toEqual('ERROR 403 | Forbidden'); - - const messageTitleElement = messageEl.query(By.css('.message-title')); - - expect(messageTitleElement.nativeElement.innerText).toEqual( - 'The request was a legal request, but the server is refusing to respond to it'); - - }); - }); - - describe('display a short message with a duration of 2 seconds', () => { - beforeEach(() => { - shortMsgDurationTestHostFixture = TestBed.createComponent(ShortMessageWithDurationTestHostComponent); - shortMsgDurationTestHostComponent = shortMsgDurationTestHostFixture.componentInstance; - shortMsgDurationTestHostFixture.detectChanges(); - }); - - it('should create', () => { - expect(shortMsgDurationTestHostComponent.messageComponent).toBeTruthy(); - }); - - it('should display a short message', fakeAsync(() => { - expect(shortMsgDurationTestHostComponent.messageComponent).toBeTruthy(); - expect(shortMsgDurationTestHostComponent.messageComponent.message.status).toEqual(200); - expect(shortMsgDurationTestHostComponent.messageComponent.message.statusMsg).toEqual('Success'); - - const hostCompDe = shortMsgDurationTestHostFixture.debugElement; - - const messageEl = hostCompDe.query(By.directive(MessageComponent)); - - const spanShortMessageElement = messageEl.query(By.css('.app-short-message-text')); - - expect(spanShortMessageElement.nativeElement.innerText).toEqual('You just updated the user profile.'); - - shortMsgDurationTestHostFixture.whenStable().then(() => { - expect(shortMsgDurationTestHostComponent.messageComponent.disable).toBeTruthy(); - }); - })); - }); -}); diff --git a/src/app/main/action/message/message.component.ts b/src/app/main/action/message/message.component.ts deleted file mode 100644 index 401b6e8d79..0000000000 --- a/src/app/main/action/message/message.component.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { Location } from '@angular/common'; -import { Component, Input, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; -import { ApiResponseError } from '@dasch-swiss/dsp-js'; -import { StatusMsg } from 'src/assets/http/statusMsg'; - -/** - * data type for messages - */ -export class AppMessageData { - status: number; - statusMsg?: string; - statusText?: string; - type?: string; - route?: string; - footnote?: string; - errorInfo?: string; - url?: string; -} - -@Component({ - selector: 'app-message', - templateUrl: './message.component.html', - styleUrls: ['./message.component.scss'] -}) -export class MessageComponent implements OnInit { - - /** - * message type: AppMessageData - * - * @param message This type needs at least a status number (0-599). - * In this case, or if type is ApiResponseError, it takes the default status messages - * from the list of HTTP status codes (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) - */ - @Input() message: AppMessageData = new AppMessageData(); - - /** - * message type: ApiResponseError - * @param apiError - */ - @Input() apiError?: ApiResponseError; - - /** - * size of the message: long, medium or short? - * @param size Default size is 'long' - */ - @Input() size: 'short' | 'medium' | 'long' = 'long'; - - /** - * @param duration How long should the message be displayed - */ - @Input() duration?: number; - - statusMsg: any; - - isLoading = true; - - showLinks = false; - - // disable message - disable = false; - - /** - - * default link list, which will be used in message content to give a user some possibilities - * what he can do in the case of an error - * - */ - links: any = { - title: 'You have the following possibilities now', - list: [ - { - label: 'go to the start page', - route: '/', - icon: 'keyboard_arrow_right' - }, - { - label: 'try to login', - route: '/login', - icon: 'keyboard_arrow_right' - }, - { - label: 'go back', - route: '<--', - icon: 'keyboard_arrow_left' - } - ] - }; - - constructor( - private _router: Router, - private _location: Location, - private _activatedRoute: ActivatedRoute, - private _status: StatusMsg - ) { } - - ngOnInit() { - if (this.apiError) { - this.message.status = this.apiError.status; - } - - this.statusMsg = this._status.default; - - if (!this.message) { - this._activatedRoute.data.subscribe((data: any) => { - this.message.status = data.status; - }); - } - - this.message = this.setMessage(this.message); - this.isLoading = false; - if (this.duration) { - setTimeout(() => this.disable = true, this.duration); - } - } - - setMessage(msg: AppMessageData) { - const tmpMsg: AppMessageData = {} as AppMessageData; - - const s: number = msg.status === 0 ? 503 : msg.status; - - tmpMsg.status = s; - tmpMsg.route = msg.route; - tmpMsg.statusMsg = msg.statusMsg; - tmpMsg.statusText = msg.statusText; - tmpMsg.route = msg.route; - tmpMsg.footnote = msg.footnote; - - switch (true) { - case s > 0 && s < 300: - // the message is a note - tmpMsg.type = 'note'; - tmpMsg.statusMsg = - msg.statusMsg !== undefined - ? msg.statusMsg - : this.statusMsg[s].message; - tmpMsg.statusText = - msg.statusText !== undefined - ? msg.statusText - : this.statusMsg[s].description; - // console.log('the message is a note'); - break; - case s >= 300 && s < 400: - // the message is a warning - tmpMsg.type = 'warning'; - tmpMsg.statusMsg = - msg.statusMsg !== undefined - ? msg.statusMsg - : this.statusMsg[s].message; - tmpMsg.statusText = - msg.statusText !== undefined - ? msg.statusText - : this.statusMsg[s].description; - // console.log('the message is a warning'); - - break; - case s >= 400 && s < 500: - // the message is a client side (app) error - // console.error('the message is a client side (app) error', s); - tmpMsg.type = 'error'; - tmpMsg.statusMsg = - msg.statusMsg !== undefined - ? msg.statusMsg - : this.statusMsg[s].message; - tmpMsg.statusText = - msg.statusText !== undefined - ? msg.statusText - : this.statusMsg[s].description; - this.showLinks = (this.size === 'long'); - break; - case s >= 500 && s < 600: - // the message is a server side (api) error - // console.error('the message is a server side (api) error'); - tmpMsg.type = 'error'; - tmpMsg.statusMsg = - msg.statusMsg !== undefined - ? msg.statusMsg - : this.statusMsg[s].message; - tmpMsg.statusText = - msg.statusText !== undefined - ? msg.statusText - : this.statusMsg[s].description; - this.showLinks = false; - break; - default: - // no default configuration? - break; - } - - return tmpMsg; - } - - goToLocation(route: string) { - if (route === '<--') { - this._location.back(); - } else { - this._router.navigate([route]); - } - } - - closeMessage() { - this.disable = !this.disable; - } - - reload() { - window.location.reload(); - } - -} diff --git a/src/app/main/cache/cache.service.ts b/src/app/main/cache/cache.service.ts index ec12091893..ae478f7baf 100644 --- a/src/app/main/cache/cache.service.ts +++ b/src/app/main/cache/cache.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { ApiResponseError } from '@dasch-swiss/dsp-js'; import { Observable, of, Subject, throwError } from 'rxjs'; -import { ErrorHandlerService } from '../error/error-handler.service'; +import { ErrorHandlerService } from '../services/error-handler.service'; interface CacheContent { expiry: number; diff --git a/src/app/main/dialog/dialog.component.html b/src/app/main/dialog/dialog.component.html index c3a8ab6dbb..b82622cbe4 100644 --- a/src/app/main/dialog/dialog.component.html +++ b/src/app/main/dialog/dialog.component.html @@ -415,7 +415,7 @@
- +
diff --git a/src/app/main/dialog/dialog.component.spec.ts b/src/app/main/dialog/dialog.component.spec.ts index b195a22a6b..cd90af346f 100644 --- a/src/app/main/dialog/dialog.component.spec.ts +++ b/src/app/main/dialog/dialog.component.spec.ts @@ -26,7 +26,7 @@ import { ProjectFormComponent } from 'src/app/project/project-form/project-form. import { MembershipComponent } from 'src/app/user/membership/membership.component'; import { PasswordFormComponent } from 'src/app/user/user-form/password-form/password-form.component'; import { UserFormComponent } from 'src/app/user/user-form/user-form.component'; -import { ErrorComponent } from '../error/error.component'; +import { StatusComponent } from '../status/status.component'; import { DialogHeaderComponent } from './dialog-header/dialog-header.component'; import { DialogComponent } from './dialog.component'; @@ -39,7 +39,7 @@ describe('DialogComponent', () => { declarations: [ DialogComponent, DialogHeaderComponent, - ErrorComponent, + StatusComponent, UserFormComponent, MembershipComponent, PasswordFormComponent, diff --git a/src/app/main/error/error.component.spec.ts b/src/app/main/error/error.component.spec.ts deleted file mode 100644 index 6fb38579fa..0000000000 --- a/src/app/main/error/error.component.spec.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { MatDialogRef } from '@angular/material/dialog'; -import { MatIconModule } from '@angular/material/icon'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { RouterTestingModule } from '@angular/router/testing'; -import { HealthEndpointSystem, MockHealth } from '@dasch-swiss/dsp-js'; -import { of } from 'rxjs'; -import { DspApiConnectionToken } from '../declarations/dsp-api-tokens'; -import { ErrorComponent } from './error.component'; - -describe('ErrorComponent', () => { - let component: ErrorComponent; - let fixture: ComponentFixture; - - const apiEndpointSpyObj = { - system: { - healthEndpoint: jasmine.createSpyObj('healthEndpoint', ['getHealthStatus']) - } - }; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [ErrorComponent], - imports: [ - BrowserAnimationsModule, - MatIconModule, - RouterTestingModule - ], - providers: [ - { - provide: MatDialogRef, - useValue: {} - }, - { - provide: DspApiConnectionToken, - useValue: apiEndpointSpyObj - }, - ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(ErrorComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - - const dspConnSpy = TestBed.inject(DspApiConnectionToken); - (dspConnSpy.system.healthEndpoint as jasmine.SpyObj).getHealthStatus.and.callFake( - () => { - const health = MockHealth.mockRunning(); - return of(health); - } - ); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - // todo: check the input, check the switch (display 403 template if we get a 403 error, same for 404) -}); diff --git a/src/app/main/help/help.component.spec.ts b/src/app/main/help/help.component.spec.ts index 0623fc1202..876342b17d 100644 --- a/src/app/main/help/help.component.spec.ts +++ b/src/app/main/help/help.component.spec.ts @@ -11,7 +11,7 @@ import { AppInitService } from 'src/app/app-init.service'; import { TestConfig } from 'test.config'; import { DspApiConfigToken, DspApiConnectionToken } from '../declarations/dsp-api-tokens'; import { DialogComponent } from '../dialog/dialog.component'; -import { ErrorComponent } from '../error/error.component'; +import { StatusComponent } from '../status/status.component'; import { FooterComponent } from '../footer/footer.component'; import { GridComponent } from '../grid/grid.component'; import { HelpComponent } from './help.component'; @@ -34,7 +34,7 @@ describe('HelpComponent', () => { FooterComponent, GridComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/main/help/help.component.ts b/src/app/main/help/help.component.ts index 6f8fbd3fca..24d4213c25 100644 --- a/src/app/main/help/help.component.ts +++ b/src/app/main/help/help.component.ts @@ -3,7 +3,7 @@ import { ApiResponseData, ApiResponseError, HealthResponse, KnoraApiConnection, import { AppInitService } from 'src/app/app-init.service'; import { DspApiConnectionToken } from '../declarations/dsp-api-tokens'; import { DspConfig } from '../declarations/dsp-config'; -import { ErrorHandlerService } from '../error/error-handler.service'; +import { ErrorHandlerService } from '../services/error-handler.service'; import { GridItem } from '../grid/grid.component'; declare let require: any; diff --git a/src/app/main/main.component.spec.ts b/src/app/main/main.component.spec.ts index 3407d79635..68e8dccfc5 100644 --- a/src/app/main/main.component.spec.ts +++ b/src/app/main/main.component.spec.ts @@ -15,7 +15,7 @@ import { TestConfig } from 'test.config'; import { AppInitService } from '../app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from './declarations/dsp-api-tokens'; import { DialogComponent } from './dialog/dialog.component'; -import { ErrorComponent } from './error/error.component'; +import { StatusComponent } from './status/status.component'; import { FooterComponent } from './footer/footer.component'; import { GridComponent } from './grid/grid.component'; import { MainComponent } from './main.component'; @@ -34,7 +34,7 @@ describe('MainComponent', () => { FooterComponent, GridComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/main/main.component.ts b/src/app/main/main.component.ts index 8cb941fa10..57e53b04d7 100644 --- a/src/app/main/main.component.ts +++ b/src/app/main/main.component.ts @@ -3,7 +3,7 @@ import { Title } from '@angular/platform-browser'; import { Router } from '@angular/router'; import { ApiResponseData, ApiResponseError, Constants, KnoraApiConnection, ProjectsResponse } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from './declarations/dsp-api-tokens'; -import { ErrorHandlerService } from './error/error-handler.service'; +import { ErrorHandlerService } from './services/error-handler.service'; import { GridItem } from './grid/grid.component'; import { SessionService } from './services/session.service'; diff --git a/src/app/main/services/authentication.service.ts b/src/app/main/services/authentication.service.ts index 6c99479170..2ec2baafa8 100644 --- a/src/app/main/services/authentication.service.ts +++ b/src/app/main/services/authentication.service.ts @@ -2,7 +2,7 @@ import { Inject, Injectable } from '@angular/core'; import { ApiResponseData, ApiResponseError, KnoraApiConnection, LogoutResponse } from '@dasch-swiss/dsp-js'; import { CacheService } from '../cache/cache.service'; import { DspApiConnectionToken } from '../declarations/dsp-api-tokens'; -import { ErrorHandlerService } from '../error/error-handler.service'; +import { ErrorHandlerService } from '../services/error-handler.service'; import { DatadogRumService } from './datadog-rum.service'; import { SessionService } from './session.service'; diff --git a/src/app/main/error/error-handler.service.spec.ts b/src/app/main/services/error-handler.service.spec.ts similarity index 100% rename from src/app/main/error/error-handler.service.spec.ts rename to src/app/main/services/error-handler.service.spec.ts diff --git a/src/app/main/error/error-handler.service.ts b/src/app/main/services/error-handler.service.ts similarity index 96% rename from src/app/main/error/error-handler.service.ts rename to src/app/main/services/error-handler.service.ts index 6d22c2d4c3..c04874c79f 100644 --- a/src/app/main/error/error-handler.service.ts +++ b/src/app/main/services/error-handler.service.ts @@ -1,7 +1,7 @@ import { Inject, Injectable } from '@angular/core'; import { MatDialog, MatDialogConfig } from '@angular/material/dialog'; import { ApiResponseData, ApiResponseError, HealthResponse, KnoraApiConnection, LogoutResponse } from '@dasch-swiss/dsp-js'; -import { StatusMsg } from 'src/assets/http/statusMsg'; +import { HttpStatusMsg } from 'src/assets/http/statusMsg'; import { DspApiConnectionToken } from '../declarations/dsp-api-tokens'; import { DialogComponent } from '../dialog/dialog.component'; import { NotificationService } from '../services/notification.service'; @@ -17,7 +17,7 @@ export class ErrorHandlerService { private _notification: NotificationService, private _dialog: MatDialog, private _session: SessionService, - private _statusMsg: StatusMsg + private _statusMsg: HttpStatusMsg ) { } showMessage(error: ApiResponseError) { @@ -77,7 +77,7 @@ export class ErrorHandlerService { this._dspApiConnection.v2.auth.logout().subscribe( (logoutResponse: ApiResponseData) => { - // destroy (dsp-ui) session + // destroy session this._session.destroySession(); // reload the page diff --git a/src/app/main/services/notification.service.ts b/src/app/main/services/notification.service.ts index fd17cc5126..baae49b343 100644 --- a/src/app/main/services/notification.service.ts +++ b/src/app/main/services/notification.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; import { ApiResponseError } from '@dasch-swiss/dsp-js'; -import { StatusMsg } from 'src/assets/http/statusMsg'; +import { HttpStatusMsg } from 'src/assets/http/statusMsg'; @Injectable({ providedIn: 'root' @@ -10,7 +10,7 @@ export class NotificationService { constructor( private _snackBar: MatSnackBar, - private _statusMsg: StatusMsg + private _statusMsg: HttpStatusMsg ) { } // todo: maybe we can add more parameters like: diff --git a/src/app/main/error/error.component.html b/src/app/main/status/status.component.html similarity index 52% rename from src/app/main/error/error.component.html rename to src/app/main/status/status.component.html index dbe0853e2b..9ac9802693 100644 --- a/src/app/main/error/error.component.html +++ b/src/app/main/status/status.component.html @@ -1,21 +1,26 @@ -
+
- +
-
-

ERROR {{status}}

-

{{errorMessage?.message}}

-

-

API response:
→ {{comment}}

-
+
+

{{message.type | uppercase}} {{status}} | {{message?.message}}

+

+

+ + Response in detail:
→ +
+ +

+

Please come back in a few minutes and try to reload the page.

+

diff --git a/src/app/main/error/error.component.scss b/src/app/main/status/status.component.scss similarity index 82% rename from src/app/main/error/error.component.scss rename to src/app/main/status/status.component.scss index cb38084733..f32c15740f 100644 --- a/src/app/main/error/error.component.scss +++ b/src/app/main/status/status.component.scss @@ -1,6 +1,6 @@ @import "../../../assets/style/responsive"; -.error-page { +.status-page { background: #fff; height: 100%; width: 100%; @@ -12,16 +12,18 @@ align-items: stretch; align-content: space-evenly; padding-top: 120px; + width: 480px; + margin: 0 auto; .image, .text { justify-self: stretch; align-self: stretch; box-sizing: border-box; - padding: 24px; max-height: 280px; + width: 360px; - &.error-message { + &.status-message { line-height: 1.5; margin: 0 auto; } @@ -29,7 +31,7 @@ img { display: block; margin: 0 auto; - max-width: 400px; + max-width: 360px; } } } @@ -44,7 +46,7 @@ .image { display: none; } - .error-page .container { + .status-page .container { padding-top: 30px; } } diff --git a/src/app/main/status/status.component.spec.ts b/src/app/main/status/status.component.spec.ts new file mode 100644 index 0000000000..76be25ea3b --- /dev/null +++ b/src/app/main/status/status.component.spec.ts @@ -0,0 +1,145 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { MatDialogRef } from '@angular/material/dialog'; +import { MatIconModule } from '@angular/material/icon'; +import { By } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { HealthEndpointSystem, MockHealth } from '@dasch-swiss/dsp-js'; +import { of } from 'rxjs'; +import { HttpStatusMsg } from 'src/assets/http/statusMsg'; +import { DspApiConnectionToken } from '../declarations/dsp-api-tokens'; +import { StatusComponent } from './status.component'; + +/** + * test host component to simulate parent component. + * dsp specific http status message + */ +@Component({ + template: ` + ` +}) +class NoContentTestHostComponent implements OnInit { + + @ViewChild('warning', { static: false }) StatusComponent: StatusComponent; + + constructor() { + } + + ngOnInit() { } +} + +/** + * test host component to simulate parent component. + * default http status message + */ +@Component({ + template: ` + ` +}) +class TeapotTestHostComponent implements OnInit { + + @ViewChild('error', { static: false }) StatusComponent: StatusComponent; + + constructor() { + } + + ngOnInit() { } +} + +describe('StatusComponent', () => { + let noContentTestHostComponent: NoContentTestHostComponent; + let noContentTestHostFixture: ComponentFixture; + + let teapotTestHostComponent: TeapotTestHostComponent; + let teapotTestHostFixture: ComponentFixture; + + let status: HttpStatusMsg; + + const apiEndpointSpyObj = { + system: { + healthEndpoint: jasmine.createSpyObj('healthEndpoint', ['getHealthStatus']) + } + }; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ + StatusComponent, + NoContentTestHostComponent, + TeapotTestHostComponent + ], + imports: [ + BrowserAnimationsModule, + MatIconModule, + RouterTestingModule + ], + providers: [ + HttpStatusMsg, + { + provide: MatDialogRef, + useValue: {} + }, + { + provide: DspApiConnectionToken, + useValue: apiEndpointSpyObj + }, + ] + }).compileComponents(); + + status = TestBed.inject(HttpStatusMsg); + + })); + + beforeEach(() => { + noContentTestHostFixture = TestBed.createComponent(NoContentTestHostComponent); + noContentTestHostComponent = noContentTestHostFixture.componentInstance; + noContentTestHostFixture.detectChanges(); + + teapotTestHostFixture = TestBed.createComponent(TeapotTestHostComponent); + teapotTestHostComponent = teapotTestHostFixture.componentInstance; + teapotTestHostFixture.detectChanges(); + + const dspConnSpy = TestBed.inject(DspApiConnectionToken); + (dspConnSpy.system.healthEndpoint as jasmine.SpyObj).getHealthStatus.and.callFake( + () => { + const health = MockHealth.mockRunning(); + return of(health); + } + ); + }); + + it('should create', () => { + expect(noContentTestHostComponent).toBeTruthy(); + }); + + it('should display "warning 204 | no content"', () => { + expect(noContentTestHostComponent.StatusComponent).toBeTruthy(); + expect(noContentTestHostComponent.StatusComponent.message.status).toEqual(204); + expect(noContentTestHostComponent.StatusComponent.message.type).toEqual('warning'); + + const hostCompDe = noContentTestHostFixture.debugElement; + + const messageEl = hostCompDe.query(By.directive(StatusComponent)); + + const titleEle = messageEl.query(By.css('.mat-title')); + + expect(titleEle.nativeElement.innerText).toEqual('WARNING 204 | No Content'); + }); + + it('should display "error 418 | I\'m a teapot"', () => { + expect(teapotTestHostComponent.StatusComponent).toBeTruthy(); + expect(teapotTestHostComponent.StatusComponent.message.status).toEqual(418); + expect(teapotTestHostComponent.StatusComponent.message.type).toEqual('error'); + + const hostCompDe = teapotTestHostFixture.debugElement; + + const messageEl = hostCompDe.query(By.directive(StatusComponent)); + + const titleEle = messageEl.query(By.css('.mat-title')); + + expect(titleEle.nativeElement.innerText).toEqual('ERROR 418 | I\'m a teapot'); + }); + + // todo: check the input, check the switch (display 403 template if we get a 403 error, same for 404) +}); diff --git a/src/app/main/error/error.component.ts b/src/app/main/status/status.component.ts similarity index 64% rename from src/app/main/error/error.component.ts rename to src/app/main/status/status.component.ts index 81290b2711..59dcf2ea84 100644 --- a/src/app/main/error/error.component.ts +++ b/src/app/main/status/status.component.ts @@ -2,31 +2,38 @@ import { Component, Inject, Input, OnInit } from '@angular/core'; import { Title } from '@angular/platform-browser'; import { ActivatedRoute } from '@angular/router'; import { ApiResponseData, ApiResponseError, HealthResponse, KnoraApiConnection } from '@dasch-swiss/dsp-js'; +import { HttpStatusMsg } from 'src/assets/http/statusMsg'; import { DspApiConnectionToken } from '../declarations/dsp-api-tokens'; -export interface ErrorMsg { +export interface StatusMsg { status: number; message: string; description: string; - action: 'goback' | 'reload'; - image: string; + action?: 'goback' | 'reload' | 'goto'; + type?: 'info' | 'warning' | 'error'; + image?: string; } @Component({ - selector: 'app-error', - templateUrl: './error.component.html', - styleUrls: ['./error.component.scss'] + selector: 'app-status', + templateUrl: './status.component.html', + styleUrls: ['./status.component.scss'] }) -export class ErrorComponent implements OnInit { +export class StatusComponent implements OnInit { @Input() status: number; @Input() comment?: string; + @Input() url?: string; refresh = false; + + // error message that will be shown in template + message: StatusMsg; + // default error messages - errorMessages: ErrorMsg[] = [ + errorMessages: StatusMsg[] = [ { status: 0, message: 'Undefined Error', @@ -35,11 +42,19 @@ export class ErrorComponent implements OnInit { action: 'goback', image: 'dsp-error.svg' }, + { + status: 204, + message: 'No Content', + description: `This content is not supported on small devices. + Please resize the browser window or switch to a desktop computer.`, + action: 'goback', + image: 'dsp-error.svg' + }, { status: 403, message: 'Forbidden', description: `Invalid Permissions.
- Your request was valid but you do not have the
+ Your request was valid but you do not have the necessary permissions to access it.`, action: 'goback', image: 'dsp-error-403.svg' @@ -54,7 +69,7 @@ export class ErrorComponent implements OnInit { { status: 500, message: 'Internal Server Error', - description: `The DaSCH Service Platform is not available at the moment.
+ description: `The DaSCH Service Platform is not available at the moment. An error has occured in a server side script.`, action: 'reload', image: 'dsp-error-500.svg' @@ -62,20 +77,18 @@ export class ErrorComponent implements OnInit { { status: 503, message: 'Service unavailable', - description: `The DaSCH Service Platform is not available at the moment.
+ description: `The DaSCH Service Platform is not available at the moment. The server is currently unavailable (overloaded or down).`, action: 'reload', image: 'dsp-error-503.svg' } ]; - // error message that will be shown in template - errorMessage: ErrorMsg; - constructor( @Inject(DspApiConnectionToken) private _dspApiConnection: KnoraApiConnection, private _titleService: Title, - private _route: ActivatedRoute + private _route: ActivatedRoute, + private _status: HttpStatusMsg ) { } ngOnInit() { @@ -91,18 +104,30 @@ export class ErrorComponent implements OnInit { this._titleService.setTitle('DSP | Error ' + this.status); // get error message by status - this.errorMessage = this.getErrorMsgByStatus(this.status); + this.message = this.getMsgByStatus(this.status); + + } + + getMsgByStatus(status: number): StatusMsg { + let msg = this.errorMessages.filter(x => x.status === status)[0]; - // if error message is not defined for the current status - // use the default error message - if (!this.errorMessage) { - this.errorMessage = this.errorMessages[0]; + if (!msg) { + msg = this._status.default[status]; + msg.status = status; + msg.image = 'dsp-error.svg'; + msg.action = (this.url ? 'goto' : undefined); } + msg.type = this.getTypeByStatus(status); + return msg; } - getErrorMsgByStatus(status: number): ErrorMsg { - return this.errorMessages.filter(x => x.status === status)[0]; + getTypeByStatus(status: number): 'info' | 'warning' | 'error' { + switch (true) { + case status >= 0 && status < 203: return 'info'; + case status >= 203 && status < 400: return 'warning'; + case status >= 400 && status < 600: return 'error'; + } } reload() { diff --git a/src/app/project/board/board.component.spec.ts b/src/app/project/board/board.component.spec.ts index cf9e97d719..2959757c42 100644 --- a/src/app/project/board/board.component.spec.ts +++ b/src/app/project/board/board.component.spec.ts @@ -12,7 +12,7 @@ import { of } from 'rxjs'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { CacheService } from '../../main/cache/cache.service'; import { BoardComponent } from './board.component'; @@ -29,7 +29,7 @@ describe('BoardComponent', () => { declarations: [ BoardComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/project/board/board.component.ts b/src/app/project/board/board.component.ts index 26f1076a07..795db8451f 100644 --- a/src/app/project/board/board.component.ts +++ b/src/app/project/board/board.component.ts @@ -8,7 +8,7 @@ import { ReadProject } from '@dasch-swiss/dsp-js'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { CacheService } from '../../main/cache/cache.service'; diff --git a/src/app/project/collaboration/add-user/add-user.component.spec.ts b/src/app/project/collaboration/add-user/add-user.component.spec.ts index 7ad876f818..3e96dc2a23 100644 --- a/src/app/project/collaboration/add-user/add-user.component.spec.ts +++ b/src/app/project/collaboration/add-user/add-user.component.spec.ts @@ -12,7 +12,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { AddUserComponent } from './add-user.component'; @@ -25,7 +25,7 @@ describe('AddUserComponent', () => { declarations: [ AddUserComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/project/collaboration/add-user/add-user.component.ts b/src/app/project/collaboration/add-user/add-user.component.ts index 81fc431e1c..5586a9ba5c 100644 --- a/src/app/project/collaboration/add-user/add-user.component.ts +++ b/src/app/project/collaboration/add-user/add-user.component.ts @@ -17,7 +17,7 @@ import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; import { existingNamesValidator } from 'src/app/main/directive/existing-name/existing-name.directive'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { AutocompleteItem } from 'src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/operator'; @Component({ diff --git a/src/app/project/collaboration/collaboration.component.html b/src/app/project/collaboration/collaboration.component.html index d7f803156c..dcc3639e07 100644 --- a/src/app/project/collaboration/collaboration.component.html +++ b/src/app/project/collaboration/collaboration.component.html @@ -16,5 +16,5 @@
- +
diff --git a/src/app/project/collaboration/collaboration.component.spec.ts b/src/app/project/collaboration/collaboration.component.spec.ts index 2a3f68d0b3..ed00282e7e 100644 --- a/src/app/project/collaboration/collaboration.component.spec.ts +++ b/src/app/project/collaboration/collaboration.component.spec.ts @@ -19,7 +19,7 @@ import { AppInitService } from 'src/app/app-init.service'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { UsersListComponent } from 'src/app/system/users/users-list/users-list.component'; import { TestConfig } from 'test.config'; import { AddUserComponent } from './add-user/add-user.component'; @@ -41,7 +41,7 @@ describe('CollaborationComponent', () => { UsersListComponent, SelectGroupComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/project/collaboration/collaboration.component.ts b/src/app/project/collaboration/collaboration.component.ts index b2517fdabf..4e0c448f93 100644 --- a/src/app/project/collaboration/collaboration.component.ts +++ b/src/app/project/collaboration/collaboration.component.ts @@ -10,7 +10,7 @@ import { ReadUser } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { CacheService } from '../../main/cache/cache.service'; import { AddUserComponent } from './add-user/add-user.component'; diff --git a/src/app/project/collaboration/select-group/select-group.component.spec.ts b/src/app/project/collaboration/select-group/select-group.component.spec.ts index 1e68cbe165..64e4691898 100644 --- a/src/app/project/collaboration/select-group/select-group.component.spec.ts +++ b/src/app/project/collaboration/select-group/select-group.component.spec.ts @@ -10,7 +10,7 @@ import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { SelectGroupComponent } from './select-group.component'; @@ -23,7 +23,7 @@ describe('SelectGroupComponent', () => { declarations: [ SelectGroupComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/project/collaboration/select-group/select-group.component.ts b/src/app/project/collaboration/select-group/select-group.component.ts index c487cca5e4..c938d9574e 100644 --- a/src/app/project/collaboration/select-group/select-group.component.ts +++ b/src/app/project/collaboration/select-group/select-group.component.ts @@ -3,7 +3,7 @@ import { FormControl } from '@angular/forms'; import { ApiResponseData, ApiResponseError, GroupsResponse, KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { AutocompleteItem } from 'src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/operator'; @Component({ diff --git a/src/app/project/list/list-info-form/list-info-form.component.spec.ts b/src/app/project/list/list-info-form/list-info-form.component.spec.ts index 5e40f4083b..d3b335e872 100644 --- a/src/app/project/list/list-info-form/list-info-form.component.spec.ts +++ b/src/app/project/list/list-info-form/list-info-form.component.spec.ts @@ -18,7 +18,7 @@ import { AjaxResponse } from 'rxjs/ajax'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogHeaderComponent } from 'src/app/main/dialog/dialog-header/dialog-header.component'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { ListInfoFormComponent } from './list-info-form.component'; /** @@ -80,7 +80,7 @@ describe('ListInfoFormComponent', () => { ListInfoFormComponent, DialogComponent, DialogHeaderComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/project/list/list-info-form/list-info-form.component.ts b/src/app/project/list/list-info-form/list-info-form.component.ts index 31d88f3cff..65af38cbe0 100644 --- a/src/app/project/list/list-info-form/list-info-form.component.ts +++ b/src/app/project/list/list-info-form/list-info-form.component.ts @@ -14,7 +14,7 @@ import { UpdateListInfoRequest } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; @Component({ selector: 'app-list-info-form', diff --git a/src/app/project/list/list-item-form/edit-list-item/edit-list-item.component.ts b/src/app/project/list/list-item-form/edit-list-item/edit-list-item.component.ts index a5a94b23f2..d220ca599b 100644 --- a/src/app/project/list/list-item-form/edit-list-item/edit-list-item.component.ts +++ b/src/app/project/list/list-item-form/edit-list-item/edit-list-item.component.ts @@ -14,7 +14,7 @@ import { } from '@dasch-swiss/dsp-js'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; @Component({ selector: 'app-edit-list-item', diff --git a/src/app/project/list/list-item-form/list-item-form.component.ts b/src/app/project/list/list-item-form/list-item-form.component.ts index 54f852529f..f12728113c 100644 --- a/src/app/project/list/list-item-form/list-item-form.component.ts +++ b/src/app/project/list/list-item-form/list-item-form.component.ts @@ -15,7 +15,7 @@ import { } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; export class ListNodeOperation { operation: 'create' | 'insert' | 'update' | 'delete' | 'reposition'; diff --git a/src/app/project/list/list-item/list-item.component.ts b/src/app/project/list/list-item/list-item.component.ts index 0fe8750193..7697735afd 100644 --- a/src/app/project/list/list-item/list-item.component.ts +++ b/src/app/project/list/list-item/list-item.component.ts @@ -10,7 +10,7 @@ import { RepositionChildNodeResponse } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { ListNodeOperation } from '../list-item-form/list-item-form.component'; @Component({ diff --git a/src/app/project/list/list.component.html b/src/app/project/list/list.component.html index e54f47c003..ce36b70151 100644 --- a/src/app/project/list/list.component.html +++ b/src/app/project/list/list.component.html @@ -1,4 +1,4 @@ -
+
@@ -93,10 +93,9 @@

- +
- - +
diff --git a/src/app/project/list/list.component.ts b/src/app/project/list/list.component.ts index fbee16f4dd..578bd1db8e 100644 --- a/src/app/project/list/list.component.ts +++ b/src/app/project/list/list.component.ts @@ -19,7 +19,7 @@ import { AppGlobal } from 'src/app/app-global'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; @Component({ diff --git a/src/app/project/ontology/ontology-form/ontology-form.component.ts b/src/app/project/ontology/ontology-form/ontology-form.component.ts index 4e476a40ca..edd595dad2 100644 --- a/src/app/project/ontology/ontology-form/ontology-form.component.ts +++ b/src/app/project/ontology/ontology-form/ontology-form.component.ts @@ -12,7 +12,7 @@ import { import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { existingNamesValidator } from 'src/app/main/directive/existing-name/existing-name.directive'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { CustomRegex } from 'src/app/workspace/resource/values/custom-regex'; import { OntologyService } from '../ontology.service'; diff --git a/src/app/project/ontology/ontology.component.html b/src/app/project/ontology/ontology.component.html index 5e8662e9a9..a10cb245ca 100644 --- a/src/app/project/ontology/ontology.component.html +++ b/src/app/project/ontology/ontology.component.html @@ -211,10 +211,9 @@

- +
- - +
diff --git a/src/app/project/ontology/ontology.component.spec.ts b/src/app/project/ontology/ontology.component.spec.ts index cb19c687bd..92da0bb479 100644 --- a/src/app/project/ontology/ontology.component.spec.ts +++ b/src/app/project/ontology/ontology.component.spec.ts @@ -31,7 +31,7 @@ import { AjaxResponse } from 'rxjs/ajax'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { OntologyComponent } from './ontology.component'; import { PropertyInfoComponent } from './property-info/property-info.component'; @@ -64,7 +64,7 @@ describe('OntologyComponent', () => { declarations: [ OntologyComponent, DialogComponent, - ErrorComponent, + StatusComponent, PropertyInfoComponent, ResourceClassInfoComponent ], diff --git a/src/app/project/ontology/ontology.component.ts b/src/app/project/ontology/ontology.component.ts index 78ef38f7f5..87bc38b425 100644 --- a/src/app/project/ontology/ontology.component.ts +++ b/src/app/project/ontology/ontology.component.ts @@ -24,7 +24,7 @@ import { import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { SortingService } from 'src/app/main/services/sorting.service'; import { DefaultProperties, PropertyCategory, PropertyInfoObject } from './default-data/default-properties'; diff --git a/src/app/project/ontology/property-form/property-form.component.ts b/src/app/project/ontology/property-form/property-form.component.ts index 2f6f37562d..8e04eb8f3c 100644 --- a/src/app/project/ontology/property-form/property-form.component.ts +++ b/src/app/project/ontology/property-form/property-form.component.ts @@ -22,7 +22,7 @@ import { import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { existingNamesValidator } from 'src/app/main/directive/existing-name/existing-name.directive'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { CustomRegex } from 'src/app/workspace/resource/values/custom-regex'; import { AutocompleteItem } from 'src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/operator'; import { DefaultProperties, DefaultProperty, PropertyCategory, PropertyInfoObject } from '../default-data/default-properties'; diff --git a/src/app/project/ontology/property-info/property-info.component.ts b/src/app/project/ontology/property-info/property-info.component.ts index cd1278464c..7e4b59c2d1 100644 --- a/src/app/project/ontology/property-info/property-info.component.ts +++ b/src/app/project/ontology/property-info/property-info.component.ts @@ -16,7 +16,7 @@ import { } from '@dasch-swiss/dsp-js'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { DefaultProperties, DefaultProperty, diff --git a/src/app/project/ontology/resource-class-form/resource-class-form.component.spec.ts b/src/app/project/ontology/resource-class-form/resource-class-form.component.spec.ts index 653bed3e01..7bc8f51818 100644 --- a/src/app/project/ontology/resource-class-form/resource-class-form.component.spec.ts +++ b/src/app/project/ontology/resource-class-form/resource-class-form.component.spec.ts @@ -22,7 +22,7 @@ import { AppInitService } from 'src/app/app-init.service'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { PropertyFormComponent } from '../property-form/property-form.component'; import { ResourceClassFormComponent } from './resource-class-form.component'; @@ -47,7 +47,7 @@ describe('ResourceClassFormComponent', () => { TestHostResourceClassFormComponent, PropertyFormComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ HttpClientTestingModule, diff --git a/src/app/project/ontology/resource-class-form/resource-class-form.component.ts b/src/app/project/ontology/resource-class-form/resource-class-form.component.ts index 46edafac8d..337b762510 100644 --- a/src/app/project/ontology/resource-class-form/resource-class-form.component.ts +++ b/src/app/project/ontology/resource-class-form/resource-class-form.component.ts @@ -18,7 +18,7 @@ import { AppGlobal } from 'src/app/app-global'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { existingNamesValidator } from 'src/app/main/directive/existing-name/existing-name.directive'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { CustomRegex } from 'src/app/workspace/resource/values/custom-regex'; import { OntologyService } from '../ontology.service'; diff --git a/src/app/project/ontology/resource-class-info/resource-class-info.component.ts b/src/app/project/ontology/resource-class-info/resource-class-info.component.ts index b901ce92e6..9089c32e2e 100644 --- a/src/app/project/ontology/resource-class-info/resource-class-info.component.ts +++ b/src/app/project/ontology/resource-class-info/resource-class-info.component.ts @@ -18,7 +18,7 @@ import { import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { NotificationService } from 'src/app/main/services/notification.service'; import { SortingService } from 'src/app/main/services/sorting.service'; import { DefaultProperties, DefaultProperty, PropertyCategory, PropertyInfoObject } from '../default-data/default-properties'; diff --git a/src/app/project/permission/add-group/add-group.component.html b/src/app/project/permission/add-group/add-group.component.html index 94d9a73b48..e69de29bb2 100644 --- a/src/app/project/permission/add-group/add-group.component.html +++ b/src/app/project/permission/add-group/add-group.component.html @@ -1,3 +0,0 @@ -

- add-group works! -

diff --git a/src/app/project/permission/permission.component.html b/src/app/project/permission/permission.component.html index aaa6ae479e..b8290c8025 100644 --- a/src/app/project/permission/permission.component.html +++ b/src/app/project/permission/permission.component.html @@ -21,5 +21,5 @@
- +
diff --git a/src/app/project/permission/permission.component.spec.ts b/src/app/project/permission/permission.component.spec.ts index 34e3401376..cf13fcf122 100644 --- a/src/app/project/permission/permission.component.spec.ts +++ b/src/app/project/permission/permission.component.spec.ts @@ -12,7 +12,7 @@ import { AppInitService } from 'src/app/app-init.service'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { GroupsListComponent } from 'src/app/system/groups/groups-list/groups-list.component'; import { TestConfig } from 'test.config'; import { AddGroupComponent } from './add-group/add-group.component'; @@ -32,7 +32,7 @@ describe('PermissionComponent', () => { AddGroupComponent, GroupsListComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/project/permission/permission.component.ts b/src/app/project/permission/permission.component.ts index c2807f9a12..4ce7686854 100644 --- a/src/app/project/permission/permission.component.ts +++ b/src/app/project/permission/permission.component.ts @@ -9,7 +9,7 @@ import { } from '@dasch-swiss/dsp-js'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { AddGroupComponent } from './add-group/add-group.component'; diff --git a/src/app/project/project-form/project-form.component.spec.ts b/src/app/project/project-form/project-form.component.spec.ts index a2ec4fd919..d6958fa8e9 100644 --- a/src/app/project/project-form/project-form.component.spec.ts +++ b/src/app/project/project-form/project-form.component.spec.ts @@ -12,7 +12,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { ProjectFormComponent } from './project-form.component'; @@ -26,7 +26,7 @@ describe('ProjectFormComponent', () => { declarations: [ ProjectFormComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/project/project-form/project-form.component.ts b/src/app/project/project-form/project-form.component.ts index d6e367c8cb..abe8a0d1f2 100644 --- a/src/app/project/project-form/project-form.component.ts +++ b/src/app/project/project-form/project-form.component.ts @@ -17,7 +17,7 @@ import { } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { existingNamesValidator } from 'src/app/main/directive/existing-name/existing-name.directive'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { NotificationService } from 'src/app/main/services/notification.service'; import { SessionService } from 'src/app/main/services/session.service'; import { CacheService } from '../../main/cache/cache.service'; diff --git a/src/app/project/project.component.html b/src/app/project/project.component.html index 3315c3e1bd..d8abe7dd91 100644 --- a/src/app/project/project.component.html +++ b/src/app/project/project.component.html @@ -1,4 +1,4 @@ -
+
- +
- +
diff --git a/src/app/project/project.component.spec.ts b/src/app/project/project.component.spec.ts index 5747ea9a72..d2a0723bfe 100644 --- a/src/app/project/project.component.spec.ts +++ b/src/app/project/project.component.spec.ts @@ -12,7 +12,7 @@ import { AppInitService } from '../app-init.service'; import { CacheService } from '../main/cache/cache.service'; import { DspApiConfigToken, DspApiConnectionToken } from '../main/declarations/dsp-api-tokens'; import { DialogComponent } from '../main/dialog/dialog.component'; -import { ErrorComponent } from '../main/error/error.component'; +import { StatusComponent } from '../main/status/status.component'; import { ProjectComponent } from './project.component'; describe('ProjectComponent', () => { @@ -27,7 +27,7 @@ describe('ProjectComponent', () => { declarations: [ ProjectComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/system/groups/groups-list/groups-list.component.html b/src/app/system/groups/groups-list/groups-list.component.html index fa4bd7e606..9474396696 100644 --- a/src/app/system/groups/groups-list/groups-list.component.html +++ b/src/app/system/groups/groups-list/groups-list.component.html @@ -1 +1 @@ - + diff --git a/src/app/system/groups/groups-list/groups-list.component.ts b/src/app/system/groups/groups-list/groups-list.component.ts index 099b9cc5eb..20f9620685 100644 --- a/src/app/system/groups/groups-list/groups-list.component.ts +++ b/src/app/system/groups/groups-list/groups-list.component.ts @@ -1,5 +1,4 @@ import { Component, OnInit } from '@angular/core'; -import { AppMessageData } from 'src/app/main/action/message/message.component'; @Component({ selector: 'app-groups-list', @@ -8,11 +7,6 @@ import { AppMessageData } from 'src/app/main/action/message/message.component'; }) export class GroupsListComponent implements OnInit { - message: AppMessageData = { - status: 200, - statusText: 'The list of permission groups is not yet implemented. But we are working on it.' - }; - constructor() { } ngOnInit() { diff --git a/src/app/system/projects/projects-list/projects-list.component.spec.ts b/src/app/system/projects/projects-list/projects-list.component.spec.ts index 2c5cbb76ab..f8ecde5aab 100644 --- a/src/app/system/projects/projects-list/projects-list.component.spec.ts +++ b/src/app/system/projects/projects-list/projects-list.component.spec.ts @@ -11,7 +11,7 @@ import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { ProjectsListComponent } from './projects-list.component'; @@ -25,7 +25,7 @@ describe('ProjectsListComponent', () => { declarations: [ ProjectsListComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/system/projects/projects-list/projects-list.component.ts b/src/app/system/projects/projects-list/projects-list.component.ts index cf4a8f301b..1becafe626 100644 --- a/src/app/system/projects/projects-list/projects-list.component.ts +++ b/src/app/system/projects/projects-list/projects-list.component.ts @@ -13,7 +13,7 @@ import { import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { ComponentCommunicationEventService, EmitEvent, Events } from 'src/app/main/services/component-communication-event.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { SortingService } from 'src/app/main/services/sorting.service'; diff --git a/src/app/system/projects/projects.component.spec.ts b/src/app/system/projects/projects.component.spec.ts index 2c4ded5dd4..60539edabd 100644 --- a/src/app/system/projects/projects.component.spec.ts +++ b/src/app/system/projects/projects.component.spec.ts @@ -11,7 +11,7 @@ import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { ProjectsListComponent } from './projects-list/projects-list.component'; import { ProjectsComponent } from './projects.component'; @@ -26,7 +26,7 @@ describe('ProjectsComponent', () => { ProjectsComponent, ProjectsListComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/system/projects/projects.component.ts b/src/app/system/projects/projects.component.ts index df542a7e46..a684c15028 100644 --- a/src/app/system/projects/projects.component.ts +++ b/src/app/system/projects/projects.component.ts @@ -4,7 +4,7 @@ import { Title } from '@angular/platform-browser'; import { ApiResponseData, ApiResponseError, KnoraApiConnection, ProjectsResponse, StoredProject, UserResponse } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { CacheService } from '../../main/cache/cache.service'; diff --git a/src/app/system/system.component.html b/src/app/system/system.component.html index 7f24023a85..5d06f2eb9a 100644 --- a/src/app/system/system.component.html +++ b/src/app/system/system.component.html @@ -19,6 +19,6 @@
- +
diff --git a/src/app/system/system.component.spec.ts b/src/app/system/system.component.spec.ts index 6f32ac5b3e..d366549c36 100644 --- a/src/app/system/system.component.spec.ts +++ b/src/app/system/system.component.spec.ts @@ -5,7 +5,7 @@ import { RouterTestingModule } from '@angular/router/testing'; import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { TestConfig } from 'test.config'; import { DspApiConnectionToken } from '../main/declarations/dsp-api-tokens'; -import { ErrorComponent } from '../main/error/error.component'; +import { StatusComponent } from '../main/status/status.component'; import { SessionService } from '../main/services/session.service'; import { SystemComponent } from './system.component'; @@ -15,7 +15,7 @@ describe('SystemComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [SystemComponent, ErrorComponent], + declarations: [SystemComponent, StatusComponent], imports: [ MatIconModule, MatTabsModule, diff --git a/src/app/system/users/users-list/users-list.component.spec.ts b/src/app/system/users/users-list/users-list.component.spec.ts index d1ff027074..8b2e696193 100644 --- a/src/app/system/users/users-list/users-list.component.spec.ts +++ b/src/app/system/users/users-list/users-list.component.spec.ts @@ -16,7 +16,7 @@ import { AppInitService } from 'src/app/app-init.service'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { SelectGroupComponent } from 'src/app/project/collaboration/select-group/select-group.component'; import { TestConfig } from 'test.config'; import { UsersListComponent } from './users-list.component'; @@ -34,7 +34,7 @@ describe('UsersListComponent', () => { UsersListComponent, SelectGroupComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/system/users/users-list/users-list.component.ts b/src/app/system/users/users-list/users-list.component.ts index 5980ce8bce..3354885ae4 100644 --- a/src/app/system/users/users-list/users-list.component.ts +++ b/src/app/system/users/users-list/users-list.component.ts @@ -15,7 +15,7 @@ import { import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { SortingService } from 'src/app/main/services/sorting.service'; diff --git a/src/app/system/users/users.component.spec.ts b/src/app/system/users/users.component.spec.ts index 84315c9158..7b2d1d333d 100644 --- a/src/app/system/users/users.component.spec.ts +++ b/src/app/system/users/users.component.spec.ts @@ -13,7 +13,7 @@ import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { SelectGroupComponent } from 'src/app/project/collaboration/select-group/select-group.component'; import { TestConfig } from 'test.config'; import { UsersListComponent } from './users-list/users-list.component'; @@ -30,7 +30,7 @@ describe('UsersComponent', () => { UsersListComponent, SelectGroupComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/system/users/users.component.ts b/src/app/system/users/users.component.ts index a65a9cbb0a..0bada21d76 100644 --- a/src/app/system/users/users.component.ts +++ b/src/app/system/users/users.component.ts @@ -9,7 +9,7 @@ import { UsersResponse } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; @Component({ selector: 'app-users', diff --git a/src/app/user/account/account.component.spec.ts b/src/app/user/account/account.component.spec.ts index e94c274979..c40e5f308c 100644 --- a/src/app/user/account/account.component.spec.ts +++ b/src/app/user/account/account.component.spec.ts @@ -13,7 +13,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { PasswordFormComponent } from '../user-form/password-form/password-form.component'; import { AccountComponent } from './account.component'; @@ -28,7 +28,7 @@ describe('AccountComponent', () => { AccountComponent, PasswordFormComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/user/account/account.component.ts b/src/app/user/account/account.component.ts index bc9ac335c1..fa3ce8ecf7 100644 --- a/src/app/user/account/account.component.ts +++ b/src/app/user/account/account.component.ts @@ -11,7 +11,7 @@ import { } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { SessionService } from 'src/app/main/services/session.service'; import { CacheService } from '../../main/cache/cache.service'; diff --git a/src/app/user/dashboard/dashboard.component.spec.ts b/src/app/user/dashboard/dashboard.component.spec.ts index 0ff8eee395..025273181a 100644 --- a/src/app/user/dashboard/dashboard.component.spec.ts +++ b/src/app/user/dashboard/dashboard.component.spec.ts @@ -11,7 +11,7 @@ import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { ProjectsListComponent } from 'src/app/system/projects/projects-list/projects-list.component'; import { ProjectsComponent } from 'src/app/system/projects/projects.component'; import { TestConfig } from 'test.config'; @@ -28,7 +28,7 @@ describe('DashboardComponent', () => { ProjectsComponent, ProjectsListComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/user/dashboard/dashboard.component.ts b/src/app/user/dashboard/dashboard.component.ts index 771fab343a..b44b103ab4 100644 --- a/src/app/user/dashboard/dashboard.component.ts +++ b/src/app/user/dashboard/dashboard.component.ts @@ -3,7 +3,7 @@ import { Title } from '@angular/platform-browser'; import { ApiResponseData, ApiResponseError, KnoraApiConnection, ReadUser, UserResponse } from '@dasch-swiss/dsp-js'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; @Component({ diff --git a/src/app/user/membership/membership.component.spec.ts b/src/app/user/membership/membership.component.spec.ts index 82c0074054..815aae917e 100644 --- a/src/app/user/membership/membership.component.spec.ts +++ b/src/app/user/membership/membership.component.spec.ts @@ -13,7 +13,7 @@ import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { MembershipComponent } from './membership.component'; @@ -26,7 +26,7 @@ describe('MembershipComponent', () => { declarations: [ MembershipComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/user/membership/membership.component.ts b/src/app/user/membership/membership.component.ts index 0f760f9106..52a5b38520 100644 --- a/src/app/user/membership/membership.component.ts +++ b/src/app/user/membership/membership.component.ts @@ -13,7 +13,7 @@ import { import { PermissionsData } from '@dasch-swiss/dsp-js/src/models/admin/permissions-data'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { Session } from 'src/app/main/services/session.service'; import { AutocompleteItem } from 'src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/operator'; diff --git a/src/app/user/profile/profile.component.spec.ts b/src/app/user/profile/profile.component.spec.ts index f42d891de0..c3e6e4b2a0 100644 --- a/src/app/user/profile/profile.component.spec.ts +++ b/src/app/user/profile/profile.component.spec.ts @@ -10,7 +10,7 @@ import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { ProfileComponent } from './profile.component'; @@ -23,7 +23,7 @@ describe('ProfileComponent', () => { declarations: [ ProfileComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/user/profile/profile.component.ts b/src/app/user/profile/profile.component.ts index e1e9f5b141..7001194342 100644 --- a/src/app/user/profile/profile.component.ts +++ b/src/app/user/profile/profile.component.ts @@ -9,7 +9,7 @@ import { UserResponse } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { SessionService } from 'src/app/main/services/session.service'; import { CacheService } from '../../main/cache/cache.service'; import { DialogComponent } from '../../main/dialog/dialog.component'; diff --git a/src/app/user/user-form/password-form/password-form.component.html b/src/app/user/user-form/password-form/password-form.component.html index d04abcb17f..50c0393b09 100644 --- a/src/app/user/user-form/password-form/password-form.component.html +++ b/src/app/user/user-form/password-form/password-form.component.html @@ -1,129 +1,118 @@ -
- - - -
- - - - - - - -
-

As system admin, please enter your password before updating user's password. -

- - - - - - {{ formErrors.requesterPassword }} - - - -
- - - - - -
-
- - -
- - - - - - - - - - - - {{ formErrors.requesterPassword }} - - - - - - - - - - - - {{ formErrors.password }} - - - - - - - - - - - {{ formErrors.confirmPassword }} - {{ validationMessages.confirmPassword.match }} - - - - - -
- - - -
-
- + + +
+

As system admin, please enter your password before updating user's password. +

+ + + + + + {{ formErrors.requesterPassword }} + + + +
+ + + + + +
+
+ + +
+ + + + + + + + + + + + {{ formErrors.requesterPassword }} + + + + + + + + + + + + {{ formErrors.password }} + + + + + + + + + + + {{ formErrors.confirmPassword }} + {{ validationMessages.confirmPassword.match }} + + + + + +
+ + +
-
+ diff --git a/src/app/user/user-form/password-form/password-form.component.spec.ts b/src/app/user/user-form/password-form/password-form.component.spec.ts index a7edb52c43..a90a25a77a 100644 --- a/src/app/user/user-form/password-form/password-form.component.spec.ts +++ b/src/app/user/user-form/password-form/password-form.component.spec.ts @@ -12,7 +12,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { AppInitService } from 'src/app/app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { PasswordFormComponent } from './password-form.component'; @@ -25,7 +25,7 @@ describe('PasswordFormComponent', () => { declarations: [ PasswordFormComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, diff --git a/src/app/user/user-form/password-form/password-form.component.ts b/src/app/user/user-form/password-form/password-form.component.ts index ec1a7ff675..c6476beb0d 100644 --- a/src/app/user/user-form/password-form/password-form.component.ts +++ b/src/app/user/user-form/password-form/password-form.component.ts @@ -8,11 +8,12 @@ import { ReadUser, UserResponse } from '@dasch-swiss/dsp-js'; -import { AppMessageData } from 'src/app/main/action/message/message.component'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; +import { NotificationService } from 'src/app/main/services/notification.service'; import { SessionService } from 'src/app/main/services/session.service'; +import { CustomRegex } from 'src/app/workspace/resource/values/custom-regex'; @Component({ selector: 'app-password-form', @@ -30,30 +31,9 @@ export class PasswordFormComponent implements OnInit { // in case of child component inside parent form @Output() sendToParent: EventEmitter = new EventEmitter(); - // progress indicator + // progress indicator and error status loading: boolean; - - // --> TODO replace regexPassword by CustomRegex.PASSWORD_REGEX from dsp-ui - public readonly REGEX_PASSWORD = /^(?=.*\d)(?=.*[a-zA-Z]).{8,}$/i; - - // in case of updating data: was it succesful or does it failed - apiResponses: AppMessageData[] = [ - { - status: 200, - statusText: 'You have successfully updated your password.' - }, - { - status: 200, - statusText: 'You have successfully updated user\'s password.' - }, - { - status: 400, - statusText: 'This wasn\'t successfull. Something went wrong.' - - } - ]; - - showResponse: AppMessageData; + error: boolean; user: ReadUser; @@ -109,6 +89,7 @@ export class PasswordFormComponent implements OnInit { private _cache: CacheService, private _errorHandler: ErrorHandlerService, private _fb: FormBuilder, + private _notification: NotificationService, private _session: SessionService ) { } @@ -132,7 +113,6 @@ export class PasswordFormComponent implements OnInit { } this.showPasswordForm = this.updateOwn; - // set the cache this._cache.get(this.username, this._dspApiConnection.admin.usersEndpoint.getUserByUsername(this.username)); @@ -210,7 +190,7 @@ export class PasswordFormComponent implements OnInit { [ Validators.required, Validators.minLength(8), - Validators.pattern(this.REGEX_PASSWORD) // --> TODO replace by CustomRegex.PASSWORD_REGEX from dsp-ui + Validators.pattern(CustomRegex.PASSWORD_REGEX) ] ), confirmPassword: new FormControl( @@ -269,9 +249,6 @@ export class PasswordFormComponent implements OnInit { // confirm sys admin nextStep() { - // reset response message - this.showResponse = undefined; - this.loading = true; // submit requester password with logged-in username @@ -285,58 +262,34 @@ export class PasswordFormComponent implements OnInit { }, (error: ApiResponseError) => { this._errorHandler.showMessage(error); - this.showResponse = this.apiResponses[2]; this.loading = false; + this.error = true; } ); } submitData() { - // reset response message - this.showResponse = undefined; - this.loading = true; const requesterPassword = (this.updateOwn ? this.form.controls.requesterPassword.value : this.confirmForm.controls.requesterPassword.value); this._dspApiConnection.admin.usersEndpoint.updateUserPassword(this.user.id, requesterPassword, this.form.controls.password.value).subscribe( (response: ApiResponseData) => { - this.showResponse = (this.updateOwn ? this.apiResponses[0] : this.apiResponses[1]); + + const successResponse = 'You have successfully updated ' + + (this.updateOwn ? 'your' : 'user\'s') + ' password.'; + this._notification.openSnackBar(successResponse); + this.closeDialog.emit(); this.form.reset(); this.loading = false; }, (error: ApiResponseError) => { this._errorHandler.showMessage(error); - this.showResponse = this.apiResponses[2]; this.loading = false; + this.error = true; } ); } - closeMessage(status?: number) { - - this.showResponse = undefined; - - switch (status) { - case 200: - // success: close message (and dialog box) - this.closeDialog.emit(); - break; - - case 400: - // something went wrong: reset form - this.form.reset(); - if (this.confirmForm) { - this.confirmForm.reset(); - } - break; - - default: - // close message - - } - - } - } diff --git a/src/app/user/user-form/user-form.component.html b/src/app/user/user-form/user-form.component.html index dba3f067a8..7955420a0c 100644 --- a/src/app/user/user-form/user-form.component.html +++ b/src/app/user/user-form/user-form.component.html @@ -1,98 +1,90 @@ -
- - - - - - - -
- - - - - - - {{ formErrors.username }} - - - - - - - - {{ formErrors.email }} - - - - - - - - - {{ formErrors.givenName }} - - - - - - - - {{ formErrors.familyName }} - - - - - - - - - - - - - {{ lang.value }} - - - - - -
- - {{ 'appLabels.form.user.general.sysAdmin' | translate }} - -
- -
- - - - - - - - - - -
- -
- -
+ +
+ + + + + + {{ formErrors.username }} + + + + + + + + {{ formErrors.email }} + + + + + + + + {{ formErrors.givenName }} + + + + + + + + {{ formErrors.familyName }} + + + + + + + + + + + {{ lang.value }} + + + + + +
+ + {{ 'appLabels.form.user.general.sysAdmin' | translate }} + +
+ +
+ + + + + + + + + + + +
+ +
diff --git a/src/app/user/user-form/user-form.component.spec.ts b/src/app/user/user-form/user-form.component.spec.ts index ad5f276c4c..b29495f77a 100644 --- a/src/app/user/user-form/user-form.component.spec.ts +++ b/src/app/user/user-form/user-form.component.spec.ts @@ -1,5 +1,5 @@ -import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; -import { ReactiveFormsModule } from '@angular/forms'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; @@ -8,12 +8,14 @@ import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; -import { KnoraApiConnection } from '@dasch-swiss/dsp-js'; +import { ApiResponseData, KnoraApiConnection, MockUsers, ReadUser, UserResponse, UsersEndpointAdmin, UsersResponse } from '@dasch-swiss/dsp-js'; import { TranslateModule } from '@ngx-translate/core'; +import { of } from 'rxjs'; import { AppInitService } from 'src/app/app-init.service'; -import { DspApiConfigToken, DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; +import { CacheService } from 'src/app/main/cache/cache.service'; +import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorComponent } from 'src/app/main/error/error.component'; +import { StatusComponent } from 'src/app/main/status/status.component'; import { TestConfig } from 'test.config'; import { PasswordFormComponent } from './password-form/password-form.component'; import { UserFormComponent } from './user-form.component'; @@ -21,6 +23,16 @@ import { UserFormComponent } from './user-form.component'; describe('UserFormComponent', () => { let component: UserFormComponent; let fixture: ComponentFixture; + const formBuilder: FormBuilder = new FormBuilder(); + + // const cacheServiceSpyUser = jasmine.createSpyObj('CacheServiceUser', ['get']); + const cacheServiceSpyAllUsers = jasmine.createSpyObj('CacheServiceAllUsers', ['get']); + + const apiSpyObj = { + admin: { + usersEndpoint: jasmine.createSpyObj('usersEndpoint', ['getUser', 'getUsers']) + }, + }; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ @@ -28,7 +40,7 @@ describe('UserFormComponent', () => { UserFormComponent, PasswordFormComponent, DialogComponent, - ErrorComponent + StatusComponent ], imports: [ BrowserAnimationsModule, @@ -45,12 +57,20 @@ describe('UserFormComponent', () => { providers: [ AppInitService, { - provide: DspApiConfigToken, - useValue: TestConfig.ApiConfig + provide: DspApiConnectionToken, + useValue: apiSpyObj }, + // { + // provide: CacheService, + // useValue: cacheServiceSpyUser + // }, { - provide: DspApiConnectionToken, - useValue: new KnoraApiConnection(TestConfig.ApiConfig) + provide: CacheService, + useValue: cacheServiceSpyAllUsers + }, + { + provide: FormBuilder, + useValue: formBuilder } ] }).compileComponents(); @@ -59,8 +79,34 @@ describe('UserFormComponent', () => { beforeEach(() => { localStorage.setItem('session', JSON.stringify(TestConfig.CurrentSession)); + const dspConnSpy = TestBed.inject(DspApiConnectionToken); + (dspConnSpy.admin.usersEndpoint as jasmine.SpyObj).getUsers.and.callFake( + () => { + const allUsers: ApiResponseData = MockUsers.mockUsers();; + return of(allUsers); + } + ); + + const cacheSpyAllUsers = TestBed.inject(CacheService); + (cacheSpyAllUsers as jasmine.SpyObj).get.and.callFake( + () => { + const allUsers: ApiResponseData = MockUsers.mockUsers(); + return of(allUsers); + } + ); + fixture = TestBed.createComponent(UserFormComponent); component = fixture.componentInstance; + component.userForm = formBuilder.group({ + givenName: ['', Validators.required], + familyName: ['', Validators.required], + email: ['', Validators.required], + username: ['', Validators.required], + password: ['', Validators.required], + lang: ['en', Validators.required], + status: ['', Validators.required], + systemAdmin: ['', Validators.required] + }); fixture.detectChanges(); }); diff --git a/src/app/user/user-form/user-form.component.ts b/src/app/user/user-form/user-form.component.ts index fb5bce9880..b7dcc9c560 100644 --- a/src/app/user/user-form/user-form.component.ts +++ b/src/app/user/user-form/user-form.component.ts @@ -6,7 +6,6 @@ import { ApiResponseError, Constants, KnoraApiConnection, - ProjectResponse, ReadProject, ReadUser, StringLiteral, @@ -18,8 +17,10 @@ import { import { AppGlobal } from 'src/app/app-global'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { existingNamesValidator } from 'src/app/main/directive/existing-name/existing-name.directive'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; +import { NotificationService } from 'src/app/main/services/notification.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; +import { CustomRegex } from 'src/app/workspace/resource/values/custom-regex'; import { CacheService } from '../../main/cache/cache.service'; @Component({ @@ -56,15 +57,11 @@ export class UserFormComponent implements OnInit, OnChanges { */ @Output() closeDialog: EventEmitter = new EventEmitter(); - public readonly REGEX_USERNAME = /^[a-zA-Z0-9]+$/; - - // --> TODO replace REGEX_EMAIL by CustomRegex.EMAIL_REGEX from dsp-ui - public readonly REGEX_EMAIL = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; - /** - * status for the progress indicator + * status for the progress indicator and error */ loading = true; + error: boolean; /** * user data @@ -97,7 +94,7 @@ export class UserFormComponent implements OnInit, OnChanges { /** * form group for the form controller */ - form: FormGroup; + userForm: FormGroup; /** * error checking on the following fields @@ -166,6 +163,7 @@ export class UserFormComponent implements OnInit, OnChanges { private _cache: CacheService, private _errorHandler: ErrorHandlerService, private _formBuilder: FormBuilder, + private _notification: NotificationService, private _route: ActivatedRoute, private _session: SessionService ) { @@ -234,8 +232,7 @@ export class UserFormComponent implements OnInit, OnChanges { // const name: string = this._route.snapshot.queryParams['value']; const newUser: ReadUser = new ReadUser(); - // --> TODO replace this.REGEX_EMAIL by CustomRegex.EMAIL_REGEX from dsp-ui - if (this.REGEX_EMAIL.test(this.name)) { + if (CustomRegex.EMAIL_REGEX.test(this.name)) { newUser.email = this.name; } else { newUser.username = this.name; @@ -267,7 +264,7 @@ export class UserFormComponent implements OnInit, OnChanges { // otherwise "create new user" mode is active const editMode = !!user.id; - this.form = this._formBuilder.group({ + this.userForm = this._formBuilder.group({ givenName: new FormControl( { value: user.givenName, @@ -289,7 +286,7 @@ export class UserFormComponent implements OnInit, OnChanges { }, [ Validators.required, - Validators.pattern(this.REGEX_EMAIL), // --> TODO replace this.REGEX_EMAIL by CustomRegex.EMAIL_REGEX from dsp-ui + Validators.pattern(CustomRegex.EMAIL_REGEX), existingNamesValidator(this.existingEmails) ] ), @@ -301,7 +298,7 @@ export class UserFormComponent implements OnInit, OnChanges { [ Validators.required, Validators.minLength(4), - Validators.pattern(this.REGEX_USERNAME), + Validators.pattern(CustomRegex.USERNAME_REGEX), existingNamesValidator(this.existingUsernames) ] ), @@ -329,16 +326,16 @@ export class UserFormComponent implements OnInit, OnChanges { // this.loading = false; - this.form.valueChanges.subscribe(data => this.onValueChanged()); + this.userForm.valueChanges.subscribe(data => this.onValueChanged()); return true; } onValueChanged() { - if (!this.form) { + if (!this.userForm) { return; } - const form = this.form; + const form = this.userForm; Object.keys(this.formErrors).map(field => { this.formErrors[field] = ''; @@ -354,7 +351,7 @@ export class UserFormComponent implements OnInit, OnChanges { // get password from password form and send it to user form getPassword(pw: string) { - this.form.controls.password.setValue(pw); + this.userForm.controls.password.setValue(pw); } submitData(): void { @@ -362,7 +359,7 @@ export class UserFormComponent implements OnInit, OnChanges { const returnUrl: string = this._route.snapshot.queryParams['returnUrl'] || - '/user/' + this.form.controls['username'].value; + '/user/' + this.userForm.controls['username'].value; if (this.username) { // edit mode: update user data @@ -370,11 +367,11 @@ export class UserFormComponent implements OnInit, OnChanges { // but a user can't change the username, the field is disabled, so it's not a value in this form. // we have to make a small hack here. const userData: UpdateUserRequest = new UpdateUserRequest(); - // userData.username = this.form.value.username; - userData.familyName = this.form.value.familyName; - userData.givenName = this.form.value.givenName; - // userData.email = this.form.value.email; - userData.lang = this.form.value.lang; + // userData.username = this.userForm.value.username; + userData.familyName = this.userForm.value.familyName; + userData.givenName = this.userForm.value.givenName; + // userData.email = this.userForm.value.email; + userData.lang = this.userForm.value.lang; this._dspApiConnection.admin.usersEndpoint.updateUserBasicInformation(this.user.id, userData).subscribe( (response: ApiResponseData) => { @@ -384,33 +381,35 @@ export class UserFormComponent implements OnInit, OnChanges { const session: Session = this._session.getSession(); if (session.user.name === this.username) { // update logged in user session - session.user.lang = this.form.controls['lang'].value; + session.user.lang = this.userForm.controls['lang'].value; localStorage.setItem('session', JSON.stringify(session)); } this._cache.set(this.username, response); - this.success = true; - + // this.loading = false; + this._notification.openSnackBar('You have successfully updated the user\'s profile data.'); + this.closeDialog.emit(); this.loading = false; + }, (error: ApiResponseError) => { this._errorHandler.showMessage(error); this.loading = false; - this.success = false; + this.error = true; } ); } else { // new: create user const userData: User = new User(); - userData.username = this.form.value.username; - userData.familyName = this.form.value.familyName; - userData.givenName = this.form.value.givenName; - userData.email = this.form.value.email; - userData.password = this.form.value.password; - userData.systemAdmin = this.form.value.systemAdmin; - userData.status = this.form.value.status; - userData.lang = this.form.value.lang; + userData.username = this.userForm.value.username; + userData.familyName = this.userForm.value.familyName; + userData.givenName = this.userForm.value.givenName; + userData.email = this.userForm.value.email; + userData.password = this.userForm.value.password; + userData.systemAdmin = this.userForm.value.systemAdmin; + userData.status = this.userForm.value.status; + userData.lang = this.userForm.value.lang; this._dspApiConnection.admin.usersEndpoint.createUser(userData).subscribe( (response: ApiResponseData) => { @@ -452,6 +451,7 @@ export class UserFormComponent implements OnInit, OnChanges { (error: ApiResponseError) => { this._errorHandler.showMessage(error); this.loading = false; + this.error = true; } ); } diff --git a/src/app/user/user-menu/user-menu.component.ts b/src/app/user/user-menu/user-menu.component.ts index 31e6331e39..d03784253f 100644 --- a/src/app/user/user-menu/user-menu.component.ts +++ b/src/app/user/user-menu/user-menu.component.ts @@ -9,7 +9,7 @@ import { import { AppGlobal } from 'src/app/app-global'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { AuthenticationService } from 'src/app/main/services/authentication.service'; import { SessionService } from 'src/app/main/services/session.service'; import { MenuItem } from '../../main/declarations/menu-item'; diff --git a/src/app/user/user.component.html b/src/app/user/user.component.html index 2e9d2cb307..c5ca0b8bdd 100644 --- a/src/app/user/user.component.html +++ b/src/app/user/user.component.html @@ -1,5 +1,5 @@ - +
diff --git a/src/app/user/user.component.spec.ts b/src/app/user/user.component.spec.ts index 9b2af50c70..da2c504b30 100644 --- a/src/app/user/user.component.spec.ts +++ b/src/app/user/user.component.spec.ts @@ -19,7 +19,7 @@ import { TestConfig } from 'test.config'; import { AppInitService } from '../app-init.service'; import { DspApiConfigToken, DspApiConnectionToken } from '../main/declarations/dsp-api-tokens'; import { DialogComponent } from '../main/dialog/dialog.component'; -import { ErrorComponent } from '../main/error/error.component'; +import { StatusComponent } from '../main/status/status.component'; import { ProjectsListComponent } from '../system/projects/projects-list/projects-list.component'; import { ProjectsComponent } from '../system/projects/projects.component'; import { AccountComponent } from './account/account.component'; @@ -40,7 +40,7 @@ describe('UserComponent', () => { AccountComponent, CollectionListComponent, DialogComponent, - ErrorComponent, + StatusComponent, PasswordFormComponent, ProfileComponent, ProjectsComponent, diff --git a/src/app/workspace/intermediate/intermediate.component.ts b/src/app/workspace/intermediate/intermediate.component.ts index b66f97af2a..c38f8d8843 100644 --- a/src/app/workspace/intermediate/intermediate.component.ts +++ b/src/app/workspace/intermediate/intermediate.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { MatDialog, MatDialogConfig } from '@angular/material/dialog'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { FilteredResources } from '../results/list-view/list-view.component'; @Component({ diff --git a/src/app/workspace/resource/operations/create-link-resource/create-link-resource.component.ts b/src/app/workspace/resource/operations/create-link-resource/create-link-resource.component.ts index 77918e5ce3..e3731dc1fd 100644 --- a/src/app/workspace/resource/operations/create-link-resource/create-link-resource.component.ts +++ b/src/app/workspace/resource/operations/create-link-resource/create-link-resource.component.ts @@ -15,7 +15,7 @@ import { } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogEvent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { SelectPropertiesComponent } from '../../resource-instance-form/select-properties/select-properties.component'; @Component({ diff --git a/src/app/workspace/resource/properties/properties.component.ts b/src/app/workspace/resource/properties/properties.component.ts index 8ddc9c5b00..e9657445d3 100644 --- a/src/app/workspace/resource/properties/properties.component.ts +++ b/src/app/workspace/resource/properties/properties.component.ts @@ -30,7 +30,7 @@ import { import { Subscription } from 'rxjs'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { ConfirmationWithComment, DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { NotificationService } from 'src/app/main/services/notification.service'; import { DspResource } from '../dsp-resource'; import { RepresentationConstants } from '../representation/file-representation'; diff --git a/src/app/workspace/resource/representation/archive/archive.component.ts b/src/app/workspace/resource/representation/archive/archive.component.ts index 311615600f..2394b3c48f 100644 --- a/src/app/workspace/resource/representation/archive/archive.component.ts +++ b/src/app/workspace/resource/representation/archive/archive.component.ts @@ -15,7 +15,7 @@ import { import { mergeMap } from 'rxjs/operators'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { EmitEvent, Events, UpdatedFileEventValue, ValueOperationEventService } from '../../services/value-operation-event.service'; import { FileRepresentation } from '../file-representation'; diff --git a/src/app/workspace/resource/representation/audio/audio.component.ts b/src/app/workspace/resource/representation/audio/audio.component.ts index 0e3465b58d..08b9e73fc7 100644 --- a/src/app/workspace/resource/representation/audio/audio.component.ts +++ b/src/app/workspace/resource/representation/audio/audio.component.ts @@ -15,7 +15,7 @@ import { import { mergeMap } from 'rxjs/operators'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { EmitEvent, Events, UpdatedFileEventValue, ValueOperationEventService } from '../../services/value-operation-event.service'; import { FileRepresentation } from '../file-representation'; diff --git a/src/app/workspace/resource/representation/document/document.component.ts b/src/app/workspace/resource/representation/document/document.component.ts index 50021c1806..0da8037ea9 100644 --- a/src/app/workspace/resource/representation/document/document.component.ts +++ b/src/app/workspace/resource/representation/document/document.component.ts @@ -15,7 +15,7 @@ import { PdfViewerComponent } from 'ng2-pdf-viewer'; import { mergeMap } from 'rxjs/operators'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { EmitEvent, Events, UpdatedFileEventValue, ValueOperationEventService } from '../../services/value-operation-event.service'; import { FileRepresentation } from '../file-representation'; diff --git a/src/app/workspace/resource/representation/still-image/still-image.component.ts b/src/app/workspace/resource/representation/still-image/still-image.component.ts index 0b7bbe4d2b..db1131a15d 100644 --- a/src/app/workspace/resource/representation/still-image/still-image.component.ts +++ b/src/app/workspace/resource/representation/still-image/still-image.component.ts @@ -39,7 +39,7 @@ import * as OpenSeadragon from 'openseadragon'; import { mergeMap } from 'rxjs/operators'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { NotificationService } from 'src/app/main/services/notification.service'; import { DspCompoundPosition } from '../../dsp-resource'; import { EmitEvent, Events, UpdatedFileEventValue, ValueOperationEventService } from '../../services/value-operation-event.service'; diff --git a/src/app/workspace/resource/representation/video/video.component.ts b/src/app/workspace/resource/representation/video/video.component.ts index 93a7cb2deb..dbbc58cb7e 100644 --- a/src/app/workspace/resource/representation/video/video.component.ts +++ b/src/app/workspace/resource/representation/video/video.component.ts @@ -15,7 +15,7 @@ import { import { mergeMap } from 'rxjs/operators'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { DialogComponent } from 'src/app/main/dialog/dialog.component'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { EmitEvent, Events, UpdatedFileEventValue, ValueOperationEventService } from '../../services/value-operation-event.service'; import { PointerValue } from '../av-timeline/av-timeline.component'; import { FileRepresentation } from '../file-representation'; diff --git a/src/app/workspace/resource/resource-instance-form/resource-instance-form.component.ts b/src/app/workspace/resource/resource-instance-form/resource-instance-form.component.ts index 0ed84e0e06..bd711be1f0 100644 --- a/src/app/workspace/resource/resource-instance-form/resource-instance-form.component.ts +++ b/src/app/workspace/resource/resource-instance-form/resource-instance-form.component.ts @@ -18,7 +18,7 @@ import { } from '@dasch-swiss/dsp-js'; import { Subscription } from 'rxjs'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { DefaultClass, DefaultResourceClasses } from 'src/app/project/ontology/default-data/default-resource-classes'; import { ProjectService } from '../services/project.service'; import { ResourceService } from '../services/resource.service'; diff --git a/src/app/workspace/resource/resource-link-form/resource-link-form.component.ts b/src/app/workspace/resource/resource-link-form/resource-link-form.component.ts index 069dadfba7..1f4536114e 100644 --- a/src/app/workspace/resource/resource-link-form/resource-link-form.component.ts +++ b/src/app/workspace/resource/resource-link-form/resource-link-form.component.ts @@ -12,7 +12,7 @@ import { StoredProject } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { FilteredResources } from '../../results/list-view/list-view.component'; import { ProjectService } from '../services/project.service'; import { ResourceService } from '../services/resource.service'; diff --git a/src/app/workspace/resource/resource.component.ts b/src/app/workspace/resource/resource.component.ts index 33cb91d7e5..c6bfea7969 100644 --- a/src/app/workspace/resource/resource.component.ts +++ b/src/app/workspace/resource/resource.component.ts @@ -22,7 +22,7 @@ import { } from '@dasch-swiss/dsp-js'; import { Subscription } from 'rxjs'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { NotificationService } from 'src/app/main/services/notification.service'; import { Session, SessionService } from 'src/app/main/services/session.service'; import { DspCompoundPosition, DspResource } from './dsp-resource'; diff --git a/src/app/workspace/resource/services/project.service.ts b/src/app/workspace/resource/services/project.service.ts index 36c6d2ddf3..c64d2f1132 100644 --- a/src/app/workspace/resource/services/project.service.ts +++ b/src/app/workspace/resource/services/project.service.ts @@ -12,7 +12,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { CacheService } from 'src/app/main/cache/cache.service'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { SessionService } from 'src/app/main/services/session.service'; @Injectable({ diff --git a/src/app/workspace/resource/values/list-value/list-value.component.ts b/src/app/workspace/resource/values/list-value/list-value.component.ts index d5e84486e0..ff27bd527b 100644 --- a/src/app/workspace/resource/values/list-value/list-value.component.ts +++ b/src/app/workspace/resource/values/list-value/list-value.component.ts @@ -13,7 +13,7 @@ import { import { Subscription } from 'rxjs'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; import { BaseValueDirective } from 'src/app/main/directive/base-value.directive'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { NotificationService } from 'src/app/main/services/notification.service'; // https://stackoverflow.com/questions/45661010/dynamic-nested-reactive-form-expressionchangedafterithasbeencheckederror diff --git a/src/app/workspace/results/list-view/list-view.component.ts b/src/app/workspace/results/list-view/list-view.component.ts index c8c7e4ccae..190c4acb57 100644 --- a/src/app/workspace/results/list-view/list-view.component.ts +++ b/src/app/workspace/results/list-view/list-view.component.ts @@ -2,7 +2,7 @@ import { Component, EventEmitter, Inject, Input, OnChanges, Output } from '@angu import { PageEvent } from '@angular/material/paginator'; import { ApiResponseError, CountQueryResponse, IFulltextSearchParams, KnoraApiConnection, ReadResourceSequence } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { ComponentCommunicationEventService, EmitEvent, Events } from 'src/app/main/services/component-communication-event.service'; import { NotificationService } from 'src/app/main/services/notification.service'; diff --git a/src/app/workspace/search/advanced-search/advanced-search.component.html b/src/app/workspace/search/advanced-search/advanced-search.component.html index 2e39d8941a..712f9ce0b6 100644 --- a/src/app/workspace/search/advanced-search/advanced-search.component.html +++ b/src/app/workspace/search/advanced-search/advanced-search.component.html @@ -1,4 +1,4 @@ -
+
- - diff --git a/src/app/workspace/search/advanced-search/advanced-search.component.ts b/src/app/workspace/search/advanced-search/advanced-search.component.ts index d38946bdc0..aa82c3db08 100644 --- a/src/app/workspace/search/advanced-search/advanced-search.component.ts +++ b/src/app/workspace/search/advanced-search/advanced-search.component.ts @@ -13,7 +13,7 @@ import { FormBuilder, FormGroup } from '@angular/forms'; import { ApiResponseError, Constants, KnoraApiConnection, OntologiesMetadata, OntologyMetadata } from '@dasch-swiss/dsp-js'; import { Subscription } from 'rxjs'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { SearchParams } from '../../results/list-view/list-view.component'; import { GravsearchGenerationService } from '../services/gravsearch-generation.service'; import { ResourceAndPropertySelectionComponent } from './resource-and-property-selection/resource-and-property-selection.component'; @@ -55,8 +55,6 @@ export class AdvancedSearchComponent implements OnInit, OnDestroy, AfterViewChec formChangesSubscription: Subscription; - errorMessage: ApiResponseError; - constructor( @Inject(DspApiConnectionToken) private _dspApiConnection: KnoraApiConnection, @Inject(FormBuilder) private _fb: FormBuilder, @@ -105,7 +103,6 @@ export class AdvancedSearchComponent implements OnInit, OnDestroy, AfterViewChec }, (error: ApiResponseError) => { this._errorHandler.showMessage(error); - this.errorMessage = error; }); } else { this._dspApiConnection.v2.onto.getOntologiesMetadata().subscribe( @@ -120,7 +117,6 @@ export class AdvancedSearchComponent implements OnInit, OnDestroy, AfterViewChec }, (error: ApiResponseError) => { this._errorHandler.showMessage(error); - this.errorMessage = error; }); } diff --git a/src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/search-list-value/search-list-value.component.ts b/src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/search-list-value/search-list-value.component.ts index 7660e20524..b4795d550b 100644 --- a/src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/search-list-value/search-list-value.component.ts +++ b/src/app/workspace/search/advanced-search/resource-and-property-selection/search-select-property/specify-property-value/search-list-value/search-list-value.component.ts @@ -9,7 +9,7 @@ import { ResourcePropertyDefinition } from '@dasch-swiss/dsp-js'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { IRI, PropertyValue, Value } from '../operator'; // https://stackoverflow.com/questions/45661010/dynamic-nested-reactive-form-expressionchangedafterithasbeencheckederror diff --git a/src/app/workspace/search/fulltext-search/fulltext-search.component.ts b/src/app/workspace/search/fulltext-search/fulltext-search.component.ts index 443e9437ec..d84097b6a9 100644 --- a/src/app/workspace/search/fulltext-search/fulltext-search.component.ts +++ b/src/app/workspace/search/fulltext-search/fulltext-search.component.ts @@ -26,7 +26,7 @@ import { } from '@dasch-swiss/dsp-js'; import { Subscription } from 'rxjs'; import { DspApiConnectionToken } from 'src/app/main/declarations/dsp-api-tokens'; -import { ErrorHandlerService } from 'src/app/main/error/error-handler.service'; +import { ErrorHandlerService } from 'src/app/main/services/error-handler.service'; import { ComponentCommunicationEventService, Events } from 'src/app/main/services/component-communication-event.service'; import { NotificationService } from 'src/app/main/services/notification.service'; import { SortingService } from 'src/app/main/services/sorting.service'; diff --git a/src/assets/http/statusMsg.ts b/src/assets/http/statusMsg.ts index a13f13eaac..c6a2be35b2 100644 --- a/src/assets/http/statusMsg.ts +++ b/src/assets/http/statusMsg.ts @@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) -export class StatusMsg { +export class HttpStatusMsg { default: any = { 100: { diff --git a/src/assets/images/dsp-error.svg b/src/assets/images/dsp-error.svg index cb3a4522ee..bdd5dbe79d 100644 --- a/src/assets/images/dsp-error.svg +++ b/src/assets/images/dsp-error.svg @@ -4,9 +4,7 @@ - - - + @@ -16,4 +14,4 @@ - \ No newline at end of file +