🥅(frontend) improve error handling during upload

Catch and log errors when replacing blocks during
file upload.
This commit is contained in:
Anthony LC
2025-11-05 11:42:13 +01:00
parent 1372438f8e
commit f9ff578c6b
2 changed files with 55 additions and 40 deletions

View File

@@ -70,35 +70,43 @@ const UploadLoaderBlockComponent = ({
loopCheckDocMediaStatus(url)
.then((response) => {
// Replace the loading block with the resource block (image, audio, video, pdf ...)
editor.replaceBlocks(
[block.id],
[
{
type: block.props.blockUploadType,
props: {
url: `${mediaUrl}${response.file}`,
showPreview: block.props.blockUploadShowPreview,
name: block.props.blockUploadName,
caption: '',
backgroundColor: 'default',
textAlignment: 'left',
},
} as never,
],
);
try {
editor.replaceBlocks(
[block.id],
[
{
type: block.props.blockUploadType,
props: {
url: `${mediaUrl}${response.file}`,
showPreview: block.props.blockUploadShowPreview,
name: block.props.blockUploadName,
caption: '',
backgroundColor: 'default',
textAlignment: 'left',
},
} as never,
],
);
} catch {
/* During collaboration, another user might have updated the block */
}
})
.catch((error) => {
console.error('Error analyzing file:', error);
editor.updateBlock(block.id, {
type: 'uploadLoader',
props: {
type: 'warning',
information: t(
'The antivirus has detected an anomaly in your file.',
),
},
});
try {
editor.updateBlock(block.id, {
type: 'uploadLoader',
props: {
type: 'warning',
information: t(
'The antivirus has detected an anomaly in your file.',
),
},
});
} catch {
/* During collaboration, another user might have updated the block */
}
});
}, [block, editor, mediaUrl]);

View File

@@ -1,3 +1,4 @@
import { captureException } from '@sentry/nextjs';
import { useCallback, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
@@ -70,22 +71,28 @@ export const useUploadStatus = (editor: DocsBlockNoteEditor) => {
const timeoutId = setTimeout(() => {
// Replace the resource block by a uploadLoader block
// to show analyzing status
editor.replaceBlocks(
[blockChanges.block.id],
[
{
type: 'uploadLoader',
props: {
information: t('Analyzing file...'),
type: 'loading',
blockUploadName,
blockUploadType,
blockUploadUrl,
blockUploadShowPreview,
try {
editor.replaceBlocks(
[blockChanges.block.id],
[
{
type: 'uploadLoader',
props: {
information: t('Analyzing file...'),
type: 'loading',
blockUploadName,
blockUploadType,
blockUploadUrl,
blockUploadShowPreview,
},
},
},
],
);
],
);
} catch (error) {
captureException(error, {
extra: { info: 'Error replacing block for upload loader' },
});
}
}, 250);
return () => {