wkkkis-hooks

use-confirm (use-confirm)

Manages user confirmation states for actions.

v0.1.0

Usage

import { use-confirm } from "@/hooks"
1"use client"; 2 3import React, { useState } from "react"; 4 5import { Button } from "@/components/ui/button"; 6import { 7 Card, 8 CardContent, 9 CardDescription, 10 CardFooter, 11 CardHeader, 12 CardTitle, 13} from "@/components/ui/card"; 14import { 15 Dialog, 16 DialogContent, 17 DialogDescription, 18 DialogFooter, 19 DialogHeader, 20 DialogTitle, 21 DialogTrigger, 22} from "@/components/ui/dialog"; 23 24import { ConfirmationStatus, useConfirm } from "@/components/hooks/use-confirm"; 25 26export function UseConfirmDemo() { 27 const [open, setOpen] = useState(false); 28 const { status, confirm, cancel, reset } = useConfirm(); 29 30 const getStatusMessage = (status: ConfirmationStatus) => { 31 switch (status) { 32 case "idle": 33 return "Waiting for action..."; 34 case "confirming": 35 return "Are you sure?"; 36 case "confirmed": 37 return "Action confirmed!"; 38 case "cancelled": 39 return "Action cancelled!"; 40 } 41 }; 42 43 const handleConfirm = () => { 44 confirm(); 45 setOpen(false); 46 }; 47 48 const handleCancel = () => { 49 cancel(); 50 setOpen(false); 51 }; 52 53 return ( 54 <Card className="relative max-w-sm w-full"> 55 <CardHeader> 56 <CardTitle>useConfirm</CardTitle> 57 <CardDescription> 58 This component uses the <code>useConfirm</code> hook to handle user 59 confirmation actions. 60 </CardDescription> 61 </CardHeader> 62 <CardContent> 63 <p> 64 Status: <strong>{getStatusMessage(status)}</strong> 65 </p> 66 </CardContent> 67 <CardFooter className="flex gap-2"> 68 <Dialog open={open} onOpenChange={setOpen}> 69 <DialogTrigger asChild> 70 <Button>Delete Item</Button> 71 </DialogTrigger> 72 <DialogContent> 73 <DialogHeader> 74 <DialogTitle>Delete Item</DialogTitle> 75 <DialogDescription> 76 Are you sure you want to delete this item? This action cannot be 77 undone. 78 </DialogDescription> 79 </DialogHeader> 80 <DialogFooter> 81 <Button variant="outline" onClick={handleCancel}> 82 Cancel 83 </Button> 84 <Button variant="destructive" onClick={handleConfirm}> 85 Delete 86 </Button> 87 </DialogFooter> 88 </DialogContent> 89 </Dialog> 90 {(status === "confirmed" || status === "cancelled") && ( 91 <Button onClick={reset}>Reset</Button> 92 )} 93 </CardFooter> 94 </Card> 95 ); 96} 97

Install

npx wkkkis-hooks add use-confirm

Returns — Properties

NameTypeDefaultDescription
Thehook returns an object with the current status and control functions
statusCurrent confirmation state
confirmSets status to 'confirmed'
cancelSets status to 'cancelled'
resetResets status to 'idle'

Status Management

  • idle : Initial state, waiting for user action
  • confirming : User is being asked to confirm the action
  • confirmed : User has confirmed the action
  • cancelled : User has cancelled the action

Returned Values

  • The hook returns an object with the current status and control functions
  • status : Current confirmation state
  • confirm : Sets status to 'confirmed'
  • cancel : Sets status to 'cancelled'
  • reset : Resets status to 'idle'

Best Practices & Caveats

  • Use this hook for actions that require user confirmation
  • Always provide clear UI feedback for each state
  • Consider using this with modal dialogs or confirmation prompts
  • The hook is client-side only

Files in this hook

SourceDestination
files/use-confirm.tssrc/hooks/use-confirm.ts