Files
MeBox/web/src/pages/useStrmImportForm.ts
T
2026-06-24 12:31:51 +08:00

53 lines
1.4 KiB
TypeScript

import type { FormEvent } from 'react'
import { useEffect, useState } from 'react'
import toast from 'react-hot-toast'
import { strmAPI } from '../api/strm'
import type { Library } from '../types'
import { apiErrorMessage, isHTTPURL } from './strmPageUtils'
export function useStrmImportForm(libraries: Library[]) {
const [libraryID, setLibraryID] = useState('')
const [title, setTitle] = useState('')
const [url, setURL] = useState('')
const [importing, setImporting] = useState(false)
useEffect(() => {
if (!libraryID && libraries[0]) setLibraryID(libraries[0].id)
}, [libraries, libraryID])
const onImport = async (event: FormEvent) => {
event.preventDefault()
const trimmedTitle = title.trim()
const trimmedURL = url.trim()
if (!libraryID || !trimmedTitle || !trimmedURL) return
if (!isHTTPURL(trimmedURL)) {
toast.error('URL 必须以 http:// 或 https:// 开头')
return
}
setImporting(true)
try {
await strmAPI.importURL(libraryID, trimmedTitle, trimmedURL)
toast.success(`已导入「${trimmedTitle}」`)
setTitle('')
setURL('')
} catch (err: unknown) {
toast.error(apiErrorMessage(err, '导入失败'))
} finally {
setImporting(false)
}
}
return {
importing,
libraryID,
onImport,
setLibraryID,
setTitle,
setURL,
title,
url,
}
}