56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
"use client"
|
|
|
|
import { useState, useEffect, useCallback } from "react"
|
|
import { getStreamersForApp, getStreamerById, type AppStreamer } from "@/lib/api/streamers"
|
|
|
|
export function useStreamers() {
|
|
const [list, setList] = useState<AppStreamer[]>([])
|
|
const [loading, setLoading] = useState(true)
|
|
const [error, setError] = useState<string | null>(null)
|
|
|
|
const load = useCallback(async () => {
|
|
setLoading(true)
|
|
setError(null)
|
|
try {
|
|
const data = await getStreamersForApp()
|
|
setList(data)
|
|
} catch (e) {
|
|
setError(e instanceof Error ? e.message : "加载失败")
|
|
setList([])
|
|
} finally {
|
|
setLoading(false)
|
|
}
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
load()
|
|
}, [load])
|
|
|
|
return { streamers: list, loading, error, reload: load }
|
|
}
|
|
|
|
export function useStreamer(id: string | null) {
|
|
const [streamer, setStreamer] = useState<AppStreamer | null>(null)
|
|
const [loading, setLoading] = useState(!!id)
|
|
const [error, setError] = useState<string | null>(null)
|
|
|
|
useEffect(() => {
|
|
if (!id) {
|
|
setStreamer(null)
|
|
setLoading(false)
|
|
return
|
|
}
|
|
setLoading(true)
|
|
setError(null)
|
|
getStreamerById(id)
|
|
.then(setStreamer)
|
|
.catch((e) => {
|
|
setError(e instanceof Error ? e.message : "加载失败")
|
|
setStreamer(null)
|
|
})
|
|
.finally(() => setLoading(false))
|
|
}, [id])
|
|
|
|
return { streamer, loading, error }
|
|
}
|