diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 0b4825ca0..bc86cb1e4 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -467,6 +467,11 @@ const afterStoreSetup = async ({ pinia, store, storageError, i18n }) => { // "Plugins are only applied to stores created after the plugins themselves, and after pinia is passed to the app, otherwise they won't be applied." app.use(pinia) + app.config.errorHandler = (error, instance, info) => { + console.error('GLOBAL ERROR HANDLER', error, instance, info) + useInterfaceStore().setGlobalError({ error, instance, info }) + } + const waitForAllStoresToLoad = async () => { // the stores that do not persist technically do not need to be awaited here, // but that involves either hard-coding the stores in some place (prone to errors) diff --git a/src/stores/interface.js b/src/stores/interface.js index 21c1e9f8a..4d5d2a8e4 100644 --- a/src/stores/interface.js +++ b/src/stores/interface.js @@ -58,6 +58,7 @@ export const useInterfaceStore = defineStore('interface', { }, layoutType: 'normal', globalNotices: [], + globalError: null, layoutHeight: 0, lastTimeline: null, foreignProfileBackground: null, @@ -176,6 +177,9 @@ export const useInterfaceStore = defineStore('interface', { removeGlobalNotice(notice) { this.globalNotices = this.globalNotices.filter((n) => n !== notice) }, + setGlobalError(data) { + this.globalError = data + }, pushGlobalNotice({ messageKey, messageArgs = {},