| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import {
- useCallback,
- useRef,
- useState,
- } from 'react'
- import { useTranslation } from 'react-i18next'
- import { useToastContext } from '@/app/components/base/toast'
- import type { PluginPayload } from '@/app/components/plugins/plugin-auth/types'
- import {
- useDeletePluginCredentialHook,
- useSetPluginDefaultCredentialHook,
- useUpdatePluginCredentialHook,
- } from '../hooks/use-credential'
-
- export const usePluginAuthAction = (
- pluginPayload: PluginPayload,
- onUpdate?: () => void,
- ) => {
- const { t } = useTranslation()
- const { notify } = useToastContext()
- const pendingOperationCredentialId = useRef<string | null>(null)
- const [deleteCredentialId, setDeleteCredentialId] = useState<string | null>(null)
- const { mutateAsync: deletePluginCredential } = useDeletePluginCredentialHook(pluginPayload)
- const openConfirm = useCallback((credentialId?: string) => {
- if (credentialId)
- pendingOperationCredentialId.current = credentialId
-
- setDeleteCredentialId(pendingOperationCredentialId.current)
- }, [])
- const closeConfirm = useCallback(() => {
- setDeleteCredentialId(null)
- pendingOperationCredentialId.current = null
- }, [])
- const [doingAction, setDoingAction] = useState(false)
- const doingActionRef = useRef(doingAction)
- const handleSetDoingAction = useCallback((doing: boolean) => {
- doingActionRef.current = doing
- setDoingAction(doing)
- }, [])
- const [editValues, setEditValues] = useState<Record<string, any> | null>(null)
- const handleConfirm = useCallback(async () => {
- if (doingActionRef.current)
- return
- if (!pendingOperationCredentialId.current) {
- setDeleteCredentialId(null)
- return
- }
- try {
- handleSetDoingAction(true)
- await deletePluginCredential({ credential_id: pendingOperationCredentialId.current })
- notify({
- type: 'success',
- message: t('common.api.actionSuccess'),
- })
- onUpdate?.()
- setDeleteCredentialId(null)
- pendingOperationCredentialId.current = null
- setEditValues(null)
- }
- finally {
- handleSetDoingAction(false)
- }
- }, [deletePluginCredential, onUpdate, notify, t, handleSetDoingAction])
- const handleEdit = useCallback((id: string, values: Record<string, any>) => {
- pendingOperationCredentialId.current = id
- setEditValues(values)
- }, [])
- const handleRemove = useCallback(() => {
- setDeleteCredentialId(pendingOperationCredentialId.current)
- }, [])
- const { mutateAsync: setPluginDefaultCredential } = useSetPluginDefaultCredentialHook(pluginPayload)
- const handleSetDefault = useCallback(async (id: string) => {
- if (doingActionRef.current)
- return
- try {
- handleSetDoingAction(true)
- await setPluginDefaultCredential(id)
- notify({
- type: 'success',
- message: t('common.api.actionSuccess'),
- })
- onUpdate?.()
- }
- finally {
- handleSetDoingAction(false)
- }
- }, [setPluginDefaultCredential, onUpdate, notify, t, handleSetDoingAction])
- const { mutateAsync: updatePluginCredential } = useUpdatePluginCredentialHook(pluginPayload)
- const handleRename = useCallback(async (payload: {
- credential_id: string
- name: string
- }) => {
- if (doingActionRef.current)
- return
- try {
- handleSetDoingAction(true)
- await updatePluginCredential(payload)
- notify({
- type: 'success',
- message: t('common.api.actionSuccess'),
- })
- onUpdate?.()
- }
- finally {
- handleSetDoingAction(false)
- }
- }, [updatePluginCredential, notify, t, handleSetDoingAction, onUpdate])
-
- return {
- doingAction,
- handleSetDoingAction,
- openConfirm,
- closeConfirm,
- deleteCredentialId,
- setDeleteCredentialId,
- handleConfirm,
- editValues,
- setEditValues,
- handleEdit,
- handleRemove,
- handleSetDefault,
- handleRename,
- pendingOperationCredentialId,
- }
- }
|