mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
AAE-21566 Handling new form event - show spinner (#9656)
* [AAE-21566] Add spinner event in process form * CR * CR * added test for spinner service * fix unit test * fix lint
This commit is contained in:
@@ -17,10 +17,7 @@
|
||||
|
||||
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, UrlTree } from '@angular/router';
|
||||
import { AuthenticationService } from '../services/authentication.service';
|
||||
import {
|
||||
AppConfigService,
|
||||
AppConfigValues
|
||||
} from '../../app-config/app-config.service';
|
||||
import { AppConfigService, AppConfigValues } from '../../app-config/app-config.service';
|
||||
import { OauthConfigModel } from '../models/oauth-config.model';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { StorageService } from '../../common/services/storage.service';
|
||||
@@ -28,9 +25,7 @@ import { Observable } from 'rxjs';
|
||||
import { BasicAlfrescoAuthService } from '../basic-auth/basic-alfresco-auth.service';
|
||||
import { OidcAuthenticationService } from '../services/oidc-authentication.service';
|
||||
|
||||
|
||||
export abstract class AuthGuardBase implements CanActivate, CanActivateChild {
|
||||
|
||||
protected get withCredentials(): boolean {
|
||||
return this.appConfigService.get<boolean>('auth.withCredentials', false);
|
||||
}
|
||||
@@ -43,8 +38,7 @@ export abstract class AuthGuardBase implements CanActivate, CanActivateChild {
|
||||
protected appConfigService: AppConfigService,
|
||||
protected dialog: MatDialog,
|
||||
private storageService: StorageService
|
||||
) {
|
||||
}
|
||||
) {}
|
||||
|
||||
abstract checkLogin(
|
||||
activeRoute: ActivatedRouteSnapshot,
|
||||
@@ -96,7 +90,7 @@ export abstract class AuthGuardBase implements CanActivate, CanActivateChild {
|
||||
|
||||
urlToRedirect = `${urlToRedirect}?redirectUrl=${url}`;
|
||||
return this.navigate(urlToRedirect);
|
||||
} else if (this.getOauthConfig().silentLogin && !this.oidcAuthenticationService.isPublicUrl()) {
|
||||
} else if (this.getOauthConfig().silentLogin && !this.oidcAuthenticationService.isPublicUrl()) {
|
||||
if (!this.oidcAuthenticationService.hasValidIdToken() || !this.oidcAuthenticationService.hasValidAccessToken()) {
|
||||
this.oidcAuthenticationService.ssoLogin(url);
|
||||
}
|
||||
@@ -114,13 +108,7 @@ export abstract class AuthGuardBase implements CanActivate, CanActivateChild {
|
||||
}
|
||||
|
||||
protected getOauthConfig(): OauthConfigModel {
|
||||
return (
|
||||
this.appConfigService &&
|
||||
this.appConfigService.get<OauthConfigModel>(
|
||||
AppConfigValues.OAUTHCONFIG,
|
||||
null
|
||||
)
|
||||
);
|
||||
return this.appConfigService && this.appConfigService.get<OauthConfigModel>(AppConfigValues.OAUTHCONFIG, null);
|
||||
}
|
||||
|
||||
protected getLoginRoute(): string {
|
||||
@@ -132,20 +120,12 @@ export abstract class AuthGuardBase implements CanActivate, CanActivateChild {
|
||||
}
|
||||
|
||||
protected isOAuthWithoutSilentLogin(): boolean {
|
||||
const oauth = this.appConfigService.get<OauthConfigModel>(
|
||||
AppConfigValues.OAUTHCONFIG,
|
||||
null
|
||||
);
|
||||
return (
|
||||
this.authenticationService.isOauth() && !!oauth && !oauth.silentLogin
|
||||
);
|
||||
const oauth = this.appConfigService.get<OauthConfigModel>(AppConfigValues.OAUTHCONFIG, null);
|
||||
return this.authenticationService.isOauth() && !!oauth && !oauth.silentLogin;
|
||||
}
|
||||
|
||||
protected isSilentLogin(): boolean {
|
||||
const oauth = this.appConfigService.get<OauthConfigModel>(
|
||||
AppConfigValues.OAUTHCONFIG,
|
||||
null
|
||||
);
|
||||
const oauth = this.appConfigService.get<OauthConfigModel>(AppConfigValues.OAUTHCONFIG, null);
|
||||
|
||||
return this.authenticationService.isOauth() && oauth && oauth.silentLogin;
|
||||
}
|
||||
|
@@ -701,12 +701,12 @@ describe('Form Renderer Component', () => {
|
||||
});
|
||||
|
||||
describe('Form rules', () => {
|
||||
it('should call the Form Rules Manager init on component changes', () => {
|
||||
it('should call the Form Rules Manager init', () => {
|
||||
spyOn(rulesManager, 'initialize');
|
||||
const formModel = formService.parseForm(customWidgetFormWithVisibility.formRepresentation.formDefinition);
|
||||
|
||||
formRendererComponent.formDefinition = formModel;
|
||||
formRendererComponent.ngOnChanges();
|
||||
formRendererComponent.ngOnInit();
|
||||
|
||||
expect(rulesManager.initialize).toHaveBeenCalledWith(formModel);
|
||||
});
|
||||
|
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewEncapsulation, Input, OnDestroy, Injector, OnChanges, OnInit, Inject } from '@angular/core';
|
||||
import { Component, ViewEncapsulation, Input, OnDestroy, Injector, OnInit, Inject } from '@angular/core';
|
||||
import { FormRulesManager, formRulesManagerFactory } from '../models/form-rules.model';
|
||||
import { FormModel } from './widgets/core/form.model';
|
||||
import { ContainerModel, FormFieldModel, TabModel } from './widgets';
|
||||
@@ -36,7 +36,7 @@ import { FORM_FIELD_MODEL_RENDER_MIDDLEWARE, FormFieldModelRenderMiddleware } fr
|
||||
],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class FormRendererComponent<T> implements OnInit, OnChanges, OnDestroy {
|
||||
export class FormRendererComponent<T> implements OnInit, OnDestroy {
|
||||
/** Toggle debug options. */
|
||||
@Input()
|
||||
showDebugButton: boolean = false;
|
||||
@@ -57,9 +57,6 @@ export class FormRendererComponent<T> implements OnInit, OnChanges, OnDestroy {
|
||||
|
||||
ngOnInit(): void {
|
||||
this.runMiddlewareServices();
|
||||
}
|
||||
|
||||
ngOnChanges(): void {
|
||||
this.formRulesManager.initialize(this.formDefinition);
|
||||
}
|
||||
|
||||
|
25
lib/core/src/lib/form/events/form-spinner.event.ts
Normal file
25
lib/core/src/lib/form/events/form-spinner.event.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export interface FormSpinnerEventPayload {
|
||||
showSpinner: boolean;
|
||||
message?: string;
|
||||
}
|
||||
|
||||
export class FormSpinnerEvent {
|
||||
constructor(public type: string, public payload: FormSpinnerEventPayload) {}
|
||||
}
|
@@ -21,3 +21,4 @@ export * from './form-field.event';
|
||||
export * from './validate-form-field.event';
|
||||
export * from './validate-form.event';
|
||||
export * from './form-rules.event';
|
||||
export * from './form-spinner.event';
|
||||
|
@@ -39,7 +39,7 @@ export function formRulesManagerFactory<T>(injector: Injector): FormRulesManager
|
||||
}
|
||||
|
||||
export abstract class FormRulesManager<T> {
|
||||
constructor(private formService: FormService) {}
|
||||
constructor(protected formService: FormService) {}
|
||||
|
||||
protected formModel: FormModel;
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
@@ -66,7 +66,9 @@ export abstract class FormRulesManager<T> {
|
||||
this.handleRuleEvent(event, rules);
|
||||
});
|
||||
|
||||
this.formService.formRulesEvent.next(new FormRulesEvent('formLoaded', new FormEvent(formModel)));
|
||||
const onFormLoadedEvent = new FormEvent(formModel);
|
||||
const formRules = new FormRulesEvent('formLoaded', onFormLoadedEvent);
|
||||
this.formService.formRulesEvent.next(formRules);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -29,12 +29,12 @@ import { ValidateFormEvent } from '../events/validate-form.event';
|
||||
import { ValidateFormFieldEvent } from '../events/validate-form-field.event';
|
||||
import { FormValidationService } from './form-validation-service.interface';
|
||||
import { FormRulesEvent } from '../events/form-rules.event';
|
||||
import { FormSpinnerEvent } from '../events';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class FormService implements FormValidationService {
|
||||
|
||||
formLoaded = new Subject<FormEvent>();
|
||||
formDataRefreshed = new Subject<FormEvent>();
|
||||
formFieldValueChanged = new Subject<FormFieldEvent>();
|
||||
@@ -44,6 +44,7 @@ export class FormService implements FormValidationService {
|
||||
taskSaved = new Subject<FormEvent>();
|
||||
taskSavedError = new Subject<FormErrorEvent>();
|
||||
formContentClicked = new Subject<ContentLinkModel>();
|
||||
toggleFormSpinner = new Subject<FormSpinnerEvent>();
|
||||
|
||||
validateForm = new Subject<ValidateFormEvent>();
|
||||
validateFormField = new Subject<ValidateFormFieldEvent>();
|
||||
@@ -55,8 +56,7 @@ export class FormService implements FormValidationService {
|
||||
|
||||
formRulesEvent = new Subject<FormRulesEvent>();
|
||||
|
||||
constructor() {
|
||||
}
|
||||
constructor() {}
|
||||
|
||||
/**
|
||||
* Parses JSON data to create a corresponding Form model.
|
||||
|
@@ -38,8 +38,10 @@ export class TimeAgoPipe implements PipeTransform, OnDestroy {
|
||||
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
|
||||
constructor(public userPreferenceService: UserPreferencesService,
|
||||
public appConfig: AppConfigService) {
|
||||
constructor(
|
||||
public userPreferenceService: UserPreferencesService,
|
||||
public appConfig: AppConfigService
|
||||
) {
|
||||
this.userPreferenceService
|
||||
.select(UserPreferenceValues.Locale)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
|
Reference in New Issue
Block a user