[BUGFIX] Reply button opens google (#10269)
fixes https://github.com/twentyhq/twenty/issues/10242
This commit is contained in:
@ -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';
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user