From cdbafea6074f3559889198af4984e99f2c759f0d Mon Sep 17 00:00:00 2001 From: Caleb Roseland Date: Wed, 4 Oct 2023 11:22:58 -0500 Subject: [PATCH] fix: editing DM/GM channel header --- app/actions/remote/channel.ts | 12 +++++++++--- app/client/rest/channels.ts | 2 +- .../create_or_edit_channel.tsx | 16 ++++++++-------- types/api/channels.d.ts | 7 +++++++ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app/actions/remote/channel.ts b/app/actions/remote/channel.ts index 296b9f424..eac64e338 100644 --- a/app/actions/remote/channel.ts +++ b/app/actions/remote/channel.ts @@ -249,13 +249,14 @@ export async function createChannel(serverUrl: string, displayName: string, purp } } -export async function patchChannel(serverUrl: string, channelPatch: Partial & {id: string}) { +export async function patchChannel(serverUrl: string, channelId: string, channelPatch: ChannelPatch) { try { const client = NetworkManager.getClient(serverUrl); const {database, operator} = DatabaseManager.getServerDatabaseAndOperator(serverUrl); - const channelData = await client.patchChannel(channelPatch.id, channelPatch); + const channelData = await client.patchChannel(channelId, channelPatch); const models = []; + const channelInfo = (await getChannelInfo(database, channelData.id)); if (channelInfo && (channelInfo.purpose !== channelData.purpose || channelInfo.header !== channelData.header)) { channelInfo.prepareUpdate((v) => { @@ -264,11 +265,16 @@ export async function patchChannel(serverUrl: string, channelPatch: Partial { - v.displayName = channelData.display_name; + // DM and GM display names cannot be patched and are formatted client-side; do not overwrite + if (channelData.type !== General.DM_CHANNEL && channelData.type !== General.GM_CHANNEL) { + v.displayName = channelData.display_name; + } v.type = channelData.type; + logInfo({channelData}); }); models.push(channel); } diff --git a/app/client/rest/channels.ts b/app/client/rest/channels.ts index 0e2a90cd0..1fd390b60 100644 --- a/app/client/rest/channels.ts +++ b/app/client/rest/channels.ts @@ -128,7 +128,7 @@ const ClientChannels = >(superclass: TBase ); }; - patchChannel = async (channelId: string, channelPatch: Partial) => { + patchChannel = async (channelId: string, channelPatch: ChannelPatch) => { this.analytics?.trackAPI('api_channels_patch', {channel_id: channelId}); return this.doFetch( diff --git a/app/screens/create_or_edit_channel/create_or_edit_channel.tsx b/app/screens/create_or_edit_channel/create_or_edit_channel.tsx index 2b64ed9c8..1872edd07 100644 --- a/app/screens/create_or_edit_channel/create_or_edit_channel.tsx +++ b/app/screens/create_or_edit_channel/create_or_edit_channel.tsx @@ -202,16 +202,16 @@ const CreateOrEditChannel = ({ return; } - const patchChannel = { - id: channel.id, - type: channel.type, - display_name: isDirect(channel) ? channel.displayName : displayName, - purpose: isDirect(channel) ? null : purpose, - header: isDirect(channel) ? null : header, - } as Channel; + const patchChannel: ChannelPatch = { + header, + ...!isDirect(channel) && { + display_name: displayName, + purpose, + }, + }; setCanSave(false); - const patchedChannel = await handlePatchChannel(serverUrl, patchChannel); + const patchedChannel = await handlePatchChannel(serverUrl, channel.id, patchChannel); if (patchedChannel.error) { dispatch({ type: RequestActions.FAILURE, diff --git a/types/api/channels.d.ts b/types/api/channels.d.ts index 26baed1ce..ef0f2a659 100644 --- a/types/api/channels.d.ts +++ b/types/api/channels.d.ts @@ -44,6 +44,13 @@ type Channel = { group_constrained: boolean|null; shared: boolean; }; +type ChannelPatch = { + name?: string; + display_name?: string; + header?: string; + purpose?: string; + group_constrained?: boolean|null; +}; type ChannelWithTeamData = Channel & { team_display_name: string; team_name: string;