|
|
@@ -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 (
|