From 84a1ccfc4c8776685da057540b3f77c96d21a9c1 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 24 Feb 2025 14:59:04 +0000 Subject: [PATCH 01/42] Fixing an issue with scrollbar always appearing on end user portal. --- packages/bbui/src/Layout/Page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bbui/src/Layout/Page.svelte b/packages/bbui/src/Layout/Page.svelte index e469927e60..e8dad8bc38 100644 --- a/packages/bbui/src/Layout/Page.svelte +++ b/packages/bbui/src/Layout/Page.svelte @@ -47,7 +47,7 @@ overflow-x: hidden; } .main { - overflow-y: scroll; + overflow-y: auto; } .content { display: flex; From f5a7e5bf4951c5c1cc62adfb88f2d51b291fdfb4 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 24 Feb 2025 15:34:30 +0000 Subject: [PATCH 02/42] Fixing app count in user page. --- .../src/pages/builder/portal/users/users/index.svelte | 2 +- packages/shared-core/src/sdk/documents/users.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/builder/src/pages/builder/portal/users/users/index.svelte b/packages/builder/src/pages/builder/portal/users/users/index.svelte index c77e40c964..6a1facfd01 100644 --- a/packages/builder/src/pages/builder/portal/users/users/index.svelte +++ b/packages/builder/src/pages/builder/portal/users/users/index.svelte @@ -128,7 +128,7 @@ $auth.user?.email === user.email ? false : true, - apps: [...new Set(Object.keys(user.roles))], + apps: sdk.users.userAppAccessList(user, $groups), access: role.sortOrder, } }) diff --git a/packages/shared-core/src/sdk/documents/users.ts b/packages/shared-core/src/sdk/documents/users.ts index 17aa8a1e58..c4f1a16025 100644 --- a/packages/shared-core/src/sdk/documents/users.ts +++ b/packages/shared-core/src/sdk/documents/users.ts @@ -4,6 +4,7 @@ import { SEPARATOR, User, InternalTable, + UserGroup, } from "@budibase/types" import { getProdAppID } from "./applications" import * as _ from "lodash/fp" @@ -129,3 +130,13 @@ export function containsUserID(value: string | undefined): boolean { } return value.includes(`${DocumentType.USER}${SEPARATOR}`) } + +export function userAppAccessList(user: User, groups?: UserGroup[]) { + const userGroups = + groups?.filter(group => group.users?.find(u => u._id === user._id)) || [] + const userGroupApps = userGroups.flatMap(userGroup => + Object.keys(userGroup.roles || {}) + ) + const fullList = [...Object.keys(user.roles), ...userGroupApps] + return [...new Set(fullList)] +} From a1589b0dc05af57d65aa9ac6dda7dd81d3ea814f Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 24 Feb 2025 18:07:01 +0000 Subject: [PATCH 03/42] Adding group badges to users. --- packages/bbui/src/Badge/Badge.svelte | 2 ++ .../[application]/_components/BuilderSidePanel.svelte | 5 +++++ packages/shared-core/src/sdk/documents/users.ts | 9 +++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/bbui/src/Badge/Badge.svelte b/packages/bbui/src/Badge/Badge.svelte index e4ec7d4f33..03aa544dfe 100644 --- a/packages/bbui/src/Badge/Badge.svelte +++ b/packages/bbui/src/Badge/Badge.svelte @@ -11,6 +11,7 @@ export let active = false export let inactive = false export let hoverable = false + export let customColor = null @@ -29,6 +30,7 @@ class:spectrum-Label--seafoam={seafoam} class:spectrum-Label--active={active} class:spectrum-Label--inactive={inactive} + style={customColor ? `background-color: ${customColor};` : ""} > diff --git a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte index 2260892913..5b1bf852aa 100644 --- a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte @@ -13,6 +13,7 @@ FancyInput, Button, FancySelect, + Badge, } from "@budibase/bbui" import { builderStore, appStore, roles, appPublished } from "@/stores/builder" import { @@ -741,11 +742,15 @@
Access
{#each allUsers as user} + {@const userGroups = sdk.users.getUserGroups(user, $groups)}
{user.email}
+ {#each userGroups as group} + {group.name} + {/each}
group.users?.find(u => u._id === user._id)) || [] + ) +} + +export function userAppAccessList(user: User, groups?: UserGroup[]) { + const userGroups = getUserGroups(user, groups) const userGroupApps = userGroups.flatMap(userGroup => Object.keys(userGroup.roles || {}) ) From f7d216c188562cf793673e04d3a17e5face33264 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 24 Feb 2025 18:08:20 +0000 Subject: [PATCH 04/42] Setting override placeholder. --- .../app/[application]/_components/BuilderSidePanel.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte index 5b1bf852aa..a9d3bb70ba 100644 --- a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte @@ -755,7 +755,7 @@
Date: Tue, 25 Feb 2025 10:45:50 +0000 Subject: [PATCH 05/42] Changing how badges are displayed. --- .../_components/BuilderSidePanel.svelte | 27 ++++++++++++++----- .../shared-core/src/sdk/documents/users.ts | 12 +++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte index a9d3bb70ba..8136dd256c 100644 --- a/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_components/BuilderSidePanel.svelte @@ -742,15 +742,19 @@
Access
{#each allUsers as user} - {@const userGroups = sdk.users.getUserGroups(user, $groups)} + {@const userGroups = sdk.users.getUserAppGroups($appStore.appId, user, $groups)}
-
- {user.email} +
+
+ {user.email} +
+
+ {#each userGroups as group} + {group.name} + {/each} +
- {#each userGroups as group} - {group.name} - {/each}
diff --git a/packages/shared-core/src/sdk/documents/users.ts b/packages/shared-core/src/sdk/documents/users.ts index 8b5abfd822..d2ee2dec00 100644 --- a/packages/shared-core/src/sdk/documents/users.ts +++ b/packages/shared-core/src/sdk/documents/users.ts @@ -137,6 +137,18 @@ export function getUserGroups(user: User, groups?: UserGroup[]) { ) } +export function getUserAppGroups( + appId: string, + user: User, + groups?: UserGroup[] +) { + const prodAppId = getProdAppID(appId) + const userGroups = getUserGroups(user, groups) + return userGroups.filter(group => + Object.keys(group.roles || {}).find(app => app === prodAppId) + ) +} + export function userAppAccessList(user: User, groups?: UserGroup[]) { const userGroups = getUserGroups(user, groups) const userGroupApps = userGroups.flatMap(userGroup => From fd100c3ec4d491abd35093c395511978a63e120b Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Tue, 25 Feb 2025 11:37:26 +0000 Subject: [PATCH 06/42] typescript conversions of bbui components --- packages/bbui/src/Form/Checkbox.svelte | 22 +++--- packages/bbui/src/Link/Link.svelte | 2 +- .../bbui/src/Stores/{banner.js => banner.ts} | 37 +++++++--- .../{notifications.js => notifications.ts} | 41 ++++++++--- packages/bbui/src/Table/ArrayRenderer.svelte | 4 +- .../bbui/src/Table/AttachmentRenderer.svelte | 10 +-- packages/bbui/src/Table/BoldRenderer.svelte | 4 +- .../bbui/src/Table/BooleanRenderer.svelte | 4 +- packages/bbui/src/Table/CellRenderer.svelte | 20 ++--- packages/bbui/src/Table/CodeRenderer.svelte | 4 +- .../bbui/src/Table/DateTimeRenderer.svelte | 8 +- .../bbui/src/Table/InternalRenderer.svelte | 6 +- .../src/Table/RelationshipRenderer.svelte | 10 +-- .../bbui/src/Table/SelectEditRenderer.svelte | 12 +-- packages/bbui/src/Table/StringRenderer.svelte | 6 +- packages/bbui/src/Tabs/Tabs.svelte | 73 +++++++++++++------ packages/bbui/src/Tags/Tag.svelte | 12 +-- packages/bbui/src/Tags/Tags.svelte | 2 +- .../bbui/src/Tooltip/TooltipWrapper.svelte | 8 +- packages/bbui/src/TreeView/Item.svelte | 12 +-- packages/bbui/src/TreeView/Tree.svelte | 8 +- packages/bbui/src/Typography/Code.svelte | 4 +- packages/bbui/src/Typography/Detail.svelte | 8 +- 23 files changed, 189 insertions(+), 128 deletions(-) rename packages/bbui/src/Stores/{banner.js => banner.ts} (57%) rename packages/bbui/src/Stores/{notifications.js => notifications.ts} (63%) diff --git a/packages/bbui/src/Form/Checkbox.svelte b/packages/bbui/src/Form/Checkbox.svelte index 6e6cf0d8e8..4a7268f102 100644 --- a/packages/bbui/src/Form/Checkbox.svelte +++ b/packages/bbui/src/Form/Checkbox.svelte @@ -1,24 +1,24 @@ - - + diff --git a/packages/bbui/src/Link/Link.svelte b/packages/bbui/src/Link/Link.svelte index 6f8aba1f4e..60706c42cb 100644 --- a/packages/bbui/src/Link/Link.svelte +++ b/packages/bbui/src/Link/Link.svelte @@ -10,7 +10,7 @@ export let secondary: boolean = false export let overBackground: boolean = false export let target: string | undefined = undefined - export let download: boolean | undefined = undefined + export let download: string | undefined = undefined export let disabled: boolean = false export let tooltip: string | null = null diff --git a/packages/bbui/src/Stores/banner.js b/packages/bbui/src/Stores/banner.ts similarity index 57% rename from packages/bbui/src/Stores/banner.js rename to packages/bbui/src/Stores/banner.ts index fc93e7be99..bf70acfa9b 100644 --- a/packages/bbui/src/Stores/banner.js +++ b/packages/bbui/src/Stores/banner.ts @@ -7,17 +7,26 @@ export const BANNER_TYPES = { WARNING: "warning", } +interface BannerConfig { + message?: string + type?: string + extraButtonText?: string + extraButtonAction?: () => void + onChange?: () => void +} + +interface DefaultConfig { + messages: BannerConfig[] +} + export function createBannerStore() { - const DEFAULT_CONFIG = { + const DEFAULT_CONFIG: DefaultConfig = { messages: [], } - const banner = writable(DEFAULT_CONFIG) + const banner = writable(DEFAULT_CONFIG) - const show = async ( - // eslint-disable-next-line - config = { message, type, extraButtonText, extraButtonAction, onChange } - ) => { + const show = async (config: BannerConfig = {}) => { banner.update(store => { return { ...store, @@ -27,7 +36,7 @@ export function createBannerStore() { } const showStatus = async () => { - const config = { + const config: BannerConfig = { message: "Some systems are experiencing issues", type: BANNER_TYPES.NEGATIVE, extraButtonText: "View Status", @@ -37,18 +46,24 @@ export function createBannerStore() { await queue([config]) } - const queue = async entries => { - const priority = { + const queue = async (entries: Array) => { + const priority: Record = { [BANNER_TYPES.NEGATIVE]: 0, [BANNER_TYPES.WARNING]: 1, [BANNER_TYPES.INFO]: 2, } banner.update(store => { const sorted = [...store.messages, ...entries].sort((a, b) => { - if (priority[a.type] == priority[b.type]) { + if ( + priority[a.type as keyof typeof priority] === + priority[b.type as keyof typeof priority] + ) { return 0 } - return priority[a.type] < priority[b.type] ? -1 : 1 + return priority[a.type as keyof typeof priority] < + priority[b.type as keyof typeof priority] + ? -1 + : 1 }) return { ...store, diff --git a/packages/bbui/src/Stores/notifications.js b/packages/bbui/src/Stores/notifications.ts similarity index 63% rename from packages/bbui/src/Stores/notifications.js rename to packages/bbui/src/Stores/notifications.ts index 28331fffd8..f4d6625491 100644 --- a/packages/bbui/src/Stores/notifications.js +++ b/packages/bbui/src/Stores/notifications.ts @@ -2,9 +2,21 @@ import { writable } from "svelte/store" const NOTIFICATION_TIMEOUT = 3000 +interface Notification { + id: string + type: string + message: string + icon: string + dismissable: boolean + action: (() => void) | null + actionMessage: string | null + wide: boolean + dismissTimeout: number +} + export const createNotificationStore = () => { - const timeoutIds = new Set() - const _notifications = writable([], () => { + const timeoutIds = new Set() + const _notifications = writable([], () => { return () => { // clear all the timers timeoutIds.forEach(timeoutId => { @@ -21,7 +33,7 @@ export const createNotificationStore = () => { } const send = ( - message, + message: string, { type = "default", icon = "", @@ -30,7 +42,15 @@ export const createNotificationStore = () => { actionMessage = null, wide = false, dismissTimeout = NOTIFICATION_TIMEOUT, - } + }: { + type?: string + icon?: string + autoDismiss?: boolean + action?: (() => void) | null + actionMessage?: string | null + wide?: boolean + dismissTimeout?: number + } = {} ) => { if (block) { return @@ -60,7 +80,7 @@ export const createNotificationStore = () => { } } - const dismissNotification = id => { + const dismissNotification = (id: string) => { _notifications.update(state => { return state.filter(n => n.id !== id) }) @@ -71,17 +91,18 @@ export const createNotificationStore = () => { return { subscribe, send, - info: msg => send(msg, { type: "info", icon: "Info" }), - error: msg => + info: (msg: string) => send(msg, { type: "info", icon: "Info" }), + error: (msg: string) => send(msg, { type: "error", icon: "Alert", autoDismiss: false }), - warning: msg => send(msg, { type: "warning", icon: "Alert" }), - success: msg => send(msg, { type: "success", icon: "CheckmarkCircle" }), + warning: (msg: string) => send(msg, { type: "warning", icon: "Alert" }), + success: (msg: string) => + send(msg, { type: "success", icon: "CheckmarkCircle" }), blockNotifications, dismiss: dismissNotification, } } -function id() { +function id(): string { return "_" + Math.random().toString(36).slice(2, 9) } diff --git a/packages/bbui/src/Table/ArrayRenderer.svelte b/packages/bbui/src/Table/ArrayRenderer.svelte index 303397054a..8dc23d8604 100644 --- a/packages/bbui/src/Table/ArrayRenderer.svelte +++ b/packages/bbui/src/Table/ArrayRenderer.svelte @@ -1,8 +1,8 @@ - diff --git a/packages/bbui/src/Table/BoldRenderer.svelte b/packages/bbui/src/Table/BoldRenderer.svelte index ae9ca24c42..93df68d2dc 100644 --- a/packages/bbui/src/Table/BoldRenderer.svelte +++ b/packages/bbui/src/Table/BoldRenderer.svelte @@ -1,5 +1,5 @@ -
{value}
diff --git a/packages/bbui/src/Table/BooleanRenderer.svelte b/packages/bbui/src/Table/BooleanRenderer.svelte index 4e1aa3b4e1..0f4f7b2d68 100644 --- a/packages/bbui/src/Table/BooleanRenderer.svelte +++ b/packages/bbui/src/Table/BooleanRenderer.svelte @@ -1,7 +1,7 @@ -