Files
discord-decomp/modules/activities/panel/native/useActivityWebViewLockManager.tsx
T
2026-11-01 12:12:55 +02:00

73 lines
2.4 KiB
TypeScript

// Metro module 15839 (f15840).
import { useState, useId, useInsertionEffect, useLayoutEffect, useContext, useEffect } from "react";
import { useSharedValue } from "../../../reanimated/ReanimatedRexport";
import { TransitionStates } from "../../../../design/components/TransitionGroup/TransitionGroup";
export default function useActivityWebViewLockManager() {
return useState(() => {
let c28165_0, c28165_1, c28165_2, $mk117053 = function() {
return () => {
for (const item of c28165_2) {
const [r12, r34] = item;
const { canRender, callback } = r34;
const canRender2 = getCanRender2(r12);
if (canRender2 !== canRender) {
const callback2 = callback;
c28165_2.set(r12, {
canRender: canRender2,
callback: callback2
});
callback2(canRender2);
}
}
c28165_0 = void 0;
};
};
const getCanRender2 = function getCanRender(a0) {
return c28165_1.size === 0 || c28165_1.values().next()?.value === a0;
};
c28165_1 = new Set();
c28165_2 = new Map();
return function() {
const id = useId();
const [state, setState] = useState(() => c28165_1.size === 0 || c28165_1.values().next()?.value === id);
useInsertionEffect(() => {
c28165_1.add(id);
c28165_2.set(id, {
callback: setState,
canRender: c28165_1.size === 0 || c28165_1.values().next()?.value === id
});
return () => {
c28165_1.delete(id);
c28165_2.delete(id);
};
}, [id]);
useLayoutEffect(() => {
if (c28165_0 == null) {
c28165_0 = Promise.resolve().then($mk117053());
}
return () => {
if (c28165_0 == null) {
c28165_0 = Promise.resolve().then($mk117053());
}
};
}, [id, setState]);
return state;
};
})[0];
};
export function useLockedWebView({ transitionState, context }) {
const sharedValue = useSharedValue(false);
const activityWebViewLock = (0, useContext(context).useActivityWebViewLock)();
useEffect(() => {
if (transitionState !== TransitionStates.YEETED && activityWebViewLock) {
sharedValue.set(true);
} else {
sharedValue.set(false);
}
}, [sharedValue, transitionState, activityWebViewLock]);
return {
shown: sharedValue,
renderWebView: activityWebViewLock
};
}