in packages/redux-dynamic-modules-core/src/Managers/ReducerManager.ts [14:40]
export function getRefCountedReducerManager<S>(
manager: IReducerManager<S>
): IReducerManager<S> {
const reducerKeyRefCounter = getStringRefCounter();
for (const key in manager.getReducerMap()) {
reducerKeyRefCounter.add(key);
}
return {
reduce: manager.reduce,
getReducerMap: manager.getReducerMap,
add: <ReducerState>(key: string, reducer: Reducer<ReducerState>) => {
if (reducerKeyRefCounter.getCount(key) === 0) {
manager.add(key, reducer);
}
reducerKeyRefCounter.add(key);
},
remove: (key: string) => {
reducerKeyRefCounter.remove(key);
if (reducerKeyRefCounter.getCount(key) === 0) {
manager.remove(key);
}
},
};
}