Files
lucent-laravel/front/js/svelte/records/FormField.svelte
T

120 lines
3.6 KiB
Svelte
Raw Normal View History

2023-10-02 23:10:49 +03:00
<script>
2024-03-25 21:26:21 +02:00
import Text from "./form/fields/Text.svelte";
import Slug from "./form/fields/Slug.svelte";
2023-10-02 23:10:49 +03:00
import Reference from "./elements/Reference.svelte";
import ReferenceInline from "./elements/ReferenceInline.svelte";
import Block from "./block/Block.svelte";
2024-03-25 21:26:21 +02:00
import Color from "./form/fields/Color.svelte";
import Checkbox from "./form/fields/Checkbox.svelte";
import Number from "./form/fields/Number.svelte";
import Date from "./form/fields/Date.svelte";
import UUID from "./form/fields/UUID.svelte";
import File from "./form/references/File.svelte";
import Textarea from "./form/fields/Textarea.svelte";
import Datetime from "./form/fields/Datetime.svelte";
import RichEditor from "./form/fields/RichEditor.svelte";
import Json from "./form/fields/JSON.svelte";
import Markdown from "./form/fields/Markdown.svelte";
import FieldHeader from "./form/FieldHeader.svelte";
2023-10-02 23:10:49 +03:00
import ReferenceTable from "./elements/ReferenceTable.svelte";
2024-03-25 21:26:21 +02:00
import ReferenceTags from "./form/references/ReferenceTags.svelte";
2023-10-02 23:10:49 +03:00
const formElements = {
text: Text,
2023-10-06 18:47:50 +03:00
slug: Slug,
2023-10-02 23:10:49 +03:00
textarea: Textarea,
rich: RichEditor,
color: Color,
checkbox: Checkbox,
number: Number,
date: Date,
datetime: Datetime,
uuid: UUID,
json: Json,
2023-10-23 18:05:06 +03:00
markdown: Markdown,
2023-10-02 23:10:49 +03:00
};
export let field;
export let data;
export let schema;
export let record;
export let graph;
export let validationErrors;
export let isCreateMode;
let formElement = formElements[field.info.name];
const id = `field-${field.name}-${record.id}`;
</script>
<div class="card editor-field">
2024-03-25 21:26:21 +02:00
<FieldHeader {field} {id}/>
2023-10-02 23:10:49 +03:00
{#if field.info.name === "reference" && field.layout === "inline"}
<ReferenceInline
bind:graph
{record}
{field}
{validationErrors}
/>
{:else if field.info.name === "reference" && field.layout === "table"}
<ReferenceTable
bind:graph
2023-10-13 21:06:23 +03:00
{id}
2023-10-02 23:10:49 +03:00
{record}
{field}
{validationErrors}
/>
2023-10-07 21:18:18 +03:00
{:else if field.info.name === "reference" && field.layout === "tags"}
<ReferenceTags
bind:graph
{id}
{record}
{field}
{validationErrors}
/>
2024-03-25 21:26:21 +02:00
{:else if ["reference","file"].includes(field.info.name)}
<File bind:graph {record} {field} />
2023-10-02 23:10:49 +03:00
{:else if field.info.name === "block"}
<Block
bind:graph
bind:value={data[field.name]}
{record}
{id}
{field}
{validationErrors}
/>
{:else if field.info.name === "text"}
<Text
bind:value={data[field.name]}
{field}
{id}
{validationErrors}
{isCreateMode}
/>
2023-10-06 18:47:50 +03:00
{:else if field.info.name === "slug"}
<Slug
bind:value={data[field.name]}
{field}
{id}
{validationErrors}
{isCreateMode}
/>
2023-10-02 23:10:49 +03:00
{:else if field.info.name === "textarea"}
<Textarea
bind:value={data[field.name]}
{field}
{validationErrors}
{isCreateMode}
{id}
/>
{:else}
<svelte:component
this={formElement}
bind:value={data[field.name]}
{schema}
{field}
{validationErrors}
{isCreateMode}
{id}
/>
{/if}
</div>