Spaces:
Running
Running
'use client' | |
import * as React from 'react' | |
import { useRouter } from 'next/navigation' | |
import { toast } from 'react-hot-toast' | |
import { ServerActionResult } from '@/lib/types' | |
import { Button } from '@/components/ui/button' | |
import { | |
AlertDialog, | |
AlertDialogAction, | |
AlertDialogCancel, | |
AlertDialogContent, | |
AlertDialogDescription, | |
AlertDialogFooter, | |
AlertDialogHeader, | |
AlertDialogTitle, | |
AlertDialogTrigger | |
} from '@/components/ui/alert-dialog' | |
import { IconSpinner } from '@/components/ui/icons' | |
interface ClearHistoryProps { | |
isEnabled: boolean | |
clearChats: () => ServerActionResult<void> | |
} | |
export function ClearHistory({ | |
isEnabled = false, | |
clearChats | |
}: ClearHistoryProps) { | |
const [open, setOpen] = React.useState(false) | |
const [isPending, startTransition] = React.useTransition() | |
const router = useRouter() | |
return ( | |
<AlertDialog open={open} onOpenChange={setOpen}> | |
<AlertDialogTrigger asChild> | |
<Button variant="ghost" disabled={!isEnabled || isPending}> | |
{isPending && <IconSpinner className="mr-2" />} | |
Clear history | |
</Button> | |
</AlertDialogTrigger> | |
<AlertDialogContent> | |
<AlertDialogHeader> | |
<AlertDialogTitle>Are you absolutely sure?</AlertDialogTitle> | |
<AlertDialogDescription> | |
This will permanently delete your chat history and remove your data | |
from our servers. | |
</AlertDialogDescription> | |
</AlertDialogHeader> | |
<AlertDialogFooter> | |
<AlertDialogCancel disabled={isPending}>Cancel</AlertDialogCancel> | |
<AlertDialogAction | |
disabled={isPending} | |
onClick={event => { | |
event.preventDefault() | |
startTransition(() => { | |
clearChats().then(result => { | |
if (result && 'error' in result) { | |
toast.error(result.error) | |
return | |
} | |
setOpen(false) | |
router.push('/') | |
}) | |
}) | |
}} | |
> | |
{isPending && <IconSpinner className="mr-2 animate-spin" />} | |
Delete | |
</AlertDialogAction> | |
</AlertDialogFooter> | |
</AlertDialogContent> | |
</AlertDialog> | |
) | |
} | |