merge
|
@ -38,7 +38,7 @@ bower_components
|
||||||
build/Release
|
build/Release
|
||||||
|
|
||||||
# Dependency directories
|
# Dependency directories
|
||||||
node_modules/
|
/node_modules/
|
||||||
jspm_packages/
|
jspm_packages/
|
||||||
|
|
||||||
# TypeScript v1 declaration files
|
# TypeScript v1 declaration files
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules
|
/node_modules/
|
||||||
node_modules_win
|
node_modules_win
|
||||||
package-lock.json
|
package-lock.json
|
||||||
yarn.lock
|
yarn.lock
|
||||||
|
|
|
@ -5,10 +5,11 @@
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "rollup -c",
|
"build": "rollup -c",
|
||||||
"start": "rollup -c -w",
|
"start": "routify -c rollup",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"test:watch": "jest --watchAll",
|
"test:watch": "jest --watchAll",
|
||||||
"dev:builder": "rollup -c -w"
|
"dev:builder": "routify -c rollup",
|
||||||
|
"rollup": "rollup -c -w"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"globals": {
|
"globals": {
|
||||||
|
@ -19,7 +20,9 @@
|
||||||
"testURL": "http://jest-breaks-if-this-does-not-exist",
|
"testURL": "http://jest-breaks-if-this-does-not-exist",
|
||||||
"moduleNameMapper": {
|
"moduleNameMapper": {
|
||||||
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/internals/mocks/fileMock.js",
|
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/internals/mocks/fileMock.js",
|
||||||
"\\.(css|less|sass|scss)$": "identity-obj-proxy"
|
"\\.(css|less|sass|scss)$": "identity-obj-proxy",
|
||||||
|
"components(.*)$": "<rootDir>/src/components$1",
|
||||||
|
"builderStore(.*)$": "<rootDir>/src/builderStore$1"
|
||||||
},
|
},
|
||||||
"moduleFileExtensions": [
|
"moduleFileExtensions": [
|
||||||
"js"
|
"js"
|
||||||
|
@ -54,6 +57,8 @@
|
||||||
"@babel/plugin-transform-runtime": "^7.5.5",
|
"@babel/plugin-transform-runtime": "^7.5.5",
|
||||||
"@babel/preset-env": "^7.5.5",
|
"@babel/preset-env": "^7.5.5",
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
|
"@rollup/plugin-alias": "^3.0.1",
|
||||||
|
"@sveltech/routify": "1.5.0-beta.16",
|
||||||
"babel-jest": "^24.8.0",
|
"babel-jest": "^24.8.0",
|
||||||
"browser-sync": "^2.26.7",
|
"browser-sync": "^2.26.7",
|
||||||
"http-proxy-middleware": "^0.19.1",
|
"http-proxy-middleware": "^0.19.1",
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import alias from "@rollup/plugin-alias"
|
||||||
import svelte from "rollup-plugin-svelte"
|
import svelte from "rollup-plugin-svelte"
|
||||||
import resolve from "rollup-plugin-node-resolve"
|
import resolve from "rollup-plugin-node-resolve"
|
||||||
import commonjs from "rollup-plugin-commonjs"
|
import commonjs from "rollup-plugin-commonjs"
|
||||||
|
@ -11,6 +12,8 @@ import browsersync from "rollup-plugin-browsersync"
|
||||||
import proxy from "http-proxy-middleware"
|
import proxy from "http-proxy-middleware"
|
||||||
import replace from "rollup-plugin-replace"
|
import replace from "rollup-plugin-replace"
|
||||||
|
|
||||||
|
import path from "path"
|
||||||
|
|
||||||
const target = "http://localhost:4001"
|
const target = "http://localhost:4001"
|
||||||
const _builderProxy = proxy("/_builder", {
|
const _builderProxy = proxy("/_builder", {
|
||||||
target: "http://localhost:3000",
|
target: "http://localhost:3000",
|
||||||
|
@ -142,6 +145,11 @@ const coreExternal = [
|
||||||
"@nx-js/compiler-util",
|
"@nx-js/compiler-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const customResolver = resolve({
|
||||||
|
extensions: [".mjs", ".js", ".jsx", ".json", ".sass", ".scss", ".svelte"]
|
||||||
|
})
|
||||||
|
const projectRootDir = path.resolve(__dirname)
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
input: "src/main.js",
|
input: "src/main.js",
|
||||||
output: {
|
output: {
|
||||||
|
@ -151,6 +159,13 @@ export default {
|
||||||
file: `${outputpath}/bundle.js`,
|
file: `${outputpath}/bundle.js`,
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
alias({
|
||||||
|
entries: [
|
||||||
|
{ find: "components", replacement: path.resolve(projectRootDir, 'src/components') },
|
||||||
|
{ find: "builderStore", replacement: path.resolve(projectRootDir, 'src/builderStore') }
|
||||||
|
],
|
||||||
|
customResolver
|
||||||
|
}),
|
||||||
copy({
|
copy({
|
||||||
targets: [
|
targets: [
|
||||||
{ src: "src/index.html", dest: outputpath },
|
{ src: "src/index.html", dest: outputpath },
|
||||||
|
@ -216,10 +231,10 @@ export default {
|
||||||
// browser on changes when not in production
|
// browser on changes when not in production
|
||||||
!production && livereload(outputpath),
|
!production && livereload(outputpath),
|
||||||
!production &&
|
!production &&
|
||||||
browsersync({
|
browsersync({
|
||||||
server: outputpath,
|
server: outputpath,
|
||||||
middleware: [apiProxy, _builderProxy],
|
middleware: [apiProxy, _builderProxy],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// If we're building for production (npm run build
|
// If we're building for production (npm run build
|
||||||
// instead of npm run dev), minify
|
// instead of npm run dev), minify
|
||||||
|
@ -229,3 +244,20 @@ export default {
|
||||||
clearScreen: false,
|
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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
import NoPackage from "./NoPackage.svelte"
|
import NoPackage from "./NoPackage.svelte"
|
||||||
import PackageRoot from "./PackageRoot.svelte"
|
import PackageRoot from "./PackageRoot.svelte"
|
||||||
import Settings from "./Settings.svelte"
|
import Settings from "./Settings.svelte"
|
||||||
import { store, initialise } from "./builderStore"
|
import { store, initialise } from "builderStore"
|
||||||
import { onMount } from "svelte"
|
import { onMount } from "svelte"
|
||||||
import IconButton from "./common/IconButton.svelte"
|
import IconButton from "components/common/IconButton.svelte"
|
||||||
import Spinner from "./common/Spinner.svelte"
|
import Spinner from "components/common/Spinner.svelte"
|
||||||
import AppNotification, {
|
import AppNotification, {
|
||||||
showAppNotification,
|
showAppNotification,
|
||||||
} from "./common/AppNotification.svelte"
|
} from "components/common/AppNotification.svelte"
|
||||||
|
|
||||||
let init = initialise()
|
let init = initialise()
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<script>
|
<script>
|
||||||
import BackendNav from "./nav/BackendNav.svelte"
|
import BackendNav from "components/nav/BackendNav.svelte"
|
||||||
import SchemaManagementDrawer from "./nav/SchemaManagementDrawer.svelte"
|
import SchemaManagementDrawer from "components/nav/SchemaManagementDrawer.svelte"
|
||||||
import Database from "./database/DatabaseRoot.svelte"
|
import Database from "components/database/DatabaseRoot.svelte"
|
||||||
import UserInterface from "./userInterface/UserInterfaceRoot.svelte"
|
import UserInterface from "components/userInterface/UserInterfaceRoot.svelte"
|
||||||
import ActionsAndTriggers from "./actionsAndTriggers/ActionsAndTriggersRoot.svelte"
|
import ActionsAndTriggers from "components/actionsAndTriggers/ActionsAndTriggersRoot.svelte"
|
||||||
import AccessLevels from "./accessLevels/AccessLevelsRoot.svelte"
|
import AccessLevels from "components/accessLevels/AccessLevelsRoot.svelte"
|
||||||
import ComingSoon from "./common/ComingSoon.svelte"
|
import ComingSoon from "components/common/ComingSoon.svelte"
|
||||||
|
|
||||||
import { store, backendUiStore } from "./builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="root">
|
<div class="root">
|
||||||
|
@ -37,13 +37,13 @@
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
margin: 80px 60px;
|
margin: 40px 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav {
|
.nav {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
flex: 0 1 auto;
|
flex: 0 1 auto;
|
||||||
width: 300px;
|
width: 275px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<script>
|
<script>
|
||||||
import Button from "./common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import { store } from "./builderStore"
|
import { store } from "builderStore"
|
||||||
|
|
||||||
let errors = []
|
let errors = []
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<script>
|
<script>
|
||||||
import IconButton from "./common/IconButton.svelte"
|
import IconButton from "components/common/IconButton.svelte"
|
||||||
import { store } from "./builderStore"
|
import { store } from "builderStore"
|
||||||
import UserInterfaceRoot from "./userInterface/UserInterfaceRoot.svelte"
|
import UserInterfaceRoot from "components/userInterface/UserInterfaceRoot.svelte"
|
||||||
import BackendRoot from "./BackendRoot.svelte"
|
import BackendRoot from "./BackendRoot.svelte"
|
||||||
import { fade } from "svelte/transition"
|
import { fade } from "svelte/transition"
|
||||||
import { SettingsIcon, PreviewIcon } from "./common/Icons/"
|
import { SettingsIcon, PreviewIcon } from "components/common/Icons/"
|
||||||
|
|
||||||
const TABS = {
|
const TABS = {
|
||||||
BACKEND: "backend",
|
BACKEND: "backend",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import IconButton from "./common/IconButton.svelte"
|
import IconButton from "components/common/IconButton.svelte"
|
||||||
import { store } from "./builderStore"
|
import { store } from "builderStore"
|
||||||
import UserInterfaceRoot from "./userInterface/UserInterfaceRoot.svelte"
|
import UserInterfaceRoot from "components/userInterface/UserInterfaceRoot.svelte"
|
||||||
import { fade } from "svelte/transition"
|
import { fade } from "svelte/transition"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -62,9 +62,9 @@
|
||||||
margin: 5px 20px 5px 0px;
|
margin: 5px 20px 5px 0px;
|
||||||
border-radius: 0 5px 5px 0;
|
border-radius: 0 5px 5px 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: baseline;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 0.8em;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.budibase__nav-item.selected {
|
.budibase__nav-item.selected {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { createNewHierarchy } from "../common/core"
|
import { createNewHierarchy } from "components/common/core"
|
||||||
|
|
||||||
export const createPackage = (packageInfo, store) => {
|
export const createPackage = (packageInfo, store) => {
|
||||||
packageInfo.createNewPackage("")
|
packageInfo.createNewPackage("")
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { filter, map, reduce, toPairs } from "lodash/fp"
|
import { filter, map, reduce, toPairs } from "lodash/fp"
|
||||||
import { pipe } from "../common/core"
|
import { pipe } from "components/common/core"
|
||||||
|
|
||||||
const self = n => n
|
const self = n => n
|
||||||
const join_with = delimiter => a => a.join(delimiter)
|
const join_with = delimiter => a => a.join(delimiter)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { flatten, values, uniq, map } from "lodash/fp"
|
import { flatten, values, uniq, map } from "lodash/fp"
|
||||||
import { pipe } from "../common/core"
|
import { pipe } from "components/common/core"
|
||||||
|
|
||||||
export const loadLibs = async (appName, appPackage) => {
|
export const loadLibs = async (appName, appPackage) => {
|
||||||
const allLibraries = {}
|
const allLibraries = {}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import {
|
||||||
isIndex,
|
isIndex,
|
||||||
canDeleteIndex,
|
canDeleteIndex,
|
||||||
canDeleteRecord,
|
canDeleteRecord,
|
||||||
} from "../../common/core"
|
} from "components/common/core"
|
||||||
|
|
||||||
export const getBackendUiStore = () => {
|
export const getBackendUiStore = () => {
|
||||||
const INITIAL_BACKEND_UI_STATE = {
|
const INITIAL_BACKEND_UI_STATE = {
|
||||||
|
@ -100,9 +100,9 @@ export const saveBackend = async state => {
|
||||||
|
|
||||||
const instances_currentFirst = state.selectedDatabase
|
const instances_currentFirst = state.selectedDatabase
|
||||||
? [
|
? [
|
||||||
state.appInstances.find(i => i.id === state.selectedDatabase.id),
|
state.appInstances.find(i => i.id === state.selectedDatabase.id),
|
||||||
...state.appInstances.filter(i => i.id !== state.selectedDatabase.id),
|
...state.appInstances.filter(i => i.id !== state.selectedDatabase.id),
|
||||||
]
|
]
|
||||||
: state.appInstances
|
: state.appInstances
|
||||||
|
|
||||||
for (let instance of instances_currentFirst) {
|
for (let instance of instances_currentFirst) {
|
||||||
|
@ -198,7 +198,10 @@ export const saveCurrentNode = store => () => {
|
||||||
const defaultIndex = templateApi(state.hierarchy).getNewIndexTemplate(
|
const defaultIndex = templateApi(state.hierarchy).getNewIndexTemplate(
|
||||||
cloned.parent()
|
cloned.parent()
|
||||||
)
|
)
|
||||||
defaultIndex.name = `all_${cloned.name}s`
|
defaultIndex.name = hierarchyFunctions.isTopLevelIndex(cloned)
|
||||||
|
? `all_${cloned.name}s`
|
||||||
|
: `${cloned.parent().name}_${cloned.name}s`
|
||||||
|
|
||||||
defaultIndex.allowedRecordNodeIds = [cloned.nodeId]
|
defaultIndex.allowedRecordNodeIds = [cloned.nodeId]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
import { filter, cloneDeep, last, concat, isEmpty, values } from "lodash/fp"
|
import { filter, cloneDeep, last, concat, isEmpty, values } from "lodash/fp"
|
||||||
import { pipe, getNode, constructHierarchy } from "../../common/core"
|
import { pipe, getNode, constructHierarchy } from "components/common/core"
|
||||||
import * as backendStoreActions from "./backend"
|
import * as backendStoreActions from "./backend"
|
||||||
import { writable } from "svelte/store"
|
import { writable } from "svelte/store"
|
||||||
import { defaultPagesObject } from "../../userInterface/pagesParsing/defaultPagesObject"
|
import { defaultPagesObject } from "components/userInterface/pagesParsing/defaultPagesObject"
|
||||||
import api from "../api"
|
import api from "../api"
|
||||||
import { getExactComponent } from "../../userInterface/pagesParsing/searchComponents"
|
import { getExactComponent } from "components/userInterface/pagesParsing/searchComponents"
|
||||||
import { rename } from "../../userInterface/pagesParsing/renameScreen"
|
import { rename } from "components/userInterface/pagesParsing/renameScreen"
|
||||||
import {
|
import {
|
||||||
getNewScreen,
|
getNewScreen,
|
||||||
createProps,
|
createProps,
|
||||||
makePropsSafe,
|
makePropsSafe,
|
||||||
getBuiltin,
|
getBuiltin,
|
||||||
} from "../../userInterface/pagesParsing/createProps"
|
} from "components/userInterface/pagesParsing/createProps"
|
||||||
import { expandComponentDefinition } from "../../userInterface/pagesParsing/types"
|
import { expandComponentDefinition } from "components/userInterface/pagesParsing/types"
|
||||||
import { loadLibs, libUrlsForPreview } from "../loadComponentLibraries"
|
import { loadLibs, libUrlsForPreview } from "../loadComponentLibraries"
|
||||||
import { buildCodeForScreens } from "../buildCodeForScreens"
|
import { buildCodeForScreens } from "../buildCodeForScreens"
|
||||||
import { generate_screen_css } from "../generate_css"
|
import { generate_screen_css } from "../generate_css"
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
import ButtonGroup from "../common/ButtonGroup.svelte"
|
import ButtonGroup from "../common/ButtonGroup.svelte"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "../common/Button.svelte"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "../common/ActionButton.svelte"
|
||||||
import { validateAccessLevels } from "../common/core"
|
import { validateAccessLevels, nodeNameFromNodeKey } from "../common/core"
|
||||||
import ErrorsBox from "../common/ErrorsBox.svelte"
|
import ErrorsBox from "../common/ErrorsBox.svelte"
|
||||||
|
|
||||||
export let level
|
export let level
|
||||||
|
@ -38,7 +38,9 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
const getPermissionName = perm =>
|
const getPermissionName = perm =>
|
||||||
perm.nodeKey ? `${perm.type} - ${perm.nodeKey}` : perm.type
|
perm.nodeKey
|
||||||
|
? `${perm.type} - ${nodeNameFromNodeKey(hierarchy, perm.nodeKey)}`
|
||||||
|
: perm.type
|
||||||
|
|
||||||
const save = () => {
|
const save = () => {
|
||||||
const newLevels = isNew
|
const newLevels = isNew
|
|
@ -1,12 +1,15 @@
|
||||||
<script>
|
<script>
|
||||||
import ButtonGroup from "../common/ButtonGroup.svelte"
|
import ButtonGroup from "components/common/ButtonGroup.svelte"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import { generateFullPermissions, getNewAccessLevel } from "../common/core"
|
import {
|
||||||
import getIcon from "../common/icon"
|
generateFullPermissions,
|
||||||
|
getNewAccessLevel,
|
||||||
|
} from "components/common/core"
|
||||||
|
import getIcon from "components/common/icon"
|
||||||
import AccessLevelView from "./AccessLevelView.svelte"
|
import AccessLevelView from "./AccessLevelView.svelte"
|
||||||
import Modal from "../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
|
|
||||||
let editingLevel = null
|
let editingLevel = null
|
||||||
let editingLevelIsNew = false
|
let editingLevelIsNew = false
|
|
@ -1,12 +1,12 @@
|
||||||
<script>
|
<script>
|
||||||
import Textbox from "../common/Textbox.svelte"
|
import Textbox from "components/common/Textbox.svelte"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import ButtonGroup from "../common/ButtonGroup.svelte"
|
import ButtonGroup from "components/common/ButtonGroup.svelte"
|
||||||
import { cloneDeep, filter, keys, map, isUndefined } from "lodash/fp"
|
import { cloneDeep, filter, keys, map, isUndefined } from "lodash/fp"
|
||||||
import ErrorsBox from "../common/ErrorsBox.svelte"
|
import ErrorsBox from "components/common/ErrorsBox.svelte"
|
||||||
import { validateActions, pipe } from "../common/core"
|
import { validateActions, pipe } from "components/common/core"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
|
|
||||||
export let action
|
export let action
|
||||||
export let onFinished = action => {}
|
export let onFinished = action => {}
|
|
@ -1,11 +1,11 @@
|
||||||
<script>
|
<script>
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import ButtonGroup from "../common/ButtonGroup.svelte"
|
import ButtonGroup from "components/common/ButtonGroup.svelte"
|
||||||
import ActionView from "./ActionView.svelte"
|
import ActionView from "./ActionView.svelte"
|
||||||
import Modal from "../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import { pipe } from "../common/core"
|
import { pipe } from "components/common/core"
|
||||||
import { keys, map, join } from "lodash/fp"
|
import { keys, map, join } from "lodash/fp"
|
||||||
|
|
||||||
export let editingActionIsNew = false
|
export let editingActionIsNew = false
|
|
@ -1,12 +1,12 @@
|
||||||
<script>
|
<script>
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import ButtonGroup from "../common/ButtonGroup.svelte"
|
import ButtonGroup from "components/common/ButtonGroup.svelte"
|
||||||
import Actions from "./Actions.svelte"
|
import Actions from "./Actions.svelte"
|
||||||
import Triggers from "./Triggers.svelte"
|
import Triggers from "./Triggers.svelte"
|
||||||
import { getNewAction, getNewTrigger } from "../common/core"
|
import { getNewAction, getNewTrigger } from "components/common/core"
|
||||||
|
|
||||||
let editingAction = null
|
let editingAction = null
|
||||||
let editingActionIsNew = true
|
let editingActionIsNew = true
|
||||||
|
@ -14,16 +14,19 @@
|
||||||
let editingTriggerIsNew = true
|
let editingTriggerIsNew = true
|
||||||
|
|
||||||
let getDefaultOptionsHtml = defaultOptions =>
|
let getDefaultOptionsHtml = defaultOptions =>
|
||||||
pipe(defaultOptions, [
|
pipe(
|
||||||
keys,
|
defaultOptions,
|
||||||
map(
|
[
|
||||||
k =>
|
keys,
|
||||||
`<span style="color:var(--slate)">${k}: </span>${JSON.parse(
|
map(
|
||||||
typeOptions[k]
|
k =>
|
||||||
)}`
|
`<span style="color:var(--slate)">${k}: </span>${JSON.parse(
|
||||||
),
|
typeOptions[k]
|
||||||
join("<br>"),
|
)}`
|
||||||
])
|
),
|
||||||
|
join("<br>"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
let onActionEdit = action => {
|
let onActionEdit = action => {
|
||||||
editingAction = action
|
editingAction = action
|
|
@ -1,14 +1,14 @@
|
||||||
<script>
|
<script>
|
||||||
import Textbox from "../common/Textbox.svelte"
|
import Textbox from "components/common/Textbox.svelte"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import Dropdown from "../common/Dropdown.svelte"
|
import Dropdown from "components/common/Dropdown.svelte"
|
||||||
import ButtonGroup from "../common/ButtonGroup.svelte"
|
import ButtonGroup from "components/common/ButtonGroup.svelte"
|
||||||
import CodeArea from "../common/CodeArea.svelte"
|
import CodeArea from "components/common/CodeArea.svelte"
|
||||||
import { cloneDeep, filter, keys, some, map, isUndefined } from "lodash/fp"
|
import { cloneDeep, filter, keys, some, map, isUndefined } from "lodash/fp"
|
||||||
import ErrorsBox from "../common/ErrorsBox.svelte"
|
import ErrorsBox from "components/common/ErrorsBox.svelte"
|
||||||
import { validateTriggers, pipe, events } from "../common/core"
|
import { validateTriggers, pipe, events } from "components/common/core"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
|
|
||||||
export let trigger
|
export let trigger
|
||||||
export let onFinished = action => {}
|
export let onFinished = action => {}
|
||||||
|
@ -22,7 +22,10 @@
|
||||||
let cancel = () => onFinished()
|
let cancel = () => onFinished()
|
||||||
let save = () => {
|
let save = () => {
|
||||||
const newTriggersList = [
|
const newTriggersList = [
|
||||||
...pipe(allTriggers, [filter(t => t !== trigger)]),
|
...pipe(
|
||||||
|
allTriggers,
|
||||||
|
[filter(t => t !== trigger)]
|
||||||
|
),
|
||||||
clonedTrigger,
|
clonedTrigger,
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<script>
|
<script>
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import Modal from "../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import TriggerView from "./TriggerView.svelte"
|
import TriggerView from "./TriggerView.svelte"
|
||||||
|
|
||||||
export let editingTrigger = null
|
export let editingTrigger = null
|
Before Width: | Height: | Size: 213 B After Width: | Height: | Size: 213 B |
Before Width: | Height: | Size: 254 B After Width: | Height: | Size: 254 B |
Before Width: | Height: | Size: 254 B After Width: | Height: | Size: 254 B |
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 251 B |
Before Width: | Height: | Size: 157 B After Width: | Height: | Size: 157 B |
Before Width: | Height: | Size: 379 B After Width: | Height: | Size: 379 B |
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 228 B |
Before Width: | Height: | Size: 388 B After Width: | Height: | Size: 388 B |
Before Width: | Height: | Size: 430 B After Width: | Height: | Size: 430 B |
Before Width: | Height: | Size: 365 B After Width: | Height: | Size: 365 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 305 B |
Before Width: | Height: | Size: 448 B After Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 447 B After Width: | Height: | Size: 447 B |
Before Width: | Height: | Size: 362 B After Width: | Height: | Size: 362 B |
Before Width: | Height: | Size: 263 B After Width: | Height: | Size: 263 B |
Before Width: | Height: | Size: 387 B After Width: | Height: | Size: 387 B |
Before Width: | Height: | Size: 372 B After Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 320 B After Width: | Height: | Size: 320 B |
|
@ -3,17 +3,17 @@ import {
|
||||||
common,
|
common,
|
||||||
getTemplateApi,
|
getTemplateApi,
|
||||||
getAuthApi,
|
getAuthApi,
|
||||||
} from "../../../core/src"
|
} from "../../../../core/src"
|
||||||
import { _getNew } from "../../../core/src/recordApi/getNew"
|
import { _getNew } from "../../../../core/src/recordApi/getNew"
|
||||||
import { find, filter, keyBy, flatten, map } from "lodash/fp"
|
import { find, filter, keyBy, flatten, map } from "lodash/fp"
|
||||||
import { generateSchema } from "../../../core/src/indexing/indexSchemaCreator"
|
import { generateSchema } from "../../../../core/src/indexing/indexSchemaCreator"
|
||||||
import { generate } from "shortid"
|
import { generate } from "shortid"
|
||||||
|
|
||||||
export { canDeleteIndex } from "../../../core/src/templateApi/canDeleteIndex"
|
export { canDeleteIndex } from "../../../../core/src/templateApi/canDeleteIndex"
|
||||||
export { canDeleteRecord } from "../../../core/src/templateApi/canDeleteRecord"
|
export { canDeleteRecord } from "../../../../core/src/templateApi/canDeleteRecord"
|
||||||
export { userWithFullAccess } from "../../../core/src/index"
|
export { userWithFullAccess } from "../../../../core/src/index"
|
||||||
export { joinKey } from "../../../core/src/common"
|
export { joinKey } from "../../../../core/src/common"
|
||||||
export { getExactNodeForKey } from "../../../core/src/templateApi/hierarchy"
|
export { getExactNodeForKey } from "../../../../core/src/templateApi/hierarchy"
|
||||||
export const pipe = common.$
|
export const pipe = common.$
|
||||||
|
|
||||||
export const events = common.eventsList
|
export const events = common.eventsList
|
||||||
|
@ -38,7 +38,7 @@ export const authApi = (hierarchy, actions) =>
|
||||||
getAuthApi({
|
getAuthApi({
|
||||||
hierarchy,
|
hierarchy,
|
||||||
actions: keyBy("name")(actions),
|
actions: keyBy("name")(actions),
|
||||||
publish: () => {},
|
publish: () => { },
|
||||||
})
|
})
|
||||||
|
|
||||||
export const allTypes = templateApi({}).allTypes
|
export const allTypes = templateApi({}).allTypes
|
||||||
|
@ -79,6 +79,7 @@ export const getPotentialReferenceIndexes = (hierarchy, record) =>
|
||||||
|
|
||||||
export const isIndex = hierarchyFunctions.isIndex
|
export const isIndex = hierarchyFunctions.isIndex
|
||||||
export const isRecord = hierarchyFunctions.isRecord
|
export const isRecord = hierarchyFunctions.isRecord
|
||||||
|
export const nodeNameFromNodeKey = hierarchyFunctions.nodeNameFromNodeKey
|
||||||
|
|
||||||
export const getDefaultTypeOptions = type =>
|
export const getDefaultTypeOptions = type =>
|
||||||
!type ? {} : allTypes[type].getDefaultOptions()
|
!type ? {} : allTypes[type].getDefaultOptions()
|
|
@ -1,7 +1,7 @@
|
||||||
import { eventHandlers } from "../../../client/src/state/eventHandlers"
|
import { eventHandlers } from "../../../../client/src/state/eventHandlers"
|
||||||
import { writable } from "svelte/store"
|
import { writable } from "svelte/store"
|
||||||
export { EVENT_TYPE_MEMBER_NAME } from "../../../client/src/state/eventHandlers"
|
export { EVENT_TYPE_MEMBER_NAME } from "../../../../client/src/state/eventHandlers"
|
||||||
import { createCoreApi } from "../../../client/src/core"
|
import { createCoreApi } from "../../../../client/src/core"
|
||||||
|
|
||||||
export const allHandlers = (appDefinition, user) => {
|
export const allHandlers = (appDefinition, user) => {
|
||||||
const coreApi = createCoreApi(appDefinition, user)
|
const coreApi = createCoreApi(appDefinition, user)
|
|
@ -2,11 +2,11 @@
|
||||||
import ModelView from "./ModelView.svelte"
|
import ModelView from "./ModelView.svelte"
|
||||||
import IndexView from "./IndexView.svelte"
|
import IndexView from "./IndexView.svelte"
|
||||||
import ModelDataTable from "./ModelDataTable"
|
import ModelDataTable from "./ModelDataTable"
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
import DropdownButton from "../common/DropdownButton.svelte"
|
import DropdownButton from "components/common/DropdownButton.svelte"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import Modal from "../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import * as api from "./ModelDataTable/api"
|
import * as api from "./ModelDataTable/api"
|
||||||
import {
|
import {
|
||||||
CreateEditRecordModal,
|
CreateEditRecordModal,
|
|
@ -1,13 +1,16 @@
|
||||||
<script>
|
<script>
|
||||||
import Textbox from "../common/Textbox.svelte"
|
import Textbox from "components/common/Textbox.svelte"
|
||||||
import CodeArea from "../common/CodeArea.svelte"
|
import CodeArea from "components/common/CodeArea.svelte"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import Dropdown from "../common/Dropdown.svelte"
|
import Dropdown from "components/common/Dropdown.svelte"
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import { filter, some, map, compose } from "lodash/fp"
|
import { filter, some, map, compose } from "lodash/fp"
|
||||||
import { hierarchy as hierarchyFunctions, common } from "../../../core/src"
|
import {
|
||||||
import ErrorsBox from "../common/ErrorsBox.svelte"
|
hierarchy as hierarchyFunctions,
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
common,
|
||||||
|
} from "../../../../core/src/"
|
||||||
|
import ErrorsBox from "components/common/ErrorsBox.svelte"
|
||||||
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
|
|
||||||
const SNIPPET_EDITORS = {
|
const SNIPPET_EDITORS = {
|
||||||
MAP: "Map",
|
MAP: "Map",
|
|
@ -1,6 +1,6 @@
|
||||||
<script>
|
<script>
|
||||||
import { onMount } from "svelte"
|
import { onMount } from "svelte"
|
||||||
import { store, backendUiStore } from "../../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import {
|
import {
|
||||||
tap,
|
tap,
|
||||||
get,
|
get,
|
||||||
|
@ -11,11 +11,11 @@
|
||||||
map,
|
map,
|
||||||
remove,
|
remove,
|
||||||
keys,
|
keys,
|
||||||
takeRight
|
takeRight,
|
||||||
} from "lodash/fp"
|
} from "lodash/fp"
|
||||||
import Select from "../../common/Select.svelte"
|
import Select from "components/common/Select.svelte"
|
||||||
import { getIndexSchema } from "../../common/core"
|
import { getIndexSchema } from "components/common/core"
|
||||||
import ActionButton from "../../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import TablePagination from "./TablePagination.svelte"
|
import TablePagination from "./TablePagination.svelte"
|
||||||
import { DeleteRecordModal } from "./modals"
|
import { DeleteRecordModal } from "./modals"
|
||||||
import * as api from "./api"
|
import * as api from "./api"
|
||||||
|
@ -56,7 +56,11 @@
|
||||||
|
|
||||||
const getSchema = getIndexSchema($store.hierarchy)
|
const getSchema = getIndexSchema($store.hierarchy)
|
||||||
|
|
||||||
const childViewsForRecord = compose(flatten, map("indexes"), get("children"))
|
const childViewsForRecord = compose(
|
||||||
|
flatten,
|
||||||
|
map("indexes"),
|
||||||
|
get("children")
|
||||||
|
)
|
||||||
|
|
||||||
const hideInternalHeaders = compose(
|
const hideInternalHeaders = compose(
|
||||||
remove(headerName => INTERNAL_HEADERS.includes(headerName)),
|
remove(headerName => INTERNAL_HEADERS.includes(headerName)),
|
||||||
|
@ -95,7 +99,9 @@
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<div class="table-controls">
|
<div class="table-controls">
|
||||||
<h4 class="budibase__title--3">{takeRight(2, $backendUiStore.breadcrumbs).join(" / ")}</h4>
|
<h4 class="budibase__title--3">
|
||||||
|
{takeRight(2, $backendUiStore.breadcrumbs).join(' / ')}
|
||||||
|
</h4>
|
||||||
<Select icon="ri-eye-line" bind:value={$backendUiStore.selectedView}>
|
<Select icon="ri-eye-line" bind:value={$backendUiStore.selectedView}>
|
||||||
{#each views as view}
|
{#each views as view}
|
||||||
<option value={view}>{view.name}</option>
|
<option value={view}>{view.name}</option>
|
|
@ -1,5 +1,5 @@
|
||||||
<script>
|
<script>
|
||||||
import { backendUiStore } from "../../builderStore"
|
import { backendUiStore } from "builderStore"
|
||||||
|
|
||||||
export let data
|
export let data
|
||||||
export let currentPage
|
export let currentPage
|
|
@ -1,5 +1,5 @@
|
||||||
import api from "../../builderStore/api"
|
import api from "builderStore/api"
|
||||||
import { getNewRecord, getNewInstance } from "../../common/core"
|
import { getNewRecord, getNewInstance } from "components/common/core"
|
||||||
|
|
||||||
export async function createUser(password, user, { appname, instanceId }) {
|
export async function createUser(password, user, { appname, instanceId }) {
|
||||||
const CREATE_USER_URL = `/_builder/instance/${appname}/${instanceId}/api/createUser`
|
const CREATE_USER_URL = `/_builder/instance/${appname}/${instanceId}/api/createUser`
|
|
@ -1,7 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import Modal from "../../../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import { store } from "../../../builderStore"
|
import { store } from "builderStore"
|
||||||
import ActionButton from "../../../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import * as api from "../api"
|
import * as api from "../api"
|
||||||
|
|
||||||
export let onClosed
|
export let onClosed
|
|
@ -0,0 +1,11 @@
|
||||||
|
<script>
|
||||||
|
import Modal from "components/common/Modal.svelte"
|
||||||
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
|
import { backendUiStore } from "builderStore"
|
||||||
|
import ModelView from "../../ModelView.svelte"
|
||||||
|
import * as api from "../api"
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<ModelView />
|
||||||
|
</section>
|
|
@ -1,18 +1,18 @@
|
||||||
<script>
|
<script>
|
||||||
import { onMount } from "svelte"
|
import { onMount } from "svelte"
|
||||||
import { store, backendUiStore } from "../../../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import { compose, map, get, flatten } from "lodash/fp"
|
import { compose, map, get, flatten } from "lodash/fp"
|
||||||
import Modal from "../../../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import ActionButton from "../../../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import Select from "../../../common/Select.svelte"
|
import Select from "components/common/Select.svelte"
|
||||||
import {
|
import {
|
||||||
getNewRecord,
|
getNewRecord,
|
||||||
joinKey,
|
joinKey,
|
||||||
getExactNodeForKey,
|
getExactNodeForKey,
|
||||||
} from "../../../common/core"
|
} from "components/common/core"
|
||||||
import RecordFieldControl from "./RecordFieldControl.svelte"
|
import RecordFieldControl from "./RecordFieldControl.svelte"
|
||||||
import * as api from "../api"
|
import * as api from "../api"
|
||||||
import ErrorsBox from "../../../common/ErrorsBox.svelte"
|
import ErrorsBox from "components/common/ErrorsBox.svelte"
|
||||||
|
|
||||||
export let record
|
export let record
|
||||||
export let onClosed
|
export let onClosed
|
|
@ -1,7 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import Modal from "../../../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import { store, backendUiStore } from "../../../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import ActionButton from "../../../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import * as api from "../api"
|
import * as api from "../api"
|
||||||
|
|
||||||
export let onClosed
|
export let onClosed
|
|
@ -1,7 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import Modal from "../../../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import ActionButton from "../../../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import { store, backendUiStore } from "../../../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import * as api from "../api"
|
import * as api from "../api"
|
||||||
|
|
||||||
export let record
|
export let record
|
|
@ -1,12 +1,12 @@
|
||||||
<script>
|
<script>
|
||||||
import { tick } from "svelte"
|
import { tick } from "svelte"
|
||||||
import Textbox from "../common/Textbox.svelte"
|
import Textbox from "components/common/Textbox.svelte"
|
||||||
import Button from "../common/Button.svelte"
|
import Button from "components/common/Button.svelte"
|
||||||
import Select from "../common/Select.svelte"
|
import Select from "components/common/Select.svelte"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
import FieldView from "./FieldView.svelte"
|
import FieldView from "./FieldView.svelte"
|
||||||
import Modal from "../common/Modal.svelte"
|
import Modal from "components/common/Modal.svelte"
|
||||||
import {
|
import {
|
||||||
get,
|
get,
|
||||||
compose,
|
compose,
|
||||||
|
@ -18,11 +18,11 @@
|
||||||
keys,
|
keys,
|
||||||
isDate,
|
isDate,
|
||||||
} from "lodash/fp"
|
} from "lodash/fp"
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import { common, hierarchy } from "../../../core/src"
|
import { common, hierarchy } from "../../../../core/src/"
|
||||||
import { getNode } from "../common/core"
|
import { getNode } from "components/common/core"
|
||||||
import { templateApi, pipe, validate } from "../common/core"
|
import { templateApi, pipe, validate } from "components/common/core"
|
||||||
import ErrorsBox from "../common/ErrorsBox.svelte"
|
import ErrorsBox from "components/common/ErrorsBox.svelte"
|
||||||
|
|
||||||
let record
|
let record
|
||||||
let getIndexAllowedRecords
|
let getIndexAllowedRecords
|
||||||
|
@ -154,7 +154,7 @@
|
||||||
<div>{field.name}</div>
|
<div>{field.name}</div>
|
||||||
</td>
|
</td>
|
||||||
<td>{field.type}</td>
|
<td>{field.type}</td>
|
||||||
<td>{field.typeOptions.values || ""}</td>
|
<td>{field.typeOptions.values || ''}</td>
|
||||||
<td>
|
<td>
|
||||||
<i
|
<i
|
||||||
class="ri-delete-bin-6-line hoverable"
|
class="ri-delete-bin-6-line hoverable"
|
||||||
|
@ -164,26 +164,28 @@
|
||||||
{/each}
|
{/each}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="uk-margin">
|
<div class="uk-margin">
|
||||||
<ActionButton color="secondary" on:click={store.saveCurrentNode}>
|
<ActionButton color="secondary" on:click={store.saveCurrentNode}>
|
||||||
Save
|
Save
|
||||||
|
</ActionButton>
|
||||||
|
{#if modelExistsInHierarchy}
|
||||||
|
<ActionButton color="primary" on:click={store.newChildRecord}>
|
||||||
|
Create Child Model on {record.name}
|
||||||
</ActionButton>
|
</ActionButton>
|
||||||
{#if modelExistsInHierarchy}
|
<ActionButton
|
||||||
<ActionButton color="primary" on:click={store.newChildRecord}>
|
color="primary"
|
||||||
Create Child Model on {record.name}
|
on:click={async () => {
|
||||||
</ActionButton>
|
backendUiStore.actions.modals.show('VIEW')
|
||||||
<ActionButton
|
await tick()
|
||||||
color="primary"
|
store.newChildIndex()
|
||||||
on:click={async () => {
|
}}>
|
||||||
backendUiStore.actions.modals.show('VIEW')
|
Create Child View on {record.name}
|
||||||
await tick()
|
</ActionButton>
|
||||||
store.newChildIndex()
|
<ActionButton alert on:click={store.deleteCurrentNode}>
|
||||||
}}>
|
Delete
|
||||||
Create Child View on {record.name}
|
</ActionButton>
|
||||||
</ActionButton>
|
{/if}
|
||||||
<ActionButton alert on:click={store.deleteCurrentNode}>Delete</ActionButton>
|
</div>
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
{:else}
|
{:else}
|
||||||
<FieldView
|
<FieldView
|
||||||
field={fieldToEdit}
|
field={fieldToEdit}
|
|
@ -1,12 +1,11 @@
|
||||||
<script>
|
<script>
|
||||||
import { getContext } from "svelte"
|
import { getContext } from "svelte"
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import HierarchyRow from "./HierarchyRow.svelte"
|
import HierarchyRow from "./HierarchyRow.svelte"
|
||||||
import DatabasesList from "./DatabasesList.svelte"
|
import DatabasesList from "./DatabasesList.svelte"
|
||||||
import UsersList from "./UsersList.svelte"
|
import UsersList from "./UsersList.svelte"
|
||||||
import { hierarchy as hierarchyFunctions } from "../../../core/src"
|
|
||||||
import NavItem from "./NavItem.svelte"
|
import NavItem from "./NavItem.svelte"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="items-root">
|
<div class="items-root">
|
||||||
|
@ -42,7 +41,7 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<NavItem name="ACCESS_LEVELS" label="User Levels" />
|
<NavItem name="ACCESS_LEVELS" label="User Access Levels" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
@ -58,12 +57,17 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 2rem 1rem 1rem 1rem;
|
padding: 20px 20px 10px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hierarchy-title {
|
.hierarchy-title {
|
||||||
|
align-items: center;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-size: 0.85em;
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
opacity: 0.6;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hierarchy {
|
.hierarchy {
|
|
@ -1,7 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { tick, onMount } from "svelte"
|
import { tick, onMount } from "svelte"
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import api from "../builderStore/api"
|
import api from "builderStore/api"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "../common/icon"
|
||||||
import { CheckIcon } from "../common/Icons"
|
import { CheckIcon } from "../common/Icons"
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
if ($store.appInstances.length > 0) {
|
if ($store.appInstances.length > 0) {
|
||||||
selectDatabase($store.appInstances[0]);
|
selectDatabase($store.appInstances[0])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -42,15 +42,14 @@
|
||||||
<CheckIcon />
|
<CheckIcon />
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
<i
|
|
||||||
class="ri-delete-bin-7-line hoverable uk-margin-small-left"
|
|
||||||
on:click={() => deleteDatabase(database)} />
|
|
||||||
<button
|
<button
|
||||||
class:active={database.id === $backendUiStore.selectedDatabase.id}
|
class:active={database.id === $backendUiStore.selectedDatabase.id}
|
||||||
on:click={() => selectDatabase(database)}>
|
on:click={() => selectDatabase(database)}>
|
||||||
{database.name}
|
{database.name}
|
||||||
</button>
|
</button>
|
||||||
|
<i
|
||||||
|
class="ri-delete-bin-7-line hoverable alignment"
|
||||||
|
on:click={() => deleteDatabase(database)} />
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -58,12 +57,10 @@
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.root {
|
.root {
|
||||||
padding-bottom: 10px;
|
font-size: 12px;
|
||||||
font-size: 0.9rem;
|
color: var(--secondary100);
|
||||||
color: var(--secondary50);
|
|
||||||
font-weight: bold;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-left: 1.8rem;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
|
@ -72,8 +69,13 @@
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.alignment {
|
||||||
|
margin-left: auto;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
margin: 0.5rem 0;
|
margin: 0px 0px 10px 0px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
@ -83,10 +85,11 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: none;
|
border: none;
|
||||||
font-family: Roboto;
|
font-family: Roboto;
|
||||||
font-size: 0.8rem;
|
font-size: 12px;
|
||||||
outline: none;
|
outline: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background: rgba(0, 0, 0, 0);
|
background: rgba(0, 0, 0, 0);
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active {
|
.active {
|
|
@ -1,6 +1,6 @@
|
||||||
<script>
|
<script>
|
||||||
import { getContext } from "svelte"
|
import { getContext } from "svelte"
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import { cloneDeep } from "lodash/fp"
|
import { cloneDeep } from "lodash/fp"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "../common/icon"
|
||||||
|
|
||||||
|
@ -52,8 +52,9 @@
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.hierarchy-item {
|
.hierarchy-item {
|
||||||
font-size: 14px;
|
font-size: 12px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.capitalized {
|
.capitalized {
|
|
@ -1,6 +1,6 @@
|
||||||
<script>
|
<script>
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "../common/icon"
|
||||||
import { backendUiStore } from "../builderStore"
|
import { backendUiStore } from "builderStore"
|
||||||
|
|
||||||
export let name = ""
|
export let name = ""
|
||||||
export let label = ""
|
export let label = ""
|
|
@ -1,10 +1,9 @@
|
||||||
<script>
|
<script>
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import HierarchyRow from "./HierarchyRow.svelte"
|
import HierarchyRow from "./HierarchyRow.svelte"
|
||||||
import DropdownButton from "../common/DropdownButton.svelte"
|
import DropdownButton from "components/common/DropdownButton.svelte"
|
||||||
import { hierarchy as hierarchyFunctions } from "../../../core/src"
|
|
||||||
import NavItem from "./NavItem.svelte"
|
import NavItem from "./NavItem.svelte"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "components/common/icon"
|
||||||
|
|
||||||
function newModel() {
|
function newModel() {
|
||||||
if ($store.currentNode) {
|
if ($store.currentNode) {
|
||||||
|
@ -56,20 +55,24 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: var(--secondary5);
|
background-color: var(--white);
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-group-header {
|
.nav-group-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 2rem 1rem 1rem 1rem;
|
padding: 20px 20px 10px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hierarchy-title {
|
.hierarchy-title {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-size: 0.85em;
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
opacity: 0.6;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hierarchy {
|
.hierarchy {
|
|
@ -1,7 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { onMount } from "svelte"
|
import { onMount } from "svelte"
|
||||||
import { store, backendUiStore } from "../builderStore"
|
import { store, backendUiStore } from "builderStore"
|
||||||
import api from "../builderStore/api"
|
import api from "builderStore/api"
|
||||||
import getIcon from "../common/icon"
|
import getIcon from "../common/icon"
|
||||||
import { CheckIcon } from "../common/Icons"
|
import { CheckIcon } from "../common/Icons"
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<script>
|
<script>
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import UIkit from "uikit"
|
import UIkit from "uikit"
|
||||||
import ActionButton from "../common/ActionButton.svelte"
|
import ActionButton from "components/common/ActionButton.svelte"
|
||||||
import ButtonGroup from "../common/ButtonGroup.svelte"
|
import ButtonGroup from "components/common/ButtonGroup.svelte"
|
||||||
import CodeMirror from "codemirror"
|
import CodeMirror from "codemirror"
|
||||||
import "codemirror/mode/javascript/javascript.js"
|
import "codemirror/mode/javascript/javascript.js"
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<script>
|
<script>
|
||||||
import PropsView from "./PropsView.svelte"
|
import PropsView from "./PropsView.svelte"
|
||||||
import StateBindingControl from "./StateBindingControl.svelte"
|
import StateBindingControl from "./StateBindingControl.svelte"
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import IconButton from "../common/IconButton.svelte"
|
import IconButton from "components/common/IconButton.svelte"
|
||||||
import {
|
import {
|
||||||
LayoutIcon,
|
LayoutIcon,
|
||||||
PaintIcon,
|
PaintIcon,
|
||||||
TerminalIcon,
|
TerminalIcon,
|
||||||
CircleIndicator,
|
CircleIndicator,
|
||||||
EventsIcon,
|
EventsIcon,
|
||||||
} from "../common/Icons/"
|
} from "components/common/Icons/"
|
||||||
import CodeEditor from "./CodeEditor.svelte"
|
import CodeEditor from "./CodeEditor.svelte"
|
||||||
import LayoutEditor from "./LayoutEditor.svelte"
|
import LayoutEditor from "./LayoutEditor.svelte"
|
||||||
import EventsEditor from "./EventsEditor"
|
import EventsEditor from "./EventsEditor"
|
|
@ -1,6 +1,6 @@
|
||||||
<script>
|
<script>
|
||||||
import { splitName } from "./pagesParsing/splitRootComponentName.js"
|
import { splitName } from "./pagesParsing/splitRootComponentName.js"
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import {
|
import {
|
||||||
find,
|
find,
|
||||||
sortBy,
|
sortBy,
|
||||||
|
@ -11,16 +11,16 @@
|
||||||
uniqBy,
|
uniqBy,
|
||||||
flatten,
|
flatten,
|
||||||
} from "lodash/fp"
|
} from "lodash/fp"
|
||||||
import { ImageIcon, InputIcon, LayoutIcon } from "../common/Icons/"
|
import { ImageIcon, InputIcon, LayoutIcon } from "components/common/Icons/"
|
||||||
import Select from "../common/Select.svelte"
|
import Select from "components/common/Select.svelte"
|
||||||
import Button from "../common/PlusButton.svelte"
|
import Button from "components/common/PlusButton.svelte"
|
||||||
import ConfirmDialog from "../common/ConfirmDialog.svelte"
|
import ConfirmDialog from "components/common/ConfirmDialog.svelte"
|
||||||
import {
|
import {
|
||||||
getRecordNodes,
|
getRecordNodes,
|
||||||
getIndexNodes,
|
getIndexNodes,
|
||||||
getIndexSchema,
|
getIndexSchema,
|
||||||
pipe,
|
pipe,
|
||||||
} from "../common/core"
|
} from "components/common/core"
|
||||||
|
|
||||||
export let toggleTab
|
export let toggleTab
|
||||||
|
|
||||||
|
@ -35,13 +35,16 @@
|
||||||
$: templatesByComponent = groupBy(t => t.component)($store.templates)
|
$: templatesByComponent = groupBy(t => t.component)($store.templates)
|
||||||
$: hierarchy = $store.hierarchy
|
$: hierarchy = $store.hierarchy
|
||||||
$: libraryModules = $store.libraries
|
$: libraryModules = $store.libraries
|
||||||
$: standaloneTemplates = pipe(templatesByComponent, [
|
$: standaloneTemplates = pipe(
|
||||||
values,
|
templatesByComponent,
|
||||||
flatten,
|
[
|
||||||
filter(t => !$store.components.some(c => c.name === t.component)),
|
values,
|
||||||
map(t => ({ name: splitName(t.component).componentName, template: t })),
|
flatten,
|
||||||
uniqBy(t => t.name),
|
filter(t => !$store.components.some(c => c.name === t.component)),
|
||||||
])
|
map(t => ({ name: splitName(t.component).componentName, template: t })),
|
||||||
|
uniqBy(t => t.name),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
const addRootComponent = (component, allComponents) => {
|
const addRootComponent = (component, allComponents) => {
|
||||||
const { libName } = splitName(component.name)
|
const { libName } = splitName(component.name)
|
|
@ -2,10 +2,10 @@
|
||||||
import ComponentsHierarchyChildren from "./ComponentsHierarchyChildren.svelte"
|
import ComponentsHierarchyChildren from "./ComponentsHierarchyChildren.svelte"
|
||||||
|
|
||||||
import { last, sortBy, map, trimCharsStart, trimChars, join } from "lodash/fp"
|
import { last, sortBy, map, trimCharsStart, trimChars, join } from "lodash/fp"
|
||||||
import ConfirmDialog from "../common/ConfirmDialog.svelte"
|
import ConfirmDialog from "components/common/ConfirmDialog.svelte"
|
||||||
import { pipe } from "../common/core"
|
import { pipe } from "components/common/core"
|
||||||
import { store } from "../builderStore"
|
import { store } from "builderStore"
|
||||||
import { ArrowDownIcon, ShapeIcon } from "../common/Icons/"
|
import { ArrowDownIcon, ShapeIcon } from "components/common/Icons/"
|
||||||
|
|
||||||
export let screens = []
|
export let screens = []
|
||||||
|
|
||||||
|
@ -15,12 +15,15 @@
|
||||||
const joinPath = join("/")
|
const joinPath = join("/")
|
||||||
|
|
||||||
const normalizedName = name =>
|
const normalizedName = name =>
|
||||||
pipe(name, [
|
pipe(
|
||||||
trimCharsStart("./"),
|
name,
|
||||||
trimCharsStart("~/"),
|
[
|
||||||
trimCharsStart("../"),
|
trimCharsStart("./"),
|
||||||
trimChars(" "),
|
trimCharsStart("~/"),
|
||||||
])
|
trimCharsStart("../"),
|
||||||
|
trimChars(" "),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
const lastPartOfName = c => {
|
const lastPartOfName = c => {
|
||||||
if (!c) return ""
|
if (!c) return ""
|
||||||
|
@ -32,10 +35,10 @@
|
||||||
|
|
||||||
const isFolderSelected = (current, folder) => isInSubfolder(current, folder)
|
const isFolderSelected = (current, folder) => isInSubfolder(current, folder)
|
||||||
|
|
||||||
$: _screens = pipe(screens, [
|
$: _screens = pipe(
|
||||||
map(c => ({ component: c, title: lastPartOfName(c) })),
|
screens,
|
||||||
sortBy("title"),
|
[map(c => ({ component: c, title: lastPartOfName(c) })), sortBy("title")]
|
||||||
])
|
)
|
||||||
|
|
||||||
const isScreenSelected = component =>
|
const isScreenSelected = component =>
|
||||||
component.component &&
|
component.component &&
|