NeonClary's picture
Deploy tutorial feature and recent fixes
d8808e7 verified
Raw
History Blame Contribute Delete
2.19 kB
import { useState } from 'react'
import { apiFetch } from '../api'
import { useAuth } from '../context/AuthContext'
import { WORKSHOP_SAMPLES_REMOVED_KEY } from '../lib/creations'
const LS_KEYS = [
'persona_draft_v1',
'advisor_draft_v1',
'persona_chat_v1',
'advisor_chat_v1',
'creations_v1',
WORKSHOP_SAMPLES_REMOVED_KEY,
]
type Props = { onClose: () => void }
export function ClearDataModal({ onClose }: Props) {
const { user } = useAuth()
const [clearProfile, setClearProfile] = useState(true)
const [clearLocal, setClearLocal] = useState(true)
const run = async () => {
if (clearLocal) {
for (const k of LS_KEYS) localStorage.removeItem(k)
}
if (clearProfile && user) {
const r = await apiFetch('/api/users/me/clear-data', { method: 'POST' })
if (!r.ok) {
alert('Could not clear server data. You may need to sign in again.')
}
}
onClose()
window.location.reload()
}
return (
<div className="modal-overlay" role="dialog" aria-modal>
<div className="modal-box">
<h2>Clear User Data</h2>
<label style={{ display: 'flex', gap: '0.5rem', alignItems: 'center', marginBottom: '0.75rem' }}>
<input type="checkbox" checked={clearLocal} onChange={(e) => setClearLocal(e.target.checked)} />
Clear local drafts (browser storage)
</label>
<label style={{ display: 'flex', gap: '0.5rem', alignItems: 'center', marginBottom: '1rem' }}>
<input
type="checkbox"
checked={clearProfile && !!user}
disabled={!user}
onChange={(e) => setClearProfile(e.target.checked)}
/>
Clear saved profile on server {user ? '' : '(sign in required)'}
</label>
<div style={{ display: 'flex', gap: '0.5rem', justifyContent: 'flex-end' }}>
<button type="button" className="btn btn-secondary" onClick={onClose}>
Cancel
</button>
<button type="button" className="btn btn-primary" onClick={run}>
Clear
</button>
</div>
</div>
</div>
)
}