diff --git a/client/cypress/integration/visualizations/table/.mocks/wide-dataset.js b/client/cypress/integration/visualizations/table/.mocks/wide-dataset.js
deleted file mode 100644
index e72384ec53..0000000000
--- a/client/cypress/integration/visualizations/table/.mocks/wide-dataset.js
+++ /dev/null
@@ -1,33 +0,0 @@
-const loremIpsum =
-"Lorem ipsum dolor sit amet consectetur adipiscing elit" +
-"sed do eiusmod tempor incididunt ut labore et dolore magna aliqua";
-
-export const query = `
- SELECT '${loremIpsum}' AS a, '${loremIpsum}' AS b, '${loremIpsum}' AS c, '${loremIpsum}' AS d, '${loremIpsum}' as e
-`;
-
-export const config = {
- itemsPerPage: 10,
- columns: [
- {
- name: "a",
- displayAs: "string",
- },
- {
- name: "b",
- displayAs: "string",
- },
- {
- name: "c",
- displayAs: "string",
- },
- {
- name: "d",
- displayAs: "string",
- },
- {
- name: "e",
- displayAs: "string",
- }
- ]
-}
\ No newline at end of file
diff --git a/client/cypress/integration/visualizations/table/table_spec.js b/client/cypress/integration/visualizations/table/table_spec.js
index 2d499633d4..3191bc82b3 100644
--- a/client/cypress/integration/visualizations/table/table_spec.js
+++ b/client/cypress/integration/visualizations/table/table_spec.js
@@ -8,7 +8,6 @@ import * as AllCellTypes from "./.mocks/all-cell-types";
import * as MultiColumnSort from "./.mocks/multi-column-sort";
import * as SearchInData from "./.mocks/search-in-data";
import * as LargeDataset from "./.mocks/large-dataset";
-import * as WideDataSet from "./.mocks/wide-dataset";
function prepareVisualization(query, type, name, options) {
return cy
@@ -23,10 +22,7 @@ function prepareVisualization(query, type, name, options) {
cy.get("body").type("{alt}D");
// do some pre-checks here to ensure that visualization was created and is visible
- cy.getByTestId("TableVisualization")
- .should("exist")
- .find("table")
- .should("exist");
+ cy.getByTestId("TableVisualization").should("exist").find("table").should("exist");
return cy.then(() => ({ queryId, visualizationId }));
});
@@ -54,7 +50,7 @@ describe("Table", () => {
});
describe("Sorting data", () => {
- beforeEach(function() {
+ beforeEach(function () {
const { query, config } = MultiColumnSort;
prepareVisualization(query, "TABLE", "Sort data", config).then(({ queryId, visualizationId }) => {
this.queryId = queryId;
@@ -62,94 +58,30 @@ describe("Table", () => {
});
});
- it("sorts data by a single column", function() {
- cy.getByTestId("TableVisualization")
- .find("table th")
- .contains("c")
- .should("exist")
- .click();
+ it("sorts data by a single column", function () {
+ cy.getByTestId("TableVisualization").find("table th").contains("c").should("exist").click();
cy.percySnapshot("Visualizations - Table (Single-column sort)", { widths: [viewportWidth] });
});
- it("sorts data by a multiple columns", function() {
- cy.getByTestId("TableVisualization")
- .find("table th")
- .contains("a")
- .should("exist")
- .click();
+ it("sorts data by a multiple columns", function () {
+ cy.getByTestId("TableVisualization").find("table th").contains("a").should("exist").click();
cy.get("body").type("{shift}", { release: false });
- cy.getByTestId("TableVisualization")
- .find("table th")
- .contains("b")
- .should("exist")
- .click();
+ cy.getByTestId("TableVisualization").find("table th").contains("b").should("exist").click();
cy.percySnapshot("Visualizations - Table (Multi-column sort)", { widths: [viewportWidth] });
});
- it("sorts data in reverse order", function() {
- cy.getByTestId("TableVisualization")
- .find("table th")
- .contains("c")
- .should("exist")
- .click()
- .click();
+ it("sorts data in reverse order", function () {
+ cy.getByTestId("TableVisualization").find("table th").contains("c").should("exist").click().click();
cy.percySnapshot("Visualizations - Table (Single-column reverse sort)", { widths: [viewportWidth] });
});
});
- describe("Fixing columns", () => {
- it("fixes the correct number of columns", () => {
- const { query, config } = WideDataSet;
- prepareVisualization(query, "TABLE", "All cell types", config);
- cy.getByTestId("EditVisualization").click();
- cy.contains("span", "Grid").click();
- cy.getByTestId("FixedColumns").click();
- cy.contains(".ant-select-item-option-content", "1").click();
- cy.contains("Save").click();
- // eslint-disable-next-line cypress/no-unnecessary-waiting
- cy.wait(500); //add some waiting to make sure table visualization is saved
-
- cy.get(".ant-table-thead")
- .find("th.ant-table-cell-fix-left")
- .then(fixedCols => {
- expect(fixedCols.length).to.equal(1);
- });
-
- cy.get(".ant-table-content").scrollTo("right", { duration: 1000 });
- cy.get(".ant-table-content").scrollTo("left", { duration: 1000 });
- });
-
- it("doesn't let user fix too many columns", () => {
- const { query, config } = MultiColumnSort;
- prepareVisualization(query, "TABLE", "Test data", config);
- cy.getByTestId("EditVisualization").click();
- cy.contains("span", "Grid").click();
- cy.getByTestId("FixedColumns").click();
- cy.get(".ant-select-item-option-content");
- cy.contains(".ant-select-item-option-content", "3").should("not.exist");
- cy.contains(".ant-select-item-option-content", "4").should("not.exist");
- });
-
- it("doesn't cause issues when freezing column off of page", () => {
- const { query, config } = WideDataSet;
- prepareVisualization(query, "TABLE", "Test data", config);
- cy.getByTestId("EditVisualization").click();
- cy.contains("span", "Grid").click();
- cy.getByTestId("FixedColumns").click();
- cy.contains(".ant-select-item-option-content", "4").click();
- cy.contains("Save").click();
- });
- });
-
it("searches in multiple columns", () => {
const { query, config } = SearchInData;
prepareVisualization(query, "TABLE", "Search", config).then(({ visualizationId }) => {
- cy.getByTestId("TableVisualization")
- .find("table input")
- .should("exist")
- .type("test");
+ cy.getByTestId("TableVisualization").find("table input").should("exist").type("test");
cy.percySnapshot("Visualizations - Table (Search in data)", { widths: [viewportWidth] });
});
});
diff --git a/client/cypress/support/visualizations/table.js b/client/cypress/support/visualizations/table.js
index 7b290a1250..42645ed270 100644
--- a/client/cypress/support/visualizations/table.js
+++ b/client/cypress/support/visualizations/table.js
@@ -1,12 +1,10 @@
export function expectTableToHaveLength(length) {
- cy.getByTestId("TableVisualization")
- .find("tbody tr.ant-table-row")
- .should("have.length", length);
+ cy.getByTestId("TableVisualization").find("tbody tr").should("have.length", length);
}
export function expectFirstColumnToHaveMembers(values) {
cy.getByTestId("TableVisualization")
- .find("tbody tr.ant-table-row td:first-child")
- .then($cell => Cypress.$.map($cell, item => Cypress.$(item).text()))
- .then(firstColumnCells => expect(firstColumnCells).to.have.members(values));
+ .find("tbody tr td:first-child")
+ .then(($cell) => Cypress.$.map($cell, (item) => Cypress.$(item).text()))
+ .then((firstColumnCells) => expect(firstColumnCells).to.have.members(values));
}
diff --git a/viz-lib/src/visualizations/table/Editor/GridSettings.tsx b/viz-lib/src/visualizations/table/Editor/GridSettings.tsx
index dc0688b135..73aa57ac21 100644
--- a/viz-lib/src/visualizations/table/Editor/GridSettings.tsx
+++ b/viz-lib/src/visualizations/table/Editor/GridSettings.tsx
@@ -1,51 +1,28 @@
import { map } from "lodash";
-import React, { useState } from "react";
+import React from "react";
import { Section, Select } from "@/components/visualizations/editor";
import { EditorPropTypes } from "@/visualizations/prop-types";
const ALLOWED_ITEM_PER_PAGE = [5, 10, 15, 20, 25, 50, 100, 150, 200, 250, 500];
-const ALLOWED_COLS_TO_FIX = [0, 1, 2, 3, 4]
-
export default function GridSettings({ options, onOptionsChange }: any) {
- const numCols = options.columns.length;
- const maxColsToFix = Math.min(4, numCols - 1);
-
return (
-
- {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never' but its value is 'Element'. */}
-
-
-
- {/* @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never' but its value is 'Element'. */}
-
-
-
-
+ // @ts-expect-error ts-migrate(2745) FIXME: This JSX tag's 'children' prop expects type 'never... Remove this comment to see the full error message
+
+
+
);
}
diff --git a/viz-lib/src/visualizations/table/Editor/__snapshots__/ColumnsSettings.test.tsx.snap b/viz-lib/src/visualizations/table/Editor/__snapshots__/ColumnsSettings.test.tsx.snap
index b2175a0c4d..669b2e57e0 100644
--- a/viz-lib/src/visualizations/table/Editor/__snapshots__/ColumnsSettings.test.tsx.snap
+++ b/viz-lib/src/visualizations/table/Editor/__snapshots__/ColumnsSettings.test.tsx.snap
@@ -13,7 +13,6 @@ Object {
],
"dateTimeFormat": undefined,
"displayAs": "string",
- "fixed": false,
"highlightLinks": false,
"imageHeight": "",
"imageTitleTemplate": "{{ @ }}",
@@ -47,7 +46,6 @@ Object {
],
"dateTimeFormat": undefined,
"displayAs": "number",
- "fixed": false,
"highlightLinks": false,
"imageHeight": "",
"imageTitleTemplate": "{{ @ }}",
@@ -81,7 +79,6 @@ Object {
],
"dateTimeFormat": undefined,
"displayAs": "string",
- "fixed": false,
"highlightLinks": false,
"imageHeight": "",
"imageTitleTemplate": "{{ @ }}",
@@ -115,7 +112,6 @@ Object {
],
"dateTimeFormat": undefined,
"displayAs": "string",
- "fixed": false,
"highlightLinks": false,
"imageHeight": "",
"imageTitleTemplate": "{{ @ }}",
@@ -149,7 +145,6 @@ Object {
],
"dateTimeFormat": undefined,
"displayAs": "string",
- "fixed": false,
"highlightLinks": false,
"imageHeight": "",
"imageTitleTemplate": "{{ @ }}",
diff --git a/viz-lib/src/visualizations/table/Renderer.tsx b/viz-lib/src/visualizations/table/Renderer.tsx
index 6dbb57abd5..3812e82b82 100644
--- a/viz-lib/src/visualizations/table/Renderer.tsx
+++ b/viz-lib/src/visualizations/table/Renderer.tsx
@@ -84,13 +84,6 @@ export default function Renderer({ options, data }: any) {
const [searchTerm, setSearchTerm] = useState("");
const [orderBy, setOrderBy] = useState([]);
- const columnsToFix = new Set();
- for (let i = 0; i < options.fixedColumns; i++) {
- if (options.columns[i]) {
- columnsToFix.add(options.columns[i].name);
- }
- }
-
const searchColumns = useMemo(() => filter(options.columns, "allowSearch"), [options.columns]);
const tableColumns = useMemo(() => {
@@ -104,7 +97,7 @@ export default function Renderer({ options, data }: any) {
// Remove text selection - may occur accidentally
// @ts-expect-error ts-migrate(2531) FIXME: Object is possibly 'null'.
document.getSelection().removeAllRanges();
- }, columnsToFix);
+ });
}, [options.columns, searchColumns, orderBy]);
const preparedRows = useMemo(() => sortRows(filterRows(initRows(data.rows), searchTerm, searchColumns), orderBy), [
@@ -141,7 +134,6 @@ export default function Renderer({ options, data }: any) {
showSizeChanger: false,
}}
showSorterTooltip={false}
- scroll = {{x : 'max-content'}}
/>
);
diff --git a/viz-lib/src/visualizations/table/getOptions.ts b/viz-lib/src/visualizations/table/getOptions.ts
index 2c4a090e39..bcde21bbd6 100644
--- a/viz-lib/src/visualizations/table/getOptions.ts
+++ b/viz-lib/src/visualizations/table/getOptions.ts
@@ -4,7 +4,6 @@ import { visualizationsSettings } from "@/visualizations/visualizationsSettings"
const DEFAULT_OPTIONS = {
itemsPerPage: 25,
paginationSize: "default", // not editable through Editor
- fixedColumns: 0,
};
const filterTypes = ["filter", "multi-filter", "multiFilter"];
@@ -57,7 +56,6 @@ function getDefaultColumnsOptions(columns: any) {
// `string` cell options
allowHTML: true,
highlightLinks: false,
- fixed: false,
}));
}
diff --git a/viz-lib/src/visualizations/table/renderer.less b/viz-lib/src/visualizations/table/renderer.less
index 16408381e1..1c538037ab 100644
--- a/viz-lib/src/visualizations/table/renderer.less
+++ b/viz-lib/src/visualizations/table/renderer.less
@@ -21,6 +21,7 @@
left: 0;
top: 0;
border-top: 0;
+ z-index: 1;
background: #fafafa !important;
}
}
@@ -156,11 +157,3 @@
color: @text-color-secondary;
}
}
-
-.ant-table-cell-fix-left{
- background-color: #fff !important;
-}
-
-.ant-table-tbody > tr.ant-table-row:hover > .ant-table-cell-fix-left {
- background-color: rgb(248, 249, 250) !important;
-}
\ No newline at end of file
diff --git a/viz-lib/src/visualizations/table/utils.tsx b/viz-lib/src/visualizations/table/utils.tsx
index 64ceef1d30..298cdb7f96 100644
--- a/viz-lib/src/visualizations/table/utils.tsx
+++ b/viz-lib/src/visualizations/table/utils.tsx
@@ -50,7 +50,7 @@ function getOrderByInfo(orderBy: any) {
return result;
}
-export function prepareColumns(columns: any, searchInput: any, orderBy: any, onOrderByChange: any, columnsToFix: Set) {
+export function prepareColumns(columns: any, searchInput: any, orderBy: any, onOrderByChange: any) {
columns = filter(columns, "visible");
columns = sortBy(columns, "order");
@@ -96,7 +96,6 @@ export function prepareColumns(columns: any, searchInput: any, orderBy: any, onO
}),
onClick: (event: any) => onOrderByChange(toggleOrderBy(column.name, orderBy, event.shiftKey)),
}),
- fixed: columnsToFix.has(column.name) ? 'left' : false
};
// @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message