diff --git a/hexawebshare/src/components/admin/forms/EntityForm.stories.svelte b/hexawebshare/src/components/admin/forms/EntityForm.stories.svelte new file mode 100644 index 0000000..7c2fe4e --- /dev/null +++ b/hexawebshare/src/components/admin/forms/EntityForm.stories.svelte @@ -0,0 +1,525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hexawebshare/src/components/admin/forms/EntityForm.svelte b/hexawebshare/src/components/admin/forms/EntityForm.svelte index 315da07..bf10924 100644 --- a/hexawebshare/src/components/admin/forms/EntityForm.svelte +++ b/hexawebshare/src/components/admin/forms/EntityForm.svelte @@ -2,3 +2,1098 @@ SPDX-FileCopyrightText: 2025 hexaTune LLC SPDX-License-Identifier: MIT --> + + + + + +
+ {#if title || description} +
+ {#if title} + + {title} + + {/if} + {#if description} + + {description} + + {/if} +
+ {/if} + + {#if error || internalError} +
+ +
+ {/if} + + {#if success || internalSuccess} +
+ +
+ {/if} + +
+
+ {#if loading} +
+ +
+ {/if} + + {#if Object.keys(fieldsBySection().grouped).length > 0 || fieldsBySection().noSection.length > 0} + {#each Object.entries(fieldsBySection().grouped) as [sectionName, sectionFields]} + +
+ {#each sectionFields as field} + {@const fieldState = getFieldState(field)} + {#if field.render} + {@const customFieldSnippet = field.render( + field, + fieldState.value, + formErrors, + handleFieldChange + )} + {@render customFieldSnippet()} + {:else if field.type === 'text' || field.type === 'email' || field.type === 'password' || field.type === 'tel' || field.type === 'url' || field.type === 'date' || field.type === 'time' || field.type === 'datetime-local'} + { + const target = e.target as HTMLInputElement; + handleFieldChange(field.key, target.value); + }} + /> + {:else if field.type === 'number'} + { + const target = e.target as HTMLInputElement; + handleFieldChange(field.key, target.value ? Number(target.value) : undefined); + }} + /> + {:else if field.type === 'textarea'} + + { + const target = e.target as HTMLInputElement; + handleFieldChange(field.key, target.value); + }} + /> + {:else if field.type === 'select'} + { + const target = e.target as HTMLInputElement; + handleFieldChange(field.key, target.value); + }} + /> + {:else if field.type === 'number'} + { + const target = e.target as HTMLInputElement; + handleFieldChange(field.key, target.value ? Number(target.value) : undefined); + }} + /> + {:else if field.type === 'textarea'} + + { + const target = e.target as HTMLInputElement; + handleFieldChange(field.key, target.value); + }} + /> + {:else if field.type === 'select'} +