@zedux/atoms
Version:
A Molecular State Engine for React
43 lines (37 loc) • 1.08 kB
text/typescript
import {
AnyAtomInstance,
AnyAtomTemplate,
AtomExportsType,
AtomParamsType,
AtomStateType,
ParamlessTemplate,
StateHookTuple,
} from '../types/index'
import { injectAtomInstance } from './injectAtomInstance'
export const injectAtomState: {
<A extends AnyAtomTemplate>(
template: A,
params: AtomParamsType<A>
): StateHookTuple<AtomStateType<A>, AtomExportsType<A>>
<A extends AnyAtomTemplate<{ Params: [] }>>(template: A): StateHookTuple<
AtomStateType<A>,
AtomExportsType<A>
>
<A extends AnyAtomTemplate>(template: ParamlessTemplate<A>): StateHookTuple<
AtomStateType<A>,
AtomExportsType<A>
>
<I extends AnyAtomInstance>(instance: I): StateHookTuple<
AtomStateType<I>,
AtomExportsType<I>
>
} = <A extends AnyAtomTemplate>(
atom: A,
params?: AtomParamsType<A>
): StateHookTuple<AtomStateType<A>, AtomExportsType<A>> => {
const instance = injectAtomInstance(atom, params as AtomParamsType<A>, {
operation: 'injectAtomState',
subscribe: true,
})
return [instance.getState(), instance._infusedSetter]
}