You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

64 lines
2.5 KiB

import { useState } from 'react';
import { WordGroupManager } from '../components/WordGroupManager/WordGroupManager';
import { Link } from 'react-router-dom';
import { speechSoundsApi } from '../services/apiClient';
export function SpeechSoundsAdminPage() {
const [clearingCache, setClearingCache] = useState(false);
const [cacheMessage, setCacheMessage] = useState<string | null>(null);
const handleClearCache = async () => {
if (!confirm('Are you sure you want to clear all cached pronunciations? Words will regenerate with new settings on next play.')) {
return;
}
try {
setClearingCache(true);
setCacheMessage(null);
await speechSoundsApi.clearPronunciationsCache();
setCacheMessage('Pronunciation cache cleared successfully!');
setTimeout(() => setCacheMessage(null), 3000);
} catch (err: any) {
setCacheMessage(err.error?.message || 'Failed to clear cache');
setTimeout(() => setCacheMessage(null), 5000);
} finally {
setClearingCache(false);
}
};
return (
<div className="min-h-[calc(100vh-60px)] bg-background">
<div className="bg-card border-b border-border py-8 px-6 text-center">
<Link
to="/admin"
className="inline-block mb-4 px-4 py-2 bg-transparent border border-border rounded-md text-foreground text-sm cursor-pointer transition-colors no-underline hover:bg-muted"
>
Back to Admin
</Link>
<h1 className="m-0 mb-2 text-[28px] font-medium text-foreground">Speech Sounds - Word Groups</h1>
<p className="m-0 text-sm text-muted-foreground">Manage word groups for speech sound practice</p>
</div>
<div className="max-w-[1200px] mx-auto p-6">
<div className="mb-6 flex justify-end">
<button
onClick={handleClearCache}
disabled={clearingCache}
className="px-4 py-2 bg-[#ef4444] text-white rounded-full font-semibold text-sm hover:bg-[#dc2626] transition-all active:scale-95 shadow-md disabled:opacity-50 disabled:cursor-not-allowed"
>
{clearingCache ? 'Clearing...' : 'Clear Pronunciation Cache'}
</button>
</div>
{cacheMessage && (
<div className={`mb-4 p-4 rounded-lg border ${
cacheMessage.includes('successfully')
? 'bg-green-50 border-green-200 text-green-800'
: 'bg-destructive/10 border-destructive/20 text-destructive'
}`}>
{cacheMessage}
</div>
)}
<WordGroupManager />
</div>
</div>
);
}