import { useRef } from 'react'; import { Button, Flex, Tabs, Text, useDisclosure } from '@chakra-ui/react'; import { MdAdminPanelSettings, MdDeleteForever, MdEdit, MdWarning, } from 'react-icons/md'; import { useNavigate, useParams } from 'react-router-dom'; import { SeriesResource, SeriesUpdate, ZodSeriesUpdate } from '@/back-api'; import { FormCovers } from '@/components/form/FormCovers'; import { FormInput } from '@/components/form/FormInput'; import { FormTextarea } from '@/components/form/FormTextarea'; import { ConfirmPopUp } from '@/components/popup/ConfirmPopUp'; import { DialogBody, DialogContent, DialogFooter, DialogHeader, DialogRoot, } from '@/components/ui/dialog'; import { useSeasonCountVideo } from '@/service'; import { useSeriesService, useSpecificSeries } from '@/service/Series'; import { useServiceContext } from '@/service/ServiceContext'; import { isNullOrUndefined } from '@/utils/validator'; import { FormGroupShow } from '../form/FormGroup'; import { Formidable, useFormidable } from '../formidable'; export type SeriesEditPopUpProps = {}; export const SeriesEditPopUp = ({}: SeriesEditPopUpProps) => { const { seriesId } = useParams(); const seriesIdInt = isNullOrUndefined(seriesId) ? undefined : parseInt(seriesId, 10); const { session } = useServiceContext(); const { seasonCountVideo } = useSeasonCountVideo(seriesIdInt); const { store } = useSeriesService(); const { dataSeries } = useSpecificSeries(seriesIdInt); const navigate = useNavigate(); const disclosure = useDisclosure(); const onClose = () => { navigate('../../', { relative: 'path' }); }; const onRemove = () => { if (isNullOrUndefined(seriesIdInt)) { return; } store.remove( seriesIdInt, SeriesResource.remove({ restConfig: session.getRestConfig(), params: { id: seriesIdInt, }, }) ); onClose(); }; const initialRef = useRef(null); const finalRef = useRef(null); const form = useFormidable({ initialValues: dataSeries, deltaConfig: { omit: ['covers'] }, }); const onSave = async (data: SeriesUpdate) => { if (isNullOrUndefined(seriesIdInt)) { return; } console.log(`onSave = ${JSON.stringify(data, null, 2)}`); store.update( SeriesResource.patch({ restConfig: session.getRestConfig(), data: ZodSeriesUpdate.parse(data), params: { id: seriesIdInt, }, }) ); }; const onUriSelected = (uri: string) => { if (isNullOrUndefined(seriesIdInt)) { return; } console.error('Not implemented'); // store.update( // SeriesResource.uploadCover({ // restConfig: session.getRestConfig(), // data: { // uri, // }, // params: { // id: SeriesIdInt, // }, // }) // ); }; const onFilesSelected = (files: File[]) => { files.forEach((element) => { console.log(`Select file: '${element.name}'`); }); if (isNullOrUndefined(seriesIdInt)) { return; } store.update( SeriesResource.uploadCover({ restConfig: session.getRestConfig(), data: { file: files[0], }, params: { id: seriesIdInt, }, }) ); }; const onRemoveCover = (index: number) => { if (isNullOrUndefined(dataSeries?.covers)) { return; } if (isNullOrUndefined(seriesIdInt)) { return; } store.update( SeriesResource.removeCover({ restConfig: session.getRestConfig(), params: { id: seriesIdInt, coverId: dataSeries.covers[index], }, }) ); }; return ( {/* */} Edit Series {/* */} Edit Admin {/* ---------------------- Other Tabs --------------------------- */} {/* ---------------------- Other Tabs --------------------------- */} {dataSeries?.id} {seasonCountVideo !== 0 && ( Can not remove Series {seasonCountVideo} Media(s) depend on it. )} {form.isFormModified && ( )} ); };