ngrx-rtk-query
Version:
Angular RTK Query
60 lines (56 loc) • 2.67 kB
JavaScript
import * as i0 from '@angular/core';
import { signal, computed, Injectable, inject, Injector, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER } from '@angular/core';
import { setupListeners } from '@reduxjs/toolkit/query';
class ApiStore {
constructor() {
this.state = signal({});
this.selectSignal = (mapFn, options) => computed(() => mapFn(this.state()), options);
this.dispatch = (action, { reducerPath, reducer }) => {
const nextState = reducer(this.state()[reducerPath], action);
this.state.update((state) => ({ ...state, [reducerPath]: nextState }));
};
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiStore }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiStore, decorators: [{
type: Injectable
}] });
const createNoopStoreApi = (api, { injector = inject(Injector) } = {}) => {
return () => {
const store = injector.get(ApiStore);
const reducerPath = api.reducerPath;
const reducer = api.reducer;
// Initialize the store with the initial state
store.state.update((state) => ({ ...state, [reducerPath]: {} }));
const dispatch = (action) => {
store.dispatch(action, { reducerPath, reducer });
return action;
};
const getState = store.selectSignal((state) => state);
const useSelector = (mapFn, options) => store.selectSignal(mapFn, options);
const hooks = { dispatch: dispatch, getState, useSelector };
const createSelector = (...input) => (state) => input.reduce((acc, selector) => selector(acc), state);
const getInjector = () => injector;
return { hooks, createSelector, getInjector };
};
};
function provideNoopStoreApi(api, { setupListeners: setupListeners$1 } = {}) {
setupListeners$1 === false ? undefined : setupListeners(api.dispatch, setupListeners$1);
return makeEnvironmentProviders([
ApiStore,
{
provide: ENVIRONMENT_INITIALIZER,
multi: true,
useValue() {
api.initApiStore(createNoopStoreApi(api));
api.dispatch(api.util.resetApiState());
},
},
]);
}
/**
* Generated bundle index. Do not edit.
*/
export { ApiStore, provideNoopStoreApi };
//# sourceMappingURL=ngrx-rtk-query-noop-store.mjs.map