diff --git a/app/actions/remote/channel.ts b/app/actions/remote/channel.ts index 7f2ffb191..1e2436642 100644 --- a/app/actions/remote/channel.ts +++ b/app/actions/remote/channel.ts @@ -1262,3 +1262,15 @@ export const handleKickFromChannel = async (serverUrl: string, channelId: string logDebug('cannot kick user from channel', error); } }; + +export const getGroupMessageMembersCommonTeams = async (serverUrl: string, channelId: string) => { + try { + const client = NetworkManager.getClient(serverUrl); + const teams = await client.getGroupMessageMembersCommonTeams(channelId); + return {teams}; + } catch (error) { + logDebug('error on getGroupMessageMembersCommonTeams', getFullErrorMessage(error)); + forceLogoutIfNecessary(serverUrl, error); + return {error}; + } +}; diff --git a/app/client/rest/channels.ts b/app/client/rest/channels.ts index 1fd390b60..4bfbafa3e 100644 --- a/app/client/rest/channels.ts +++ b/app/client/rest/channels.ts @@ -44,6 +44,7 @@ export interface ClientChannelsMix { searchAllChannels: (term: string, teamIds: string[], archivedOnly?: boolean) => Promise; updateChannelMemberSchemeRoles: (channelId: string, userId: string, isSchemeUser: boolean, isSchemeAdmin: boolean) => Promise; getMemberInChannel: (channelId: string, userId: string) => Promise; + getGroupMessageMembersCommonTeams: (channelId: string) => Promise; } const ClientChannels = >(superclass: TBase) => class extends superclass { @@ -350,6 +351,13 @@ const ClientChannels = >(superclass: TBase {method: 'get'}, ); }; + + getGroupMessageMembersCommonTeams = (channelId: string) => { + return this.doFetch( + `${this.getChannelRoute(channelId)}/common_teams`, + {method: 'get'}, + ); + }; }; export default ClientChannels; diff --git a/app/client/rest/files.ts b/app/client/rest/files.ts index 0c849c1de..fb56a30f8 100644 --- a/app/client/rest/files.ts +++ b/app/client/rest/files.ts @@ -2,6 +2,7 @@ // See LICENSE.txt for license information. import {toMilliseconds} from '@utils/datetime'; +import {logDebug} from '@utils/log'; import type ClientBase from './base'; import type {ClientResponse, ClientResponseError, ProgressPromise, UploadRequestOptions} from '@mattermost/react-native-network-client'; @@ -89,6 +90,7 @@ const ClientFiles = >(superclass: TBase) = searchFilesWithParams = async (teamId: string, params: FileSearchParams) => { this.analytics?.trackAPI('api_files_search'); const endpoint = teamId ? `${this.getTeamRoute(teamId)}/files/search` : `${this.getFilesRoute()}/search`; + logDebug(endpoint); return this.doFetch(endpoint, {method: 'post', body: params}); }; diff --git a/app/components/channel_actions/convert_to_channel/convert_to_channel_label.tsx b/app/components/channel_actions/convert_to_channel/convert_to_channel_label.tsx index 8a766d803..0033dd512 100644 --- a/app/components/channel_actions/convert_to_channel/convert_to_channel_label.tsx +++ b/app/components/channel_actions/convert_to_channel/convert_to_channel_label.tsx @@ -9,12 +9,16 @@ import {Screens} from '@app/constants'; import {dismissBottomSheet, goToScreen} from '@app/screens/navigation'; import {preventDoubleTap} from '@app/utils/tap'; -const ConvertToChannelLabel = () => { +type Props = { + channelId: string; +} + +const ConvertToChannelLabel = (props: Props) => { const goToConvertToPrivateChannl = preventDoubleTap(async () => { await dismissBottomSheet(); const title = 'Convert to Private Channel'; - goToScreen(Screens.CONVERT_GM_TO_CHANNEL, title, {}); + goToScreen(Screens.CONVERT_GM_TO_CHANNEL, title, {channelId: props.channelId}); }); const {formatMessage} = useIntl(); diff --git a/app/components/channel_actions/manage_members_label/index.tsx b/app/components/channel_actions/manage_members_label/index.tsx index 207c7c370..4f546bc6e 100644 --- a/app/components/channel_actions/manage_members_label/index.tsx +++ b/app/components/channel_actions/manage_members_label/index.tsx @@ -11,7 +11,7 @@ import {queryUsersById} from '@queries/servers/user'; import ManageMembersLabel from './manage_members_label'; import type {WithDatabaseArgs} from '@typings/database/database'; - + type OwnProps = WithDatabaseArgs & { isDefaultChannel: boolean; userId: string; diff --git a/app/components/channel_actions/manage_members_label/manage_members_label.tsx b/app/components/channel_actions/manage_members_label/manage_members_label.tsx index dc3cc559f..86364a80d 100644 --- a/app/components/channel_actions/manage_members_label/manage_members_label.tsx +++ b/app/components/channel_actions/manage_members_label/manage_members_label.tsx @@ -49,7 +49,7 @@ const messages = defineMessages({ type Props = { canRemoveUser: boolean; - channelId: string; + channelId: string; manageOption: ManageOptionsTypes; testID?: string; userId: string; diff --git a/app/screens/channel_files/channel_files.tsx b/app/screens/channel_files/channel_files.tsx index d31da9cd5..fbeef3239 100644 --- a/app/screens/channel_files/channel_files.tsx +++ b/app/screens/channel_files/channel_files.tsx @@ -94,6 +94,7 @@ function ChannelFiles({ useAndroidHardwareBackHandler(componentId, close); + // LOL const handleSearch = useCallback(async (searchTerm: string, ftr: FileFilter) => { const t = Date.now(); lastSearchRequest.current = t; diff --git a/app/screens/channel_info/channel_info.tsx b/app/screens/channel_info/channel_info.tsx index a99773663..526c71fda 100644 --- a/app/screens/channel_info/channel_info.tsx +++ b/app/screens/channel_info/channel_info.tsx @@ -77,6 +77,7 @@ const ChannelInfo = ({ useNavButtonPressed(closeButtonId, componentId, onPressed, [onPressed]); useAndroidHardwareBackHandler(componentId, onPressed); + // LOL return ( {type === General.GM_CHANNEL && <> - + } diff --git a/app/screens/convert_gm_to_channel/convert_gm_to_channel.tsx b/app/screens/convert_gm_to_channel/convert_gm_to_channel.tsx index e9e24fc47..5f720f3b3 100644 --- a/app/screens/convert_gm_to_channel/convert_gm_to_channel.tsx +++ b/app/screens/convert_gm_to_channel/convert_gm_to_channel.tsx @@ -3,29 +3,51 @@ import React, {useEffect, useState} from 'react'; +import {getGroupMessageMembersCommonTeams} from '@actions/remote/channel'; +import {useServerUrl} from '@app/context/server'; + import {ConvertGMToChannelForm} from './convert_gm_to_channel_form'; import {Loader} from './loader'; type Props = { - + channelId: string; } const loadingIndicatorTimeout = 1200; const ConvertGMToChannel = (props: Props) => { const [loadingAnimationTimeout, setLoadingAnimationTimeout] = useState(false); + const [commonTeamsFetched, setCommonTeamsFetched] = useState(false); + + const [commonTeams, setCommonTeams] = useState([]); + + const serverUrl = useServerUrl(); useEffect(() => { setTimeout(() => setLoadingAnimationTimeout(true), loadingIndicatorTimeout); + + async function work() { + const {teams} = await getGroupMessageMembersCommonTeams(serverUrl, props.channelId); + if (!teams) { + return; + } + + setCommonTeams(teams); + setCommonTeamsFetched(true); + } + + work(); }, []); - const showLoader = !loadingAnimationTimeout; + const showLoader = !loadingAnimationTimeout && !commonTeamsFetched; if (showLoader) { return (); } return ( - + ); }; diff --git a/app/screens/convert_gm_to_channel/convert_gm_to_channel_form.tsx b/app/screens/convert_gm_to_channel/convert_gm_to_channel_form.tsx index 6f71f8780..cf22e7118 100644 --- a/app/screens/convert_gm_to_channel/convert_gm_to_channel_form.tsx +++ b/app/screens/convert_gm_to_channel/convert_gm_to_channel_form.tsx @@ -25,7 +25,11 @@ const getStyleFromTheme = makeStyleSheetFromTheme((theme: Theme) => { }; }); -export const ConvertGMToChannelForm = () => { +type Props = { + commonTeams: Team[]; +} + +export const ConvertGMToChannelForm = ({commonTeams}: Props) => { const theme = useTheme(); const styles = getStyleFromTheme(theme); @@ -38,7 +42,9 @@ export const ConvertGMToChannelForm = () => { return ( - +