Merge pull request 'feature/Account-view-refactor' (!125) from wbuezas/hedera-web-mindshore:feature/Account-view-refactor into beta
gitea/hedera-web/pipeline/head There was a failure building this commit
Details
gitea/hedera-web/pipeline/head There was a failure building this commit
Details
Reviewed-on: #125 Reviewed-by: Javier Segarra <jsegarra@verdnatura.es>
This commit is contained in:
commit
0b6890987a
|
@ -3,8 +3,9 @@ import { ref, inject, onMounted, computed } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import VnInput from 'src/components/common/VnInput.vue';
|
import VnInput from 'src/components/common/VnInput.vue';
|
||||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||||
import VnForm from 'src/components/common/VnForm.vue';
|
|
||||||
import ChangePasswordForm from 'src/components/ui/ChangePasswordForm.vue';
|
import ChangePasswordForm from 'src/components/ui/ChangePasswordForm.vue';
|
||||||
|
import FormModel from 'src/components/common/FormModel.vue';
|
||||||
|
import useNotify from 'src/composables/useNotify.js';
|
||||||
|
|
||||||
import { useUserStore } from 'stores/user';
|
import { useUserStore } from 'stores/user';
|
||||||
import { useAppStore } from 'stores/app';
|
import { useAppStore } from 'stores/app';
|
||||||
|
@ -12,54 +13,76 @@ import { storeToRefs } from 'pinia';
|
||||||
|
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const jApi = inject('jApi');
|
const api = inject('api');
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
const { isHeaderMounted } = storeToRefs(appStore);
|
const { isHeaderMounted } = storeToRefs(appStore);
|
||||||
const { user } = storeToRefs(userStore);
|
const { user } = storeToRefs(userStore);
|
||||||
|
const { notify } = useNotify();
|
||||||
|
|
||||||
const vnFormRef = ref(null);
|
const vnFormRef = ref(null);
|
||||||
const vnFormRef2 = ref(null);
|
|
||||||
const changePasswordFormDialog = ref(null);
|
const changePasswordFormDialog = ref(null);
|
||||||
const showChangePasswordForm = ref(false);
|
const showChangePasswordForm = ref(false);
|
||||||
const langOptions = ref([]);
|
const langOptions = ref([]);
|
||||||
const pks = computed(() => ({ id: userStore?.user?.id }));
|
const formInitialData = ref({});
|
||||||
const fetchConfigDataSql = {
|
const showForm = ref(false);
|
||||||
query: `
|
|
||||||
SELECT u.id, u.name, u.email, u.nickname,
|
|
||||||
u.lang, c.isToBeMailed, c.id clientFk
|
|
||||||
FROM account.myUser u
|
|
||||||
LEFT JOIN myClient c
|
|
||||||
ON u.id = c.id`,
|
|
||||||
params: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
const fetchLanguagesSql = async () => {
|
const fetchLanguages = async () => {
|
||||||
try {
|
try {
|
||||||
const data = await jApi.query(
|
const filter = { fields: ['code', 'name'], where: { isActive: true } };
|
||||||
'SELECT code, name FROM language WHERE isActive'
|
const { data } = await api.get('/languages', {
|
||||||
);
|
params: { filter: JSON.stringify(filter) }
|
||||||
|
});
|
||||||
langOptions.value = data;
|
langOptions.value = data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const fetchFormInitialData = async () => {
|
||||||
|
try {
|
||||||
|
const filter = {
|
||||||
|
where: { id: user?.value?.id },
|
||||||
|
fields: ['id', 'name', 'isToBeMailed'],
|
||||||
|
include: {
|
||||||
|
relation: 'user',
|
||||||
|
scope: {
|
||||||
|
fields: ['nickname', 'lang', 'email']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const { data } = await api.get('/Clients', {
|
||||||
|
params: { filter: JSON.stringify(filter) }
|
||||||
|
});
|
||||||
|
|
||||||
|
const { user: userData, ...restOfData } = data[0];
|
||||||
|
|
||||||
|
formInitialData.value = {
|
||||||
|
...restOfData,
|
||||||
|
nickname: userData?.nickname,
|
||||||
|
lang: userData?.lang,
|
||||||
|
email: userData?.email
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
} finally {
|
||||||
|
showForm.value = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const updateUserNickname = async nickname => {
|
const updateUserNickname = async nickname => {
|
||||||
try {
|
try {
|
||||||
await vnFormRef.value.submit();
|
await submitAccountData(nickname);
|
||||||
|
await submitNickname(nickname);
|
||||||
user.value.nickname = nickname;
|
user.value.nickname = nickname;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatMailData = data => {
|
|
||||||
data.isToBeMailed = Boolean(data.isToBeMailed);
|
|
||||||
};
|
|
||||||
|
|
||||||
const updateConfigLang = async lang => {
|
const updateConfigLang = async lang => {
|
||||||
try {
|
try {
|
||||||
await vnFormRef.value.submit();
|
if (!lang) return;
|
||||||
|
await submitAccountData({ lang });
|
||||||
userStore.updateUserLang(lang);
|
userStore.updateUserLang(lang);
|
||||||
const siteLocaleLang = appStore.localeOptions.find(
|
const siteLocaleLang = appStore.localeOptions.find(
|
||||||
locale => locale.value === lang
|
locale => locale.value === lang
|
||||||
|
@ -70,7 +93,32 @@ const updateConfigLang = async lang => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => fetchLanguagesSql());
|
const submitAccountData = async data => {
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
...data
|
||||||
|
};
|
||||||
|
await api.patch(`/VnUsers/${user?.value?.id}`, params);
|
||||||
|
notify(t('dataSaved'), 'positive');
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const submitIsToBeMailed = async isToBeMailed => {
|
||||||
|
try {
|
||||||
|
const payload = { isToBeMailed };
|
||||||
|
await api.patch(`/Clients/${user.value.id}`, payload);
|
||||||
|
notify(t('dataSaved'), 'positive');
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
fetchLanguages();
|
||||||
|
fetchFormInitialData();
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -92,14 +140,14 @@ onMounted(() => fetchLanguagesSql());
|
||||||
@click="showChangePasswordForm = true"
|
@click="showChangePasswordForm = true"
|
||||||
/>
|
/>
|
||||||
</Teleport>
|
</Teleport>
|
||||||
<VnForm
|
<FormModel
|
||||||
|
v-if="showForm"
|
||||||
ref="vnFormRef"
|
ref="vnFormRef"
|
||||||
|
:save-fn="submitFormFn"
|
||||||
|
:form-initial-data="formInitialData"
|
||||||
:title="t('personalInformation')"
|
:title="t('personalInformation')"
|
||||||
:fetch-form-data-sql="fetchConfigDataSql"
|
:show-bottom-actions="false"
|
||||||
:pks="pks"
|
:defaultActions="false"
|
||||||
table="myUser"
|
|
||||||
schema="account"
|
|
||||||
:default-actions="false"
|
|
||||||
>
|
>
|
||||||
<template #form="{ data }">
|
<template #form="{ data }">
|
||||||
<VnInput
|
<VnInput
|
||||||
|
@ -111,14 +159,16 @@ onMounted(() => fetchLanguagesSql());
|
||||||
<VnInput
|
<VnInput
|
||||||
v-model="data.email"
|
v-model="data.email"
|
||||||
:label="t('email')"
|
:label="t('email')"
|
||||||
@keyup.enter="vnFormRef.submit()"
|
@keyup.enter="submitAccountData({ email: data.email })"
|
||||||
@blur="vnFormRef.submit()"
|
@blur="submitAccountData({ email: data.email })"
|
||||||
/>
|
/>
|
||||||
<VnInput
|
<VnInput
|
||||||
v-model="data.nickname"
|
v-model="data.nickname"
|
||||||
:label="t('nickname')"
|
:label="t('nickname')"
|
||||||
@keyup.enter="updateUserNickname(data.nickname)"
|
@keyup.enter="
|
||||||
@blur="updateUserNickname(data.nickname)"
|
updateUserNickname({ nickname: data.nickname })
|
||||||
|
"
|
||||||
|
@blur="updateUserNickname({ nickname: data.nickname })"
|
||||||
data-cy="configViewNickname"
|
data-cy="configViewNickname"
|
||||||
/>
|
/>
|
||||||
<VnSelect
|
<VnSelect
|
||||||
|
@ -130,30 +180,17 @@ onMounted(() => fetchLanguagesSql());
|
||||||
@update:model-value="updateConfigLang(data.lang)"
|
@update:model-value="updateConfigLang(data.lang)"
|
||||||
data-cy="configViewLang"
|
data-cy="configViewLang"
|
||||||
/>
|
/>
|
||||||
|
<QCheckbox
|
||||||
|
v-model="data.isToBeMailed"
|
||||||
|
:label="t('isToBeMailed')"
|
||||||
|
:toggle-indeterminate="false"
|
||||||
|
@update:model-value="
|
||||||
|
submitIsToBeMailed(data.isToBeMailed)
|
||||||
|
"
|
||||||
|
dense
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template #extraForm>
|
</FormModel>
|
||||||
<VnForm
|
|
||||||
class="no-form-container q-mt-md"
|
|
||||||
ref="vnFormRef2"
|
|
||||||
:pks="pks"
|
|
||||||
table="myClient"
|
|
||||||
schema="hedera"
|
|
||||||
:fetch-form-data-sql="fetchConfigDataSql"
|
|
||||||
:default-actions="false"
|
|
||||||
@on-data-fetched="$event => formatMailData($event)"
|
|
||||||
>
|
|
||||||
<template #form="{ data }">
|
|
||||||
<QCheckbox
|
|
||||||
v-model="data.isToBeMailed"
|
|
||||||
:label="t('isToBeMailed')"
|
|
||||||
:toggle-indeterminate="false"
|
|
||||||
@update:model-value="vnFormRef2.submit()"
|
|
||||||
dense
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</VnForm>
|
|
||||||
</template>
|
|
||||||
</VnForm>
|
|
||||||
</QPage>
|
</QPage>
|
||||||
<QDialog
|
<QDialog
|
||||||
ref="changePasswordFormDialog"
|
ref="changePasswordFormDialog"
|
||||||
|
|
|
@ -38,8 +38,8 @@ export const useUserStore = defineStore('user', () => {
|
||||||
router.push({ name: 'login' });
|
router.push({ name: 'login' });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await fetchTokenConfig();
|
|
||||||
await fetchUser();
|
await fetchUser();
|
||||||
|
await fetchTokenConfig();
|
||||||
await supplantInit();
|
await supplantInit();
|
||||||
startInterval();
|
startInterval();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue