2020-11-13 16:42:32 +01:00
|
|
|
import ClientApp from "./components/ClientApp.svelte"
|
2022-09-30 13:31:16 +02:00
|
|
|
import {
|
|
|
|
builderStore,
|
|
|
|
appStore,
|
2022-09-13 12:31:45 +02:00
|
|
|
blockStore,
|
|
|
|
componentStore,
|
2022-09-30 13:31:16 +02:00
|
|
|
environmentStore,
|
2022-10-14 14:37:14 +02:00
|
|
|
dndStore,
|
2022-10-24 10:02:50 +02:00
|
|
|
eventStore,
|
2022-09-30 13:31:16 +02:00
|
|
|
} from "./stores"
|
2021-09-01 12:41:48 +02:00
|
|
|
import loadSpectrumIcons from "@budibase/bbui/spectrum-icons-rollup.js"
|
2022-06-09 16:03:43 +02:00
|
|
|
import { get } from "svelte/store"
|
2022-08-19 12:09:20 +02:00
|
|
|
import { initWebsocket } from "./websocket.js"
|
2021-09-01 12:41:48 +02:00
|
|
|
|
2022-08-10 13:04:58 +02:00
|
|
|
// Provide svelte and svelte/internal as globals for custom components
|
|
|
|
import * as svelte from "svelte"
|
|
|
|
import * as internal from "svelte/internal"
|
|
|
|
window.svelte_internal = internal
|
|
|
|
window.svelte = svelte
|
2021-09-01 12:41:48 +02:00
|
|
|
|
|
|
|
// Initialise spectrum icons
|
|
|
|
loadSpectrumIcons()
|
2019-09-07 07:50:35 +02:00
|
|
|
|
2020-11-23 15:28:02 +01:00
|
|
|
let app
|
|
|
|
|
2022-09-30 13:31:16 +02:00
|
|
|
const loadBudibase = async () => {
|
2020-11-24 10:31:54 +01:00
|
|
|
// Update builder store with any builder flags
|
|
|
|
builderStore.set({
|
2022-10-07 09:05:44 +02:00
|
|
|
...get(builderStore),
|
2020-11-24 10:31:54 +01:00
|
|
|
inBuilder: !!window["##BUDIBASE_IN_BUILDER##"],
|
2020-11-27 17:36:31 +01:00
|
|
|
layout: window["##BUDIBASE_PREVIEW_LAYOUT##"],
|
2020-11-24 10:31:54 +01:00
|
|
|
screen: window["##BUDIBASE_PREVIEW_SCREEN##"],
|
2020-11-30 13:11:50 +01:00
|
|
|
selectedComponentId: window["##BUDIBASE_SELECTED_COMPONENT_ID##"],
|
|
|
|
previewId: window["##BUDIBASE_PREVIEW_ID##"],
|
2021-06-28 13:55:11 +02:00
|
|
|
theme: window["##BUDIBASE_PREVIEW_THEME##"],
|
2021-09-02 12:38:41 +02:00
|
|
|
customTheme: window["##BUDIBASE_PREVIEW_CUSTOM_THEME##"],
|
2021-09-08 10:40:25 +02:00
|
|
|
previewDevice: window["##BUDIBASE_PREVIEW_DEVICE##"],
|
2022-04-28 18:30:48 +02:00
|
|
|
navigation: window["##BUDIBASE_PREVIEW_NAVIGATION##"],
|
2022-07-15 11:46:37 +02:00
|
|
|
hiddenComponentIds: window["##BUDIBASE_HIDDEN_COMPONENT_IDS##"],
|
2022-08-11 18:05:42 +02:00
|
|
|
usedPlugins: window["##BUDIBASE_USED_PLUGINS##"],
|
2022-08-19 12:09:20 +02:00
|
|
|
location: window["##BUDIBASE_LOCATION##"],
|
2020-05-29 15:06:10 +02:00
|
|
|
})
|
2020-11-24 10:31:54 +01:00
|
|
|
|
2021-06-30 21:35:02 +02:00
|
|
|
// Set app ID - this window flag is set by both the preview and the real
|
|
|
|
// server rendered app HTML
|
2022-06-09 16:03:43 +02:00
|
|
|
appStore.actions.setAppId(window["##BUDIBASE_APP_ID##"])
|
|
|
|
|
2023-06-16 13:30:08 +02:00
|
|
|
// Set the flag used to determine if the app is being loaded via an iframe
|
2023-06-23 12:56:59 +02:00
|
|
|
appStore.actions.setAppEmbedded(
|
|
|
|
window["##BUDIBASE_APP_EMBEDDED##"] === "true"
|
|
|
|
)
|
2023-06-16 13:30:08 +02:00
|
|
|
|
2022-09-30 13:31:16 +02:00
|
|
|
// Fetch environment info
|
2022-10-24 10:13:05 +02:00
|
|
|
if (!get(environmentStore)?.loaded) {
|
2022-10-24 10:03:50 +02:00
|
|
|
await environmentStore.actions.fetchEnvironment()
|
|
|
|
}
|
2022-09-30 13:31:16 +02:00
|
|
|
|
2022-08-23 20:05:38 +02:00
|
|
|
// Register handler for runtime events from the builder
|
2022-10-24 10:02:50 +02:00
|
|
|
window.handleBuilderRuntimeEvent = (type, data) => {
|
2022-08-23 20:05:38 +02:00
|
|
|
if (!window["##BUDIBASE_IN_BUILDER##"]) {
|
|
|
|
return
|
|
|
|
}
|
2022-10-24 10:02:50 +02:00
|
|
|
if (type === "event-completed") {
|
|
|
|
eventStore.actions.resolveEvent(data)
|
|
|
|
} else if (type === "eject-block") {
|
|
|
|
const block = blockStore.actions.getBlock(data)
|
2022-08-23 20:05:38 +02:00
|
|
|
block?.eject()
|
2022-10-24 10:02:50 +02:00
|
|
|
} else if (type === "dragging-new-component") {
|
|
|
|
const { dragging, component } = data
|
2022-10-14 14:37:14 +02:00
|
|
|
if (dragging) {
|
2022-10-14 19:16:19 +02:00
|
|
|
const definition =
|
|
|
|
componentStore.actions.getComponentDefinition(component)
|
|
|
|
dndStore.actions.startDraggingNewComponent({ component, definition })
|
2022-10-14 14:37:14 +02:00
|
|
|
} else {
|
|
|
|
dndStore.actions.reset()
|
|
|
|
}
|
2022-08-23 20:05:38 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-10 16:34:00 +02:00
|
|
|
// Register any custom components
|
|
|
|
if (window["##BUDIBASE_CUSTOM_COMPONENTS##"]) {
|
|
|
|
window["##BUDIBASE_CUSTOM_COMPONENTS##"].forEach(component => {
|
|
|
|
componentStore.actions.registerCustomComponent(component)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2022-08-12 15:34:44 +02:00
|
|
|
// Make a callback available for custom component bundles to register
|
|
|
|
// themselves at runtime
|
|
|
|
window.registerCustomComponent =
|
|
|
|
componentStore.actions.registerCustomComponent
|
|
|
|
|
2022-08-19 12:09:20 +02:00
|
|
|
// Initialise websocket
|
|
|
|
initWebsocket()
|
|
|
|
|
2020-11-24 10:31:54 +01:00
|
|
|
// Create app if one hasn't been created yet
|
|
|
|
if (!app) {
|
|
|
|
app = new ClientApp({
|
|
|
|
target: window.document.body,
|
|
|
|
})
|
|
|
|
}
|
2020-02-03 10:24:25 +01:00
|
|
|
}
|
|
|
|
|
2020-11-13 16:42:32 +01:00
|
|
|
// Attach to window so the HTML template can call this when it loads
|
|
|
|
window.loadBudibase = loadBudibase
|