Files
discord-decomp/modules/safe_area/useSafeAreaAvoidingInputs.native.tsx
T
2026-11-01 12:12:55 +02:00

190 lines
6.0 KiB
TypeScript

// Metro module 9848 (f9849).
import { useRef, useEffect, useCallback } from "react";
import { getWindowDimensions } from "../screen/useWindowDimensions.native";
import Module712 from "../../_bundle/Module712";
import { measureViewRefInWindow, measureViewRefInView, measureViewInWindow } from "../view_measure/ViewMeasureUtils.native";
import { getKeyboardDuration } from "../keyboard/native/useKeyboardDuration";
function $mk115560($env) {
return function calculateScrollOffset() {
return $env[5].apply(this, arguments);
};
}
function $mk115561($env) {
return function calculateTargetScrollY(a0) {
const r6 = a0.scrollView.y + a0.scrollView.height;
const r19 = getWindowDimensions({
ignoreKeyboard: true
}).height - a0.insets.bottom;
if (!(a0.inputInWindow.y + a0.inputInWindow.height + a0.scrollOffset <= r19)) {
const r34 = a0.scrollView.height - Math.max(0, r6 - r19);
const r41 = a0.inputInScrollView.y + a0.inputInScrollView.height + a0.scrollOffset;
if (!(r41 <= r34)) {
return r41 - r34;
}
}
};
}
let env6540 = {};
env6540[5] = function _calculateScrollOffset() {
const r8 = async (c26549_0, c26549_1) => {
let r79, MAX_SAFE_INTEGER, PX_16, value;
let extraOffset;
let c30150_0, c30150_1, c30150_2, c30150_3;
L26: {
L25: {
L17: {
L16: {
c30150_0 = c26549_0;
c30150_1 = c26549_1;
c30150_2 = void 0;
c30150_3 = void 0;
if (c26549_0 == null) {
PX_16 = Module712.space.PX_16;
break L26;
}
const type = c26549_0.type;
if (type === "toRef") {
c30150_2 = await measureViewRefInWindow(c26549_0.ref);
const extraOffset2 = c30150_0.extraOffset;
extraOffset = extraOffset2;
if (extraOffset2 == null) {
extraOffset = 0;
}
c30150_3 = extraOffset;
if (c30150_2 == null) {
r79 = Module712.space.PX_16 + c30150_3;
break L25;
}
r79 = c30150_2.y - (c30150_1.y + c30150_1.height) + c30150_2.height + c30150_3;
break L25;
}
if (type === "toValue") {
value = c26549_0.value;
break L17;
}
if (type === "toBottom") {
MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;
break L16;
}
return void 0;
}
return MAX_SAFE_INTEGER;
}
return value;
}
return r79;
}
return PX_16;
};
env6540[5] = r8;
return r8.apply(this, arguments);
};
export default function useSafeAreaAvoidingInputs({ insets, inputs, scrollViewRef }) {
let callback;
callback = void 0;
const ref = useRef(inputs);
useEffect(() => {
ref.current = inputs;
}, [inputs]);
callback = useCallback(async () => {
let c26550_0, c26550_1;
L26: {
L25: {
let env30151;
c26550_1 = void 0;
const r10 = env30151 = {
$parent: env6540
};
c26550_0 = r10;
env30151[0] = void 0;
env30151[1] = void 0;
env30151[2] = void 0;
env30151[3] = void 0;
env30151[4] = void 0;
env30151[5] = void 0;
env30151[6] = void 0;
const current = scrollViewRef.current;
env30151[0] = current;
const r35 = ref.current.find((item) => {
const current = item.ref.current;
return current == null ? void 0 : current.isFocused();
});
env30151[1] = r35;
if (r35 == null) {
break L26;
}
if (current != null) {
env30151[2] = await measureViewRefInWindow(r35.ref);
env30151[3] = await measureViewRefInView(env30151[1].ref, env30151[0]);
if (env30151[2] == null) {
break L25;
}
if (env30151[3] == null) {
break L25;
}
env30151[4] = await measureViewInWindow(env30151[0]);
const offset = env30151[1].offset;
const r117 = env30151[2];
env30151[5] = await $mk115560(env6540)(offset, r117);
if (env30151[5] !== Number.MAX_SAFE_INTEGER) {
const r144 = {
insets,
inputInScrollView: env30151[3],
inputInWindow: env30151[2],
scrollOffset: env30151[5],
scrollView: env30151[4]
};
env30151[6] = $mk115561(env6540)(r144);
if (env30151[6] == null) {
break L25;
}
(function scrollToTargetY(a0, a1) {
const current = a0.current;
const r2 = current == null;
let r4 = void 0;
if (!r2) {
const scrollTo = current.scrollTo;
r4 = scrollTo == null ? void 0 : scrollTo.call(current, {
x: 0,
y: a1,
animated: true
});
}
if (r4 == null) {
const current2 = a0.current;
if (current2 != null) {
const scrollToOffset = current2.scrollToOffset;
if (scrollToOffset != null) {
scrollToOffset.call(current2, {
offset: a1,
animated: true
});
}
}
}
})(scrollViewRef, env30151[6]);
break L25;
}
const current2 = scrollViewRef.current;
if (current2 == null) {
break L25;
}
current2.scrollToEnd({
animated: true
});
break L25;
}
break L26;
}
return void 0;
}
}, [insets, scrollViewRef]);
useEffect(() => {
let c26551_0 = setTimeout(callback, getKeyboardDuration());
return () => clearTimeout(c26551_0);
}, [callback]);
return {
onFocus: callback
};
};