2022-07-07 05:19:05 +08:00
|
|
|
<script>
|
|
|
|
import Field from "@/components/base/Field.svelte";
|
2024-09-30 00:23:19 +08:00
|
|
|
import Select from "@/components/base/Select.svelte";
|
|
|
|
import FieldLabel from "@/components/records/fields/FieldLabel.svelte";
|
2022-07-07 05:19:05 +08:00
|
|
|
|
2023-08-15 02:20:49 +08:00
|
|
|
export let field;
|
2022-07-07 05:19:05 +08:00
|
|
|
export let value = undefined;
|
|
|
|
|
2024-09-30 00:23:19 +08:00
|
|
|
$: isMultiple = field.maxSelect != 1;
|
2022-07-07 05:19:05 +08:00
|
|
|
|
|
|
|
$: if (typeof value === "undefined") {
|
2022-07-18 05:16:09 +08:00
|
|
|
value = isMultiple ? [] : "";
|
2022-07-07 05:19:05 +08:00
|
|
|
}
|
|
|
|
|
2024-09-30 00:23:19 +08:00
|
|
|
$: maxSelect = field.maxSelect || field.values.length;
|
|
|
|
|
|
|
|
$: if (isMultiple && Array.isArray(value)) {
|
|
|
|
value = value.filter((v) => field.values.includes(v));
|
|
|
|
if (value.length > maxSelect) {
|
|
|
|
value = value.slice(value.length - maxSelect);
|
|
|
|
}
|
2022-07-07 05:19:05 +08:00
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<Field class="form-field {field.required ? 'required' : ''}" name={field.name} let:uniqueId>
|
2024-09-30 00:23:19 +08:00
|
|
|
<FieldLabel {uniqueId} {field} />
|
|
|
|
|
2022-07-07 05:19:05 +08:00
|
|
|
<Select
|
|
|
|
id={uniqueId}
|
|
|
|
toggle={!field.required || isMultiple}
|
|
|
|
multiple={isMultiple}
|
2024-09-30 00:23:19 +08:00
|
|
|
closable={!isMultiple || value?.length >= field.maxSelect}
|
|
|
|
items={field.values}
|
|
|
|
searchable={field.values?.length > 5}
|
2022-07-07 05:19:05 +08:00
|
|
|
bind:selected={value}
|
|
|
|
/>
|
2024-09-30 00:23:19 +08:00
|
|
|
{#if field.maxSelect != 1}
|
|
|
|
<div class="help-block">Select up to {maxSelect} items.</div>
|
2022-07-07 05:19:05 +08:00
|
|
|
{/if}
|
|
|
|
</Field>
|