diff --git a/packages/builder/package.json b/packages/builder/package.json index c9df951f7e..cc36e98dc1 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -50,6 +50,7 @@ "safe-buffer": "^5.1.2", "shortid": "^2.2.8", "string_decoder": "^1.2.0", + "svelte-simple-modal": "^0.3.0", "uikit": "^3.1.7" }, "devDependencies": { @@ -58,7 +59,7 @@ "@babel/preset-env": "^7.5.5", "@babel/runtime": "^7.5.5", "@rollup/plugin-alias": "^3.0.1", - "@sveltech/routify": "1.5.0-beta.16", + "@sveltech/routify": "1.5.0-beta.40", "babel-jest": "^24.8.0", "browser-sync": "^2.26.7", "http-proxy-middleware": "^0.19.1", @@ -80,4 +81,4 @@ "svelte": "^3.0.0" }, "gitHead": "115189f72a850bfb52b65ec61d932531bf327072" -} +} \ No newline at end of file diff --git a/packages/builder/rollup.config.js b/packages/builder/rollup.config.js index 4a4081e53a..38a1a42a34 100644 --- a/packages/builder/rollup.config.js +++ b/packages/builder/rollup.config.js @@ -8,38 +8,10 @@ import { terser } from "rollup-plugin-terser" import builtins from "rollup-plugin-node-builtins" import nodeglobals from "rollup-plugin-node-globals" import copy from "rollup-plugin-copy" -import browsersync from "rollup-plugin-browsersync" -import proxy from "http-proxy-middleware" import replace from "rollup-plugin-replace" import path from "path" -const target = "http://localhost:4001" -const _builderProxy = proxy("/_builder", { - target: "http://localhost:3000", - pathRewrite: { "^/_builder": "" }, -}) - -const apiProxy = proxy( - [ - "/_builder/assets/**", - "/_builder/api/**", - "/_builder/**/componentlibrary", - "/_builder/instance/**", - ], - { - target, - logLevel: "debug", - changeOrigin: true, - cookieDomainRewrite: true, - onProxyReq(proxyReq) { - if (proxyReq.getHeader("origin")) { - proxyReq.setHeader("origin", target) - } - }, - } -) - const production = !process.env.ROLLUP_WATCH const lodash_fp_exports = [ @@ -230,34 +202,9 @@ export default { // Watch the `dist` directory and refresh the // browser on changes when not in production !production && livereload(outputpath), - !production && - browsersync({ - server: outputpath, - middleware: [apiProxy, _builderProxy], - }), // If we're building for production (npm run build // instead of npm run dev), minify production && terser(), ], - watch: { - clearScreen: false, - }, -} - -function serve() { - let started = false - - return { - writeBundle() { - if (!started) { - started = true - - require("child_process").spawn("npm", ["run", "start"], { - stdio: ["ignore", "inherit", "inherit"], - shell: true, - }) - } - }, - } -} +} \ No newline at end of file diff --git a/packages/builder/src/App.svelte b/packages/builder/src/App.svelte index 424c7b9a1e..6d007631ca 100644 --- a/packages/builder/src/App.svelte +++ b/packages/builder/src/App.svelte @@ -1,17 +1,13 @@ -
- - {#await init} -
- -
- {:then result} + - {#if $store.hasAppPackage} - - {:else} - - {/if} - - {:catch err} -

{err}

- {/await} - - -
- - + + + diff --git a/packages/builder/src/BackendRoot.svelte b/packages/builder/src/BackendRoot.svelte deleted file mode 100644 index f127c803cb..0000000000 --- a/packages/builder/src/BackendRoot.svelte +++ /dev/null @@ -1,49 +0,0 @@ - - -
- -
- {#if $backendUiStore.leftNavItem === 'DATABASE'} - - {:else if $backendUiStore.leftNavItem === 'ACTIONS'} - - {:else if $backendUiStore.leftNavItem === 'ACCESS_LEVELS'} - - {/if} -
- -
- - diff --git a/packages/builder/src/PackageRoot.svelte b/packages/builder/src/PackageRoot.svelte deleted file mode 100644 index 71660ec2e8..0000000000 --- a/packages/builder/src/PackageRoot.svelte +++ /dev/null @@ -1,172 +0,0 @@ - - -
- -
-
- - - (selectedTab = TABS.BACKEND)}> - Backend - - (selectedTab = TABS.FRONTEND)}> - Frontend - -
- -
- selectedTab === TABS.FRONTEND}> - - - selectedTab === TABS.FRONTEND}> - - -
-
- -
- {#if selectedTab === TABS.BACKEND} -
- -
- {:else} -
- -
- {/if} -
- -
- - diff --git a/packages/builder/src/builderStore/index.js b/packages/builder/src/builderStore/index.js index 801ecb6464..065e40466e 100644 --- a/packages/builder/src/builderStore/index.js +++ b/packages/builder/src/builderStore/index.js @@ -10,20 +10,7 @@ export const initialise = async () => { if (process.env.NODE_ENV === "production") { LogRocket.init("knlald/budibase") } - setupRouter(store) - await store.initialise() } catch (err) { console.log(err) } -} - -const setupRouter = writable => { - const pushState = history.pushState - history.pushState = () => { - pushState.apply(history, [writable]) - writable.initialise() - } - window.addEventListener("hashchange", () => { - writable.initialise() - }) -} +} \ No newline at end of file diff --git a/packages/builder/src/builderStore/store/backend.js b/packages/builder/src/builderStore/store/backend.js index b4a10fec13..cb4b054449 100644 --- a/packages/builder/src/builderStore/store/backend.js +++ b/packages/builder/src/builderStore/store/backend.js @@ -14,7 +14,6 @@ import { export const getBackendUiStore = () => { const INITIAL_BACKEND_UI_STATE = { - leftNavItem: "DATABASE", selectedView: { records: [], name: "", @@ -27,7 +26,6 @@ export const getBackendUiStore = () => { const store = writable(INITIAL_BACKEND_UI_STATE) store.actions = { - navigate: name => store.update(state => ({ ...state, leftNavItem: name })), database: { select: db => store.update(state => { @@ -60,10 +58,6 @@ export const getBackendUiStore = () => { return state }), }, - modals: { - show: modal => store.update(state => ({ ...state, visibleModal: modal })), - hide: () => store.update(state => ({ ...state, visibleModal: null })), - }, users: { create: user => store.update(state => { @@ -302,7 +296,7 @@ export const deleteLevel = store => level => { state.accessLevels.levels = state.accessLevels.levels.filter( t => t.name !== level.name ) - incrementAccessLevelsVersion(s) + incrementAccessLevelsVersion(state) saveBackend(state) return state }) diff --git a/packages/builder/src/builderStore/store/index.js b/packages/builder/src/builderStore/store/index.js index 76cdc5a7c3..cf4b785b21 100644 --- a/packages/builder/src/builderStore/store/index.js +++ b/packages/builder/src/builderStore/store/index.js @@ -1,3 +1,4 @@ +// import { filter, cloneDeep, last, concat, isEmpty, values } from "lodash/fp" import { pipe, getNode, constructHierarchy } from "components/common/core" import * as backendStoreActions from "./backend" @@ -49,7 +50,7 @@ export const getStore = () => { const store = writable(initial) - store.initialise = initialise(store, initial) + store.setPackage = setPackage(store, initial) store.newChildRecord = backendStoreActions.newRecord(store, false) store.newRootRecord = backendStoreActions.newRecord(store, true) @@ -100,26 +101,12 @@ export const getStore = () => { export default getStore -const initialise = (store, initial) => async () => { - appname = window.location.hash - ? last(window.location.hash.substr(1).split("/")) - : "" - - if (!appname) { - initial.apps = await api.get(`/_builder/api/apps`).then(r => r.json()) - initial.hasAppPackage = false - store.set(initial) - return initial - } - - const pkg = await api - .get(`/_builder/api/${appname}/appPackage`) - .then(r => r.json()) +const setPackage = (store, initial) => async (pkg) => { const [main_screens, unauth_screens] = await Promise.all([ - api.get(`/_builder/api/${appname}/pages/main/screens`).then(r => r.json()), + api.get(`/_builder/api/${pkg.application.name}/pages/main/screens`).then(r => r.json()), api - .get(`/_builder/api/${appname}/pages/unauthenticated/screens`) + .get(`/_builder/api/${pkg.application.name}/pages/unauthenticated/screens`) .then(r => r.json()), ]) @@ -134,12 +121,12 @@ const initialise = (store, initial) => async () => { }, } - initial.libraries = await loadLibs(appname, pkg) + initial.libraries = await loadLibs(pkg.application.name, pkg) initial.loadLibraryUrls = pageName => { const libs = libUrlsForPreview(pkg, pageName) return libs } - initial.appname = appname + initial.appname = pkg.application.name initial.pages = pkg.pages initial.hasAppPackage = true initial.hierarchy = pkg.appDefinition.hierarchy @@ -377,7 +364,7 @@ const savePage = store => async page => { const addComponentLibrary = store => async lib => { const response = await api.get( - `/_builder/api/${appname}/componentlibrary?lib=${encodeURI(lib)}`, + `/_builder/api/${s.appname}/componentlibrary?lib=${encodeURI(lib)}`, undefined, false ) @@ -436,7 +423,7 @@ const removeStylesheet = store => stylesheet => { const _savePage = async s => { const page = s.pages[s.currentPageName] - await api.post(`/_builder/api/${appname}/pages/${s.currentPageName}`, { + await api.post(`/_builder/api/${s.appname}/pages/${s.currentPageName}`, { page: { componentLibraries: s.pages.componentLibraries, ...page }, uiFunctions: s.currentPageFunctions, screens: page._screens, diff --git a/packages/builder/src/components/accessLevels/AccessLevelView.svelte b/packages/builder/src/components/accessLevels/AccessLevelView.svelte index 9936fba566..65c5065d8d 100644 --- a/packages/builder/src/components/accessLevels/AccessLevelView.svelte +++ b/packages/builder/src/components/accessLevels/AccessLevelView.svelte @@ -15,6 +15,8 @@ export let allLevels export let hierarchy export let actions + export let close + export let title let errors = [] let clonedLevel = cloneDeep(level) @@ -38,9 +40,9 @@ ) const getPermissionName = perm => - perm.nodeKey - ? `${perm.type} - ${nodeNameFromNodeKey(hierarchy, perm.nodeKey)}` - : perm.type + perm.nodeKey + ? `${perm.type} - ${nodeNameFromNodeKey(hierarchy, perm.nodeKey)}` + : perm.type const save = () => { const newLevels = isNew @@ -52,6 +54,7 @@ if (errors.length > 0) return onFinished(clonedLevel) + close() } const permissionChanged = perm => ev => { @@ -70,9 +73,13 @@
+
+

{title}

+
+ -
+ diff --git a/packages/builder/src/components/actionsAndTriggers/ActionView.svelte b/packages/builder/src/components/actionsAndTriggers/ActionView.svelte index edbd382647..c1eb2f3fd4 100644 --- a/packages/builder/src/components/actionsAndTriggers/ActionView.svelte +++ b/packages/builder/src/components/actionsAndTriggers/ActionView.svelte @@ -68,7 +68,7 @@ - + onFinished() let save = () => { const newTriggersList = [ - ...pipe( - allTriggers, - [filter(t => t !== trigger)] - ), + ...pipe(allTriggers, [filter(t => t !== trigger)]), clonedTrigger, ] @@ -43,7 +40,7 @@ - + - import ModelView from "./ModelView.svelte" - import IndexView from "./IndexView.svelte" - import ModelDataTable from "./ModelDataTable" - import { store, backendUiStore } from "builderStore" - import getIcon from "components/common/icon" - import DropdownButton from "components/common/DropdownButton.svelte" - import ActionButton from "components/common/ActionButton.svelte" - import Modal from "components/common/Modal.svelte" - import * as api from "./ModelDataTable/api" - import { - CreateEditRecordModal, - CreateEditModelModal, - CreateEditViewModal, - CreateDatabaseModal, - DeleteRecordModal, - CreateUserModal, - } from "./ModelDataTable/modals" - - let selectedRecord - - async function selectRecord(record) { - selectedRecord = await api.loadRecord(record.key, { - appname: $store.appname, - instanceId: $backendUiStore.selectedDatabase.id, - }) - } - - function onClosed() { - backendUiStore.actions.modals.hide() - } - - $: recordOpen = $backendUiStore.visibleModal === "RECORD" - $: modelOpen = $backendUiStore.visibleModal === "MODEL" - $: viewOpen = $backendUiStore.visibleModal === "VIEW" - $: databaseOpen = $backendUiStore.visibleModal === "DATABASE" - $: deleteRecordOpen = $backendUiStore.visibleModal === "DELETE_RECORD" - $: userOpen = $backendUiStore.visibleModal === "USER" - $: breadcrumbs = $backendUiStore.breadcrumbs.join(" / ") - - - - {#if recordOpen} - - {/if} - {#if modelOpen} - - {/if} - {#if viewOpen} - - {/if} - {#if databaseOpen} - - {/if} - {#if deleteRecordOpen} - - {/if} - {#if userOpen} - - {/if} - - -
-
-
- - {#if $backendUiStore.selectedDatabase.id} - { - selectedRecord = null - backendUiStore.actions.modals.show('RECORD') - }}> - Create new record - - {/if} -
- {#if $backendUiStore.selectedDatabase.id} - - {:else}Please select a database{/if} -
-
- - diff --git a/packages/builder/src/components/database/FieldView.svelte b/packages/builder/src/components/database/FieldView.svelte index 45944596cd..3bf2ed4b93 100644 --- a/packages/builder/src/components/database/FieldView.svelte +++ b/packages/builder/src/components/database/FieldView.svelte @@ -67,7 +67,7 @@ - + {/if} - -
+ diff --git a/packages/builder/src/components/database/ModelDataTable/modals/CreateEditModel.svelte b/packages/builder/src/components/database/ModelDataTable/modals/CreateEditModel.svelte index 29afaac6df..f6213268c6 100644 --- a/packages/builder/src/components/database/ModelDataTable/modals/CreateEditModel.svelte +++ b/packages/builder/src/components/database/ModelDataTable/modals/CreateEditModel.svelte @@ -1,9 +1,5 @@
diff --git a/packages/builder/src/components/database/ModelDataTable/modals/CreateEditRecord.svelte b/packages/builder/src/components/database/ModelDataTable/modals/CreateEditRecord.svelte index 20aa67c912..d8eec31859 100644 --- a/packages/builder/src/components/database/ModelDataTable/modals/CreateEditRecord.svelte +++ b/packages/builder/src/components/database/ModelDataTable/modals/CreateEditRecord.svelte @@ -2,7 +2,6 @@ import { onMount } from "svelte" import { store, backendUiStore } from "builderStore" import { compose, map, get, flatten } from "lodash/fp" - import Modal from "components/common/Modal.svelte" import ActionButton from "components/common/ActionButton.svelte" import Select from "components/common/Select.svelte" import { @@ -68,39 +67,37 @@ } -
+

Create / Edit Record

-
-
- {#if !record} -
- - -
- {/if} - {#each modelFields || [] as field} - - {/each} - -
- Cancel - Save -
-
+
+ {#if !record} +
+ + +
+ {/if} + {#each modelFields || [] as field} + + {/each} +
+
+ Cancel + Save +
diff --git a/packages/builder/src/components/database/ModelDataTable/modals/CreateEditView.svelte b/packages/builder/src/components/database/ModelDataTable/modals/CreateEditView.svelte index 4bdedadfbd..1c025d039b 100644 --- a/packages/builder/src/components/database/ModelDataTable/modals/CreateEditView.svelte +++ b/packages/builder/src/components/database/ModelDataTable/modals/CreateEditView.svelte @@ -1,6 +1,5 @@
diff --git a/packages/builder/src/components/database/ModelDataTable/modals/CreateUser.svelte b/packages/builder/src/components/database/ModelDataTable/modals/CreateUser.svelte index 9ea76e9bdc..aeb1ea563d 100644 --- a/packages/builder/src/components/database/ModelDataTable/modals/CreateUser.svelte +++ b/packages/builder/src/components/database/ModelDataTable/modals/CreateUser.svelte @@ -1,5 +1,4 @@ -
- - - - - - + +
+ + + + + + +