2814 timebox create a poc to test the gmail api (#2868)

* create gmail strategy and controller

* gmail button connect

* wip

* trying to fix error { error: 'invalid_grant', error_description: 'Bad Request' }

* access token working

* refresh token working

* Getting the short term token from the front is working

* working

* rename token

* remove comment

* rename env var

* move file

* Fix

* Fix

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
bosiraphael
2023-12-08 13:13:56 +01:00
committed by GitHub
parent d4613c87f6
commit 7535c84e3d
26 changed files with 660 additions and 89 deletions

View File

@ -0,0 +1,11 @@
import { gql } from '@apollo/client';
export const GENERATE_ONE_TRANSIENT_TOKEN = gql`
mutation generateTransientToken {
generateTransientToken {
transientToken {
token
}
}
}
`;

View File

@ -1,8 +1,11 @@
import { useCallback } from 'react';
import styled from '@emotion/styled';
import { IconGoogle } from '@/ui/display/icon/components/IconGoogle';
import { Button } from '@/ui/input/button/components/Button';
import { Card } from '@/ui/layout/card/components/Card';
import { REACT_APP_SERVER_AUTH_URL } from '~/config';
import { useGenerateTransientTokenMutation } from '~/generated/graphql';
const StyledCard = styled(Card)`
border-radius: ${({ theme }) => theme.border.radius.md};
@ -27,15 +30,30 @@ const StyledBody = styled.div`
padding: ${({ theme }) => theme.spacing(4)};
`;
export const SettingsAccountsEmptyStateCard = () => (
<StyledCard>
<StyledHeader>No connected account</StyledHeader>
<StyledBody>
<Button
Icon={IconGoogle}
title="Connect with Google"
variant="secondary"
/>
</StyledBody>
</StyledCard>
);
export const SettingsAccountsEmptyStateCard = () => {
const [generateTransientToken] = useGenerateTransientTokenMutation();
const handleGmailLogin = useCallback(async () => {
const authServerUrl = REACT_APP_SERVER_AUTH_URL;
const transientToken = await generateTransientToken();
const token =
transientToken.data?.generateTransientToken.transientToken.token;
window.location.href = `${authServerUrl}/google-gmail?transientToken=${token}`;
}, [generateTransientToken]);
return (
<StyledCard>
<StyledHeader>No connected account</StyledHeader>
<StyledBody>
<Button
Icon={IconGoogle}
title="Connect with Google"
variant="secondary"
onClick={handleGmailLogin}
/>
</StyledBody>
</StyledCard>
);
};

View File

@ -66,7 +66,7 @@ export const settingsFieldMetadataTypes: Partial<
Icon: IconTag,
},
[FieldMetadataType.MultiSelect]: {
label: 'Multi-Select',
label: 'MultiSelect',
Icon: IconTag,
},
[FieldMetadataType.Currency]: {

View File

@ -23,9 +23,9 @@ import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
import { NavigationDrawer } from '../NavigationDrawer';
import { NavigationDrawerItem } from '../NavigationDrawerItem';
import { NavigationDrawerSectionTitle } from '../NavigationDrawerSectionTitle';
import { NavigationDrawerSection } from '../NavigationDrawerSection';
import { NavigationDrawerItemGroup } from '../NavigationDrawerItemGroup';
import { NavigationDrawerSection } from '../NavigationDrawerSection';
import { NavigationDrawerSectionTitle } from '../NavigationDrawerSectionTitle';
const meta: Meta<typeof NavigationDrawer> = {
title: 'UI/Navigation/NavigationDrawer/NavigationDrawer',

View File

@ -25,6 +25,12 @@ export const USER_QUERY_FRAGMENT = gql`
domainName
inviteHash
allowImpersonation
featureFlags {
id
key
value
workspaceId
}
}
}
`;