From 894cfba0e07eebfd2b34878dfa123984a98fc420 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 20 Feb 2025 10:58:03 +0100 Subject: [PATCH 1/6] Type BindingSidePanel --- .../bbui/src/Actions/position_dropdown.ts | 2 +- packages/bbui/src/Popover/Popover.svelte | 3 +- .../common/bindings/BindingPanel.svelte | 2 +- .../common/bindings/BindingSidePanel.svelte | 109 ++++++++++-------- packages/types/src/ui/bindings/binding.ts | 12 ++ packages/types/src/ui/bindings/helper.ts | 1 + 6 files changed, 79 insertions(+), 50 deletions(-) diff --git a/packages/bbui/src/Actions/position_dropdown.ts b/packages/bbui/src/Actions/position_dropdown.ts index 424baf91f3..edfe901921 100644 --- a/packages/bbui/src/Actions/position_dropdown.ts +++ b/packages/bbui/src/Actions/position_dropdown.ts @@ -27,7 +27,7 @@ export type UpdateHandler = ( interface Opts { anchor?: HTMLElement - align: PopoverAlignment + align: PopoverAlignment | `${PopoverAlignment}` maxHeight?: number maxWidth?: number minWidth?: number diff --git a/packages/bbui/src/Popover/Popover.svelte b/packages/bbui/src/Popover/Popover.svelte index 0d16aa4f77..5d0c5b7039 100644 --- a/packages/bbui/src/Popover/Popover.svelte +++ b/packages/bbui/src/Popover/Popover.svelte @@ -19,7 +19,8 @@ import { PopoverAlignment } from "../constants" export let anchor: HTMLElement - export let align: PopoverAlignment = PopoverAlignment.Right + export let align: PopoverAlignment | `${PopoverAlignment}` = + PopoverAlignment.Right export let portalTarget: string | undefined = undefined export let minWidth: number | undefined = undefined export let maxWidth: number | undefined = undefined diff --git a/packages/builder/src/components/common/bindings/BindingPanel.svelte b/packages/builder/src/components/common/bindings/BindingPanel.svelte index 2c35acdf2d..1f61136500 100644 --- a/packages/builder/src/components/common/bindings/BindingPanel.svelte +++ b/packages/builder/src/components/common/bindings/BindingPanel.svelte @@ -421,7 +421,7 @@ {context} addHelper={onSelectHelper} addBinding={onSelectBinding} - mode={editorMode} + {mode} /> {:else if sidePanel === SidePanel.Evaluation} + - -
- {#if hoverTarget.description} -
+{#if popoverAnchor && hoverTarget} + +
+ {#if hoverTarget.description} +
+ + {@html hoverTarget.description} +
+ {/if} + {#if hoverTarget.code} - {@html hoverTarget.description} -
- {/if} - {#if hoverTarget.code} - -
{@html hoverTarget.code}
- {/if} -
- +
{@html hoverTarget.code}
+ {/if} +
+
+{/if} @@ -173,7 +186,7 @@
@@ -230,7 +243,8 @@ {#each category.bindings as binding}
  • showBindingPopover(binding, e.target)} + on:mouseenter={e => + showBindingPopover(binding, e.currentTarget)} on:mouseleave={hidePopover} on:click={() => addBinding(binding)} > @@ -266,7 +280,8 @@ class="binding" on:mouseenter={e => showHelperPopover(helper, e.target)} on:mouseleave={hidePopover} - on:click={() => addHelper(helper, mode.name === "javascript")} + on:click={() => + addHelper(helper, mode === BindingMode.JavaScript)} > {helper.displayText} diff --git a/packages/types/src/ui/bindings/binding.ts b/packages/types/src/ui/bindings/binding.ts index fdeb4a6c13..9e15d9dd13 100644 --- a/packages/types/src/ui/bindings/binding.ts +++ b/packages/types/src/ui/bindings/binding.ts @@ -1,7 +1,19 @@ export interface EnrichedBinding { + value: string + valueHTML: string runtimeBinding: string readableBinding: string type?: null | string + icon?: string + category: string + display?: { name: string; type: string } + fieldSchema?: { + name: string + tableId: string + type: string + subtype?: string + prefixKeys?: string + } } export enum BindingMode { diff --git a/packages/types/src/ui/bindings/helper.ts b/packages/types/src/ui/bindings/helper.ts index e772180264..e25918438f 100644 --- a/packages/types/src/ui/bindings/helper.ts +++ b/packages/types/src/ui/bindings/helper.ts @@ -1,4 +1,5 @@ export interface Helper { + displayText: string example: string description: string args: any[] From 93a65b6289f74f9b1248dc9ab09cb454ed77a4d3 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 20 Feb 2025 11:17:09 +0100 Subject: [PATCH 2/6] Add eslint rule for consistent type imports --- eslint.config.mjs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index c497974612..2f4072a188 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -94,6 +94,15 @@ export default [ allowImportExportEverywhere: true, }, }, + + plugins: { + ...config.plugins, + "@typescript-eslint": tseslint.plugin, + }, + rules: { + ...config.rules, + "@typescript-eslint/consistent-type-imports": "error", + }, })), ...tseslint.configs.strict.map(config => ({ ...config, From a84044e6a1daf862a03f56cefa7e85acd3eb4f28 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Thu, 20 Feb 2025 11:18:40 +0100 Subject: [PATCH 3/6] Lint fix --- .../components/common/bindings/BindingSidePanel.svelte | 3 ++- packages/client/src/components/app/DataProvider.svelte | 9 +++++---- .../src/components/app/blocks/form/FormBlock.svelte | 2 +- .../components/error-states/ComponentErrorState.svelte | 2 +- .../error-states/ComponentErrorStateCTA.svelte | 2 +- packages/client/src/components/preview/DNDHandler.svelte | 2 +- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/builder/src/components/common/bindings/BindingSidePanel.svelte b/packages/builder/src/components/common/bindings/BindingSidePanel.svelte index 9cd56c7797..120d14252d 100644 --- a/packages/builder/src/components/common/bindings/BindingSidePanel.svelte +++ b/packages/builder/src/components/common/bindings/BindingSidePanel.svelte @@ -3,7 +3,8 @@ import { convertToJS } from "@budibase/string-templates" import { Input, Layout, Icon, Popover } from "@budibase/bbui" import { handlebarsCompletions } from "@/constants/completions" - import { BindingMode, EnrichedBinding, Helper } from "@budibase/types" + import type { EnrichedBinding, Helper } from "@budibase/types"; +import { BindingMode } from "@budibase/types" export let addHelper: (helper: Helper, js?: boolean) => void export let addBinding: (binding: EnrichedBinding) => void diff --git a/packages/client/src/components/app/DataProvider.svelte b/packages/client/src/components/app/DataProvider.svelte index a80b9a5f74..9c79b36c4b 100644 --- a/packages/client/src/components/app/DataProvider.svelte +++ b/packages/client/src/components/app/DataProvider.svelte @@ -2,9 +2,7 @@ import { getContext } from "svelte" import { Pagination, ProgressCircle } from "@budibase/bbui" import { fetchData, QueryUtils } from "@budibase/frontend-core" - import { - LogicalOperator, - EmptyFilterOption, + import type { TableSchema, SortOrder, SearchFilters, @@ -12,7 +10,10 @@ DataFetchDatasource, UserDatasource, GroupUserDatasource, - DataFetchOptions, + DataFetchOptions} from "@budibase/types"; +import { + LogicalOperator, + EmptyFilterOption } from "@budibase/types" type ProviderDatasource = Exclude< diff --git a/packages/client/src/components/app/blocks/form/FormBlock.svelte b/packages/client/src/components/app/blocks/form/FormBlock.svelte index 3f44aee1d7..17804b033a 100644 --- a/packages/client/src/components/app/blocks/form/FormBlock.svelte +++ b/packages/client/src/components/app/blocks/form/FormBlock.svelte @@ -4,7 +4,7 @@ import { Utils } from "@budibase/frontend-core" import FormBlockWrapper from "./FormBlockWrapper.svelte" import { get } from "svelte/store" - import { TableSchema, UIDatasource } from "@budibase/types" + import type { TableSchema, UIDatasource } from "@budibase/types" type Field = { name: string; active: boolean } diff --git a/packages/client/src/components/error-states/ComponentErrorState.svelte b/packages/client/src/components/error-states/ComponentErrorState.svelte index b2e7c92eae..1bcd5f21fa 100644 --- a/packages/client/src/components/error-states/ComponentErrorState.svelte +++ b/packages/client/src/components/error-states/ComponentErrorState.svelte @@ -1,7 +1,7 @@