1
0
Fork 0
mirror of synced 2024-09-18 10:20:11 +12:00
budibase/packages/builder/src/components/integration/KeyValueBuilder.svelte

67 lines
1.6 KiB
Svelte
Raw Normal View History

2021-02-16 07:41:56 +13:00
<script>
import { Icon, ActionButton, Input } from "@budibase/bbui"
import { createEventDispatcher } from "svelte"
import { lowercase } from "helpers"
let dispatch = createEventDispatcher()
2021-02-16 07:41:56 +13:00
2021-02-25 05:31:47 +13:00
export let defaults
export let object = defaults || {}
2021-02-20 01:07:37 +13:00
export let readOnly
2021-09-30 01:02:30 +13:00
export let noAddButton
export let name
2021-02-16 07:41:56 +13:00
let fields = Object.entries(object).map(([name, value]) => ({ name, value }))
2021-02-16 07:41:56 +13:00
$: object = fields.reduce(
(acc, next) => ({ ...acc, [next.name]: next.value }),
{}
)
2021-09-30 01:02:30 +13:00
export function addEntry() {
console.log(fields)
2021-02-16 07:41:56 +13:00
fields = [...fields, {}]
changed()
2021-02-16 07:41:56 +13:00
}
function deleteEntry(idx) {
fields.splice(idx, 1)
changed()
}
function changed() {
2021-02-16 07:41:56 +13:00
fields = fields
dispatch("change", fields)
2021-02-16 07:41:56 +13:00
}
</script>
<!-- Builds Objects with Key Value Pairs. Useful for building things like Request Headers. -->
2021-12-02 02:09:16 +13:00
{#if Object.keys(object || {}).length > 0}
<div class="container" class:readOnly>
{#each fields as field, idx}
<Input placeholder="Key" bind:value={field.name} on:change={changed} />
<Input placeholder="Value" bind:value={field.value} on:change={changed} />
{#if !readOnly}
<Icon hoverable name="Close" on:click={() => deleteEntry(idx)} />
{/if}
{/each}
</div>
{/if}
2021-09-30 01:02:30 +13:00
{#if !readOnly && !noAddButton}
2021-05-04 20:55:14 +12:00
<div>
<ActionButton icon="Add" secondary thin outline on:click={addEntry}
>Add{name ? ` ${lowercase(name)}` : ""}</ActionButton
>
2021-05-04 20:55:14 +12:00
</div>
2021-02-20 01:07:37 +13:00
{/if}
2021-02-16 07:41:56 +13:00
<style>
.container {
display: grid;
grid-template-columns: 1fr 1fr 20px;
grid-gap: var(--spacing-m);
align-items: center;
2021-02-16 07:59:21 +13:00
margin-bottom: var(--spacing-m);
2021-02-16 07:41:56 +13:00
}
</style>