Reviewed-on: #848 Reviewed-by: Alex Moreno <alexm@verdnatura.es>
This commit is contained in:
commit
9ee05721a4
|
@ -331,6 +331,20 @@ function handleScroll() {
|
||||||
const isAtBottom = Math.abs(scrollHeight - scrollTop - clientHeight) <= 40;
|
const isAtBottom = Math.abs(scrollHeight - scrollTop - clientHeight) <= 40;
|
||||||
if (isAtBottom) CrudModelRef.value.vnPaginateRef.paginate();
|
if (isAtBottom) CrudModelRef.value.vnPaginateRef.paginate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleSelection({ evt, added, rows: selectedRows }, rows) {
|
||||||
|
if (evt?.shiftKey && added) {
|
||||||
|
const rowIndex = selectedRows[0].$index;
|
||||||
|
const selectedIndexes = new Set(selected.value.map((row) => row.$index));
|
||||||
|
for (const row of rows) {
|
||||||
|
if (row.$index == rowIndex) break;
|
||||||
|
if (!selectedIndexes.has(row.$index)) {
|
||||||
|
selected.value.push(row);
|
||||||
|
selectedIndexes.add(row.$index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<QDrawer
|
<QDrawer
|
||||||
|
@ -431,6 +445,7 @@ function handleScroll() {
|
||||||
@virtual-scroll="handleScroll"
|
@virtual-scroll="handleScroll"
|
||||||
@row-click="(_, row) => rowClickFunction && rowClickFunction(row)"
|
@row-click="(_, row) => rowClickFunction && rowClickFunction(row)"
|
||||||
@update:selected="emit('update:selected', $event)"
|
@update:selected="emit('update:selected', $event)"
|
||||||
|
@selection="(details) => handleSelection(details, rows)"
|
||||||
>
|
>
|
||||||
<template #top-left v-if="!$props.withoutHeader">
|
<template #top-left v-if="!$props.withoutHeader">
|
||||||
<slot name="top-left"></slot>
|
<slot name="top-left"></slot>
|
||||||
|
|
|
@ -167,6 +167,7 @@ const toModule = computed(() =>
|
||||||
icon="more_vert"
|
icon="more_vert"
|
||||||
round
|
round
|
||||||
size="md"
|
size="md"
|
||||||
|
data-cy="descriptor-more-opts"
|
||||||
>
|
>
|
||||||
<QTooltip>
|
<QTooltip>
|
||||||
{{ t('components.cardDescriptor.moreOptions') }}
|
{{ t('components.cardDescriptor.moreOptions') }}
|
||||||
|
|
|
@ -14,6 +14,8 @@ describe('Ticket descriptor', () => {
|
||||||
|
|
||||||
it('should clone the ticket without warehouse', () => {
|
it('should clone the ticket without warehouse', () => {
|
||||||
cy.visit('/#/ticket/1/summary');
|
cy.visit('/#/ticket/1/summary');
|
||||||
|
cy.intercept('GET', /\/api\/Tickets\/\d/).as('ticket');
|
||||||
|
cy.wait('@ticket');
|
||||||
cy.openActionsDescriptor();
|
cy.openActionsDescriptor();
|
||||||
cy.contains(listItem, toCloneOpt).click();
|
cy.contains(listItem, toCloneOpt).click();
|
||||||
cy.clickConfirm();
|
cy.clickConfirm();
|
||||||
|
@ -28,6 +30,8 @@ describe('Ticket descriptor', () => {
|
||||||
|
|
||||||
it('should set the weight of the ticket', () => {
|
it('should set the weight of the ticket', () => {
|
||||||
cy.visit('/#/ticket/10/summary');
|
cy.visit('/#/ticket/10/summary');
|
||||||
|
cy.intercept('GET', /\/api\/Tickets\/\d/).as('ticket');
|
||||||
|
cy.wait('@ticket');
|
||||||
cy.openActionsDescriptor();
|
cy.openActionsDescriptor();
|
||||||
cy.contains(listItem, setWeightOpt).click();
|
cy.contains(listItem, setWeightOpt).click();
|
||||||
cy.intercept('POST', /\/api\/Tickets\/\d+\/setWeight/).as('weight');
|
cy.intercept('POST', /\/api\/Tickets\/\d+\/setWeight/).as('weight');
|
||||||
|
|
|
@ -261,7 +261,7 @@ Cypress.Commands.add('openActionDescriptor', (opt) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
Cypress.Commands.add('openActionsDescriptor', () => {
|
Cypress.Commands.add('openActionsDescriptor', () => {
|
||||||
cy.get('.header > :nth-child(3) > .q-btn__content > .q-icon').click();
|
cy.get('[data-cy="descriptor-more-opts"]').click();
|
||||||
});
|
});
|
||||||
|
|
||||||
Cypress.Commands.add('openUserPanel', () => {
|
Cypress.Commands.add('openUserPanel', () => {
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
import { describe, expect, it, beforeAll, beforeEach } from 'vitest';
|
||||||
|
import { createWrapper } from 'app/test/vitest/helper';
|
||||||
|
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||||
|
|
||||||
|
describe('VnTable', () => {
|
||||||
|
let wrapper;
|
||||||
|
let vm;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
wrapper = createWrapper(VnTable, {
|
||||||
|
propsData: {
|
||||||
|
columns: [],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
vm = wrapper.vm;
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => (vm.selected = []));
|
||||||
|
|
||||||
|
describe('handleSelection()', () => {
|
||||||
|
const rows = [{ $index: 0 }, { $index: 1 }, { $index: 2 }];
|
||||||
|
const selectedRows = [{ $index: 1 }];
|
||||||
|
it('should add rows to selected when shift key is pressed and rows are added except last one', () => {
|
||||||
|
vm.handleSelection(
|
||||||
|
{ evt: { shiftKey: true }, added: true, rows: selectedRows },
|
||||||
|
rows
|
||||||
|
);
|
||||||
|
expect(vm.selected).toEqual([{ $index: 0 }]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not add rows to selected when shift key is not pressed', () => {
|
||||||
|
vm.handleSelection(
|
||||||
|
{ evt: { shiftKey: false }, added: true, rows: selectedRows },
|
||||||
|
rows
|
||||||
|
);
|
||||||
|
expect(vm.selected).toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not add rows to selected when rows are not added', () => {
|
||||||
|
vm.handleSelection(
|
||||||
|
{ evt: { shiftKey: true }, added: false, rows: selectedRows },
|
||||||
|
rows
|
||||||
|
);
|
||||||
|
expect(vm.selected).toEqual([]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue