2020-02-03 10:24:25 +01:00
|
|
|
import { createApp } from "./createApp"
|
|
|
|
import { trimSlash } from "./common/trimSlash"
|
2020-02-10 16:51:09 +01:00
|
|
|
import { builtins, builtinLibName } from "./render/builtinComponents"
|
2020-04-29 21:29:42 +02:00
|
|
|
import * as standardComponents from "@budibase/standard-components";
|
|
|
|
import * as materialDesignComponents from "@budibase/materialdesign-components";
|
2019-09-07 07:50:35 +02:00
|
|
|
|
2020-02-20 21:19:24 +01:00
|
|
|
/**
|
|
|
|
* create a web application from static budibase definition files.
|
|
|
|
* @param {object} opts - configuration options for budibase client libary
|
|
|
|
*/
|
2020-02-25 16:21:23 +01:00
|
|
|
export const loadBudibase = async opts => {
|
2020-02-12 13:45:24 +01:00
|
|
|
let componentLibraries = opts && opts.componentLibraries
|
|
|
|
const _window = (opts && opts.window) || window
|
2020-02-25 16:21:23 +01:00
|
|
|
const _localStorage = (opts && opts.localStorage) || localStorage
|
2020-02-12 13:45:24 +01:00
|
|
|
|
|
|
|
const frontendDefinition = _window["##BUDIBASE_FRONTEND_DEFINITION##"]
|
|
|
|
const uiFunctions = _window["##BUDIBASE_FRONTEND_FUNCTIONS##"]
|
2020-02-25 16:21:23 +01:00
|
|
|
|
2020-02-12 13:45:24 +01:00
|
|
|
const userFromStorage = _localStorage.getItem("budibase:user")
|
2020-02-03 10:24:25 +01:00
|
|
|
|
|
|
|
const user = userFromStorage
|
|
|
|
? JSON.parse(userFromStorage)
|
|
|
|
: {
|
2019-09-23 07:08:06 +02:00
|
|
|
name: "annonymous",
|
2020-02-03 10:24:25 +01:00
|
|
|
permissions: [],
|
|
|
|
isUser: false,
|
|
|
|
temp: false,
|
|
|
|
}
|
|
|
|
|
2020-04-29 21:29:42 +02:00
|
|
|
const { appRootPath } = frontendDefinition;
|
|
|
|
appRootPath = appRootPath === "" ? "" : "/" + trimSlash(appRootPath)
|
2020-02-10 16:51:09 +01:00
|
|
|
|
2020-04-29 21:29:42 +02:00
|
|
|
// if (!componentLibraries) componentLibraries = {};
|
2020-02-03 10:24:25 +01:00
|
|
|
|
2020-04-29 21:29:42 +02:00
|
|
|
componentLibraries = {
|
|
|
|
"@budibase/standard-components": standardComponents,
|
|
|
|
"@budibase/materialdesign-components": materialDesignComponents
|
|
|
|
};
|
|
|
|
|
|
|
|
// if (!componentLibraries) {
|
|
|
|
// componentLibraries = {}
|
|
|
|
|
|
|
|
// for (let lib of frontendDefinition.componentLibraries) {
|
|
|
|
// componentLibraries[lib.libName] = await import(
|
|
|
|
// `${frontendDefinition.appRootPath}/${trimSlash(lib.importPath)}`
|
|
|
|
// )
|
|
|
|
// }
|
|
|
|
// }
|
2020-02-03 10:24:25 +01:00
|
|
|
|
2020-02-12 13:45:24 +01:00
|
|
|
componentLibraries[builtinLibName] = builtins(_window)
|
2020-02-03 10:24:25 +01:00
|
|
|
|
2020-02-25 17:23:45 +01:00
|
|
|
const {
|
|
|
|
initialisePage,
|
|
|
|
screenStore,
|
|
|
|
pageStore,
|
|
|
|
routeTo,
|
|
|
|
rootNode,
|
|
|
|
} = createApp(
|
2020-02-03 10:24:25 +01:00
|
|
|
componentLibraries,
|
2020-02-10 22:35:51 +01:00
|
|
|
frontendDefinition,
|
|
|
|
backendDefinition,
|
2020-02-03 10:24:25 +01:00
|
|
|
user,
|
2020-02-18 13:29:38 +01:00
|
|
|
uiFunctions || {},
|
2020-02-25 16:21:23 +01:00
|
|
|
_window,
|
|
|
|
rootNode
|
2020-02-03 10:24:25 +01:00
|
|
|
)
|
|
|
|
|
2020-02-25 16:21:23 +01:00
|
|
|
const route = _window.location
|
|
|
|
? _window.location.pathname.replace(frontendDefinition.appRootPath, "")
|
|
|
|
: ""
|
2020-02-10 16:51:09 +01:00
|
|
|
|
2020-02-25 17:23:45 +01:00
|
|
|
initialisePage(frontendDefinition.page, _window.document.body, route)
|
|
|
|
|
2020-02-10 16:51:09 +01:00
|
|
|
return {
|
|
|
|
screenStore,
|
|
|
|
pageStore,
|
|
|
|
routeTo,
|
2020-02-25 17:23:45 +01:00
|
|
|
rootNode,
|
2020-02-10 16:51:09 +01:00
|
|
|
}
|
2020-02-03 10:24:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (window) {
|
|
|
|
window.loadBudibase = loadBudibase
|
|
|
|
}
|