Skip to content

Commit 854a0c1

Browse files
authored
error handling in bucket creation ui (#3455)
1 parent 3d74e97 commit 854a0c1

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

web-app/src/screens/Console/Buckets/ListBuckets/AddBucket/AddBucket.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ const AddBucket = () => {
128128
(state: AppState) => state.addBucket.retentionValidity,
129129
);
130130
const addLoading = useSelector((state: AppState) => state.addBucket.loading);
131+
const addError = useSelector((state: AppState) => state.addBucket.error);
131132
const invalidFields = useSelector(
132133
(state: AppState) => state.addBucket.invalidFields,
133134
);
@@ -155,6 +156,12 @@ const AddBucket = () => {
155156
IAM_SCOPES.S3_PUT_ACTIONS,
156157
]);
157158

159+
useEffect(() => {
160+
if (addError) {
161+
dispatch(setErrorSnackMessage(errorToHandler(addError)));
162+
}
163+
}, [addError, dispatch]);
164+
158165
useEffect(() => {
159166
const bucketNameErrors = [
160167
!(isDirty && (bucketName.length < 3 || bucketName.length > 63)),

web-app/src/screens/Console/Buckets/ListBuckets/AddBucket/addBucketThunks.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,10 @@ export const addBucketAsync = createAsyncThunk(
8181
};
8282
}
8383
}
84-
85-
return api.buckets.makeBucket(request);
84+
try {
85+
return await api.buckets.makeBucket(request);
86+
} catch (err: any) {
87+
return rejectWithValue(err.error);
88+
}
8689
},
8790
);

web-app/src/screens/Console/Buckets/ListBuckets/AddBucket/addBucketsSlice.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
1818
import { addBucketAsync } from "./addBucketThunks";
19-
import { ObjectRetentionMode } from "api/consoleApi";
19+
import { ApiError, ObjectRetentionMode } from "api/consoleApi";
2020

2121
interface AddBucketState {
2222
loading: boolean;
@@ -36,6 +36,7 @@ interface AddBucketState {
3636
navigateTo: string;
3737
excludeFolders: boolean;
3838
excludedPrefixes: string;
39+
error: ApiError | null;
3940
}
4041

4142
const initialState: AddBucketState = {
@@ -56,6 +57,7 @@ const initialState: AddBucketState = {
5657
navigateTo: "",
5758
excludeFolders: false,
5859
excludedPrefixes: "",
60+
error: null,
5961
};
6062

6163
const addBucketsSlice = createSlice({
@@ -180,15 +182,20 @@ const addBucketsSlice = createSlice({
180182
builder
181183
.addCase(addBucketAsync.pending, (state) => {
182184
state.loading = true;
185+
state.error = null;
183186
})
184-
.addCase(addBucketAsync.rejected, (state) => {
187+
.addCase(addBucketAsync.rejected, (state, action) => {
185188
state.loading = false;
189+
state.error = action.payload as ApiError;
186190
})
187191
.addCase(addBucketAsync.fulfilled, (state, action) => {
188192
state.loading = false;
189-
state.navigateTo = action.payload.data.bucketName
190-
? "/buckets"
191-
: `/buckets/${action.payload.data.bucketName}/admin`;
193+
state.error = null;
194+
if (action.payload) {
195+
state.navigateTo = action.payload.data.bucketName
196+
? "/buckets"
197+
: `/buckets/${action.payload.data.bucketName}/admin`;
198+
}
192199
});
193200
},
194201
});

0 commit comments

Comments
 (0)