diff --git a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.html b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.html index f358574fc3..ad64dc5f02 100755 --- a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.html +++ b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.html @@ -1,11 +1,13 @@ - - - {{'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.FORM.TITLE' | translate}} - + + + + {{'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.FORM.TITLE' | translate}} + + {{ errorMessageId | translate }} @@ -16,28 +18,38 @@ class="adf-process-input-container" floatLabel="always" *ngIf="showSelectProcessDropdown" - data-automation-id="adf-select-cloud-process-dropdown" - > - {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.FORM.LABEL.TYPE' | translate }} - -
- - + {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.FORM.LABEL.TYPE' | translate }} + +
+ + - {{ getProcessDefinitionValue(processDef) }} - - - -
- - {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.ERROR.PROCESS_DEFINITION_REQUIRED' | translate }} + {{ getProcessDefinitionValue(processDef) }} +
+
+ +
+ + {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.ERROR.PROCESS_DEFINITION_REQUIRED' | translate }} @@ -50,7 +62,7 @@ {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }} - + {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxNameLength } }} @@ -73,33 +85,53 @@ [showTitle]="false" (formContentClicked)="onFormContentClicked($event)" (formLoaded)="onFormLoaded($event)"> - - - - + + + +
- -
- - -
-
- - - - - {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.NO_PROCESS_DEFINITIONS' | translate | uppercase}} - - -
+ + +
+ + +
+
+ + + + + {{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.NO_PROCESS_DEFINITIONS' | translate | uppercase}} + + + + + +
+ + +
+
diff --git a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.scss b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.scss index 6d7e141d3b..cc64d54efb 100755 --- a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.scss +++ b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.scss @@ -46,4 +46,14 @@ &-start-form-actions { text-align: right !important; } + + &-loading { + margin: auto; + } + + &-loading-container { + min-height: 300px; + display: flex; + height: 100%; + } } diff --git a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.spec.ts index 3eecf74495..6115119367 100755 --- a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.spec.ts @@ -882,6 +882,7 @@ describe('StartProcessCloudComponent', () => { }); it('should hide title', () => { + component.loading$.next(false); component.showTitle = false; fixture.detectChanges(); @@ -891,12 +892,16 @@ describe('StartProcessCloudComponent', () => { }); it('should show title', () => { + component.loading$.next(false); + fixture.detectChanges(); + const title = fixture.debugElement.query(By.css('.adf-title')); expect(title).toBeTruthy(); }); it('should show process definition dropdown', () => { + component.loading$.next(false); component.processDefinitionList = fakeProcessDefinitions; fixture.detectChanges(); @@ -906,6 +911,7 @@ describe('StartProcessCloudComponent', () => { }); it('should hide process definition dropdown', () => { + component.loading$.next(false); component.processDefinitionList = fakeProcessDefinitions; component.showSelectProcessDropdown = false; fixture.detectChanges(); @@ -914,5 +920,23 @@ describe('StartProcessCloudComponent', () => { expect(processDropdown).toBeFalsy(); }); + + it('should show the loading spinner before process definitions loaded', () => { + component.loading$.next(true); + fixture.detectChanges(); + + const spinner = fixture.debugElement.query(By.css('.adf-loading')); + + expect(spinner).toBeTruthy(); + }); + + it('should show the process card after process definitions loaded', () => { + component.loading$.next(false); + fixture.detectChanges(); + + const card = fixture.debugElement.query(By.css('.adf-start-process')); + + expect(card).toBeTruthy(); + }); }); }); diff --git a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.ts b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.ts index bfcbf1381e..99dfa36427 100755 --- a/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.ts @@ -28,7 +28,7 @@ import { MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { ProcessPayloadCloud } from '../models/process-payload-cloud.model'; import { debounceTime, takeUntil, switchMap, filter, distinctUntilChanged, tap } from 'rxjs/operators'; import { ProcessDefinitionCloud } from '../../../models/process-definition-cloud.model'; -import { Subject, Observable } from 'rxjs'; +import { Subject, Observable, BehaviorSubject } from 'rxjs'; import { TaskVariableCloud } from '../../../form/models/task-variable-cloud.model'; import { ProcessNameCloudPipe } from '../../../pipes/process-name-cloud.pipe'; @@ -114,6 +114,7 @@ export class StartProcessCloudComponent implements OnChanges, OnInit, OnDestroy protected onDestroy$ = new Subject(); processDefinitionLoaded = false; + loading$ = new BehaviorSubject(!this.processDefinitionLoaded); constructor(private startProcessCloudService: StartProcessCloudService, private formBuilder: UntypedFormBuilder, @@ -253,7 +254,10 @@ export class StartProcessCloudComponent implements OnChanges, OnInit, OnDestroy this.startProcessCloudService.getProcessDefinitions(this.appName) .pipe( - tap(() => this.processDefinitionLoaded = true), + tap(() => { + this.processDefinitionLoaded = true; + this.loading$.next(false); + }), takeUntil(this.onDestroy$)) .subscribe((processDefinitionRepresentations: ProcessDefinitionCloud[]) => { this.processDefinitionList = processDefinitionRepresentations;