'use client' import colors from '@/con/colors'; import { Box, Button, Card, Center, Group, Image, Modal, Paper, Skeleton, Stack, Text, Title } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { IconArrowBack, IconEdit, IconTrash } from '@tabler/icons-react'; import { useParams, useRouter } from 'next/navigation'; import { useState } from 'react'; import { useProxy } from 'valtio/utils'; import stateDashboardMusik from '../../_state/desa/musik'; export default function DetailMusik() { const musikState = useProxy(stateDashboardMusik); const router = useRouter(); const params = useParams(); const id = params.id as string; const [showDeleteModal, setShowDeleteModal] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const { data, loading, load } = musikState.musik.findUnique; useShallowEffect(() => { if (id) { load(id); } }, [id]); if (loading || !data) { return ( ); } if (!data) { return (
Musik tidak ditemukan
); } const handleDelete = async () => { try { setIsDeleting(true); await musikState.musik.delete.byId(id); setShowDeleteModal(false); router.push('/admin/musik'); } catch (error) { console.error('Error deleting musik:', error); } finally { setIsDeleting(false); } }; return ( {/* Header dengan tombol kembali */} Detail Musik {/* Cover Image */} {data.coverImage && ( {data.judul} )} {/* Info Section */} Judul {data.judul} Artis {data.artis} {data.deskripsi && ( Deskripsi )} Durasi {data.durasi} {data.genre && ( Genre {data.genre} )} {data.tahunRilis && ( Tahun Rilis {data.tahunRilis} )} {/* Audio File */} {data.audioFile && ( File Audio {data.audioFile.realName} )} {/* Action Buttons */} {/* Delete Confirmation Modal */} setShowDeleteModal(false)} title="Konfirmasi Hapus" centered > Apakah Anda yakin ingin menghapus musik "{data.judul}"? Tindakan ini tidak dapat dibatalkan. ); }