forked from tsai/budibase
10 changed files with 223 additions and 79 deletions
@ -0,0 +1,69 @@ |
|||||
|
<script> |
||||
|
import { |
||||
|
Button, |
||||
|
TextArea, |
||||
|
Label, |
||||
|
Input, |
||||
|
Heading, |
||||
|
Spacer, |
||||
|
Select |
||||
|
} from "@budibase/bbui" |
||||
|
|
||||
|
export let fields = {} |
||||
|
export let schema |
||||
|
|
||||
|
let customSchema = {} |
||||
|
let draftField = {} |
||||
|
|
||||
|
function addField() { |
||||
|
// Add the new field to custom fields for the query |
||||
|
customSchema[draftField.name] = { |
||||
|
type: draftField.type |
||||
|
} |
||||
|
// reset the draft field |
||||
|
draftField = {} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<form on:submit|preventDefault> |
||||
|
{#each Object.keys(schema.fields) as field} |
||||
|
<Label extraSmall grey>{field}</Label> |
||||
|
<Input |
||||
|
type={schema.fields[field]?.type} |
||||
|
required={schema.fields[field]?.required} |
||||
|
bind:value={fields[field]} /> |
||||
|
<Spacer medium /> |
||||
|
{/each} |
||||
|
{#if schema.customisable} |
||||
|
<Label>Add Custom Field</Label> |
||||
|
{#each Object.keys(customSchema) as field} |
||||
|
<Label extraSmall grey>{field}</Label> |
||||
|
<Input |
||||
|
thin |
||||
|
type={customSchema[field]?.type} |
||||
|
bind:value={fields[field]} |
||||
|
/> |
||||
|
<Spacer medium /> |
||||
|
{/each} |
||||
|
<div class="new-field"> |
||||
|
<Label extraSmall grey>Name</Label> |
||||
|
<Label extraSmall grey>Type</Label> |
||||
|
<Input thin bind:value={draftField.name} /> |
||||
|
<Select thin secondary bind:value={draftField.name}> |
||||
|
<option value={"text"}>String</option> |
||||
|
<option value={"number"}>Number</option> |
||||
|
</Select> |
||||
|
</div> |
||||
|
<Button small thin primary on:click={addField}>Add Field</Button> |
||||
|
{/if} |
||||
|
</form> |
||||
|
|
||||
|
<style> |
||||
|
.new-field { |
||||
|
display: grid; |
||||
|
grid-template-columns: 1fr 1fr; |
||||
|
grid-gap: var(--spacing-m); |
||||
|
margin-top: var(--spacing-m); |
||||
|
margin-bottom: var(--spacing-m); |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,7 @@ |
|||||
|
class Field { |
||||
|
constructor(type, defaultValue, required) { |
||||
|
this.type = type |
||||
|
this.default = defaultValue |
||||
|
this.required = required |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue