This is an automated email from the ASF dual-hosted git repository.

rfellows pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 30e8df676e [NIFI-13589] improve loading and error handling for jolt UI 
(#9155)
30e8df676e is described below

commit 30e8df676e24c9812e2fe7a7a9e81bc41ea9575b
Author: Scott Aslan <[email protected]>
AuthorDate: Thu Aug 15 09:05:56 2024 -0400

    [NIFI-13589] improve loading and error handling for jolt UI (#9155)
    
    * [NIFI-13589] improve loading and error handling for jolt UI
    
    * remove unused state
    
    * cleanup more state
    
    * show errors in center of page
    
    This closes #9155
---
 .../feature/jolt-transform-json-ui.component.html      | 16 +++++++++++-----
 .../feature/jolt-transform-json-ui.component.ts        |  4 ++++
 .../feature/jolt-transform-json-ui.module.ts           |  4 +++-
 .../jolt-transform-json-processor-details/index.ts     |  3 ++-
 .../jolt-transform-json-processor-details.actions.ts   |  2 +-
 .../jolt-transform-json-processor-details.effects.ts   | 12 +++++++++++-
 .../jolt-transform-json-processor-details.reducer.ts   | 18 ++++++++++++++----
 .../jolt-transform-json-processor-details.selectors.ts |  9 +++++++--
 .../state/jolt-transform-json-transform/index.ts       |  2 +-
 .../jolt-transform-json-transform.reducer.ts           |  8 ++++----
 .../jolt-transform-json-transform.selectors.ts         |  5 -----
 .../state/jolt-transform-json-validate/index.ts        |  2 +-
 .../jolt-transform-json-validate.reducer.ts            | 10 +++++-----
 .../jolt-transform-json-validate.selectors.ts          |  5 -----
 14 files changed, 64 insertions(+), 36 deletions(-)

diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.html
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.html
index 26e67c62b4..f3af0d5d2c 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.html
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.html
@@ -97,7 +97,7 @@
                                         
(codeMirrorLoaded)="initSpecEditor($event)"></ngx-codemirror>
                                 </div>
                                 <div class="w-full overflow-ellipsis 
overflow-hidden whitespace-nowrap">
-                                    @if (joltState.validate().saving) {
+                                    @if (joltState.validate().loading) {
                                         <i
                                             class="fa fa-refresh fa-spin mr-2"
                                             nifiTooltip
@@ -293,7 +293,7 @@
                                 </div>
                                 <div class="flex flex-1 mt-2 justify-start">
                                     <div class="w-full overflow-ellipsis 
overflow-hidden whitespace-nowrap">
-                                        @if (joltState.transform().saving) {
+                                        @if (joltState.transform().loading) {
                                             <i
                                                 class="fa fa-refresh fa-spin 
mr-2"
                                                 nifiTooltip
@@ -381,9 +381,15 @@
                 </div>
             </form>
         } @else {
-            <div class="flex flex-1 justify-center items-center">
-                <i class="fa fa-warning caution-color mr-2"></i>An error has 
occurred loading the editor.
-            </div>
+            @if (processorDetailsLoading$ | async) {
+                <div class="h-full flex items-center justify-center">
+                    <mat-spinner color="primary"></mat-spinner>
+                </div>
+            } @else if (processorDetailsError()) {
+                <div class="flex flex-1 justify-center items-center">
+                    <i class="fa fa-warning caution-color mr-2"></i>{{ 
processorDetailsError() }}
+                </div>
+            }
         }
     </div>
 </div>
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.ts
index 895cf95fe3..d7718d2602 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.component.ts
@@ -26,6 +26,8 @@ import {
     selectEditableFromRoute,
     selectJoltTransformJsonProcessorDetailsState,
     selectProcessorDetails,
+    selectProcessorDetailsError,
+    selectProcessorDetailsLoading,
     selectProcessorIdFromRoute,
     selectRevisionFromRoute
 } from 
'../state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.selectors';
@@ -84,6 +86,8 @@ export class JoltTransformJsonUi implements OnDestroy {
         transform: 
this.store.selectSignal(selectJoltTransformJsonTransformState)
     };
     processorDetails$ = this.store.select(selectProcessorDetails);
+    processorDetailsLoading$ = 
this.store.select(selectProcessorDetailsLoading);
+    processorDetailsError = 
this.store.selectSignal(selectProcessorDetailsError);
     editable: boolean = false;
     createNew: (existingEntries: string[]) => Observable<MapTableEntry> =
         this.mapTableHelperService.createNewEntry('Attribute');
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.module.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.module.ts
index 19fbaa2160..65ba5a1ebd 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.module.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/feature/jolt-transform-json-ui.module.ts
@@ -39,6 +39,7 @@ import { MatExpansionModule } from 
'@angular/material/expansion';
 import { JoltTransformJsonTransformEffects } from 
'../state/jolt-transform-json-transform/jolt-transform-json-transform.effects';
 import { JoltTransformJsonValidateEffects } from 
'../state/jolt-transform-json-validate/jolt-transform-json-validate.effects';
 import { JoltTransformJsonPropertyEffects } from 
'../state/jolt-transform-json-property/jolt-transform-json-property.effects';
+import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
 
 @NgModule({
     declarations: [JoltTransformJsonUi],
@@ -70,7 +71,8 @@ import { JoltTransformJsonPropertyEffects } from 
'../state/jolt-transform-json-p
         ComponentContext,
         MatExpansionModule,
         FormsModule,
-        MapTable
+        MapTable,
+        MatProgressSpinnerModule
     ]
 })
 export class JoltTransformJsonUiModule {}
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/index.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/index.ts
index 85c91f3bad..2f08f82b89 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/index.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/index.ts
@@ -16,7 +16,8 @@
  */
 
 export interface JoltTransformJsonProcessorDetailsState {
-    saving: boolean;
+    loading: boolean;
+    error: string | null;
     processorDetails: ProcessorDetails | null;
 }
 
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.actions.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.actions.ts
index 1ddc1ab425..9d20d7f089 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.actions.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.actions.ts
@@ -37,5 +37,5 @@ export const loadProcessorDetailsSuccess = createAction(
 
 export const loadProcessorDetailsFailure = createAction(
     `${JOLT_TRANSFORM_JSON_PROCESSOR_DETAILS_PREFIX} Load Processor Details 
Failure`,
-    props<{ response: HttpErrorResponse }>()
+    props<{ response: string }>()
 );
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.effects.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.effects.ts
index fbd12b2281..61ada9f1c6 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.effects.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.effects.ts
@@ -43,9 +43,19 @@ export class JoltTransformJsonProcessorDetailsEffects {
                         })
                     ),
                     catchError((errorResponse: HttpErrorResponse) => {
+                        let errorMessage = 'An unspecified error occurred.';
+
+                        if (errorResponse.status !== 0) {
+                            if (typeof errorResponse.error === 'string') {
+                                errorMessage = errorResponse.error;
+                            } else {
+                                errorMessage = errorResponse.message || 
`${errorResponse.status}`;
+                            }
+                        }
+
                         return of(
                             loadProcessorDetailsFailure({
-                                response: errorResponse
+                                response: errorMessage
                             })
                         );
                     })
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.reducer.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.reducer.ts
index 8165d928bc..54bc547ed5 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.reducer.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.reducer.ts
@@ -18,13 +18,15 @@
 import { JoltTransformJsonProcessorDetailsState } from './index';
 import { createReducer, on } from '@ngrx/store';
 import {
+    loadProcessorDetails,
     loadProcessorDetailsFailure,
     loadProcessorDetailsSuccess,
     resetJoltTransformJsonProcessorDetailsState
 } from './jolt-transform-json-processor-details.actions';
 
 export const initialState: JoltTransformJsonProcessorDetailsState = {
-    saving: false,
+    loading: false,
+    error: null,
     processorDetails: null
 };
 
@@ -33,12 +35,20 @@ export const joltTransformJsonProcessorDetailsReducer = 
createReducer(
     on(resetJoltTransformJsonProcessorDetailsState, () => ({
         ...initialState
     })),
+    on(loadProcessorDetails, (state) => ({
+        ...state,
+        error: null,
+        loading: true
+    })),
     on(loadProcessorDetailsSuccess, (state, { response }) => ({
         ...state,
-        processorDetails: response
+        processorDetails: response,
+        loading: false
     })),
-    on(loadProcessorDetailsFailure, (state) => ({
+    on(loadProcessorDetailsFailure, (state, { response }) => ({
         ...state,
-        processorDetails: null
+        processorDetails: null,
+        error: response,
+        loading: false
     }))
 );
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.selectors.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.selectors.ts
index 63e8a4a58f..5337a4b7ff 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.selectors.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.selectors.ts
@@ -34,9 +34,14 @@ export const selectProcessorDetails = createSelector(
     (state: JoltTransformJsonProcessorDetailsState) => state.processorDetails
 );
 
-export const selectSaving = createSelector(
+export const selectProcessorDetailsLoading = createSelector(
     selectJoltTransformJsonProcessorDetailsState,
-    (state: JoltTransformJsonProcessorDetailsState) => state.saving
+    (state: JoltTransformJsonProcessorDetailsState) => state.loading
+);
+
+export const selectProcessorDetailsError = createSelector(
+    selectJoltTransformJsonProcessorDetailsState,
+    (state: JoltTransformJsonProcessorDetailsState) => state.error
 );
 
 export const selectProcessorIdFromRoute = createSelector(selectCurrentRoute, 
(route) => {
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/index.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/index.ts
index e3e2ea3865..eb2f0e3e78 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/index.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/index.ts
@@ -18,7 +18,7 @@
 import { HttpErrorResponse } from '@angular/common/http';
 
 export interface JoltTransformJsonTransformState {
-    saving: boolean;
+    loading: boolean;
     transformationResponse?: TransformJoltSpecSuccess | null;
     transformationFailureResponse?: HttpErrorResponse | null;
 }
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.reducer.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.reducer.ts
index 463b140dcc..62c3e5c22c 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.reducer.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.reducer.ts
@@ -25,7 +25,7 @@ import {
 } from './jolt-transform-json-transform.actions';
 
 export const initialState: JoltTransformJsonTransformState = {
-    saving: false,
+    loading: false,
     transformationResponse: null,
     transformationFailureResponse: null
 };
@@ -37,16 +37,16 @@ export const joltTransformJsonTransformReducer = 
createReducer(
     })),
     on(transformJoltSpec, (state) => ({
         ...state,
-        saving: true
+        loading: true
     })),
     on(transformJoltSpecSuccess, (state, { response }) => ({
         ...state,
-        saving: false,
+        loading: false,
         transformationResponse: response
     })),
     on(transformJoltSpecFailure, (state, { response }) => ({
         ...state,
-        saving: false,
+        loading: false,
         transformationResponse: null,
         transformationFailureResponse: response
     }))
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.selectors.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.selectors.ts
index fd42383f5a..f6f6a87056 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.selectors.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-transform/jolt-transform-json-transform.selectors.ts
@@ -27,8 +27,3 @@ export const selectJoltTransformJsonTransformState = 
createSelector(
     selectJoltTransformJsonUiState,
     (state: JoltTransformJsonUiState) => 
state[joltTransformJsonTransformFeatureKey]
 );
-
-export const selectSaving = createSelector(
-    selectJoltTransformJsonTransformState,
-    (state: JoltTransformJsonTransformState) => state.saving
-);
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/index.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/index.ts
index 5084c00dcd..bddcf61185 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/index.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/index.ts
@@ -18,7 +18,7 @@
 import { HttpErrorResponse } from '@angular/common/http';
 
 export interface JoltTransformJsonValidateState {
-    saving: boolean | null;
+    loading: boolean | null;
     validationResponse?: ValidateJoltSpecSuccess | null;
     validationFailureResponse?: HttpErrorResponse | null;
 }
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.reducer.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.reducer.ts
index f6c4ccbb04..69fdc0351f 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.reducer.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.reducer.ts
@@ -26,7 +26,7 @@ import {
 } from './jolt-transform-json-validate.actions';
 
 export const initialState: JoltTransformJsonValidateState = {
-    saving: false,
+    loading: false,
     validationResponse: null,
     validationFailureResponse: null
 };
@@ -38,21 +38,21 @@ export const joltTransformJsonValidateReducer = 
createReducer(
     })),
     on(validateJoltSpec, (state) => ({
         ...state,
-        saving: true
+        loading: true
     })),
     on(validateJoltSpecSuccess, (state, { response }) => ({
         ...state,
-        saving: false,
+        loading: false,
         validationResponse: response
     })),
     on(validateJoltSpecFailure, (state, { response }) => ({
         ...state,
-        saving: false,
+        loading: false,
         validationFailureResponse: response
     })),
     on(resetValidateJoltSpecState, (state) => ({
         ...state,
-        saving: null,
+        loading: null,
         validationResponse: null,
         validationFailureResponse: null
     }))
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.selectors.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.selectors.ts
index 8363427535..9bd7c8e98a 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.selectors.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi-jolt-transform-ui/src/app/pages/jolt-transform-json-ui/state/jolt-transform-json-validate/jolt-transform-json-validate.selectors.ts
@@ -27,8 +27,3 @@ export const selectJoltTransformJsonValidateState = 
createSelector(
     selectJoltTransformJsonUiState,
     (state: JoltTransformJsonUiState) => 
state[joltTransformJsonValidateFeatureKey]
 );
-
-export const selectSaving = createSelector(
-    selectJoltTransformJsonValidateState,
-    (state: JoltTransformJsonValidateState) => state.saving
-);

Reply via email to