[BUGFIX] Reply button opens google (#10269)

fixes https://github.com/twentyhq/twenty/issues/10242
This commit is contained in:
Guillim
2025-02-19 09:58:50 +01:00
committed by GitHub
parent 248ec4cd6f
commit dca4fc1423
3 changed files with 43 additions and 5 deletions

View File

@ -1,3 +1,4 @@
import { ConnectedAccountProvider } from 'twenty-shared';
import { MessageChannelVisibility } from '~/generated/graphql'; import { MessageChannelVisibility } from '~/generated/graphql';
export enum MessageChannelContactAutoCreationPolicy { export enum MessageChannelContactAutoCreationPolicy {
@ -36,5 +37,9 @@ export type MessageChannel = {
syncCursor: string; syncCursor: string;
syncStageStartedAt: Date; syncStageStartedAt: Date;
throttleFailureCount: number; throttleFailureCount: number;
connectedAccount?: {
id: string;
provider: ConnectedAccountProvider;
};
__typename: 'MessageChannel'; __typename: 'MessageChannel';
}; };

View File

@ -13,6 +13,8 @@ import { RIGHT_DRAWER_CLICK_OUTSIDE_LISTENER_ID } from '@/ui/layout/right-drawer
import { messageThreadState } from '@/ui/layout/right-drawer/states/messageThreadState'; import { messageThreadState } from '@/ui/layout/right-drawer/states/messageThreadState';
import { useClickOutsideListener } from '@/ui/utilities/pointer-event/hooks/useClickOutsideListener'; import { useClickOutsideListener } from '@/ui/utilities/pointer-event/hooks/useClickOutsideListener';
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { assertUnreachable } from '@/workflow/utils/assertUnreachable';
import { ConnectedAccountProvider } from 'twenty-shared';
import { Button, IconArrowBackUp } from 'twenty-ui'; import { Button, IconArrowBackUp } from 'twenty-ui';
const StyledWrapper = styled.div` const StyledWrapper = styled.div`
@ -52,6 +54,7 @@ export const RightDrawerEmailThread = () => {
messageThreadExternalId, messageThreadExternalId,
connectedAccountHandle, connectedAccountHandle,
messageChannelLoading, messageChannelLoading,
connectedAccountProvider,
} = useRightDrawerEmailThread(); } = useRightDrawerEmailThread();
useEffect(() => { useEffect(() => {
@ -94,17 +97,38 @@ export const RightDrawerEmailThread = () => {
const canReply = useMemo(() => { const canReply = useMemo(() => {
return ( return (
connectedAccountHandle && lastMessage && messageThreadExternalId != null connectedAccountHandle &&
connectedAccountProvider &&
lastMessage &&
messageThreadExternalId != null
); );
}, [connectedAccountHandle, lastMessage, messageThreadExternalId]); }, [
connectedAccountHandle,
connectedAccountProvider,
lastMessage,
messageThreadExternalId,
]);
const handleReplyClick = () => { const handleReplyClick = () => {
if (!canReply) { if (!canReply) {
return; return;
} }
const url = `https://mail.google.com/mail/?authuser=${connectedAccountHandle}#all/${messageThreadExternalId}`; let url: string;
window.open(url, '_blank'); switch (connectedAccountProvider) {
case ConnectedAccountProvider.MICROSOFT:
url = `https://outlook.office365.com/mail/inbox/id/${messageThreadExternalId}`;
window.open(url, '_blank');
break;
case ConnectedAccountProvider.GOOGLE:
url = `https://mail.google.com/mail/?authuser=${connectedAccountHandle}#all/${messageThreadExternalId}`;
window.open(url, '_blank');
break;
case null:
throw new Error('Account provider not provided');
default:
assertUnreachable(connectedAccountProvider);
}
}; };
if (!thread || !messages.length) { if (!thread || !messages.length) {
return null; return null;

View File

@ -132,7 +132,10 @@ export const useRightDrawerEmailThread = () => {
recordGqlFields: { recordGqlFields: {
id: true, id: true,
handle: true, handle: true,
connectedAccountId: true, connectedAccount: {
id: true,
provider: true,
},
}, },
skip: !lastMessageChannelId, skip: !lastMessageChannelId,
}); });
@ -159,11 +162,17 @@ export const useRightDrawerEmailThread = () => {
}) })
.filter(isDefined); .filter(isDefined);
const connectedAccount =
messageChannelData.length > 0
? messageChannelData[0]?.connectedAccount
: null;
const connectedAccountProvider = connectedAccount?.provider ?? null;
return { return {
thread, thread,
messages: messagesWithSender, messages: messagesWithSender,
messageThreadExternalId, messageThreadExternalId,
connectedAccountHandle, connectedAccountHandle,
connectedAccountProvider,
threadLoading: messagesLoading, threadLoading: messagesLoading,
messageChannelLoading, messageChannelLoading,
fetchMoreMessages, fetchMoreMessages,