Skip to content

Commit

Permalink
�fix(core): prevent replaced root activity from pop event (#401)
Browse files Browse the repository at this point in the history
Co-authored-by: JH.Lee <contact@jins.dev>
  • Loading branch information
irrationnelle and orionmiz authored Jul 12, 2023
1 parent e143f9a commit 2d63e51
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 1 deletion.
6 changes: 5 additions & 1 deletion core/src/activity-utils/findTargetActivityIndexes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,11 @@ export default function findTargetActivityIndexes(
break;
}
case "Popped": {
const latestActivity = findLatestActiveActivity(activities.slice(1));
const sorted = activities
.filter(isActivityNotExited)
.sort(compareActivitiesByEventDate);

const latestActivity = sorted.slice(0, sorted.length - 1)[0];

if (latestActivity) {
targetActivities.push(activities.indexOf(latestActivity));
Expand Down
91 changes: 91 additions & 0 deletions core/src/aggregate.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1068,6 +1068,97 @@ test("aggregate - 가장 바닥에 있는 Activity는 Pop 되지 않습니다",
});
});

test("aggregate - push 후 replace 한 뒤 pop 을 수행하면 pop을 무효화한다.", () => {
let pushedEvent1: PushedEvent;
let replacedEvent1: ReplacedEvent;

const initEvents = [
initializedEvent({
transitionDuration: 300,
}),
registeredEvent({
activityName: "home",
}),
registeredEvent({
activityName: "sample",
}),
(pushedEvent1 = makeEvent("Pushed", {
activityId: "a1",
activityName: "home",
activityParams: {},
eventDate: enoughPastTime(),
})),
];

const output1 = aggregate(
[
...initEvents,
(replacedEvent1 = makeEvent("Replaced", {
activityId: "a2",
activityName: "sample",
activityParams: {},
eventDate: enoughPastTime(),
})),
makeEvent("Popped", {
eventDate: enoughPastTime(),
}),
],
nowTime(),
);

expect(output1).toStrictEqual({
activities: [
activity({
id: "a1",
name: "home",
transitionState: "exit-done",
params: {},
steps: [
{
id: "a1",
params: {},
enteredBy: pushedEvent1,
},
],
enteredBy: pushedEvent1,
exitedBy: replacedEvent1,
isActive: false,
isTop: false,
isRoot: false,
zIndex: -1,
}),
activity({
id: "a2",
name: "sample",
transitionState: "enter-done",
params: {},
steps: [
{
id: "a2",
params: {},
enteredBy: replacedEvent1,
},
],
enteredBy: replacedEvent1,
isActive: true,
isTop: true,
isRoot: true,
zIndex: 0,
}),
],
registeredActivities: [
{
name: "home",
},
{
name: "sample",
},
],
transitionDuration: 300,
globalTransitionState: "idle",
});
});

test("aggregate - transitionDuration 이전에 Pop을 한 경우 exit-active 상태입니다", () => {
const t = nowTime();

Expand Down

1 comment on commit 2d63e51

@vercel
Copy link

@vercel vercel bot commented on 2d63e51 Jul 12, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.