From f74e2c6693a757c6eab28b2323a9d50eaa5018e6 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 16 Jan 2025 16:40:51 +0100 Subject: [PATCH 01/16] Convert form block --- .../app/blocks/form/FormBlock.svelte | 31 ++++++++++--------- packages/client/src/index.ts | 4 +++ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index 656aa5933b..69f51b84e8 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -1,12 +1,14 @@ - + +export type Context = Readable From a466a2d6705ef934f0ce03b839a87fe07e06557b Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 16 Jan 2025 16:44:41 +0100 Subject: [PATCH 02/16] Type params --- .../app/blocks/form/FormBlock.svelte | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index 69f51b84e8..2a0c622750 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -7,21 +7,24 @@ import { Component, Context, SDK } from "../../../../index" import { TableSchema, UIDatasource } from "@budibase/types" - export let actionType + export let actionType: string export let dataSource: UIDatasource - export let size - export let disabled + export let size: string + export let disabled: boolean export let fields - export let buttons - export let buttonPosition - export let title - export let description - export let rowId - export let actionUrl - export let noRowsMessage - export let notificationOverride - export let buttonsCollapsed - export let buttonsCollapsedText + export let buttons: { + "##eventHandlerType": string + parameters: Record + }[] + export let buttonPosition: "top" | "bottom" + export let title: string + export let description: string + export let rowId: string + export let actionUrl: string + export let noRowsMessage: string + export let notificationOverride: boolean + export let buttonsCollapsed: boolean + export let buttonsCollapsedText: string // Legacy export let showDeleteButton From 029b7754ca374719f248da4a77a8855a1fdeec5d Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 16 Jan 2025 16:44:55 +0100 Subject: [PATCH 03/16] Type other params --- .../src/components/app/blocks/form/FormBlock.svelte | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index 2a0c622750..22f21b5790 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -27,10 +27,10 @@ export let buttonsCollapsedText: string // Legacy - export let showDeleteButton - export let showSaveButton - export let saveButtonLabel - export let deleteButtonLabel + export let showDeleteButton: boolean + export let showSaveButton: boolean + export let saveButtonLabel: boolean + export let deleteButtonLabel: boolean const { fetchDatasourceSchema, generateGoldenSample } = getContext("sdk") const component = getContext("component") From 325fea0c10644732b70a39c9885955aac4187838 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 16 Jan 2025 16:55:24 +0100 Subject: [PATCH 04/16] ViewV2, return 404 if not found --- packages/server/src/api/controllers/view/viewsV2.ts | 6 ++++-- packages/server/src/sdk/app/views/index.ts | 4 +++- packages/server/src/sdk/app/views/internal.ts | 6 ++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/server/src/api/controllers/view/viewsV2.ts b/packages/server/src/api/controllers/view/viewsV2.ts index 5376ce49c3..ff8daf3bc6 100644 --- a/packages/server/src/api/controllers/view/viewsV2.ts +++ b/packages/server/src/api/controllers/view/viewsV2.ts @@ -123,9 +123,11 @@ async function parseSchema(view: CreateViewRequest) { } export async function get(ctx: Ctx) { - ctx.body = { - data: await sdk.views.getEnriched(ctx.params.viewId), + const view = await sdk.views.getEnriched(ctx.params.viewId) + if (!view) { + ctx.throw(404) } + ctx.body = { data: view } } export async function fetch(ctx: Ctx) { diff --git a/packages/server/src/sdk/app/views/index.ts b/packages/server/src/sdk/app/views/index.ts index 4f978253d6..157e741acd 100644 --- a/packages/server/src/sdk/app/views/index.ts +++ b/packages/server/src/sdk/app/views/index.ts @@ -40,7 +40,9 @@ export async function get(viewId: string): Promise { return pickApi(tableId).get(viewId) } -export async function getEnriched(viewId: string): Promise { +export async function getEnriched( + viewId: string +): Promise { const { tableId } = utils.extractViewInfoFromID(viewId) return pickApi(tableId).getEnriched(viewId) } diff --git a/packages/server/src/sdk/app/views/internal.ts b/packages/server/src/sdk/app/views/internal.ts index 4f7abad357..9eeebc4cc4 100644 --- a/packages/server/src/sdk/app/views/internal.ts +++ b/packages/server/src/sdk/app/views/internal.ts @@ -17,13 +17,15 @@ export async function get(viewId: string): Promise { return ensureQueryUISet(found) } -export async function getEnriched(viewId: string): Promise { +export async function getEnriched( + viewId: string +): Promise { const { tableId } = utils.extractViewInfoFromID(viewId) const table = await sdk.tables.getTable(tableId) const views = Object.values(table.views!).filter(isV2) const found = views.find(v => v.id === viewId) if (!found) { - throw new Error("No view found") + return } return await enrichSchema(ensureQueryUISet(found), table.schema) } From 566da4b2a3ac279407a43c9018448bd44555ef5a Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 16 Jan 2025 16:58:57 +0100 Subject: [PATCH 05/16] ViewV2, return 404 if not found --- packages/server/src/sdk/app/views/external.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/server/src/sdk/app/views/external.ts b/packages/server/src/sdk/app/views/external.ts index 65e0ff410d..fabee903fe 100644 --- a/packages/server/src/sdk/app/views/external.ts +++ b/packages/server/src/sdk/app/views/external.ts @@ -22,7 +22,9 @@ export async function get(viewId: string): Promise { return ensureQueryUISet(found) } -export async function getEnriched(viewId: string): Promise { +export async function getEnriched( + viewId: string +): Promise { const { tableId } = utils.extractViewInfoFromID(viewId) const { datasourceId, tableName } = breakExternalTableId(tableId) @@ -32,7 +34,7 @@ export async function getEnriched(viewId: string): Promise { const views = Object.values(table.views!).filter(isV2) const found = views.find(v => v.id === viewId) if (!found) { - throw new Error("No view found") + return } return await enrichSchema(ensureQueryUISet(found), table.schema) } From da1f1177db3771ee410b3b0cb142cd033b7287c1 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 16 Jan 2025 17:08:44 +0100 Subject: [PATCH 06/16] Type ComponentErrorState --- .../error-states/ComponentErrorState.svelte | 13 ++++++++----- packages/client/src/index.ts | 8 ++++++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/client/src/components/error-states/ComponentErrorState.svelte b/packages/client/src/components/error-states/ComponentErrorState.svelte index ec7c5169b0..b846eaa230 100644 --- a/packages/client/src/components/error-states/ComponentErrorState.svelte +++ b/packages/client/src/components/error-states/ComponentErrorState.svelte @@ -1,14 +1,17 @@ - From 8cf7375202a3bebb97baee2ac33a75950cdc13e3 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Fri, 17 Jan 2025 10:33:01 +0100 Subject: [PATCH 08/16] Type schema object --- packages/client/src/utils/schema.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/client/src/utils/schema.ts b/packages/client/src/utils/schema.ts index 5400d62087..9ea868751d 100644 --- a/packages/client/src/utils/schema.ts +++ b/packages/client/src/utils/schema.ts @@ -1,5 +1,6 @@ import { API } from "api" import { DataFetchMap, DataFetchType } from "@budibase/frontend-core" +import { FieldType, TableSchema } from "@budibase/types" /** * Constructs a fetch instance for a given datasource. @@ -42,14 +43,14 @@ export const fetchDatasourceSchema = async < } // Get the normal schema as long as we aren't wanting a form schema - let schema: any + let schema: TableSchema | undefined if (datasource?.type !== "query" || !options?.formSchema) { - schema = instance.getSchema(definition as any) + schema = instance.getSchema(definition as any) as TableSchema } else if ("parameters" in definition && definition.parameters?.length) { schema = {} - definition.parameters.forEach(param => { - schema[param.name] = { ...param, type: "string" } - }) + for (const param of definition.parameters) { + schema[param.name] = { ...param, type: FieldType.STRING } + } } if (!schema) { return null @@ -57,11 +58,11 @@ export const fetchDatasourceSchema = async < // Strip hidden fields from views if (datasource.type === "viewV2") { - Object.keys(schema).forEach(field => { + for (const field of Object.keys(schema)) { if (!schema[field].visible) { delete schema[field] } - }) + } } // Enrich schema with relationships if required From 84dbcb0f6914979285356c7576cf1162974ef410 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Fri, 17 Jan 2025 11:51:48 +0100 Subject: [PATCH 09/16] Change errorState to boolean --- packages/client/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 97c0525f55..80ac725df3 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -17,7 +17,7 @@ export interface SDK { export type Component = Writable<{ id: string styles: any - errorState: string + errorState: boolean }> export type Context = Readable From ed35acc01affb459b38a0ea3a0f7a454ecacf5c8 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Fri, 17 Jan 2025 11:57:38 +0100 Subject: [PATCH 10/16] Revert Component store to readable --- packages/client/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 80ac725df3..ada30d53ec 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -1,6 +1,6 @@ import { APIClient } from "@budibase/frontend-core" import type { ActionTypes } from "./constants" -import { Readable, Writable } from "svelte/store" +import { Readable } from "svelte/store" export interface SDK { API: APIClient @@ -14,7 +14,7 @@ export interface SDK { }> } -export type Component = Writable<{ +export type Component = Readable<{ id: string styles: any errorState: boolean From 14bc491d2c83583c00b62e83cccc62c42112c3be Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Fri, 17 Jan 2025 12:44:39 +0100 Subject: [PATCH 11/16] More typings --- packages/bbui/src/Icon/Icon.svelte | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/bbui/src/Icon/Icon.svelte b/packages/bbui/src/Icon/Icon.svelte index 1a851248b9..35f176035e 100644 --- a/packages/bbui/src/Icon/Icon.svelte +++ b/packages/bbui/src/Icon/Icon.svelte @@ -5,19 +5,19 @@ TooltipType, } from "../Tooltip/AbsTooltip.svelte" - export let name = "Add" - export let hidden = false + export let name: string = "Add" + export let hidden: boolean = false export let size = "M" - export let hoverable = false - export let disabled = false + export let hoverable: boolean = false + export let disabled: boolean = false export let color: string = undefined - export let hoverColor = undefined - export let tooltip = undefined + export let hoverColor: string = undefined + export let tooltip: string = undefined export let tooltipPosition = TooltipPosition.Bottom export let tooltipType = TooltipType.Default - export let tooltipColor = undefined - export let tooltipWrap = true - export let newStyles = false + export let tooltipColor: string = undefined + export let tooltipWrap: boolean = true + export let newStyles: boolean = false Date: Fri, 17 Jan 2025 21:17:39 +0100 Subject: [PATCH 12/16] Fix types after merge --- packages/bbui/src/Icon/Icon.svelte | 8 ++++---- packages/bbui/src/Tooltip/AbsTooltip.svelte | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/bbui/src/Icon/Icon.svelte b/packages/bbui/src/Icon/Icon.svelte index 35f176035e..7438fab5fd 100644 --- a/packages/bbui/src/Icon/Icon.svelte +++ b/packages/bbui/src/Icon/Icon.svelte @@ -10,12 +10,12 @@ export let size = "M" export let hoverable: boolean = false export let disabled: boolean = false - export let color: string = undefined - export let hoverColor: string = undefined - export let tooltip: string = undefined + export let color: string | undefined = undefined + export let hoverColor: string | undefined = undefined + export let tooltip: string | undefined = undefined export let tooltipPosition = TooltipPosition.Bottom export let tooltipType = TooltipType.Default - export let tooltipColor: string = undefined + export let tooltipColor: string | undefined = undefined export let tooltipWrap: boolean = true export let newStyles: boolean = false diff --git a/packages/bbui/src/Tooltip/AbsTooltip.svelte b/packages/bbui/src/Tooltip/AbsTooltip.svelte index b85f4e1c03..a887db4102 100644 --- a/packages/bbui/src/Tooltip/AbsTooltip.svelte +++ b/packages/bbui/src/Tooltip/AbsTooltip.svelte @@ -23,7 +23,7 @@ export let type = TooltipType.Default export let text = "" export let fixed = false - export let color = null + export let color = "" export let noWrap = false let wrapper From fa930de15e8653a8adb5337f27b2297c711531ea Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 20 Jan 2025 09:45:22 +0100 Subject: [PATCH 13/16] Type fields --- .../components/app/blocks/form/FormBlock.svelte | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index 22f21b5790..ab3c498ca3 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -7,11 +7,13 @@ import { Component, Context, SDK } from "../../../../index" import { TableSchema, UIDatasource } from "@budibase/types" + type Field = { name: string; active: boolean } + export let actionType: string export let dataSource: UIDatasource export let size: string export let disabled: boolean - export let fields + export let fields: (Field | string)[] export let buttons: { "##eventHandlerType": string parameters: Record @@ -66,11 +68,11 @@ } } - const convertOldFieldFormat = (fields: any[]) => { + const convertOldFieldFormat = (fields: (Field | string)[]): Field[] => { if (!fields) { return [] } - return fields.map((field: any) => { + return fields.map(field => { if (typeof field === "string") { // existed but was a string return { @@ -87,14 +89,11 @@ }) } - const getDefaultFields = ( - fields: { name: string; active: boolean }[], - schema: TableSchema - ) => { + const getDefaultFields = (fields: Field[], schema: TableSchema) => { if (!schema) { return [] } - let defaultFields: { name: string; active: boolean }[] = [] + let defaultFields: Field[] = [] if (!fields || fields.length === 0) { Object.values(schema) From 0b73f53974c301667d4f2972d4b3392629e2d64b Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 20 Jan 2025 14:51:37 +0100 Subject: [PATCH 14/16] Automatically type getContext response --- packages/client/src/components/app/DataProvider.svelte | 5 ++--- .../client/src/components/app/blocks/form/FormBlock.svelte | 7 +++---- .../src/components/error-states/ComponentErrorState.svelte | 5 ++--- packages/client/src/context.d.ts | 7 +++++++ 4 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 packages/client/src/context.d.ts diff --git a/packages/client/src/components/app/DataProvider.svelte b/packages/client/src/components/app/DataProvider.svelte index 154f69d4de..a80b9a5f74 100644 --- a/packages/client/src/components/app/DataProvider.svelte +++ b/packages/client/src/components/app/DataProvider.svelte @@ -14,7 +14,6 @@ GroupUserDatasource, DataFetchOptions, } from "@budibase/types" - import { SDK, Component } from "../../index" type ProviderDatasource = Exclude< DataFetchDatasource, @@ -29,8 +28,8 @@ export let paginate: boolean export let autoRefresh: number - const { styleable, Provider, ActionTypes, API } = getContext("sdk") - const component = getContext("component") + const { styleable, Provider, ActionTypes, API } = getContext("sdk") + const component = getContext("component") let interval: ReturnType let queryExtensions: Record = {} diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index ab3c498ca3..3f44aee1d7 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -4,7 +4,6 @@ import { Utils } from "@budibase/frontend-core" import FormBlockWrapper from "./FormBlockWrapper.svelte" import { get } from "svelte/store" - import { Component, Context, SDK } from "../../../../index" import { TableSchema, UIDatasource } from "@budibase/types" type Field = { name: string; active: boolean } @@ -34,9 +33,9 @@ export let saveButtonLabel: boolean export let deleteButtonLabel: boolean - const { fetchDatasourceSchema, generateGoldenSample } = getContext("sdk") - const component = getContext("component") - const context = getContext("context") + const { fetchDatasourceSchema, generateGoldenSample } = getContext("sdk") + const component = getContext("component") + const context = getContext("context") let schema: TableSchema diff --git a/packages/client/src/components/error-states/ComponentErrorState.svelte b/packages/client/src/components/error-states/ComponentErrorState.svelte index b846eaa230..d30f4916da 100644 --- a/packages/client/src/components/error-states/ComponentErrorState.svelte +++ b/packages/client/src/components/error-states/ComponentErrorState.svelte @@ -3,15 +3,14 @@ import { Icon } from "@budibase/bbui" import MissingRequiredSetting from "./MissingRequiredSetting.svelte" import MissingRequiredAncestor from "./MissingRequiredAncestor.svelte" - import { Component, SDK } from "../../index" export let missingRequiredSettings: | { key: string; label: string }[] | undefined export let missingRequiredAncestors: string[] | undefined - const component = getContext("component") - const { styleable, builderStore } = getContext("sdk") + const component = getContext("component") + const { styleable, builderStore } = getContext("sdk") $: styles = { ...$component.styles, normal: {}, custom: null, empty: true } $: requiredSetting = missingRequiredSettings?.[0] diff --git a/packages/client/src/context.d.ts b/packages/client/src/context.d.ts new file mode 100644 index 0000000000..1bc0e3f7ad --- /dev/null +++ b/packages/client/src/context.d.ts @@ -0,0 +1,7 @@ +import { Component, Context, SDK } from "." + +declare module "svelte" { + function getContext(name: "sdk"): SDK + function getContext(name: "component"): Component + function getContext(name: "context"): Context +} From cbabaaf8f7c4b52d7fc5d8e21fa07ce5867b1134 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 20 Jan 2025 15:09:02 +0100 Subject: [PATCH 15/16] Move types --- packages/client/src/context.d.ts | 7 ++++--- packages/client/src/index.ts | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/client/src/context.d.ts b/packages/client/src/context.d.ts index 1bc0e3f7ad..6ac29df547 100644 --- a/packages/client/src/context.d.ts +++ b/packages/client/src/context.d.ts @@ -1,7 +1,8 @@ +import { Readable } from "svelte/store" import { Component, Context, SDK } from "." declare module "svelte" { - function getContext(name: "sdk"): SDK - function getContext(name: "component"): Component - function getContext(name: "context"): Context + export function getContext(key: "sdk"): SDK + export function getContext(key: "component"): Readable + export function getContext(key: "context"): Readable } diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index ada30d53ec..dabe66dab2 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -14,10 +14,10 @@ export interface SDK { }> } -export type Component = Readable<{ +export type Component = { id: string styles: any errorState: boolean -}> +} -export type Context = Readable +export type Context = {} From 199aa80e25433fe5ec103ef449ce29346138289e Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 20 Jan 2025 15:10:03 +0100 Subject: [PATCH 16/16] Move types --- packages/client/src/context.d.ts | 5 ++--- packages/client/src/index.ts | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/client/src/context.d.ts b/packages/client/src/context.d.ts index 6ac29df547..994f9ef172 100644 --- a/packages/client/src/context.d.ts +++ b/packages/client/src/context.d.ts @@ -1,8 +1,7 @@ -import { Readable } from "svelte/store" import { Component, Context, SDK } from "." declare module "svelte" { export function getContext(key: "sdk"): SDK - export function getContext(key: "component"): Readable - export function getContext(key: "context"): Readable + export function getContext(key: "component"): Component + export function getContext(key: "context"): Context } diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index dabe66dab2..2a435c2f8c 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -14,10 +14,10 @@ export interface SDK { }> } -export type Component = { +export type Component = Readable<{ id: string styles: any errorState: boolean -} +}> -export type Context = {} +export type Context = Readable<{}>