diff --git a/app/client/cypress/fixtures/example.json b/app/client/cypress/fixtures/example.json index b0193ab60f..0c97a68480 100644 --- a/app/client/cypress/fixtures/example.json +++ b/app/client/cypress/fixtures/example.json @@ -120,6 +120,7 @@ "TableInput": [ { "id": 2381224, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGNiAAAABgADNjd8qAAAAABJRU5ErkJggg==", "email": "michael.lawson@reqres.in", "userName": "Michael Lawson", "productName": "Chicken Sandwich", @@ -127,6 +128,7 @@ }, { "id": 2736212, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGNiAAAABgADNjd8qAAAAABJRU5ErkJggg==", "email": "lindsay.ferguson@reqres.in", "userName": "Lindsay Ferguson", "productName": "Tuna Salad", @@ -134,6 +136,7 @@ }, { "id": 6788734, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGNiAAAABgADNjd8qAAAAABJRU5ErkJggg==", "email": "tobias.funke@reqres.in", "userName": "Tobias Funke", "productName": "Beef steak", @@ -141,6 +144,7 @@ }, { "id": 7434532, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGNiAAAABgADNjd8qAAAAABJRU5ErkJggg==", "email": "byron.fields@reqres.in", "userName": "Byron Fields", "productName": "Chicken Sandwich", @@ -148,6 +152,7 @@ }, { "id": 7434532, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGNiAAAABgADNjd8qAAAAABJRU5ErkJggg==", "email": "ryan.holmes@reqres.in", "userName": "Ryan Holmes", "productName": "Avocado Panini", diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/DisplayWidgets/Table_spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/DisplayWidgets/Table_spec.js index 587fb6f576..87c5320215 100644 --- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/DisplayWidgets/Table_spec.js +++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/DisplayWidgets/Table_spec.js @@ -39,18 +39,33 @@ describe("Table Widget Functionality", function() { cy.get(commonlocators.editPropCrossButton).click(); cy.PublishtheApp(); }); + it("Table Widget Functionality To Verify The Data", function() { cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); }); }); + it("Table Widget Functionality To Show a Base64 Image", function() { + cy.get(publish.backToEditor).click(); + cy.openPropertyPane("tablewidget"); + cy.editColumn("image"); + cy.changeColumnType("Image"); + cy.isSelectRow(1); + + const index = 1; + const imageVal = this.data.TableInput[index].image; + cy.readTableLinkPublish(index, "1").then((hrefVal) => { + expect(hrefVal).to.be.equal(imageVal); + }); + }); + it("Table Widget Functionality To Search The Data", function() { cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); @@ -58,7 +73,7 @@ describe("Table Widget Functionality", function() { .first() .type(tabData); cy.wait(500); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); }); @@ -69,7 +84,7 @@ describe("Table Widget Functionality", function() { .clear() .type("7434532"); cy.wait(1000); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("3", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Byron Fields"); }); @@ -82,7 +97,7 @@ describe("Table Widget Functionality", function() { .clear(); cy.wait(1000); cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); @@ -100,14 +115,14 @@ describe("Table Widget Functionality", function() { cy.get(publish.canvas) .first() .click(); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); }); cy.get(publish.filterBtn).click(); cy.get(publish.removeFilter).click(); cy.wait(500); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Michael Lawson"); }); @@ -119,7 +134,7 @@ describe("Table Widget Functionality", function() { it("Table Widget Functionality To Filter The Data using contains", function() { cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); @@ -137,14 +152,14 @@ describe("Table Widget Functionality", function() { cy.get(publish.canvas) .first() .click(); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); }); cy.get(publish.filterBtn).click(); cy.get(publish.removeFilter).click(); cy.wait(500); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Michael Lawson"); }); @@ -156,7 +171,7 @@ describe("Table Widget Functionality", function() { it("Table Widget Functionality To Filter The Data using starts with ", function() { cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); @@ -174,14 +189,14 @@ describe("Table Widget Functionality", function() { cy.get(publish.canvas) .first() .click(); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); }); cy.get(publish.filterBtn).click(); cy.get(publish.removeFilter).click(); cy.wait(500); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Michael Lawson"); }); @@ -193,7 +208,7 @@ describe("Table Widget Functionality", function() { it("Table Widget Functionality To Filter The Data using ends with ", function() { cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); @@ -211,14 +226,14 @@ describe("Table Widget Functionality", function() { cy.get(publish.canvas) .first() .click(); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); }); cy.get(publish.filterBtn).click(); cy.get(publish.removeFilter).click(); cy.wait(500); - cy.readTabledataPublish("0", "2").then((tabData) => { + cy.readTabledataPublish("0", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Michael Lawson"); }); @@ -230,7 +245,7 @@ describe("Table Widget Functionality", function() { it("Table Widget Functionality To Check Compact Mode", function() { cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then((tabData) => { + cy.readTabledataPublish("1", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); @@ -238,7 +253,7 @@ describe("Table Widget Functionality", function() { cy.get(publish.compactOpt) .contains("Tall") .click(); - cy.scrollTabledataPublish("3", "2").then((tabData) => { + cy.scrollTabledataPublish("3", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Byron Fields"); }); @@ -246,7 +261,7 @@ describe("Table Widget Functionality", function() { cy.get(publish.compactOpt) .contains("Short") .click(); - cy.readTabledataPublish("4", "2").then((tabData) => { + cy.readTabledataPublish("4", "3").then((tabData) => { const tabValue = tabData; expect(tabValue).to.be.equal("Ryan Holmes"); }); @@ -261,7 +276,7 @@ describe("Table Widget Functionality", function() { .first() .click(); cy.isSelectRow(1); - cy.readTabledataPublish("1", "2").then(tabData => { + cy.readTabledataPublish("1", "3").then(tabData => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); cy.log("the value is" + tabValue); @@ -270,7 +285,7 @@ describe("Table Widget Functionality", function() { .contains("userName") .click(); cy.get(publish.containerWidget).click(); - cy.readTabledataPublish("1", "2").then(tabData => { + cy.readTabledataPublish("1", "3").then(tabData => { const tabValue = tabData; expect(tabValue).to.not.equal("Lindsay Ferguson"); }); @@ -279,7 +294,7 @@ describe("Table Widget Functionality", function() { .contains("userName") .click(); cy.get(publish.containerWidget).click(); - cy.readTabledataPublish("1", "2").then(tabData => { + cy.readTabledataPublish("1", "3").then(tabData => { const tabValue = tabData; expect(tabValue).to.be.equal("Lindsay Ferguson"); }); diff --git a/app/client/cypress/support/commands.js b/app/client/cypress/support/commands.js index 63ef42eae6..2ac304b46b 100644 --- a/app/client/cypress/support/commands.js +++ b/app/client/cypress/support/commands.js @@ -2098,6 +2098,12 @@ Cypress.Commands.add("scrollTabledataPublish", (rowNum, colNum) => { return tabVal; }); +Cypress.Commands.add("readTableLinkPublish", (rowNum, colNum) => { + const selector = `.t--widget-tablewidget .tbody .td[data-rowindex=${rowNum}][data-colindex=${colNum}] a`; + const hrefVal = cy.get(selector).invoke("attr", "href"); + return hrefVal; +}); + Cypress.Commands.add("assertEvaluatedValuePopup", (expectedType) => { cy.get(dynamicInputLocators.evaluatedValue) .should("be.visible") diff --git a/app/client/src/components/designSystems/appsmith/TableComponent/TableUtilities.tsx b/app/client/src/components/designSystems/appsmith/TableComponent/TableUtilities.tsx index 73e89f996a..6f2c38ed4b 100644 --- a/app/client/src/components/designSystems/appsmith/TableComponent/TableUtilities.tsx +++ b/app/client/src/components/designSystems/appsmith/TableComponent/TableUtilities.tsx @@ -63,14 +63,16 @@ export const renderCell = ( ); } - const imageRegex = /(http(s?):)([/|.|\w|\s|-])*\.(?:jpeg|jpg|gif|png)??(?:&?[^=&]*=[^=&]*)*/; + const imageSplitRegex = /[^(base64)],/; + const imageUrlRegex = /(http(s?):)([/|.|\w|\s|-])*\.(?:jpeg|jpg|gif|png)??(?:&?[^=&]*=[^=&]*)*/; + const base64ImageRegex = /^data:image\/.*;base64/; return ( {value .toString() - .split(",") + .split(imageSplitRegex) .map((item: string, index: number) => { - if (imageRegex.test(item)) { + if (imageUrlRegex.test(item) || base64ImageRegex.test(item)) { return ( e.stopPropagation()}