| import { useRef, useState, useCallback } from 'react'; | |
| import { useForm } from 'react-hook-form'; | |
| import useAuthSearchTool from '~/hooks/Plugins/useAuthSearchTool'; | |
| import type { SearchApiKeyFormData } from '~/hooks/Plugins/useAuthSearchTool'; | |
| export default function useSearchApiKeyForm({ | |
| onSubmit, | |
| onRevoke, | |
| }: { | |
| onSubmit?: () => void; | |
| onRevoke?: () => void; | |
| }) { | |
| const methods = useForm<SearchApiKeyFormData>(); | |
| const menuTriggerRef = useRef<HTMLButtonElement>(null); | |
| const badgeTriggerRef = useRef<HTMLInputElement>(null); | |
| const [isDialogOpen, setIsDialogOpen] = useState(false); | |
| const { installTool, removeTool } = useAuthSearchTool({ isEntityTool: true }); | |
| const { reset } = methods; | |
| const onSubmitHandler = useCallback( | |
| (data: SearchApiKeyFormData) => { | |
| installTool(data); | |
| setIsDialogOpen(false); | |
| onSubmit?.(); | |
| }, | |
| [onSubmit, installTool], | |
| ); | |
| const handleRevokeApiKey = useCallback(() => { | |
| reset(); | |
| removeTool(); | |
| setIsDialogOpen(false); | |
| onRevoke?.(); | |
| }, [reset, onRevoke, removeTool]); | |
| return { | |
| methods, | |
| isDialogOpen, | |
| setIsDialogOpen, | |
| handleRevokeApiKey, | |
| onSubmit: onSubmitHandler, | |
| badgeTriggerRef, | |
| menuTriggerRef, | |
| }; | |
| } | |