import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useState } from 'react'; import { useForm } from 'react-hook-form'; import { useNavigate } from 'react-router-dom'; import { Button } from '../components/ui/Button.js'; import { createObjective, listUsers } from '../lib/api.js'; import { createObjectiveSchema, type CreateObjectiveFormData } from '../schemas/objective.schema.js'; export function CreateObjective(): JSX.Element { const navigate = useNavigate(); const queryClient = useQueryClient(); const [fieldErrors, setFieldErrors] = useState>>({}); const { register, handleSubmit } = useForm({ defaultValues: { title: '', description: '', quarter: 'Q2/2026' }, }); const { data: users = [] } = useQuery({ queryKey: ['users'], queryFn: listUsers }); const mutation = useMutation({ mutationFn: createObjective, onSuccess: async (objective) => { await queryClient.invalidateQueries({ queryKey: ['objectives'] }); navigate(`/objectives/${objective.id}`); }, }); const onSubmit = handleSubmit((values) => { const parsed = createObjectiveSchema.safeParse(values); if (!parsed.success) { setFieldErrors(Object.fromEntries(parsed.error.issues.map((issue) => [issue.path[0], issue.message]))); return; } setFieldErrors({}); mutation.mutate(parsed.data); }); return (

Create Objective