From 2477f4f40b852e08b64a3fcfb01ad00cdc39d641 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 12 Jan 2023 15:39:46 +0000 Subject: [PATCH 01/26] Update click outside handler to handle modals properly --- packages/bbui/src/Actions/click_outside.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/bbui/src/Actions/click_outside.js b/packages/bbui/src/Actions/click_outside.js index 9ea247f997..6842b94a32 100644 --- a/packages/bbui/src/Actions/click_outside.js +++ b/packages/bbui/src/Actions/click_outside.js @@ -5,7 +5,7 @@ let clickHandlers = [] * Handle a body click event */ const handleClick = event => { - // Ignore click if needed + // Ignore click if this is an ignored class for (let className of ignoredClasses) { if (event.target.closest(className)) { return @@ -14,9 +14,18 @@ const handleClick = event => { // Process handlers clickHandlers.forEach(handler => { - if (!handler.element.contains(event.target)) { - handler.callback?.(event) + if (handler.element.contains(event.target)) { + return } + + // Ignore clicks for modals, unless the handler is registered from a modal + const sourceInModal = handler.element.closest(".spectrum-Modal") != null + const clickInModal = event.target.closest(".spectrum-Modal") != null + if (clickInModal && !sourceInModal) { + return + } + + handler.callback?.(event) }) } document.documentElement.addEventListener("click", handleClick, true) From 034871ebad83081096ee01e7f24248f099dce30b Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 12 Jan 2023 15:41:00 +0000 Subject: [PATCH 02/26] Remove log --- packages/bbui/src/Actions/position_dropdown.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/bbui/src/Actions/position_dropdown.js b/packages/bbui/src/Actions/position_dropdown.js index e89f28a69e..463b69169f 100644 --- a/packages/bbui/src/Actions/position_dropdown.js +++ b/packages/bbui/src/Actions/position_dropdown.js @@ -3,7 +3,6 @@ export default function positionDropdown( { anchor, align, maxWidth, useAnchorWidth } ) { const update = () => { - console.log("update") const anchorBounds = anchor.getBoundingClientRect() const elementBounds = element.getBoundingClientRect() let styles = { From e32dc5237ad9157a2a8a5f91be3a609dc4462d5f Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 12 Jan 2023 15:42:59 +0000 Subject: [PATCH 03/26] Fix mobile menu upgrade button not closing menu --- .../src/pages/builder/portal/_components/MobileMenu.svelte | 2 +- .../pages/builder/portal/_components/UpgradeButton.svelte | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte b/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte index bfb08f9b36..8baf7609d0 100644 --- a/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte +++ b/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte @@ -38,7 +38,7 @@ {/each}
- +
diff --git a/packages/builder/src/pages/builder/portal/_components/UpgradeButton.svelte b/packages/builder/src/pages/builder/portal/_components/UpgradeButton.svelte index 29066b8117..f1d8b5c762 100644 --- a/packages/builder/src/pages/builder/portal/_components/UpgradeButton.svelte +++ b/packages/builder/src/pages/builder/portal/_components/UpgradeButton.svelte @@ -7,6 +7,7 @@ {#if $admin.cloud && $auth?.user?.accountPortalAccess} {:else if !$admin.cloud && $auth.isAdmin} - {/if} From abd84118d9886568d0fdc7b0ed0a6c4153e3bda9 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 12 Jan 2023 15:52:37 +0000 Subject: [PATCH 04/26] Hide groups page if disabled at tenant level --- .../src/pages/builder/portal/users/_layout.svelte | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/builder/src/pages/builder/portal/users/_layout.svelte b/packages/builder/src/pages/builder/portal/users/_layout.svelte index f9c9be94b7..79d749f21c 100644 --- a/packages/builder/src/pages/builder/portal/users/_layout.svelte +++ b/packages/builder/src/pages/builder/portal/users/_layout.svelte @@ -2,6 +2,7 @@ import { Page } from "@budibase/bbui" import { SideNav, SideNavItem, Content } from "components/portal/page" import { isActive, url } from "@roxi/routify" + import { isEnabled, TENANT_FEATURE_FLAGS } from "helpers/featureFlags" $: wide = $isActive("./users/index") || $isActive("./groups/index") @@ -15,11 +16,13 @@ url={$url("./users")} active={$isActive("./users")} /> - + {#if isEnabled(TENANT_FEATURE_FLAGS.USER_GROUPS)} + + {/if} From 5d24fe0a13c1543359eafb0976d73f3cc78be084 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 12 Jan 2023 16:50:43 +0000 Subject: [PATCH 05/26] Centralise menu logic and show full menu on mobile --- .../portal/_components/MobileMenu.svelte | 38 ++++-- .../src/pages/builder/portal/_layout.svelte | 61 +-------- .../builder/portal/account/_layout.svelte | 35 +---- .../builder/portal/settings/_layout.svelte | 30 +---- .../pages/builder/portal/users/_layout.svelte | 20 +-- .../pages/builder/portal/users/index.svelte | 4 + packages/builder/src/stores/portal/index.js | 1 + packages/builder/src/stores/portal/menu.js | 120 ++++++++++++++++++ 8 files changed, 179 insertions(+), 130 deletions(-) create mode 100644 packages/builder/src/pages/builder/portal/users/index.svelte create mode 100644 packages/builder/src/stores/portal/menu.js diff --git a/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte b/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte index 8baf7609d0..0077c0acc9 100644 --- a/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte +++ b/packages/builder/src/pages/builder/portal/_components/MobileMenu.svelte @@ -6,9 +6,9 @@ import UpgradeButton from "./UpgradeButton.svelte" import { fade } from "svelte/transition" import Logo from "./Logo.svelte" + import { menu } from "stores/portal" export let visible = false - export let menu const dispatch = createEventDispatcher() @@ -28,13 +28,28 @@ - {#each menu as { title, href }} - + {#each $menu as { title, href, subPages }} + {#if !subPages?.length} + + {/if} + {/each} + {#each $menu as { title, href, subPages }} + {#if subPages?.length} +
{title}
+ {#each subPages as { title, href }} + + {/each} + {/if} {/each}
@@ -47,6 +62,13 @@ .mobile-nav { display: none; } + .category { + color: var(--spectrum-global-color-gray-600); + font-size: var(--font-size-s); + margin-left: var(--spacing-m); + margin-top: 24px; + margin-bottom: 4px; + } @media (max-width: 640px) { .mobile-nav-underlay { diff --git a/packages/builder/src/pages/builder/portal/_layout.svelte b/packages/builder/src/pages/builder/portal/_layout.svelte index 9048502550..8cc5f5c79e 100644 --- a/packages/builder/src/pages/builder/portal/_layout.svelte +++ b/packages/builder/src/pages/builder/portal/_layout.svelte @@ -1,9 +1,8 @@
- - - - {#if $admin.cloud && $auth?.user?.accountPortalAccess} - - {:else if !$admin.cloud && admin} - - {/if} - - {#if $auth?.user?.accountPortalAccess && $auth.user.account.stripeCustomerId} - - {/if} + {#each pages as { title, href }} + + {/each}
diff --git a/packages/builder/src/pages/builder/portal/settings/_layout.svelte b/packages/builder/src/pages/builder/portal/settings/_layout.svelte index 57410bcaeb..ec26ca5754 100644 --- a/packages/builder/src/pages/builder/portal/settings/_layout.svelte +++ b/packages/builder/src/pages/builder/portal/settings/_layout.svelte @@ -1,38 +1,20 @@
- - - - {#if !$admin.cloud} - - {/if} + {#each pages as { title, href }} + + {/each}
diff --git a/packages/builder/src/pages/builder/portal/users/_layout.svelte b/packages/builder/src/pages/builder/portal/users/_layout.svelte index 79d749f21c..97de1eeabf 100644 --- a/packages/builder/src/pages/builder/portal/users/_layout.svelte +++ b/packages/builder/src/pages/builder/portal/users/_layout.svelte @@ -1,28 +1,20 @@
- - {#if isEnabled(TENANT_FEATURE_FLAGS.USER_GROUPS)} - - {/if} + {#each pages as { title, href }} + + {/each}
diff --git a/packages/builder/src/pages/builder/portal/users/index.svelte b/packages/builder/src/pages/builder/portal/users/index.svelte new file mode 100644 index 0000000000..4dbb81f7c6 --- /dev/null +++ b/packages/builder/src/pages/builder/portal/users/index.svelte @@ -0,0 +1,4 @@ + diff --git a/packages/builder/src/stores/portal/index.js b/packages/builder/src/stores/portal/index.js index 81d26b900e..9a27604034 100644 --- a/packages/builder/src/stores/portal/index.js +++ b/packages/builder/src/stores/portal/index.js @@ -11,3 +11,4 @@ export { groups } from "./groups" export { plugins } from "./plugins" export { backups } from "./backups" export { overview } from "./overview" +export { menu } from "./menu" diff --git a/packages/builder/src/stores/portal/menu.js b/packages/builder/src/stores/portal/menu.js new file mode 100644 index 0000000000..54ed4bdba8 --- /dev/null +++ b/packages/builder/src/stores/portal/menu.js @@ -0,0 +1,120 @@ +import { derived } from "svelte/store" +import { isEnabled, TENANT_FEATURE_FLAGS } from "helpers/featureFlags" +import { admin } from "./admin" +import { auth } from "./auth" + +export const menu = derived([admin, auth], ([$admin, $auth]) => { + // Standard user and developer pages + let menu = [ + { + title: "Apps", + href: "/builder/portal/apps", + }, + { + title: "Plugins", + href: "/builder/portal/plugins", + }, + ] + + // Admin only pages + if ($auth.isAdmin) { + // Determine user sub pages + let userSubPages = [ + { + title: "Users", + href: "/builder/portal/users/users", + }, + ] + if (isEnabled(TENANT_FEATURE_FLAGS.USER_GROUPS)) { + userSubPages.push({ + title: "Groups", + href: "/builder/portal/users/groups", + }) + } + + // Determine settings sub pages + let settingsSubPages = [ + { + title: "Auth", + href: "/builder/portal/settings/auth", + }, + { + title: "Email", + href: "/builder/portal/settings/email", + }, + { + title: "Organisation", + href: "/builder/portal/settings/organisation", + }, + ] + if (!$admin.cloud) { + settingsSubPages.push({ + title: "Version", + href: "/builder/portal/settings/version", + }) + } + + menu = [ + { + title: "Apps", + href: "/builder/portal/apps", + }, + { + title: "Users", + href: "/builder/portal/users", + subPages: userSubPages, + }, + { + title: "Plugins", + href: "/builder/portal/plugins", + }, + { + title: "Settings", + href: "/builder/portal/settings", + subPages: settingsSubPages, + }, + ] + } + + // Check if allowed access to account section + if ( + isEnabled(TENANT_FEATURE_FLAGS.LICENSING) && + ($auth?.user?.accountPortalAccess || (!$admin.cloud && $auth.isAdmin)) + ) { + // Determine account sub pages + let accountSubPages = [ + { + title: "Usage", + href: "/builder/portal/account/usage", + }, + ] + if ($admin.cloud && $auth?.user?.accountPortalAccess) { + accountSubPages.push({ + title: "Upgrade", + href: $admin.accountPortalUrl + "/portal/upgrade", + }) + } else if (!$admin.cloud && admin) { + accountSubPages.push({ + title: "Upgrade", + href: "/builder/portal/account/upgrade", + }) + } + if ( + $auth?.user?.accountPortalAccess && + $auth.user.account.stripeCustomerId + ) { + accountSubPages.push({ + title: "Billing", + href: $admin.accountPortalUrl + "/portal/billing", + }) + } + + menu.push({ + title: "Account", + href: "/builder/portal/account", + subPages: accountSubPages, + }) + } + + return menu +}) From 4e4b074635b477a16c399d4a68fc0156755036a9 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 12 Jan 2023 17:04:05 +0000 Subject: [PATCH 06/26] Update app access assignment and fix backups table --- .../src/pages/builder/apps/index.svelte | 2 +- .../apps/_components/AcessFilter.svelte | 49 ------------------- .../access/_components/AssignmentModal.svelte | 23 +++++---- .../overview/[appId]/access/index.svelte | 30 +++++++++--- .../overview/[appId]/backups/index.svelte | 2 +- 5 files changed, 40 insertions(+), 66 deletions(-) delete mode 100644 packages/builder/src/pages/builder/portal/apps/_components/AcessFilter.svelte diff --git a/packages/builder/src/pages/builder/apps/index.svelte b/packages/builder/src/pages/builder/apps/index.svelte index ad1b5ec7f8..001bf43b50 100644 --- a/packages/builder/src/pages/builder/apps/index.svelte +++ b/packages/builder/src/pages/builder/apps/index.svelte @@ -104,7 +104,7 @@
userInfoModal.show()}> - Update user information + My profile - import { PickerDropdown } from "@budibase/bbui" - import { groups } from "stores/portal" - import { createEventDispatcher } from "svelte" - - const dispatch = createEventDispatcher() - - let filter = null - $: filteredGroups = !filter - ? $groups - : $groups.filter(group => - group.name?.toLowerCase().includes(filter.toLowerCase()) - ) - - $: optionSections = { - groups: { - data: filteredGroups, - getLabel: group => group.name, - getValue: group => group._id, - getIcon: group => group.icon, - getColour: group => group.color, - }, - } - - $: onChange = selected => { - const { detail } = selected - if (!detail || Object.keys(detail).length == 0) { - dispatch("change", null) - return - } - - const groupSelected = $groups.find(x => x._id === detail) - const appRoleIds = groupSelected?.roles - ? Object.keys(groupSelected?.roles) - : [] - dispatch("change", appRoleIds) - } - - - { - filter = null - }} -/> diff --git a/packages/builder/src/pages/builder/portal/overview/[appId]/access/_components/AssignmentModal.svelte b/packages/builder/src/pages/builder/portal/overview/[appId]/access/_components/AssignmentModal.svelte index 0cb8085bb0..37143e25c1 100644 --- a/packages/builder/src/pages/builder/portal/overview/[appId]/access/_components/AssignmentModal.svelte +++ b/packages/builder/src/pages/builder/portal/overview/[appId]/access/_components/AssignmentModal.svelte @@ -14,6 +14,8 @@ export let app export let appUsers = [] + export let showUsers = false + export let showGroups = false const dispatch = createEventDispatcher() const usersFetch = fetchData({ @@ -41,7 +43,8 @@ $: availableGroups = getAvailableGroups($groups, app.appId, search, data) $: valid = data?.length && !data?.some(x => !x.id?.length || !x.role?.length) $: optionSections = { - ...($licensing.groupsEnabled && + ...(showGroups && + $licensing.groupsEnabled && availableGroups.length && { ["User groups"]: { data: availableGroups, @@ -51,13 +54,15 @@ getColour: group => group.color, }, }), - users: { - data: availableUsers, - getLabel: user => user.email, - getValue: user => user._id, - getIcon: user => user.icon, - getColour: user => user.color, - }, + ...(showUsers && { + users: { + data: availableUsers, + getLabel: user => user.email, + getValue: user => user._id, + getIcon: user => user.icon, + getColour: user => user.color, + }, + }), } const addData = async appData => { @@ -185,7 +190,7 @@ {/if}
- Add email + Add more
diff --git a/packages/builder/src/pages/builder/portal/overview/[appId]/access/index.svelte b/packages/builder/src/pages/builder/portal/overview/[appId]/access/index.svelte index c17efdb075..43eea4aaa6 100644 --- a/packages/builder/src/pages/builder/portal/overview/[appId]/access/index.svelte +++ b/packages/builder/src/pages/builder/portal/overview/[appId]/access/index.svelte @@ -36,7 +36,7 @@ }, role: { displayName: "Access", - width: "160px", + width: "150px", borderLeft: true, }, } @@ -50,6 +50,8 @@ let assignmentModal let appGroups let appUsers + let showAddUsers = false + let showAddGroups = false $: app = $overview.selectedApp $: devAppId = app.devId @@ -153,6 +155,18 @@ await usersFetch.refresh() } + const showUsersModal = () => { + showAddUsers = true + showAddGroups = false + assignmentModal.show() + } + + const showGroupsModal = () => { + showAddUsers = false + showAddGroups = true + assignmentModal.show() + } + setContext("roles", { updateRole, removeRole, @@ -178,7 +192,7 @@
Users - +
Groups - +
- + From 1d9ab4163ff3e75167ddabb9d4805112e7c9568d Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 13 Jan 2023 08:28:33 +0000 Subject: [PATCH 08/26] Standardise disabled field text colour --- packages/bbui/src/Form/Core/TextField.svelte | 4 ---- packages/bbui/src/bbui.css | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/bbui/src/Form/Core/TextField.svelte b/packages/bbui/src/Form/Core/TextField.svelte index 0a723c140a..6a64876a2c 100644 --- a/packages/bbui/src/Form/Core/TextField.svelte +++ b/packages/bbui/src/Form/Core/TextField.svelte @@ -112,8 +112,4 @@ .spectrum-Textfield { width: 100%; } - input:disabled { - color: var(--spectrum-global-color-gray-600) !important; - -webkit-text-fill-color: var(--spectrum-global-color-gray-600) !important; - } diff --git a/packages/bbui/src/bbui.css b/packages/bbui/src/bbui.css index b3213ef694..ef3483d3df 100644 --- a/packages/bbui/src/bbui.css +++ b/packages/bbui/src/bbui.css @@ -40,7 +40,6 @@ --rounded-medium: 8px; --rounded-large: 16px; - --font-sans: "Source Sans Pro", -apple-system, BlinkMacSystemFont, Segoe UI, "Inter", "Helvetica Neue", Arial, "Noto Sans", sans-serif; --font-accent: "Source Sans Pro", -apple-system, BlinkMacSystemFont, Segoe UI, "Inter", @@ -92,6 +91,8 @@ --border-light-2: 2px var(--grey-3) solid; --border-blue: 2px var(--blue) solid; --border-transparent: 2px transparent solid; + + --spectrum-alias-text-color-disabled: var(--spectrum-global-color-gray-600); } a { From e23f7dde47bc984faabee256141e7d36d9e7f46b Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 13 Jan 2023 08:28:54 +0000 Subject: [PATCH 09/26] Allow developer users to access users, groups and usage pages --- packages/builder/src/stores/portal/menu.js | 75 +++++++++------------- 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/packages/builder/src/stores/portal/menu.js b/packages/builder/src/stores/portal/menu.js index 54ed4bdba8..29fd6144f5 100644 --- a/packages/builder/src/stores/portal/menu.js +++ b/packages/builder/src/stores/portal/menu.js @@ -4,35 +4,39 @@ import { admin } from "./admin" import { auth } from "./auth" export const menu = derived([admin, auth], ([$admin, $auth]) => { - // Standard user and developer pages + // Determine user sub pages + let userSubPages = [ + { + title: "Users", + href: "/builder/portal/users/users", + }, + ] + if (isEnabled(TENANT_FEATURE_FLAGS.USER_GROUPS)) { + userSubPages.push({ + title: "Groups", + href: "/builder/portal/users/groups", + }) + } + + // Pages that all devs and admins can access let menu = [ { title: "Apps", href: "/builder/portal/apps", }, + { + title: "Users", + href: "/builder/portal/users", + subPages: userSubPages, + }, { title: "Plugins", href: "/builder/portal/plugins", }, ] - // Admin only pages + // Add settings page for admins if ($auth.isAdmin) { - // Determine user sub pages - let userSubPages = [ - { - title: "Users", - href: "/builder/portal/users/users", - }, - ] - if (isEnabled(TENANT_FEATURE_FLAGS.USER_GROUPS)) { - userSubPages.push({ - title: "Groups", - href: "/builder/portal/users/groups", - }) - } - - // Determine settings sub pages let settingsSubPages = [ { title: "Auth", @@ -53,35 +57,15 @@ export const menu = derived([admin, auth], ([$admin, $auth]) => { href: "/builder/portal/settings/version", }) } - - menu = [ - { - title: "Apps", - href: "/builder/portal/apps", - }, - { - title: "Users", - href: "/builder/portal/users", - subPages: userSubPages, - }, - { - title: "Plugins", - href: "/builder/portal/plugins", - }, - { - title: "Settings", - href: "/builder/portal/settings", - subPages: settingsSubPages, - }, - ] + menu.push({ + title: "Settings", + href: "/builder/portal/settings", + subPages: settingsSubPages, + }) } - // Check if allowed access to account section - if ( - isEnabled(TENANT_FEATURE_FLAGS.LICENSING) && - ($auth?.user?.accountPortalAccess || (!$admin.cloud && $auth.isAdmin)) - ) { - // Determine account sub pages + // Add account page + if (isEnabled(TENANT_FEATURE_FLAGS.LICENSING)) { let accountSubPages = [ { title: "Usage", @@ -93,7 +77,7 @@ export const menu = derived([admin, auth], ([$admin, $auth]) => { title: "Upgrade", href: $admin.accountPortalUrl + "/portal/upgrade", }) - } else if (!$admin.cloud && admin) { + } else if (!$admin.cloud && $auth.isAdmin) { accountSubPages.push({ title: "Upgrade", href: "/builder/portal/account/upgrade", @@ -108,7 +92,6 @@ export const menu = derived([admin, auth], ([$admin, $auth]) => { href: $admin.accountPortalUrl + "/portal/billing", }) } - menu.push({ title: "Account", href: "/builder/portal/account", From ad4133a77785e21a32ab8d100e2ebebac0d491fe Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 13 Jan 2023 08:29:18 +0000 Subject: [PATCH 10/26] Allow readonly access to users and groups for developer users --- .../pages/builder/portal/account/usage.svelte | 13 ++++-- .../portal/users/groups/[groupId].svelte | 31 ++++++++------ .../RemoveUserTableRenderer.svelte | 5 ++- .../builder/portal/users/groups/index.svelte | 5 ++- .../portal/users/users/[userId].svelte | 41 +++++++++++++------ .../RemoveGroupTableRenderer.svelte | 5 ++- .../builder/portal/users/users/index.svelte | 14 +++++-- 7 files changed, 78 insertions(+), 36 deletions(-) diff --git a/packages/builder/src/pages/builder/portal/account/usage.svelte b/packages/builder/src/pages/builder/portal/account/usage.svelte index f75b6801fc..c541e66fb1 100644 --- a/packages/builder/src/pages/builder/portal/account/usage.svelte +++ b/packages/builder/src/pages/builder/portal/account/usage.svelte @@ -184,10 +184,15 @@ - - To upgrade your plan and usage limits visit your - account. - + {#if $auth?.user?.accountPortalAccess} + + To upgrade your plan and usage limits visit your + account. + + {:else} + Contact your account holder to upgrade your plan. + {/if} + x._id === groupId) @@ -164,24 +165,28 @@
{group?.name} - - - - - editModal.show()}> - Edit - - deleteModal.show()}> - Delete - - + {#if !readonly} + + + + + editModal.show()}> + Edit + + deleteModal.show()}> + Delete + + + {/if}
Users
- +
import { ActionButton } from "@budibase/bbui" import { getContext } from "svelte" + import { auth } from "stores/portal" export let value @@ -12,4 +13,6 @@ } -Remove + + Remove + diff --git a/packages/builder/src/pages/builder/portal/users/groups/index.svelte b/packages/builder/src/pages/builder/portal/users/groups/index.svelte index 25c8702f6b..43561d2d30 100644 --- a/packages/builder/src/pages/builder/portal/users/groups/index.svelte +++ b/packages/builder/src/pages/builder/portal/users/groups/index.svelte @@ -39,6 +39,7 @@ { column: "roles", component: GroupAppsTableRenderer }, ] + $: readonly = !$auth.isAdmin $: schema = { name: { displayName: "Group", width: "2fr", minWidth: "200px" }, users: { sortable: false, width: "1fr" }, @@ -108,7 +109,9 @@ {#if $licensing.groupsEnabled} - + {:else}
$goto(`./${detail._id}`)} - {schema} - bind:selectedRows - data={enrichedUsers} - allowEditColumns={false} - allowEditRows={false} - allowSelectRows={!readonly} - {customRenderers} - /> - + + + Users + Add users and control who gets access to your published apps -{/if} + +
+ + + + +
+ + {#if selectedRows.length > 0} + + {/if} +
+
+
$goto(`./${detail._id}`)} + {schema} + bind:selectedRows + data={enrichedUsers} + allowEditColumns={false} + allowEditRows={false} + allowSelectRows={!readonly} + {customRenderers} + loading={!$fetch.loaded || !groupsLoaded} + /> + + From f5936f2583543e58f7b6a2fc5e3616a85512fa2a Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 13 Jan 2023 08:47:15 +0000 Subject: [PATCH 13/26] Improve responsiveness on apps list page and fix discussions link styles --- packages/builder/src/components/common/HelpIcon.svelte | 1 + .../builder/src/pages/builder/portal/apps/index.svelte | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/packages/builder/src/components/common/HelpIcon.svelte b/packages/builder/src/components/common/HelpIcon.svelte index bb3256792e..50434b7b16 100644 --- a/packages/builder/src/components/common/HelpIcon.svelte +++ b/packages/builder/src/components/common/HelpIcon.svelte @@ -31,6 +31,7 @@ bottom: var(--spacing-m); right: var(--spacing-m); border-radius: 55%; + z-index: 99999; } .hidden { display: none; diff --git a/packages/builder/src/pages/builder/portal/apps/index.svelte b/packages/builder/src/pages/builder/portal/apps/index.svelte index 8efa4b7271..f073693a49 100644 --- a/packages/builder/src/pages/builder/portal/apps/index.svelte +++ b/packages/builder/src/pages/builder/portal/apps/index.svelte @@ -346,6 +346,10 @@ justify-content: flex-start; align-items: center; gap: var(--spacing-xl); + flex-wrap: wrap; + } + .app-actions :global(.spectrum-Textfield) { + max-width: 180px; } .app-table { @@ -380,6 +384,9 @@ margin-top: var(--spacing-xl); margin-bottom: calc(-1 * var(--spacing-m)); } + .app-actions :global(.spectrum-Textfield) { + max-width: none; + } /* Hide download apps icon */ .app-actions :global(> .spectrum-Icon) { display: none; From 31431ac98cf322907f8578faa65d096d148be448 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 13 Jan 2023 09:25:12 +0000 Subject: [PATCH 14/26] Update spacing on user and group detail page and fix usage page showing wrong copy --- .../builder/src/pages/builder/portal/account/usage.svelte | 4 +++- .../src/pages/builder/portal/users/groups/[groupId].svelte | 2 +- .../src/pages/builder/portal/users/users/[userId].svelte | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/builder/src/pages/builder/portal/account/usage.svelte b/packages/builder/src/pages/builder/portal/account/usage.svelte index c541e66fb1..c502d35f79 100644 --- a/packages/builder/src/pages/builder/portal/account/usage.svelte +++ b/packages/builder/src/pages/builder/portal/account/usage.svelte @@ -32,6 +32,8 @@ $: license = $auth.user?.license $: accountPortalAccess = $auth?.user?.accountPortalAccess $: quotaReset = quotaUsage?.quotaReset + $: canManagePlan = + ($admin.cloud && accountPortalAccess) || (!$admin.cloud && $auth.isAdmin) const setMonthlyUsage = () => { monthlyUsage = [] @@ -184,7 +186,7 @@ - {#if $auth?.user?.accountPortalAccess} + {#if canManagePlan} To upgrade your plan and usage limits visit your account. diff --git a/packages/builder/src/pages/builder/portal/users/groups/[groupId].svelte b/packages/builder/src/pages/builder/portal/users/groups/[groupId].svelte index 859e266ef0..ee584dd71b 100644 --- a/packages/builder/src/pages/builder/portal/users/groups/[groupId].svelte +++ b/packages/builder/src/pages/builder/portal/users/groups/[groupId].svelte @@ -250,7 +250,7 @@ flex-direction: row; justify-content: flex-start; align-items: center; - gap: var(--spacing-m); + gap: var(--spacing-l); } .header :global(.spectrum-Heading) { flex: 1 1 auto; diff --git a/packages/builder/src/pages/builder/portal/users/users/[userId].svelte b/packages/builder/src/pages/builder/portal/users/users/[userId].svelte index 9498472f66..26a1d25f44 100644 --- a/packages/builder/src/pages/builder/portal/users/users/[userId].svelte +++ b/packages/builder/src/pages/builder/portal/users/users/[userId].svelte @@ -389,6 +389,7 @@ display: flex; align-items: center; justify-content: flex-start; + gap: var(--spacing-l); } .tableTitle { display: flex; @@ -396,7 +397,6 @@ align-items: flex-end; } .subtitle { - padding: 0 0 0 var(--spacing-m); display: flex; flex-direction: column; justify-content: center; From 66c6b6dec3ffca124f8231305315c8d37d4b9338 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 13 Jan 2023 09:26:35 +0000 Subject: [PATCH 15/26] Fix logo override not working --- .../src/pages/builder/portal/_components/Logo.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/builder/src/pages/builder/portal/_components/Logo.svelte b/packages/builder/src/pages/builder/portal/_components/Logo.svelte index 8276510201..811e4a162a 100644 --- a/packages/builder/src/pages/builder/portal/_components/Logo.svelte +++ b/packages/builder/src/pages/builder/portal/_components/Logo.svelte @@ -1,9 +1,14 @@ -Budibase Logo $goto("./apps")} /> +Budibase Logo $goto("./apps")} +/> From 355fb6fda2e5dcb04525c870eabd2011092ee756 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Fri, 13 Jan 2023 12:11:14 +0000 Subject: [PATCH 24/26] Make usage stats responsive and fix layout issues --- .../builder/src/components/usage/Usage.svelte | 29 ++++++++++++------- .../pages/builder/portal/account/usage.svelte | 1 + 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/builder/src/components/usage/Usage.svelte b/packages/builder/src/components/usage/Usage.svelte index 49c4205a4c..6e81abfe63 100644 --- a/packages/builder/src/components/usage/Usage.svelte +++ b/packages/builder/src/components/usage/Usage.svelte @@ -39,15 +39,21 @@ {#if showWarning} {/if} -
- {usage.name} -
+ + + {usage.name} + + - {#if unlimited} - {usage.used} / Unlimited - {:else} - {usage.used} / {usage.total} - {/if} + + + {#if unlimited} + {usage.used} / Unlimited + {:else} + {usage.used} / {usage.total} + {/if} + +
{#if unlimited} @@ -89,13 +95,14 @@ display: flex; flex-direction: row; justify-content: space-between; + align-items: flex-end; margin-bottom: 12px; + gap: var(--spacing-m); } .header-container { display: flex; } - .heading { - margin-top: 3px; - margin-left: 5px; + .nowrap { + white-space: nowrap; } diff --git a/packages/builder/src/pages/builder/portal/account/usage.svelte b/packages/builder/src/pages/builder/portal/account/usage.svelte index c502d35f79..39970a4814 100644 --- a/packages/builder/src/pages/builder/portal/account/usage.svelte +++ b/packages/builder/src/pages/builder/portal/account/usage.svelte @@ -249,6 +249,7 @@ justify-content: flex-start; align-items: flex-start; gap: 40px; + flex-wrap: wrap; } .column { flex: 1 1 0; From 1b56a83ec424de319fce94b193b3f5a83a801d43 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 16 Jan 2023 14:58:17 +0000 Subject: [PATCH 25/26] Add comment to docker-compose config --- hosting/docker-compose.dev.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/hosting/docker-compose.dev.yaml b/hosting/docker-compose.dev.yaml index 9e0ede07bf..7906a389fa 100644 --- a/hosting/docker-compose.dev.yaml +++ b/hosting/docker-compose.dev.yaml @@ -6,6 +6,7 @@ services: minio-service: container_name: budi-minio-dev restart: on-failure + # Last version that supports the "fs" backend image: minio/minio:RELEASE.2022-10-24T18-35-07Z volumes: - minio_data:/data From cbdd85225dc3337aa961647288fe9e10dacc1c61 Mon Sep 17 00:00:00 2001 From: Gerard Burns Date: Wed, 18 Jan 2023 12:00:08 +0000 Subject: [PATCH 26/26] Fix Table Creation With No Import (#9373) --- .../components/backend/TableNavigator/TableDataImport.svelte | 2 +- .../backend/TableNavigator/modals/CreateTableModal.svelte | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte b/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte index a056ea3256..3dbe145084 100644 --- a/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte +++ b/packages/builder/src/components/backend/TableNavigator/TableDataImport.svelte @@ -14,7 +14,7 @@ export let rows = [] export let schema = {} - export let allValid = false + export let allValid = true export let displayColumn = null const typeOptions = [ diff --git a/packages/builder/src/components/backend/TableNavigator/modals/CreateTableModal.svelte b/packages/builder/src/components/backend/TableNavigator/modals/CreateTableModal.svelte index 9ad0fb726e..175705732f 100644 --- a/packages/builder/src/components/backend/TableNavigator/modals/CreateTableModal.svelte +++ b/packages/builder/src/components/backend/TableNavigator/modals/CreateTableModal.svelte @@ -33,7 +33,7 @@ let autoColumns = getAutoColumnInformation() let schema = {} let rows = [] - let allValid = false + let allValid = true let displayColumn = null function getAutoColumns() { @@ -99,7 +99,7 @@ title="Create Table" confirmText="Create" onConfirm={saveTable} - disabled={error || !name || !allValid} + disabled={error || !name || (rows.length && !allValid)} >