import { useMutation, useQueryClient } from "@tanstack/react-query"; import { deleteStorage, updateStorage } from "../utils/api/storages"; import { useForm } from "@tanstack/react-form"; import { useStore } from "@tanstack/react-store"; import { Button, Input } from "@mui/joy"; import type { Storage } from "../misc/interfaces"; import { formatDate } from "../utils/uxFncs"; import { useTranslation } from "react-i18next"; interface StorageRowProps { storage: Storage; onError: (error: unknown) => void; } export const StorageRow = ({ storage, onError }: StorageRowProps) => { const { t } = useTranslation(); const queryClient = useQueryClient(); const mutation = useMutation({ mutationFn: (values: Pick) => updateStorage(storage.uuid, values), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["storages"] }); }, onError, }); const deleteMutation = useMutation({ mutationFn: (uuid: string) => deleteStorage(uuid), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["storages"] }); }, onError, }); const form = useForm({ defaultValues: { name: storage.name, description: storage.description ?? "", }, onSubmit: async ({ value }) => { await mutation.mutateAsync(value); }, }); const values = useStore(form.baseStore, (state) => state.values); const isDirty = values.name !== storage.name || (values.description ?? "") !== (storage.description ?? ""); return ( {(field) => ( field.handleChange(e.target.value)} onBlur={field.handleBlur} size="sm" variant="outlined" className="rounded-xl shadow-none" sx={{ bgcolor: "var(--joy-palette-background-level1)", color: "var(--joy-palette-text-secondary)", "--Input-focusedHighlight": "var(--joy-palette-neutral-300)", }} /> )} {(field) => ( field.handleChange(e.target.value)} onBlur={field.handleBlur} size="sm" variant="outlined" className="rounded-xl shadow-none" sx={{ bgcolor: "var(--joy-palette-background-level1)", color: "var(--joy-palette-text-secondary)", "--Input-focusedHighlight": "var(--joy-palette-neutral-300)", }} /> )} {formatDate(storage.created_at)} {formatDate(storage.updated_at)}
); };