import { Box, TextField, Button, Typography, Autocomplete, } from "@mui/material"; import { Edit } from "@refinedev/mui"; import { useForm } from "@refinedev/react-hook-form"; import { useEffect } from "react"; import { useShow } from "@refinedev/core"; import { Controller } from "react-hook-form"; import { TOKEN_KEY } from "@providers"; import { MEDIA_TYPES } from "@lib"; import { ALLOWED_IMAGE_TYPES, ALLOWED_VIDEO_TYPES, ALLOWED_ICON_TYPES, ALLOWED_WATERMARK_TYPES, ALLOWED_PANORAMA_TYPES, ALLOWED_3D_MODEL_TYPES, useMediaFileUpload, } from "../../components/media/MediaFormUtils"; import { languageStore, META_LANGUAGE } from "@stores"; import { observer } from "mobx-react-lite"; import { LanguageSelector, MediaData, MediaView } from "@ui"; type MediaFormValues = { media_name: string; media_type: number; file?: File; }; export const MediaEdit = observer(() => { const { language } = languageStore; const { saveButtonProps, refineCore: { onFinish }, register, formState: { errors }, setValue, handleSubmit, watch, setError, clearErrors, control, } = useForm({ defaultValues: { media_name: "", media_type: "", file: undefined, }, refineCoreProps: META_LANGUAGE(language) }); const { query } = useShow(); const { data } = query; const record = data?.data; const selectedMediaType = watch("media_type"); const { selectedFile, previewUrl, setPreviewUrl, handleFileChange, handleMediaTypeChange, } = useMediaFileUpload({ selectedMediaType, setError, clearErrors, setValue, }); useEffect(() => { if (record?.id) { setPreviewUrl( `${import.meta.env.VITE_KRBL_MEDIA}${ record.id }/download?token=${localStorage.getItem(TOKEN_KEY)}` ); setValue("media_name", record?.media_name || ""); setValue("media_type", record?.media_type); } }, [record, setValue, setPreviewUrl]); return ( { const formData = { media_name: data.media_name, filename: selectedFile?.name || record?.filename, type: Number(data.media_type), }; onFinish(formData); }), }} > ( option.value === field.value) || null } onChange={(_, value) => { field.onChange(value?.value || null); handleMediaTypeChange(value?.value || null); }} getOptionLabel={(item) => { return item ? item.label : ""; }} isOptionEqualToValue={(option, value) => { return option.value === value?.value; }} renderInput={(params) => ( )} /> )} /> {selectedFile && ( {selectedFile.name} )} {errors.file && ( {(errors as any)?.file?.message} )} {/* {previewUrl && selectedMediaType === 1 && ( Preview )} */} ); });