#8002 addSupportService #894

Merged
jorgep merged 17 commits from xxxx-addSupportService into dev 2024-12-11 09:49:41 +00:00
7 changed files with 90 additions and 19 deletions
Showing only changes of commit 8817fd7c55 - Show all commits

View File

@ -1,10 +1,17 @@
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 { CanceledError } from 'axios';
import { useStateQueryStore } from 'src/stores/useStateQueryStore';
import VnInput from 'src/components/common/VnInput.vue';
import { useVnConfirm } from 'src/composables/useVnConfirm';
const { notify } = useNotify();
const stateQuery = useStateQueryStore();
const { openConfirmationModal } = useVnConfirm();
export default boot(({ app }) => {
app.mixin(qFormMixin);
@ -40,12 +47,57 @@ export default boot(({ app }) => {
}
console.error(error);
if (error instanceof CanceledError) {
if (error instanceof axios.CanceledError) {
const env = process.env.NODE_ENV;
if (env && env !== 'development') return;
message = 'Duplicate request';
}
// Convey to Alex or Juan...
const additionalData = {
frontPath: stateQuery.route.name,

buscar alternativa para no usar stateQuery

buscar alternativa para no usar stateQuery

Pongo location.href que sirve . Si se quiere implementar una solución más elegante como investigar la posibilidad de usar vue-router como un plugin en pinia o hacer un provide de useRoute() a nivel de la app e inyectarlo donde se necesite, pero, necesito más tiempo para probarlo. Para este caso con location.href es suficiente y efectivo

Pongo location.href que sirve . Si se quiere implementar una solución más elegante como investigar la posibilidad de usar vue-router como un plugin en pinia o hacer un provide de useRoute() a nivel de la app e inyectarlo donde se necesite, pero, necesito más tiempo para probarlo. Para este caso con location.href es suficiente y efectivo
backError: {
config: error.config,
data: error,
},
httpRequest: error.request.response,
};
notify(message ?? 'globals.error', 'negative', 'error');
const opts = {
actions: [
{
icon: 'support_agent',
color: 'primary',
dense: true,
flat: false,
round: true,
noDismiss: true,
handler: async () => {
const reason = ref();
jorgep marked this conversation as resolved Outdated

privileges

privileges
openConfirmationModal(
i18n.global.t('globals.sendCau'),
false,
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: i18n.global.t('globals.ExplainReason'),
class: 'full-width',
required: true,
},
}
);
},
},
],
};
notify(message ?? 'globals.error', 'negative', 'error', opts);
};
});

View File

@ -1,6 +1,7 @@
<script setup>
import { onMounted, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import { useState } from 'src/composables/useState';
import { useStateStore } from 'stores/useStateStore';
import { useStateQueryStore } from 'src/stores/useStateQueryStore';
@ -17,8 +18,10 @@ const stateQuery = useStateQueryStore();
const state = useState();
const user = state.getUser();
const appName = 'Lilium';
onMounted(() => stateStore.setMounted());
onMounted(() => {
stateStore.setMounted();
stateQuery.add(useRoute());

useRoute no es accesible desde un composable, si este no se usa dentro de un componente. Por eso lo guardo en stateQuery.

useRoute no es accesible desde un composable, si este no se usa dentro de un componente. Por eso lo guardo en stateQuery.
});
const pinnedModulesRef = ref();
</script>

View File

@ -2,7 +2,7 @@ import { Notify } from 'quasar';
import { i18n } from 'src/boot/i18n';
export default function useNotify() {
const notify = (message, type, icon) => {
const notify = (message, type, icon, opts = {}) => {
const defaultIcons = {
warning: 'warning',
negative: 'error',
@ -13,6 +13,7 @@ export default function useNotify() {
message: i18n.global.t(message),
type: type,
icon: icon ? icon : defaultIcons[type],
...opts,
});
};

View File

@ -1,22 +1,29 @@
import { h } from 'vue';
import { Dialog } from 'quasar';
import VnConfirm from 'components/ui/VnConfirm.vue';
import { useQuasar } from 'quasar';
export function useVnConfirm() {
const quasar = useQuasar();
const openConfirmationModal = (title, message, promise, successFn) => {
quasar
.dialog({
component: VnConfirm,
componentProps: {
const openConfirmationModal = (
title,
message,
promise,
successFn,
customHTML = {}
) => {
const { component, props } = customHTML;
Dialog.create({
component: h(
VnConfirm,
{
title: title,
message: message,
promise: promise,
},
})
.onOk(async () => {
if (successFn) successFn();
});
{ customHTML: () => h(component, props) }
Review

Con la fn h se pueden pasar slots como parámetros.

Con la fn **h** se pueden pasar slots como parámetros.
),
}).onOk(async () => {
if (successFn) successFn();
});
};
return { openConfirmationModal };

View File

@ -314,6 +314,8 @@ globals:
deleteConfirmTitle: Delete selected elements
changeState: Change state
raid: 'Raid {daysInForward} days'
sendCau: Send cau
ExplainReason: Explain why this error should not appear
errors:
statusUnauthorized: Access denied
statusInternalServerError: An internal server error has ocurred

View File

@ -318,6 +318,9 @@ globals:
deleteConfirmTitle: Eliminar los elementos seleccionados
changeState: Cambiar estado
raid: 'Redada {daysInForward} días'
sendCau: Enviar cau
ExplainReason: Explique el motivo por el que no deberia aparecer este fallo
By sending this ticket, all the data related to the error, the section, the user, etc., are already sent.: Al enviar este cau ya se envían todos los datos relacionados con el error, la sección, el usuario, etc
jorgep marked this conversation as resolved Outdated

la clave tiene que ser mas corta

la clave tiene que ser mas corta
errors:
statusUnauthorized: Acceso denegado
statusInternalServerError: Ha ocurrido un error interno del servidor

View File

@ -3,7 +3,9 @@ import { defineStore } from 'pinia';
export const useStateQueryStore = defineStore('stateQueryStore', () => {
const queries = ref(new Set());
const route = computed(() =>
Array.from(queries.value).find((query) => query?.fullPath)
);
function add(query) {
queries.value.add(query);
return query;
@ -27,5 +29,6 @@ export const useStateQueryStore = defineStore('stateQueryStore', () => {
remove,
queries,
reset,
route,
};
});