ngrx-rtk-query
Version:
Angular RTK Query
44 lines (40 loc) • 1.76 kB
JavaScript
import { inject, Injector, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER } from '@angular/core';
import { Store, createSelectorFactory, defaultMemoize, provideState } from '@ngrx/store';
import { setupListeners } from '@reduxjs/toolkit/query';
import { shallowEqual } from 'ngrx-rtk-query/core';
const createStoreApi = (api, { injector = inject(Injector) } = {}) => {
return () => {
const store = injector.get(Store, undefined, { optional: true });
if (!store) {
throw new Error(`Provide the Store is necessary to use the queries. Did you forget to provide the store?`);
}
const dispatch = (action) => {
store.dispatch(action);
return action;
};
const getState = store.selectSignal((state) => state);
const useSelector = (mapFn, options) => store.selectSignal(mapFn, options);
const hooks = { dispatch: dispatch, getState, useSelector };
const createSelector = createSelectorFactory((projector) => defaultMemoize(projector, shallowEqual, shallowEqual));
const getInjector = () => injector;
return { hooks, createSelector, getInjector };
};
};
function provideStoreApi(api, { setupListeners: setupListeners$1 } = {}) {
setupListeners$1 === false ? undefined : setupListeners(api.dispatch, setupListeners$1);
return makeEnvironmentProviders([
{
provide: ENVIRONMENT_INITIALIZER,
multi: true,
useValue() {
api.initApiStore(createStoreApi(api));
},
},
provideState(api.reducerPath, api.reducer),
]);
}
/**
* Generated bundle index. Do not edit.
*/
export { provideStoreApi };
//# sourceMappingURL=ngrx-rtk-query-store.mjs.map