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, TrackWrite } 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 (dataDelta: TrackWrite) => { if (isNullOrUndefined(trackIdInt)) { return; } console.log(`onSave = ${JSON.stringify(dataDelta, null, 2)}`); store.update( TrackResource.patch({ restConfig: session.getRestConfig(), data: dataDelta, params: { id: trackIdInt, }, }) ); }; return ( {/* */} Edit Track {/* */} {admin && ( <> {dataTrack?.id} {dataTrack?.dataId} )} {!admin && ( <> )} {!admin && form.isFormModified && ( )} ); };