export type ThreadFeedLiveFollowEvent = | { readonly type: "reset" } | { readonly type: "user-scroll-begin" } | { readonly type: "user-scroll-end"; readonly isAtEnd: boolean; readonly userScrollSessionActive: boolean; } | { readonly type: "scroll"; readonly isAtEnd: boolean; readonly userScrollSessionActive: boolean; }; export function resolveThreadFeedLiveFollow( current: boolean, event: ThreadFeedLiveFollowEvent,): boolean { switch (event.type) { case "reset": return true; case "user-scroll-begin": return false; case "user-scroll-end": return event.userScrollSessionActive ? event.isAtEnd : current; case "scroll": if (event.userScrollSessionActive) { return false; } if (event.isAtEnd) { return true; } return current; }}
export type ThreadFeedLiveFollowEvent =
| { readonly type: "reset" }
| { readonly type: "user-scroll-begin" }
| {
readonly type: "user-scroll-end";
readonly isAtEnd: boolean;
readonly userScrollSessionActive: boolean;
}
| {
readonly type: "scroll";
readonly isAtEnd: boolean;
readonly userScrollSessionActive: boolean;
};
export function resolveThreadFeedLiveFollow(
current: boolean,
event: ThreadFeedLiveFollowEvent,
): boolean {
switch (event.type) {
case "reset":
return true;
case "user-scroll-begin":
return false;
case "user-scroll-end":
return event.userScrollSessionActive ? event.isAtEnd : current;
case "scroll":
if (event.userScrollSessionActive) {
return false;
}
if (event.isAtEnd) {
return true;
}
return current;
}
}