react-reducer-provider
Version:
Asynchronous/Synchronous React Centralized State with Hooks and HOC
23 lines (18 loc) • 1.11 kB
JavaScript
// Copyright (c) 2021 Gonzalo Müller Bravo.
// Licensed under the MIT License (MIT), see LICENSE.txt
import { imbueProvider, shouldStateProviderUpdate, renderStateProvider } from './imbueProvider'
import { computeProcessorValue } from './computeProcessorValue'
function computeContextValue(providerId, state, dispatcher) {
return { value: Object.preventExtensions(computeProcessorValue(providerId, state, dispatcher)) }
}
export function imbueStateProvider(component, props) {
imbueProvider(component, props.id, shouldStateProviderUpdate, renderStateProvider)
component.state = computeContextValue(props.id, typeof props.initialState !== 'function' ? props.initialState : props.initialState(), component.wd)
}
export function setContextValue(component, newState) {
newState !== component.state.value.state && component.setState(computeContextValue(component.state.value.provider, newState, component.wd))
return newState
}
export function nextState(component, processor, ...processorArgs) {
return typeof processor !== 'function' ? component.state.value.state : processor(...processorArgs)
}