diff --git a/packages/o-spreadsheet-engine/src/helpers/text_helper.ts b/packages/o-spreadsheet-engine/src/helpers/text_helper.ts index f1af6af2d0..3615715a41 100644 --- a/packages/o-spreadsheet-engine/src/helpers/text_helper.ts +++ b/packages/o-spreadsheet-engine/src/helpers/text_helper.ts @@ -292,9 +292,9 @@ export function getFontSizeMatchingWidth( return fontSize; } -/** Transform a string to lower case. If the string is undefined, return an empty string */ -export function toLowerCase(str: string | undefined): string { - return str ? str.toLowerCase() : ""; +/** Transform a string to lowercase and removes whitespace from both ends of the string*/ +export function toTrimmedLowerCase(str: string | undefined): string { + return str ? str.toLowerCase().trim() : ""; } /** diff --git a/packages/o-spreadsheet-engine/src/plugins/ui_stateful/filter_evaluation.ts b/packages/o-spreadsheet-engine/src/plugins/ui_stateful/filter_evaluation.ts index ce156c318b..d25345e858 100644 --- a/packages/o-spreadsheet-engine/src/plugins/ui_stateful/filter_evaluation.ts +++ b/packages/o-spreadsheet-engine/src/plugins/ui_stateful/filter_evaluation.ts @@ -2,7 +2,7 @@ import { isMultipleElementMatrix, toScalar } from "../../functions/helper_matric import { parseLiteral } from "../../helpers/cells/cell_evaluation"; import { toXC } from "../../helpers/coordinates"; import { deepCopy, getUniqueText, range } from "../../helpers/misc"; -import { toLowerCase } from "../../helpers/text_helper"; +import { toTrimmedLowerCase } from "../../helpers/text_helper"; import { positions, toZone, zoneToDimension } from "../../helpers/zones"; import { criterionEvaluatorRegistry } from "../../registries/criterion_registry"; import { Command, CommandResult, LocalCommand, UpdateFilterCommand } from "../../types/commands"; @@ -139,6 +139,11 @@ export class FilterEvaluationPlugin extends UIPlugin { const id = this.getters.getFilterId({ sheetId, col, row }); if (!id) return; if (!this.filterValues[sheetId]) this.filterValues[sheetId] = {}; + if (value.filterType === "values") { + value.hiddenValues = value.hiddenValues.map(toTrimmedLowerCase); + } else if (value.filterType === "criterion") { + value.values = value.values.map(toTrimmedLowerCase); + } this.filterValues[sheetId][id] = value; } @@ -163,7 +168,7 @@ export class FilterEvaluationPlugin extends UIPlugin { continue; } if (filterValue.filterType === "values") { - const filteredValues = filterValue.hiddenValues?.map(toLowerCase); + const filteredValues = filterValue.hiddenValues; if (!filteredValues) continue; const filteredValuesSet = new Set(filteredValues); for (let row = filteredZone.top; row <= filteredZone.bottom; row++) { @@ -205,7 +210,7 @@ export class FilterEvaluationPlugin extends UIPlugin { private getCellValueAsString(sheetId: UID, col: number, row: number): string { const value = this.getters.getEvaluatedCell({ sheetId, col, row }).formattedValue; - return value.toLowerCase(); + return toTrimmedLowerCase(value); } exportForExcel(data: ExcelWorkbookData) { @@ -234,7 +239,7 @@ export class FilterEvaluationPlugin extends UIPlugin { if (filteredValues.length) { const xlsxDisplayedValues = valuesInFilterZone .filter((val) => val) - .filter((val) => !filteredValues.includes(val)); + .filter((val) => !filteredValues.includes(toTrimmedLowerCase(val))); filters.push({ colId: i, displayedValues: [...new Set(xlsxDisplayedValues)], diff --git a/packages/o-spreadsheet-engine/src/registries/criterion_registry.ts b/packages/o-spreadsheet-engine/src/registries/criterion_registry.ts index f7a8b723cd..78d4b50eab 100644 --- a/packages/o-spreadsheet-engine/src/registries/criterion_registry.ts +++ b/packages/o-spreadsheet-engine/src/registries/criterion_registry.ts @@ -20,6 +20,7 @@ import { detectLink } from "../helpers/links"; import { localizeContent } from "../helpers/locale"; import { isNumberBetween } from "../helpers/misc"; import { rangeReference } from "../helpers/references"; +import { toTrimmedLowerCase } from "../helpers/text_helper"; import { _t } from "../translation"; import { CellValue } from "../types/cells"; import { @@ -115,8 +116,8 @@ criterionEvaluatorRegistry.add("notContainsText", { criterionEvaluatorRegistry.add("isEqualText", { type: "isEqualText", isValueValid: (value: CellValue, criterion: EvaluatedCriterion) => { - const strValue = String(value); - return strValue.toLowerCase() === String(criterion.values[0]).toLowerCase(); + const strValue = toTrimmedLowerCase(String(value)); + return strValue === String(criterion.values[0]); }, getErrorString: (criterion: EvaluatedCriterion) => { return _t('The value must be exactly "%s"', String(criterion.values[0])); @@ -663,8 +664,8 @@ criterionEvaluatorRegistry.add("customFormula", { criterionEvaluatorRegistry.add("beginsWithText", { type: "beginsWithText", isValueValid: (value: CellValue, criterion: EvaluatedCriterion) => { - const strValue = String(value); - return strValue.toLowerCase().startsWith(String(criterion.values[0]).toLowerCase()); + const strValue = toTrimmedLowerCase(String(value)); + return strValue.startsWith(String(criterion.values[0])); }, getErrorString: (criterion: EvaluatedCriterion) => { return _t('The value must be a text that begins with "%s"', String(criterion.values[0])); @@ -679,8 +680,8 @@ criterionEvaluatorRegistry.add("beginsWithText", { criterionEvaluatorRegistry.add("endsWithText", { type: "endsWithText", isValueValid: (value: CellValue, criterion: EvaluatedCriterion) => { - const strValue = String(value); - return strValue.toLowerCase().endsWith(String(criterion.values[0]).toLowerCase()); + const strValue = toTrimmedLowerCase(String(value)); + return strValue.endsWith(String(criterion.values[0])); }, getErrorString: (criterion: EvaluatedCriterion) => { return _t('The value must be a text that ends with "%s"', String(criterion.values[0])); diff --git a/src/components/filters/filter_menu_value_list/filter_menu_value_list.ts b/src/components/filters/filter_menu_value_list/filter_menu_value_list.ts index 659fe4c5be..ea89ba60c5 100644 --- a/src/components/filters/filter_menu_value_list/filter_menu_value_list.ts +++ b/src/components/filters/filter_menu_value_list/filter_menu_value_list.ts @@ -1,6 +1,6 @@ import { SpreadsheetChildEnv } from "@odoo/o-spreadsheet-engine/types/spreadsheet_env"; import { Component, onWillUpdateProps, useRef, useState } from "@odoo/owl"; -import { deepEquals, positions, toLowerCase } from "../../../helpers"; +import { deepEquals, positions, toTrimmedLowerCase } from "../../../helpers"; import { fuzzyLookup } from "../../../helpers/search"; import { Position } from "../../../types"; import { FilterMenuValueItem } from "../filter_menu_item/filter_menu_value_item"; @@ -76,12 +76,12 @@ export class FilterMenuValueList extends Component { const cellValues = cells.map((val) => val.cellValue); const filterValues = filterValue?.filterType === "values" ? filterValue.hiddenValues : []; - const normalizedFilteredValues = new Set(filterValues.map(toLowerCase)); + const normalizedFilteredValues = new Set(filterValues); const set = new Set(); const values: (Value & { normalizedValue: string })[] = []; const addValue = (value: string) => { - const normalizedValue = toLowerCase(value); + const normalizedValue = toTrimmedLowerCase(value); if (!set.has(normalizedValue)) { values.push({ string: value || "", diff --git a/tests/table/filter_evaluation_plugin.test.ts b/tests/table/filter_evaluation_plugin.test.ts index b85d57d078..2490c2b4ab 100644 --- a/tests/table/filter_evaluation_plugin.test.ts +++ b/tests/table/filter_evaluation_plugin.test.ts @@ -34,14 +34,14 @@ describe("Simple filter test", () => { test("Can update a filter", () => { createTableWithFilter(model, "A1:A5"); updateFilter(model, "A1", ["2", "A"]); - expect(model.getters.getFilterHiddenValues({ sheetId, col: 0, row: 0 })).toEqual(["2", "A"]); + expect(model.getters.getFilterHiddenValues({ sheetId, col: 0, row: 0 })).toEqual(["2", "a"]); }); test("Can update a filter in readonly mode", () => { createTableWithFilter(model, "A1:A5"); model.updateMode("readonly"); updateFilter(model, "A1", ["2", "A"]); - expect(model.getters.getFilterHiddenValues({ sheetId, col: 0, row: 0 })).toEqual(["2", "A"]); + expect(model.getters.getFilterHiddenValues({ sheetId, col: 0, row: 0 })).toEqual(["2", "a"]); }); test("Update filter is correctly rejected when target is not inside a table", () => { @@ -95,11 +95,11 @@ describe("Simple filter test", () => { sheetIdTo: sheet2Id, sheetNameTo: "Copy of Sheet1", }); - expect(getFilterHiddenValues(model, sheet2Id)).toMatchObject([{ zone: "B1:B3", value: ["C"] }]); + expect(getFilterHiddenValues(model, sheet2Id)).toMatchObject([{ zone: "B1:B3", value: ["c"] }]); deleteColumns(model, ["A"], sheet2Id); - expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "B1:B3", value: ["C"] }]); - expect(getFilterHiddenValues(model, sheet2Id)).toMatchObject([{ zone: "A1:A3", value: ["C"] }]); + expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "B1:B3", value: ["c"] }]); + expect(getFilterHiddenValues(model, sheet2Id)).toMatchObject([{ zone: "A1:A3", value: ["c"] }]); }); }); @@ -161,6 +161,15 @@ describe("Filter Evaluation", () => { expect(model.getters.isRowHidden(sheetId, 2)).toEqual(true); }); + test("Filters ignore whitespaces", () => { + setCellContent(model, "A2", "a"); + setCellContent(model, "A3", " a"); + setCellContent(model, "A4", "a "); + updateFilter(model, "A2", ["a"]); + expect(model.getters.isRowHidden(sheetId, 1)).toEqual(true); + expect(model.getters.isRowHidden(sheetId, 2)).toEqual(true); + expect(model.getters.isRowHidden(sheetId, 3)).toEqual(true); + }); test("Header is not filtered", () => { updateFilter(model, "A1", ["A1"]); expect(model.getters.isRowHidden(sheetId, 0)).toEqual(false); @@ -195,17 +204,17 @@ describe("Filter Evaluation", () => { test("Updating a table zone keep the filtered values if the filter header did not move", () => { updateFilter(model, "A1", ["A2"]); - expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["A2"] }]); + expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["a2"] }]); expect(model.getters.isRowHidden(sheetId, 1)).toEqual(true); updateTableZone(model, "A1:A5", "A1:A6"); - expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A6", value: ["A2"] }]); + expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A6", value: ["a2"] }]); expect(model.getters.isRowHidden(sheetId, 1)).toEqual(true); }); test("Updating a table zone drops the filtered values if the filter header moved", () => { updateFilter(model, "A1", ["A3"]); - expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["A3"] }]); + expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["a3"] }]); expect(model.getters.isRowHidden(sheetId, 2)).toEqual(true); updateTableZone(model, "A1:A5", "A2:A5"); @@ -215,7 +224,7 @@ describe("Filter Evaluation", () => { test("Updating a table zone updates the hidden rows", () => { updateFilter(model, "A1", ["A2"]); - expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["A2"] }]); + expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["a2"] }]); expect(model.getters.isRowHidden(sheetId, 1)).toEqual(true); updateTableZone(model, "A1:A5", "E1:E3"); @@ -225,7 +234,7 @@ describe("Filter Evaluation", () => { test("Removing the filters from a table updates the hidden rows", () => { updateFilter(model, "A1", ["A2"]); - expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["A2"] }]); + expect(getFilterHiddenValues(model, sheetId)).toMatchObject([{ zone: "A1:A5", value: ["a2"] }]); expect(model.getters.isRowHidden(sheetId, 1)).toEqual(true); updateTableConfig(model, "A1:A5", { hasFilters: false }); @@ -377,6 +386,27 @@ describe("Filter criterion test", () => { } ); + test.each(["beginsWithText", "endsWithText", "isEqualText"] as const)( + "Can filter based on a text criterion %s ignoring lowercase/uppercase and whitespaces", + (type) => { + const grid = { + A2: "a", + A3: " a", + A4: "a ", + A5: "A", + A6: "b", + }; + setGrid(model, grid); + createTableWithFilter(model, "A1:A6"); + updateFilterCriterion(model, "A1", { + type, + values: ["a"], + }); + + expect(getFilteredRows()).toEqual([5]); + } + ); + test.each([ ["isEqual", ["1"], [2, 3]], ["isNotEqual", ["1"], [1]], diff --git a/tests/table/tables_plugin.test.ts b/tests/table/tables_plugin.test.ts index d7003d7f90..d72445bd3e 100644 --- a/tests/table/tables_plugin.test.ts +++ b/tests/table/tables_plugin.test.ts @@ -241,15 +241,15 @@ describe("Table plugin", () => { sheetNameTo: "Copy of Sheet1", }); expect(getFilterHiddenValues(model, sheet2Id)).toMatchObject([ - { zone: "A1:A3", value: ["C"] }, + { zone: "A1:A3", value: ["c"] }, ]); updateFilter(model, "A1", ["D"], sheet2Id); expect(getFilterHiddenValues(model, sheetId)).toMatchObject([ - { zone: "A1:A3", value: ["C"] }, + { zone: "A1:A3", value: ["c"] }, ]); expect(getFilterHiddenValues(model, sheet2Id)).toMatchObject([ - { zone: "A1:A3", value: ["D"] }, + { zone: "A1:A3", value: ["d"] }, ]); }); @@ -313,7 +313,7 @@ describe("Table plugin", () => { setCellContent(model, "B5", "Something Else"); expect(zoneToXc(model.getters.getTables(sheetId)[0].range.zone)).toEqual("A1:B5"); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "A1:A5", value: ["C"] }, + { zone: "A1:A5", value: ["c"] }, { zone: "B1:B5", value: [] }, ]); }); @@ -325,7 +325,7 @@ describe("Table plugin", () => { setCellContent(model, "C3", "Something Else"); expect(zoneToXc(model.getters.getTables(sheetId)[0].range.zone)).toEqual("B1:C3"); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "B1:B3", value: ["C"] }, + { zone: "B1:B3", value: ["c"] }, { zone: "C1:C3", value: [] }, ]); }); @@ -421,10 +421,10 @@ describe("Table plugin", () => { addColumns(model, "before", "A", 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("D3:G6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "D3:D6", value: ["C"] }, - { zone: "E3:E6", value: ["D"] }, - { zone: "F3:F6", value: ["E"] }, - { zone: "G3:G6", value: ["F"] }, + { zone: "D3:D6", value: ["c"] }, + { zone: "E3:E6", value: ["d"] }, + { zone: "F3:F6", value: ["e"] }, + { zone: "G3:G6", value: ["f"] }, ]); }); @@ -432,10 +432,10 @@ describe("Table plugin", () => { addColumns(model, "before", "C", 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("D3:G6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "D3:D6", value: ["C"] }, - { zone: "E3:E6", value: ["D"] }, - { zone: "F3:F6", value: ["E"] }, - { zone: "G3:G6", value: ["F"] }, + { zone: "D3:D6", value: ["c"] }, + { zone: "E3:E6", value: ["d"] }, + { zone: "F3:F6", value: ["e"] }, + { zone: "G3:G6", value: ["f"] }, ]); }); @@ -443,11 +443,11 @@ describe("Table plugin", () => { addColumns(model, "after", "C", 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:G6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, + { zone: "C3:C6", value: ["c"] }, { zone: "D3:D6", value: [] }, - { zone: "E3:E6", value: ["D"] }, - { zone: "F3:F6", value: ["E"] }, - { zone: "G3:G6", value: ["F"] }, + { zone: "E3:E6", value: ["d"] }, + { zone: "F3:F6", value: ["e"] }, + { zone: "G3:G6", value: ["f"] }, ]); }); @@ -455,11 +455,11 @@ describe("Table plugin", () => { addColumns(model, "before", "F", 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:G6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, { zone: "F3:F6", value: [] }, - { zone: "G3:G6", value: ["F"] }, + { zone: "G3:G6", value: ["f"] }, ]); }); @@ -467,10 +467,10 @@ describe("Table plugin", () => { addColumns(model, "after", "F", 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, - { zone: "F3:F6", value: ["F"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, + { zone: "F3:F6", value: ["f"] }, ]); }); @@ -478,10 +478,10 @@ describe("Table plugin", () => { addColumns(model, "after", "H", 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, - { zone: "F3:F6", value: ["F"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, + { zone: "F3:F6", value: ["f"] }, ]); }); }); @@ -491,10 +491,10 @@ describe("Table plugin", () => { deleteColumns(model, ["A"]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("B3:E6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "B3:B6", value: ["C"] }, - { zone: "C3:C6", value: ["D"] }, - { zone: "D3:D6", value: ["E"] }, - { zone: "E3:E6", value: ["F"] }, + { zone: "B3:B6", value: ["c"] }, + { zone: "C3:C6", value: ["d"] }, + { zone: "D3:D6", value: ["e"] }, + { zone: "E3:E6", value: ["f"] }, ]); }); @@ -502,9 +502,9 @@ describe("Table plugin", () => { deleteColumns(model, ["C"]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:E6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["D"] }, - { zone: "D3:D6", value: ["E"] }, - { zone: "E3:E6", value: ["F"] }, + { zone: "C3:C6", value: ["d"] }, + { zone: "D3:D6", value: ["e"] }, + { zone: "E3:E6", value: ["f"] }, ]); }); @@ -512,9 +512,9 @@ describe("Table plugin", () => { deleteColumns(model, ["D"]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:E6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["E"] }, - { zone: "E3:E6", value: ["F"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["e"] }, + { zone: "E3:E6", value: ["f"] }, ]); }); @@ -522,9 +522,9 @@ describe("Table plugin", () => { deleteColumns(model, ["F"]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:E6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, ]); }); @@ -532,10 +532,10 @@ describe("Table plugin", () => { deleteColumns(model, ["H"]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, - { zone: "F3:F6", value: ["F"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, + { zone: "F3:F6", value: ["f"] }, ]); }); @@ -550,10 +550,10 @@ describe("Table plugin", () => { addRows(model, "before", 0, 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C4:F7")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C4:C7", value: ["C"] }, - { zone: "D4:D7", value: ["D"] }, - { zone: "E4:E7", value: ["E"] }, - { zone: "F4:F7", value: ["F"] }, + { zone: "C4:C7", value: ["c"] }, + { zone: "D4:D7", value: ["d"] }, + { zone: "E4:E7", value: ["e"] }, + { zone: "F4:F7", value: ["f"] }, ]); }); @@ -561,10 +561,10 @@ describe("Table plugin", () => { addRows(model, "before", 2, 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C4:F7")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C4:C7", value: ["C"] }, - { zone: "D4:D7", value: ["D"] }, - { zone: "E4:E7", value: ["E"] }, - { zone: "F4:F7", value: ["F"] }, + { zone: "C4:C7", value: ["c"] }, + { zone: "D4:D7", value: ["d"] }, + { zone: "E4:E7", value: ["e"] }, + { zone: "F4:F7", value: ["f"] }, ]); }); @@ -572,10 +572,10 @@ describe("Table plugin", () => { addRows(model, "after", 2, 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F7")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C7", value: ["C"] }, - { zone: "D3:D7", value: ["D"] }, - { zone: "E3:E7", value: ["E"] }, - { zone: "F3:F7", value: ["F"] }, + { zone: "C3:C7", value: ["c"] }, + { zone: "D3:D7", value: ["d"] }, + { zone: "E3:E7", value: ["e"] }, + { zone: "F3:F7", value: ["f"] }, ]); }); @@ -583,10 +583,10 @@ describe("Table plugin", () => { addRows(model, "before", 5, 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F7")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C7", value: ["C"] }, - { zone: "D3:D7", value: ["D"] }, - { zone: "E3:E7", value: ["E"] }, - { zone: "F3:F7", value: ["F"] }, + { zone: "C3:C7", value: ["c"] }, + { zone: "D3:D7", value: ["d"] }, + { zone: "E3:E7", value: ["e"] }, + { zone: "F3:F7", value: ["f"] }, ]); }); @@ -594,10 +594,10 @@ describe("Table plugin", () => { addRows(model, "after", 5, 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, - { zone: "F3:F6", value: ["F"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, + { zone: "F3:F6", value: ["f"] }, ]); }); @@ -605,10 +605,10 @@ describe("Table plugin", () => { addRows(model, "after", 7, 1); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, - { zone: "F3:F6", value: ["F"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, + { zone: "F3:F6", value: ["f"] }, ]); }); }); @@ -618,10 +618,10 @@ describe("Table plugin", () => { deleteRows(model, [0]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C2:F5")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C2:C5", value: ["C"] }, - { zone: "D2:D5", value: ["D"] }, - { zone: "E2:E5", value: ["E"] }, - { zone: "F2:F5", value: ["F"] }, + { zone: "C2:C5", value: ["c"] }, + { zone: "D2:D5", value: ["d"] }, + { zone: "E2:E5", value: ["e"] }, + { zone: "F2:F5", value: ["f"] }, ]); }); @@ -629,10 +629,10 @@ describe("Table plugin", () => { deleteRows(model, [3]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F5")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C5", value: ["C"] }, - { zone: "D3:D5", value: ["D"] }, - { zone: "E3:E5", value: ["E"] }, - { zone: "F3:F5", value: ["F"] }, + { zone: "C3:C5", value: ["c"] }, + { zone: "D3:D5", value: ["d"] }, + { zone: "E3:E5", value: ["e"] }, + { zone: "F3:F5", value: ["f"] }, ]); }); @@ -640,10 +640,10 @@ describe("Table plugin", () => { deleteRows(model, [5]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F5")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C5", value: ["C"] }, - { zone: "D3:D5", value: ["D"] }, - { zone: "E3:E5", value: ["E"] }, - { zone: "F3:F5", value: ["F"] }, + { zone: "C3:C5", value: ["c"] }, + { zone: "D3:D5", value: ["d"] }, + { zone: "E3:E5", value: ["e"] }, + { zone: "F3:F5", value: ["f"] }, ]); }); @@ -651,10 +651,10 @@ describe("Table plugin", () => { deleteRows(model, [7]); expect(model.getters.getTables(sheetId)[0].range.zone).toEqual(toZone("C3:F6")); expect(getFilterHiddenValues(model)).toEqual([ - { zone: "C3:C6", value: ["C"] }, - { zone: "D3:D6", value: ["D"] }, - { zone: "E3:E6", value: ["E"] }, - { zone: "F3:F6", value: ["F"] }, + { zone: "C3:C6", value: ["c"] }, + { zone: "D3:D6", value: ["d"] }, + { zone: "E3:E6", value: ["e"] }, + { zone: "F3:F6", value: ["f"] }, ]); });