From 186dcc00f601a74d203372c168431ce6484622de Mon Sep 17 00:00:00 2001 From: Dean Date: Wed, 6 Apr 2022 10:10:53 +0100 Subject: [PATCH 01/12] Initial commit of screen workflow updates --- .../NavigationPanel/DatasourceModal.svelte | 153 ++++++++++++++++++ .../NavigationPanel/NewScreenModal.svelte | 134 ++++++--------- .../NavigationPanel/ScreenDetailsModal.svelte | 28 ++-- .../NavigationPanel/ScreenWizard.svelte | 53 ++++-- 4 files changed, 257 insertions(+), 111 deletions(-) create mode 100644 packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte diff --git a/packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte b/packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte new file mode 100644 index 0000000000..45b721ee49 --- /dev/null +++ b/packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte @@ -0,0 +1,153 @@ + + + + + {#each filteredSources.otherSources as datasource} +
+
+ +
+
+
{datasource.name}
+
+
+ {#if Array.isArray(datasource.entities)} + {#each datasource.entities.filter(table => table._id !== "ta_users") as table} +
x.table === table.name)} + on:click={() => toggleScreenSelection(table)} + > + + + + {table.name} +
+ {/each} + {/if} + {#if datasource["entities"] && !Array.isArray(datasource.entities)} + {#each Object.keys(datasource.entities).filter(table => table._id !== "ta_users") as table_key} +
x.table === datasource.entities[table_key].name + )} + on:click={() => + toggleScreenSelection(datasource.entities[table_key])} + > + + + + {datasource.entities[table_key].name} +
+ {/each} + {/if} + {/each} + + -
- {#if showProgressCircle} - - {/if} -
+ { + analytics.captureEvent(Events.SCREEN.CREATE_ROLE_UPDATED, { + screenAccessRole, + }) + }} label="Screen access" getOptionLabel={role => role.name} getOptionValue={role => role._id} diff --git a/packages/builder/src/components/design/NavigationPanel/ScreenDetailsModal.svelte b/packages/builder/src/components/design/NavigationPanel/ScreenDetailsModal.svelte index c5e76e9948..26d73949d2 100644 --- a/packages/builder/src/components/design/NavigationPanel/ScreenDetailsModal.svelte +++ b/packages/builder/src/components/design/NavigationPanel/ScreenDetailsModal.svelte @@ -4,6 +4,7 @@ import { selectedAccessRole, allScreens } from "builderStore" import { get } from "svelte/store" import { roles } from "stores/backend" + import analytics, { Events } from "analytics" export let onConfirm export let onCancel @@ -53,7 +54,6 @@ cancelText={"Back"} disabled={!screenAccessRole || !screenUrl || routeError || !touched} > - - { + analytics.captureEvent(Events.SCREEN.CREATE_ROLE_UPDATED, { + screenAccessRole, + }) + }} + label="Access" + getOptionLabel={role => role.name} + getOptionValue={role => role._id} + getOptionColor={role => role.color} + options={$roles} + /> +
+ + newScreenModal.show()} + initialUrl={blankScreenUrl} /> From b9f57eecb3a439e6ec44ae487be81f071e3afc1d Mon Sep 17 00:00:00 2001 From: Dean Date: Fri, 22 Apr 2022 14:57:13 +0100 Subject: [PATCH 10/12] Minor modal refactor for testing. Updates to the cypress tests around creating screens --- .../cypress/integration/createBinding.spec.js | 2 +- .../cypress/integration/createScreen.js | 14 +- packages/builder/cypress/support/commands.js | 43 ++++- .../NavigationPanel/DatasourceModal.svelte | 164 +++++++++--------- .../NavigationPanel/NewScreenModal.svelte | 2 +- .../NavigationPanel/ScreenWizard.svelte | 2 +- 6 files changed, 134 insertions(+), 93 deletions(-) diff --git a/packages/builder/cypress/integration/createBinding.spec.js b/packages/builder/cypress/integration/createBinding.spec.js index 8bf1ec8ea4..57cd0cc5fc 100644 --- a/packages/builder/cypress/integration/createBinding.spec.js +++ b/packages/builder/cypress/integration/createBinding.spec.js @@ -26,7 +26,7 @@ filterTests(['smoke', 'all'], () => { it("should add a URL param binding", () => { const paramName = "foo" - cy.createScreen("Test Param", `/test/:${paramName}`) + cy.createScreen(`/test/:${paramName}`) cy.addComponent("Elements", "Paragraph").then(componentId => { addSettingBinding("text", `URL.${paramName}`) // The builder preview pages don't have a real URL, so all we can do diff --git a/packages/builder/cypress/integration/createScreen.js b/packages/builder/cypress/integration/createScreen.js index 75132a22ba..f83de22df8 100644 --- a/packages/builder/cypress/integration/createScreen.js +++ b/packages/builder/cypress/integration/createScreen.js @@ -9,27 +9,27 @@ filterTests(["smoke", "all"], () => { }) it("Should successfully create a screen", () => { - cy.createScreen("Test Screen", "/test") + cy.createScreen("/test") cy.get(".nav-items-container").within(() => { cy.contains("/test").should("exist") }) }) it("Should update the url", () => { - cy.createScreen("Test Screen", "test with spaces") + cy.createScreen("test with spaces") cy.get(".nav-items-container").within(() => { cy.contains("/test-with-spaces").should("exist") }) }) it("Should create a blank screen with the selected access level", () => { - cy.createScreen("Test Screen Admin", "admin only", "Admin") + cy.createScreen("admin only", "Admin") cy.get(".nav-items-container").within(() => { cy.contains("/admin-only").should("exist") }) - cy.createScreen("Test Screen Public", "open to all", "Public") + cy.createScreen("open to all", "Public") cy.get(".nav-items-container").within(() => { cy.contains("/open-to-all").should("exist") @@ -37,5 +37,11 @@ filterTests(["smoke", "all"], () => { cy.get(".nav-item").contains("/test-screen").should("not.exist") }) }) + + it("Should create a set of datasource screens with the selected access level", () => { + + cy.createDatasourceScreen("Cypress Tests", "Public") + + }) }) }) diff --git a/packages/builder/cypress/support/commands.js b/packages/builder/cypress/support/commands.js index 7549270af4..1966957edb 100644 --- a/packages/builder/cypress/support/commands.js +++ b/packages/builder/cypress/support/commands.js @@ -142,7 +142,7 @@ Cypress.Commands.add("createTestApp", () => { const appName = "Cypress Tests" cy.deleteApp(appName) cy.createApp(appName, "This app is used for Cypress testing.") - cy.createScreen("home", "home") + cy.createScreen("home") }) Cypress.Commands.add("createTestTableWithData", () => { @@ -283,28 +283,59 @@ Cypress.Commands.add("navigateToDataSection", () => { }) //Blank -Cypress.Commands.add("createScreen", (screenName, route, accessLevelLabel) => { +Cypress.Commands.add("createScreen", (route, accessLevelLabel) => { cy.contains("Design").click() cy.get("[aria-label=AddCircle]").click() cy.get(".spectrum-Modal").within(() => { - cy.get(".item").contains("Blank").click() + cy.get(".item").contains("Blank screen").click() cy.get(".spectrum-Button").contains("Continue").click({ force: true }) cy.wait(500) }) cy.get(".spectrum-Dialog-grid").within(() => { cy.get(".spectrum-Form-itemField").eq(0).type(route) + cy.get(".spectrum-Button").contains("Continue").click({ force: true }) + cy.wait(1000) + }) + cy.get(".spectrum-Modal").within(() => { if (accessLevelLabel) { cy.get(".spectrum-Picker-label").click() cy.wait(500) cy.contains(accessLevelLabel).click() } - - cy.get(".spectrum-Button").contains("Continue").click({ force: true }) - cy.wait(1000) + cy.get(".spectrum-Button").contains("Done").click({ force: true }) }) }) +Cypress.Commands.add("createDatasourceScreen", (datasourceName, accessLevelLabel) => { + cy.contains("Design").click() + cy.get("[aria-label=AddCircle]").click() + cy.get(".spectrum-Modal").within(() => { + cy.get(".item").contains("Autogenerated screens").click() + cy.get(".spectrum-Button").contains("Continue").click({ force: true }) + cy.wait(500) + }) + cy.get(".spectrum-Modal [data-cy='data-source-modal']").within(() => { + cy.get(".data-source-entry").contains(datasourceName).should("exist") + cy.get(".data-source-entry").contains(datasourceName).click({ force: true }) + + cy.get(".data-source-entry").contains(datasourceName).get(".data-source-check").should("exist") + cy.get(".spectrum-Button").contains("Confirm").click({ force: true }) + }) + + cy.get(".spectrum-Modal").within(() => { + if (accessLevelLabel) { + cy.get(".spectrum-Picker-label").click() + cy.wait(500) + cy.contains(accessLevelLabel).click() + } + cy.get(".spectrum-Button").contains("Done").click({ force: true }) + }) + + cy.contains("Design").click() +}) + + Cypress.Commands.add("navigateToAutogeneratedModal", () => { // Screen name must already exist within data source cy.contains("Design").click() diff --git a/packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte b/packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte index 17a8556831..1cb3856165 100644 --- a/packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte +++ b/packages/builder/src/components/design/NavigationPanel/DatasourceModal.svelte @@ -60,90 +60,94 @@ }) - - - {#each filteredSources as datasource} -
-
-
- + + + + {#each filteredSources as datasource} +
+
+
+ +
+
{datasource.name}
-
{datasource.name}
-
- {#if Array.isArray(datasource.entities)} - {#each datasource.entities.filter(table => table._id !== "ta_users") as table} -
x.table === table.name)} - on:click={() => toggleScreenSelection(table, datasource)} - > - - - - {table.name} - - {#if selectedScreens.find(x => x.table === table.name)} - - - - {/if} -
- {/each} - {/if} - {#if datasource["entities"] && !Array.isArray(datasource.entities)} - {#each Object.keys(datasource.entities).filter(table => table._id !== "ta_users") as table_key} -
x.table === datasource.entities[table_key].name - )} - on:click={() => - toggleScreenSelection( - datasource.entities[table_key], - datasource + {#if Array.isArray(datasource.entities)} + {#each datasource.entities.filter(table => table._id !== "ta_users") as table} +
x.table === table.name )} - > - toggleScreenSelection(table, datasource)} > - - - {datasource.entities[table_key].name} + + + + {table.name} - {#if selectedScreens.find(x => x.table === datasource.entities[table_key].name)} - - - - {/if} -
- {/each} - {/if} -
- {/each} -
-
+ {#if selectedScreens.find(x => x.table === table.name)} + + + + {/if} +
+ {/each} + {/if} + {#if datasource["entities"] && !Array.isArray(datasource.entities)} + {#each Object.keys(datasource.entities).filter(table => table._id !== "ta_users") as table_key} +
x.table === datasource.entities[table_key].name + )} + on:click={() => + toggleScreenSelection( + datasource.entities[table_key], + datasource + )} + > + + + + {datasource.entities[table_key].name} + + {#if selectedScreens.find(x => x.table === datasource.entities[table_key].name)} + + + + {/if} +
+ {/each} + {/if} +
+ {/each} + + +