1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-04-14 00:59:06 +00:00

Fix shift arrow selections when primary field option wasnt ordered first

This commit is contained in:
Petr Stribny 2023-11-04 16:43:15 +00:00
parent 1e94d4c487
commit 4ac8777586
6 changed files with 174 additions and 73 deletions
changelog/entries/unreleased/bug
web-frontend
modules/database
components/view/grid
store/view
test/unit/database/store/view

View file

@ -0,0 +1,7 @@
{
"type": "bug",
"message": "Fix shift arrow selection on grid view when primary key field option is not first",
"issue_number": 1998,
"bullet_points": [],
"created_at": "2023-09-29"
}

View file

@ -54,6 +54,7 @@
@edit-modal="openRowEditModal($event)" @edit-modal="openRowEditModal($event)"
@refresh-row="refreshRow" @refresh-row="refreshRow"
@scroll="scroll($event.pixelY, 0)" @scroll="scroll($event.pixelY, 0)"
@cell-selected="cellSelected"
> >
<template #foot> <template #foot>
<div class="grid-view__foot-info"> <div class="grid-view__foot-info">
@ -122,6 +123,7 @@
@edit-modal="openRowEditModal($event)" @edit-modal="openRowEditModal($event)"
@refresh-row="refreshRow" @refresh-row="refreshRow"
@scroll="scroll($event.pixelY, $event.pixelX)" @scroll="scroll($event.pixelY, $event.pixelX)"
@cell-selected="cellSelected"
> >
</GridViewSection> </GridViewSection>
<GridViewRowDragging <GridViewRowDragging
@ -368,11 +370,16 @@ export default {
...mapGetters({ ...mapGetters({
row: 'rowModalNavigation/getRow', row: 'rowModalNavigation/getRow',
}), }),
/**
* Returns all visible fields no matter in what section they
* belong.
*/
allVisibleFields() { allVisibleFields() {
return this.leftFields.concat(this.visibleFields) return this.leftFields.concat(this.visibleFields)
}, },
/** /**
* Returns only the visible fields in the correct order. Primary must always be * Returns only the visible fields in the correct order that are in
* the right section of the grid. Primary must always be
* first if in that list. * first if in that list.
*/ */
visibleFields() { visibleFields() {
@ -777,7 +784,7 @@ export default {
rowHeadIndex: rowIndex, rowHeadIndex: rowIndex,
rowTailIndex: rowIndex, rowTailIndex: rowIndex,
fieldHeadIndex: 0, fieldHeadIndex: 0,
fieldTailIndex: this.visibleFields.length, fieldTailIndex: this.allVisibleFields.length - 1,
} }
) )
}, },
@ -1049,6 +1056,14 @@ export default {
this.$store.dispatch(this.storePrefix + 'view/grid/setSelectedCell', { this.$store.dispatch(this.storePrefix + 'view/grid/setSelectedCell', {
rowId: nextRowId, rowId: nextRowId,
fieldId: nextFieldId, fieldId: nextFieldId,
fields: this.fields,
})
},
cellSelected({ fieldId, rowId }) {
this.$store.dispatch(this.storePrefix + 'view/grid/setSelectedCell', {
rowId,
fieldId,
fields: this.fields,
}) })
}, },
/** /**
@ -1070,8 +1085,7 @@ export default {
this.storePrefix + 'view/grid/multiSelectShiftClick', this.storePrefix + 'view/grid/multiSelectShiftClick',
{ {
rowId: row.id, rowId: row.id,
fieldIndex: fieldIndex: this.allVisibleFields.findIndex((f) => f.id === field.id),
this.visibleFields.findIndex((f) => f.id === field.id) + 1,
} }
) )
}, },
@ -1081,8 +1095,9 @@ export default {
* selected cell. * selected cell.
*/ */
multiSelectStart({ event, row, field }) { multiSelectStart({ event, row, field }) {
let fieldIndex = this.visibleFields.findIndex((f) => f.id === field.id) const fieldIndex = this.allVisibleFields.findIndex(
if (this.canFitInTwoColumns) fieldIndex += 1 (f) => f.id === field.id
)
this.$store.dispatch(this.storePrefix + 'view/grid/multiSelectStart', { this.$store.dispatch(this.storePrefix + 'view/grid/multiSelectStart', {
rowId: row.id, rowId: row.id,
@ -1095,8 +1110,9 @@ export default {
* with the last cell hovered over. * with the last cell hovered over.
*/ */
multiSelectHold({ event, row, field }) { multiSelectHold({ event, row, field }) {
let fieldIndex = this.visibleFields.findIndex((f) => f.id === field.id) const fieldIndex = this.allVisibleFields.findIndex(
if (this.canFitInTwoColumns) fieldIndex += 1 (f) => f.id === field.id
)
this.$store.dispatch(this.storePrefix + 'view/grid/multiSelectHold', { this.$store.dispatch(this.storePrefix + 'view/grid/multiSelectHold', {
rowId: row.id, rowId: row.id,
@ -1186,20 +1202,18 @@ export default {
scrollDirection = 'vertical' scrollDirection = 'vertical'
} }
const fieldId = const fieldId = this.$store.getters[
this.$store.getters[this.storePrefix + 'view/grid/getFieldIdByIndex']( this.storePrefix + 'view/grid/getFieldIdByIndex'
fieldIndex ](fieldIndex, this.fields)
)
if (fieldId === -1) { if (fieldId === -1) {
return return
} }
const field = this.$store.getters['field/get'](fieldId) const field = this.$store.getters['field/get'](fieldId)
const verticalContainer = this.$refs.right.$refs.body const verticalContainer = this.$refs.right.$refs.body
const horizontalContainer = this.$refs.right.$el const horizontalContainer = this.$refs.right.$el
const visibleFieldOptions = const visibleFieldOptions = this.$store.getters[
this.$store.getters[ this.storePrefix + 'view/grid/getOrderedVisibleFieldOptions'
this.storePrefix + 'view/grid/getOrderedVisibleFieldOptions' ](this.fields)
]
let elementRight = -horizontalContainer.scrollLeft let elementRight = -horizontalContainer.scrollLeft
for (let i = 0; i < visibleFieldOptions.length; i++) { for (let i = 0; i < visibleFieldOptions.length; i++) {
const fieldOption = visibleFieldOptions[i] const fieldOption = visibleFieldOptions[i]
@ -1238,6 +1252,7 @@ export default {
this.storePrefix + 'view/grid/setSelectedCellCancelledMultiSelect', this.storePrefix + 'view/grid/setSelectedCellCancelledMultiSelect',
{ {
direction: arrowShiftKeysMapping[key], direction: arrowShiftKeysMapping[key],
fields: this.fields,
} }
) )
} }
@ -1280,8 +1295,9 @@ export default {
const rowIndex = this.$store.getters[ const rowIndex = this.$store.getters[
this.storePrefix + 'view/grid/getRowIndexById' this.storePrefix + 'view/grid/getRowIndexById'
](row.id) ](row.id)
let fieldIndex = this.visibleFields.findIndex((f) => f.id === field.id) const fieldIndex = this.allVisibleFields.findIndex(
if (this.canFitInTwoColumns) fieldIndex += 1 (f) => f.id === field.id
)
await this.pasteData(textData, jsonData, rowIndex, fieldIndex) await this.pasteData(textData, jsonData, rowIndex, fieldIndex)
}, },
/** /**

View file

@ -265,10 +265,7 @@ export default {
return this.row._.selected && this.row._.selectedFieldId === fieldId return this.row._.selected && this.row._.selectedFieldId === fieldId
}, },
selectCell(fieldId, rowId = this.row.id) { selectCell(fieldId, rowId = this.row.id) {
this.$store.dispatch(this.storePrefix + 'view/grid/setSelectedCell', { this.$emit('cell-selected', { fieldId, rowId })
rowId,
fieldId,
})
}, },
// Return an object that represents if a cell is selected, // Return an object that represents if a cell is selected,
// and it's current position in the selection grid // and it's current position in the selection grid

View file

@ -1222,24 +1222,26 @@ export const actions = {
setAddRowHover({ commit }, value) { setAddRowHover({ commit }, value) {
commit('SET_ADD_ROW_HOVER', value) commit('SET_ADD_ROW_HOVER', value)
}, },
setSelectedCell({ commit, getters, rootGetters }, { rowId, fieldId }) { setSelectedCell(
{ commit, getters, rootGetters },
{ rowId, fieldId, fields }
) {
commit('SET_SELECTED_CELL', { rowId, fieldId }) commit('SET_SELECTED_CELL', { rowId, fieldId })
const rowIndex = getters.getRowIndexById(rowId) const rowIndex = getters.getRowIndexById(rowId)
if (rowIndex !== -1) { if (rowIndex !== -1) {
commit('SET_MULTISELECT_START_ROW_INDEX', rowIndex) commit('SET_MULTISELECT_START_ROW_INDEX', rowIndex)
const visibleFieldOptions = getters.getOrderedVisibleFieldOptions(fields)
const visibleFieldEntries = getters.getOrderedVisibleFieldOptions
commit( commit(
'SET_MULTISELECT_START_FIELD_INDEX', 'SET_MULTISELECT_START_FIELD_INDEX',
visibleFieldEntries.findIndex((f) => parseInt(f[0]) === fieldId) visibleFieldOptions.findIndex((f) => parseInt(f[0]) === fieldId)
) )
} }
}, },
setSelectedCellCancelledMultiSelect( setSelectedCellCancelledMultiSelect(
{ commit, getters, rootGetters, dispatch }, { commit, getters, rootGetters, dispatch },
{ direction } { direction, fields }
) { ) {
const rowIndex = getters.getMultiSelectStartRowIndex const rowIndex = getters.getMultiSelectStartRowIndex
const fieldIndex = getters.getMultiSelectStartFieldIndex const fieldIndex = getters.getMultiSelectStartFieldIndex
@ -1249,7 +1251,7 @@ export const actions = {
) )
const rows = getters.getAllRows const rows = getters.getAllRows
const visibleFieldEntries = getters.getOrderedVisibleFieldOptions const visibleFieldEntries = getters.getOrderedVisibleFieldOptions(fields)
const row = rows[newRowIndex - getters.getBufferStartIndex] const row = rows[newRowIndex - getters.getBufferStartIndex]
const field = visibleFieldEntries[newFieldIndex] const field = visibleFieldEntries[newFieldIndex]
@ -1257,6 +1259,7 @@ export const actions = {
dispatch('setSelectedCell', { dispatch('setSelectedCell', {
rowId: row.id, rowId: row.id,
fieldId: parseInt(field[0]), fieldId: parseInt(field[0]),
fields,
}) })
} else { } else {
const oldRow = rows[rowIndex - getters.getBufferStartIndex] const oldRow = rows[rowIndex - getters.getBufferStartIndex]
@ -1266,6 +1269,7 @@ export const actions = {
dispatch('setSelectedCell', { dispatch('setSelectedCell', {
rowId: oldRow.id, rowId: oldRow.id,
fieldId: parseInt(oldField[0]), fieldId: parseInt(oldField[0]),
fields,
}) })
} }
} }
@ -1415,7 +1419,6 @@ export const actions = {
const rowIndex = getters.getRowIndexById(rowId) const rowIndex = getters.getRowIndexById(rowId)
const startRowIndex = getters.getMultiSelectStartRowIndex const startRowIndex = getters.getMultiSelectStartRowIndex
const startFieldIndex = getters.getMultiSelectStartFieldIndex const startFieldIndex = getters.getMultiSelectStartFieldIndex
const newHeadRowIndex = Math.min(startRowIndex, rowIndex) const newHeadRowIndex = Math.min(startRowIndex, rowIndex)
const newHeadFieldIndex = Math.min(startFieldIndex, fieldIndex) const newHeadFieldIndex = Math.min(startFieldIndex, fieldIndex)
const newTailRowIndex = Math.max(startRowIndex, rowIndex) const newTailRowIndex = Math.max(startRowIndex, rowIndex)
@ -1700,6 +1703,7 @@ export const actions = {
await dispatch('setSelectedCell', { await dispatch('setSelectedCell', {
rowId: rowsPopulated[0].id, rowId: rowsPopulated[0].id,
fieldId: primaryField.id, fieldId: primaryField.id,
fields,
}) })
} }
@ -2738,24 +2742,38 @@ export const getters = {
getAllFieldOptions(state) { getAllFieldOptions(state) {
return state.fieldOptions return state.fieldOptions
}, },
getOrderedFieldOptions(state, getters) { getOrderedFieldOptions: (state, getters) => (fields) => {
const primaryField = fields.find((f) => f.primary === true)
const primaryFieldId = primaryField?.id || -1
return Object.entries(getters.getAllFieldOptions) return Object.entries(getters.getAllFieldOptions)
.map(([fieldIdStr, options]) => [parseInt(fieldIdStr), options]) .map(([fieldIdStr, options]) => [parseInt(fieldIdStr), options])
.sort(([a, { order: orderA }], [b, { order: orderB }]) => { .sort(([a, { order: orderA }], [b, { order: orderB }]) => {
// First by order. const isAPrimary = a === primaryFieldId
const isBPrimary = b === primaryFieldId
// Place primary field first
if (isAPrimary === true && !isBPrimary) {
return -1
} else if (isBPrimary === true && !isAPrimary) {
return 1
}
// Then by order
if (orderA > orderB) { if (orderA > orderB) {
return 1 return 1
} else if (orderA < orderB) { } else if (orderA < orderB) {
return -1 return -1
} }
// Finally by id if order is the same
return a - b return a - b
}) })
}, },
getOrderedVisibleFieldOptions(state, getters) { getOrderedVisibleFieldOptions: (state, getters) => (fields) => {
return getters.getOrderedFieldOptions.filter( return getters
([fieldId, options]) => options.hidden === false .getOrderedFieldOptions(fields)
) .filter(([fieldId, options]) => options.hidden === false)
}, },
getNumberOfVisibleFields(state) { getNumberOfVisibleFields(state) {
return Object.values(state.fieldOptions).filter((fo) => fo.hidden === false) return Object.values(state.fieldOptions).filter((fo) => fo.hidden === false)
@ -2849,8 +2867,8 @@ export const getters = {
} }
return -1 return -1
}, },
getFieldIdByIndex: (state, getters) => (fieldIndex) => { getFieldIdByIndex: (state, getters) => (fieldIndex, fields) => {
const orderedFieldOptions = getters.getOrderedVisibleFieldOptions const orderedFieldOptions = getters.getOrderedVisibleFieldOptions(fields)
if (orderedFieldOptions[fieldIndex]) { if (orderedFieldOptions[fieldIndex]) {
return orderedFieldOptions[fieldIndex][0] return orderedFieldOptions[fieldIndex][0]
} }

View file

@ -878,40 +878,7 @@ describe('Grid view store', () => {
}) })
test('getOrderedFieldOptions', () => { test('getOrderedFieldOptions', () => {
const state = Object.assign(gridStore.state(), { const fields = []
fieldOptions: {
1: {
order: 0,
hidden: false,
},
2: {
order: 1,
hidden: true,
},
3: {
order: 3,
hidden: false,
},
4: {
order: 2,
hidden: false,
},
},
})
gridStore.state = () => state
store.registerModule('grid', gridStore)
expect(
JSON.parse(JSON.stringify(store.getters['grid/getOrderedFieldOptions']))
).toEqual([
[1, { hidden: false, order: 0 }],
[2, { hidden: true, order: 1 }],
[4, { hidden: false, order: 2 }],
[3, { hidden: false, order: 3 }],
])
})
test('getOrderedVisibleFieldOptions', () => {
const state = Object.assign(gridStore.state(), { const state = Object.assign(gridStore.state(), {
fieldOptions: { fieldOptions: {
1: { 1: {
@ -937,7 +904,86 @@ describe('Grid view store', () => {
expect( expect(
JSON.parse( JSON.parse(
JSON.stringify(store.getters['grid/getOrderedVisibleFieldOptions']) JSON.stringify(store.getters['grid/getOrderedFieldOptions'](fields))
)
).toEqual([
[1, { hidden: false, order: 0 }],
[2, { hidden: true, order: 1 }],
[4, { hidden: false, order: 2 }],
[3, { hidden: false, order: 3 }],
])
})
test('getOrderedFieldOptions places primary field first', () => {
const fields = [
{ id: 2, primary: false },
{ id: 3, primary: true },
]
const state = Object.assign(gridStore.state(), {
fieldOptions: {
1: {
order: 0,
hidden: false,
},
2: {
order: 1,
hidden: true,
},
3: {
order: 3,
hidden: false,
},
4: {
order: 2,
hidden: false,
},
},
})
gridStore.state = () => state
store.registerModule('grid', gridStore)
expect(
JSON.parse(
JSON.stringify(store.getters['grid/getOrderedFieldOptions'](fields))
)
).toEqual([
[3, { hidden: false, order: 3 }],
[1, { hidden: false, order: 0 }],
[2, { hidden: true, order: 1 }],
[4, { hidden: false, order: 2 }],
])
})
test('getOrderedVisibleFieldOptions', () => {
const fields = []
const state = Object.assign(gridStore.state(), {
fieldOptions: {
1: {
order: 0,
hidden: false,
},
2: {
order: 1,
hidden: true,
},
3: {
order: 3,
hidden: false,
},
4: {
order: 2,
hidden: false,
},
},
})
gridStore.state = () => state
store.registerModule('grid', gridStore)
expect(
JSON.parse(
JSON.stringify(
store.getters['grid/getOrderedVisibleFieldOptions'](fields)
)
) )
).toEqual([ ).toEqual([
[1, { hidden: false, order: 0 }], [1, { hidden: false, order: 0 }],
@ -979,6 +1025,7 @@ describe('Grid view store', () => {
}) })
test('getFieldIdByIndex', () => { test('getFieldIdByIndex', () => {
const fields = []
const state = Object.assign(gridStore.state(), { const state = Object.assign(gridStore.state(), {
fieldOptions: { fieldOptions: {
1: { 1: {
@ -1002,6 +1049,6 @@ describe('Grid view store', () => {
gridStore.state = () => state gridStore.state = () => state
store.registerModule('grid', gridStore) store.registerModule('grid', gridStore)
expect(store.getters['grid/getFieldIdByIndex'](2)).toBe(3) expect(store.getters['grid/getFieldIdByIndex'](2, fields)).toBe(3)
}) })
}) })

View file

@ -557,6 +557,7 @@ describe('Grid view multiple select', () => {
}) })
test('previous direction', async () => { test('previous direction', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 14 state.multiSelectHeadRowIndex = 14
state.multiSelectHeadFieldIndex = 1 state.multiSelectHeadFieldIndex = 1
@ -567,6 +568,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'previous', direction: 'previous',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)
@ -582,6 +584,7 @@ describe('Grid view multiple select', () => {
}) })
test('next direction', async () => { test('next direction', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 14 state.multiSelectHeadRowIndex = 14
state.multiSelectHeadFieldIndex = 1 state.multiSelectHeadFieldIndex = 1
@ -592,6 +595,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'next', direction: 'next',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)
@ -607,6 +611,7 @@ describe('Grid view multiple select', () => {
}) })
test('above direction', async () => { test('above direction', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 14 state.multiSelectHeadRowIndex = 14
state.multiSelectHeadFieldIndex = 1 state.multiSelectHeadFieldIndex = 1
@ -617,6 +622,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'above', direction: 'above',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)
@ -632,6 +638,7 @@ describe('Grid view multiple select', () => {
}) })
test('below direction', async () => { test('below direction', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 14 state.multiSelectHeadRowIndex = 14
state.multiSelectHeadFieldIndex = 1 state.multiSelectHeadFieldIndex = 1
@ -642,6 +649,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'below', direction: 'below',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)
@ -657,6 +665,7 @@ describe('Grid view multiple select', () => {
}) })
test('previous direction at the edge', async () => { test('previous direction at the edge', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 14 state.multiSelectHeadRowIndex = 14
state.multiSelectHeadFieldIndex = 0 state.multiSelectHeadFieldIndex = 0
@ -667,6 +676,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'previous', direction: 'previous',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)
@ -682,6 +692,7 @@ describe('Grid view multiple select', () => {
}) })
test('next direction at the edge', async () => { test('next direction at the edge', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 14 state.multiSelectHeadRowIndex = 14
state.multiSelectHeadFieldIndex = 2 state.multiSelectHeadFieldIndex = 2
@ -692,6 +703,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'next', direction: 'next',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)
@ -707,6 +719,7 @@ describe('Grid view multiple select', () => {
}) })
test('above direction at the edge', async () => { test('above direction at the edge', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 9 state.multiSelectHeadRowIndex = 9
state.multiSelectHeadFieldIndex = 1 state.multiSelectHeadFieldIndex = 1
@ -717,6 +730,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'above', direction: 'above',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)
@ -732,6 +746,7 @@ describe('Grid view multiple select', () => {
}) })
test('below direction at the edge', async () => { test('below direction at the edge', async () => {
const fields = []
state.multiSelectActive = false state.multiSelectActive = false
state.multiSelectHeadRowIndex = 17 state.multiSelectHeadRowIndex = 17
state.multiSelectHeadFieldIndex = 1 state.multiSelectHeadFieldIndex = 1
@ -742,6 +757,7 @@ describe('Grid view multiple select', () => {
await store.dispatch('grid/setSelectedCellCancelledMultiSelect', { await store.dispatch('grid/setSelectedCellCancelledMultiSelect', {
direction: 'below', direction: 'below',
fields,
}) })
expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1) expect(store.getters['grid/getMultiSelectHeadRowIndex']).toBe(-1)