0
1
Fork 0

Add guest logic

This commit is contained in:
William Buezas 2024-09-25 14:15:41 -03:00
parent d8ec175328
commit 4358ef70c0
4 changed files with 65 additions and 23 deletions

View File

@ -16,7 +16,7 @@
<QBtn <QBtn
icon="shopping_cart_checkout" icon="shopping_cart_checkout"
:label="t('shoppingCart')" :label="t('shoppingCart')"
:to="{ name: 'basket' }" @click="redirectToBasket()"
rounded rounded
no-caps no-caps
> >
@ -40,15 +40,7 @@
}) })
}} }}
</span> </span>
<QBtn <QBtn rounded no-caps @click="redirectToCheckout()">
rounded
no-caps
:to="{
name: 'checkout',
params: { id: appStore.basketOrderId },
query: { continue: 'catalog' }
}"
>
{{ t('modify') }} {{ t('modify') }}
</QBtn> </QBtn>
</div> </div>
@ -286,6 +278,7 @@ import CatalogCard from 'src/pages/Ecomerce/CatalogCard.vue';
import VnSearchBar from 'src/components/ui/VnSearchBar.vue'; import VnSearchBar from 'src/components/ui/VnSearchBar.vue';
import { useAppStore } from 'stores/app'; import { useAppStore } from 'stores/app';
import { useUserStore } from 'stores/user';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { formatDateTitle, currency } from 'src/lib/filters.js'; import { formatDateTitle, currency } from 'src/lib/filters.js';
import useNotify from 'src/composables/useNotify.js'; import useNotify from 'src/composables/useNotify.js';
@ -294,10 +287,12 @@ import debounce from 'src/utils/debouncer.js';
const jApi = inject('jApi'); const jApi = inject('jApi');
const { t } = useI18n(); const { t } = useI18n();
const appStore = useAppStore(); const appStore = useAppStore();
const userStore = useUserStore();
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const { isHeaderMounted, rightDrawerOpen, basketOrderId } = const { isHeaderMounted, rightDrawerOpen, basketOrderId } =
storeToRefs(appStore); storeToRefs(appStore);
const { isGuest } = storeToRefs(userStore);
const { notify } = useNotify(); const { notify } = useNotify();
const order = ref(null); const order = ref(null);
@ -305,7 +300,6 @@ const items = ref([]);
const selectedItem = ref(null); const selectedItem = ref(null);
const showItemDialog = ref(false); const showItemDialog = ref(false);
const loading = ref(false); const loading = ref(false);
const isGuest = ref(false); // TODO: Integrate isGuest logic
const viewMode = ref('grid'); const viewMode = ref('grid');
// Filters options // Filters options
@ -513,6 +507,15 @@ const viewTypeButtonContent = computed(() => {
}; };
}); });
const checkGuest = () => {
if (isGuest.value) {
notify(t('youMustBeLoggedIn'), 'negative');
return true;
}
return false;
};
const getFilters = async () => { const getFilters = async () => {
const promises = [ const promises = [
getItemFamilies(), getItemFamilies(),
@ -722,7 +725,7 @@ const getSubcategories = async () => {
}; };
const showItem = async item => { const showItem = async item => {
if (isGuest.value) return; if (checkGuest()) return;
const itemLots = await calcItem(item.id); const itemLots = await calcItem(item.id);
const tags = await getItemTags(item.id); const tags = await getItemTags(item.id);
@ -897,6 +900,21 @@ const onViewModeClick = () => {
viewMode.value = viewMode.value === 'list' ? 'grid' : 'list'; viewMode.value = viewMode.value === 'list' ? 'grid' : 'list';
}; };
const redirectToCheckout = () => {
if (checkGuest()) return;
router.push({
name: 'checkout',
params: { id: basketOrderId.value },
query: { continue: 'catalog' }
});
};
const redirectToBasket = () => {
if (checkGuest()) return;
router.push({ name: 'basket' });
};
watch( watch(
() => route.query.search, () => route.query.search,
val => { val => {
@ -911,12 +929,11 @@ onBeforeMount(async () => {
if (!isGuest.value) { if (!isGuest.value) {
await appStore.check('catalog'); await appStore.check('catalog');
} else { } else {
// TODO: Implement this logic when isGuest is implemented const resultSet = await jApi.execQuery(
// const resultSet = await jApi.execQuery( 'CALL myOrder_configureForGuest(@orderId); SELECT @orderId;'
// 'CALL myOrder_configureForGuest(@orderId); SELECT @orderId;' );
// ); resultSet.fetchResult();
// resultSet.fetchResult(); appStore.basketOrderId = resultSet.fetchValue();
// this.orderId = resultSet.fetchValue();
} }
await getOrder(); await getOrder();
await getCategories(); await getCategories();
@ -979,6 +996,7 @@ en-US:
gridView: Grid view gridView: Grid view
filterBy: Filter by filterBy: Filter by
chooseCategory: Choose a category chooseCategory: Choose a category
youMustBeLoggedIn: You must be a registered user
es-ES: es-ES:
category: Categoría category: Categoría
deleteFilter: Quitar filtro deleteFilter: Quitar filtro
@ -1001,6 +1019,7 @@ es-ES:
gridView: Vista de rejilla gridView: Vista de rejilla
filterBy: Filtrar por filterBy: Filtrar por
chooseCategory: Elige una categoría chooseCategory: Elige una categoría
youMustBeLoggedIn: Debes estar registrado como usuario
ca-ES: ca-ES:
category: Categoría category: Categoría
deleteFilter: Eliminar filtro deleteFilter: Eliminar filtro
@ -1021,6 +1040,7 @@ ca-ES:
gridView: Vista de graella gridView: Vista de graella
filterBy: Filtrar per filterBy: Filtrar per
chooseCategory: Tria una categoria chooseCategory: Tria una categoria
youMustBeLoggedIn: Has d'estar registrat com a usuari
fr-FR: fr-FR:
category: Catégorie category: Catégorie
deleteFilter: Supprimer le filtre deleteFilter: Supprimer le filtre
@ -1041,6 +1061,7 @@ fr-FR:
gridView: Vue en grille gridView: Vue en grille
filterBy: Filtrer par filterBy: Filtrer par
chooseCategory: Choisissez une catégorie chooseCategory: Choisissez une catégorie
youMustBeLoggedIn: Vous devez être un utilisateur enregistré
pt-PT: pt-PT:
category: Categoria category: Categoria
deleteFilter: Apagar filtro deleteFilter: Apagar filtro
@ -1061,4 +1082,5 @@ pt-PT:
gridView: Vista de grade gridView: Vista de grade
filterBy: Filtrar por filterBy: Filtrar por
chooseCategory: Escolha uma categoria chooseCategory: Escolha uma categoria
youMustBeLoggedIn: Deves estar registrado como usuario
</i18n> </i18n>

View File

@ -41,12 +41,23 @@ onMounted(() => {
password.value.focus(); password.value.focus();
} }
}); });
async function onLogin() {
await userStore.login(email.value, password.value, remember.value); const onLogin = async () => {
await userStore.fetchUser(); await userStore.fetchUser();
await userStore.updateUserLang(selectedLocaleValue.value); await userStore.updateUserLang(selectedLocaleValue.value);
await router.push('/'); await router.push('/');
} };
const login = async () => {
await userStore.login(email.value, password.value, remember.value);
await onLogin();
};
const loginAsGuest = async () => {
userStore.isGuest = true;
localStorage.setItem('hederaGuest', true);
await onLogin();
};
</script> </script>
<template> <template>
@ -56,7 +67,7 @@ async function onLogin() {
<img src="statics/logo.svg" alt="Verdnatura" class="block" /> <img src="statics/logo.svg" alt="Verdnatura" class="block" />
</router-link> </router-link>
</div> </div>
<QForm @submit="onLogin" class="q-gutter-y-md"> <QForm @submit="login()" class="q-gutter-y-md">
<div class="q-gutter-y-sm"> <div class="q-gutter-y-sm">
<QInput v-model="email" :label="$t('user')" autofocus /> <QInput v-model="email" :label="$t('user')" autofocus />
<QInput <QInput
@ -106,7 +117,7 @@ async function onLogin() {
</div> </div>
<div class="justify-center"> <div class="justify-center">
<QBtn <QBtn
to="/" @click="loginAsGuest()"
:label="$t('logInAsGuest')" :label="$t('logInAsGuest')"
class="full-width" class="full-width"
color="primary" color="primary"

View File

@ -139,6 +139,11 @@ export const useAppStore = defineStore('hedera', {
unloadOrder() { unloadOrder() {
localStorage.removeItem(storageOrderName); localStorage.removeItem(storageOrderName);
this.basketOrderId = null; this.basketOrderId = null;
},
onLogout() {
this.unloadOrder();
this.menuEssentialLinks = [];
} }
}, },
getters: { getters: {

View File

@ -2,6 +2,7 @@ import { defineStore } from 'pinia';
import { api, jApi } from 'boot/axios'; import { api, jApi } from 'boot/axios';
import { i18n } from 'src/boot/i18n'; import { i18n } from 'src/boot/i18n';
import useNotify from 'src/composables/useNotify.js'; import useNotify from 'src/composables/useNotify.js';
import { useAppStore } from 'src/stores/app.js';
const { t } = i18n.global; const { t } = i18n.global;
const { notify } = useNotify(); const { notify } = useNotify();
@ -35,6 +36,7 @@ export const useUserStore = defineStore('user', {
actions: { actions: {
async init() { async init() {
this.isGuest = localStorage.getItem('hederaGuest') || false;
await this.fetchUser(); await this.fetchUser();
await this.supplantInit(); await this.supplantInit();
this.updateSiteLocale(); this.updateSiteLocale();
@ -71,6 +73,8 @@ export const useUserStore = defineStore('user', {
sessionStorage.removeItem('vnToken'); sessionStorage.removeItem('vnToken');
} }
this.$reset(); this.$reset();
localStorage.removeItem('hederaGuest');
useAppStore().onLogout();
}, },
async fetchUser(userType = 'user') { async fetchUser(userType = 'user') {