import { useRef, useState } from 'react'; import { Button, Text, useDisclosure } from '@chakra-ui/react'; import { MdAdminPanelSettings, MdDeleteForever, MdEdit } from 'react-icons/md'; import { useNavigate, useParams } from 'react-router-dom'; import { TrackResource, TrackUpdate, ZodTrackUpdate } from '@/back-api'; import { FormGroupShow } from '@/components/form/FormGroup'; import { FormInput } from '@/components/form/FormInput'; import { FormNumber } from '@/components/form/FormNumber'; import { FormSelect } from '@/components/form/FormSelect'; import { FormSelectMultiple } from '@/components/form/FormSelectMultiple'; import { FormTextarea } from '@/components/form/FormTextarea'; import { ConfirmPopUp } from '@/components/popup/ConfirmPopUp'; import { DialogBody, DialogContent, DialogFooter, DialogHeader, DialogRoot, } from '@/components/ui/dialog'; import { useOrderedAlbums } from '@/service/Album'; import { useOrderedArtists } from '@/service/Artist'; import { useOrderedGenders } from '@/service/Gender'; import { useServiceContext } from '@/service/ServiceContext'; import { useSpecificTrack, useTrackService } from '@/service/Track'; import { isNullOrUndefined } from '@/utils/validator'; import { Formidable, useFormidable } from '../formidable'; export type TrackEditPopUpProps = {}; export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { const { trackId } = useParams(); const trackIdInt = isNullOrUndefined(trackId) ? undefined : parseInt(trackId, 10); const { session } = useServiceContext(); const { dataGenders } = useOrderedGenders(undefined); const { dataArtist } = useOrderedArtists(undefined); const { dataAlbums } = useOrderedAlbums(undefined); const { store } = useTrackService(); const { dataTrack } = useSpecificTrack(trackIdInt); const [admin, setAdmin] = useState(false); const navigate = useNavigate(); const disclosure = useDisclosure(); const onClose = () => { navigate('../../', { relative: 'path' }); }; const onRemove = () => { if (isNullOrUndefined(trackIdInt)) { return; } store.remove( trackIdInt, TrackResource.remove({ restConfig: session.getRestConfig(), params: { id: trackIdInt, }, }) ); onClose(); }; const initialRef = useRef(null); const finalRef = useRef(null); const form = useFormidable>({ initialValues: dataTrack, deltaConfig: { omit: ['covers'] }, }); const onSave = async (data: TrackUpdate) => { if (isNullOrUndefined(trackIdInt)) { return; } console.log(`onSave = ${JSON.stringify(data, null, 2)}`); const { track, ...rest } = data; let trackNumber: undefined | number = undefined; if (track !== undefined && track !== null) { trackNumber = parseInt(`${track}`, 10); } store.update( TrackResource.put({ restConfig: session.getRestConfig(), data: ZodTrackUpdate.parse({ track: trackNumber, ...rest }), params: { id: trackIdInt, }, }) ); }; return ( {/* */} Edit Track {/* */} {admin && ( <> {dataTrack?.id} {dataTrack?.dataId} )} {!admin && ( <> )} {!admin && form.isFormModified && ( )} ); };