import { Carousel } from "@mantine/carousel"; import classes from "./img-log-item.module.css"; import { randomId, useDisclosure } from "@mantine/hooks"; import SecureImage from "../secure-img"; import { ActionIcon, Button, Group, Loader, Modal, Stack, Tooltip, Text, } from "@mantine/core"; import { IconPencil } from "@tabler/icons-react"; import ListInput from "@/ui/input/list-input"; import ImageUpload from "@/ui/input/image-upload"; import { useState } from "react"; import { useApi } from "@/util/api"; import { useMutation, useQueryClient } from "@tanstack/react-query"; export default function ImageLogItem({ imageIds, id, mah = "", }: { imageIds: string[]; id: string; mah?: string; }) { const [editOpened, { open: openEdit, close: closeEdit }] = useDisclosure(false); const [existingImages, setExistingImages] = useState(imageIds); const [newImages, setNewImages] = useState([]); const client = useApi(); const queryClient = useQueryClient(); const updateValue = useMutation({ mutationFn: async () => { const missing = imageIds.filter( (item: string) => existingImages?.indexOf(item) < 0 ); for (const img of missing) { await client.delete(`/img/${img}`); } await client .patch(`/flights/${id}`, { images: existingImages }) .then((res) => res.data); // Upload images if (newImages.length > 0) { const imageForm = new FormData(); for (const img of newImages ?? []) { imageForm.append("images", img); } console.log(imageForm); const img_id = await client.post( `/flights/${id}/add_images`, imageForm, { headers: { "Content-Type": "multipart/form-data" } } ); if (!img_id) { await queryClient.invalidateQueries({ queryKey: ["flights-list"] }); throw new Error("Image upload failed"); } } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: [id] }); queryClient.invalidateQueries({ queryKey: ["flights-list"] }); closeEdit(); }, }); return ( <> {updateValue.isPending ? : null} {updateValue.isError ? ( {updateValue.error?.message} ) : null} {imageIds.map((img) => ( ))} ); }