Update PwdFormInput to Formsnap

This commit is contained in:
2025-03-19 13:39:54 +01:00
parent 8caa23d716
commit fefb96daaa
2 changed files with 45 additions and 61 deletions

View File

@@ -1,16 +1,30 @@
<script lang="ts"> <script lang="ts" generics="T extends Record<string, unknown>">
import { Field, Control, FieldErrors } from "formsnap";
import type { FormPath, SuperForm } from "sveltekit-superforms";
import Icon from "@iconify/svelte"; import Icon from "@iconify/svelte";
let { value = $bindable(), label, class: className = '', ...props } = $props(); let { form, label, name }: {
form: SuperForm<T>,
label: string,
name: FormPath<T>,
} = $props();
const formData = form.form;
let show = $state(false); let show = $state(false);
let inputType = $derived(show ? 'text' : 'password'); let type = $derived(show ? 'text' : 'password');
</script> </script>
<div>
<Field {form} {name}>
<Control>
{#snippet children({ props })}
<div class="flex w-full gap-1"> <div class="flex w-full gap-1">
<label class="label floating-label w-full"> <label class="label floating-label w-full">
<span>{label}</span> <span>{label}</span>
<input type={inputType} class={["input w-full", className]} placeholder={label} {...props} bind:value={value}/> <input {type} class="input w-full aria-[invalid]:input-error" placeholder={label}
bind:value={$formData[name]} {...props}
/>
</label> </label>
<button class="btn btn-circle" onclick={() => show = !show}> <button class="btn btn-circle" onclick={() => show = !show}>
{#if show} {#if show}
@@ -20,3 +34,14 @@
{/if} {/if}
</button> </button>
</div> </div>
{/snippet}
</Control>
<FieldErrors>
{#snippet children({ errors, errorProps })}
{#each errors as err, idx (idx)}
<p class="text-error" {...errorProps}>{err}</p>
{/each}
{/snippet}
</FieldErrors>
</Field>
</div>

View File

@@ -1,7 +1,6 @@
<script lang="ts"> <script lang="ts">
import { superForm } from 'sveltekit-superforms'; import { superForm } from 'sveltekit-superforms';
import { arktypeClient } from 'sveltekit-superforms/adapters'; import { arktypeClient } from 'sveltekit-superforms/adapters';
import { Field, Control, FieldErrors } from "formsnap";
import PwdFormInput from "$lib/PwdFormInput.svelte"; import PwdFormInput from "$lib/PwdFormInput.svelte";
import { schema } from './schema'; import { schema } from './schema';
import FormInput from "$lib/FormInput.svelte"; import FormInput from "$lib/FormInput.svelte";
@@ -11,7 +10,7 @@
validators: arktypeClient(schema), validators: arktypeClient(schema),
resetForm: false, resetForm: false,
}); });
const { form: formData, errors, constraints, message, enhance } = form; const { message, enhance } = form;
</script> </script>
<div> <div>
@@ -20,56 +19,16 @@
<form class="fieldset mt-4 bg-base-200 border border-base-300 p-4 rounded-box gap-4" method="POST" use:enhance> <form class="fieldset mt-4 bg-base-200 border border-base-300 p-4 rounded-box gap-4" method="POST" use:enhance>
<h1 class="card-title">Create User</h1> <h1 class="card-title">Create User</h1>
<div> <div>
<Field {form} name="username"> <FormInput {form} type="text" label="Username" name="username"/>
<Control>
{#snippet children({ props })}
<label class="label floating-label w-full">
<span>Username</span>
<input type="text" class="input w-full aria-[invalid]:input-error" placeholder="Username"
bind:value={$formData.username} {...props}
/>
</label>
{/snippet}
</Control>
<FieldErrors>
{#snippet children({ errors, errorProps })}
{#each errors as err, idx (idx)}
<p class="text-error" {...errorProps}>{err}</p>
{/each}
{/snippet}
</FieldErrors>
</Field>
</div> </div>
<div> <div>
<FormInput {form} type="email" label="Email" name="email"/> <FormInput {form} type="email" label="Email" name="email"/>
<!-- <label class="label floating-label w-full">-->
<!-- <span>Email</span>-->
<!-- <input type="email" class={["input w-full", $errors['email'] && 'input-error']} placeholder="Email"-->
<!-- name="email"-->
<!-- aria-invalid={$errors['email'] ? 'true' : undefined}-->
<!-- bind:value={$formData.email}-->
<!-- {...$constraints.email}-->
<!-- />-->
<!-- </label>-->
<!-- <p class="text-error">{$errors['email'] ?? ''}</p>-->
</div> </div>
<div> <div>
<PwdFormInput label="Password" autocomplete="new-password" name="password" <PwdFormInput {form} label="Password" name="password"/>
class={$errors['password'] && 'input-error'}
aria-invalid={$errors['password'] ? 'true' : undefined}
bind:value={$formData.password}
{...$constraints.password}
/>
<p class="text-error">{$errors['password'] ?? ''}</p>
</div> </div>
<div> <div>
<PwdFormInput label="Re-insert password" autocomplete="new-password" name="confirmPassword" <PwdFormInput {form} label="Re-insert password" name="confirmPassword"/>
class={$errors['confirmPassword'] && 'input-error'}
aria-invalid={$errors['confirmPassword'] ? 'true' : undefined}
bind:value={$formData.confirmPassword}
{...$constraints.confirmPassword}
/>
<p class="text-error">{$errors['confirmPassword'] ?? ''}</p>
</div> </div>
<label class="label"> <label class="label">
<span>RossiniEnergy Staff</span> <span>RossiniEnergy Staff</span>