@mini-rx/signal-store
Version:
Signal Store for Angular
38 lines • 4.72 kB
JavaScript
import { computed } from '@angular/core';
import { isSignalSelector } from './signal-selector';
import { isKey } from '@mini-rx/common';
function createSelectFn(state) {
function select(mapFnOrKey) {
if (!mapFnOrKey) {
return state;
}
if (isSignalSelector(mapFnOrKey)) {
return mapFnOrKey(state);
}
return computed(() => {
const rawState = state();
return isKey(rawState, mapFnOrKey) ? rawState[mapFnOrKey] : mapFnOrKey(state());
});
}
return select;
}
export function createSelectableSignal(state) {
return {
select: createSelectFn(state),
get: () => {
return state();
},
};
}
export function createSelectableWritableSignal(state) {
return {
select: createSelectFn(state),
get: () => {
return state();
},
set: (v) => {
state.set(v);
},
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNlbGVjdGFibGUtc2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zaWduYWwtc3RvcmUvc3JjL2xpYi9jcmVhdGUtc2VsZWN0YWJsZS1zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFrQixNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4QyxTQUFTLGNBQWMsQ0FBMkIsS0FBd0I7SUFLdEUsU0FBUyxNQUFNLENBQUMsVUFBZ0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pCLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUEyQixLQUF3QjtJQUNyRixPQUFPO1FBQ0gsTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDN0IsR0FBRyxFQUFFLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDbkIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLDhCQUE4QixDQUMxQyxLQUFnQztJQUVoQyxPQUFPO1FBQ0gsTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDN0IsR0FBRyxFQUFFLEdBQWMsRUFBRTtZQUNqQixPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ25CLENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFZLEVBQVEsRUFBRTtZQUN4QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBTaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1NpZ25hbFNlbGVjdG9yLCBTaWduYWxTZWxlY3RvciB9IGZyb20gJy4vc2lnbmFsLXNlbGVjdG9yJztcbmltcG9ydCB7IGlzS2V5IH0gZnJvbSAnQG1pbmktcngvY29tbW9uJztcblxudHlwZSBTdGF0ZVNlbGVjdG9yPFQsIFI+ID0gKHN0YXRlOiBUKSA9PiBSO1xuXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RGbjxTdGF0ZVR5cGUgZXh0ZW5kcyBvYmplY3Q+KHN0YXRlOiBTaWduYWw8U3RhdGVUeXBlPikge1xuICAgIGZ1bmN0aW9uIHNlbGVjdCgpOiBTaWduYWw8U3RhdGVUeXBlPjtcbiAgICBmdW5jdGlvbiBzZWxlY3Q8Uj4obWFwRm46IFNpZ25hbFNlbGVjdG9yPFN0YXRlVHlwZSwgUj4pOiBTaWduYWw8Uj47XG4gICAgZnVuY3Rpb24gc2VsZWN0PFI+KG1hcEZuOiBTdGF0ZVNlbGVjdG9yPFN0YXRlVHlwZSwgUj4pOiBTaWduYWw8Uj47XG4gICAgZnVuY3Rpb24gc2VsZWN0PEtleVR5cGUgZXh0ZW5kcyBrZXlvZiBTdGF0ZVR5cGU+KGtleTogS2V5VHlwZSk6IFNpZ25hbDxTdGF0ZVR5cGVbS2V5VHlwZV0+O1xuICAgIGZ1bmN0aW9uIHNlbGVjdChtYXBGbk9yS2V5PzogYW55KTogU2lnbmFsPGFueT4ge1xuICAgICAgICBpZiAoIW1hcEZuT3JLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NpZ25hbFNlbGVjdG9yKG1hcEZuT3JLZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFwRm5PcktleShzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmF3U3RhdGUgPSBzdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGlzS2V5KHJhd1N0YXRlLCBtYXBGbk9yS2V5KSA/IHJhd1N0YXRlW21hcEZuT3JLZXldIDogbWFwRm5PcktleShzdGF0ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdGFibGVTaWduYWw8U3RhdGVUeXBlIGV4dGVuZHMgb2JqZWN0PihzdGF0ZTogU2lnbmFsPFN0YXRlVHlwZT4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3Q6IGNyZWF0ZVNlbGVjdEZuKHN0YXRlKSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0YWJsZVdyaXRhYmxlU2lnbmFsPFN0YXRlVHlwZSBleHRlbmRzIG9iamVjdD4oXG4gICAgc3RhdGU6IFdyaXRhYmxlU2lnbmFsPFN0YXRlVHlwZT5cbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdDogY3JlYXRlU2VsZWN0Rm4oc3RhdGUpLFxuICAgICAgICBnZXQ6ICgpOiBTdGF0ZVR5cGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKHY6IFN0YXRlVHlwZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgc3RhdGUuc2V0KHYpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4iXX0=