scottyaslan commented on code in PR #10346:
URL: https://github.com/apache/nifi/pull/10346#discussion_r2389013437


##########
nifi-frontend/src/main/frontend/apps/nifi-registry/src/app/state/buckets/buckets.effects.ts:
##########
@@ -16,44 +16,191 @@
  */
 
 import { inject, Injectable } from '@angular/core';
-import { Actions, createEffect, ofType } from '@ngrx/effects';
-import { catchError, from, map, of, switchMap } from 'rxjs';
 import { HttpErrorResponse } from '@angular/common/http';
+import { MatDialog } from '@angular/material/dialog';
+import { Actions, createEffect, ofType } from '@ngrx/effects';
+import { from, of } from 'rxjs';
+import { catchError, map, switchMap, tap } from 'rxjs/operators';
 import * as BucketsActions from './buckets.actions';
 import { BucketsService } from '../../service/buckets.service';
 import { ErrorHelper } from '../../service/error-helper.service';
 import { ErrorContextKey } from '../error';
-import * as DropletsActions from '../droplets/droplets.actions';
+import * as ErrorActions from '../error/error.actions';
+import { CreateBucketDialogComponent } from 
'../../pages/buckets/feature/ui/create-bucket-dialog/create-bucket-dialog.component';
+import { EditBucketDialogComponent } from 
'../../pages/buckets/feature/ui/edit-bucket-dialog/edit-bucket-dialog.component';
+import { DeleteBucketDialogComponent } from 
'../../pages/buckets/feature/ui/delete-bucket-dialog/delete-bucket-dialog.component';
+import { ManageBucketPoliciesDialogComponent } from 
'../../pages/buckets/feature/ui/manage-bucket-policies-dialog/manage-bucket-policies-dialog.component';
+
+import { LARGE_DIALOG, MEDIUM_DIALOG } from '@nifi/shared';
 
 @Injectable()
 export class BucketsEffects {
     private bucketsService = inject(BucketsService);
     private errorHelper = inject(ErrorHelper);
-
-    actions$ = inject(Actions);
+    private dialog = inject(MatDialog);
+    private actions$ = inject(Actions);
 
     loadBuckets$ = createEffect(() =>
         this.actions$.pipe(
             ofType(BucketsActions.loadBuckets),
-            switchMap(() => {
-                return from(
-                    this.bucketsService.getBuckets().pipe(
-                        map((response) =>
-                            BucketsActions.loadBucketsSuccess({
-                                response: {
-                                    buckets: response
-                                }
-                            })
-                        ),
-                        catchError((errorResponse: HttpErrorResponse) => 
of(this.bannerError(errorResponse)))
+            switchMap(() =>
+                from(this.bucketsService.getBuckets()).pipe(
+                    map((response) =>
+                        BucketsActions.loadBucketsSuccess({
+                            response: {
+                                buckets: response
+                            }
+                        })
+                    ),
+                    catchError((errorResponse: HttpErrorResponse) => 
of(this.bannerError(errorResponse)))
+                )
+            )
+        )
+    );
+
+    openCreateBucketDialog$ = createEffect(
+        () =>
+            this.actions$.pipe(
+                ofType(BucketsActions.openCreateBucketDialog),
+                tap(() => {
+                    this.dialog.open(CreateBucketDialogComponent, {
+                        ...MEDIUM_DIALOG,
+                        autoFocus: false
+                    });
+                })
+            ),
+        { dispatch: false }
+    );
+
+    createBucket$ = createEffect(() =>
+        this.actions$.pipe(
+            ofType(BucketsActions.createBucket),
+            switchMap(({ request, keepDialogOpen }) =>
+                from(this.bucketsService.createBucket(request)).pipe(
+                    map((bucket) => BucketsActions.createBucketSuccess({ 
response: bucket, keepDialogOpen })),
+                    catchError((errorResponse: HttpErrorResponse) =>
+                        of(
+                            BucketsActions.createBucketFailure(),
+                            this.bannerError(errorResponse, 
ErrorContextKey.CREATE_BUCKET)
+                        )
+                    )
+                )
+            )
+        )
+    );
+
+    createBucketSuccess$ = createEffect(
+        () =>
+            this.actions$.pipe(
+                ofType(BucketsActions.createBucketSuccess),
+                tap(({ keepDialogOpen }) => {
+                    if (!keepDialogOpen) {
+                        this.dialog.closeAll();
+                    }
+                })
+            ),
+        { dispatch: false }
+    );
+
+    openEditBucketDialog$ = createEffect(
+        () =>
+            this.actions$.pipe(
+                ofType(BucketsActions.openEditBucketDialog),
+                tap(({ request }) => {
+                    this.dialog.open(EditBucketDialogComponent, {
+                        ...MEDIUM_DIALOG,
+                        autoFocus: false,
+                        data: { bucket: request.bucket }
+                    });
+                })
+            ),
+        { dispatch: false }
+    );
+
+    updateBucket$ = createEffect(() =>
+        this.actions$.pipe(
+            ofType(BucketsActions.updateBucket),
+            switchMap(({ request }) =>
+                from(this.bucketsService.updateBucket(request)).pipe(
+                    map((bucket) => BucketsActions.updateBucketSuccess({ 
response: bucket })),
+                    catchError((errorResponse: HttpErrorResponse) =>
+                        of(
+                            BucketsActions.updateBucketFailure(),
+                            this.bannerError(errorResponse, 
ErrorContextKey.UPDATE_BUCKET)
+                        )
+                    )
+                )
+            )
+        )
+    );
+
+    updateBucketSuccess$ = createEffect(
+        () =>
+            this.actions$.pipe(
+                ofType(BucketsActions.updateBucketSuccess),
+                tap(() => this.dialog.closeAll())
+            ),
+        { dispatch: false }
+    );
+
+    openDeleteBucketDialog$ = createEffect(
+        () =>
+            this.actions$.pipe(
+                ofType(BucketsActions.openDeleteBucketDialog),
+                tap(({ request }) => {
+                    this.dialog.open(DeleteBucketDialogComponent, {
+                        ...MEDIUM_DIALOG,
+                        autoFocus: false,
+                        data: { bucket: request.bucket }
+                    });

Review Comment:
   I also updated the delete resource UX to use the Yes/No dialog and snackbar 
error.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to