From 2fb179803c235d43cf39e0269f9ceb98c794c508 Mon Sep 17 00:00:00 2001 From: jorgep Date: Mon, 9 Dec 2024 13:42:00 +0100 Subject: [PATCH] refactor: add useCau composable --- src/boot/quasar.js | 71 ++----------------------------------- src/composables/useCau.js | 73 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 68 deletions(-) create mode 100644 src/composables/useCau.js diff --git a/src/boot/quasar.js b/src/boot/quasar.js index a1ae1eb3a..547517682 100644 --- a/src/boot/quasar.js +++ b/src/boot/quasar.js @@ -1,25 +1,18 @@ -import { ref } from 'vue'; import axios from 'axios'; import { boot } from 'quasar/wrappers'; import qFormMixin from './qformMixin'; import keyShortcut from './keyShortcut'; -import { i18n } from './i18n'; -import useNotify from 'src/composables/useNotify.js'; -import VnInput from 'src/components/common/VnInput.vue'; -import { useVnConfirm } from 'src/composables/useVnConfirm'; import { QForm } from 'quasar'; import { QLayout } from 'quasar'; import mainShortcutMixin from './mainShortcutMixin'; - -const { notify } = useNotify(); -const { openConfirmationModal } = useVnConfirm(); +import { useCau } from 'src/composables/useCau'; export default boot(({ app }) => { QForm.mixins = [qFormMixin]; QLayout.mixins = [mainShortcutMixin]; app.directive('shortcut', keyShortcut); - app.config.errorHandler = (error) => { + app.config.errorHandler = async (error) => { let message; const response = error.response; const responseData = response?.data; @@ -56,64 +49,6 @@ export default boot(({ app }) => { message = 'Duplicate request'; } - const { config, headers, request, status, statusText, data } = response || {}; - const { params, url, method, signal, headers: confHeaders } = config || {}; - const { message: resMessage, code, name } = data?.error || {}; - const additionalData = { - path: location.href, - message: resMessage, - code, - request: request?.responseURL, - status, - name, - statusText: statusText, - config: { - url, - method, - params, - headers: confHeaders, - aborted: signal?.aborted, - version: headers?.['salix-version'], - }, - }; - const opts = { - actions: [ - { - icon: 'support_agent', - color: 'primary', - dense: true, - flat: false, - round: true, - handler: async () => { - const locale = i18n.global.t; - const reason = ref( - code == 'ACCESS_DENIED' ? locale('cau.askPrivileges') : '' - ); - openConfirmationModal( - locale('cau.title'), - locale('cau.subtitle'), - async () => { - await axios.post('OsTickets/send-to-support', { - reason: reason.value, - additionalData, - }); - }, - null, - { - component: VnInput, - props: { - modelValue: reason, - 'onUpdate:modelValue': (val) => (reason.value = val), - label: locale('cau.inputLabel'), - class: 'full-width', - required: true, - }, - } - ); - }, - }, - ], - }; - notify(message ?? 'globals.error', 'negative', 'error', opts); + await useCau(response, message); }; }); diff --git a/src/composables/useCau.js b/src/composables/useCau.js new file mode 100644 index 000000000..29319bd9a --- /dev/null +++ b/src/composables/useCau.js @@ -0,0 +1,73 @@ +import VnInput from 'src/components/common/VnInput.vue'; +import { useVnConfirm } from 'src/composables/useVnConfirm'; +import axios from 'axios'; +import { ref } from 'vue'; +import { i18n } from 'src/boot/i18n'; +import useNotify from 'src/composables/useNotify.js'; + +export async function useCau(res, message) { + const { notify } = useNotify(); + const { openConfirmationModal } = useVnConfirm(); + const { config, headers, request, status, statusText, data } = res || {}; + const { params, url, method, signal, headers: confHeaders } = config || {}; + const { message: resMessage, code, name } = data?.error || {}; + + const additionalData = { + path: location.hash, + message: resMessage, + code, + request: request?.responseURL, + status, + name, + statusText: statusText, + config: { + url, + method, + params, + headers: confHeaders, + aborted: signal?.aborted, + version: headers?.['salix-version'], + }, + }; + const opts = { + actions: [ + { + icon: 'support_agent', + color: 'primary', + dense: true, + flat: false, + round: true, + handler: async () => { + const locale = i18n.global.t; + const reason = ref( + code == 'ACCESS_DENIED' ? locale('cau.askPrivileges') : '' + ); + openConfirmationModal( + locale('cau.title'), + locale('cau.subtitle'), + async () => { + await axios.post('OsTickets/send-to-support', { + reason: reason.value, + additionalData, + }); + }, + null, + { + component: VnInput, + props: { + modelValue: reason, + 'onUpdate:modelValue': (val) => (reason.value = val), + label: locale('cau.inputLabel'), + class: 'full-width', + required: true, + autofocus: true, + }, + } + ); + }, + }, + ], + }; + + notify(message ?? 'globals.error', 'negative', 'error', opts); +}