diff --git a/src/components/VnTable/VnContextMenu.vue b/src/components/VnTable/VnContextMenu.vue
new file mode 100644
index 000000000..c20c213f5
--- /dev/null
+++ b/src/components/VnTable/VnContextMenu.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+es:
+ Filter by selection: Filtro por selección
+ Exclude selection: Excluir selección
+ Remove filter: Quitar filtro por selección
+ Remove all filters: Eliminar todos los filtros
+ Copy value: Copiar valor
+
diff --git a/src/components/VnTable/VnFilter.vue b/src/components/VnTable/VnFilter.vue
index bdba421da..13a345b48 100644
--- a/src/components/VnTable/VnFilter.vue
+++ b/src/components/VnTable/VnFilter.vue
@@ -136,6 +136,9 @@ async function addFilter(value, name) {
value = value === '' ? undefined : value;
let field = columnFilter.value?.name ?? $props.column.name ?? name;
+ delete arrayData.store?.userParams?.[field];
+ delete arrayData.store?.filter?.where?.[field];
+
if (columnFilter.value?.inWhere) {
if (columnFilter.value.alias) field = columnFilter.value.alias + '.' + field;
return await arrayData.addFilterWhere({ [field]: value });
diff --git a/src/components/VnTable/VnTable.vue b/src/components/VnTable/VnTable.vue
index 1c77d9962..eeb500c6d 100644
--- a/src/components/VnTable/VnTable.vue
+++ b/src/components/VnTable/VnTable.vue
@@ -33,6 +33,7 @@ import VnTableOrder from 'src/components/VnTable/VnOrder.vue';
import VnTableFilter from './VnTableFilter.vue';
import { getColAlign } from 'src/composables/getColAlign';
import RightMenu from '../common/RightMenu.vue';
+import VnContextMenu from './VnContextMenu.vue';
import VnScroll from '../common/VnScroll.vue';
import VnCheckboxMenu from '../common/VnCheckboxMenu.vue';
import VnCheckbox from '../common/VnCheckbox.vue';
@@ -182,8 +183,9 @@ const app = inject('app');
const tableHeight = useTableHeight();
const vnScrollRef = ref(null);
-const editingRow = ref(null);
-const editingField = ref(null);
+const editingRow = ref();
+const editingField = ref();
+const contextMenuRef = ref({});
const isTableMode = computed(() => mode.value == TABLE_MODE);
const selectRegex = /select/;
const emit = defineEmits(['onFetch', 'update:selected', 'saveChanges']);
@@ -220,6 +222,10 @@ onBeforeMount(() => {
onMounted(async () => {
if ($props.isEditable) document.addEventListener('click', clickHandler);
+ document.addEventListener('contextmenu', (event) => {
+ event.preventDefault();
+ contextMenuRef.value.handler(event);
+ });
mode.value =
quasar.platform.is.mobile && !$props.disableOption?.card
? CARD_MODE
@@ -243,6 +249,7 @@ onMounted(async () => {
onUnmounted(async () => {
if ($props.isEditable) document.removeEventListener('click', clickHandler);
+ document.removeEventListener('contextmenu', {});
});
watch(
@@ -852,6 +859,7 @@ const handleHeaderSelection = (evt, data) => {
]"
:data-row-index="rowIndex"
:data-col-field="col?.name"
+ :data-col-value="row?.[col?.name]"
>
{
+
{{ getLocale(`${tag.label}`) }}:
- {{ formatFn(tag.value) }}
+ {{ formatFn(tag) }}
diff --git a/src/components/common/VnSelect.vue b/src/components/common/VnSelect.vue
index 126857883..93ff04f75 100644
--- a/src/components/common/VnSelect.vue
+++ b/src/components/common/VnSelect.vue
@@ -124,6 +124,7 @@ const {
} = toRefs($props);
const myOptions = ref([]);
const myOptionsOriginal = ref([]);
+const myOptionsMap = ref(new Map());
const vnSelectRef = ref();
const lastVal = ref();
const noOneText = t('globals.noOne');
@@ -140,7 +141,7 @@ const styleAttrs = computed(() => {
}
: {};
});
-const isLoading = ref(false);
+const hasFocus = ref(false);
const useURL = computed(() => $props.url);
const value = computed({
get() {
@@ -166,6 +167,10 @@ const computedSortBy = computed(() => {
return $props.sortBy || $props.optionLabel + ' ASC';
});
+const valueIsObject = computed(
+ () => modelValue.value && typeof modelValue.value == 'object',
+);
+
const getVal = (val) => ($props.useLike ? { like: `%${val}%` } : val);
watch(options, (newValue) => {
@@ -173,12 +178,22 @@ watch(options, (newValue) => {
});
watch(modelValue, async (newValue) => {
+ if (newValue?.neq) newValue = newValue.neq;
if (!myOptions?.value?.some((option) => option[optionValue.value] == newValue))
await fetchFilter(newValue);
if ($props.noOne) myOptions.value.unshift(noOneOpt.value);
});
+watch(
+ () => myOptionsOriginal.value,
+ (newValue) => {
+ for (const item of newValue) {
+ myOptionsMap.value.set(item[optionValue.value], item);
+ }
+ },
+);
+
onMounted(() => {
setOptions(options.value);
if (useURL.value && $props.modelValue && !findKeyInOptions())
@@ -187,7 +202,7 @@ onMounted(() => {
});
const someIsLoading = computed(
- () => (isLoading.value || !!arrayData?.isLoading?.value) && !isMenuOpened.value,
+ () => !!arrayData?.isLoading?.value && !isMenuOpened.value,
);
function findKeyInOptions() {
if (!$props.options) return;
@@ -224,6 +239,9 @@ function filter(val, options) {
async function fetchFilter(val) {
if (!$props.url) return;
+ if (val && typeof val == 'object') {
+ val = val.neq;
+ }
const { fields, include, limit } = $props;
const sortBy = computedSortBy.value;
@@ -298,13 +316,11 @@ async function onScroll({ to, direction, from, index }) {
if (from === 0 && index === 0) return;
if (!useURL.value && !$props.fetchRef) return;
if (direction === 'decrease') return;
- if (to === lastIndex && arrayData.store.hasMoreData && !isLoading.value) {
- isLoading.value = true;
+ if (to === lastIndex && arrayData.store.hasMoreData) {
await arrayData.loadMore();
setOptions(arrayData.store.data);
vnSelectRef.value.scrollTo(lastIndex);
await nextTick();
- isLoading.value = false;
}
}
@@ -347,22 +363,30 @@ function getCaption(opt) {
if (optionCaption.value === false) return;
return opt[optionCaption.value] || opt[optionValue.value];
}
+
+function getOptionLabel(property) {
+ if (!myOptionsMap.value.size) return;
+ let value = modelValue.value;
+ if (property) {
+ value = modelValue.value[property];
+ }
+ return myOptionsMap.value.get(value)?.[optionLabel.value];
+}
{
+ isMenuOpened = true;
+ hasFocus = true;
+ await $nextTick();
+ vnSelectRef?.$el?.querySelector('input')?.focus();
+ }
+ "
@keydown="handleKeyDown"
:data-cy="$attrs.dataCy ?? $attrs.label + '_select'"
:data-url="url"
+ @blur="hasFocus = false"
+ @update:model-value="() => vnSelectRef.blur()"
+ :is-required="false"
>
+
+
+
+ {{ JSON.stringify(modelValue) }}
+
+
@@ -437,4 +482,12 @@ function getCaption(opt) {
.q-field--outlined {
max-width: 100%;
}
+.q-field__native {
+ @extend .nowrap;
+}
+
+.nowrap {
+ display: flex;
+ flex-wrap: nowrap !important;
+}
diff --git a/src/components/ui/VnFilterPanel.vue b/src/components/ui/VnFilterPanel.vue
index 6460499b0..0e479a418 100644
--- a/src/components/ui/VnFilterPanel.vue
+++ b/src/components/ui/VnFilterPanel.vue
@@ -186,6 +186,7 @@ async function remove(key) {
function formatValue(value) {
if (typeof value === 'boolean') return value ? t('Yes') : t('No');
if (isNaN(value) && !isNaN(Date.parse(value))) return toDate(value);
+ if (value && typeof value === 'object') return '';
return `"${value}"`;
}
diff --git a/src/pages/Item/components/EditFixedPriceForm.vue b/src/pages/Item/components/EditFixedPriceForm.vue
index 06e4aa647..fbfb0d96d 100644
--- a/src/pages/Item/components/EditFixedPriceForm.vue
+++ b/src/pages/Item/components/EditFixedPriceForm.vue
@@ -74,12 +74,13 @@ const closeForm = () => {
class="editOption"
:label="t('Field to edit')"
:options="fieldsOptions"
- hide-selected
option-label="label"
+ option-value="name"
v-model="selectedField"
data-cy="EditFixedPriceSelectOption"
@update:model-value="newValue = null"
:class="{ 'is-select': selectedField?.component === 'select' }"
+ :emit-value="false"
>
diff --git a/src/pages/Ticket/TicketList.vue b/src/pages/Ticket/TicketList.vue
index 66b8e0bfe..775af7f8c 100644
--- a/src/pages/Ticket/TicketList.vue
+++ b/src/pages/Ticket/TicketList.vue
@@ -463,6 +463,32 @@ function setReference(data) {
dialogData.value.value.description = newDescription;
}
+
+function exprBuilder(param, value) {
+ switch (param) {
+ case 'stateFk':
+ return { 'ts.stateFk': value };
+ case 'provinceFk':
+ return { 'a.provinceFk': value };
+ case 'hour':
+ return { 'z.hour': value };
+ case 'shipped':
+ return {
+ 't.shipped': {
+ between: this.dateRange(value),
+ },
+ };
+ case 'departmentFk':
+ return { 'c.departmentFk': value };
+ case 'id':
+ case 'refFk':
+ case 'zoneFk':
+ case 'nickname':
+ case 'agencyModeFk':
+ case 'warehouseFk':
+ return { [`t.${param}`]: value };
+ }
+}
@@ -657,42 +683,36 @@ function setReference(data) {
-
- fetchAvailableAgencies(data)"
- />
-
+ fetchAvailableAgencies(data)"
+ />
-
- fetchAvailableAgencies(data)"
- />
-
+ fetchAvailableAgencies(data)"
+ />
-
-
-
+
diff --git a/test/cypress/integration/customer/clientList.spec.js b/test/cypress/integration/customer/clientList.spec.js
index 2577462cb..9527aecd1 100644
--- a/test/cypress/integration/customer/clientList.spec.js
+++ b/test/cypress/integration/customer/clientList.spec.js
@@ -58,8 +58,8 @@ describe('Client list', { testIsolation: true }, () => {
cy.waitForElement('.q-form');
cy.checkValueForm(1, search);
cy.checkValueForm(2, search);
- cy.dataCy('Customer_select').should('have.value', search);
- cy.dataCy('Address_select').should('have.value', search);
+ cy.dataCy('Customer_select').contains(search);
+ cy.dataCy('Address_select').contains(search);
});
it('Client founded create order', () => {
@@ -74,7 +74,7 @@ describe('Client list', { testIsolation: true }, () => {
cy.waitForElement('#formModel');
cy.waitForElement('.q-form');
cy.checkValueForm(1, search);
- cy.dataCy('Client_select').should('have.value', search);
- cy.dataCy('Address_select').should('have.value', search);
+ cy.dataCy('Client_select').contains(search);
+ cy.dataCy('Address_select').contains(search);
});
});
diff --git a/test/cypress/integration/entry/entryCard/entryBuys.spec.js b/test/cypress/integration/entry/entryCard/entryBuys.spec.js
index b5e185a8e..df9ab062b 100644
--- a/test/cypress/integration/entry/entryCard/entryBuys.spec.js
+++ b/test/cypress/integration/entry/entryCard/entryBuys.spec.js
@@ -95,7 +95,7 @@ describe('EntryBuys', () => {
cy.get('input[data-cy="itemFk-create-popup"]').type('1');
cy.get('div[role="listbox"] > div > div[role="option"]').eq(0).click();
- cy.get('input[data-cy="Grouping mode_select"]').should('have.value', 'packing');
+ cy.dataCy('Grouping mode_select').contains('packing');
cy.get('button[data-cy="FormModelPopup_save"]').click();
}
});
diff --git a/test/cypress/integration/entry/entryCard/entryNotes.spec.js b/test/cypress/integration/entry/entryCard/entryNotes.spec.js
index 80c9fd38d..8dd530415 100644
--- a/test/cypress/integration/entry/entryCard/entryNotes.spec.js
+++ b/test/cypress/integration/entry/entryCard/entryNotes.spec.js
@@ -17,11 +17,9 @@ describe('EntryNotes', () => {
const editObservation = (rowIndex, type, description) => {
cy.get(`td[data-col-field="description"][data-row-index="${rowIndex}"]`)
.click()
- .clear()
.type(description);
cy.get(`td[data-col-field="observationTypeFk"][data-row-index="${rowIndex}"]`)
.click()
- .clear()
.type(type);
cy.get('div[role="listbox"] > div > div[role="option"]').eq(0).click();
cy.saveCard();
diff --git a/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js b/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js
index 0e7abe1af..136024760 100644
--- a/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js
@@ -44,9 +44,9 @@ describe('invoiceInCorrective', { testIsolation: true }, () => {
cy.url().should('include', `/invoice-in/${correctingFk}/summary`);
cy.visit(`/#/invoice-in/${correctingFk}/corrective`);
- cy.dataCy('invoiceInCorrective_class').should('be.disabled');
- cy.dataCy('invoiceInCorrective_type').should('be.disabled');
- cy.dataCy('invoiceInCorrective_reason').should('be.disabled');
+ checkIsDisabled('class');
+ checkIsDisabled('type');
+ checkIsDisabled('reason');
});
});
@@ -56,4 +56,10 @@ describe('invoiceInCorrective', { testIsolation: true }, () => {
cy.clickDescriptorAction(4);
cy.get('[data-cy="InvoiceInCorrective-menu-item"]').should('exist');
});
+
+ function checkIsDisabled(column) {
+ cy.dataCy(`invoiceInCorrective_${column}`)
+ .parents('.q-field')
+ .should('have.class', 'q-field--disabled');
+ }
});
diff --git a/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js b/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js
index 21de02d54..2a584e983 100644
--- a/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js
@@ -132,9 +132,9 @@ function createCorrective() {
const correctingId = response.body;
cy.url().should('include', `/invoice-in/${correctingId}/summary`);
cy.visit(`/#/invoice-in/${correctingId}/corrective`);
- cy.dataCy('invoiceInCorrective_class').should('contain.value', 'R2');
- cy.dataCy('invoiceInCorrective_type').should('contain.value', 'diferencias');
- cy.dataCy('invoiceInCorrective_reason').should('contain.value', 'sales details');
+ cy.dataCy('invoiceInCorrective_class').contains('R2');
+ cy.dataCy('invoiceInCorrective_type').contains('diferencias');
+ cy.dataCy('invoiceInCorrective_reason').contains('sales details');
});
}
diff --git a/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js b/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js
index 97235b729..19c29f9a7 100644
--- a/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInIntrastat.spec.js
@@ -3,7 +3,7 @@ describe('InvoiceInIntrastat', () => {
const firstInstrastat = 'td[data-col-field="intrastatFk"][data-row-index="0"]';
const firstAmount = 'td[data-col-field="amount"][data-row-index="0"]';
const intrastat = 'Plantas vivas: Esqueje/injerto, Vid';
-
+
beforeEach(() => {
cy.login('administrative');
cy.visit(`/#/invoice-in/1/intrastat`);
diff --git a/test/cypress/integration/invoiceIn/invoiceInList.spec.js b/test/cypress/integration/invoiceIn/invoiceInList.spec.js
index ef3e33000..14207ebd3 100644
--- a/test/cypress/integration/invoiceIn/invoiceInList.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInList.spec.js
@@ -52,7 +52,7 @@ describe('InvoiceInList', () => {
title: mockInvoiceRef,
listBox: { 0: '11/16/2001', 3: 'The farmer' },
});
- cy.dataCy('invoiceInBasicDataCompanyFk').should('have.value', 'ORN');
+ cy.dataCy('invoiceInBasicDataCompanyFk').contains('ORN');
});
});
});
diff --git a/test/cypress/integration/order/orderList.spec.js b/test/cypress/integration/order/orderList.spec.js
index 4f34c53e2..9688ed029 100644
--- a/test/cypress/integration/order/orderList.spec.js
+++ b/test/cypress/integration/order/orderList.spec.js
@@ -59,8 +59,8 @@ describe('OrderList', { testIsolation: true }, () => {
).click();
cy.dataCy('vnTableCreateBtn').click();
- cy.get(clientCreateSelect).should('have.value', 'Bruce Wayne');
- cy.get(addressCreateSelect).should('have.value', 'Bruce Wayne');
+ cy.get(clientCreateSelect).contains('Bruce Wayne');
+ cy.get(addressCreateSelect).contains('Bruce Wayne');
cy.dataCy('landedDate').find('input').type('06/01/2001');
cy.selectOption(agencyCreateSelect, 1);
diff --git a/test/cypress/integration/shelving/parking/parkingBasicData.spec.js b/test/cypress/integration/shelving/parking/parkingBasicData.spec.js
index e3f454058..b6bae6e9c 100644
--- a/test/cypress/integration/shelving/parking/parkingBasicData.spec.js
+++ b/test/cypress/integration/shelving/parking/parkingBasicData.spec.js
@@ -1,8 +1,7 @@
///
describe('ParkingBasicData', () => {
const codeInput = 'form .q-card .q-input input';
- const sectorSelect = 'form .q-card .q-select input';
- const sectorOpt = '.q-menu .q-item';
+ const sectorSelect = 'form .q-card .q-select';
beforeEach(() => {
cy.login('developer');
cy.visit(`/#/shelving/parking/1/basic-data`);
@@ -17,8 +16,7 @@ describe('ParkingBasicData', () => {
});
it('should edit the code and sector', () => {
- cy.get(sectorSelect).type('First');
- cy.get(sectorOpt).click();
+ cy.selectOption(sectorSelect, 'First');
cy.get(codeInput).eq(0).clear();
cy.get(codeInput).eq(0).type('700-01');
@@ -27,7 +25,7 @@ describe('ParkingBasicData', () => {
cy.saveCard();
cy.checkNotification('Data saved');
- cy.get(sectorSelect).should('have.value', 'First sector');
+ cy.get(sectorSelect).contains('First sector');
cy.get(codeInput).should('have.value', '700-01');
cy.dataCy('Picking order_input').should('have.value', 80230);
});
diff --git a/test/cypress/integration/ticket/ticketList.spec.js b/test/cypress/integration/ticket/ticketList.spec.js
index ae0e0ff10..09038ca47 100644
--- a/test/cypress/integration/ticket/ticketList.spec.js
+++ b/test/cypress/integration/ticket/ticketList.spec.js
@@ -44,11 +44,11 @@ describe('TicketList', () => {
cy.intercept('GET', /\/api\/Clients\?filter/).as('clientFilter');
cy.vnTableCreateBtn();
cy.wait('@clientFilter');
- cy.dataCy('Customer_select').should('have.value', 'Bruce Wayne');
+ cy.dataCy('Customer_select').contains('Bruce Wayne');
cy.dataCy('Address_select').click();
cy.getOption().click();
- cy.dataCy('Address_select').should('have.value', 'Bruce Wayne');
+ cy.dataCy('Address_select').contains('Bruce Wayne');
});
it('Client list create new ticket', () => {
cy.vnTableCreateBtn();
diff --git a/test/cypress/integration/vnComponent/UserPanel.spec.js b/test/cypress/integration/vnComponent/UserPanel.spec.js
index 8c3df038e..895baa020 100644
--- a/test/cypress/integration/vnComponent/UserPanel.spec.js
+++ b/test/cypress/integration/vnComponent/UserPanel.spec.js
@@ -5,48 +5,27 @@ describe('UserPanel', { testIsolation: true }, () => {
cy.login('developer');
cy.visit(`/#dashboard`);
cy.waitForElement('.q-page', 6000);
- });
-
- it('should notify when update user warehouse', () => {
- const userWarehouse =
- '.q-menu .q-gutter-xs > :nth-child(3) > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native> .q-field__input';
-
- // Abro el panel
cy.openUserPanel();
-
- // Compruebo la opcion inicial
- cy.get(userWarehouse).should('have.value', 'VNL').click();
-
- // Actualizo la opción
- cy.getOption(3);
-
- //Compruebo la notificación
- cy.get('.q-notification').should('be.visible');
- cy.get(userWarehouse).should('have.value', 'VNH');
-
- //Restauro el valor
- cy.get(userWarehouse).click();
- cy.getOption(2);
});
+
it('should notify when update user company', () => {
- const userCompany =
- '.q-menu .q-gutter-xs > :nth-child(2) > .q-field--float > .q-field__inner > .q-field__control > .q-field__control-container > .q-field__native> .q-field__input';
-
- // Abro el panel
- cy.openUserPanel();
-
- // Compruebo la opcion inicial
- cy.get(userCompany).should('have.value', 'Warehouse One').click();
-
- //Actualizo la opción
- cy.getOption(3);
-
- //Compruebo la notificación
- cy.get('.q-notification').should('be.visible');
- cy.get(userCompany).should('have.value', 'TestingWarehouse');
-
- //Restauro el valor
- cy.get(userCompany).click();
- cy.getOption(1);
+ changeSelect('User company', 'VNH', 'VNL');
});
+ it('should notify when update user warehouse', () => {
+ changeSelect('User warehouse', 'TestingWarehouse', 'Warehouse One');
+ });
+
+ function changeSelect(field, newOption, oldOption) {
+ cy.get('.q-menu')
+ .contains(field)
+ .then(($field) => {
+ cy.wrap($field).contains(oldOption);
+ cy.selectOption($field, newOption);
+ cy.checkNotification('Data saved');
+ cy.wrap($field).contains(newOption);
+
+ // Restore
+ cy.selectOption($field, oldOption);
+ });
+ }
});
diff --git a/test/cypress/integration/vnComponent/VnLocation.spec.js b/test/cypress/integration/vnComponent/VnLocation.spec.js
index 9e9b29879..1d541361a 100644
--- a/test/cypress/integration/vnComponent/VnLocation.spec.js
+++ b/test/cypress/integration/vnComponent/VnLocation.spec.js
@@ -41,7 +41,7 @@ describe('VnLocation', { testIsolation: true }, () => {
cy.get(
`${createForm.prefix} > :nth-child(4) > .q-select > ${createForm.sufix} > :nth-child(3) `,
).click();
- cy.dataCy('locationProvince').should('have.value', province);
+ cy.dataCy('locationProvince').contains(province);
});
});
describe('Worker Create', () => {
diff --git a/test/cypress/integration/worker/workerLocker.spec.js b/test/cypress/integration/worker/workerLocker.spec.js
index c222414fd..1dc5daaaf 100644
--- a/test/cypress/integration/worker/workerLocker.spec.js
+++ b/test/cypress/integration/worker/workerLocker.spec.js
@@ -11,6 +11,6 @@ describe('WorkerLocker', () => {
it('should allocates a locker', () => {
cy.selectOption(lockerSelect, lockerCode);
cy.saveCard();
- cy.get(lockerSelect).invoke('val').should('eq', lockerCode);
+ cy.get(lockerSelect).contains(lockerCode);
});
});
diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js
index e7a30d7cb..5b533e420 100755
--- a/test/cypress/support/commands.js
+++ b/test/cypress/support/commands.js
@@ -178,36 +178,37 @@ Cypress.Commands.add('fillInForm', (obj, opts = {}) => {
cy.waitSpinner();
const { form = '.q-form > .q-card', attr = 'aria-label' } = opts;
cy.waitForElement(form);
- cy.get(`${form} input`).each(([el]) => {
- cy.wrap(el)
- .invoke('attr', attr)
- .then((key) => {
- const field = obj[key];
- if (!field) return;
- if (typeof field == 'string')
- return cy
- .wrap(el)
- .type(`{selectall}{backspace}${field}`, { delay: 0 });
- const { type, val } = field;
- switch (type) {
- case 'select':
- cy.selectOption(el, val);
- break;
- case 'date':
- cy.get(el).type(`{selectall}{backspace}${val}`).blur();
- break;
- case 'time':
- cy.get(el).click();
- cy.get('.q-time .q-time__clock').contains(val.h).click();
- cy.get('.q-time .q-time__clock').contains(val.m).click();
- cy.get('.q-time .q-time__link').contains(val.x).click();
- break;
- default:
- cy.wrap(el).type(`{selectall}${val}`, { delay: 0 });
- break;
- }
- });
+ cy.get(`${form} .q-field`).each(($el) => {
+ cy.wrap($el).then(($element) => {
+ const key = $element.attr(attr) || $element.find(`[${attr}]`).attr(attr);
+ const field = obj[key];
+ if (!field) return;
+
+ const { type, val } =
+ typeof field === 'string' ? { type: 'string', val: field } : field;
+
+ switch (type) {
+ case 'select':
+ cy.selectOption($el, val);
+ break;
+ case 'date':
+ cy.wrap($el)
+ .find('input')
+ .type(`{selectall}{backspace}${val}`)
+ .blur();
+ break;
+ case 'time':
+ cy.wrap($el).click();
+ cy.get('.q-time .q-time__clock').contains(val.h).click();
+ cy.get('.q-time .q-time__clock').contains(val.m).click();
+ cy.get('.q-time .q-time__link').contains(val.x).click();
+ break;
+ default:
+ cy.wrap($el).find('input').type(`{selectall}${val}`, { delay: 0 });
+ break;
+ }
+ });
});
});