import * as React from "react"; import { useTranslation } from "react-i18next"; import { AbilitiesSelector } from "~/components/AbilitiesSelector"; import { GearSelect } from "~/components/GearSelect"; import type { GearType } from "~/db/tables"; import type { CustomFieldRenderProps } from "~/form/FormField"; import { FormFieldWrapper } from "~/form/fields/FormFieldWrapper"; import { SendouForm, useFormFieldContext } from "~/form/SendouForm"; import { rankedModesShort } from "~/modules/in-game-lists/modes"; import type { BuildAbilitiesTupleWithUnknown } from "~/modules/in-game-lists/types"; import { newBuildSchema } from "../user-page-schemas"; interface NewBuildFormProps { defaultValues?: Parameters[0]["defaultValues"]; gearIdToAbilities: Record; isEditing?: boolean; } export function NewBuildForm({ defaultValues, gearIdToAbilities, isEditing, }: NewBuildFormProps) { const { t } = useTranslation(["builds"]); return ( {({ FormField }) => ( <> {(props: CustomFieldRenderProps) => ( )} {(props: CustomFieldRenderProps) => ( )} {(props: CustomFieldRenderProps) => ( )} {(props: CustomFieldRenderProps) => ( )} )} ); } function GearFormField({ type, name, value, onChange, error, gearIdToAbilities, }: { type: GearType; name: string; value: unknown; onChange: (value: unknown) => void; error: string | undefined; gearIdToAbilities: Record; }) { const { t } = useTranslation("builds"); const { values, setValue } = useFormFieldContext(); const id = React.useId(); const handleChange = (gearId: number | null) => { onChange(gearId); if (!gearId) return; const abilitiesFromExistingGear = gearIdToAbilities[`${type}_${gearId}`]; if (!abilitiesFromExistingGear) return; const abilities = values.abilities as BuildAbilitiesTupleWithUnknown; const gearIndex = type === "HEAD" ? 0 : type === "CLOTHES" ? 1 : 2; const currentAbilities = abilities[gearIndex]; if (!currentAbilities.every((a) => a === "UNKNOWN")) return; const newAbilities = structuredClone(abilities); newAbilities[gearIndex] = abilitiesFromExistingGear; setValue("abilities", newAbilities); }; return ( ); } function AbilitiesFormField({ name, value, onChange, error, }: { name: string; value: unknown; onChange: (value: unknown) => void; error: string | undefined; }) { const { t } = useTranslation("builds"); return ( ); }