brf/client/shared/hooks/use_request_state.ts
2025-12-13 21:12:08 +01:00

66 lines
1.0 KiB
TypeScript

import { useState } from 'preact/hooks'
import isLoading from '../utils/is_loading.ts'
interface State {
error: Error | null
pending: boolean
success: boolean
response: any
}
const useRequestState = () => {
const initialState = {
error: null,
pending: false,
success: false,
response: null,
}
const [state, setState] = useState<State>(initialState)
const actions = {
reset() {
isLoading(false)
setState(initialState)
},
error(error: Error) {
isLoading(false)
setState({
pending: false,
success: false,
error,
response: null,
})
},
pending() {
isLoading(true)
setState({
pending: true,
success: false,
error: null,
response: null,
})
},
success(response = null) {
isLoading(false)
setState({
pending: false,
success: true,
error: null,
response,
})
},
}
return [state, actions]
}
export default useRequestState