pocketbase/ui/src/components/collections/schema/SchemaFieldSelect.svelte

87 lines
2.5 KiB
Svelte
Raw Normal View History

2023-03-17 01:21:16 +08:00
<script>
import Field from "@/components/base/Field.svelte";
import ObjectSelect from "@/components/base/ObjectSelect.svelte";
2025-03-20 19:46:40 +08:00
import DynamicOptionsSelect from "@/components/base/DynamicOptionsSelect.svelte";
2023-03-17 01:21:16 +08:00
import SchemaField from "@/components/collections/schema/SchemaField.svelte";
export let field;
export let key = "";
const isSingleOptions = [
{ label: "Single", value: true },
{ label: "Multiple", value: false },
];
2024-09-30 00:23:19 +08:00
let isSingle = field.maxSelect <= 1;
2023-03-17 01:21:16 +08:00
let oldIsSingle = isSingle;
2024-09-30 00:23:19 +08:00
$: if (typeof field.maxSelect == "undefined") {
2023-03-17 01:21:16 +08:00
loadDefaults();
}
$: if (oldIsSingle != isSingle) {
oldIsSingle = isSingle;
if (isSingle) {
2024-09-30 00:23:19 +08:00
field.maxSelect = 1;
2023-03-17 01:21:16 +08:00
} else {
2024-09-30 00:23:19 +08:00
field.maxSelect = field.values?.length || 2;
2023-03-17 01:21:16 +08:00
}
}
function loadDefaults() {
2024-09-30 00:23:19 +08:00
field.maxSelect = 1;
field.values = [];
2023-03-17 01:21:16 +08:00
isSingle = true;
oldIsSingle = isSingle;
}
</script>
<SchemaField bind:field {key} on:rename on:remove on:duplicate {...$$restProps}>
2023-03-17 01:21:16 +08:00
<svelte:fragment let:interactive>
2023-04-26 19:06:27 +08:00
<div class="separator" />
2023-03-17 01:21:16 +08:00
<Field
class="form-field required {!interactive ? 'readonly' : ''}"
2023-03-17 01:21:16 +08:00
inlineError
2024-09-30 00:23:19 +08:00
name="fields.{key}.values"
2023-03-17 01:21:16 +08:00
let:uniqueId
>
2025-03-20 19:46:40 +08:00
<DynamicOptionsSelect id={uniqueId} bind:items={field.values} />
2023-03-17 01:21:16 +08:00
</Field>
2023-04-26 19:06:27 +08:00
<div class="separator" />
2023-03-17 01:21:16 +08:00
<Field
class="form-field form-field-single-multiple-select {!interactive ? 'readonly' : ''}"
2023-03-17 01:21:16 +08:00
inlineError
let:uniqueId
>
<ObjectSelect
id={uniqueId}
items={isSingleOptions}
readonly={!interactive}
2023-03-17 01:21:16 +08:00
bind:keyOfSelected={isSingle}
/>
</Field>
2023-04-26 19:06:27 +08:00
<div class="separator" />
2023-03-17 01:21:16 +08:00
</svelte:fragment>
<svelte:fragment slot="options">
{#if !isSingle}
2024-09-30 00:23:19 +08:00
<Field class="form-field" name="fields.{key}.maxSelect" let:uniqueId>
2023-03-17 01:21:16 +08:00
<label for={uniqueId}>Max select</label>
<input
id={uniqueId}
type="number"
step="1"
min="2"
2024-09-30 00:23:19 +08:00
max={field.values.length}
placeholder="Default to single"
bind:value={field.maxSelect}
2023-03-17 01:21:16 +08:00
/>
</Field>
{/if}
</svelte:fragment>
</SchemaField>