From 7de79225791c3480e3859ce9297da38589a4fc37 Mon Sep 17 00:00:00 2001 From: kmmiio99o Date: Sat, 1 Aug 2026 19:12:37 +0200 Subject: [PATCH] feat: add join server sheet button --- .../src/components/ServerDrawerSheet.tsx | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/plugins/ServerDrawer/src/components/ServerDrawerSheet.tsx b/plugins/ServerDrawer/src/components/ServerDrawerSheet.tsx index d3ac01a..ca07a14 100644 --- a/plugins/ServerDrawer/src/components/ServerDrawerSheet.tsx +++ b/plugins/ServerDrawer/src/components/ServerDrawerSheet.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { View, Dimensions, StyleSheet, BackHandler } from "react-native"; +import { View, Text, Pressable, Animated, Dimensions, StyleSheet, BackHandler } from "react-native"; import { find, findByProps, findByStoreName } from "@vendetta/metro"; import { GuildNode } from "../utils/theme"; import GuildItem from "./GuildItem"; @@ -11,6 +11,13 @@ const RootNav = findByProps("getRootNavigationRef"); const Haptic = findByProps("triggerHapticFeedback", "HapticFeedbackTypes"); const Routing = findByProps("transitionToGuild"); +const CreateJoinGuildMod = find((m: any) => typeof m?.handleCreateJoinGuildPress === "function"); +const CirclePlusIcon = find((m: any) => m?.CirclePlusIcon)?.CirclePlusIcon; +const rawColors = findByProps("colors", "unsafe_rawColors")?.unsafe_rawColors; + +const createJoinBg = rawColors?.GREEN_360; +const createJoinIconColor = rawColors?.WHITE; + const ExternalCoordinationMod = find((m: any) => m?.QuestDockExternalCoordinationContext); const ExternalContext = ExternalCoordinationMod?.QuestDockExternalCoordinationContext; const QuestDockMode = find((m: any) => m?.QuestDockMode?.COLLAPSED != null)?.QuestDockMode; @@ -19,6 +26,33 @@ const ICON = 48; const GAP = 6; const PAD = 12; +function CreateJoinButton() { + const scale = React.useRef(new Animated.Value(1)).current; + const scaleDown = React.useCallback(() => { + Animated.spring(scale, { toValue: 0.9, useNativeDriver: true }).start(); + }, [scale]); + const scaleUp = React.useCallback(() => { + Animated.spring(scale, { toValue: 1, useNativeDriver: true }).start(); + }, [scale]); + + const onPress = React.useCallback(() => { + Haptic?.triggerHapticFeedback?.(Haptic.HapticFeedbackTypes.SOFT); + CreateJoinGuildMod?.handleCreateJoinGuildPress?.(); + }, []); + + return ( + + + {CirclePlusIcon ? ( + + ) : ( + {"+"} + )} + + + ); +} + export default function ServerDrawerSheet({ gestureContext }: { gestureContext: any }) { const pick = React.useCallback((id: string) => { Haptic?.triggerHapticFeedback(Haptic.HapticFeedbackTypes.SOFT); @@ -81,6 +115,7 @@ export default function ServerDrawerSheet({ gestureContext }: { gestureContext: ? : )} + ); @@ -98,4 +133,18 @@ const st = StyleSheet.create({ paddingTop: 4, paddingBottom: 16, }, + createJoin: { + width: ICON, + height: ICON, + borderRadius: 16, + backgroundColor: createJoinBg, + alignItems: "center", + justifyContent: "center", + }, + createJoinFallback: { + color: createJoinIconColor, + fontSize: 28, + fontWeight: "700", + lineHeight: 30, + }, });