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

437 lines
15 KiB
JavaScript

// Metro module 5458 (f5459).
import _slicedToArray from "./_slicedToArray_5416";
import { useState, useRef, useCallback, useMemo, useImperativeHandle } from "react";
import { I18nManager } from "react-native";
import { useUnmountFlag } from "./Module5460";
import { useUnmountAwareTimeout } from "./Module5461";
import { PlatformConfig } from "./Module5431";
import { adjustOffsetForRTL } from "./Module5462";
import { WarningMessages } from "./Module5456";
function $mk117899($env) {
return () => {
const current = $env.$parent[1].current;
if (current != null) {
current.scrollToEnd({
animated: $env[0]
});
}
};
}
let env3350 = {};
export function useRecyclerViewController(a0, a1, a2, a3) {
let env14858 = {
$parent: env3350
};
env14858[0] = a0;
env14858[1] = a2;
env14858[2] = a3;
const unmountFlag = useUnmountFlag();
env14858[3] = unmountFlag;
const r20 = _slicedToArray((0, useState)(0), 2);
r20[0];
env14858[4] = r20[1];
env14858[5] = useRef(false);
env14858[6] = useRef(a0.getDataLength());
const setTimeout2 = useUnmountAwareTimeout().setTimeout;
env14858[7] = setTimeout2;
env14858[8] = useRef(void 0);
env14858[9] = useRef(void 0);
env14858[10] = useRef([]);
const callback = useCallback((a0, a1) => {
if (env14858[0].updateScrollOffset(a0) !== void 0) {
env14858[10].current.push(a1);
(0, env14858[4])((a0) => a0 + 1);
} else {
a1();
}
}, [a0]);
env14858[11] = callback;
const callback2 = useCallback(() => {
const r7 = env14858[0];
if (r7.getIsFirstLayoutComplete() && r7.hasStableDataKeys() && r7.getDataLength() > 0 && r7.shouldMaintainVisibleContentPosition()) {
const r21 = Math.max(0, r7.computeVisibleIndices().startIndex);
if (r21 !== void 0 && r21 >= 0) {
env14858[8].current = r7.getDataKey(r21);
env14858[9].current = {
...r7.getLayout(r21)
};
}
}
}, [a0]);
env14858[12] = callback2;
const callback3 = useCallback(() => {
let r37, r43, r46;
const r7 = env14858[0];
const props = r7.props;
const { horizontal: horizontal2, data } = props;
const r9 = env14858[10];
const current = r9.current;
r9.current = [];
current.forEach((item) => item());
const dataLength = r7.getDataLength();
if (r7.getIsFirstLayoutComplete() && r7.hasStableDataKeys() && dataLength > 0 && r7.shouldMaintainVisibleContentPosition()) {
const current2 = env14858[6].current;
if (env14858[8].current) {
const r3 = dataLength !== current2;
let r12 = r7.getEngagedIndices().findValue((a0) => env14858[0].getDataKey(a0) === env14858[8].current);
if (r12 == null) {
L11: {
if (!r3) {
const ignoreScrollEvents = r7.ignoreScrollEvents;
r37 = void 0;
if (!ignoreScrollEvents) {
break L11;
}
}
r37 = data == null ? void 0 : data.findIndex((item, index) => env14858[0].getDataKey(index) === env14858[8].current);
}
r12 = r37;
}
if (r12 !== void 0 && r12 >= 0) {
const layout = r7.getLayout(r12);
if (horizontal2) {
const r47 = layout.x;
const r48 = env14858[9];
r46 = r47 - r48.current.x;
r43 = r48;
} else {
const r42 = layout.y;
r43 = env14858[9];
r46 = r42 - r43.current.y;
}
r43.current = {
...r7.getLayout(r12)
};
if (r46 !== 0 && !env14858[5].current && !r7.animationOptimizationsEnabled) {
if (PlatformConfig.supportsOffsetCorrection) {
const current4 = env14858[2].current;
if (current4 != null) {
current4.scrollBy(r46);
}
} else {
const r67 = horizontal2 ? {
x: r7.getAbsoluteLastScrollOffset() + r46,
animated: false
} : {
y: r7.getAbsoluteLastScrollOffset() + r46,
animated: false
};
const current3 = env14858[1].current;
if (current3 != null) {
current3.scrollTo(r67);
}
}
if (r3) {
(0, env14858[11])(r7.getAbsoluteLastScrollOffset() + r46, () => {});
r7.ignoreScrollEvents = true;
(0, env14858[7])(() => {
env14858[0].ignoreScrollEvents = false;
}, 100);
}
}
}
}
(0, env14858[12])();
}
env14858[6].current = r7.getDataLength();
}, [a0, a3, a2, setTimeout2, callback, callback2]);
const handlerMethods = (0, useMemo)(() => {
let c25467_0;
const r1 = {};
Object.defineProperty(r1, "props", {
get: function() {
return env14858[0].props;
},
set: void 0,
enumerable: true,
configurable: true
});
r1.scrollToOffset = ({ offset: offset3, animated: animated2, skipFirstItemOffset = true }) => {
const r7 = env14858[0];
const horizontal2 = r7.props.horizontal;
const r18 = env14858[1];
if (r18.current) {
const r9 = I18nManager.isRTL && horizontal2;
let r20 = offset3;
if (r9) {
const r30 = adjustOffsetForRTL(offset3, r7.getChildContainerDimensions().width, r7.getWindowSize().width);
const firstItemOffset = r7.firstItemOffset;
r20 = r30 + (skipFirstItemOffset ? firstItemOffset : -firstItemOffset);
}
const r34 = r20 + (skipFirstItemOffset ? 0 : r7.firstItemOffset);
r18.current.scrollTo({
...horizontal2 ? {
x: r34,
y: 0
} : {
x: 0,
y: r34
},
animated: animated2
});
}
};
r1.clearLayoutCacheOnUpdate = () => {
env14858[0].markLayoutManagerDirty();
};
r1.flashScrollIndicators = () => {
env14858[1].current.flashScrollIndicators();
};
r1.getNativeScrollRef = () => env14858[1].current;
r1.getScrollResponder = () => env14858[1].current.getScrollResponder();
r1.getScrollableNode = () => env14858[1].current.getScrollableNode();
c25467_0 = async function(c29506_0) {
let c29506_2;
let env31367;
c29506_2 = void 0;
const r9 = env31367 = {
$parent: env14858
};
let c29506_1 = r9;
env31367[0] = void 0;
let r28 = c29506_0;
if (r28 === void 0) {
r28 = {};
}
env31367[0] = r28.animated;
env31367[1] = void 0;
env31367[2] = void 0;
await void 0;
env31367[1] = env14858[0].props.data;
if (env31367[1] && env31367[1].length > 0) {
env31367[2] = env31367[1].length - 1;
if (!env14858[0].getEngagedIndices().includes(env31367[2])) {
await env14858[13].scrollToIndex({
index: env31367[2],
animated: env31367[0]
});
}
}
(0, env14858[7])($mk117899(c29506_1), 0);
};
r1.scrollToEnd = function scrollToEnd() {
return c25467_0.apply(this, arguments);
};
r1.scrollToTop = function scrollToTop(r2 = {}) {
env14858[13].scrollToOffset({
offset: 0,
animated: r2.animated
});
};
r1.scrollToIndex = ({ index, animated, viewPosition, viewOffset }) => new Promise((resolve) => {
let r35;
let getFinalOffset2, absoluteLastScrollOffset, c31368_4, getStartScrollOffset2, finalOffset, c31368_7, maxScrollOffset, offset2, performScrollStep2, finishScrollToIndex2;
const r8 = env14858[0];
const horizontal = r8.props.horizontal;
if (env14858[1].current && (index >= 0 && index < r8.getDataLength())) {
env14858[5].current = true;
r8.setOffsetProjectionEnabled(false);
getFinalOffset2 = () => {
let r13;
const r10 = env14858[0];
const layout = r10.getLayout(index);
const r6 = horizontal ? layout.x : layout.y;
L15: {
if (viewPosition === void 0) {
r13 = r6;
if (viewOffset === void 0) {
break L15;
}
}
const windowSize = r10.getWindowSize();
const r15 = horizontal ? windowSize.width : windowSize.height;
const r16 = horizontal ? layout.width : layout.height;
const r17 = viewPosition !== void 0 ? r6 - (r15 - r16) * viewPosition : r6;
r13 = viewOffset !== void 0 ? r17 + viewOffset : r17;
}
return r13 + r10.firstItemOffset;
};
absoluteLastScrollOffset = r8.getAbsoluteLastScrollOffset();
const windowSize = r8.getWindowSize();
const r27 = 2 * (horizontal ? windowSize.width : windowSize.height);
c31368_4 = r27;
getStartScrollOffset2 = () => {};
finalOffset = getFinalOffset2();
const finalOffset2 = getFinalOffset2();
if (finalOffset2 > absoluteLastScrollOffset) {
r35 = Math.max(finalOffset2 - r27, absoluteLastScrollOffset);
r8.setScrollDirection("forward");
} else {
r35 = Math.min(finalOffset2 + r27, absoluteLastScrollOffset);
r8.setScrollDirection("backward");
}
c31368_7 = r35;
maxScrollOffset = finalOffset;
offset2 = r35;
performScrollStep2 = (a0) => {
let r20;
if (env14858[3].current) {
resolve();
} else if (5 <= a0) {
maxScrollOffset = getFinalOffset2();
const maxScrollOffset2 = env14858[0].getMaxScrollOffset();
if (maxScrollOffset > maxScrollOffset2) {
maxScrollOffset = maxScrollOffset2;
}
if (animated) {
env14858[13].scrollToOffset({
offset: offset2,
animated: false,
skipFirstItemOffset: true
});
}
env14858[13].scrollToOffset({
offset: maxScrollOffset,
animated,
skipFirstItemOffset: true
});
env14858[7](() => {
env14858[5].current = false;
env14858[0].setOffsetProjectionEnabled(true);
resolve();
}, animated ? 300 : 200);
} else {
const r7 = env14858[11];
if (animated) {
const r21 = maxScrollOffset;
r20 = r21 + a0 / 4 * (offset2 - r21);
} else {
r20 = offset2 + a0 / 4 * (maxScrollOffset - offset2);
}
r7(r20, () => {
let r32;
if (index >= env14858[0].getDataLength()) {
env14858[13].scrollToEnd({
animated
});
resolve();
return void 0;
}
const finalOffset22 = getFinalOffset2();
if (!(finalOffset22 < finalOffset && finalOffset22 < c31368_7) && !(finalOffset22 > finalOffset && finalOffset22 > c31368_7)) {
performScrollStep2(a0 + 1);
} else {
maxScrollOffset = finalOffset22;
const finalOffset2 = getFinalOffset2();
if (finalOffset2 > absoluteLastScrollOffset) {
r32 = Math.max(finalOffset2 - c31368_4, absoluteLastScrollOffset);
env14858[0].setScrollDirection("forward");
} else {
r32 = Math.min(finalOffset2 + c31368_4, absoluteLastScrollOffset);
env14858[0].setScrollDirection("backward");
}
offset2 = r32;
finalOffset = finalOffset22;
c31368_7 = r32;
performScrollStep2(0);
}
});
}
};
finishScrollToIndex2 = () => {};
performScrollStep2(0);
} else {
resolve();
}
});
r1.scrollToItem = ({ item, animated: animated2, viewPosition: viewPosition2, viewOffset: viewOffset2 }) => {
const data = env14858[0].props.data;
if (env14858[1].current && data) {
const index2 = data.findIndex((a0) => a0 === item);
if (index2 >= 0) {
env14858[13].scrollToIndex({
index: index2,
animated: animated2,
viewPosition: viewPosition2,
viewOffset: viewOffset2
});
}
}
};
r1.getFirstItemOffset = () => env14858[0].firstItemOffset;
r1.getWindowSize = () => env14858[0].getWindowSize();
r1.getLayout = (a0) => env14858[0].tryGetLayout(a0);
r1.getAbsoluteLastScrollOffset = () => env14858[0].getAbsoluteLastScrollOffset();
r1.getChildContainerDimensions = () => env14858[0].getChildContainerDimensions();
r1.recordInteraction = () => {
env14858[0].recordInteraction();
};
r1.computeVisibleIndices = () => env14858[0].computeVisibleIndices();
r1.getFirstVisibleIndex = () => env14858[0].computeVisibleIndices().startIndex;
r1.recomputeViewableItems = () => {
env14858[0].recomputeViewableItems();
};
r1.updateViewableItems = () => {
env14858[0].computeItemViewability();
};
r1.prepareForLayoutAnimationRender = () => {
const r6 = env14858[0];
if (!r6.props.keyExtractor) {
console.warn(WarningMessages.keyExtractorNotDefinedForAnimation);
}
r6.animationOptimizationsEnabled = true;
};
return r1;
}, [a0, a2, setTimeout2, unmountFlag, callback]);
env14858[13] = handlerMethods;
const callback4 = useCallback(() => {
const r11 = env14858[0];
const props = r11.props;
const { horizontal: horizontal2, data, initialScrollIndexParams } = props;
let r10 = r11.getInitialScrollIndex();
if (r10 == null) {
r10 = -1;
}
if (r10 >= 0) {
let r13 = data?.length;
if (r13 == null) {
r13 = 0;
}
if (r10 < r13 && !r11.isInitialScrollComplete && r11.getIsFirstLayoutComplete()) {
const r17 = env14858[7];
r17(() => {
env14858[0].isInitialScrollComplete = true;
env14858[5].current = false;
}, 100);
env14858[5].current = true;
let r23 = initialScrollIndexParams?.viewOffset;
if (r23 == null) {
r23 = 0;
}
const layout = r11.getLayout(r10);
const offset = horizontal2 ? layout.x + r23 : layout.y + r23;
env14858[13].scrollToOffset({
offset,
animated: false,
skipFirstItemOffset: false
});
r17(() => {
env14858[13].scrollToOffset({
offset,
animated: false,
skipFirstItemOffset: false
});
}, 0);
}
}
}, [handlerMethods, a0, setTimeout2]);
(0, useImperativeHandle)(a1, () => {
const r0 = {
...env14858[1].current,
...env14858[13]
};
Object.defineProperty(r0, "props", {
get: () => env14858[0].props,
enumerable: true,
configurable: true
});
return r0;
}, [handlerMethods, a2, a0]);
return {
applyOffsetCorrection: callback3,
computeFirstVisibleIndexForOffsetCorrection: callback2,
applyInitialScrollIndex: callback4,
handlerMethods
};
}