react-async-states
Version:
A low-level multi paradigm state management library
47 lines (44 loc) • 1.69 kB
JavaScript
import * as React from 'react';
import { freeze } from '../../shared/index.js';
import { HydrationComponent } from '../../provider/Provider.js';
function createLegacyReturn(subscription, config) {
return createBaseReturn(subscription, config);
}
function selectState(instance, selector) {
let { state: currentState, lastSuccess, cache } = instance;
if (selector) {
return selector(currentState, lastSuccess, cache);
}
else {
return currentState;
}
}
function createBaseReturn(subscription, config) {
let instance = subscription.instance;
let currentState = instance.state;
let lastSuccess = instance.lastSuccess;
let selectedState = selectState(instance, config.selector);
let previousState = currentState.status === "pending" ? currentState.prev : currentState;
let status = currentState.status;
let source = subscription.instance.actions;
return freeze({
source,
state: selectedState,
dataProps: lastSuccess.props,
isError: status === "error",
isInitial: status === "initial",
isPending: status === "pending",
isSuccess: status === "success",
data: lastSuccess.data ?? null,
error: previousState.status === "error" ? previousState.data : null,
onChange: subscription.onChange,
onSubscribe: subscription.onSubscribe,
read: subscription.read.bind(null, config),
Hydrate: () => React.createElement(HydrationComponent, { target: [source] }),
});
}
function selectWholeState(state) {
return state;
}
export { createBaseReturn, createLegacyReturn, selectWholeState };
//# sourceMappingURL=HookReturnValue.js.map