forked from verdnatura/hedera-web
Add guest logic
This commit is contained in:
parent
d8ec175328
commit
4358ef70c0
|
@ -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>
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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: {
|
||||||
|
|
|
@ -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') {
|
||||||
|
|
Loading…
Reference in New Issue