diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_Widget_Copy_Paste_spec.js b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_Widget_Copy_Paste_spec.js index 8f453239bc97..6caa708659c7 100644 --- a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_Widget_Copy_Paste_spec.js +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/TableV2_Widget_Copy_Paste_spec.js @@ -51,7 +51,7 @@ describe( }); cy.wait(200); cy.get(apiwidget.propertyList).then(function ($lis) { - expect($lis).to.have.length(22); + expect($lis).to.have.length(23); expect($lis.eq(0)).to.contain("{{Table1Copy.selectedRow}}"); expect($lis.eq(1)).to.contain("{{Table1Copy.selectedRows}}"); }); @@ -68,7 +68,7 @@ describe( }); cy.wait(200); cy.get(apiwidget.propertyList).then(function ($lis) { - expect($lis).to.have.length(23); + expect($lis).to.have.length(24); expect($lis.last()).to.contain("{{Table1Copy.filters}}"); }); }); diff --git a/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/check_filterTableData_auto_spec.ts b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/check_filterTableData_auto_spec.ts new file mode 100644 index 000000000000..a9d44e8f755a --- /dev/null +++ b/app/client/cypress/e2e/Regression/ClientSide/Widgets/TableV2/check_filterTableData_auto_spec.ts @@ -0,0 +1,81 @@ +import * as _ from "../../../../../support/Objects/ObjectsCore"; +import dynamicInputLocators from "../../../../../locators/DynamicInput.json"; + +const tableData = `[ + { + "id": 1, + "date": "2023-06-01T12:00:00-06:30", + "email": "test1@gmail.com", + "userName": "test1", + "department": "Marketing" + }, + { + "id": 2, + "date": "2023-06-02T12:00:00-06:30", + "email": "test2@gmail.com", + "userName": "test2", + "department": "Marketing" + }, + { + "id": 3, + "date": "2023-06-03T12:00:00-06:30", + "email": "test3@gmail.com", + "userName": "test3", + "department": "HR" + }, + { + "id": 4, + "date": "2023-06-04T12:00:00-06:30", + "email": "test4@gmail.com", + "userName": "test4", + "department": "HR" + }, + { + "id": 5, + "date": "2023-06-05T12:00:00-06:30", + "email": "test5@gmail.com", + "userName": "test5", + "department": "IT" + }, + { + "id": 6, + "email": "test6@gmail.com", + "userName": "test6", + "date": "2023-06-06T12:00:00-06:30", + "department": "IT" + }, + { + "id": 7, + "date": "2023-06-07T12:00:00-06:30", + "email": "test7@gmail.com", + "userName": "test7", + "department": "Customer Service" + } + ]`; +describe( + "filteredTableData property in autocomplete suggestions of table widget", + { tags: ["@tag.Widget", "@tag.Table"] }, + () => { + it("check 'filteredTableData' property in autocomplete suggestions", () => { + _.agHelper.AddDsl("tableV2NewDsl"); + cy.openPropertyPane("tablewidgetv2"); + _.propPane.EnterJSContext("Table data", tableData); + _.propPane.TogglePropertyState("Allow filtering", "On"); + + _.table.OpenNFilterTable("department", "contains", "Marketing"); + _.table.CloseFilter(); + + cy.openPropertyPane("textwidget"); + cy.testCodeMirror("/"); + cy.get(`${dynamicInputLocators.hints} li`) + .eq(0) + .should("have.text", "Add a binding") + .click(); + _.propPane.TypeTextIntoField("Text", "Table1.", false); + cy.get(`${dynamicInputLocators.hints} li`) + .contains("filteredTableData") + .should("be.visible") + .click(); + }); + }, +); diff --git a/app/client/src/widgets/TableWidgetV2/widget/checkFilteredDataProperty.test.ts b/app/client/src/widgets/TableWidgetV2/widget/checkFilteredDataProperty.test.ts new file mode 100644 index 000000000000..fc54aa3511b9 --- /dev/null +++ b/app/client/src/widgets/TableWidgetV2/widget/checkFilteredDataProperty.test.ts @@ -0,0 +1,95 @@ +import { dataTreeTypeDefCreator } from "utils/autocomplete/dataTreeTypeDefCreator"; +import type { + WidgetEntity, + WidgetEntityConfig, +} from "ee/entities/DataTree/types"; +import { + ENTITY_TYPE, + EvaluationSubstitutionType, +} from "entities/DataTree/dataTreeFactory"; + +import TableWidget from "widgets/TableWidgetV2"; +import { registerWidgets } from "WidgetProvider/factory/registrationHelper"; +describe("Bug: check filteredTableData property in autocomplete definitions of table widget", () => { + it("check filteredTableData property", () => { + registerWidgets([TableWidget]); + const dataTreeEntity: WidgetEntity = { + meta: {}, + ENTITY_TYPE: ENTITY_TYPE.WIDGET, + widgetId: "123", + type: "TABLE_WIDGET_V2", + widgetName: "Table1", + renderMode: "CANVAS", + version: 1, + parentColumnSpace: 1, + parentRowSpace: 2, + leftColumn: 2, + rightColumn: 3, + topRow: 1, + bottomRow: 2, + isLoading: false, + tableData: [ + { id: 1, name: "pavan" }, + { id: 2, name: "anil" }, + { id: 3, name: "radha" }, + ], + filteredTableData: [ + { + id: 1, + name: "pavan", + __originalIndex__: 0, + __primaryKey__: 1, + EditActions1: "", + }, + { + id: 2, + name: "anil", + __originalIndex__: 1, + __primaryKey__: 2, + EditActions1: "", + }, + { + id: 3, + name: "radha", + __originalIndex__: 2, + __primaryKey__: 3, + EditActions1: "", + }, + ], + }; + const dataTreeEntityConfig: WidgetEntityConfig = { + bindingPaths: { + defaultText: EvaluationSubstitutionType.TEMPLATE, + }, + reactivePaths: { + defaultText: EvaluationSubstitutionType.TEMPLATE, + }, + triggerPaths: { + onTextChange: true, + }, + validationPaths: {}, + logBlackList: {}, + propertyOverrideDependency: {}, + overridingPropertyPaths: {}, + privateWidgets: {}, + defaultMetaProps: [], + widgetId: "yolo", + widgetName: "Table1", + type: "TABLE_WIDGET_V2", + ENTITY_TYPE: ENTITY_TYPE.WIDGET, + }; + const { def, entityInfo } = dataTreeTypeDefCreator( + { + Table1: dataTreeEntity, + }, + {}, + dataTreeEntityConfig, + ); + + expect(def).toHaveProperty("Table1.filteredTableData"); + expect(entityInfo.get("Table1")).toStrictEqual({ + type: ENTITY_TYPE.WIDGET, + subType: "TABLE_WIDGET_V2", + }); + }); +}); diff --git a/app/client/src/widgets/TableWidgetV2/widget/index.tsx b/app/client/src/widgets/TableWidgetV2/widget/index.tsx index 046366812074..0fe2792c7c8b 100644 --- a/app/client/src/widgets/TableWidgetV2/widget/index.tsx +++ b/app/client/src/widgets/TableWidgetV2/widget/index.tsx @@ -475,6 +475,7 @@ class TableWidgetV2 extends BaseWidget { isAddRowInProgress: "bool", previousPageVisited: generateTypeDef(widget.previousPageVisited), nextPageVisited: generateTypeDef(widget.nextPageButtonClicked), + filteredTableData: generateTypeDef(widget.filteredTableData), }; if (this.getFeatureFlag(ALLOW_TABLE_WIDGET_SERVER_SIDE_FILTERING)) {