Skip to content

Commit 1c07594

Browse files
committed
fix: error message
1 parent 68e4e18 commit 1c07594

6 files changed

Lines changed: 45 additions & 31 deletions

File tree

src/messages.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ const messages = defineMessages({
1010
id: 'authoring.alert.support.text',
1111
defaultMessage: 'Support Page',
1212
},
13+
unknownError: {
14+
id: 'authoring.alert.error.unknown',
15+
defaultMessage: 'Unknown error',
16+
},
1317
});
1418

1519
export default messages;

src/taxonomy/data/apiHooks.ts

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -214,18 +214,13 @@ export const useSubTags = (taxonomyId: number, parentTagValue: string) => useQue
214214

215215
export const useCreateTag = (taxonomyId: number) => {
216216
const queryClient = useQueryClient();
217-
const intl = useIntl();
218217

219218
return useMutation({
220219
mutationFn: async ({ value, parentTagValue }: { value: string, parentTagValue?: string }) => {
221-
try {
222-
await getAuthenticatedHttpClient().post(
223-
apiUrls.createTag(taxonomyId),
224-
{ tag: value, parent_tag_value: parentTagValue },
225-
);
226-
} catch (err) {
227-
throw new Error(getApiErrorMessage(err, intl));
228-
}
220+
await getAuthenticatedHttpClient().post(
221+
apiUrls.createTag(taxonomyId),
222+
{ tag: value, parent_tag_value: parentTagValue },
223+
);
229224
},
230225
onSuccess: () => {
231226
queryClient.invalidateQueries({
@@ -246,14 +241,10 @@ export const useUpdateTag = (taxonomyId: number) => {
246241

247242
return useMutation({
248243
mutationFn: async ({ value, originalValue }: { value: string, originalValue: string }) => {
249-
try {
250-
await getAuthenticatedHttpClient().patch(
251-
apiUrls.updateTag(taxonomyId),
252-
{ tag: originalValue, updated_tag_value: value },
253-
);
254-
} catch (err) {
255-
throw new Error(getApiErrorMessage(err));
256-
}
244+
await getAuthenticatedHttpClient().patch(
245+
apiUrls.updateTag(taxonomyId),
246+
{ tag: originalValue, updated_tag_value: value },
247+
);
257248
},
258249
onSuccess: () => {
259250
queryClient.invalidateQueries({

src/taxonomy/tag-list/hooks.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import {
1313
} from './constants';
1414

1515
import messages from './messages';
16+
import globalMessages from '../../messages';
17+
import { AxiosError } from 'axios';
1618

1719
/** Interface for table mode actions for React's `useReducer` hook.
1820
*
@@ -163,6 +165,26 @@ const useEditActions = ({
163165
return true;
164166
};
165167

168+
const getErrorMessage = (error: unknown): string => {
169+
let errorMessage: string = '';
170+
if (error instanceof AxiosError) {
171+
const responseData = error.response?.data;
172+
const tagError = Object.entries(responseData)?.find((errItem: [string, unknown]) => (
173+
['tag', 'value', 'updated_tag_value'].includes(errItem[0].toLowerCase())
174+
));
175+
176+
const errorMessages = tagError ? tagError[1] : (
177+
(error as Error).message || intl.formatMessage(globalMessages.unknownError)
178+
);
179+
errorMessage = Array.isArray(errorMessages) ? errorMessages.join('; ') : String(errorMessages);
180+
} else {
181+
errorMessage = (error as Error).message || intl.formatMessage(globalMessages.unknownError);
182+
}
183+
184+
errorMessage = errorMessage.replace(/\.$/, ''); // Remove trailing period for better message formatting
185+
return errorMessage;
186+
};
187+
166188
const handleCreateTag = async (value: string, parentTagValue?: string) => {
167189
const trimmed = value.trim();
168190

@@ -182,9 +204,9 @@ const useEditActions = ({
182204
setIsCreatingTopTag(false);
183205
setCreatingParentId(null);
184206
} catch (error) {
185-
const message = intl.formatMessage(messages.tagCreationErrorMessage, { errorMessage: (error as Error)?.message });
186-
setDraftError((error as Error)?.message || intl.formatMessage(messages.tagCreationErrorMessage, { errorMessage: '' }));
187-
setToast({ show: true, message });
207+
const errorMessage = getErrorMessage(error);
208+
setDraftError(errorMessage);
209+
setToast({ show: true, message: intl.formatMessage(messages.tagCreationErrorMessage, { errorMessage }) });
188210
}
189211
};
190212

@@ -211,9 +233,9 @@ const useEditActions = ({
211233
message: intl.formatMessage(messages.tagUpdateSuccessMessage, { name: trimmed }),
212234
});
213235
} catch (error) {
214-
const message = intl.formatMessage(messages.tagUpdateErrorMessage, { errorMessage: (error as Error)?.message });
215-
setDraftError((error as Error)?.message || intl.formatMessage(messages.tagUpdateErrorMessage, { errorMessage: '' }));
216-
setToast({ show: true, message });
236+
const errorMessage = getErrorMessage(error);
237+
setDraftError(errorMessage);
238+
setToast({ show: true, message: intl.formatMessage(messages.tagUpdateErrorMessage, { errorMessage }) });
217239
}
218240
};
219241

src/taxonomy/tree-table/CreateRow.test.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const baseProps = () => ({
1515
setIsCreatingTopRow: jest.fn(),
1616
exitDraftWithoutSave: jest.fn(),
1717
createRowMutation: { isPending: false },
18-
columns: [{ id: 'value' }],
1918
validate: jest.fn((value: string) => value.trim().length > 0),
2019
});
2120

src/taxonomy/tree-table/NestedRows.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import type {
77
TreeColumnDef,
88
CreateRowMutationState,
99
} from './types';
10-
import { CreateRow, EditRow } from './CreateRow';
10+
import CreateRow from './CreateRow';
11+
import EditRow from './EditRow';
1112

1213
interface NestedRowsProps {
1314
/** The parent row object from TanStack React Table */
@@ -103,7 +104,6 @@ const NestedRows = ({
103104
setIsCreatingTopRow={setIsCreatingTopRow}
104105
exitDraftWithoutSave={onCancelCreation}
105106
createRowMutation={createRowMutation}
106-
columns={[]}
107107
indent={indent}
108108
validate={validate}
109109
/>
@@ -123,7 +123,6 @@ const NestedRows = ({
123123
exitDraftWithoutSave();
124124
}}
125125
updateRowMutation={updateRowMutation}
126-
columns={columns}
127126
indent={indent}
128127
validate={validate}
129128
row={row}
@@ -138,7 +137,7 @@ const NestedRows = ({
138137
return (
139138
<td
140139
key={cell.id}
141-
className={`p-1 align-top tree-table-overflow-anywhere`}
140+
className="p-1 tree-table-overflow-anywhere"
142141
>
143142
{isFirstColumn ? (
144143
<div className={`tree-table-indent tree-table-indent-${indent}`}>{content}</div>

src/taxonomy/tree-table/TableBody.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import type {
1313
TreeColumnDef,
1414
TreeTable,
1515
} from './types';
16-
import { CreateRow, EditRow } from './CreateRow';
16+
import CreateRow from './CreateRow';
17+
import EditRow from './EditRow';
1718

1819
interface TableBodyProps {
1920
columns: TreeColumnDef[];
@@ -86,7 +87,6 @@ const TableBody = ({
8687
setIsCreatingTopRow={setIsCreatingTopRow}
8788
exitDraftWithoutSave={exitDraftWithoutSave}
8889
createRowMutation={createRowMutation}
89-
columns={columns}
9090
validate={validate}
9191
/>
9292
)}
@@ -104,7 +104,6 @@ const TableBody = ({
104104
exitDraftWithoutSave();
105105
}}
106106
updateRowMutation={updateRowMutation}
107-
columns={columns}
108107
validate={validate}
109108
row={row}
110109
/>

0 commit comments

Comments
 (0)