import { AppLayout, BreadcrumbGroup, Button, Container, Flashbar, FlashbarProps, Form, FormField, Header, Link, SpaceBetween } from "@cloudscape-design/components"; import { useLoaderData, useSearchParams } from "react-router-dom"; import { DoorResponse } from "../types/DoorResponse"; import { useForm } from "react-hook-form"; import { InputTokenGroup } from "../components/InputTokenGroup"; import { ReactNode, useState } from "react"; export type DoorEditForm = DoorResponse & { pin: string, fallbackNumber: string, discordUser: string }; export const EditPage = () => { const doorResponse = useLoaderData() as DoorResponse; const door = doorResponse.id; const { register, setValue, setError, getValues, watch, formState, clearErrors } = useForm({ defaultValues: doorResponse, mode: "all", }); const [ alerts, setAlerts ] = useState([]); const dismissAlert = (id: string) => { setAlerts(alerts => alerts.filter(alert => alert.id !== id)); } const createAlert = (type: FlashbarProps.Type, content: ReactNode): FlashbarProps.MessageDefinition => { const id = `${Math.random()}`; return { id, type, content, dismissible: type !== 'in-progress', onDismiss: () => dismissAlert(id), } } const addAlert = (type: FlashbarProps.Type, content: ReactNode): string => { const newAlert = createAlert(type, content); setAlerts(alerts => [ newAlert, ...alerts, ]); return newAlert.id as string; } const fallbackNumbers = watch("fallbackNumbers"); const discordUsers = watch("discordUsers"); const fallbackNumbersError = formState.errors.fallbackNumbers?.message; const discordUsersError = formState.errors.discordUsers?.message; return ( } notifications={ } content={
} header={
Edit Door
} > Door - {door} } > ({ label: n }))}} onAdd={() => { clearErrors("fallbackNumbers"); setValue("fallbackNumbers", [...fallbackNumbers, getValues().fallbackNumber]) setValue("fallbackNumber", "") }} onDismiss={(i) => { clearErrors("fallbackNumbers"); if (fallbackNumbers.length === 1) { setError("fallbackNumbers", { message: "Can't remove last entry", type: "value" }) return; } fallbackNumbers.splice(i, 1); setValue("fallbackNumbers", [...fallbackNumbers]); }} /> Discord users to receive notifications } > ({ label: n }))}} onAdd={() => { clearErrors("discordUsers"); setValue("discordUsers", [...discordUsers, getValues().discordUser]) setValue("discordUser", "") }} onDismiss={(i) => { clearErrors("discordUsers"); if (discordUsers.length === 1) { setError("discordUsers", { message: "Can't remove last entry" }) return; } discordUsers.splice(i, 1); setValue("discordUsers", [...discordUsers]); }} />