diff --git a/src/partials/main/MainInfractions.tsx b/src/partials/main/MainInfractions.tsx index 4f18b11..c2f3675 100644 --- a/src/partials/main/MainInfractions.tsx +++ b/src/partials/main/MainInfractions.tsx @@ -1,17 +1,103 @@ import Typography from "../../components/Typography/Typography"; -import { Grid } from "../../components/Grid/Grid"; +import { motion, AnimatePresence } from "framer-motion"; +import { + ExclamationTriangleIcon, + DocumentTextIcon, + CheckCircleIcon, +} from "@heroicons/react/24/outline"; + +const containerVariants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { staggerChildren: 0.08, delayChildren: 0.05 }, + }, + exit: { + opacity: 0, + transition: { staggerChildren: 0.05, staggerDirection: -1 }, + }, +}; + +const itemVariants = { + hidden: { opacity: 0, y: 12 }, + visible: { opacity: 1, y: 0 }, + exit: { opacity: 0, y: -8 }, +}; export const MainInfractions = ({ data, - handleUpdate, + handleUpdate: _handleUpdate, }: { data: any; handleUpdate: () => void; }) => { - console.log(data, handleUpdate); + const infractions = data?.infractions || []; + + if (infractions.length === 0) { + return ( + + + + تخلفی ثبت نشده است + + + ); + } + return ( - - این بخش در دست توسعه است - + + + {infractions.map( + ( + infraction: { _id: string; title: string; description?: string }, + index: number, + ) => ( + + + + + + + {index + 1}. {infraction.title} + + {infraction.description && ( + + + + {infraction.description} + + + )} + + + ), + )} + + ); }; diff --git a/src/partials/main/MainPlaceInfo.tsx b/src/partials/main/MainPlaceInfo.tsx index 7c64715..32e3f02 100644 --- a/src/partials/main/MainPlaceInfo.tsx +++ b/src/partials/main/MainPlaceInfo.tsx @@ -119,7 +119,7 @@ const MainPlaceInfo: React.FC = ({ const [personRegistryData, setPersonRegistryData] = useState(null); const [unitRegistryData, setUnitRegistryData] = useState( - [] + [], ); const [isLoadingRegistry, setIsLoadingRegistry] = useState(false); const { openDrawer } = useDrawerStore(); @@ -201,7 +201,7 @@ const MainPlaceInfo: React.FC = ({ const unitsCandidate = unitResult?.data ?? (Array.isArray(unitResult) ? unitResult : []); setUnitRegistryData( - Array.isArray(unitsCandidate) ? unitsCandidate : [] + Array.isArray(unitsCandidate) ? unitsCandidate : [], ); } catch (error: any) { console.error("Unit registry error:", error); @@ -320,7 +320,6 @@ const MainPlaceInfo: React.FC = ({ )} - {/* Submit Inspection Button */} = ({ { key: "عمده فروش", value: "عمده فروش" }, ]; + const usersList = Array.isArray(usersData) + ? usersData + : ((usersData as any)?.data ?? []); + const inspectorOptions = useMemo(() => { - if (!usersData?.data) return []; - return usersData.data - .filter( - (user: any) => - user.province === profile?.province && - !user?.permissions?.includes("admin") - ) + if (!usersList?.length) return []; + return usersList + .filter((user: any) => user.province === profile?.province) .map((user: any) => ({ key: `${user.fullname} / ${user.mobile}`, value: `${user.fullname} / ${user.mobile}`, })); - }, [usersData, profile]); + }, [usersList, profile]); const defaultInspectorKeys = useMemo(() => { if (!isEdit || !item?.inspectors) return []; return item.inspectors.map((insp: any) => { if (typeof insp === "string") return insp; - const user = usersData?.data?.find( - (u: any) => u.fullname === insp.fullname - ); + const user = usersList?.find((u: any) => u.fullname === insp.fullname); return user ? `${insp.fullname} / ${user.mobile}` : insp.fullname; }); - }, [item, isEdit, usersData]); + }, [item, isEdit, usersList]); const { control, @@ -150,17 +148,15 @@ const MainSubmitInspection: React.FC = ({ const watchedInfractions = watch("infractions"); useEffect(() => { - if (isEdit && item?.inspectors && usersData?.data) { + if (isEdit && item?.inspectors && usersList?.length) { const inspectorStrings = item.inspectors.map((insp: any) => { if (typeof insp === "string") return insp; - const user = usersData.data.find( - (u: any) => u.fullname === insp.fullname - ); + const user = usersList.find((u: any) => u.fullname === insp.fullname); return user ? `${insp.fullname} / ${user.mobile}` : insp.fullname; }); setValue("inspectors", inspectorStrings); } - }, [item, isEdit, usersData, setValue]); + }, [item, isEdit, usersList, setValue]); const submitInspectionMutation = useApiMutation({ api: "inspections", @@ -226,8 +222,8 @@ const MainSubmitInspection: React.FC = ({ (Array.isArray(field.value) ? field.value : field.value - ? [field.value] - : []) as (string | number)[] + ? [field.value] + : []) as (string | number)[] } onChange={(keys) => setValue("license_type", keys as any)} title="نوع پروانه کسب" @@ -307,8 +303,8 @@ const MainSubmitInspection: React.FC = ({ (Array.isArray(field.value) ? field.value : field.value - ? [field.value] - : []) as (string | number)[] + ? [field.value] + : []) as (string | number)[] } onChange={(keys) => setValue("ownership_type", keys as any)} title="نوع مالکیت" @@ -328,8 +324,8 @@ const MainSubmitInspection: React.FC = ({ (Array.isArray(field.value) ? field.value : field.value - ? [field.value] - : []) as (string | number)[] + ? [field.value] + : []) as (string | number)[] } onChange={(keys) => setValue("unit_type", keys as any)} title="نوع واحد"