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/components/user_card/user_card.js b/src/components/user_card/user_card.js index 31a513130..f3e2b8f85 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -15,6 +15,7 @@ import ProgressButton from 'src/components/progress_button/progress_button.vue' import Select from 'src/components/select/select.vue' import UserAvatar from 'src/components/user_avatar/user_avatar.vue' import UserLink from 'src/components/user_link/user_link.vue' +import FollowButton from 'src/components/follow_button/follow_button.vue' import { useEmojiStore } from 'src/stores/emoji.js' import { useInstanceStore } from 'src/stores/instance.js' @@ -138,9 +139,7 @@ export default { () => import('src/components/account_actions/account_actions.vue'), ), ProgressButton, - FollowButton: defineAsyncComponent( - () => import('src/components/follow_button/follow_button.vue'), - ), + FollowButton, Select, UserLink, UserNote: defineAsyncComponent( 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 = {},