import { tour_plan_api } from "@/features/tour-plan/lib/api"; import type { PlanTourCreate, PlanTourListDataRes, PlanTourUpdate, } from "@/features/tour-plan/lib/data"; import { tourPlanForm } from "@/features/tour-plan/lib/form"; import { user_api } from "@/features/users/lib/api"; import formatDate from "@/shared/lib/formatDate"; import { cn } from "@/shared/lib/utils"; import { Button } from "@/shared/ui/button"; import { Calendar } from "@/shared/ui/calendar"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@/shared/ui/command"; import { Form, FormControl, FormField, FormItem, FormMessage, } from "@/shared/ui/form"; import { Input } from "@/shared/ui/input"; import { Label } from "@/shared/ui/label"; import { Popover, PopoverContent, PopoverTrigger } from "@/shared/ui/popover"; import { zodResolver } from "@hookform/resolvers/zod"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { AxiosError } from "axios"; import { Check, ChevronDownIcon, ChevronsUpDown, Loader2 } from "lucide-react"; import { useState, type Dispatch, type SetStateAction } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import type z from "zod"; interface Props { initialValues: PlanTourListDataRes | null; setDialogOpen: Dispatch>; } const AddedTourPlan = ({ initialValues, setDialogOpen }: Props) => { const queryClient = useQueryClient(); const form = useForm>({ resolver: zodResolver(tourPlanForm), defaultValues: { date: initialValues?.date ? new Date(initialValues?.date) : undefined, district: initialValues?.place_name || "", user: initialValues?.user.id.toString() || "", }, }); const { mutate, isPending } = useMutation({ mutationFn: (body: PlanTourCreate) => tour_plan_api.create(body), onSuccess: () => { queryClient.refetchQueries({ queryKey: ["tour_plan_list"] }); setDialogOpen(false); }, onError: (err: AxiosError) => { const errMessage = err.response?.data as { message: string }; const messageText = errMessage.message; toast.error(messageText || "Xatolik yuz berdi", { richColors: true, position: "top-center", }); }, }); const { mutate: edit, isPending: editPending } = useMutation({ mutationFn: ({ body, id }: { id: number; body: PlanTourUpdate }) => tour_plan_api.update({ body, id }), onSuccess: () => { queryClient.refetchQueries({ queryKey: ["tour_plan_list"] }); setDialogOpen(false); }, onError: (err: AxiosError) => { const errMessage = err.response?.data as { message: string }; const messageText = errMessage.message; toast.error(messageText || "Xatolik yuz berdi", { richColors: true, position: "top-center", }); }, }); const [open, setOpen] = useState(false); const [searchUser, setSearchUser] = useState(""); const [openUser, setOpenUser] = useState(false); const { data: user, isLoading: isUserLoading } = useQuery({ queryKey: ["user_list", searchUser], queryFn: () => { const params: { limit?: number; offset?: number; search?: string; is_active?: boolean | string; region_id?: number; } = { limit: 8, search: searchUser, }; return user_api.list(params); }, select(data) { return data.data.data; }, }); function onSubmit(values: z.infer) { if (!initialValues) { mutate({ date: formatDate.format(values.date, "YYYY-MM-DD"), place_name: values.district, user_id: Number(values.user), }); } else if (initialValues) { edit({ body: { user: Number(values.user), date: formatDate.format(values.date, "YYYY-MM-DD"), place_name: values.district, }, id: initialValues.id, }); } } return (
{ const selectedUser = user?.results.find( (u) => String(u.id) === field.value, ); return ( {isUserLoading ? (
) : user && user.results.length > 0 ? ( {user.results.map((u) => ( { field.onChange(String(u.id)); setOpenUser(false); }} > {u.first_name} {u.last_name} {u.region?.name} ))} ) : ( Foydalanuvchi topilmadi )}
); }} /> ( )} /> ( { field.onChange(val); setOpen(false); }} /> )} /> {/*
*/} ); }; export default AddedTourPlan;