From fd100c3ec4d491abd35093c395511978a63e120b Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Tue, 25 Feb 2025 11:37:26 +0000 Subject: [PATCH 1/5] 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 @@ -