Merge branch 'master' of github.com:Budibase/budibase into bugfixes
This commit is contained in:
commit
6ad45027d5
|
@ -50,7 +50,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@budibase/bbui": "^1.10.2",
|
"@budibase/bbui": "^1.13.0",
|
||||||
"@budibase/client": "^0.0.32",
|
"@budibase/client": "^0.0.32",
|
||||||
"@nx-js/compiler-util": "^2.0.0",
|
"@nx-js/compiler-util": "^2.0.0",
|
||||||
"codemirror": "^5.51.0",
|
"codemirror": "^5.51.0",
|
||||||
|
|
|
@ -78,12 +78,17 @@
|
||||||
|
|
||||||
.budibase__input {
|
.budibase__input {
|
||||||
height: 36px;
|
height: 36px;
|
||||||
width: 220px;
|
background-color: var(--grey-2);
|
||||||
border-radius: 3px;
|
border: none;
|
||||||
border: 1px solid var(--grey-4);
|
border-radius: 5px;
|
||||||
|
width: 100%;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: var(--ink);
|
color: var(--ink);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
padding-left: 8px;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uk-text-right {
|
.uk-text-right {
|
||||||
|
|
|
@ -15,16 +15,16 @@
|
||||||
<style>
|
<style>
|
||||||
div {
|
div {
|
||||||
height: 80px;
|
height: 80px;
|
||||||
border-radius: 3px;
|
border-radius: 5px;
|
||||||
color: var(--ink);
|
color: var(--ink);
|
||||||
font-weight: 500;
|
font-weight: 400;
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
transition: 0.3s transform;
|
transition: 0.3s transform;
|
||||||
background: var(--light-grey);
|
background: var(--grey-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
i {
|
i {
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
div:hover {
|
div:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transform: scale(1.1);
|
background: var(--grey-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.primary {
|
.primary {
|
||||||
|
|
|
@ -26,12 +26,12 @@
|
||||||
.numberbox {
|
.numberbox {
|
||||||
display: grid;
|
display: grid;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
grid-template-columns: 40% 1fr;
|
margin-bottom: 16px;
|
||||||
margin-top: 8px;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
font-size: 12px;
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -15,16 +15,34 @@
|
||||||
$: valuesText = join("\n")(values)
|
$: valuesText = join("\n")(values)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="uk-margin">
|
<div class="margin">
|
||||||
<label class="uk-form-label">{label}</label>
|
<label class="label">{label}</label>
|
||||||
<div class="uk-form-controls">
|
<div class="uk-form-controls">
|
||||||
<textarea value={valuesText} on:change={inputChanged} />
|
<textarea value={valuesText} on:change={inputChanged} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
.margin {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
.label {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
textarea {
|
textarea {
|
||||||
|
font-size: 14px;
|
||||||
|
height: 200px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100px;
|
border-radius: 5px;
|
||||||
|
border: none;
|
||||||
|
cursor: text;
|
||||||
|
background: var(--grey-2);
|
||||||
|
padding: 12px;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -86,10 +86,7 @@
|
||||||
<div class="table-controls">
|
<div class="table-controls">
|
||||||
<h2 class="title">{$backendUiStore.selectedModel.name}</h2>
|
<h2 class="title">{$backendUiStore.selectedModel.name}</h2>
|
||||||
<Button primary on:click={createNewRecord}>
|
<Button primary on:click={createNewRecord}>
|
||||||
<span class="button-inner">
|
<span class="button-inner">Create New Record</span>
|
||||||
<i class="ri-add-circle-fill" />
|
|
||||||
Create New Record
|
|
||||||
</span>
|
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
<table class="uk-table">
|
<table class="uk-table">
|
||||||
|
@ -207,9 +204,4 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-inner i {
|
|
||||||
margin-right: 5px;
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -93,8 +93,12 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<footer>
|
<footer>
|
||||||
<Button secondary on:click={onClosed}>Cancel</Button>
|
<div class="button-margin-3">
|
||||||
<Button attention on:click={saveRecord}>Save</Button>
|
<Button secondary on:click={onClosed}>Cancel</Button>
|
||||||
|
</div>
|
||||||
|
<div class="button-margin-4">
|
||||||
|
<Button blue on:click={saveRecord}>Save</Button>
|
||||||
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
@ -131,8 +135,22 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
padding: 20px;
|
padding: 20px 30px;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||||
|
gap: 20px;
|
||||||
background: var(--grey-1);
|
background: var(--grey-1);
|
||||||
border-radius: 0.5rem;
|
border-bottom-left-radius: 0.5rem;
|
||||||
|
border-bottom-left-radius: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-margin-3 {
|
||||||
|
grid-column-start: 3;
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-margin-4 {
|
||||||
|
grid-column-start: 4;
|
||||||
|
display: grid;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -48,7 +48,6 @@
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-gap: 20px;
|
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(3, 1fr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +67,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.selected {
|
.selected {
|
||||||
background: var(--blue-light);
|
background: var(--grey-3);
|
||||||
color: var(--ink);
|
color: var(--ink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,15 +18,14 @@
|
||||||
|
|
||||||
div {
|
div {
|
||||||
padding: 0 10px 0 10px;
|
padding: 0 10px 0 10px;
|
||||||
width: 90%;
|
height: 36px;
|
||||||
height: 40px;
|
border-radius: 5px;
|
||||||
border-radius: 3px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
transition: 0.3s background-color;
|
transition: 0.3s background-color;
|
||||||
color: var(--ink);
|
color: var(--ink);
|
||||||
font-weight: 500;
|
font-weight: 400;
|
||||||
font-size: 16px;
|
font-size: 14px;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +40,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
i {
|
i {
|
||||||
color: var(--dark-grey);
|
color: var(--grey-7);
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
headings={HEADINGS}
|
headings={HEADINGS}
|
||||||
bind:value={$backendUiStore.tabs.NAVIGATION_PANEL}>
|
bind:value={$backendUiStore.tabs.NAVIGATION_PANEL}>
|
||||||
{#if selectedTab === 'NAVIGATE'}
|
{#if selectedTab === 'NAVIGATE'}
|
||||||
<Button secondary wide on:click={setupForNewModel}>
|
<Button purple wide on:click={setupForNewModel}>
|
||||||
Create New Model
|
Create New Model
|
||||||
</Button>
|
</Button>
|
||||||
<div class="hierarchy-items-container">
|
<div class="hierarchy-items-container">
|
||||||
|
|
|
@ -95,30 +95,38 @@
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.info {
|
.info {
|
||||||
background: var(--light-grey);
|
margin-bottom: 16px;
|
||||||
padding: 12px;
|
border-radius: 5px;
|
||||||
margin-bottom: 5px;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
font-size: 12px;
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.field {
|
.field {
|
||||||
display: grid;
|
display: grid;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
grid-template-columns: 40% 1fr;
|
margin-bottom: 16px;
|
||||||
margin-top: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.field-box header {
|
.field-box header {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.field-box span {
|
.field-box span {
|
||||||
font-weight: bold;
|
background: var(--grey-2);
|
||||||
|
color: var(--grey-6);
|
||||||
|
font-weight: 400;
|
||||||
|
height: 36px;
|
||||||
|
display: grid;
|
||||||
|
align-items: center;
|
||||||
|
padding-left: 12px;
|
||||||
|
text-transform: capitalize;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: not-allowed;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -81,14 +81,14 @@
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<footer>
|
<footer>
|
||||||
<Button disabled={!edited} attention={edited} wide on:click={saveModel}>
|
<Button disabled={!edited} green={edited} wide on:click={saveModel}>
|
||||||
Save
|
Save
|
||||||
</Button>
|
</Button>
|
||||||
</footer>
|
</footer>
|
||||||
{:else if selectedTab === 'DELETE'}
|
{:else if selectedTab === 'DELETE'}
|
||||||
<div class="titled-input">
|
<div class="titled-input">
|
||||||
<header>Danger Zone</header>
|
<header>Danger Zone</header>
|
||||||
<Button error wide on:click={deleteModel}>Delete</Button>
|
<Button red wide on:click={deleteModel}>Delete</Button>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</Switcher>
|
</Switcher>
|
||||||
|
@ -115,14 +115,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.titled-input {
|
.titled-input {
|
||||||
padding: 12px;
|
margin-bottom: 16px;
|
||||||
background: var(--light-grey);
|
display: grid;
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.titled-input header {
|
.titled-input header {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -30,7 +30,10 @@
|
||||||
let selectedCategory = categories[0]
|
let selectedCategory = categories[0]
|
||||||
|
|
||||||
$: components = $store.components
|
$: components = $store.components
|
||||||
$: componentInstance = $store.currentView !== "component" ? {...$store.currentPreviewItem, ...$store.currentComponentInfo} : $store.currentComponentInfo
|
$: componentInstance =
|
||||||
|
$store.currentView !== "component"
|
||||||
|
? { ...$store.currentPreviewItem, ...$store.currentComponentInfo }
|
||||||
|
: $store.currentComponentInfo
|
||||||
$: componentDefinition = $store.components[componentInstance._component]
|
$: componentDefinition = $store.components[componentInstance._component]
|
||||||
$: componentPropDefinition =
|
$: componentPropDefinition =
|
||||||
flattenedPanel.find(
|
flattenedPanel.find(
|
||||||
|
@ -46,18 +49,21 @@
|
||||||
|
|
||||||
const onStyleChanged = store.setComponentStyle
|
const onStyleChanged = store.setComponentStyle
|
||||||
|
|
||||||
function onPropChanged(key, value) {
|
function onPropChanged(key, value) {
|
||||||
if($store.currentView !== "component") {
|
if ($store.currentView !== "component") {
|
||||||
store.setPageOrScreenProp(key, value)
|
store.setPageOrScreenProp(key, value)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
store.setComponentProp(key, value)
|
store.setComponentProp(key, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
$: isComponentOrScreen = $store.currentView === "component" || $store.currentFrontEndType === "screen"
|
$: isComponentOrScreen =
|
||||||
|
$store.currentView === "component" ||
|
||||||
|
$store.currentFrontEndType === "screen"
|
||||||
$: isNotScreenslot = componentInstance._component !== "##builtin/screenslot"
|
$: isNotScreenslot = componentInstance._component !== "##builtin/screenslot"
|
||||||
|
|
||||||
$: displayName = isComponentOrScreen && componentInstance._instanceName && isNotScreenslot
|
$: displayName =
|
||||||
|
isComponentOrScreen && componentInstance._instanceName && isNotScreenslot
|
||||||
|
|
||||||
function walkProps(component, action) {
|
function walkProps(component, action) {
|
||||||
action(component)
|
action(component)
|
||||||
|
@ -92,11 +98,11 @@
|
||||||
{categories}
|
{categories}
|
||||||
{selectedCategory} />
|
{selectedCategory} />
|
||||||
|
|
||||||
{#if displayName}
|
{#if displayName}
|
||||||
<div class="instance-name">
|
<div class="instance-name">
|
||||||
<strong>{componentInstance._instanceName}</strong>
|
<strong>{componentInstance._instanceName}</strong>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="component-props-container">
|
<div class="component-props-container">
|
||||||
{#if selectedCategory.value === 'design'}
|
{#if selectedCategory.value === 'design'}
|
||||||
|
@ -108,8 +114,7 @@
|
||||||
{panelDefinition}
|
{panelDefinition}
|
||||||
displayNameField={displayName}
|
displayNameField={displayName}
|
||||||
onChange={onPropChanged}
|
onChange={onPropChanged}
|
||||||
screenOrPageInstance={$store.currentView !== "component" && $store.currentPreviewItem} />
|
screenOrPageInstance={$store.currentView !== 'component' && $store.currentPreviewItem} />
|
||||||
|
|
||||||
{:else if selectedCategory.value === 'events'}
|
{:else if selectedCategory.value === 'events'}
|
||||||
<EventsEditor component={componentInstance} />
|
<EventsEditor component={componentInstance} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
import { store } from "builderStore"
|
import { store } from "builderStore"
|
||||||
import { ArrowDownIcon, ShapeIcon } from "components/common/Icons/"
|
import { ArrowDownIcon, ShapeIcon } from "components/common/Icons/"
|
||||||
|
|
||||||
export let screens = []
|
export let screens = []
|
||||||
|
|
||||||
let confirmDeleteDialog
|
let confirmDeleteDialog
|
||||||
let componentToDelete = ""
|
let componentToDelete = ""
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
style="padding-left: {level * 20 + 40}px">
|
style="padding-left: {level * 20 + 40}px">
|
||||||
<div class="nav-item">
|
<div class="nav-item">
|
||||||
<i class="icon ri-arrow-right-circle-fill" />
|
<i class="icon ri-arrow-right-circle-fill" />
|
||||||
{isScreenslot(component._component) ? "Screenslot" : component._instanceName}
|
{isScreenslot(component._component) ? 'Screenslot' : component._instanceName}
|
||||||
</div>
|
</div>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<ComponentDropdownMenu {component} />
|
<ComponentDropdownMenu {component} />
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import { EVENT_TYPE_MEMBER_NAME } from "components/common/eventHandlers"
|
import { EVENT_TYPE_MEMBER_NAME } from "components/common/eventHandlers"
|
||||||
import { store, workflowStore } from "builderStore"
|
import { store, workflowStore } from "builderStore"
|
||||||
import { ArrowDownIcon } from "components/common/Icons/"
|
import { ArrowDownIcon } from "components/common/Icons/"
|
||||||
import { createEventDispatcher } from 'svelte'
|
import { createEventDispatcher } from "svelte"
|
||||||
|
|
||||||
export let parameter
|
export let parameter
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
{/if}
|
{/if}
|
||||||
{#if parameter.name === 'workflow'}
|
{#if parameter.name === 'workflow'}
|
||||||
<Select on:change bind:value={parameter.value}>
|
<Select on:change bind:value={parameter.value}>
|
||||||
<option value=""></option>
|
<option value="" />
|
||||||
{#each $workflowStore.workflows.filter(wf => wf.live) as workflow}
|
{#each $workflowStore.workflows.filter(wf => wf.live) as workflow}
|
||||||
<option value={workflow._id}>{workflow.name}</option>
|
<option value={workflow._id}>{workflow.name}</option>
|
||||||
{/each}
|
{/each}
|
||||||
|
|
|
@ -13,9 +13,10 @@
|
||||||
export let displayNameField = false
|
export let displayNameField = false
|
||||||
export let screenOrPageInstance
|
export let screenOrPageInstance
|
||||||
|
|
||||||
let pageScreenProps = ["title","favicon", "description", "route"]
|
let pageScreenProps = ["title", "favicon", "description", "route"]
|
||||||
|
|
||||||
const propExistsOnComponentDef = prop => pageScreenProps.includes(prop) || prop in componentDefinition.props
|
const propExistsOnComponentDef = prop =>
|
||||||
|
pageScreenProps.includes(prop) || prop in componentDefinition.props
|
||||||
|
|
||||||
function handleChange(key, data) {
|
function handleChange(key, data) {
|
||||||
data.target ? onChange(key, data.target.value) : onChange(key, data)
|
data.target ? onChange(key, data.target.value) : onChange(key, data)
|
||||||
|
@ -38,18 +39,23 @@
|
||||||
{#if screenOrPageInstance}
|
{#if screenOrPageInstance}
|
||||||
{#each screenOrPageDefinition as def}
|
{#each screenOrPageDefinition as def}
|
||||||
<PropertyControl
|
<PropertyControl
|
||||||
control={def.control}
|
control={def.control}
|
||||||
label={def.label}
|
label={def.label}
|
||||||
key={def.key}
|
key={def.key}
|
||||||
value={screenOrPageInstance[def.key]}
|
value={screenOrPageInstance[def.key]}
|
||||||
{onChange}
|
{onChange}
|
||||||
props={{ ...excludeProps(def, ['control', 'label']) }} />
|
props={{ ...excludeProps(def, ['control', 'label']) }} />
|
||||||
{/each}
|
{/each}
|
||||||
<hr />
|
<hr />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if displayNameField}
|
{#if displayNameField}
|
||||||
<PropertyControl control={Input} label="Name" key="_instanceName" value={componentInstance._instanceName} {onChange} />
|
<PropertyControl
|
||||||
|
control={Input}
|
||||||
|
label="Name"
|
||||||
|
key="_instanceName"
|
||||||
|
value={componentInstance._instanceName}
|
||||||
|
{onChange} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if panelDefinition && panelDefinition.length > 0}
|
{#if panelDefinition && panelDefinition.length > 0}
|
||||||
|
|
|
@ -199,6 +199,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.components-list-container {
|
.components-list-container {
|
||||||
padding: 20px 0px 0 0;
|
padding: 10px 0px 0 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -130,7 +130,11 @@
|
||||||
{#each ACCESS_LEVELS as level}
|
{#each ACCESS_LEVELS as level}
|
||||||
<span class="access-level">
|
<span class="access-level">
|
||||||
<label>{level.name}</label>
|
<label>{level.name}</label>
|
||||||
<input class="uk-checkbox" type="checkbox" disabled={!level.editable} bind:checked={level.canExecute}/>
|
<input
|
||||||
|
class="uk-checkbox"
|
||||||
|
type="checkbox"
|
||||||
|
disabled={!level.editable}
|
||||||
|
bind:checked={level.canExecute} />
|
||||||
</span>
|
</span>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -40,10 +40,10 @@ export const FIELDS = {
|
||||||
DATETIME: {
|
DATETIME: {
|
||||||
name: "Date/Time",
|
name: "Date/Time",
|
||||||
icon: "ri-calendar-event-fill",
|
icon: "ri-calendar-event-fill",
|
||||||
type: "datetime",
|
type: "string",
|
||||||
constraints: {
|
constraints: {
|
||||||
type: "date",
|
type: "string",
|
||||||
datetime: {},
|
length: {},
|
||||||
presence: false,
|
presence: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -119,10 +119,10 @@ export const BLOCKS = {
|
||||||
END_DATE: {
|
END_DATE: {
|
||||||
name: "End Date",
|
name: "End Date",
|
||||||
icon: "ri-calendar-event-fill",
|
icon: "ri-calendar-event-fill",
|
||||||
type: "datetime",
|
type: "string",
|
||||||
constraints: {
|
constraints: {
|
||||||
type: "date",
|
type: "string",
|
||||||
datetime: {},
|
length: {},
|
||||||
presence: false,
|
presence: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
background: var(--grey-1);
|
background: var(--grey-1);
|
||||||
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
|
@ -32,7 +33,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav {
|
.nav {
|
||||||
overflow: auto;
|
|
||||||
flex: 0 1 auto;
|
flex: 0 1 auto;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
background: var(--grey-1);
|
background: var(--grey-1);
|
||||||
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
|
|
|
@ -23,7 +23,10 @@
|
||||||
|
|
||||||
const login = async () => {
|
const login = async () => {
|
||||||
loading = true
|
loading = true
|
||||||
const response = await _bb.api.post("/api/authenticate", { username, password })
|
const response = await _bb.api.post("/api/authenticate", {
|
||||||
|
username,
|
||||||
|
password,
|
||||||
|
})
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
const json = await response.json()
|
const json = await response.json()
|
||||||
localStorage.setItem("budibase:token", json.token)
|
localStorage.setItem("budibase:token", json.token)
|
||||||
|
|
Loading…
Reference in New Issue