Files
discord-decomp/_bundle/Module5469.jsx
T
2026-11-01 12:12:55 +02:00

133 lines
4.6 KiB
React

// Metro module 5469 (f5470).
import { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
import { CompatAnimatedView } from "./Module5466";
import { ViewHolder } from "./Module5470";
import { PlatformConfig } from "./Module5431";
export const StickyHeaders = ({ stickyHeaderIndices, stickyHeaderOffset, renderItem, stickyHeaderRef, recyclerViewManager, scrollY, data, extraData, onChangeStickyIndex, inverted, stickyHeaderZIndex = 2 }) => {
let c14868_14, callback, current, translateY, opacity;
const zIndex = stickyHeaderZIndex;
c14868_14 = void 0;
callback = void 0;
current = void 0;
translateY = void 0;
opacity = void 0;
const [state, setState] = useState({
currentStickyIndex: -1,
pushStartsAt: Number.MAX_SAFE_INTEGER
});
const { currentStickyIndex, pushStartsAt } = state;
const memo = useMemo(() => [...stickyHeaderIndices].sort((a, b) => a - b), [stickyHeaderIndices]);
const r2 = memo.length === 0 || recyclerViewManager.getDataLength() <= memo[memo.length - 1];
c14868_14 = r2;
callback = useCallback(() => {
let r34, MAX_SAFE_INTEGER;
if (!c14868_14) {
const r19 = recyclerViewManager.getLastScrollOffset() + stickyHeaderOffset;
let r1 = memo.length - 1;
let r18 = -1;
let r26 = 0;
let r14 = -1;
while (r26 <= r1) {
const r23 = Math.floor((r26 + r1) / 2);
const r31 = recyclerViewManager.getLayout(memo[r23]).y;
let r32 = r18;
const r3 = r1;
let r33 = r26;
if (r31 <= r19) {
r33 = r23 + 1;
r32 = r23;
r34 = r3;
} else {
r34 = r23 - 1;
}
r18 = r32;
r1 = r34;
r26 = r33;
r14 = r18;
}
let currentStickyIndex2 = memo[r14];
if (currentStickyIndex2 == null) {
currentStickyIndex2 = -1;
}
let r37 = memo[r14 + 1];
if (r37 == null) {
r37 = -1;
}
if (r37 > recyclerViewManager.getEngagedIndices().endIndex) {
r37 = -1;
}
if (r37 === -1) {
MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;
} else {
let r44 = recyclerViewManager.tryGetLayout(r37)?.y;
if (r44 == null) {
r44 = 0;
}
MAX_SAFE_INTEGER = r44 + recyclerViewManager.firstItemOffset;
}
let r51 = recyclerViewManager.tryGetLayout(currentStickyIndex2)?.height;
if (r51 == null) {
r51 = 0;
}
const r52 = MAX_SAFE_INTEGER - r51;
if (!(currentStickyIndex2 === currentStickyIndex && r52 === pushStartsAt)) {
setState({
currentStickyIndex: currentStickyIndex2,
pushStartsAt: r52 - stickyHeaderOffset
});
}
if (currentStickyIndex2 !== currentStickyIndex && onChangeStickyIndex != null) {
onChangeStickyIndex(currentStickyIndex2);
}
}
}, [r2, recyclerViewManager, memo, currentStickyIndex, pushStartsAt, onChangeStickyIndex, stickyHeaderOffset]);
useEffect(() => {
callback();
}, [callback]);
useImperativeHandle(stickyHeaderRef, () => ({
reportScrollEvent: () => {
callback();
}
}), [callback]);
current = useRef(new Map()).current;
const memo2 = useMemo(() => {
let r10 = recyclerViewManager.tryGetLayout(currentStickyIndex)?.height;
if (r10 == null) {
r10 = 0;
}
return {
translateY: scrollY.interpolate({
inputRange: [pushStartsAt, pushStartsAt + r10],
outputRange: [0, -r10],
extrapolate: "clamp"
}),
opacity: stickyHeaderOffset > 0 ? scrollY.interpolate({
inputRange: [pushStartsAt, pushStartsAt + r10],
outputRange: [1, 0],
extrapolate: "clamp"
}) : void 0
};
}, [recyclerViewManager, currentStickyIndex, scrollY, pushStartsAt, stickyHeaderOffset]);
translateY = memo2.translateY;
opacity = memo2.opacity;
const memo3 = useMemo(() => <CompatAnimatedView style={{
position: "absolute",
top: stickyHeaderOffset,
left: 0,
right: 0,
zIndex,
transform: [{
translateY
}],
opacity
}}>
{currentStickyIndex !== -1 ? currentStickyIndex < data.length ? <ViewHolder index={currentStickyIndex} item={data[currentStickyIndex]} renderItem={renderItem} layout={{
x: 0,
y: 0,
width: 0,
height: 0
}} refHolder={current} extraData={extraData} trailingItem={void 0} target="StickyHeader" hidden={false} inverted={inverted} /> : null : null}
</CompatAnimatedView>, [translateY, opacity, currentStickyIndex, data, renderItem, current, extraData, stickyHeaderOffset, zIndex, inverted]);
return PlatformConfig.isRN083OrAbove ? currentStickyIndex !== -1 ? memo3 : null : memo3;
};