Files
discord-decomp/modules/guilds_bar/native/hooks/useGuildsBarGesture.tsx
T
2026-11-01 12:12:55 +02:00

1176 lines
46 KiB
TypeScript

// Metro module 14940 (f14941).
import { useContext, useRef, useEffect, useCallback, useMemo } from "react";
import { Dimensions } from "react-native";
import GuildStore from "../../../../stores/GuildStore";
import SortedGuildStore, { GuildsNodeType } from "../../../../stores/SortedGuildStore";
import GuildsBarDnDStore from "../GuildsBarDnDStore";
import { FastListRenderSections, useGuildWrapperSize } from "../GuildsBarConstants";
import * as _ReanimatedRexport from "../../../reanimated/ReanimatedRexport";
import { makeMutable, useAnimatedRef, useSharedValue, useFrameCallback } from "../../../reanimated/ReanimatedRexport";
import debounce from "../../../../_bundle/debounce";
import { HapticFeedbackTypes, triggerHapticFeedback } from "../../../haptics/HapticUtils.native";
import { AccessibilityAnnouncer } from "../../../../design/shared";
import { throttle } from "../../../../_bundle/Module12";
import SentryUtils_native from "../../../../utils/SentryUtils.native";
import * as _index_native from "../../../../intl/index.native";
import { intl } from "../../../../intl/index.native";
import { FastListItemTypes } from "../../../../lib/native/FastList";
import { HomeDrawerStateContext } from "../../../home_drawer/native/useHomeDrawerGesture";
import { useToken } from "../../../../design/tokens/native/useToken";
import Module712 from "../../../../_bundle/Module712";
import { shallow } from "../../../../_bundle/Module3802";
import roundToNearestPixel from "../../../voice_panel/native/utils/roundToNearestPixel";
import { batchUpdates } from "../../../../_bundle/Module705";
import GuildActionCreators from "../../../../actions/GuildActionCreators";
import { saveGuildFolders } from "../../../../actions/UserSettingsActionCreators";
import { ContextMenuStore, showContextMenu, hideContextMenu, updateContextMenuState } from "../../../../design/components/ContextMenu/native/ContextMenuState.native";
import * as _PlatformUtils from "../../../../utils/PlatformUtils";
import { getSafeAreaInsets } from "../../../safe_area/useSafeAreaInsets.native";
import { getIsScreenReaderEnabled } from "../../../a11y/native/useIsScreenReaderEnabled.native";
import getGuildsBarGuildMenuItems from "../utils/getGuildsBarGuildMenuItems";
import { getGuildFolderMenuItems } from "../GuildsBarFolderMenuItems";
import { useExternalScrollEventHandler } from "../../../quests/native/QuestDock/QuestDockExternalCoordinationContext";
import { Gesture } from "../../../../_bundle/Module5273";
let GESTURE_ACCELERATION_RANGE, MS_PER_FRAME_60FPS, GuildsBarDnDStore2, state, c10568_16, c10568_17, c10568_18, c10568_19, c10568_21, triggerHapticsAndAnnouncementsIfNecessary, getItemAndNodeFromTouchEvent, __initData, __initData2, __initData3, __initData4, __initData5, __initData6, __initData7, __initData8, __initData9, __initData10;
const getDropIndex = function getDropIndex(dragNode, a1, overState) {
const r5 = overState === "self" ? dragNode : a1;
const flattenedGuildFolderList = SortedGuildStore.getFlattenedGuildFolderList();
let r20 = -1;
for (const item of flattenedGuildFolderList) {
r20 = r20 + 1;
if (item.id !== r5.id) {
continue;
}
break;
}
if (overState !== "after" && overState !== "convert-after") {
return r20;
}
return r20 + 1;
};
triggerHapticsAndAnnouncementsIfNecessary = function triggerHapticsAndAnnouncementsIfNecessary(a0) {
let r102, itemName, itemName2, itemName3, itemName4;
L84: {
const type = a0.type;
if (type === "drag-start") {
const node3 = a0.node;
const type6 = node3.type;
if (GuildsNodeType.GUILD === type6) {
let r253 = GuildStore.getGuild(node3.id)?.name;
if (r253 == null) {
r253 = intl.string(_index_native.t.fKYRlM);
}
itemName4 = r253;
} else {
const FOLDER4 = GuildsNodeType.FOLDER;
itemName4 = void 0;
if (FOLDER4 === type6) {
let name4 = node3.name;
if (name4 == null) {
name4 = intl.string(_index_native.t.ebAnWE);
}
itemName4 = name4;
}
}
if (itemName4 != null) {
AccessibilityAnnouncer.announce(intl.formatToPlainString(_index_native.t["vHD/Je"], {
itemName: itemName4
}));
}
c10568_16(HapticFeedbackTypes.DRAG_AND_DROP_START);
c10568_16.flush();
} else if (type === "drag-move") {
if (c10568_21?.type === "drag-move" && c10568_21.overNode.id === a0.overNode.id && c10568_21.overState === a0.overState) {
break L84;
}
const r59 = c10568_21?.type === "drag-move" ? getDropIndex(c10568_21.dragNode, c10568_21.overNode, c10568_21.overState) : getDropIndex(a0.dragNode, a0.dragNode, "self");
const dropIndex = getDropIndex(a0.dragNode, a0.overNode, a0.overState);
const type3 = c10568_21?.type;
let r76 = "self";
if (type3 !== "drag-start") {
let r79 = c10568_21?.overState;
if (r79 == null) {
r79 = "self";
}
r76 = r79;
}
if (r59 === dropIndex) {
const overState = a0.overState;
if ((overState != null && overState.startsWith("convert")) === (r76 != null && r76.startsWith("convert"))) {
break L84;
}
}
L69: {
c10568_16(HapticFeedbackTypes.DRAG_AND_DROP_MOVE);
a0.dragNode;
const { overNode, overState: overState2 } = a0;
if (overState2 !== "convert-before" && overState2 !== "convert-after") {
if (overState2 === "drop-into") {
r102 = overNode.type === GuildsNodeType.FOLDER ? intl.formatToPlainString(_index_native.t.uLDoxR, {
folderName: overNode.name
}) : void 0;
break L69;
}
if (overState2 === "before") {
const r144 = _index_native.t["A5aDw+"];
const type4 = overNode.type;
if (GuildsNodeType.GUILD === type4) {
let r164 = GuildStore.getGuild(overNode.id)?.name;
if (r164 == null) {
r164 = intl.string(_index_native.t.fKYRlM);
}
itemName2 = r164;
} else {
const FOLDER2 = GuildsNodeType.FOLDER;
itemName2 = void 0;
if (FOLDER2 === type4) {
let name2 = overNode.name;
if (name2 == null) {
name2 = intl.string(_index_native.t.ebAnWE);
}
itemName2 = name2;
}
}
r102 = intl.formatToPlainString(r144, {
itemName: itemName2
});
break L69;
}
r102 = void 0;
if (overState2 !== "after") {
break L69;
}
const w8FN92 = _index_native.t.w8FN92;
const type2 = overNode.type;
if (GuildsNodeType.GUILD === type2) {
let r127 = GuildStore.getGuild(overNode.id)?.name;
if (r127 == null) {
r127 = intl.string(_index_native.t.fKYRlM);
}
itemName = r127;
} else {
const FOLDER = GuildsNodeType.FOLDER;
itemName = void 0;
if (FOLDER === type2) {
let name = overNode.name;
if (name == null) {
name = intl.string(_index_native.t.ebAnWE);
}
itemName = name;
}
}
r102 = intl.formatToPlainString(w8FN92, {
itemName
});
} else {
const qiQ0QI = _index_native.t.qiQ0QI;
const type5 = overNode.type;
if (GuildsNodeType.GUILD === type5) {
let r215 = GuildStore.getGuild(overNode.id)?.name;
if (r215 == null) {
r215 = intl.string(_index_native.t.fKYRlM);
}
itemName3 = r215;
} else {
const FOLDER3 = GuildsNodeType.FOLDER;
itemName3 = void 0;
if (FOLDER3 === type5) {
let name3 = overNode.name;
if (name3 == null) {
name3 = intl.string(_index_native.t.ebAnWE);
}
itemName3 = name3;
}
}
r102 = intl.formatToPlainString(qiQ0QI, {
itemName: itemName3
});
}
}
if (r102 != null) {
c10568_17(r102);
}
} else if (type === "drag-drop") {
c10568_16(HapticFeedbackTypes.DRAG_AND_DROP_END);
c10568_16.flush();
c10568_17.flush();
AccessibilityAnnouncer.announce(intl.string(_index_native.t.lMkmz7));
}
}
c10568_21 = a0.type !== "drag-drop" ? a0 : void 0;
};
getItemAndNodeFromTouchEvent = function getItemAndNodeFromTouchEvent(a0, a1, ref, map) {
let r40;
const state3 = GuildsBarDnDStore.getState();
const dragRegion2 = state3.DragRegion;
const r12 = state3.scrollPosition.get() + a0;
let pointerPosition = r12;
if (a1) {
const r23 = dragRegion2.get();
pointerPosition = Math.max(Math.min(r12, r23.max - 2), r23.min + 2);
}
const current = ref.current;
let r32 = current == null ? void 0 : current.getSectionItemFromPosition(pointerPosition, map);
if (r32 == null) {
r32 = {
item: void 0,
positionPercentage: 0
};
}
const { item, positionPercentage } = r32;
const r37 = item != null;
let node3 = void 0;
if (r37) {
L20: {
const r39 = item == null;
r40 = void 0;
if (!r39) {
const r44 = item.section < FastListRenderSections.GUILDS;
r40 = void 0;
if (!r44) {
const r51 = SortedGuildStore.getFastListGuildFolders()[item.section - FastListRenderSections.GUILDS];
const r52 = r51 != null;
r40 = void 0;
if (r52) {
const type = item.type;
if (FastListItemTypes.SECTION === type) {
if (r51 != null) {
const type4 = r51.type;
const FOLDER2 = GuildsNodeType.FOLDER;
r40 = r51;
if (type4 === FOLDER2) {
break L20;
}
}
r40 = void 0;
} else {
const ITEM = FastListItemTypes.ITEM;
r40 = void 0;
if (ITEM === type) {
const type2 = r51.type;
const ROOT = GuildsNodeType.ROOT;
r40 = void 0;
if (type2 !== ROOT) {
const type3 = r51.type;
const FOLDER = GuildsNodeType.FOLDER;
let r67 = r51;
if (type3 === FOLDER) {
const r70 = r51.children[item.item];
const r71 = r70 == null;
r67 = r70;
r40 = void 0;
if (r71) {
break L20;
}
}
r40 = r67.type === GuildsNodeType.GUILD ? r67 : void 0;
}
}
}
}
}
}
}
node3 = r40;
}
return {
item,
overPercentage: Math.floor(100 * positionPercentage) / 100,
node: node3,
pointerPosition
};
};
GESTURE_ACCELERATION_RANGE = 160;
MS_PER_FRAME_60FPS = 16.666666666666668;
GuildsBarDnDStore2 = GuildsBarDnDStore;
state = {
pan: makeMutable(-1),
itemMeasurements: makeMutable([]),
activeIndex: makeMutable(-1)
};
c10568_16 = debounce(triggerHapticFeedback, 16);
c10568_17 = debounce((a0) => {
AccessibilityAnnouncer.announce(a0);
}, 500);
c10568_18 = throttle((a0) => {
SentryUtils_native.addBreadcrumb({
category: "GuildsBarGesture",
message: "handleGuildDrag started",
data: a0
});
}, 2000);
c10568_19 = throttle((a0) => {
SentryUtils_native.addBreadcrumb({
category: "GuildsBarGesture",
message: "handleGestureEnd started",
data: a0
});
}, 3000);
c10568_21 = void 0;
__initData = {
code: "function useGuildsBarGestureTsx1({timeSincePreviousFrame:timeSincePreviousFrame}){const{gestureState,pushScrollAccumulatedTime,MS_PER_FRAME_60FPS,pushScroll,scrollTo,scrollerRef,roundToNearestPixel,scrollPosition}=this.__closure;if(timeSincePreviousFrame==null||timeSincePreviousFrame<=0||gestureState.get().mode!=='drag'){return;}pushScrollAccumulatedTime.set(pushScrollAccumulatedTime.get()+timeSincePreviousFrame);if(pushScrollAccumulatedTime.get()<MS_PER_FRAME_60FPS){return;}const scrollSpeed=1000*pushScroll.get();const timeInSeconds=pushScrollAccumulatedTime.get()/1000;pushScrollAccumulatedTime.set(0);scrollTo(scrollerRef,0,Math.max(roundToNearestPixel(scrollPosition.get()+timeInSeconds*scrollSpeed),0),false);}"
};
__initData2 = {
code: "function useGuildsBarGestureTsx2(){const{gestureState,runOnJS,handleGestureEnd}=this.__closure;if(gestureState.get().mode==null||gestureState.get().mode==='cancel'){runOnJS(handleGestureEnd)('cancel');}}"
};
__initData3 = {
code: "function useGuildsBarGestureTsx3(){const{gestureState,runOnJS,handleGestureEnd}=this.__closure;if(gestureState.get().mode==='cancel'){runOnJS(handleGestureEnd)('cancel');}}"
};
__initData4 = {
code: "function useGuildsBarGestureTsx4({absoluteX:absoluteX,absoluteY:absoluteY}){const{gestureState,runOnJS,handlePress}=this.__closure;if(gestureState.get().mode!=='cancel'){runOnJS(handlePress)(absoluteX,absoluteY);}}"
};
__initData5 = {
code: "function useGuildsBarGestureTsx5(event,manager){const{gestureState}=this.__closure;if(gestureState.get().mode==='cancel'){manager.fail();}}"
};
__initData6 = {
code: "function useGuildsBarGestureTsx6(event,manager){const{scrollPosition,gestureState,DragRegion,runOnJS,handleTouchesDown}=this.__closure;var _touch$absoluteY;const touch=event.changedTouches[0];const pointerY=((_touch$absoluteY=touch===null||touch===void 0?void 0:touch.absoluteY)!==null&&_touch$absoluteY!==void 0?_touch$absoluteY:0)+scrollPosition.get();if(touch==null||gestureState.get().mode==='cancel'||pointerY<DragRegion.get().min||pointerY>DragRegion.get().max){manager.fail();}else if(event.changedTouches.length===1){runOnJS(handleTouchesDown)(touch.absoluteX,touch.absoluteY);}}"
};
__initData7 = {
code: "function useGuildsBarGestureTsx7(){const{runOnJS,handleGestureEnd}=this.__closure;runOnJS(handleGestureEnd)('cancel');}"
};
__initData8 = {
code: "function useGuildsBarGestureTsx8(){const{gestureState,runOnJS,handleGestureEnd}=this.__closure;if(gestureState.get().mode==='drag'){runOnJS(handleGestureEnd)('drop');}else if(gestureState.get().mode==='contextmenu'){runOnJS(handleGestureEnd)('contextmenu-open');}else{runOnJS(handleGestureEnd)('cancel');}}"
};
__initData9 = {
code: "function useGuildsBarGestureTsx9({absoluteX:absoluteX,absoluteY:absoluteY}){const{gestureState,listInsets,GESTURE_ACCELERATION_RANGE,windowSize,runOnJS,handleGuildDrag,handleContextMenuDrag}=this.__closure;if(gestureState.get().mode==='drag'){if(absoluteX!==gestureState.get().absoluteX||absoluteY!==gestureState.get().absoluteY){let{initialY:initialY}=gestureState.get();const minPushRange=listInsets.get().start+GESTURE_ACCELERATION_RANGE;const maxPushRange=windowSize-listInsets.get().end-GESTURE_ACCELERATION_RANGE;if(initialY<minPushRange&&absoluteY>initialY){initialY=absoluteY;}else if(initialY>maxPushRange&&absoluteY<initialY){initialY=absoluteY;}gestureState.set({...gestureState.get(),absoluteX:absoluteX,absoluteY:absoluteY,initialY:initialY});runOnJS(handleGuildDrag)(absoluteY);}}else if(gestureState.get().mode==='contextmenu'){runOnJS(handleContextMenuDrag)(absoluteX,absoluteY);}}"
};
__initData10 = {
code: "function useGuildsBarGestureTsx10(event,manager){const{gestureState,dragDropInProgress,DRAG_GESTURE_MINIMUM_DISTANCE,runOnJS,handleContextMenuDrag,handleGuildDrag}=this.__closure;const touch=event.changedTouches[0];if(gestureState.get().mode!=='pressed'||touch==null){if(gestureState.get().mode==='cancel'||touch==null){manager.fail();dragDropInProgress.set(false);}return;}const diffX=touch.absoluteX-gestureState.get().initialX;const absDiffY=Math.abs(touch.absoluteY-gestureState.get().absoluteY);if(diffX>DRAG_GESTURE_MINIMUM_DISTANCE&&diffX>absDiffY){gestureState.set({...gestureState.get(),mode:'contextmenu',absoluteX:touch.absoluteX,absoluteY:touch.absoluteY});dragDropInProgress.set(false);manager.activate();runOnJS(handleContextMenuDrag)(touch.absoluteX,touch.absoluteY);}else if(absDiffY>DRAG_GESTURE_MINIMUM_DISTANCE){gestureState.set({...gestureState.get(),mode:'drag',initialX:touch.absoluteX,initialY:touch.absoluteY,absoluteX:touch.absoluteX,absoluteY:touch.absoluteY});manager.activate();dragDropInProgress.set(true);runOnJS(handleGuildDrag)(touch.absoluteY);}}"
};
export default function useGuildsBarGesture() {
let gestureState, scrollPosition, DragRegion, windowSize, listInsets, dragDropInProgress, frameCallback, callback, callback2, callback3, callback4, callback5;
const gesture = useContext(HomeDrawerStateContext).gesture;
const guildWrapperSize = useGuildWrapperSize();
const token = useToken(Module712.modules.mobile.GUILD_BAR_ITEM_SIZE);
const animatedRef = useAnimatedRef();
const ref = useRef(null);
const sharedValue = useSharedValue(0);
const sharedValue2 = useSharedValue(0);
const r54 = GuildsBarDnDStore2((a0) => ({
gestureState: a0.gestureState,
scrollPosition: a0.scrollPosition,
DragRegion: a0.DragRegion,
windowSize: a0.windowSize,
listInsets: a0.listInsets,
dragDropInProgress: a0.dragDropInProgress
}), shallow);
gestureState = r54.gestureState;
scrollPosition = r54.scrollPosition;
DragRegion = r54.DragRegion;
windowSize = r54.windowSize;
listInsets = r54.listInsets;
dragDropInProgress = r54.dragDropInProgress;
const persistantKeys = GuildsBarDnDStore2(({ dropSpecs, dragSpecs: dragSpecs3 }) => {
const set = new Set();
if (dragSpecs3 != null) {
set.add(dragSpecs3.item.recyclerKey);
}
if (dropSpecs != null) {
set.add(dropSpecs.dragRecyclerKey);
}
return set.size > 0 ? Array.from(set) : void 0;
}, shallow);
useEffect(() => {
const current = ref.current;
const r7 = current == null ? void 0 : current.computeScrollPosition(FastListRenderSections.GUILDS);
const current2 = ref.current;
let r16 = current2 == null ? void 0 : current2.props.sections;
if (r16 == null) {
r16 = [];
}
const r1 = r16.length - 1;
let r19 = r16[r1];
if (r19 == null) {
r19 = 0;
}
const r20 = r19 - 1;
const current3 = ref.current;
const r23 = current3 == null ? void 0 : current3.computeScrollPosition(r1, r20);
let min = r7?.scrollPosition;
if (min == null) {
min = 0;
}
const max = r23 != null ? r23.scrollPosition + r23.size : Infinity;
const dragRegion2 = GuildsBarDnDStore.getState().DragRegion;
const r37 = dragRegion2.get();
if (!(min === r37.min && max === r37.max)) {
dragRegion2.set({
min,
max
});
}
});
const W = function W({ timeSincePreviousFrame }) {
if (timeSincePreviousFrame != null && !(timeSincePreviousFrame <= 0) && gestureState.get().mode === "drag") {
sharedValue2.set(sharedValue2.get() + timeSincePreviousFrame);
if (!(sharedValue2.get() < MS_PER_FRAME_60FPS)) {
const r2 = 1000 * sharedValue.get();
const r34 = sharedValue2.get() / 1000;
sharedValue2.set(0);
_ReanimatedRexport.scrollTo(animatedRef, 0, Math.max(roundToNearestPixel(scrollPosition.get() + r34 * r2), 0), false);
}
}
};
W.__closure = {
gestureState,
pushScrollAccumulatedTime: sharedValue2,
MS_PER_FRAME_60FPS,
pushScroll: sharedValue,
scrollTo: _ReanimatedRexport.scrollTo,
scrollerRef: animatedRef,
roundToNearestPixel,
scrollPosition
};
W.__workletHash = 14384524602726;
W.__initData = __initData;
frameCallback = useFrameCallback(W, false);
callback = useCallback((a0) => {
let r67;
let dropPosition, node, node2, c27864_4, c27864_5, state2, id;
const state3 = GuildsBarDnDStore.getState();
const { dragSpecs, overSpecs: overSpecs2, gestureState: gestureState2, dragDropInProgress: dragDropInProgress2, setStateShallow: setStateShallow2 } = state3;
sharedValue.set(0);
sharedValue2.set(0);
if (frameCallback.isActive) {
frameCallback.setActive(false);
}
if (a0 === "cancel") {
c10568_19({
event: a0,
dragSpecs,
overSpecs: overSpecs2,
gestureState: gestureState2.get()
});
} else {
SentryUtils_native.addBreadcrumb({
category: "GuildsBarGesture",
message: "handleGestureEnd started",
data: {
event: a0,
dragSpecs,
overSpecs: overSpecs2,
gestureState: gestureState2.get()
}
});
}
L59: {
if (a0 === "drop" && (overSpecs2 != null && dragSpecs != null)) {
L23: {
const item = dragSpecs.item;
const item2 = overSpecs2.item;
const type = item.type;
if (FastListItemTypes.SECTION !== type) {
const ITEM = FastListItemTypes.ITEM;
r67 = void 0;
if (ITEM !== type) {
break L23;
}
}
const type2 = item2.type;
if (FastListItemTypes.SECTION !== type2) {
const ITEM2 = FastListItemTypes.ITEM;
r67 = void 0;
if (ITEM2 !== type2) {
break L23;
}
}
const r3 = item2.section < item.section;
let r19 = "before";
let r79 = "before";
if (!r3) {
const r81 = item2.section > item.section;
let r82 = "after";
let r83 = "after";
if (!r81) {
if (!(item2.item < item.item)) {
if (!(item2.item > item.item)) {
r82 = item2.item === item.item ? "self" : void 0;
}
r19 = r82;
}
r83 = r19;
}
r79 = r83;
}
r67 = r79;
}
dropPosition = (overSpecs2.state === "after" ? overSpecs2.item.layoutStart + dragSpecs.itemSize : overSpecs2.item.layoutStart) - (r67 === "after" ? dragSpecs.item.layoutSize : 0);
node = dragSpecs.node;
node2 = overSpecs2.node;
const r104 = overSpecs2.state === "after";
c27864_4 = r104;
c27864_5 = overSpecs2.state === "convert-before" || overSpecs2.state === "convert-after" || overSpecs2.state === "drop-into";
state2 = overSpecs2.state;
if (state2 !== "self" && state2 != null) {
const id2 = node2.id;
id = id2;
if (node.type === GuildsNodeType.FOLDER && (node2.type === GuildsNodeType.GUILD && node2.parentId != null)) {
id = node2.parentId;
} else if (node2.type === GuildsNodeType.FOLDER && node2.expanded && r104) {
c27864_4 = false;
let r140 = node2.children[0]?.id;
if (r140 == null) {
r140 = id2;
}
id = r140;
}
batchUpdates(() => {
const id2 = node.id;
if (id2 !== id) {
const id3 = node.id;
GuildActionCreators.moveById(id3, id, !!c27864_5 || c27864_4, c27864_5);
(async () => {
let c31751_3 = 0;
L10: {
try {
c31751_3 = 1;
await saveGuildFolders(SortedGuildStore.getCompatibleGuildFolders());
c31751_3 = 0;
} catch ($e) {
let r7 = $e;
if (c31751_3 !== 0) {
while (true) {
try {
c31751_3 = 0;
break L10;
} catch ($e) {
r7 = $e;
if (c31751_3 === 0) {
break;
}
}
}
}
throw r7;
}
}
})();
}
const state3 = GuildsBarDnDStore.getState();
let dragRecyclerKey = dragSpecs.item?.recyclerKey;
if (dragRecyclerKey == null) {
dragRecyclerKey = "";
}
state3.dropStart({
dragNode: node,
overNode: node2,
dropPosition,
dragRecyclerKey,
itemSize: dragSpecs.itemSize,
overState: state2
});
});
triggerHapticsAndAnnouncementsIfNecessary({
type: "drag-drop",
dragNode: node,
overNode: node2,
overState: state2
});
break L59;
}
const state4 = GuildsBarDnDStore.getState();
let dragRecyclerKey = dragSpecs.item?.recyclerKey;
if (dragRecyclerKey == null) {
dragRecyclerKey = "";
}
state4.dropStart({
dragNode: node,
overNode: node,
dropPosition: dragSpecs.itemTop,
itemSize: dragSpecs.itemSize,
dragRecyclerKey,
overState: "self"
});
triggerHapticsAndAnnouncementsIfNecessary({
type: "drag-drop",
dragNode: node,
overNode: node,
overState: "self"
});
} else {
if (a0 === "contextmenu-open") {
const menu = ContextMenuStore.getState().menu;
if (menu != null) {
menu.requestClose(menu.state.activeIndex.get() === -1);
}
}
setStateShallow2({
dragSpecs: void 0,
overSpecs: void 0
});
const r173 = gestureState2.get();
if (r173.mode != null) {
gestureState2.set({
...r173,
mode: null
});
dragDropInProgress2.set(false);
}
}
}
}, [sharedValue, sharedValue2, frameCallback]);
callback2 = useCallback((a0, a1) => {
const state3 = GuildsBarDnDStore.getState();
const { gestureState: gestureState2, dragDropInProgress: dragDropInProgress2 } = state3;
const item = getItemAndNodeFromTouchEvent(a1, false, ref).item;
const r20 = gestureState2.get();
if (item == null && r20.mode == null) {
gestureState2.set({
...r20,
mode: "cancel"
});
dragDropInProgress2.set(false);
}
}, []);
callback3 = useCallback((a0, a1) => {
let r78;
const state3 = GuildsBarDnDStore.getState();
state3.dragSpecs;
const { scrollPosition: scrollPosition2, gestureState: gestureState2, dragDropInProgress: dragDropInProgress2, setStateShallow: setStateShallow2 } = state3;
SentryUtils_native.addBreadcrumb({
category: "GuildsBarGesture",
message: "handlePress started",
data: {
absoluteX: a0,
absoluteY: a1
}
});
const itemAndNodeFromTouchEvent = getItemAndNodeFromTouchEvent(a1, false, ref);
const { item, node: node3 } = itemAndNodeFromTouchEvent;
if (item != null && node3 != null) {
const dragSpecs3 = {
node: node3,
item,
itemTop: item.layoutStart,
itemSize: item.layoutSize
};
const height = Dimensions.get("window").height;
const isAndroid = _PlatformUtils.isAndroid();
let windowSize3 = height;
if (isAndroid) {
const safeAreaInsets = getSafeAreaInsets();
windowSize3 = height + (safeAreaInsets.top + safeAreaInsets.bottom);
}
state.activeIndex.set(-1);
if (getIsScreenReaderEnabled()) {
triggerHapticsAndAnnouncementsIfNecessary({
type: "drag-start",
node: node3
});
} else {
const type = node3.type;
if (GuildsNodeType.GUILD === type) {
const guild = GuildStore.getGuild(node3.id);
r78 = {
key: node3.id,
title: guild?.name,
items: guild != null ? getGuildsBarGuildMenuItems(guild.id, SortedGuildStore.getGuildsTree().version) : []
};
} else {
r78 = GuildsNodeType.FOLDER === type ? {
key: node3.id,
title: node3.name,
items: getGuildFolderMenuItems(node3.id)
} : void 0;
}
const { items, key, title } = r78;
if (items.length > 0) {
showContextMenu({
key: `${key}`,
title,
items,
x: 12 + token + 12,
y: item.layoutStart - scrollPosition2.get(),
positionX: "left",
positionY: "below",
width: token,
height: token,
state,
dividerIndexes: [],
keyboardShouldPersistTaps: "never",
requestClose: (a0) => {
if (!a0) {
const r10 = items[state.activeIndex.get()];
if (r10 != null) {
r10.action();
}
}
state.activeIndex.set(-1);
hideContextMenu();
callback("contextmenu-close");
},
onClose: () => {}
});
}
}
setStateShallow2({
dragSpecs: dragSpecs3,
overSpecs: void 0,
windowSize: windowSize3
});
gestureState2.set({
mode: "pressed",
initialY: a1,
initialX: a0,
absoluteY: a1,
absoluteX: a0
});
triggerHapticFeedback(HapticFeedbackTypes.IMPACT_MEDIUM);
} else {
gestureState2.set({
...gestureState2.get(),
mode: null
});
dragDropInProgress2.set(false);
}
}, [callback, token]);
callback4 = useCallback((a0, a1) => {
updateContextMenuState(a0, a1, state);
}, []);
callback5 = useCallback((a0) => {
let r145, overState;
const state3 = GuildsBarDnDStore.getState();
const overSpecs2 = state3.overSpecs;
let overSpecs = overSpecs2;
let dragSpecs2 = state3.dragSpecs;
const { windowSize: windowSize2, setStateShallow, listInsets: listInsets2, gestureState: gestureState2 } = state3;
c10568_18({
overSpecs: overSpecs2,
dragSpecs: dragSpecs2,
windowSize: windowSize2,
gestureState: gestureState2.get()
});
if (dragSpecs2 != null) {
const r13 = gestureState2.get();
if (!(getIsScreenReaderEnabled() || dragSpecs2.node == null || overSpecs2 != null)) {
triggerHapticsAndAnnouncementsIfNecessary({
type: "drag-start",
node: dragSpecs2.node
});
}
const map = new Map();
const r61 = overSpecs2 != null && overSpecs2.state !== "self";
if (r61) {
map.set(dragSpecs2.item.recyclerKey, 0);
map.set(overSpecs2.item.recyclerKey, 2 * dragSpecs2.itemSize);
}
const itemAndNodeFromTouchEvent = getItemAndNodeFromTouchEvent(a0, true, ref, map);
const { item, overPercentage, node: node3 } = itemAndNodeFromTouchEvent;
if (!((overSpecs2 == null ? void 0 : overSpecs2.node.id) === node3?.id && overSpecs2?.percentage === overPercentage)) {
if (ContextMenuStore.getState().menu != null) {
hideContextMenu();
}
let overNode = node3;
let percentage = overPercentage;
let item3 = item;
if (item != null) {
const r27 = overSpecs2 == null ? void 0 : overSpecs2.item.recyclerKey;
const recyclerKey = item.recyclerKey;
overNode = node3;
percentage = overPercentage;
item3 = item;
if (r27 !== recyclerKey) {
map.clear();
if (dragSpecs2.item.recyclerKey !== item.recyclerKey) {
let recyclerKey2 = dragSpecs2.item.recyclerKey;
if (recyclerKey2 == null) {
recyclerKey2 = "";
}
map.set(recyclerKey2, 0);
map.set(item.recyclerKey, 2 * guildWrapperSize);
}
const itemAndNodeFromTouchEvent2 = getItemAndNodeFromTouchEvent(a0, true, ref, map);
item3 = itemAndNodeFromTouchEvent2.item;
percentage = itemAndNodeFromTouchEvent2.overPercentage;
overNode = itemAndNodeFromTouchEvent2.node;
}
}
L73: {
const { node: node4, item: item2 } = dragSpecs2;
const r128 = item2 != null;
overState = void 0;
if (r128) {
const r130 = item3 != null;
overState = void 0;
if (r130) {
const r131 = node4 != null;
overState = void 0;
if (r131) {
const r132 = overNode != null;
overState = void 0;
if (r132) {
const id2 = node4.id;
const id3 = overNode.id;
overState = "self";
if (id2 !== id3) {
L44: {
const type2 = item2.type;
if (FastListItemTypes.SECTION !== type2) {
const ITEM = FastListItemTypes.ITEM;
r145 = void 0;
if (ITEM !== type2) {
break L44;
}
}
const type3 = item3.type;
r145 = FastListItemTypes.SECTION !== type3 ? FastListItemTypes.ITEM === type3 ? item3.recyclerKey !== item2.recyclerKey ? percentage < 0.5 ? "before" : "after" : "self" : void 0 : item3.recyclerKey !== item2.recyclerKey ? percentage < 0.5 ? "before" : "after" : "self";
}
const type = node4.type;
const FOLDER = GuildsNodeType.FOLDER;
const type4 = overNode.type;
const FOLDER2 = GuildsNodeType.FOLDER;
if (type === FOLDER) {
const r165 = type4 === FOLDER2;
if (r145 === "after") {
if (r165) {
const expanded = overNode.expanded;
overState = void 0;
if (expanded) {
break L73;
}
}
if (!r165 && overNode.parentId != null) {
const node5 = SortedGuildStore.getGuildsTree().getNode(overNode.parentId);
if (node5 != null) {
const r180 = node5.children[node5.children.length - 1];
if (r180 != null) {
const id4 = r180.id;
const id5 = overNode.id;
overState = void 0;
if (id4 !== id5) {
break L73;
}
}
}
}
}
if (r145 === "before" && !r165) {
const r185 = overNode.parentId != null;
overState = void 0;
if (r185) {
break L73;
}
}
}
overState = r145;
if (r145 !== "self") {
overState = r145;
if (r145 != null) {
if (node4.type === GuildsNodeType.GUILD && overNode.type === GuildsNodeType.GUILD && overNode.parentId == null) {
overState = r145;
if (!(percentage > 0.35)) {
break L73;
}
overState = r145;
if (!(percentage < 0.65)) {
break L73;
}
if (r145 === "before") {
overState = "convert-before";
break L73;
}
overState = r145;
if (overState !== "after") {
break L73;
}
overState = "convert-after";
break L73;
}
overState = node4.type === GuildsNodeType.GUILD ? overNode.type === GuildsNodeType.FOLDER ? overNode.expanded ? r145 : percentage > 0.35 ? percentage < 0.65 ? "drop-into" : r145 : r145 : r145 : r145;
}
}
}
}
}
}
}
}
if (overState == null) {
overNode = dragSpecs2.node;
item3 = dragSpecs2.item;
overState = "self";
}
if (overNode != null && overSpecs2 != null) {
triggerHapticsAndAnnouncementsIfNecessary({
type: "drag-move",
dragNode: dragSpecs2.node,
overNode,
overState
});
}
if (!(overNode == null || item3 == null || overSpecs2?.node === overNode && overSpecs2?.item === item3 && overSpecs2?.state === overState)) {
overSpecs = {
node: overNode,
item: item3,
state: overState,
percentage
};
}
}
const r221 = listInsets2.get().start + GESTURE_ACCELERATION_RANGE;
const r226 = windowSize2 - listInsets2.get().end - GESTURE_ACCELERATION_RANGE;
const r228 = a0 < r221 ? -1 * Math.max(Math.min(Math.min(r13.initialY, r221) - a0, GESTURE_ACCELERATION_RANGE) / GESTURE_ACCELERATION_RANGE, 0) : a0 > r226 ? Math.max(Math.min(a0 - Math.max(r13.initialY, r226), GESTURE_ACCELERATION_RANGE) / GESTURE_ACCELERATION_RANGE, 0) : 0;
sharedValue.set(r228);
let r256 = r228 === 0;
if (r256 && frameCallback.isActive) {
sharedValue2.set(0);
frameCallback.setActive(false);
} else {
if (!r256) {
r256 = frameCallback.isActive;
}
if (!r256) {
frameCallback.setActive(true);
}
}
batchUpdates(() => {
if (dragSpecs2 != null && dragSpecs2.node.type === GuildsNodeType.FOLDER && dragSpecs2.node.expanded) {
GuildActionCreators.toggleGuildFolderExpand(dragSpecs2.node.id);
const node3 = SortedGuildStore.getGuildsTree().getNode(dragSpecs2.node.id);
if (node3 !== dragSpecs2.node && node3?.type === GuildsNodeType.FOLDER) {
dragSpecs2 = {
...dragSpecs2,
node: node3
};
}
}
setStateShallow({
overSpecs,
dragSpecs: dragSpecs2,
windowSize: windowSize2
});
});
}
}, [sharedValue, sharedValue2, frameCallback, guildWrapperSize]);
const externalScrollEventHandler = useExternalScrollEventHandler({
id: "guilds"
});
const callback6 = useCallback(() => {
const r8 = GuildsBarDnDStore.getState().gestureState.get();
if (r8.mode === "drag") {
callback5(r8.absoluteY);
}
}, [callback5]);
const memo = useMemo(() => {
const r8 = Gesture.LongPress();
const h = function h(a0, a1) {
const r10 = a0.changedTouches[0];
let r8 = r10?.absoluteY;
if (r8 == null) {
r8 = 0;
}
L11: {
const r12 = r8 + scrollPosition.get();
if (r10 != null && (gestureState.get().mode !== "cancel" && (!(r12 < DragRegion.get().min) && !(r12 > DragRegion.get().max)))) {
if (a0.changedTouches.length !== 1) {
break L11;
}
_ReanimatedRexport.runOnJS(callback2)(r10.absoluteX, r10.absoluteY);
} else {
a1.fail();
}
}
};
h.__closure = {
scrollPosition,
gestureState,
DragRegion,
runOnJS: _ReanimatedRexport.runOnJS,
handleTouchesDown: callback2
};
h.__workletHash = 5430653816983;
h.__initData = __initData6;
const r31 = r8.onTouchesDown(h);
const f = function f(a0, a1) {
if (gestureState.get().mode === "cancel") {
a1.fail();
}
};
f.__closure = {
gestureState
};
f.__workletHash = 8960390413776;
f.__initData = __initData5;
const r37 = r31.onTouchesMove(f);
const c = function c({ absoluteX, absoluteY }) {
if (gestureState.get().mode !== "cancel") {
_ReanimatedRexport.runOnJS(callback3)(absoluteX, absoluteY);
}
};
c.__closure = {
gestureState,
runOnJS: _ReanimatedRexport.runOnJS,
handlePress: callback3
};
c.__workletHash = 2121892092583;
c.__initData = __initData4;
const r47 = r37.onStart(c);
const u = function u() {
if (gestureState.get().mode === "cancel") {
_ReanimatedRexport.runOnJS(callback)("cancel");
}
};
u.__closure = {
gestureState,
runOnJS: _ReanimatedRexport.runOnJS,
handleGestureEnd: callback
};
u.__workletHash = 2371934536573;
u.__initData = __initData3;
const r57 = r47.onEnd(u);
const l = function l() {
if (!(gestureState.get().mode != null && gestureState.get().mode !== "cancel")) {
_ReanimatedRexport.runOnJS(callback)("cancel");
}
};
l.__closure = {
gestureState,
runOnJS: _ReanimatedRexport.runOnJS,
handleGestureEnd: callback
};
l.__workletHash = 8240921685123;
l.__initData = __initData2;
const r65 = r57.onTouchesCancelled(l);
const shouldCancelWhenOutside = Gesture.Pan().manualActivation(true).simultaneousWithExternalGesture(animatedRef, gesture).shouldCancelWhenOutside(false);
const r81 = function(a0, a1) {
L11: {
const r15 = a0.changedTouches[0];
if (gestureState.get().mode === "pressed" && r15 != null) {
const r33 = r15.absoluteX - gestureState.get().initialX;
const r39 = Math.abs(r15.absoluteY - gestureState.get().absoluteY);
if (r33 > 10 && r33 > r39) {
gestureState.set({
...gestureState.get(),
mode: "contextmenu",
absoluteX: r15.absoluteX,
absoluteY: r15.absoluteY
});
dragDropInProgress.set(false);
a1.activate();
_ReanimatedRexport.runOnJS(callback4)(r15.absoluteX, r15.absoluteY);
break L11;
}
if (!(r39 > 10)) {
break L11;
}
gestureState.set({
...gestureState.get(),
mode: "drag",
initialX: r15.absoluteX,
initialY: r15.absoluteY,
absoluteX: r15.absoluteX,
absoluteY: r15.absoluteY
});
a1.activate();
dragDropInProgress.set(true);
_ReanimatedRexport.runOnJS(callback5)(r15.absoluteY);
} else if (!(gestureState.get().mode !== "cancel" && r15 != null)) {
a1.fail();
dragDropInProgress.set(false);
}
}
};
r81.__closure = {
gestureState,
dragDropInProgress,
DRAG_GESTURE_MINIMUM_DISTANCE: 10,
runOnJS: _ReanimatedRexport.runOnJS,
handleContextMenuDrag: callback4,
handleGuildDrag: callback5
};
r81.__workletHash = 15225957003871;
r81.__initData = __initData10;
const r89 = shouldCancelWhenOutside.onTouchesMove(r81);
const r91 = function(a0) {
L14: {
const { absoluteX, absoluteY } = a0;
if (gestureState.get().mode === "drag") {
if (absoluteX === gestureState.get().absoluteX && absoluteY === gestureState.get().absoluteY) {
break L14;
}
let initialY = gestureState.get().initialY;
const r44 = listInsets.get().start + GESTURE_ACCELERATION_RANGE;
const r0 = windowSize - listInsets.get().end - GESTURE_ACCELERATION_RANGE;
if (initialY < r44 && absoluteY > initialY || initialY > r0 && absoluteY < initialY) {
initialY = absoluteY;
}
gestureState.set({
...gestureState.get(),
absoluteX,
absoluteY,
initialY
});
_ReanimatedRexport.runOnJS(callback5)(absoluteY);
} else if (gestureState.get().mode === "contextmenu") {
_ReanimatedRexport.runOnJS(callback4)(absoluteX, absoluteY);
}
}
};
r91.__closure = {
gestureState,
listInsets,
GESTURE_ACCELERATION_RANGE,
windowSize,
runOnJS: _ReanimatedRexport.runOnJS,
handleGuildDrag: callback5,
handleContextMenuDrag: callback4
};
r91.__workletHash = 14488930469604;
r91.__initData = __initData9;
const r100 = r89.onUpdate(r91);
const n = function n() {
if (gestureState.get().mode === "drag") {
_ReanimatedRexport.runOnJS(callback)("drop");
} else if (gestureState.get().mode === "contextmenu") {
_ReanimatedRexport.runOnJS(callback)("contextmenu-open");
} else {
_ReanimatedRexport.runOnJS(callback)("cancel");
}
};
n.__closure = {
gestureState,
runOnJS: _ReanimatedRexport.runOnJS,
handleGestureEnd: callback
};
n.__workletHash = 9863070264039;
n.__initData = __initData8;
const r109 = r100.onEnd(n);
const t = function t() {
_ReanimatedRexport.runOnJS(callback)("cancel");
};
t.__closure = {
runOnJS: _ReanimatedRexport.runOnJS,
handleGestureEnd: callback
};
t.__workletHash = 9715999020978;
t.__initData = __initData7;
return Gesture.Simultaneous(r65, r109.onTouchesCancelled(t));
}, [dragDropInProgress, DragRegion, gestureState, callback4, callback, callback5, callback3, callback2, listInsets, scrollPosition, animatedRef, windowSize, gesture]);
useEffect(() => GuildsBarDnDStore.subscribe((a0) => {
L6: {
const { dragSpecs: dragSpecs3, dropSpecs } = a0;
if (dragSpecs3 == null && dropSpecs == null) {
const current = ref.current;
if (current == null) {
break L6;
}
current.setDisableRecycling(false);
} else {
const current2 = ref.current;
if (current2 != null) {
current2.setDisableRecycling(true);
}
}
}
}), []);
return {
scrollPosition,
gesture: memo,
scrollerRef: animatedRef,
fastListRef: ref,
persistantKeys,
onFastListScroll: callback6,
onFastListScrollWorklet: externalScrollEventHandler
};
};