UNPKG

@mic-rexjs/usecases-react

Version:

React-based solution for use usecases of Clean Architecture

22 lines (21 loc) 784 B
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]); };