@@ -182,6 +182,7 @@ onMounted(() => {
:label="isNew ? t('globals.add') : t('globals.save')"
type="submit"
color="primary"
+ @click="onSubmit()"
/>
diff --git a/src/pages/Zone/Card/ZoneLocationsTree.vue b/src/pages/Zone/Card/ZoneLocationsTree.vue
index 23a37ef7c..650047e40 100644
--- a/src/pages/Zone/Card/ZoneLocationsTree.vue
+++ b/src/pages/Zone/Card/ZoneLocationsTree.vue
@@ -38,6 +38,7 @@ const datakey = 'ZoneLocations';
const url = computed(() => `Zones/${route.params.id}/getLeaves`);
const arrayData = useArrayData(datakey, {
url: url.value,
+ limit: null,
});
const store = arrayData.store;
@@ -74,6 +75,7 @@ const onNodeExpanded = async (nodeKeysArray) => {
if (response.data) {
node.childs = response.data.map((n) => {
if (n.sons > 0) n.childs = [{}];
+ n.selected = isSelected(n.selected);
return n;
});
}
@@ -90,21 +92,16 @@ const onNodeExpanded = async (nodeKeysArray) => {
previousExpandedNodes.value = nodeKeysSet;
};
-const formatNodeSelected = (node) => {
- if (node.selected === 1) node.selected = true;
- else if (node.selected === 0) node.selected = false;
-
- if (node.sons > 0 && !node.childs) node.childs = [{}];
-};
-
const fetchNodeLeaves = async (nodeKey) => {
if (!treeRef.value) return;
const node = treeRef.value?.getNodeByKey(nodeKey);
- if (node.selected === 1) node.selected = true;
- else if (node.selected === 0) node.selected = false;
+ if (typeof node.selected === 'number') node.selected = !!node.selected;
+ if (node.sons > 0 && !node.childs) {
+ node.childs = [{}];
+ const index = expanded.value.indexOf(node.id);
+ expanded.value.splice(index, 1);
+ }
if (!node || node.sons === 0) return;
-
- state.set('Tree', node);
};
function getNodeIds(node) {
@@ -119,6 +116,10 @@ function getNodeIds(node) {
return ids;
}
+function isSelected(selected) {
+ if (typeof selected === 'number') return !!selected;
+}
+
watch(
() => store.data,
async (val) => {
@@ -128,18 +129,9 @@ watch(
nodes.value[0].childs = [...val];
const fetchedNodeKeys = val.flatMap(getNodeIds);
state.set('Tree', [...fetchedNodeKeys]);
-
- if (!store.userParams?.search) {
- val.forEach((n) => {
- formatNodeSelected(n);
- });
- store.data = null;
- expanded.value = [null];
- } else {
- for (let n of state.get('Tree')) {
- await fetchNodeLeaves(n);
- }
- expanded.value = [null, ...fetchedNodeKeys];
+ expanded.value = [null, ...fetchedNodeKeys];
+ for (let n of state.get('Tree')) {
+ await fetchNodeLeaves(n);
}
previousExpandedNodes.value = new Set(expanded.value);
},
@@ -147,13 +139,11 @@ watch(
);
const reFetch = async () => {
- const { data } = await arrayData.fetch({ append: false });
- nodes.value = data;
- expanded.value = [null];
+ await arrayData.fetch({});
};
onMounted(async () => {
- if (store.userParams?.search) await arrayData.fetch({});
+ await reFetch();
});
onUnmounted(() => {
@@ -167,13 +157,13 @@ onUnmounted(() => {
v-if="showSearchBar"
v-model="store.userParams.search"
:placeholder="$t('globals.search')"
- @update:model-value="reFetch()"
+ @keydown.enter.stop.prevent="reFetch"
>
-
+
{
});
it('Create postCode', () => {
- const postCode = '1234475';
+ const postCode = Math.floor(100000 + Math.random() * 900000);
const province = 'Valencia';
cy.get(createLocationButton).click();
cy.get('.q-card > h1').should('have.text', 'New postcode');
@@ -115,20 +115,68 @@ describe('VnLocation', () => {
checkVnLocation(postCode, province);
});
- it('Create city', () => {
- const postCode = '9011';
- const province = 'Saskatchew';
+
+ it('Create city without country', () => {
+ const cityName = 'Saskatchew'.concat(Math.random(1 * 100));
cy.get(createLocationButton).click();
- cy.get(dialogInputs).eq(0).type(postCode);
cy.get(
`${createForm.prefix} > :nth-child(4) > .q-select > ${createForm.sufix} > :nth-child(2) > .q-icon`
).click();
cy.selectOption('#q-portal--dialog--3 .q-select', 'one');
- cy.get('#q-portal--dialog--3 .q-input').type(province);
+ cy.get('#q-portal--dialog--3 .q-input').type(cityName);
cy.get('#q-portal--dialog--3 .q-btn--standard').click();
- cy.get('#q-portal--dialog--1 .q-btn--standard').click();
- cy.waitForElement('.q-form');
- checkVnLocation(postCode, province);
+ });
+
+ it('Create province without country', () => {
+ const provinceName = 'Saskatchew'.concat(Math.random(1 * 100));
+ cy.get(createLocationButton).click();
+ cy.get(
+ `${createForm.prefix} > :nth-child(5) > .q-select > ${createForm.sufix} > :nth-child(2) `
+ )
+ .eq(0)
+ .click();
+ cy.selectOption('#q-portal--dialog--3 .q-select', 'one');
+ cy.countSelectOptions('#q-portal--dialog--3 .q-select', 4);
+ cy.get('#q-portal--dialog--3 .q-input').type(provinceName);
+
+ cy.get('#q-portal--dialog--3 .q-btn--standard').click();
+ });
+
+ it('Create city with country', () => {
+ const cityName = 'Saskatchew'.concat(Math.random(1 * 100));
+ cy.get(createLocationButton).click();
+ cy.selectOption(
+ `${createForm.prefix} > :nth-child(5) > :nth-child(3) `,
+ 'Italia'
+ );
+ cy.get(
+ `${createForm.prefix} > :nth-child(4) > .q-select > ${createForm.sufix} > :nth-child(2) > .q-icon`
+ ).click();
+ cy.selectOption('#q-portal--dialog--4 .q-select', 'Province four');
+ cy.countSelectOptions('#q-portal--dialog--4 .q-select', 1);
+
+ cy.get('#q-portal--dialog--4 .q-input').type(cityName);
+ cy.get('#q-portal--dialog--4 .q-btn--standard').click();
+ });
+
+ it('Create province with country', () => {
+ const provinceName = 'Saskatchew'.concat(Math.random(1 * 100));
+ cy.get(createLocationButton).click();
+ cy.selectOption(
+ `${createForm.prefix} > :nth-child(5) > :nth-child(3) `,
+ 'EspaƱa'
+ );
+ cy.get(
+ `${createForm.prefix} > :nth-child(5) > .q-select > ${createForm.sufix} > :nth-child(2) `
+ )
+ .eq(0)
+ .click();
+
+ cy.selectOption('#q-portal--dialog--4 .q-select', 'one');
+ cy.countSelectOptions('#q-portal--dialog--4 .q-select', 2);
+
+ cy.get('#q-portal--dialog--4 .q-input').type(provinceName);
+ cy.get('#q-portal--dialog--4 .q-btn--standard').click();
});
function checkVnLocation(postCode, province) {
diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js
index 728342304..53f9d1d73 100755
--- a/test/cypress/support/commands.js
+++ b/test/cypress/support/commands.js
@@ -91,6 +91,11 @@ Cypress.Commands.add('selectOption', (selector, option) => {
cy.get(selector).click();
cy.get('.q-menu .q-item').contains(option).click();
});
+Cypress.Commands.add('countSelectOptions', (selector, option) => {
+ cy.waitForElement(selector);
+ cy.get(selector).click();
+ cy.get('.q-menu .q-item').should('have.length', option);
+});
Cypress.Commands.add('fillInForm', (obj, form = '.q-form > .q-card') => {
cy.waitForElement('.q-form > .q-card');