diff --git a/packages/builder/cypress/support/commands.js b/packages/builder/cypress/support/commands.js index 94faa124a8..1a5270e33b 100644 --- a/packages/builder/cypress/support/commands.js +++ b/packages/builder/cypress/support/commands.js @@ -120,17 +120,17 @@ Cypress.Commands.add("createUser", (email, password, role) => { cy.get(".modal").within(() => { cy.get("input") .first() - .type(password) + .type(email) cy.get("input") .eq(1) - .type(email) + .type(password) cy.get("select") .first() .select(role) // Save cy.get(".buttons") - .contains("Create Row") + .contains("Create User") .click() }) }) diff --git a/packages/builder/src/builderStore/index.js b/packages/builder/src/builderStore/index.js index 503d9b08a7..887ef733e4 100644 --- a/packages/builder/src/builderStore/index.js +++ b/packages/builder/src/builderStore/index.js @@ -70,7 +70,7 @@ export const allScreens = derived(store, $store => { export const mainLayout = derived(store, $store => { return $store.layouts?.find( - layout => layout.props?._id === LAYOUT_NAMES.MASTER.PRIVATE + layout => layout._id === LAYOUT_NAMES.MASTER.PRIVATE ) }) diff --git a/packages/builder/src/components/backend/DataTable/Table.svelte b/packages/builder/src/components/backend/DataTable/Table.svelte index 718e56b31b..3787c05a1b 100644 --- a/packages/builder/src/components/backend/DataTable/Table.svelte +++ b/packages/builder/src/components/backend/DataTable/Table.svelte @@ -75,18 +75,29 @@ ] } + const canEditColumn = key => { + if (!allowEditing) { + return false + } + return !(isUsersTable && ["email", "roleId"].indexOf(key) !== -1) + } + Object.entries(schema || {}).forEach(([key, value]) => { result.push({ headerCheckboxSelection: false, headerComponent: TableHeader, headerComponentParams: { field: schema[key], - editable: allowEditing, + editable: canEditColumn(key), }, headerName: value.displayFieldName || key, field: key, sortable: true, - cellRenderer: getRenderer(schema[key], true), + cellRenderer: getRenderer({ + schema: schema[key], + editable: true, + isUsersTable, + }), cellRendererParams: { selectRelationship, }, diff --git a/packages/builder/src/components/backend/DataTable/cells/RoleCell.svelte b/packages/builder/src/components/backend/DataTable/cells/RoleCell.svelte new file mode 100644 index 0000000000..f3b90aaf98 --- /dev/null +++ b/packages/builder/src/components/backend/DataTable/cells/RoleCell.svelte @@ -0,0 +1,43 @@ + + + + + +
{roleName}
diff --git a/packages/builder/src/components/backend/DataTable/cells/cellRenderers.js b/packages/builder/src/components/backend/DataTable/cells/cellRenderers.js index f3a7b86740..15a7910186 100644 --- a/packages/builder/src/components/backend/DataTable/cells/cellRenderers.js +++ b/packages/builder/src/components/backend/DataTable/cells/cellRenderers.js @@ -3,15 +3,23 @@ import EditRow from "../modals/EditRow.svelte" import CreateEditUser from "../modals/CreateEditUser.svelte" import DeleteRow from "../modals/DeleteRow.svelte" import RelationshipDisplay from "./RelationshipCell.svelte" +import RoleCell from "./RoleCell.svelte" const renderers = { attachment: attachmentRenderer, link: linkedRowRenderer, } -export function getRenderer(schema, editable) { +export function getRenderer({ schema, editable, isUsersTable }) { + const rendererParams = { + options: schema.options, + constraints: schema.constraints, + editable, + } if (renderers[schema.type]) { - return renderers[schema.type](schema.options, schema.constraints, editable) + return renderers[schema.type](rendererParams) + } else if (isUsersTable && schema.name === "roleId") { + return roleRenderer(rendererParams) } else { return false } @@ -63,15 +71,14 @@ export function userRowRenderer(params) { return container } -/* eslint-disable no-unused-vars */ -function attachmentRenderer(options, constraints, editable) { +function attachmentRenderer() { return params => { const container = document.createElement("div") container.style.height = "100%" container.style.display = "flex" container.style.alignItems = "center" - const attachmentInstance = new AttachmentList({ + new AttachmentList({ target: container, props: { files: params.value || [], @@ -82,7 +89,6 @@ function attachmentRenderer(options, constraints, editable) { } } -/* eslint-disable no-unused-vars */ function linkedRowRenderer() { return params => { let container = document.createElement("div") @@ -102,3 +108,21 @@ function linkedRowRenderer() { return container } } + +function roleRenderer() { + return params => { + let container = document.createElement("div") + container.style.display = "grid" + container.style.height = "100%" + container.style.alignItems = "center" + + new RoleCell({ + target: container, + props: { + roleId: params.value, + }, + }) + + return container + } +} diff --git a/packages/builder/src/components/backend/TableNavigator/TableNavigator.svelte b/packages/builder/src/components/backend/TableNavigator/TableNavigator.svelte index 39ac8a1fdc..30a0568e8e 100644 --- a/packages/builder/src/components/backend/TableNavigator/TableNavigator.svelte +++ b/packages/builder/src/components/backend/TableNavigator/TableNavigator.svelte @@ -2,7 +2,6 @@ import { goto } from "@sveltech/routify" import { backendUiStore } from "builderStore" import { TableNames } from "constants" - import ListItem from "./ListItem.svelte" import CreateTableModal from "./modals/CreateTableModal.svelte" import EditTablePopover from "./popovers/EditTablePopover.svelte" import EditViewPopover from "./popovers/EditViewPopover.svelte" @@ -47,7 +46,9 @@ text={table.name} selected={selectedView === `all_${table._id}`} on:click={() => selectTable(table)}> - + {#if table._id !== TableNames.USERS} + + {/if} {#each Object.keys(table.views || {}) as viewName} diff --git a/packages/builder/src/components/userInterface/ComponentNavigationTree/PathTree.svelte b/packages/builder/src/components/userInterface/ComponentNavigationTree/PathTree.svelte index 6fefd92cd8..765041b184 100644 --- a/packages/builder/src/components/userInterface/ComponentNavigationTree/PathTree.svelte +++ b/packages/builder/src/components/userInterface/ComponentNavigationTree/PathTree.svelte @@ -50,6 +50,7 @@ {#if selectedScreen?._id === screenId} diff --git a/packages/builder/src/components/userInterface/ComponentNavigationTree/index.svelte b/packages/builder/src/components/userInterface/ComponentNavigationTree/index.svelte index d1ed4b687e..9528b2844c 100644 --- a/packages/builder/src/components/userInterface/ComponentNavigationTree/index.svelte +++ b/packages/builder/src/components/userInterface/ComponentNavigationTree/index.svelte @@ -1,11 +1,12 @@
- {#each Object.keys($store.routes || {}) as path} + {#each paths as path} {/each}
diff --git a/packages/client/src/store/routes.js b/packages/client/src/store/routes.js index c69bb83ef0..88ca90df73 100644 --- a/packages/client/src/store/routes.js +++ b/packages/client/src/store/routes.js @@ -21,6 +21,12 @@ const createRouteStore = () => { }) }) }) + + // Sort route by paths so that the router matches correctly + routes.sort((a, b) => { + return a.path > b.path ? -1 : 1 + }) + store.update(state => { state.routes = routes return state