Skip to content

Commit 45d97de

Browse files
authored
[@xstate/store] Fix go-to-definition (#5410)
* Fix go to definition for triggers * Changeset
1 parent 462e0b2 commit 45d97de

File tree

4 files changed

+45
-39
lines changed

4 files changed

+45
-39
lines changed

.changeset/large-monkeys-doubt.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@xstate/store': minor
3+
---
4+
5+
Fix go-to-definition for triggers

packages/xstate-store/src/react.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,14 @@ export const useStore: {
117117
TEmitted extends EventPayloadMap
118118
>(
119119
definition: StoreConfig<TContext, TEventPayloadMap, TEmitted>
120-
): Store<TContext, ExtractEvents<TEventPayloadMap>, ExtractEvents<TEmitted>>;
120+
): Store<TContext, TEventPayloadMap, ExtractEvents<TEmitted>>;
121121
<
122122
TContext extends StoreContext,
123123
TEventPayloadMap extends EventPayloadMap,
124124
TEmitted extends EventPayloadMap
125125
>(
126126
definition: StoreConfig<TContext, TEventPayloadMap, TEmitted>
127-
): Store<TContext, ExtractEvents<TEventPayloadMap>, ExtractEvents<TEmitted>>;
127+
): Store<TContext, TEventPayloadMap, ExtractEvents<TEmitted>>;
128128
} = function useStoreImpl<
129129
TContext extends StoreContext,
130130
TEventPayloadMap extends EventPayloadMap,
@@ -219,11 +219,7 @@ export function createStoreHook<
219219
TEventPayloadMap extends EventPayloadMap,
220220
TEmitted extends EventPayloadMap
221221
>(definition: StoreConfig<TContext, TEventPayloadMap, TEmitted>) {
222-
type TStore = Store<
223-
TContext,
224-
ExtractEvents<TEventPayloadMap>,
225-
ExtractEvents<TEmitted>
226-
>;
222+
type TStore = Store<TContext, TEventPayloadMap, ExtractEvents<TEmitted>>;
227223
type TSnapshot = StoreSnapshot<TContext>;
228224

229225
const store = createStore(definition);

packages/xstate-store/src/store.ts

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function createStoreCore<
4141
>(
4242
logic: StoreLogic<TSnapshot, ExtractEvents<TEventPayloadMap>, TEmitted>,
4343
emits?: Record<string, (payload: any) => void> // TODO: improve this type
44-
): Store<TContext, ExtractEvents<TEventPayloadMap>, TEmitted> {
44+
): Store<TContext, TEventPayloadMap, TEmitted> {
4545
type StoreEvent = ExtractEvents<TEventPayloadMap>;
4646
let listeners: Map<TEmitted['type'], Set<any>> | undefined;
4747
const initialSnapshot = logic.getInitialSnapshot();
@@ -88,7 +88,7 @@ function createStoreCore<
8888
}
8989
}
9090

91-
const store: Store<TContext, StoreEvent, TEmitted> &
91+
const store: Store<TContext, TEventPayloadMap, TEmitted> &
9292
Pick<InternalBaseAtom<any>, '_snapshot'> = {
9393
get _snapshot() {
9494
return (atom as unknown as InternalBaseAtom<any>)._snapshot;
@@ -166,16 +166,19 @@ function createStoreCore<
166166
}
167167
};
168168
},
169-
trigger: new Proxy({} as Store<TContext, StoreEvent, TEmitted>['trigger'], {
170-
get: (_, eventType: string) => {
171-
return (payload: any) => {
172-
store.send({
173-
...payload,
174-
type: eventType
175-
});
176-
};
169+
trigger: new Proxy(
170+
{} as Store<TContext, TEventPayloadMap, TEmitted>['trigger'],
171+
{
172+
get: (_, eventType: string) => {
173+
return (payload: any) => {
174+
store.send({
175+
...payload,
176+
type: eventType
177+
});
178+
};
179+
}
177180
}
178-
}),
181+
),
179182
select<TSelected>(
180183
selector: Selector<TContext, TSelected>,
181184
equalityFn: (a: TSelected, b: TSelected) => boolean = Object.is
@@ -237,15 +240,11 @@ export type TransitionsFromEventPayloadMap<
237240
*/
238241
export function createStore<
239242
TContext extends StoreContext,
240-
TEventPayloadMap extends EventPayloadMap,
243+
const TEventPayloadMap extends EventPayloadMap,
241244
TEmittedPayloadMap extends EventPayloadMap
242245
>(
243246
definition: StoreConfig<TContext, TEventPayloadMap, TEmittedPayloadMap>
244-
): Store<
245-
TContext,
246-
ExtractEvents<TEventPayloadMap>,
247-
ExtractEvents<TEmittedPayloadMap>
248-
>;
247+
): Store<TContext, TEventPayloadMap, ExtractEvents<TEmittedPayloadMap>>;
249248
export function createStore<
250249
TContext extends StoreContext,
251250
TEvent extends EventObject,
@@ -254,7 +253,13 @@ export function createStore<
254253
definition:
255254
| SpecificStoreConfig<TContext, TEvent, TEmitted>
256255
| StoreLogic<StoreSnapshot<TContext>, TEvent, TEmitted>
257-
): Store<TContext, TEvent, TEmitted>;
256+
): Store<
257+
TContext,
258+
{
259+
[E in TEvent as E['type']]: E;
260+
},
261+
TEmitted
262+
>;
258263
export function createStore(
259264
definitionOrLogic: StoreConfig<any, any, any> | AnyStoreLogic
260265
) {
@@ -350,11 +355,7 @@ export function createStoreWithProducer<
350355
) => void;
351356
};
352357
}
353-
): Store<
354-
TContext,
355-
ExtractEvents<TEventPayloadMap>,
356-
ExtractEvents<TEmittedPayloadMap>
357-
> {
358+
): Store<TContext, TEventPayloadMap, ExtractEvents<TEmittedPayloadMap>> {
358359
const transition = createStoreTransition(config.on, producer);
359360
const logic = {
360361
getInitialSnapshot: () => ({

packages/xstate-store/src/types.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ export type StoreSnapshot<TContext> = Snapshot<undefined> & {
7676
*/
7777
export interface Store<
7878
TContext extends StoreContext,
79-
TEvent extends EventObject,
79+
TEventPayloadMap extends EventPayloadMap,
8080
TEmitted extends EventObject
8181
> extends Subscribable<StoreSnapshot<TContext>>,
8282
InteropObservable<StoreSnapshot<TContext>>,
8383
BaseAtom<StoreSnapshot<TContext>> {
84-
send: (event: TEvent) => void;
84+
send: (event: ExtractEvents<TEventPayloadMap>) => void;
8585
getSnapshot: () => StoreSnapshot<TContext>;
8686
/** @alias getSnapshot */
8787
get: () => StoreSnapshot<TContext>;
@@ -118,11 +118,11 @@ export interface Store<
118118
* ```
119119
*/
120120
trigger: {
121-
[E in TEvent as E['type'] & string]: IsEmptyObject<
122-
DistributiveOmit<E, 'type'>
121+
[K in keyof TEventPayloadMap]: IsEmptyObject<
122+
DistributiveOmit<TEventPayloadMap[K], 'type'>
123123
> extends true
124124
? () => void
125-
: (eventPayload: DistributiveOmit<E, 'type'>) => void;
125+
: (eventPayload: DistributiveOmit<TEventPayloadMap[K], 'type'>) => void;
126126
};
127127
select<TSelected>(
128128
selector: Selector<TContext, TSelected>,
@@ -141,7 +141,11 @@ export interface Store<
141141
* });
142142
* ```
143143
*/
144-
transition: StoreTransition<TContext, TEvent, TEmitted>;
144+
transition: StoreTransition<
145+
TContext,
146+
ExtractEvents<TEventPayloadMap>,
147+
TEmitted
148+
>;
145149
}
146150

147151
export type StoreTransition<
@@ -160,7 +164,7 @@ export type StoreConfig<
160164
> = {
161165
context: TContext;
162166
emits?: {
163-
[K in keyof TEmitted & string]: (payload: TEmitted[K]) => void;
167+
[K in keyof TEmitted]: (payload: TEmitted[K]) => void;
164168
};
165169
on: {
166170
[K in keyof TEventPayloadMap & string]: StoreAssigner<
@@ -267,8 +271,8 @@ export type SnapshotFromStore<TStore extends Store<any, any, any>> =
267271
* ```
268272
*/
269273
export type EventFromStore<TStore extends Store<any, any, any>> =
270-
TStore extends Store<infer _TContext, infer TEvent, infer _TEmitted>
271-
? TEvent
274+
TStore extends Store<infer _TContext, infer TEventPayloadMap, infer _TEmitted>
275+
? ExtractEvents<TEventPayloadMap>
272276
: never;
273277

274278
// Copied from XState core

0 commit comments

Comments
 (0)