budibase/packages/builder/src/components/integration/KeyValueBuilder.svelte

52 lines
1.2 KiB
Svelte
Raw Normal View History

2021-02-15 19:41:56 +01:00
<script>
2021-02-18 20:24:42 +01:00
import { Button, Input } from "@budibase/bbui"
2021-02-15 19:41:56 +01:00
2021-02-24 17:31:47 +01:00
export let defaults
export let object = defaults || {}
2021-02-19 13:07:37 +01:00
export let readOnly
2021-02-15 19:41:56 +01:00
let fields = Object.entries(object).map(([name, value]) => ({ name, value }))
2021-02-15 19:41:56 +01:00
$: object = fields.reduce(
(acc, next) => ({ ...acc, [next.name]: next.value }),
{}
)
function addEntry() {
fields = [...fields, {}]
}
function deleteEntry(idx) {
fields.splice(idx, 1)
fields = fields
}
</script>
<!-- Builds Objects with Key Value Pairs. Useful for building things like Request Headers. -->
2021-02-19 13:07:37 +01:00
<div class="container" class:readOnly>
2021-02-15 19:41:56 +01:00
{#each fields as field, idx}
2021-02-18 19:55:08 +01:00
<Input placeholder="Key" thin outline bind:value={field.name} />
<Input placeholder="Value" thin outline bind:value={field.value} />
2021-02-19 13:07:37 +01:00
{#if !readOnly}
<i class="ri-close-circle-fill" on:click={() => deleteEntry(idx)} />
{/if}
2021-02-15 19:41:56 +01:00
{/each}
</div>
2021-02-19 13:07:37 +01:00
{#if !readOnly}
<Button secondary thin outline on:click={addEntry}>Add</Button>
{/if}
2021-02-15 19:41:56 +01:00
<style>
.container {
display: grid;
grid-template-columns: 1fr 1fr 20px;
grid-gap: var(--spacing-m);
align-items: center;
2021-02-15 19:59:21 +01:00
margin-bottom: var(--spacing-m);
2021-02-15 19:41:56 +01:00
}
2021-02-18 20:24:42 +01:00
.ri-close-circle-fill {
2021-02-15 19:41:56 +01:00
cursor: pointer;
}
</style>