69 lines
1.8 KiB
Svelte
69 lines
1.8 KiB
Svelte
<script lang="ts">
|
|
let { email = $bindable() } = $props();
|
|
|
|
let showForm = $derived(!email.subject || !email.body);
|
|
|
|
function handleSubmit(e: Event) {
|
|
e.preventDefault();
|
|
const form = e.target as HTMLFormElement;
|
|
const formData = new FormData(form);
|
|
email = {
|
|
subject: formData.get('subject') as string,
|
|
body: formData.get('body') as string
|
|
};
|
|
showForm = false;
|
|
}
|
|
|
|
function showEditForm() {
|
|
showForm = true;
|
|
}
|
|
</script>
|
|
|
|
{#if showForm}
|
|
<form onsubmit={handleSubmit} class="flex flex-col space-y-4 bg-white p-8 rounded border border-gray-300 w-full shadow-none">
|
|
<h2 class="text-2xl font-semibold text-center mb-4">Craft Email</h2>
|
|
<label class="flex flex-col text-gray-700">
|
|
Subject
|
|
<input
|
|
type="text"
|
|
name="subject"
|
|
value={email.subject ?? ''}
|
|
class="mt-1 px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-200"
|
|
required
|
|
/>
|
|
</label>
|
|
<label class="flex flex-col text-gray-700">
|
|
Body
|
|
<textarea
|
|
name="body"
|
|
value={email.body ?? ''}
|
|
class="mt-1 px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-200 resize-none"
|
|
rows="6"
|
|
required
|
|
></textarea>
|
|
</label>
|
|
<button
|
|
type="submit"
|
|
class="mt-4 w-full rounded bg-blue-600 py-2 text-white transition hover:bg-blue-700"
|
|
>
|
|
Save
|
|
</button>
|
|
</form>
|
|
{:else}
|
|
<button
|
|
class="mb-4 w-full rounded bg-blue-600 py-2 text-white transition hover:bg-blue-700"
|
|
onclick={showEditForm}
|
|
aria-label="Edit email"
|
|
>
|
|
Edit email
|
|
</button>
|
|
<div class="rounded border border-gray-300 bg-white p-4">
|
|
<h2 class="mb-2 text-xl font-bold">Email Preview</h2>
|
|
<div class="mb-2">
|
|
<span class="block font-semibold">{email.subject}</span>
|
|
</div>
|
|
<div class="whitespace-pre-line text-gray-800">
|
|
{email.body}
|
|
</div>
|
|
</div>
|
|
{/if} |