소스 검색

canSendMessages + groupChat fix

Viktoriia 1 주 전
부모
커밋
038837aa51

+ 34 - 14
src/screens/InAppScreens/MessagesScreen/GroupChatScreen/index.tsx

@@ -128,13 +128,15 @@ const GroupChatScreen = ({ route }: { route: any }) => {
     name,
     avatar,
     userType = 'normal',
-    announcement
+    announcement,
+    canSendMessages
   }: {
     group_token: string;
     name: string;
     avatar: string | null;
     userType: 'normal' | 'not_exist' | 'blocked';
     announcement: 0 | 1;
+    canSendMessages: 0 | 1;
   } = route.params;
   const groupName =
     userType === 'blocked'
@@ -170,6 +172,7 @@ const GroupChatScreen = ({ route }: { route: any }) => {
     canSeeMembers
   );
 
+  const [storedMembers, setStoredMembers] = useState<any>(null);
   const [isSearchingMessage, setIsSearchingMessage] = useState<number | null>(null);
 
   const swipeableRowRef = useRef<Swipeable | null>(null);
@@ -667,9 +670,29 @@ const GroupChatScreen = ({ route }: { route: any }) => {
   useEffect(() => {
     if (data && data.settings) {
       setCanSeeMembers(data.settings.members_can_see_members === 1 || data.settings.admin === 1);
+      storage.set(
+        `canSeeMembers-${group_token}`,
+        data.settings.members_can_see_members === 1 || data.settings.admin === 1
+      );
+    } else {
+      const parsedData =
+        (storage.get(`canSeeMembers-${group_token}`, StoreType.BOOLEAN) as boolean) ?? true;
+      setCanSeeMembers(parsedData);
     }
   }, [data]);
 
+  useEffect(() => {
+    if (members && members.settings) {
+      setStoredMembers(members.settings);
+      storage.set(`members-${group_token}`, JSON.stringify(members.settings));
+    } else {
+      const parsedMembers = JSON.parse(
+        (storage.get(`members-${group_token}`, StoreType.STRING) as string) ?? '[]'
+      );
+      setStoredMembers(parsedMembers);
+    }
+  }, [members]);
+
   useEffect(() => {
     let unsubscribe: any;
 
@@ -1630,10 +1653,10 @@ const GroupChatScreen = ({ route }: { route: any }) => {
   );
 
   const replaceMentionsWithNames = (text: string) => {
-    const userList = members?.settings ?? [];
+    const userList = storedMembers ?? [];
 
     return text.replace(/@\{(\d+)\}/g, (_, uid) => {
-      const user = userList.find((m) => m.uid === +uid);
+      const user = userList.find((m: any) => m.uid === +uid);
       return user ? `@${user.name}` : `@{${uid}}`;
     });
   };
@@ -1705,7 +1728,7 @@ const GroupChatScreen = ({ route }: { route: any }) => {
 
       await triggerMessagePush(token, sendWsEvent);
     },
-    [replyMessage, editingMessage, isConnected, members]
+    [replyMessage, editingMessage, isConnected, storedMembers]
   );
 
   const addReaction = async (messageId: number, reaction: string) => {
@@ -2022,7 +2045,7 @@ const GroupChatScreen = ({ route }: { route: any }) => {
   };
 
   const renderInputToolbar = (props: any) => {
-    if (!chatData?.can_send_messages) return null;
+    if (!canSendMessages) return null;
 
     return (
       <>
@@ -2094,8 +2117,8 @@ const GroupChatScreen = ({ route }: { route: any }) => {
       setShowMentions(true);
       const searchText = mentionMatch[2].slice(1).toLowerCase();
       setMentionList(
-        (members?.settings ?? [])?.filter(
-          (m) => m.name.toLowerCase().includes(searchText) && m.uid !== +currentUserId
+        (storedMembers ?? [])?.filter(
+          (m: any) => m.name.toLowerCase().includes(searchText) && m.uid !== +currentUserId
         )
       );
     } else {
@@ -2112,7 +2135,7 @@ const GroupChatScreen = ({ route }: { route: any }) => {
 
   const transformMessageForServer = (text: string) => {
     let transformedText = text;
-    members?.settings?.forEach((member) => {
+    storedMembers?.forEach((member: any) => {
       const mentionRegex = new RegExp(`@${member.name}\\b`, 'g');
       transformedText = transformedText.replace(mentionRegex, `@{${member.uid}}`);
     });
@@ -2223,11 +2246,8 @@ const GroupChatScreen = ({ route }: { route: any }) => {
 
       <GestureHandlerRootView style={styles.container}>
         {giftedMessagesWithUnread &&
-        ((canSeeMembers && members?.settings) ||
-          (data &&
-            data.settings &&
-            data.settings.members_can_see_members === 0 &&
-            data.settings.admin === 0) ||
+        ((canSeeMembers && storedMembers) ||
+          (data && data.settings && !canSeeMembers) ||
           !isConnected) ? (
           <GiftedChat
             messages={giftedMessagesWithUnread as CustomMessage[]}
@@ -2374,7 +2394,7 @@ const GroupChatScreen = ({ route }: { route: any }) => {
                 pattern: /@\{(\d+)\}/g,
                 renderText: (messageText: string) => {
                   const tagId = messageText.slice(2, messageText.length - 1);
-                  const user = (members?.settings ?? [])?.find((m) => m.uid === +tagId);
+                  const user = (storedMembers ?? [])?.find((m: any) => m.uid === +tagId);
 
                   if (user) {
                     return (

+ 2 - 1
src/screens/InAppScreens/MessagesScreen/index.tsx

@@ -460,7 +460,8 @@ const MessagesScreen = () => {
                 avatar: item.chat.avatar,
                 userType: item.chat.userType ?? 'normal',
                 announcement: item.chat.announcement,
-                scrollToMessageId: item?.messageId ?? null
+                scrollToMessageId: item?.messageId ?? null,
+                canSendMessages: item.chat?.canSendMessages
               }
             );
           }}

+ 1 - 0
src/screens/InAppScreens/MessagesScreen/types.ts

@@ -20,6 +20,7 @@ export type Chat = {
   muted: 0 | 1;
   userType: 'normal' | 'not_exist' | 'blocked';
   announcement: 0 | 1;
+  canSendMessages: 0 | 1
 };
 
 export type Blocked = {