import { useEffect, useRef, useState } from 'react'; import { useAuth, playSound } from '@deplixo/sdk'; import { CapsuleList } from './components/CapsuleList.jsx'; import { CreateCapsule } from './components/CreateCapsule.jsx'; import { CapsuleViewer } from './components/CapsuleViewer.jsx'; // PROGRESS:sc_001:complete:Setting up your time capsule vault function App() { const { user, loading, logout } = useAuth(); const [view, setView] = useState('list'); const [selectedCapsule, setSelectedCapsule] = useState(null); const [unlockPlaybackKey, setUnlockPlaybackKey] = useState(0); const prevUnlockStateRef = useRef(null); function handleCreate() { setView('create'); setSelectedCapsule(null); } function handleBack() { setView('list'); setSelectedCapsule(null); } function handleViewCapsule(capsule) { setSelectedCapsule(capsule); setView('viewer'); } function handleCapsuleCreated() { setView('list'); } useEffect(() => { if (!selectedCapsule || view !== 'viewer') { prevUnlockStateRef.current = null; return; } const isUnlocked = Boolean( selectedCapsule.unlocked || selectedCapsule.isUnlocked || selectedCapsule.status === 'unlocked' || (selectedCapsule.unlockDate && new Date(selectedCapsule.unlockDate) <= new Date()) ); const wasUnlocked = prevUnlockStateRef.current; if (wasUnlocked === false && isUnlocked) { playSound('@ding'); setUnlockPlaybackKey((key) => key + 1); } prevUnlockStateRef.current = isUnlocked; }, [selectedCapsule, view]); if (loading) return
Letters to your future self