Type DND store and update store import aliases

This commit is contained in:
Andrew Kingston 2025-02-06 11:02:54 +00:00
parent a541603267
commit 790ca4737c
No known key found for this signature in database
46 changed files with 141 additions and 135 deletions

View File

@ -1,10 +1,6 @@
import { createAPIClient } from "@budibase/frontend-core" import { createAPIClient } from "@budibase/frontend-core"
import { authStore } from "../stores/auth" import { authStore } from "../stores/auth"
import { import { notificationStore, devToolsEnabled, devToolsStore } from "../stores"
notificationStore,
devToolsEnabled,
devToolsStore,
} from "../stores/index"
import { get } from "svelte/store" import { get } from "svelte/store"
export const API = createAPIClient({ export const API = createAPIClient({

View File

@ -6,7 +6,7 @@
import { Constants, CookieUtils } from "@budibase/frontend-core" import { Constants, CookieUtils } from "@budibase/frontend-core"
import { getThemeClassNames } from "@budibase/shared-core" import { getThemeClassNames } from "@budibase/shared-core"
import Component from "./Component.svelte" import Component from "./Component.svelte"
import SDK from "sdk" import SDK from "@/sdk"
import { import {
featuresStore, featuresStore,
createContextStore, createContextStore,
@ -22,26 +22,26 @@
environmentStore, environmentStore,
sidePanelStore, sidePanelStore,
modalStore, modalStore,
} from "stores" } from "@/stores"
import NotificationDisplay from "components/overlay/NotificationDisplay.svelte" import NotificationDisplay from "./overlay/NotificationDisplay.svelte"
import ConfirmationDisplay from "components/overlay/ConfirmationDisplay.svelte" import ConfirmationDisplay from "./overlay/ConfirmationDisplay.svelte"
import PeekScreenDisplay from "components/overlay/PeekScreenDisplay.svelte" import PeekScreenDisplay from "./overlay/PeekScreenDisplay.svelte"
import UserBindingsProvider from "components/context/UserBindingsProvider.svelte" import UserBindingsProvider from "./context/UserBindingsProvider.svelte"
import DeviceBindingsProvider from "components/context/DeviceBindingsProvider.svelte" import DeviceBindingsProvider from "./context/DeviceBindingsProvider.svelte"
import StateBindingsProvider from "components/context/StateBindingsProvider.svelte" import StateBindingsProvider from "./context/StateBindingsProvider.svelte"
import RowSelectionProvider from "components/context/RowSelectionProvider.svelte" import RowSelectionProvider from "./context/RowSelectionProvider.svelte"
import QueryParamsProvider from "components/context/QueryParamsProvider.svelte" import QueryParamsProvider from "./context/QueryParamsProvider.svelte"
import SettingsBar from "components/preview/SettingsBar.svelte" import SettingsBar from "./preview/SettingsBar.svelte"
import SelectionIndicator from "components/preview/SelectionIndicator.svelte" import SelectionIndicator from "./preview/SelectionIndicator.svelte"
import HoverIndicator from "components/preview/HoverIndicator.svelte" import HoverIndicator from "./preview/HoverIndicator.svelte"
import CustomThemeWrapper from "./CustomThemeWrapper.svelte" import CustomThemeWrapper from "./CustomThemeWrapper.svelte"
import DNDHandler from "components/preview/DNDHandler.svelte" import DNDHandler from "./preview/DNDHandler.svelte"
import GridDNDHandler from "components/preview/GridDNDHandler.svelte" import GridDNDHandler from "./preview/GridDNDHandler.svelte"
import KeyboardManager from "components/preview/KeyboardManager.svelte" import KeyboardManager from "./preview/KeyboardManager.svelte"
import DevToolsHeader from "components/devtools/DevToolsHeader.svelte" import DevToolsHeader from "./devtools/DevToolsHeader.svelte"
import DevTools from "components/devtools/DevTools.svelte" import DevTools from "./devtools/DevTools.svelte"
import FreeFooter from "components/FreeFooter.svelte" import FreeFooter from "./FreeFooter.svelte"
import MaintenanceScreen from "components/MaintenanceScreen.svelte" import MaintenanceScreen from "./MaintenanceScreen.svelte"
import SnippetsProvider from "./context/SnippetsProvider.svelte" import SnippetsProvider from "./context/SnippetsProvider.svelte"
import EmbedProvider from "./context/EmbedProvider.svelte" import EmbedProvider from "./context/EmbedProvider.svelte"
import DNDSelectionIndicators from "./preview/DNDSelectionIndicators.svelte" import DNDSelectionIndicators from "./preview/DNDSelectionIndicators.svelte"

View File

@ -20,7 +20,7 @@
appStore, appStore,
dndComponentPath, dndComponentPath,
dndIsDragging, dndIsDragging,
} from "stores" } from "@/stores"
import { Helpers } from "@budibase/bbui" import { Helpers } from "@budibase/bbui"
import { getActiveConditions, reduceConditionActions } from "utils/conditions" import { getActiveConditions, reduceConditionActions } from "utils/conditions"
import EmptyPlaceholder from "components/app/EmptyPlaceholder.svelte" import EmptyPlaceholder from "components/app/EmptyPlaceholder.svelte"

View File

@ -1,5 +1,5 @@
<script> <script>
import { themeStore } from "stores" import { themeStore } from "@/stores"
import { setContext } from "svelte" import { setContext } from "svelte"
import { Context } from "@budibase/bbui" import { Context } from "@budibase/bbui"

View File

@ -1,7 +1,7 @@
<script> <script>
import { setContext, getContext, onMount } from "svelte" import { setContext, getContext, onMount } from "svelte"
import Router, { querystring } from "svelte-spa-router" import Router, { querystring } from "svelte-spa-router"
import { routeStore, stateStore } from "stores" import { routeStore, stateStore } from "@/stores"
import Screen from "./Screen.svelte" import Screen from "./Screen.svelte"
import { get } from "svelte/store" import { get } from "svelte/store"

View File

@ -1,5 +1,5 @@
<script> <script>
import { screenStore, routeStore, builderStore } from "stores" import { screenStore, routeStore, builderStore } from "@/stores"
import { get } from "svelte/store" import { get } from "svelte/store"
import Component from "./Component.svelte" import Component from "./Component.svelte"
import Provider from "./context/Provider.svelte" import Provider from "./context/Provider.svelte"

View File

@ -3,7 +3,7 @@
// because it functions similarly to one // because it functions similarly to one
import { getContext, onMount } from "svelte" import { getContext, onMount } from "svelte"
import { get, derived, readable } from "svelte/store" import { get, derived, readable } from "svelte/store"
import { featuresStore } from "stores" import { featuresStore } from "@/stores"
import { Grid } from "@budibase/frontend-core" import { Grid } from "@budibase/frontend-core"
import { processStringSync } from "@budibase/string-templates" import { processStringSync } from "@budibase/string-templates"

View File

@ -2,7 +2,7 @@
import BlockComponent from "components/BlockComponent.svelte" import BlockComponent from "components/BlockComponent.svelte"
import { Helpers } from "@budibase/bbui" import { Helpers } from "@budibase/bbui"
import { getContext, setContext } from "svelte" import { getContext, setContext } from "svelte"
import { builderStore } from "stores" import { builderStore } from "@/stores"
import { Utils } from "@budibase/frontend-core" import { Utils } from "@budibase/frontend-core"
import FormBlockWrapper from "./form/FormBlockWrapper.svelte" import FormBlockWrapper from "./form/FormBlockWrapper.svelte"
import { get, writable } from "svelte/store" import { get, writable } from "svelte/store"

View File

@ -1,7 +1,7 @@
<script> <script>
import Provider from "./Provider.svelte" import Provider from "./Provider.svelte"
import { onMount, onDestroy } from "svelte" import { onMount, onDestroy } from "svelte"
import { themeStore } from "stores" import { themeStore } from "@/stores"
let width = window.innerWidth let width = window.innerWidth
let height = window.innerHeight let height = window.innerHeight

View File

@ -1,6 +1,6 @@
<script> <script>
import { getContext, setContext, onDestroy } from "svelte" import { getContext, setContext, onDestroy } from "svelte"
import { dataSourceStore, createContextStore } from "stores" import { dataSourceStore, createContextStore } from "@/stores"
import { ActionTypes } from "constants" import { ActionTypes } from "constants"
import { generate } from "shortid" import { generate } from "shortid"

View File

@ -1,6 +1,6 @@
<script> <script>
import Provider from "./Provider.svelte" import Provider from "./Provider.svelte"
import { routeStore } from "stores" import { routeStore } from "@/stores"
</script> </script>
<Provider key="query" data={$routeStore.queryParams}> <Provider key="query" data={$routeStore.queryParams}>

View File

@ -1,6 +1,6 @@
<script> <script>
import Provider from "./Provider.svelte" import Provider from "./Provider.svelte"
import { rowSelectionStore } from "stores" import { rowSelectionStore } from "@/stores"
</script> </script>
<Provider key="rowSelection" data={$rowSelectionStore}> <Provider key="rowSelection" data={$rowSelectionStore}>

View File

@ -1,6 +1,6 @@
<script> <script>
import Provider from "./Provider.svelte" import Provider from "./Provider.svelte"
import { snippets } from "stores" import { snippets } from "@/stores"
</script> </script>
<Provider key="snippets" data={$snippets}> <Provider key="snippets" data={$snippets}>

View File

@ -1,6 +1,6 @@
<script> <script>
import Provider from "./Provider.svelte" import Provider from "./Provider.svelte"
import { stateStore } from "stores" import { stateStore } from "@/stores"
</script> </script>
<Provider key="state" data={$stateStore}> <Provider key="state" data={$stateStore}>

View File

@ -1,6 +1,6 @@
<script> <script>
import Provider from "./Provider.svelte" import Provider from "./Provider.svelte"
import { authStore, currentRole } from "stores" import { authStore, currentRole } from "@/stores"
import { ActionTypes } from "constants" import { ActionTypes } from "constants"
import { Constants } from "@budibase/frontend-core" import { Constants } from "@budibase/frontend-core"

View File

@ -3,7 +3,7 @@
import { Layout, Heading, Tabs, Tab, Icon } from "@budibase/bbui" import { Layout, Heading, Tabs, Tab, Icon } from "@budibase/bbui"
import DevToolsStatsTab from "./DevToolsStatsTab.svelte" import DevToolsStatsTab from "./DevToolsStatsTab.svelte"
import DevToolsComponentTab from "./DevToolsComponentTab.svelte" import DevToolsComponentTab from "./DevToolsComponentTab.svelte"
import { devToolsStore } from "stores" import { devToolsStore } from "@/stores"
const context = getContext("context") const context = getContext("context")
</script> </script>

View File

@ -1,6 +1,6 @@
<script> <script>
import { Layout, Select, Body } from "@budibase/bbui" import { Layout, Select, Body } from "@budibase/bbui"
import { componentStore } from "stores/index.js" import { componentStore } from "stores/index.ts"
import DevToolsStat from "./DevToolsStat.svelte" import DevToolsStat from "./DevToolsStat.svelte"
const ReadableBindingMap = { const ReadableBindingMap = {

View File

@ -2,7 +2,7 @@
import { Layout, Toggle } from "@budibase/bbui" import { Layout, Toggle } from "@budibase/bbui"
import { getSettingsDefinition } from "@budibase/frontend-core" import { getSettingsDefinition } from "@budibase/frontend-core"
import DevToolsStat from "./DevToolsStat.svelte" import DevToolsStat from "./DevToolsStat.svelte"
import { componentStore } from "stores/index.js" import { componentStore } from "stores/index.ts"
let showEnrichedSettings = true let showEnrichedSettings = true

View File

@ -1,6 +1,6 @@
<script> <script>
import { Body, Layout, Heading, Button, Tabs, Tab } from "@budibase/bbui" import { Body, Layout, Heading, Button, Tabs, Tab } from "@budibase/bbui"
import { builderStore, devToolsStore, componentStore } from "stores" import { builderStore, devToolsStore, componentStore } from "@/stores"
import DevToolsStat from "./DevToolsStat.svelte" import DevToolsStat from "./DevToolsStat.svelte"
import DevToolsComponentSettingsTab from "./DevToolsComponentSettingsTab.svelte" import DevToolsComponentSettingsTab from "./DevToolsComponentSettingsTab.svelte"
import DevToolsComponentContextTab from "./DevToolsComponentContextTab.svelte" import DevToolsComponentContextTab from "./DevToolsComponentContextTab.svelte"

View File

@ -1,6 +1,6 @@
<script> <script>
import { Heading, Select, ActionButton } from "@budibase/bbui" import { Heading, Select, ActionButton } from "@budibase/bbui"
import { devToolsStore, appStore } from "../../stores" import { devToolsStore, appStore } from "stores"
import { getContext, onMount } from "svelte" import { getContext, onMount } from "svelte"
import { API } from "api" import { API } from "api"

View File

@ -1,6 +1,6 @@
<script> <script>
import { Helpers } from "@budibase/bbui" import { Helpers } from "@budibase/bbui"
import { notificationStore } from "stores" import { notificationStore } from "@/stores"
export let label export let label
export let value export let value

View File

@ -1,6 +1,6 @@
<script> <script>
import { Layout } from "@budibase/bbui" import { Layout } from "@budibase/bbui"
import { authStore, appStore, screenStore, componentStore } from "stores" import { authStore, appStore, screenStore, componentStore } from "@/stores"
import DevToolsStat from "./DevToolsStat.svelte" import DevToolsStat from "./DevToolsStat.svelte"
</script> </script>

View File

@ -1,5 +1,5 @@
<script> <script>
import { confirmationStore } from "stores" import { confirmationStore } from "@/stores"
import { Modal, ModalContent } from "@budibase/bbui" import { Modal, ModalContent } from "@budibase/bbui"
</script> </script>

View File

@ -1,5 +1,5 @@
<script> <script>
import { notificationStore } from "stores" import { notificationStore } from "@/stores"
import { Notification } from "@budibase/bbui" import { Notification } from "@budibase/bbui"
import { fly } from "svelte/transition" import { fly } from "svelte/transition"
</script> </script>

View File

@ -5,7 +5,7 @@
notificationStore, notificationStore,
routeStore, routeStore,
stateStore, stateStore,
} from "stores" } from "@/stores"
import { Modal, ModalContent, ActionButton } from "@budibase/bbui" import { Modal, ModalContent, ActionButton } from "@budibase/bbui"
import { onDestroy } from "svelte" import { onDestroy } from "svelte"

View File

@ -10,7 +10,7 @@
dndSource, dndSource,
dndIsDragging, dndIsDragging,
isGridScreen, isGridScreen,
} from "stores" } from "@/stores"
import { Utils } from "@budibase/frontend-core" import { Utils } from "@budibase/frontend-core"
import { findComponentById } from "@/utils/components.js" import { findComponentById } from "@/utils/components.js"
import { isGridEvent } from "@/utils/grid" import { isGridEvent } from "@/utils/grid"
@ -266,7 +266,7 @@
source.type, source.type,
drop.parent, drop.parent,
drop.index, drop.index,
$dndStore.meta.newComponentProps $dndStore.source?.props
) )
dropping = false dropping = false
stopDragging() stopDragging()

View File

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { isGridScreen, dndParent, dndSource, dndIsDragging } from "@/stores" import { isGridScreen, dndParent, dndSource, dndIsDragging } from "stores"
import { DNDPlaceholderID } from "@/constants" import { DNDPlaceholderID } from "@/constants"
import IndicatorSet from "./IndicatorSet.svelte" import IndicatorSet from "./IndicatorSet.svelte"
</script> </script>

View File

@ -7,7 +7,7 @@
dndStore, dndStore,
dndSource, dndSource,
isGridScreen, isGridScreen,
} from "stores" } from "@/stores"
import { Utils, memo } from "@budibase/frontend-core" import { Utils, memo } from "@budibase/frontend-core"
import { DNDPlaceholderID, GridRowHeight } from "@/constants" import { DNDPlaceholderID, GridRowHeight } from "@/constants"
import { import {
@ -54,7 +54,7 @@
// real component to render in the new position before updating the DND // real component to render in the new position before updating the DND
// store, preventing the green DND overlay from being out of position // store, preventing the green DND overlay from being out of position
if ($dndSource?.isNew && styles) { if ($dndSource?.isNew && styles) {
dndStore.actions.updateNewComponentProps({ dndStore.actions.updateSourceProps({
_styles: { _styles: {
normal: styles, normal: styles,
}, },

View File

@ -1,6 +1,6 @@
<script> <script>
import { onDestroy, getContext } from "svelte" import { onDestroy, getContext } from "svelte"
import { builderStore, componentStore, screenStore } from "stores" import { builderStore, componentStore, screenStore } from "@/stores"
import { Utils, memo } from "@budibase/frontend-core" import { Utils, memo } from "@budibase/frontend-core"
import { GridRowHeight } from "constants" import { GridRowHeight } from "constants"
import { GridParams, getGridVar, Devices } from "utils/grid" import { GridParams, getGridVar, Devices } from "utils/grid"

View File

@ -1,6 +1,6 @@
<script> <script>
import { Icon } from "@budibase/bbui" import { Icon } from "@budibase/bbui"
import { builderStore } from "stores" import { builderStore } from "@/stores"
export let style export let style
export let value export let value

View File

@ -1,7 +1,7 @@
<script> <script>
import { onMount, onDestroy } from "svelte" import { onMount, onDestroy } from "svelte"
import { get } from "svelte/store" import { get } from "svelte/store"
import { builderStore } from "stores" import { builderStore } from "@/stores"
onMount(() => { onMount(() => {
if (get(builderStore).inBuilder) { if (get(builderStore).inBuilder) {

View File

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { dndIsDragging, builderStore } from "@/stores" import { dndIsDragging, builderStore } from "stores"
import IndicatorSet from "./IndicatorSet.svelte" import IndicatorSet from "./IndicatorSet.svelte"
$: color = $builderStore.editMode $: color = $builderStore.editMode

View File

@ -4,7 +4,7 @@
import GridStylesButton from "./GridStylesButton.svelte" import GridStylesButton from "./GridStylesButton.svelte"
import SettingsColorPicker from "./SettingsColorPicker.svelte" import SettingsColorPicker from "./SettingsColorPicker.svelte"
import SettingsPicker from "./SettingsPicker.svelte" import SettingsPicker from "./SettingsPicker.svelte"
import { builderStore, componentStore, dndIsDragging } from "stores" import { builderStore, componentStore, dndIsDragging } from "@/stores"
import { Utils, shouldDisplaySetting } from "@budibase/frontend-core" import { Utils, shouldDisplaySetting } from "@budibase/frontend-core"
import { getGridVar, GridParams, Devices } from "utils/grid" import { getGridVar, GridParams, Devices } from "utils/grid"

View File

@ -1,6 +1,6 @@
<script> <script>
import { Icon } from "@budibase/bbui" import { Icon } from "@budibase/bbui"
import { builderStore } from "stores" import { builderStore } from "@/stores"
import { createEventDispatcher } from "svelte" import { createEventDispatcher } from "svelte"
export let prop export let prop

View File

@ -1,6 +1,6 @@
<script> <script>
import { ColorPicker } from "@budibase/bbui" import { ColorPicker } from "@budibase/bbui"
import { builderStore } from "stores" import { builderStore } from "@/stores"
export let prop export let prop
export let component export let component

View File

@ -1,6 +1,6 @@
<script> <script>
import { Select } from "@budibase/bbui" import { Select } from "@budibase/bbui"
import { builderStore } from "stores" import { builderStore } from "@/stores"
export let prop export let prop
export let options export let options

View File

@ -10,7 +10,7 @@ import {
eventStore, eventStore,
hoverStore, hoverStore,
stateStore, stateStore,
} from "@/stores" } from "stores"
import { get } from "svelte/store" import { get } from "svelte/store"
import { initWebsocket } from "@/websocket" import { initWebsocket } from "@/websocket"
import { APIClient } from "@budibase/frontend-core" import { APIClient } from "@budibase/frontend-core"
@ -163,12 +163,7 @@ const loadBudibase = async () => {
} else if (type === "dragging-new-component") { } else if (type === "dragging-new-component") {
const { dragging, component } = data const { dragging, component } = data
if (dragging) { if (dragging) {
const definition = dndStore.actions.startDraggingNewComponent(component)
componentStore.actions.getComponentDefinition(component)
dndStore.actions.startDraggingNewComponent({
component,
definition,
})
} else { } else {
dndStore.actions.reset() dndStore.actions.reset()
} }

View File

@ -18,7 +18,7 @@ import {
appStore, appStore,
stateStore, stateStore,
createContextStore, createContextStore,
} from "stores" } from "@/stores"
import { styleable } from "utils/styleable" import { styleable } from "utils/styleable"
import { linkable } from "utils/linkable" import { linkable } from "utils/linkable"
import { getAction } from "utils/getAction" import { getAction } from "utils/getAction"

View File

@ -1,6 +1,6 @@
import { derived } from "svelte/store" import { derived } from "svelte/store"
import { findComponentPathById } from "utils/components.js" import { findComponentPathById } from "utils/components.js"
import { dndParent } from "../dnd.js" import { dndParent } from "../dnd.ts"
import { screenStore } from "../screens.js" import { screenStore } from "../screens.js"
export const dndComponentPath = derived( export const dndComponentPath = derived(

View File

@ -1,54 +1,65 @@
import { writable, get } from "svelte/store" import { writable, get } from "svelte/store"
import { derivedMemo } from "@budibase/frontend-core" import { derivedMemo } from "@budibase/frontend-core"
import { screenStore, isGridScreen } from "@/stores" import { screenStore, isGridScreen, componentStore } from "stores/index"
import { ScreenslotID } from "@/constants" import { ScreenslotID } from "@/constants"
import { ComponentDefinition } from "@budibase/types"
interface DNDSource {
id?: string
parent?: string
index?: number
bounds: {
height: number
width: number
}
name: string
icon: string
type: string
isNew: boolean
props?: Record<string, any>
}
interface DNDTarget {
id: string
parent: string
empty: boolean
acceptsChildren: boolean
node?: Node
}
interface DNDDrop {
parent: string
index: number
}
interface DNDState {
source?: DNDSource
target?: DNDTarget
drop?: DNDDrop
}
const createDndStore = () => { const createDndStore = () => {
const initialState = { const store = writable<DNDState>({})
// Info about the dragged component
source: null,
// Info about the target component being hovered over const startDraggingExistingComponent = (source: Omit<DNDSource, "isNew">) => {
target: null,
// Info about where the component would be dropped
drop: null,
// Metadata about the event
meta: {
newComponentProps: null,
},
}
const store = writable(initialState)
const startDraggingExistingComponent = ({
id,
parent,
bounds,
index,
name,
icon,
}) => {
store.set({ store.set({
...initialState, source: {
source: { id, parent, bounds, index, name, icon, isNew: false }, ...source,
isNew: false,
},
}) })
} }
const startDraggingNewComponent = ({ component, definition }) => { const startDraggingNewComponent = (type: string) => {
if (!component) {
return
}
// On grid screens, we already know exactly where to insert the component // On grid screens, we already know exactly where to insert the component
let target, drop let target: DNDTarget | undefined = undefined
const screen = get(screenStore)?.activeScreen let drop: DNDDrop | undefined = undefined
if (get(isGridScreen)) { if (get(isGridScreen)) {
const id = screen?.props?._id const screen = get(screenStore)?.activeScreen
const id = screen.props._id
target = { target = {
id, id,
parent: ScreenslotID, parent: ScreenslotID,
node: null,
empty: false, empty: false,
acceptsChildren: true, acceptsChildren: true,
} }
@ -59,52 +70,55 @@ const createDndStore = () => {
} }
// Get size of new component so we can show a properly sized placeholder // Get size of new component so we can show a properly sized placeholder
const definition: ComponentDefinition =
componentStore.actions.getComponentDefinition(type)
const width = definition?.size?.width || 128 const width = definition?.size?.width || 128
const height = definition?.size?.height || 64 const height = definition?.size?.height || 64
store.set({ store.set({
...initialState,
source: { source: {
id: null,
parent: null,
bounds: { height, width }, bounds: { height, width },
index: null, type,
type: component,
isNew: true, isNew: true,
name: `New ${definition.name}`, name: `New ${definition?.name || "component"}`,
icon: definition.icon, icon: definition?.icon || "Selection",
}, },
target, target,
drop, drop,
}) })
} }
const updateTarget = ({ id, parent, node, empty, acceptsChildren }) => { const updateTarget = (target: DNDTarget) => {
store.update(state => { store.update(state => {
state.target = { id, parent, node, empty, acceptsChildren } state.target = target
return state return state
}) })
} }
const updateDrop = ({ parent, index }) => { const updateDrop = (drop: DNDDrop) => {
store.update(state => { store.update(state => {
state.drop = { parent, index } state.drop = drop
return state return state
}) })
} }
const reset = () => { const reset = () => {
store.set(initialState) store.set({})
} }
const updateNewComponentProps = newComponentProps => { const updateSourceProps = (props: Record<string, any>) => {
store.update(state => ({ store.update(state => {
if (!state.source) {
return state
}
return {
...state, ...state,
meta: { source: {
...state.meta, ...state.source,
newComponentProps, props,
}, },
})) }
})
} }
return { return {
@ -115,7 +129,7 @@ const createDndStore = () => {
updateTarget, updateTarget,
updateDrop, updateDrop,
reset, reset,
updateNewComponentProps, updateSourceProps,
}, },
} }
} }

View File

@ -3,7 +3,7 @@ import { routeStore } from "./routes"
import { builderStore } from "./builder" import { builderStore } from "./builder"
import { appStore } from "./app" import { appStore } from "./app"
import { orgStore } from "./org" import { orgStore } from "./org"
import { dndIndex, dndParent, dndSource } from "./dnd.js" import { dndIndex, dndParent, dndSource } from "./dnd.ts"
import { RoleUtils } from "@budibase/frontend-core" import { RoleUtils } from "@budibase/frontend-core"
import { findComponentById, findComponentParent } from "../utils/components.js" import { findComponentById, findComponentParent } from "../utils/components.js"
import { Helpers } from "@budibase/bbui" import { Helpers } from "@budibase/bbui"

View File

@ -13,7 +13,7 @@ import {
rowSelectionStore, rowSelectionStore,
sidePanelStore, sidePanelStore,
modalStore, modalStore,
} from "stores" } from "@/stores"
import { API } from "api" import { API } from "api"
import { ActionTypes } from "constants" import { ActionTypes } from "constants"
import { enrichDataBindings } from "./enrichDataBinding" import { enrichDataBindings } from "./enrichDataBinding"

View File

@ -1,4 +1,4 @@
import { builderStore } from "stores" import { builderStore } from "@/stores"
/** /**
* Helper to build a CSS string from a style object. * Helper to build a CSS string from a style object.

View File

@ -1,8 +1,4 @@
import { import { builderStore, environmentStore, notificationStore } from "stores"
builderStore,
environmentStore,
notificationStore,
} from "./stores/index.js"
import { get } from "svelte/store" import { get } from "svelte/store"
import { createWebsocket } from "@budibase/frontend-core" import { createWebsocket } from "@budibase/frontend-core"

View File

@ -23,6 +23,11 @@ export interface ComponentDefinition {
legalDirectChildren: string[] legalDirectChildren: string[]
requiredAncestors?: string[] requiredAncestors?: string[]
illegalChildren: string[] illegalChildren: string[]
icon?: string
size?: {
width: number
height: number
}
} }
export interface ComponentSetting { export interface ComponentSetting {