Skip to content

Commit 427f828

Browse files
committed
[IMP] Table side panel : added highlights to the table range
When a table side panel is open, the table range is now highlighted. This makes it easier for users to identify the table they are editing, especially when there are multiple tables in the sheet. Task: 6008091
1 parent bb3f053 commit 427f828

3 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/components/side_panel/table_panel/table_panel.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import { Zone } from "../../../types/misc";
55
import { Range } from "../../../types/range";
66
import { CoreTable, TableConfig } from "../../../types/table";
77

8+
import { HIGHLIGHT_COLOR } from "../../../constants";
89
import { getTableTopLeft } from "../../../helpers/table_helpers";
910
import { SpreadsheetChildEnv } from "../../../types/spreadsheet_env";
11+
import { useHighlights } from "../../helpers/highlight_hook";
1012
import { NumberInput } from "../../number_input/number_input";
1113
import { SelectionInput } from "../../selection_input/selection_input";
1214
import { TableStylePicker } from "../../tables/table_style_picker/table_style_picker";
@@ -44,6 +46,9 @@ export class TablePanel extends Component<TablePanelProps, SpreadsheetChildEnv>
4446

4547
setup() {
4648
const sheetId = this.env.model.getters.getActiveSheetId();
49+
useHighlights({
50+
highlights: [{ range: this.props.table.range, noFill: true, color: HIGHLIGHT_COLOR }],
51+
});
4752
this.state = useState({
4853
tableZoneErrors: [],
4954
tableXc: this.env.model.getters.getRangeString(this.props.table.range, sheetId),

src/registries/side_panel_registry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ sidePanelRegistry.add("TableSidePanel", {
129129
computeState: (getters: Getters, props: TablePanelProps) => {
130130
const sheetId = props.table.range.sheetId;
131131
const table = getters.getCoreTableById(sheetId, props.table.id);
132-
if (!table) {
132+
if (sheetId !== getters.getActiveSheetId() || !table) {
133133
return { isOpen: false };
134134
}
135135
return { isOpen: true, props: { ...props, table }, key: props.table.id };

tests/table/table_panel_component.test.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ import {
1010
} from "../test_helpers/commands_helpers";
1111
import { click, setInputValueAndTrigger, simulateClick } from "../test_helpers/dom_helper";
1212
import { getCellRawContent } from "../test_helpers/getters_helpers";
13-
import { mountComponentWithPortalTarget, nextTick, setGrid } from "../test_helpers/helpers";
13+
import {
14+
getHighlightsFromStore,
15+
mountComponentWithPortalTarget,
16+
nextTick,
17+
setGrid,
18+
} from "../test_helpers/helpers";
1419

1520
import { Model } from "../../src";
1621
import { SidePanels } from "../../src/components/side_panel/side_panels/side_panels";
@@ -170,6 +175,12 @@ describe("Table side panel", () => {
170175
expect(getTable(model, sheetId).range.zone).toEqual(toZone("A1"));
171176
});
172177

178+
test("the table range is highlighted when the side panel is open", async () => {
179+
expect(getHighlightsFromStore(env).map((h) => zoneToXc(h.range.zone))).toEqual(["A1:C3"]);
180+
await simulateClick(".o-sidePanelClose");
181+
expect(getHighlightsFromStore(env).map((h) => zoneToXc(h.range.zone))).toEqual([]);
182+
});
183+
173184
test("Changing the selection does not change the edited table", async () => {
174185
createTable(model, "D1:D2");
175186
updateTableConfig(model, "D1:D2", { numberOfHeaders: 0 });

0 commit comments

Comments
 (0)