Files
discord-decomp/modules/media_viewer/native/components/MediaViewerItemPresenter.tsx
T
2026-11-01 12:12:55 +02:00

168 lines
6.2 KiB
TypeScript

// Metro module 12324 (f12325).
import { useMemo } from "react";
import { StyleSheet, View } from "react-native";
import { useEntranceAnimation } from "../useEntranceAnimation";
import { MediaViewerSourcesStore } from "../useMediaViewerSources";
import getMediaViewerStateForScreen from "../getMediaViewerStateForScreen";
import * as _ReanimatedRexport from "../../../reanimated/ReanimatedRexport";
import { useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
import REAWorkaroundView from "../../../reanimated/native/REAWorkaroundView";
let c8519_7 = {
platformStyles: {
position: "absolute",
width: "100%",
height: "100%"
}
};
const __initData = {
code: "function MediaViewerItemPresenterTsx1(){const{entranceAnimationDriver,interpolate,Extrapolation,startHeight,sourceHeight,startWidth,sourceWidth,startTranslateY,startTranslateX,startScale}=this.__closure;const entranceValue=entranceAnimationDriver.get();function interpolateProxy(from,to){return interpolate(entranceValue,from,to,Extrapolation.CLAMP);}return{height:interpolateProxy([0,1],[startHeight,sourceHeight]),width:interpolateProxy([0,1],[startWidth,sourceWidth]),top:interpolateProxy([0,1],[startTranslateY,0]),left:interpolateProxy([0,1],[startTranslateX,0]),borderRadius:interpolateProxy([0,0.25],[16,0]),transform:[{scale:interpolateProxy([0,1],[startScale,1])}]};}"
};
export default function MediaViewerItemPresenter(props) {
let startHeight, startScale, startWidth;
let width, height, c19798_7, c19798_8, c19798_9, width2, height2;
const { source, originLayout, renderMedia, windowWidth, windowHeight, entranceAnimationDriver, index, useItemVisible, panGestureConfig } = props;
width = void 0;
height = void 0;
c19798_7 = void 0;
c19798_8 = void 0;
c19798_9 = void 0;
width2 = void 0;
height2 = void 0;
const entranceAnimation = useEntranceAnimation(entranceAnimationDriver);
const { loads, handleLoad, handleError, handleLoadStart } = entranceAnimation;
const field = MediaViewerSourcesStore.useField("spoilerIndexes");
const memo = useMemo(() => field.has(index), [index, field]);
const mediaViewerStateForScreen = getMediaViewerStateForScreen(windowWidth, windowHeight, source);
width = mediaViewerStateForScreen.width;
height = mediaViewerStateForScreen.height;
const visible = useItemVisible(index);
const r53 = [];
if (Array.isArray(source)) {
const r6 = loads <= 1;
if (r6) {
r53.push(renderMedia({
key: `0:${index}:${source[0].uri}`,
onLoadStart: handleLoadStart,
onLoad: handleLoad,
onError: handleError,
source: source[0],
style: c8519_7.platformStyles,
index,
hasSpoiler: memo,
visible,
panGestureConfig
}));
}
if (loads >= 1) {
r53.push(renderMedia({
key: `1:${index}:${source[0].uri}`,
source: source[1],
style: c8519_7.platformStyles,
onLoad: handleLoad,
onError: handleError,
pointerEvents: r6 ? "none" : "auto",
fadeDuration: 0,
fade: false,
index,
hasSpoiler: memo,
visible,
panGestureConfig
}));
}
} else {
r53.push(renderMedia({
key: `0:${index}:${source.uri}`,
onLoadStart: handleLoadStart,
onLoad: handleLoad,
onError: handleError,
source,
style: c8519_7.platformStyles,
index,
hasSpoiler: memo,
visible,
panGestureConfig
}));
}
const r93 = width / height;
const r96 = originLayout.width / originLayout.height;
let startTranslateX = originLayout.x - (width - originLayout.width) / 2 - (windowWidth - width) / 2;
c19798_8 = startTranslateX;
const r106 = (height - originLayout.height) / 2;
const r3 = (windowHeight - height) / 2;
let startTranslateY = originLayout.y - r106 - r3;
c19798_9 = startTranslateY;
width2 = width;
height2 = height;
if (originLayout.resizeMode === "cover") {
const width3 = originLayout.width;
width2 = width3;
const height3 = originLayout.height;
height2 = height3;
const r124 = originLayout.x - (windowWidth - width) / 2;
c19798_8 = r124;
const r4 = originLayout.y - r3;
c19798_9 = r4;
c19798_7 = 1;
startHeight = height3;
startWidth = width3;
startTranslateY = r4;
startTranslateX = r124;
startScale = 1;
} else {
startScale = originLayout.width / width * (r93 > r96 ? r93 : 1);
c19798_7 = startScale;
startHeight = height;
startWidth = width;
}
const O = function O() {
const r10 = entranceAnimationDriver.get();
return {
height: _ReanimatedRexport.interpolate(r10, [0, 1], [height2, height], _ReanimatedRexport.Extrapolation.CLAMP),
width: _ReanimatedRexport.interpolate(r10, [0, 1], [width2, width], _ReanimatedRexport.Extrapolation.CLAMP),
top: _ReanimatedRexport.interpolate(r10, [0, 1], [c19798_9, 0], _ReanimatedRexport.Extrapolation.CLAMP),
left: _ReanimatedRexport.interpolate(r10, [0, 1], [c19798_8, 0], _ReanimatedRexport.Extrapolation.CLAMP),
borderRadius: _ReanimatedRexport.interpolate(r10, [0, 0.25], [16, 0], _ReanimatedRexport.Extrapolation.CLAMP),
transform: [{
scale: _ReanimatedRexport.interpolate(r10, [0, 1], [c19798_7, 1], _ReanimatedRexport.Extrapolation.CLAMP)
}]
};
};
O.__closure = {
entranceAnimationDriver,
interpolate: _ReanimatedRexport.interpolate,
Extrapolation: _ReanimatedRexport.Extrapolation,
startHeight,
sourceHeight: height,
startWidth,
sourceWidth: width,
startTranslateY,
startTranslateX,
startScale
};
O.__workletHash = 15052076990644;
O.__initData = __initData;
const animatedStyle = useAnimatedStyle(O);
const memo2 = useMemo(() => StyleSheet.create({
container: {
width: windowWidth,
height: windowHeight,
alignItems: "center",
justifyContent: "center"
},
child: {
width,
height
},
presenter: {
position: "relative",
overflow: "hidden",
opacity: 1
}
}), [windowWidth, windowHeight, width, height]);
return <View collapsable={false} style={memo2.container}>
<View style={memo2.child}>
<REAWorkaroundView style={[memo2.presenter, animatedStyle]}>{r53}</REAWorkaroundView>
</View>
</View>;
};