dress/resources/js/components/delete-user.tsx

120 lines
5.2 KiB
TypeScript

import { Form } from '@inertiajs/react';
import { useRef } from 'react';
import ProfileController from '@/actions/App/Http/Controllers/Settings/ProfileController';
import Heading from '@/components/heading';
import InputError from '@/components/input-error';
import PasswordInput from '@/components/password-input';
import { Button } from '@/components/ui/button';
import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogTitle,
DialogTrigger,
} from '@/components/ui/dialog';
import { Label } from '@/components/ui/label';
export default function DeleteUser() {
const passwordInput = useRef<HTMLInputElement>(null);
return (
<div className="space-y-6">
<Heading
variant="small"
title="Hapus akun"
description="Hapus akun Anda dan semua sumber daya di dalamnya"
/>
<div className="space-y-4 rounded-lg border border-red-100 bg-red-50 p-4 dark:border-red-200/10 dark:bg-red-700/10">
<div className="relative space-y-0.5 text-red-600 dark:text-red-100">
<p className="font-medium">Peringatan</p>
<p className="text-sm">
Harap berhati-hati, tindakan ini tidak dapat dibatalkan.
</p>
</div>
<Dialog>
<DialogTrigger asChild>
<Button
variant="destructive"
data-test="delete-user-button"
>
Hapus Akun
</Button>
</DialogTrigger>
<DialogContent>
<DialogTitle>
Apakah Anda yakin ingin menghapus akun Anda?
</DialogTitle>
<DialogDescription>
Setelah akun Anda dihapus, semua sumber daya dan datanya
akan dihapus secara permanen. Silakan masukkan kata sandi Anda
untuk mengonfirmasi bahwa Anda ingin menghapus akun Anda secara permanen.
</DialogDescription>
<Form
{...ProfileController.destroy.form()}
options={{
preserveScroll: true,
}}
onError={() => passwordInput.current?.focus()}
resetOnSuccess
className="space-y-6"
>
{({ resetAndClearErrors, processing, errors }) => (
<>
<div className="grid gap-2">
<Label
htmlFor="password"
className="sr-only"
>
Kata Sandi
</Label>
<PasswordInput
id="password"
name="password"
ref={passwordInput}
placeholder="Kata Sandi"
autoComplete="current-password"
/>
<InputError message={errors.password} />
</div>
<DialogFooter className="gap-2">
<DialogClose asChild>
<Button
variant="secondary"
onClick={() =>
resetAndClearErrors()
}
>
Batal
</Button>
</DialogClose>
<Button
variant="destructive"
disabled={processing}
asChild
>
<button
type="submit"
data-test="confirm-delete-user-button"
>
Hapus Akun
</button>
</Button>
</DialogFooter>
</>
)}
</Form>
</DialogContent>
</Dialog>
</div>
</div>
);
}