-
- General
-
-
-
+
+
+
);
};
diff --git a/src/components/forms/selectors.tsx b/src/components/forms/selectors.tsx
index 232878b..f669f62 100644
--- a/src/components/forms/selectors.tsx
+++ b/src/components/forms/selectors.tsx
@@ -1,4 +1,5 @@
import { createContext, useContext, useState } from "react";
+import { useFormContext, type UseFormRegisterReturn } from "react-hook-form";
// generics
interface ToStringable {
@@ -22,11 +23,14 @@ function MultiSelectorMany
({
label,
defaultValues,
children,
+ details,
}: {
label: string;
defaultValues: T[];
children: undefined | JSX.Element | JSX.Element[];
+ details: UseFormRegisterReturn;
}) {
+ const { setValue } = useFormContext();
const [selected, setSelected] = useState(
defaultValues.map((value) => {
return value.toString();
@@ -35,14 +39,16 @@ function MultiSelectorMany({
const updateCallback = (value: string) => {
if (selected.includes(value)) {
- setSelected(
- selected.filter((selectedValue) => {
- return selectedValue !== value;
- })
- );
+ const filteredSelected = selected.filter((selectedValue) => {
+ return selectedValue !== value;
+ });
+
+ setValue(details.name, filteredSelected);
+ setSelected(filteredSelected);
return;
}
+ setValue(details.name, [value, ...selected]);
setSelected([value, ...selected]);
};
@@ -54,12 +60,7 @@ function MultiSelectorMany({
Select all that apply
-
+
{children}
@@ -73,16 +74,25 @@ function MultiSelector({
label,
defaultValue,
children,
+ details,
}: {
label: string;
defaultValue: T;
children: undefined | JSX.Element | JSX.Element[];
+ details: UseFormRegisterReturn;
}) {
const [selected, setSelected] = useState(defaultValue.toString());
+ const { setValue } = useFormContext();
return (
{
+ setSelected(value);
+ setValue(details.name, value);
+ },
+ }}
>
diff --git a/src/pages/resources/[id]/edit.tsx b/src/pages/resources/[id]/edit.tsx
index dd51c77..d1d09e7 100644
--- a/src/pages/resources/[id]/edit.tsx
+++ b/src/pages/resources/[id]/edit.tsx
@@ -47,7 +47,7 @@ const EditResourcePage = (
) => {
const { resource } = props;
const [serverError, setServerError] = useState(undefined);
- const { register, getValues } = useForm({
+ const formMethods = useForm({
defaultValues: resource as ResourceUpdateInput,
});
@@ -90,7 +90,7 @@ const EditResourcePage = (
}
label="Save"
onClick={() => {
- onSubmit(getValues());
+ onSubmit(formMethods.getValues());
}}
/>,
diff --git a/src/server/api/routers/auditoryResources.ts b/src/server/api/routers/auditoryResources.ts
index 120e8ae..293bd76 100644
--- a/src/server/api/routers/auditoryResources.ts
+++ b/src/server/api/routers/auditoryResources.ts
@@ -34,14 +34,14 @@ export const auditoryResourceRouter = createTRPCRouter({
.input(
z.object({
id: z.string(),
- icon: z.string().optional(),
- name: z.string().optional(),
- description: z.string().optional(),
+ icon: z.string().min(1).optional(),
+ name: z.string().min(1).optional(),
+ description: z.string().min(1).optional(),
manufacturer: z
.object({
- name: z.string(),
+ name: z.string().min(1),
required: z.boolean(),
- notice: z.string().optional().nullable(),
+ notice: z.string().min(1).optional().nullable(),
})
.optional(),
ages: z
@@ -52,7 +52,10 @@ export const auditoryResourceRouter = createTRPCRouter({
payment_options: z.array(z.nativeEnum(PaymentType)).optional(),
platform_links: z
.array(
- z.object({ platform: z.nativeEnum(Platform), link: z.string() })
+ z.object({
+ platform: z.nativeEnum(Platform),
+ link: z.string().min(1),
+ })
)
.optional(),
})