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 a1610cf129 NIFI-13098: (#8701)
a1610cf129 is described below

commit a1610cf1292620b6f504fbace9cb5b765706cdf7
Author: Matt Gilman <[email protected]>
AuthorDate: Fri Apr 26 15:19:39 2024 -0400

    NIFI-13098: (#8701)
    
    - Updating error handling in Global and Component Policy pages.
    
    This closes #8701
---
 .../state/access-policy/access-policy.actions.ts   |  4 +-
 .../state/access-policy/access-policy.effects.ts   | 51 +++++++++++++---------
 .../state/access-policy/access-policy.reducer.ts   | 10 ++---
 .../access-policies/state/access-policy/index.ts   |  1 -
 .../state/policy-component/index.ts                |  3 +-
 .../policy-component/policy-component.actions.ts   |  5 ---
 .../policy-component/policy-component.effects.ts   | 10 +++--
 .../policy-component/policy-component.reducer.ts   | 13 +-----
 .../pages/access-policies/state/tenants/index.ts   |  3 +-
 .../state/tenants/tenants.actions.ts               |  2 -
 .../state/tenants/tenants.effects.ts               |  8 ++--
 .../state/tenants/tenants.reducer.ts               |  8 +---
 .../component-access-policies.component.html       |  7 ++-
 .../component-access-policies.component.ts         |  2 +
 .../component-access-policies.module.ts            |  4 +-
 .../global-access-policies.component.html          |  1 +
 .../global-access-policies.component.ts            |  2 +
 .../global-access-policies.module.ts               |  4 +-
 18 files changed, 69 insertions(+), 69 deletions(-)

diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.actions.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.actions.ts
index 182b975bff..2bb1c79fd2 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.actions.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.actions.ts
@@ -97,8 +97,8 @@ export const resetAccessPolicy = createAction(
     props<{ response: ResetAccessPolicy }>()
 );
 
-export const accessPolicyApiError = createAction(
-    `${ACCESS_POLICY_PREFIX} Access Policy Api Error`,
+export const accessPolicyApiBannerError = createAction(
+    `${ACCESS_POLICY_PREFIX} Access Policy Api Banner Error`,
     props<{ response: LoadAccessPolicyError }>()
 );
 
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.effects.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.effects.ts
index c2d1595c2a..9037ed0ece 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.effects.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.effects.ts
@@ -22,6 +22,7 @@ import { NiFiState } from '../../../../state';
 import { Store } from '@ngrx/store';
 import { Router } from '@angular/router';
 import * as AccessPolicyActions from './access-policy.actions';
+import * as ErrorActions from '../../../../state/error/error.actions';
 import { catchError, from, map, of, switchMap, take, tap } from 'rxjs';
 import { MatDialog } from '@angular/material/dialog';
 import { AccessPolicyService } from '../../service/access-policy.service';
@@ -34,6 +35,7 @@ import { AddTenantsToPolicyRequest } from './index';
 import { selectUserGroups, selectUsers } from '../tenants/tenants.selectors';
 import { OverridePolicyDialog } from 
'../../ui/common/override-policy-dialog/override-policy-dialog.component';
 import { MEDIUM_DIALOG, SMALL_DIALOG } from '../../../../index';
+import { HttpErrorResponse } from '@angular/common/http';
 
 @Injectable()
 export class AccessPolicyEffects {
@@ -105,11 +107,11 @@ export class AccessPolicyEffects {
                             }
                         });
                     }),
-                    catchError((error) => {
+                    catchError((errorResponse: HttpErrorResponse) => {
                         let policyStatus: PolicyStatus | undefined;
-                        if (error.status === 404) {
+                        if (errorResponse.status === 404) {
                             policyStatus = PolicyStatus.NotFound;
-                        } else if (error.status === 403) {
+                        } else if (errorResponse.status === 403) {
                             policyStatus = PolicyStatus.Forbidden;
                         }
 
@@ -123,9 +125,9 @@ export class AccessPolicyEffects {
                             );
                         } else {
                             return of(
-                                AccessPolicyActions.accessPolicyApiError({
+                                
AccessPolicyActions.accessPolicyApiBannerError({
                                     response: {
-                                        error: error.error
+                                        error: errorResponse.error
                                     }
                                 })
                             );
@@ -153,11 +155,11 @@ export class AccessPolicyEffects {
                             }
                         });
                     }),
-                    catchError((error) =>
+                    catchError((errorResponse: HttpErrorResponse) =>
                         of(
-                            AccessPolicyActions.accessPolicyApiError({
+                            AccessPolicyActions.accessPolicyApiBannerError({
                                 response: {
-                                    error: error.error
+                                    error: errorResponse.error
                                 }
                             })
                         )
@@ -227,11 +229,11 @@ export class AccessPolicyEffects {
                             }
                         });
                     }),
-                    catchError((error) =>
+                    catchError((errorResponse: HttpErrorResponse) =>
                         of(
-                            AccessPolicyActions.accessPolicyApiError({
+                            AccessPolicyActions.accessPolicyApiBannerError({
                                 response: {
-                                    error: error.error
+                                    error: errorResponse.error
                                 }
                             })
                         )
@@ -331,11 +333,11 @@ export class AccessPolicyEffects {
                             }
                         });
                     }),
-                    catchError((error) =>
+                    catchError((errorResponse: HttpErrorResponse) =>
                         of(
-                            AccessPolicyActions.accessPolicyApiError({
+                            AccessPolicyActions.accessPolicyApiBannerError({
                                 response: {
-                                    error: error.error
+                                    error: errorResponse.error
                                 }
                             })
                         )
@@ -401,11 +403,11 @@ export class AccessPolicyEffects {
                             }
                         });
                     }),
-                    catchError((error) =>
+                    catchError((errorResponse: HttpErrorResponse) =>
                         of(
-                            AccessPolicyActions.accessPolicyApiError({
+                            AccessPolicyActions.accessPolicyApiBannerError({
                                 response: {
-                                    error: error.error
+                                    error: errorResponse.error
                                 }
                             })
                         )
@@ -455,11 +457,11 @@ export class AccessPolicyEffects {
                             }
                         });
                     }),
-                    catchError((error) =>
+                    catchError((errorResponse: HttpErrorResponse) =>
                         of(
-                            AccessPolicyActions.accessPolicyApiError({
+                            AccessPolicyActions.accessPolicyApiBannerError({
                                 response: {
-                                    error: error.error
+                                    error: errorResponse.error
                                 }
                             })
                         )
@@ -468,4 +470,13 @@ export class AccessPolicyEffects {
             )
         )
     );
+
+    accessPolicyApiBannerError$ = createEffect(() =>
+        this.actions$.pipe(
+            ofType(AccessPolicyActions.accessPolicyApiBannerError),
+            map((action) => action.response),
+            tap(() => this.dialog.closeAll()),
+            switchMap((response) => of(ErrorActions.addBannerError({ error: 
response.error })))
+        )
+    );
 }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.reducer.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.reducer.ts
index 2c850c0f70..660584aff2 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.reducer.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/access-policy.reducer.ts
@@ -20,7 +20,7 @@ import { createReducer, on } from '@ngrx/store';
 import {
     addTenantsToPolicy,
     createAccessPolicySuccess,
-    accessPolicyApiError,
+    accessPolicyApiBannerError,
     loadAccessPolicy,
     loadAccessPolicySuccess,
     removeTenantFromPolicy,
@@ -32,7 +32,6 @@ import {
 export const initialState: AccessPolicyState = {
     saving: false,
     loadedTimestamp: '',
-    error: null,
     status: 'pending'
 };
 
@@ -69,11 +68,10 @@ export const accessPolicyReducer = createReducer(
         loadedTimestamp: 'N/A',
         status: 'success' as const
     })),
-    on(accessPolicyApiError, (state, { response }) => ({
+    on(accessPolicyApiBannerError, (state) => ({
         ...state,
-        error: response.error,
-        accessPolicy: undefined,
-        policyStatus: undefined,
+        loadedTimestamp: state.loadedTimestamp == initialState.loadedTimestamp 
? 'N/A' : state.loadedTimestamp,
+        saving: false,
         status: 'error' as const
     })),
     on(resetAccessPolicyState, () => ({
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/index.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/index.ts
index 483246bb25..b796b3c27b 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/index.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/access-policy/index.ts
@@ -69,6 +69,5 @@ export interface AccessPolicyState {
     accessPolicy?: AccessPolicyEntity;
     saving: boolean;
     loadedTimestamp: string;
-    error: string | null;
     status: 'pending' | 'loading' | 'error' | 'success';
 }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/index.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/index.ts
index 515648b106..8a3e4bc800 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/index.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/index.ts
@@ -34,6 +34,5 @@ export interface PolicyComponentState {
     allowRemoteAccess: boolean;
     resource: string;
     loadedTimestamp: string;
-    error: string | null;
-    status: 'pending' | 'loading' | 'error' | 'success';
+    status: 'pending' | 'loading' | 'success';
 }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.actions.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.actions.ts
index e9429f8d94..7be55865a0 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.actions.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.actions.ts
@@ -30,9 +30,4 @@ export const loadPolicyComponentSuccess = createAction(
     props<{ response: LoadPolicyComponentSuccess }>()
 );
 
-export const policyComponentApiError = createAction(
-    `${POLICY_COMPONENT_PREFIX} Policy Component Api Error`,
-    props<{ error: string }>()
-);
-
 export const resetPolicyComponentState = 
createAction(`${POLICY_COMPONENT_PREFIX} Reset Policy Component State`);
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.effects.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.effects.ts
index 5aba7c5d50..c1bdbbd413 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.effects.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.effects.ts
@@ -18,8 +18,10 @@
 import { Injectable } from '@angular/core';
 import { Actions, createEffect, ofType } from '@ngrx/effects';
 import * as PolicyComponentActions from './policy-component.actions';
+import * as ErrorActions from '../../../../state/error/error.actions';
 import { catchError, from, map, of, switchMap } from 'rxjs';
 import { AccessPolicyService } from '../../service/access-policy.service';
+import { HttpErrorResponse } from '@angular/common/http';
 
 @Injectable()
 export class PolicyComponentEffects {
@@ -47,8 +49,8 @@ export class PolicyComponentEffects {
                             }
                         })
                     ),
-                    catchError((error) => {
-                        if (error.status === 403) {
+                    catchError((errorResponse: HttpErrorResponse) => {
+                        if (errorResponse.status === 403) {
                             return of(
                                 
PolicyComponentActions.loadPolicyComponentSuccess({
                                     response: {
@@ -60,8 +62,8 @@ export class PolicyComponentEffects {
                             );
                         } else {
                             return of(
-                                
PolicyComponentActions.policyComponentApiError({
-                                    error: error.error
+                                ErrorActions.snackBarError({
+                                    error: errorResponse.error
                                 })
                             );
                         }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.reducer.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.reducer.ts
index ddfbe0337d..4428b9a028 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.reducer.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/policy-component/policy-component.reducer.ts
@@ -17,19 +17,13 @@
 
 import { PolicyComponentState } from './index';
 import { createReducer, on } from '@ngrx/store';
-import {
-    loadPolicyComponent,
-    loadPolicyComponentSuccess,
-    resetPolicyComponentState,
-    policyComponentApiError
-} from './policy-component.actions';
+import { loadPolicyComponent, loadPolicyComponentSuccess, 
resetPolicyComponentState } from './policy-component.actions';
 
 export const initialState: PolicyComponentState = {
     label: '',
     resource: '',
     allowRemoteAccess: false,
     loadedTimestamp: '',
-    error: null,
     status: 'pending'
 };
 
@@ -46,11 +40,6 @@ export const policyComponentReducer = createReducer(
         allowRemoteAccess: response.allowRemoteAccess,
         status: 'success' as const
     })),
-    on(policyComponentApiError, (state, { error }) => ({
-        ...state,
-        error: error,
-        status: 'error' as const
-    })),
     on(resetPolicyComponentState, () => ({
         ...initialState
     }))
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/index.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/index.ts
index a36dd71527..038bc5eb85 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/index.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/index.ts
@@ -28,6 +28,5 @@ export interface TenantsState {
     users: UserEntity[];
     userGroups: UserGroupEntity[];
     loadedTimestamp: string;
-    error: string | null;
-    status: 'pending' | 'loading' | 'error' | 'success';
+    status: 'pending' | 'loading' | 'success';
 }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.actions.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.actions.ts
index 5a0cd7c1c3..833cd6fba3 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.actions.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.actions.ts
@@ -27,6 +27,4 @@ export const loadTenantsSuccess = createAction(
     props<{ response: LoadTenantsSuccess }>()
 );
 
-export const tenantsApiError = createAction(`${TENANTS_PREFIX} Tenants Api 
Error`, props<{ error: string }>());
-
 export const resetTenantsState = createAction(`${TENANTS_PREFIX} Reset Tenants 
State`);
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.effects.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.effects.ts
index 6c25bbac96..c876c3c46b 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.effects.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.effects.ts
@@ -18,8 +18,10 @@
 import { Injectable } from '@angular/core';
 import { Actions, createEffect, ofType } from '@ngrx/effects';
 import * as TenantsActions from './tenants.actions';
+import * as ErrorActions from '../../../../state/error/error.actions';
 import { catchError, combineLatest, map, of, switchMap } from 'rxjs';
 import { AccessPolicyService } from '../../service/access-policy.service';
+import { HttpErrorResponse } from '@angular/common/http';
 
 @Injectable()
 export class TenantsEffects {
@@ -41,10 +43,10 @@ export class TenantsEffects {
                             }
                         })
                     ),
-                    catchError((error) =>
+                    catchError((errorResponse: HttpErrorResponse) =>
                         of(
-                            TenantsActions.tenantsApiError({
-                                error: error.error
+                            ErrorActions.snackBarError({
+                                error: errorResponse.error
                             })
                         )
                     )
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.reducer.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.reducer.ts
index 0b4f1abd10..269e0d9ced 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.reducer.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/state/tenants/tenants.reducer.ts
@@ -17,13 +17,12 @@
 
 import { TenantsState } from './index';
 import { createReducer, on } from '@ngrx/store';
-import { loadTenants, loadTenantsSuccess, resetTenantsState, tenantsApiError } 
from './tenants.actions';
+import { loadTenants, loadTenantsSuccess, resetTenantsState } from 
'./tenants.actions';
 
 export const initialState: TenantsState = {
     users: [],
     userGroups: [],
     loadedTimestamp: '',
-    error: null,
     status: 'pending'
 };
 
@@ -39,11 +38,6 @@ export const tenantsReducer = createReducer(
         userGroups: response.userGroups,
         status: 'success' as const
     })),
-    on(tenantsApiError, (state, { error }) => ({
-        ...state,
-        error: error,
-        status: 'error' as const
-    })),
     on(resetTenantsState, () => ({
         ...initialState
     }))
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.html
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.html
index 2414d518fb..26905a0528 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.html
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.html
@@ -24,6 +24,7 @@
         @if (policyComponentState$ | async; as policyComponentState) {
             @if (flowConfiguration$ | async; as flowConfiguration) {
                 <div class="component-access-policies flex flex-col h-full 
gap-y-2">
+                    <error-banner></error-banner>
                     <div class="accent-color font-medium">
                         <div class="mb-2">
                             @switch (accessPolicyState.policyStatus) {
@@ -61,7 +62,11 @@
                                     </div>
                                     <div class="flex flex-col">
                                         <div class="operation-context-name">
-                                            {{ policyComponentState.label }}
+                                            {{
+                                                policyComponentState.label
+                                                    ? 
policyComponentState.label
+                                                    : resourceIdentifier
+                                            }}
                                         </div>
                                         <div class="operation-context-type 
primary-color">
                                             {{ getContextType() }}
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.ts
index f75531131f..7e7d9b4528 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.component.ts
@@ -47,6 +47,7 @@ import { loadTenants, resetTenantsState } from 
'../../state/tenants/tenants.acti
 import { loadPolicyComponent, resetPolicyComponentState } from 
'../../state/policy-component/policy-component.actions';
 import { selectPolicyComponentState } from 
'../../state/policy-component/policy-component.selectors';
 import { PolicyComponentState } from '../../state/policy-component';
+import { clearBannerErrors } from '../../../../state/error/error.actions';
 
 @Component({
     selector: 'global-access-policies',
@@ -431,6 +432,7 @@ export class ComponentAccessPolicies implements OnInit, 
OnDestroy {
     }
 
     ngOnDestroy(): void {
+        this.store.dispatch(clearBannerErrors());
         this.store.dispatch(resetAccessPolicyState());
         this.store.dispatch(resetTenantsState());
         this.store.dispatch(resetPolicyComponentState());
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.module.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.module.ts
index 94e7b6d481..bdcd024ec8 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.module.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/component-access-policies/component-access-policies.module.ts
@@ -28,6 +28,7 @@ import { ComponentAccessPoliciesRoutingModule } from 
'./component-access-policie
 import { NifiTooltipDirective } from 
'../../../../ui/common/tooltips/nifi-tooltip.directive';
 import { PolicyTable } from '../common/policy-table/policy-table.component';
 import { MatButtonModule } from '@angular/material/button';
+import { ErrorBanner } from 
'../../../../ui/common/error-banner/error-banner.component';
 
 @NgModule({
     declarations: [ComponentAccessPolicies],
@@ -43,7 +44,8 @@ import { MatButtonModule } from '@angular/material/button';
         MatSelectModule,
         NifiTooltipDirective,
         PolicyTable,
-        MatButtonModule
+        MatButtonModule,
+        ErrorBanner
     ]
 })
 export class ComponentAccessPoliciesModule {}
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.html
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.html
index fe07af7fa8..1a82d2c956 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.html
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.html
@@ -23,6 +23,7 @@
     } @else {
         @if (flowConfiguration$ | async; as flowConfiguration) {
             <div class="global-access-policies flex flex-col h-full gap-y-2">
+                <error-banner></error-banner>
                 <div class="accent-color font-medium">
                     <div class="mb-2">
                         @switch (accessPolicyState.policyStatus) {
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.ts
index ab8aacc274..1869b9b67c 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.component.ts
@@ -48,6 +48,7 @@ import { selectFlowConfiguration } from 
'../../../../state/flow-configuration/fl
 import { AccessPoliciesState } from '../../state';
 import { loadTenants, resetTenantsState } from 
'../../state/tenants/tenants.actions';
 import { loadCurrentUser } from 
'../../../../state/current-user/current-user.actions';
+import { clearBannerErrors } from '../../../../state/error/error.actions';
 
 @Component({
     selector: 'global-access-policies',
@@ -290,6 +291,7 @@ export class GlobalAccessPolicies implements OnInit, 
OnDestroy {
         // reload the current user to ensure the latest global policies
         this.store.dispatch(loadCurrentUser());
 
+        this.store.dispatch(clearBannerErrors());
         this.store.dispatch(resetAccessPolicyState());
         this.store.dispatch(resetTenantsState());
     }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.module.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.module.ts
index b0dcd699c2..c50184dd7f 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.module.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/access-policies/ui/global-access-policies/global-access-policies.module.ts
@@ -28,6 +28,7 @@ import { GlobalAccessPoliciesRoutingModule } from 
'./global-access-policies-rout
 import { NifiTooltipDirective } from 
'../../../../ui/common/tooltips/nifi-tooltip.directive';
 import { PolicyTable } from '../common/policy-table/policy-table.component';
 import { MatButtonModule } from '@angular/material/button';
+import { ErrorBanner } from 
'../../../../ui/common/error-banner/error-banner.component';
 
 @NgModule({
     declarations: [GlobalAccessPolicies],
@@ -43,7 +44,8 @@ import { MatButtonModule } from '@angular/material/button';
         MatSelectModule,
         NifiTooltipDirective,
         PolicyTable,
-        MatButtonModule
+        MatButtonModule,
+        ErrorBanner
     ]
 })
 export class GlobalAccessPoliciesModule {}

Reply via email to