decord/source/modules/messages/native/hooks/useScrollHandlers.tsx
2026-07-21 06:55:02 +00:00

251 lines
8.1 KiB
TypeScript

// Module ID: 10852
// Function ID: 84295
// Name: useScrollHandlers
// Dependencies: []
// Exports: default
// Module 10852 (useScrollHandlers)
let closure_3 = importAll(dependencyMap[0]);
({ updateIsAtBottom: closure_4, updateShouldShowJumpToPresentButton: closure_5 } = arg1(dependencyMap[1]));
let importDefaultResult = importDefault(dependencyMap[2]);
importDefaultResult = new importDefaultResult("useScrollHandlers");
const tmp2 = arg1(dependencyMap[1]);
const result = arg1(dependencyMap[9]).fileFinishedImporting("modules/messages/native/hooks/useScrollHandlers.tsx");
export default function useScrollHandlers(arg0) {
({ chatRef: closure_0, chatManager: closure_1, chatUpdatesQueue: closure_2, pendingUpdatesQueueRef: closure_3, animatedRef: closure_4, fetchMoreBefore: closure_5, fetchMoreAfter: closure_6, handleVisibleMessagesChange: closure_7, applyNativeRowsUpdate: closure_8, messages: closure_9, channel: closure_10, channelId: closure_11, screenIndex: closure_12, onScroll: closure_13, useReducedMotion: closure_14, isStaff: closure_15, visibleMessagesWindowHandler: closure_16 } = arg0);
let ref1;
let ref2;
let ref3;
let ref4;
let ref5;
let ref6;
function loadMoreBefore() {
closure_4.current = true;
callback();
}
function loadMoreAfter() {
closure_4.current = true;
lib2();
}
function handleScrollCallbacks(isNearTop) {
let eventTimestamp;
let isAtBottom;
let isNearBottom;
({ eventTimestamp, isAtBottom, isNearBottom } = isNearTop);
if (isNearBottom === undefined) {
isNearBottom = false;
}
let flag = isNearTop.isNearTop;
if (flag === undefined) {
flag = false;
}
let flag2 = isNearTop.dragging;
if (flag2 === undefined) {
flag2 = false;
}
let flag3 = isNearTop.decelerating;
if (flag3 === undefined) {
flag3 = false;
}
let flag4 = isNearTop.isFirstMessageVisible;
if (flag4 === undefined) {
flag4 = false;
}
if (null != id) {
lib(set[3]);
let tmp7 = !closure_9.loadingMore;
if (tmp7) {
if (!flag2) {
flag2 = flag3;
}
if (!flag2) {
flag2 = tmp5;
}
tmp7 = flag2;
}
if (tmp7) {
tmp7 = 0 === ref.current.length;
}
if (!ref4.current) {
if (flag) {
if (closure_9.hasMoreBefore) {
if (tmp7) {
loadMoreBefore();
}
let obj = { isFirstMessageVisible: flag4 };
callback4(obj);
set.tryFlush();
return true;
}
}
}
if (!ref3.current) {
if (isNearBottom) {
if (closure_9.hasMoreAfter) {
if (tmp7) {
loadMoreAfter();
}
}
}
}
let current = ref2.current === isAtBottom;
if (current) {
current = ref1.current;
}
if (!current) {
obj = previousRows(set[4]);
const id = id.id;
let num3 = 0;
if (isAtBottom) {
num3 = 1;
}
const result = obj.updateChannelDimensions(id, eventTimestamp, num3, 1, 0);
ref1.current = true;
}
}
return false;
}
function handleScroll(eventTimestamp) {
const isAtBottom = eventTimestamp.isAtBottom;
let flag = eventTimestamp.isNearBottom;
if (flag === undefined) {
flag = false;
}
let flag2 = eventTimestamp.isNearTop;
if (flag2 === undefined) {
flag2 = false;
}
let flag3 = eventTimestamp.dragging;
if (flag3 === undefined) {
flag3 = false;
}
let flag4 = eventTimestamp.decelerating;
if (flag4 === undefined) {
flag4 = false;
}
let flag5 = eventTimestamp.shouldShowJumpToPresent;
if (flag5 === undefined) {
flag5 = false;
}
let flag6 = eventTimestamp.isFirstMessageVisible;
if (flag6 === undefined) {
flag6 = false;
}
const obj = { eventTimestamp: eventTimestamp.eventTimestamp, isAtBottom, isNearBottom: flag, isNearTop: flag2, dragging: flag3, decelerating: flag4, shouldShowJumpToPresent: flag5, isFirstMessageVisible: flag6 };
if (handleScrollCallbacks(obj)) {
ref2.current = isAtBottom;
ref3.current = flag;
ref4.current = flag2;
ref6.current = flag3;
ref5.current = flag4;
isAtBottom(closure_2[5]).batchUpdates(() => {
let hasMoreAfter = flag5;
if (!flag5) {
hasMoreAfter = hasMoreAfter.hasMoreAfter;
}
closure_5(closure_11, closure_12, hasMoreAfter);
callback(closure_12, isAtBottom);
});
const obj2 = isAtBottom(closure_2[5]);
}
}
const ref = React.useRef(undefined);
ref1 = React.useRef(false);
ref2 = React.useRef(false);
ref3 = React.useRef(false);
ref4 = React.useRef(false);
ref5 = React.useRef(false);
ref6 = React.useRef(false);
return {
hasHandledScrollRef: ref1,
isAtBottomRef: ref2,
isNearBottomRef: ref3,
isNearTopRef: ref4,
deceleratingRef: ref5,
draggingRef: ref6,
firstIgnoredScrollEventTimestampRef: ref,
loadMoreBefore,
loadMoreAfter,
scrollToTop() {
let flag = arg0;
if (arg0 === undefined) {
flag = true;
}
if (flag) {
flag = !closure_14;
}
previousRows(closure_2[6]).scrollToTop(lib.current, flag);
},
scrollToRelativeOffset(arg0) {
let flag = arg1;
if (arg1 === undefined) {
flag = true;
}
if (flag) {
flag = !closure_14;
}
const result = previousRows(closure_2[6]).scrollToRelativeOffset(lib.current, arg0, flag);
},
scrollToTopMessage() {
const previousRows = previousRows.getPreviousRows();
if (previousRows.length > 0) {
previousRows(closure_2[6]).scrollTo(lib.current, previousRows.length - 1);
const obj = previousRows(closure_2[6]);
}
},
updateNativeRows(isLoadingAtTop) {
if (set.isBlocking) {
set.add(isLoadingAtTop);
} else if (!isLoadingAtTop.isLoadingAtTop) {
callback3(isLoadingAtTop);
} else {
set.add(isLoadingAtTop);
}
},
handleScrollCallbacks,
handleScroll,
handleScrollPosition(arg0) {
let changesetUpdateId;
let decelerating;
let dragging;
let firstVisibleMessageIndex;
let firstVisibleMessagePercentVisible;
let isAtBottom;
let isFirstMessageVisible;
let isNearBottom;
let isNearTop;
let lastVisibleMessageIndex;
let lastVisibleMessagePercentVisible;
let nativeEvent;
let shouldShowJumpToPresent;
let timeStamp;
({ timeStamp, nativeEvent } = arg0);
({ firstVisibleMessageIndex, lastVisibleMessageIndex, changesetUpdateId } = nativeEvent);
({ isAtBottom, isNearBottom, isNearTop, dragging, decelerating, shouldShowJumpToPresent, isFirstMessageVisible, firstVisibleMessagePercentVisible, lastVisibleMessagePercentVisible } = nativeEvent);
let obj = lib(closure_2[7]);
const changesetIdForChat = obj.getChangesetIdForChat(lib.current);
if (changesetUpdateId !== changesetIdForChat) {
if (null == ref.current) {
ref.current = timeStamp;
}
if (closure_15) {
lib2.log("STAFF-ACK-LOG: Ignoring outdated scroll event.", closure_11, changesetUpdateId, changesetIdForChat, timeStamp);
}
} else {
obj = { firstVisibleMessageRowIndex: firstVisibleMessageIndex, lastVisibleMessageRowIndex: lastVisibleMessageIndex, firstVisibleMessagePercentVisible, lastVisibleMessagePercentVisible, source: lib(closure_2[8]).QuestsVisibleMessagesChangedSource.SCROLL };
callback2(obj);
const current = ref.current;
let tmp2 = timeStamp;
if (null != current) {
tmp2 = current;
}
ref.current = undefined;
obj = { eventTimestamp: tmp2, isAtBottom, isNearBottom, isNearTop, dragging, decelerating, shouldShowJumpToPresent, isFirstMessageVisible };
handleScroll(obj);
const obj1 = { rows: previousRows._rows, firstVisibleMessageRowIndex: firstVisibleMessageIndex, lastVisibleMessageRowIndex: lastVisibleMessageIndex };
closure_16.handleScrollPosition(obj1);
}
}
};
};