From 9d5f501d2a9c0e38ffc08b56685d004ca6d1e30d Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Tue, 28 Jan 2025 15:50:35 +0100 Subject: [PATCH 1/5] Remove any --- packages/builder/src/stores/builder/components.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/builder/src/stores/builder/components.ts b/packages/builder/src/stores/builder/components.ts index 46d3e07eae..d506d508e7 100644 --- a/packages/builder/src/stores/builder/components.ts +++ b/packages/builder/src/stores/builder/components.ts @@ -254,7 +254,10 @@ export class ComponentStore extends BudiStore { * @param {object} opts * @returns */ - enrichEmptySettings(component: Component, opts: any) { + enrichEmptySettings( + component: Component, + opts: { screen?: Screen; parent?: Component; useDefaultValues?: boolean } + ) { if (!component?._component) { return } @@ -1339,7 +1342,7 @@ export const componentStore = new ComponentStore() export const selectedComponent = derived( [componentStore, selectedScreen], - ([$store, $selectedScreen]) => { + ([$store, $selectedScreen]): Component | null => { if ( $selectedScreen && $store.selectedComponentId?.startsWith(`${$selectedScreen._id}-`) From 12ab5637c1cea9c2c5f4b392961153462a391b9d Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 29 Jan 2025 10:54:20 +0100 Subject: [PATCH 2/5] Fix selecting screen on undo --- packages/builder/src/stores/builder/automations.ts | 2 -- packages/builder/src/stores/builder/screens.ts | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/builder/src/stores/builder/automations.ts b/packages/builder/src/stores/builder/automations.ts index 9b20b4cd03..98213581a6 100644 --- a/packages/builder/src/stores/builder/automations.ts +++ b/packages/builder/src/stores/builder/automations.ts @@ -1437,8 +1437,6 @@ class AutomationStore extends BudiStore { this.history = createHistoryStore({ getDoc: this.actions.getDefinition.bind(this), selectDoc: this.actions.select.bind(this), - beforeAction: () => {}, - afterAction: () => {}, }) // Then wrap save and delete with history diff --git a/packages/builder/src/stores/builder/screens.ts b/packages/builder/src/stores/builder/screens.ts index 5163c6a3ea..a1b51875b3 100644 --- a/packages/builder/src/stores/builder/screens.ts +++ b/packages/builder/src/stores/builder/screens.ts @@ -58,13 +58,12 @@ export class ScreenStore extends BudiStore { getDoc: (id: string) => get(this.store).screens?.find(screen => screen._id === id), selectDoc: this.select, - beforeAction: () => {}, afterAction: () => { // Ensure a valid component is selected if (!get(selectedComponent)) { - this.update(state => ({ + componentStore.update(state => ({ ...state, - selectedComponentId: get(selectedScreen)?.props._id, + selectedComponentId: get(selectedScreen)?._id, })) } }, From e34812719bb716b8748014729cb909056dff9576 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 29 Jan 2025 11:03:38 +0100 Subject: [PATCH 3/5] Fix anys and undefineds --- .../builder/src/stores/builder/components.ts | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/builder/src/stores/builder/components.ts b/packages/builder/src/stores/builder/components.ts index d506d508e7..30370f1c32 100644 --- a/packages/builder/src/stores/builder/components.ts +++ b/packages/builder/src/stores/builder/components.ts @@ -30,9 +30,18 @@ import { } from "@/constants/backend" import { BudiStore } from "../BudiStore" import { Utils } from "@budibase/frontend-core" -import { Component, FieldType, Screen, Table } from "@budibase/types" +import { + Component as ComponentType, + FieldType, + Screen, + Table, +} from "@budibase/types" import { utils } from "@budibase/shared-core" +interface Component extends ComponentType { + _id: string +} + export interface ComponentState { components: Record customComponents: string[] @@ -442,7 +451,11 @@ export class ComponentStore extends BudiStore { * @param {object} parent * @returns */ - createInstance(componentName: string, presetProps: any, parent: any) { + createInstance( + componentName: string, + presetProps: any, + parent: any + ): Component | null { const screen = get(selectedScreen) if (!screen) { throw "A valid screen must be selected" @@ -454,7 +467,7 @@ export class ComponentStore extends BudiStore { } // Generate basic component structure - let instance = { + let instance: Component = { _id: Helpers.uuid(), _component: definition.component, _styles: { @@ -481,7 +494,7 @@ export class ComponentStore extends BudiStore { } // Custom post processing for creation only - let extras: any = {} + let extras: Partial = {} if (definition.hasChildren) { extras._children = [] } @@ -490,7 +503,7 @@ export class ComponentStore extends BudiStore { if (componentName.endsWith("/formstep")) { const parentForm = findClosestMatchingComponent( screen.props, - get(selectedComponent)._id, + get(selectedComponent)?._id, (component: Component) => component._component.endsWith("/form") ) const formSteps = findAllMatchingComponents( @@ -775,7 +788,7 @@ export class ComponentStore extends BudiStore { if (!cut) { componentToPaste = makeComponentUnique(componentToPaste) } - newComponentId = componentToPaste._id! + newComponentId = componentToPaste._id // Strip grid position metadata if pasting into a new screen, but keep // alignment metadata @@ -918,7 +931,7 @@ export class ComponentStore extends BudiStore { // If we have children, select first child, and the node is not collapsed if ( - component._children?.length && + component?._children?.length && (state.selectedComponentId === navComponentId || componentTreeNodesStore.isNodeExpanded(component._id)) ) { @@ -1347,7 +1360,10 @@ export const selectedComponent = derived( $selectedScreen && $store.selectedComponentId?.startsWith(`${$selectedScreen._id}-`) ) { - return $selectedScreen?.props + return { + ...$selectedScreen.props, + _id: $selectedScreen.props._id!, + } } if (!$selectedScreen || !$store.selectedComponentId) { return null From 53f0c3ce92962315c83a215a06e8ae7d16ec6a81 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 29 Jan 2025 11:19:28 +0100 Subject: [PATCH 4/5] Fix types --- packages/builder/src/stores/builder/history.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/builder/src/stores/builder/history.js b/packages/builder/src/stores/builder/history.js index 62a8ed2f97..50d68bd543 100644 --- a/packages/builder/src/stores/builder/history.js +++ b/packages/builder/src/stores/builder/history.js @@ -16,8 +16,8 @@ export const initialState = { export const createHistoryStore = ({ getDoc, selectDoc, - beforeAction, - afterAction, + beforeAction = () => {}, + afterAction = () => {}, }) => { // Use a derived store to check if we are able to undo or redo any operations const store = writable(initialState) From ba448c31642a2d3c7809b9ca4b29c944bece0e73 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 29 Jan 2025 11:24:20 +0100 Subject: [PATCH 5/5] Fix types --- packages/builder/src/stores/builder/components.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/builder/src/stores/builder/components.ts b/packages/builder/src/stores/builder/components.ts index 30370f1c32..90e1abfecf 100644 --- a/packages/builder/src/stores/builder/components.ts +++ b/packages/builder/src/stores/builder/components.ts @@ -376,7 +376,7 @@ export class ComponentStore extends BudiStore { getSchemaForDatasource(screen, dataSource, {}) // Finds fields by types from the schema of the configured datasource - const findFieldTypes = (fieldTypes: any) => { + const findFieldTypes = (fieldTypes: FieldType | FieldType[]) => { if (!Array.isArray(fieldTypes)) { fieldTypes = [fieldTypes] } @@ -531,7 +531,7 @@ export class ComponentStore extends BudiStore { async create( componentName: string, presetProps: any, - parent: any, + parent: Component, index: number ) { const state = get(this.store)