@mic-rexjs/usecases-react
Version:
React-based solution for use usecases of Clean Architecture
22 lines (21 loc) • 784 B
JavaScript
import { useCreation, useLatest } from 'ahooks';
import { Statuses } from '../../enums/Statuses';
import { cacheCall } from '../../methods/cacheCall';
export const useContextualItem = (contextItem, statuses, createFactory, depsKey = 0) => {
const factoryRef = useLatest(createFactory);
const create = useCreation(() => {
void depsKey;
return cacheCall(factoryRef.current, {
onCompare() {
return true;
},
});
}, [depsKey, factoryRef]);
return useCreation(() => {
const rootEnabled = (statuses & Statuses.RootEnabled) === Statuses.RootEnabled;
if (!rootEnabled && contextItem) {
return contextItem;
}
return create();
}, [statuses, contextItem, create]);
};