Files
med-notes/.pnpm-store/v10/files/60/b56b8f1455feaa1a68c60220ad464290021e64f8933ddc5d67f332ec363be93b767db5d9324eaa0316573c605a2c5ad331c5befca519a6bf7abebeff9d3049
2025-05-09 05:30:08 +02:00

29 lines
788 B
Plaintext

import { useReducer } from 'react';
type State<T> =
| { value: T; error: undefined }
| { value: false; error: Error }
| { value: undefined; error: undefined };
type Action<T> =
| { type: 'RESOLVE'; value: T }
| { type: 'REJECT'; error: Error }
| { type: 'RESET' };
function reducer<T>(state: State<T>, action: Action<T>): State<T> {
switch (action.type) {
case 'RESOLVE':
return { value: action.value, error: undefined };
case 'REJECT':
return { value: false, error: action.error };
case 'RESET':
return { value: undefined, error: undefined };
default:
return state;
}
}
export default function useResolver<T>(): [State<T>, React.Dispatch<Action<T>>] {
return useReducer(reducer<T>, { value: undefined, error: undefined });
}