@@ -153,7 +153,8 @@ const { t } = useI18n();
@@ -163,8 +164,7 @@ const { t } = useI18n();
@@ -175,7 +175,6 @@ const { t } = useI18n();
outline
:label="currency(item.price)"
color="accent"
- text-color="black"
class="col-3 justify-end text-body2"
>
diff --git a/src/pages/Ecomerce/CatalogView.vue b/src/pages/Ecomerce/CatalogView.vue
index 90ede5a3..114b48e0 100644
--- a/src/pages/Ecomerce/CatalogView.vue
+++ b/src/pages/Ecomerce/CatalogView.vue
@@ -1,7 +1,14 @@
-
+ {
+ items = [];
+ search = '';
+ }
+ "
+ />
-
+
@@ -55,6 +62,9 @@
no-caps
@click="redirectToCheckout()"
data-testid="orderModifyButton"
+ color="light-green-7"
+ unelevated
+ text-color="white"
>
{{ t('modify') }}
@@ -132,6 +142,12 @@
:disable="!category"
:label="t('category')"
/>
+
+ {{ t('orderBy') }}
+
@@ -167,7 +183,6 @@
v-else-if="!items || !items.length || !isSomeFilterSelected"
class="text-subtitle1 text-grey-7 q-pa-md"
>
-
{{ t('pleaseSetFilter') }}
-
+
@@ -744,7 +760,8 @@ const getSubcategories = async () => {
DROP TEMPORARY TABLE tmp.itemAvailable;`,
{ orderId: basketOrderId.value }
);
- itemSubcategories.value = res.results[1].data;
+ const filtered = res.results[1].data.filter(item => item.category);
+ itemSubcategories.value = filtered.map(i => i.category);
} catch (error) {
console.error('Error getting subcategories:', error);
}
@@ -753,11 +770,13 @@ const getSubcategories = async () => {
const showItem = async item => {
if (checkGuest()) return;
- const itemLots = await calcItem(item.id);
- const tags = await getItemTags(item.id);
+ showItemDialog.value = true;
+ const [itemLots, tags] = await Promise.all([
+ calcItem(item.id),
+ getItemTags(item.id)
+ ]);
item.lots = itemLots;
item.tags = tags;
- showItemDialog.value = true;
selectedItem.value = item;
};
@@ -848,6 +867,7 @@ const onAddLotClick = async lot => {
};
const resetAmounts = () => {
+ selectedItem.value = null;
addedItemsAmountAcc.value = {};
amount.value = 0;
};
@@ -1031,6 +1051,8 @@ en-US:
filterBy: Filter by
chooseCategory: Choose a category
youMustBeLoggedIn: You must be a registered user
+ sort: Order
+ amountNotAvailable: Amount not available
es-ES:
category: Categoría
deleteFilter: Quitar filtro
@@ -1054,6 +1076,8 @@ es-ES:
filterBy: Filtrar por
chooseCategory: Elige una categoría
youMustBeLoggedIn: Debes estar registrado como usuario
+ sort: Ordenar
+ amountNotAvailable: Cantidad no disponible
ca-ES:
category: Categoría
deleteFilter: Eliminar filtro
@@ -1075,6 +1099,8 @@ ca-ES:
filterBy: Filtrar per
chooseCategory: Tria una categoria
youMustBeLoggedIn: Has d'estar registrat com a usuari
+ sort: Ordenar
+ amountNotAvailable: Quantitat no disponible
fr-FR:
category: Catégorie
deleteFilter: Supprimer le filtre
@@ -1096,6 +1122,8 @@ fr-FR:
filterBy: Filtrer par
chooseCategory: Choisissez une catégorie
youMustBeLoggedIn: Vous devez être un utilisateur enregistré
+ sort: Trier
+ amountNotAvailable: Quantité non disponible
pt-PT:
category: Categoria
deleteFilter: Apagar filtro
@@ -1117,4 +1145,6 @@ pt-PT:
filterBy: Filtrar por
chooseCategory: Escolha uma categoria
youMustBeLoggedIn: Deves estar registrado como usuario
+ sort: Ordenar
+ amountNotAvailable: Quantidade não disponível
diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue
index 12da7061..9e8b4ee9 100644
--- a/src/pages/Ecomerce/CheckoutView.vue
+++ b/src/pages/Ecomerce/CheckoutView.vue
@@ -1,5 +1,5 @@
@@ -468,7 +496,7 @@ onMounted(async () => {
{{ t(`${step.nextButtonLabel || 'next'}`) }}
@@ -491,7 +520,7 @@ onMounted(async () => {
@import 'src/css/responsive';
.step-title {
- min-width: 100%;
+ max-width: 90%;
margin-bottom: 16px;
text-align: center;
font-weight: bold;
@@ -523,7 +552,7 @@ onMounted(async () => {
.left-navigation-button {
position: absolute;
left: 5px;
- top: 50%;
+ top: 25px;
@include mobile {
top: 35%;
}
@@ -532,7 +561,7 @@ onMounted(async () => {
.right-navigation-button {
position: absolute;
right: 5px;
- top: 50%;
+ top: 25px;
@include mobile {
top: 35%;
}
diff --git a/src/pages/Ecomerce/ConfirmView.vue b/src/pages/Ecomerce/ConfirmView.vue
index 750864eb..9d889188 100644
--- a/src/pages/Ecomerce/ConfirmView.vue
+++ b/src/pages/Ecomerce/ConfirmView.vue
@@ -288,9 +288,8 @@ onMounted(async () => {
>
-
{{ t('emptyList') }}
diff --git a/src/pages/Ecomerce/TicketDetails.vue b/src/pages/Ecomerce/TicketDetails.vue
index 062bbf80..130eff50 100644
--- a/src/pages/Ecomerce/TicketDetails.vue
+++ b/src/pages/Ecomerce/TicketDetails.vue
@@ -172,7 +172,6 @@ const deleteRow = id => {
class="row items-center justify-center q-pa-md"
style="margin-top: 32px"
>
-
{{ t('emptyList') }}
diff --git a/src/pages/Login/LoginView.vue b/src/pages/Login/LoginView.vue
index d16f9b8c..8606dbc0 100644
--- a/src/pages/Login/LoginView.vue
+++ b/src/pages/Login/LoginView.vue
@@ -136,8 +136,11 @@ const loginAsGuest = async () => {
outline
/>
-
-
+
+
{{ $t('haveForgottenPassword') }}
diff --git a/src/pages/Login/RecoverPassword.vue b/src/pages/Login/RecoverPassword.vue
new file mode 100644
index 00000000..985f3563
--- /dev/null
+++ b/src/pages/Login/RecoverPassword.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('weSendEmail') }}
+
+
+
+
+
+ {{ t('back') }}
+
+
+
+
+
+
+
+
+
+
+
+en-US:
+ inputEmail: Input email
+ rememberPassword: Rememeber password
+ weSendEmail: We will sent you an email to recover your password
+ weHaveSentEmailToRecover: We've sent you an email where you can recover your password
+es-ES:
+ inputEmail: Introduce el correo electrónico
+ rememberPassword: Recordar contraseña
+ weSendEmail: Te enviaremos un correo para restablecer tu contraseña
+ weHaveSentEmailToRecover: Te hemos enviado un correo donde podrás recuperar tu contraseña
+ca-ES:
+ inputEmail: Introdueix el correu electrònic
+ rememberPassword: Recordar contrasenya
+ weSendEmail: T'enviarem un correu per restablir la teva contrasenya
+ weHaveSentEmailToRecover: T'hem enviat un correu on podràs recuperar la teva contrasenya
+fr-FR:
+ inputEmail: Entrez l'email
+ rememberPassword: Se souvenir du mot de passe
+ weSendEmail: Nous vous enverrons un e-mail pour récupérer votre mot de passe
+ weHaveSentEmailToRecover: Nous vous avons envoyé un e-mail où vous pouvez récupérer votre mot de passe
+pr-BR:
+ inputEmail: Digite o e-mail
+ rememberPassword: Lembrar senha
+ weSendEmail: Enviaremos um e-mail para recuperar sua senha
+ weHaveSentEmailToRecover: Enviamos um e-mail onde você pode recuperar sua senha
+
diff --git a/src/pages/Login/RememberPassword.vue b/src/pages/Login/RememberPassword.vue
deleted file mode 100644
index 3a6d781e..00000000
--- a/src/pages/Login/RememberPassword.vue
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ $t('dontWorry') }}
-
-
- {{ $t('fillData') }}
-
-
-
-
- {{ $t('weSendEmail') }}
-
-
-
-
-
- {{ $t('return') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-en-US:
- user: User
- inputEmail: Input email
- rememberPassword: Rememeber password
- dontWorry: Don't worry!
- fillData: Fill the data
- weSendEmail: We will sent you an email to recover your password
- weHaveSentEmailToRecover: We've sent you an email where you can recover your password
- send: Send
- return: Return
-es-ES:
- user: Usuario
- inputEmail: Introduce el correo electrónico
- rememberPassword: Recordar contraseña
- dontWorry: ¡No te preocupes!
- fillData: Rellena los datos
- weSendEmail: Te enviaremos un correo para restablecer tu contraseña
- weHaveSentEmailToRecover: Te hemos enviado un correo donde podrás recuperar tu contraseña
- send: Enviar
- return: Volver
-
diff --git a/src/router/index.js b/src/router/index.js
index 4568f378..ab2967a8 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -39,10 +39,11 @@ export default route(function (/* { store, ssrContext } */) {
Router.beforeEach((to, from, next) => {
const userStore = useUserStore();
+ const allowedRoutes = ['login', 'recoverPassword'];
if (
!userStore.storage.getItem('token') &&
- to.name !== 'login' &&
+ !allowedRoutes.includes(to.name) &&
!userStore.isGuest
) {
return next({ name: 'login' });
diff --git a/src/router/routes.js b/src/router/routes.js
index 1a632381..59ceee1c 100644
--- a/src/router/routes.js
+++ b/src/router/routes.js
@@ -5,17 +5,17 @@ const routes = [
children: [
{
name: 'login',
- path: '/login/:email?',
+ path: '',
component: () => import('pages/Login/LoginView.vue')
},
{
- name: 'rememberPassword',
- path: '/remember-password',
- component: () => import('pages/Login/RememberPassword.vue')
+ name: 'recoverPassword',
+ path: 'recover',
+ component: () => import('pages/Login/RecoverPassword.vue')
},
{
name: 'resetPassword',
- path: '/reset-password',
+ path: 'reset',
component: () => import('pages/Login/ResetPassword.vue')
}
]
diff --git a/src/stores/app.js b/src/stores/app.js
index 573995bf..ad954627 100644
--- a/src/stores/app.js
+++ b/src/stores/app.js
@@ -20,12 +20,7 @@ export const useAppStore = defineStore('hedera', {
menuEssentialLinks: [],
hiddenMenuLinks: new Set(['Reports']),
basketOrderId: null,
- localeDates: {
- days: [],
- months: [],
- daysShort: [],
- monthsShort: []
- },
+
siteLang: null,
localeOptions: [
{ label: t('langs.en'), lang: 'en-US', value: 'en' },
@@ -66,20 +61,9 @@ export const useAppStore = defineStore('hedera', {
this.$patch({ imageUrl });
},
- getLocaleDates() {
- const { messages, locale } = i18n.global;
- this.localeDates = {
- days: messages.value[locale.value].date.days,
- months: messages.value[locale.value].date.months,
- daysShort: messages.value[locale.value].date.daysShort,
- monthsShort: messages.value[locale.value].date.monthsShort
- };
- },
-
async init() {
this.updateSiteLocale(localStorage.getItem('siteLang') || 'es-ES');
this.getBasketOrderId();
- this.getLocaleDates();
},
getBasketOrderId() {
@@ -187,6 +171,12 @@ export const useAppStore = defineStore('hedera', {
isDesktop() {
const $q = useQuasar();
return $q?.screen?.width > 1024;
+ },
+ localeDates() {
+ const { messages, locale } = i18n.global;
+ const { days, months, daysShort, monthsShort } =
+ messages.value[locale.value].date;
+ return { days, months, daysShort, monthsShort };
}
}
});
diff --git a/src/test/cypress/integration/login/RecoverPassword.spec.js b/src/test/cypress/integration/login/RecoverPassword.spec.js
new file mode 100644
index 00000000..e78a20ff
--- /dev/null
+++ b/src/test/cypress/integration/login/RecoverPassword.spec.js
@@ -0,0 +1,18 @@
+describe('Login Tests', () => {
+ beforeEach(() => {
+ cy.visit('/#/login');
+ });
+
+ it('should ssend recover email', () => {
+ cy.dataCy('recoverPasswordViewLink').should('exist');
+ cy.dataCy('recoverPasswordViewLink').click();
+ cy.dataCy('recoverPasswordUserInput').find('input').should('exist');
+ cy.dataCy('recoverPasswordUserInput').find('input').type('developer');
+ cy.dataCy('recoverPasswordSubmitButton').should('exist');
+ cy.dataCy('recoverPasswordSubmitButton').click();
+ cy.checkNotify(
+ 'positive',
+ 'Te hemos enviado un correo donde podrás recuperar tu contraseña'
+ );
+ });
+});