Skip to content

Commit 9d5da39

Browse files
committed
feat: add select to storeApi
1 parent 16a3ecb commit 9d5da39

File tree

3 files changed

+30
-25
lines changed

3 files changed

+30
-25
lines changed

libs/core/src/lib/utils/signal-store.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,31 +134,36 @@ const selector =
134134
export function signalStore<State extends object>(
135135
initialState:
136136
| Partial<State>
137-
| ((storeApi: Pick<NgtSignalStore<State>, 'get' | 'set' | 'patch'>) => Partial<State>) = {},
137+
| ((storeApi: Pick<NgtSignalStore<State>, 'get' | 'set' | 'patch' | 'select'>) => Partial<State>) = {},
138138
options?: CreateSignalOptions<State>,
139139
): NgtSignalStore<State> {
140140
let source: WritableSignal<State>;
141141
let set: NgtSignalStore<State>['set'];
142142
let get: NgtSignalStore<State>['get'];
143143
let patch: NgtSignalStore<State>['patch'];
144+
let select: NgtSignalStore<State>['select'];
145+
let state: Signal<State>;
146+
147+
const computedCache = new Map();
144148

145149
if (typeof initialState === 'function') {
146150
source = signal({} as State, options);
151+
state = source.asReadonly();
147152
get = getter(source);
148153
set = setter(source);
149154
patch = patcher(source);
150-
source.set(initialState({ set, get, patch }) as State);
155+
select = selector(state, computedCache);
156+
source.set(initialState({ set, get, patch, select }) as State);
151157
} else {
152158
source = signal(initialState as State, options);
159+
state = source.asReadonly();
153160
get = getter(source);
154161
set = setter(source);
155162
patch = patcher(source);
163+
select = selector(state, computedCache);
156164
}
157165

158-
const state = source.asReadonly();
159-
const computedCache = new Map();
160-
161-
const store = { select: selector(state, computedCache), get, set, patch, state };
166+
const store = { select, get, set, patch, state };
162167

163168
// NOTE: internal _snapshot to debug current state
164169
Object.defineProperty(store, '_snapshot', {

libs/plugin/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
"nx-migrations": {
55
"migrations": "./migrations.json"
66
},
7-
"ng-update": {
7+
"ng-update": {
88
"migrations": "./migrations.json"
9-
},
9+
},
1010
"dependencies": {
1111
"@nx/devkit": "16.8.1"
1212
}

migrations.json

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
{
2-
"migrations": [
3-
{
4-
"cli": "nx",
5-
"version": "16.8.0-beta.3",
6-
"description": "Escape $ in env variables",
7-
"implementation": "./src/migrations/update-16-8-0/escape-dollar-sign-env-variables",
8-
"package": "nx",
9-
"name": "16.8.0-escape-dollar-sign-env"
10-
},
11-
{
12-
"version": "16.8.0",
13-
"description": "update-16-8-0-add-ignored-files",
14-
"implementation": "./src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files",
15-
"package": "@nx/linter",
16-
"name": "update-16-8-0-add-ignored-files"
17-
}
18-
]
2+
"migrations": [
3+
{
4+
"cli": "nx",
5+
"version": "16.8.0-beta.3",
6+
"description": "Escape $ in env variables",
7+
"implementation": "./src/migrations/update-16-8-0/escape-dollar-sign-env-variables",
8+
"package": "nx",
9+
"name": "16.8.0-escape-dollar-sign-env"
10+
},
11+
{
12+
"version": "16.8.0",
13+
"description": "update-16-8-0-add-ignored-files",
14+
"implementation": "./src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files",
15+
"package": "@nx/linter",
16+
"name": "update-16-8-0-add-ignored-files"
17+
}
18+
]
1919
}

0 commit comments

Comments
 (0)