Skip to content

Commit 83ee5ed

Browse files
ENvironmentSetanakin_karrotorionmiz
authored
feat(core, plugin-history-sync): Initial stack setup process exposure (#630)
Co-authored-by: anakin_karrot <anakin@daangn.com> Co-authored-by: JH.Lee <contact@jins.dev>
1 parent f298988 commit 83ee5ed

23 files changed

+729
-261
lines changed

.changeset/crazy-rats-accept.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@stackflow/core": minor
3+
---
4+
5+
Expose events used to build a stack via `Stack.events`

.changeset/sad-adults-prove.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@stackflow/plugin-history-sync": minor
3+
---
4+
5+
Expose stack initialization process status for users to disable logging or fetching while initialization transition

.pnp.cjs

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
14.3 KB
Binary file not shown.

core/src/Stack.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,5 @@ export type Stack = {
5353
transitionDuration: number;
5454
globalTransitionState: "idle" | "loading" | "paused";
5555
pausedEvents?: DomainEvent[];
56+
events: DomainEvent[];
5657
};

core/src/activity-utils/makeStackReducer.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type {
55
PausedEvent,
66
ResumedEvent,
77
} from "../event-types";
8-
import type { Activity, Stack } from "../Stack";
8+
import type { Stack } from "../Stack";
99
import { findTargetActivityIndices } from "./findTargetActivityIndices";
1010
import { makeActivitiesReducer } from "./makeActivitiesReducer";
1111
import { makeActivityReducer } from "./makeActivityReducer";
@@ -80,8 +80,8 @@ function withActivitiesReducer<T extends DomainEvent>(
8080
};
8181
}
8282

83-
function noop(stack: Stack) {
84-
return stack;
83+
function noop(stack: Stack, event: DomainEvent) {
84+
return { ...stack, events: [...stack.events, event] };
8585
}
8686

8787
export function makeStackReducer(context: { now: number; resumedAt?: number }) {
@@ -91,6 +91,7 @@ export function makeStackReducer(context: { now: number; resumedAt?: number }) {
9191
return {
9292
...stack,
9393
transitionDuration: event.transitionDuration,
94+
events: [...stack.events, event],
9495
};
9596
}, context),
9697
),
@@ -110,6 +111,7 @@ export function makeStackReducer(context: { now: number; resumedAt?: number }) {
110111
: null),
111112
},
112113
],
114+
events: [...stack.events, event],
113115
};
114116
},
115117
context,
@@ -120,13 +122,14 @@ export function makeStackReducer(context: { now: number; resumedAt?: number }) {
120122
return {
121123
...stack,
122124
globalTransitionState: "paused",
125+
events: [...stack.events, event],
123126
};
124127
}, context),
125128
),
126129
Resumed: withActivitiesReducer(
127130
(stack: Stack, event: ResumedEvent): Stack => {
128131
if (stack.globalTransitionState !== "paused" || !stack.pausedEvents) {
129-
return stack;
132+
return { ...stack, events: [...stack.events, event] };
130133
}
131134

132135
const reducer = makeStackReducer({
@@ -135,10 +138,15 @@ export function makeStackReducer(context: { now: number; resumedAt?: number }) {
135138
});
136139

137140
const { pausedEvents, ...rest } = stack;
138-
return pausedEvents.reduce(reducer, {
141+
const resumedStack = pausedEvents.reduce(reducer, {
139142
...rest,
140143
globalTransitionState: "idle",
141144
});
145+
146+
return {
147+
...resumedStack,
148+
events: [...resumedStack.events, event],
149+
};
142150
},
143151
context,
144152
),

0 commit comments

Comments
 (0)