Bläddra i källkod

can create group func

Viktoriia 4 månader sedan
förälder
incheckning
9bbad26925

+ 7 - 1
src/modules/api/chat/chat-api.ts

@@ -61,6 +61,10 @@ export interface PostGetGroupMembersReturn extends ResponseType {
   }[];
 }
 
+export interface PostCanCreateGroupReturn extends ResponseType {
+  authorized: 0 | 1;
+}
+
 interface Attachement {
   id: number;
   filename: string;
@@ -471,5 +475,7 @@ export const chatApi = {
       message_id
     }),
   removeGroupFromList: (token: string, group_token: string) =>
-    request.postForm<ResponseType>(API.REMOVE_GROUP_FROM_LIST, { token, group_token })
+    request.postForm<ResponseType>(API.REMOVE_GROUP_FROM_LIST, { token, group_token }),
+  canCreateGroup: (token: string) =>
+    request.postForm<PostCanCreateGroupReturn>(API.CAN_CREATE_GROUP, { token })
 };

+ 2 - 1
src/modules/api/chat/chat-query-keys.tsx

@@ -49,5 +49,6 @@ export const chatQueryKeys = {
   updateGroupSettings: () => ['updateGroupSettings'] as const,
   getGroupMessageStatus: (token: string, group_token: string, message_id: number) =>
     ['getGroupMessageStatus', token, group_token, message_id] as const,
-  removeGroupFromList: () => ['removeGroupFromList'] as const
+  removeGroupFromList: () => ['removeGroupFromList'] as const,
+  canCreateGroup: (token: string) => ['canCreateGroup', token] as const
 };

+ 1 - 0
src/modules/api/chat/queries/index.ts

@@ -36,3 +36,4 @@ export * from './use-post-get-group-members';
 export * from './use-post-update-group-settings';
 export * from './use-post-get-group-message-status';
 export * from './use-post-remove-group-chat-from-conversation-list';
+export * from './use-post-can-create-group';

+ 17 - 0
src/modules/api/chat/queries/use-post-can-create-group.tsx

@@ -0,0 +1,17 @@
+import { useQuery } from '@tanstack/react-query';
+
+import { chatQueryKeys } from '../chat-query-keys';
+import { chatApi, type PostCanCreateGroupReturn } from '../chat-api';
+
+import type { BaseAxiosError } from '../../../../types';
+
+export const usePostCanCreateGroupQuery = (token: string, enabled: boolean) => {
+  return useQuery<PostCanCreateGroupReturn, BaseAxiosError>({
+    queryKey: chatQueryKeys.canCreateGroup(token),
+    queryFn: async () => {
+      const response = await chatApi.canCreateGroup(token);
+      return response.data;
+    },
+    enabled
+  });
+};

+ 12 - 7
src/screens/InAppScreens/MessagesScreen/Components/RouteSearch.tsx

@@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
 import { View, Text, Image, TouchableOpacity, StyleSheet, ActivityIndicator } from 'react-native';
 import { FlashList } from '@shopify/flash-list';
 import { storage, StoreType } from 'src/storage';
-import { usePostSearchUsers } from '@api/chat';
+import { usePostCanCreateGroupQuery, usePostSearchUsers } from '@api/chat';
 import { API_HOST } from 'src/constants';
 import { Colors } from 'src/theme';
 import { useNavigation } from '@react-navigation/native';
@@ -18,6 +18,8 @@ const RouteSearch = () => {
   const router = useSheetRouter('search-modal');
   const navigation = useNavigation();
   const token = storage.get('token', StoreType.STRING) as string;
+
+  const { data: canCreateGroup } = usePostCanCreateGroupQuery(token, true);
   const [searchQuery, setSearchQuery] = useState('');
 
   const { data: searchResult, isFetching } = usePostSearchUsers(
@@ -26,8 +28,6 @@ const RouteSearch = () => {
     searchQuery.length > 1
   );
 
-  useEffect(() => {}, [searchResult]);
-
   const renderItem = ({ item }: { item: any }) => (
     <TouchableOpacity
       style={styles.itemContainer}
@@ -84,10 +84,15 @@ const RouteSearch = () => {
         icon={<SearchIcon fill={'#C8C8C8'} width={14} height={14} />}
       />
 
-      <TouchableOpacity style={styles.newGroup} onPress={() => router?.navigate('route-add-users')}>
-        <Text style={styles.text}>New group chat</Text>
-        <NomadsIcon fill={Colors.DARK_BLUE} width={20} height={16} />
-      </TouchableOpacity>
+      {canCreateGroup && canCreateGroup.authorized === 1 ? (
+        <TouchableOpacity
+          style={styles.newGroup}
+          onPress={() => router?.navigate('route-add-users')}
+        >
+          <Text style={styles.text}>New group chat</Text>
+          <NomadsIcon fill={Colors.DARK_BLUE} width={20} height={16} />
+        </TouchableOpacity>
+      ) : null}
 
       {isFetching ? (
         <ActivityIndicator size="large" color={Colors.DARK_BLUE} />

+ 4 - 2
src/types/api.ts

@@ -180,7 +180,8 @@ export enum API_ENDPOINT {
   GET_GROUP_MEMBERS = 'get-group-members',
   UPDATE_GROUP_SETTINGS = 'update-group-settings',
   GET_GROUP_MESSAGE_STATUS = 'get-group-message-status',
-  REMOVE_GROUP_FROM_LIST = 'remove-group-chat-from-conversation-list'
+  REMOVE_GROUP_FROM_LIST = 'remove-group-chat-from-conversation-list',
+  CAN_CREATE_GROUP = 'can-create-group'
 }
 
 export enum API {
@@ -335,7 +336,8 @@ export enum API {
   GET_GROUP_MEMBERS = `${API_ROUTE.CHAT}/${API_ENDPOINT.GET_GROUP_MEMBERS}`,
   UPDATE_GROUP_SETTINGS = `${API_ROUTE.CHAT}/${API_ENDPOINT.UPDATE_GROUP_SETTINGS}`,
   GET_GROUP_MESSAGE_STATUS = `${API_ROUTE.CHAT}/${API_ENDPOINT.GET_GROUP_MESSAGE_STATUS}`,
-  REMOVE_GROUP_FROM_LIST = `${API_ROUTE.CHAT}/${API_ENDPOINT.REMOVE_GROUP_FROM_LIST}`
+  REMOVE_GROUP_FROM_LIST = `${API_ROUTE.CHAT}/${API_ENDPOINT.REMOVE_GROUP_FROM_LIST}`,
+  CAN_CREATE_GROUP = `${API_ROUTE.CHAT}/${API_ENDPOINT.CAN_CREATE_GROUP}`
 }
 
 export type BaseAxiosError = AxiosError;