From 7ff8676cd6d5a99a5a6b324eb0334d1ba8c9cb9c Mon Sep 17 00:00:00 2001 From: Robert Lin Date: Fri, 6 Jan 2023 10:46:53 -0800 Subject: [PATCH] client: remove deprecated authenticatedUser.email (#46183) The `authenticatedUsers.email` field is deprecated - the equivalent can now be found with `authenticatedUsers.emails.find(email => email.isPrimary)`. This gives more details about the email as well, such as whether it is verified or not, which is required to implement verified email checks. Co-authored-by: David Veszelovszki --- client/shared/src/auth.ts | 2 +- client/shared/src/util/url.ts | 7 ++++--- client/web/src/Layout.tsx | 9 ++++++++- client/web/src/auth/SignInPage.test.tsx | 2 +- client/web/src/auth/SignUpPage.test.tsx | 2 +- .../CommunitySearchContextPage.story.tsx | 3 +-- .../src/enterprise/batches/list/GettingStarted.tsx | 2 +- .../preview/BatchChangePreviewPage.story.tsx | 14 +++++++------- .../batches/preview/BatchChangePreviewPage.tsx | 2 +- .../list/ChangesetApplyPreviewNode.story.tsx | 2 +- .../batches/preview/list/PreviewList.story.tsx | 2 +- .../VisibleChangesetApplyPreviewNode.story.tsx | 2 +- .../list/VisibleChangesetApplyPreviewNode.tsx | 3 ++- .../code-monitoring/CodeMonitoringPage.story.tsx | 6 +++++- .../code-monitoring/CodeMonitoringPage.test.tsx | 6 +++++- .../CreateCodeMonitorPage.story.tsx | 8 +++++++- .../code-monitoring/CreateCodeMonitorPage.test.tsx | 2 +- .../ManageCodeMonitorPage.story.tsx | 7 ++++++- .../components/actions/EmailAction.tsx | 6 ++++-- .../src/enterprise/code-monitoring/testing/util.ts | 5 ++--- .../pages/CodeIntelConfigurationPage.story.tsx | 1 - .../searchContexts/SearchContextForm.story.tsx | 3 +-- client/web/src/integration/graphQlResults.ts | 3 +-- .../web/src/marketing/toast/SurveyToast.test.tsx | 2 +- client/web/src/repo/RepoHeader.story.tsx | 2 +- .../search/results/SearchResultsInfoBar.test.tsx | 6 +++++- .../src/search/results/SearchResultsInfoBar.tsx | 2 +- .../results/StreamingSearchResults.story.tsx | 2 +- .../search/results/StreamingSearchResults.test.tsx | 2 +- .../settings/research/ProductResearch.test.tsx | 4 +++- .../src/user/settings/research/ProductResearch.tsx | 7 +++++-- 31 files changed, 80 insertions(+), 46 deletions(-) diff --git a/client/shared/src/auth.ts b/client/shared/src/auth.ts index abcdc5dad735..7dd610a4bc13 100644 --- a/client/shared/src/auth.ts +++ b/client/shared/src/auth.ts @@ -10,7 +10,6 @@ export const currentAuthStateQuery = gql` databaseID username avatarURL - email displayName siteAdmin tags @@ -36,6 +35,7 @@ export const currentAuthStateQuery = gql` emails { email verified + isPrimary } latestSettings { id diff --git a/client/shared/src/util/url.ts b/client/shared/src/util/url.ts index 3b2c29a8c20f..d53e9cc8e0c0 100644 --- a/client/shared/src/util/url.ts +++ b/client/shared/src/util/url.ts @@ -594,7 +594,7 @@ export function buildGetStartedURL(cloudSignup?: boolean, authenticatedUser?: Au * @returns signup UR string with relevant params attached */ export const buildCloudTrialURL = ( - authenticatedUser: Pick | null | undefined, + authenticatedUser: Pick | null | undefined, product?: string ): string => { const url = new URL('https://signup.sourcegraph.com/') @@ -602,8 +602,9 @@ export const buildCloudTrialURL = ( if (product) { url.searchParams.append('p', product) } - if (authenticatedUser?.email) { - url.searchParams.append('email', authenticatedUser.email) + const primaryEmail = authenticatedUser?.emails.find(email => email.isPrimary) + if (primaryEmail) { + url.searchParams.append('email', primaryEmail.email) } if (authenticatedUser?.displayName) { url.searchParams.append('name', authenticatedUser.displayName) diff --git a/client/web/src/Layout.tsx b/client/web/src/Layout.tsx index 361dbcfdfbb1..89140dce6c6f 100644 --- a/client/web/src/Layout.tsx +++ b/client/web/src/Layout.tsx @@ -201,7 +201,14 @@ export const Layout: React.FunctionComponent email.isPrimary)?.email || '', + } + : null + } onClose={() => setFeedbackModalOpen(false)} /> )} diff --git a/client/web/src/auth/SignInPage.test.tsx b/client/web/src/auth/SignInPage.test.tsx index c034b25a9fde..bcfccf7fddfb 100644 --- a/client/web/src/auth/SignInPage.test.tsx +++ b/client/web/src/auth/SignInPage.test.tsx @@ -136,7 +136,7 @@ describe('SignInPage', () => { const mockUser = { id: 'userID', username: 'username', - email: 'user@me.com', + emails: [{ email: 'user@me.com', isPrimary: true, verified: true }], siteAdmin: true, } as AuthenticatedUser diff --git a/client/web/src/auth/SignUpPage.test.tsx b/client/web/src/auth/SignUpPage.test.tsx index 88bc6222a5c5..c1adf8196f79 100644 --- a/client/web/src/auth/SignUpPage.test.tsx +++ b/client/web/src/auth/SignUpPage.test.tsx @@ -95,7 +95,7 @@ describe('SignUpPage', () => { const mockUser = { id: 'userID', username: 'username', - email: 'user@me.com', + emails: [{ email: 'user@me.com', isPrimary: true, verified: true }], siteAdmin: true, } as AuthenticatedUser diff --git a/client/web/src/communitySearchContexts/CommunitySearchContextPage.story.tsx b/client/web/src/communitySearchContexts/CommunitySearchContextPage.story.tsx index 991d33cffed4..0a9b15e9a025 100644 --- a/client/web/src/communitySearchContexts/CommunitySearchContextPage.story.tsx +++ b/client/web/src/communitySearchContexts/CommunitySearchContextPage.story.tsx @@ -54,7 +54,6 @@ const PLATFORM_CONTEXT: CommunitySearchContextPageProps['platformContext'] = { const authUser: AuthenticatedUser = { __typename: 'User', id: '0', - email: 'alice@sourcegraph.com', username: 'alice', avatarURL: null, session: { canSignOut: true }, @@ -73,7 +72,7 @@ const authUser: AuthenticatedUser = { databaseID: 0, tosAccepted: true, searchable: true, - emails: [], + emails: [{ email: 'alice@sourcegraph.com', isPrimary: true, verified: true }], latestSettings: null, } diff --git a/client/web/src/enterprise/batches/list/GettingStarted.tsx b/client/web/src/enterprise/batches/list/GettingStarted.tsx index 0067b6bda4be..6baf1e66cacf 100644 --- a/client/web/src/enterprise/batches/list/GettingStarted.tsx +++ b/client/web/src/enterprise/batches/list/GettingStarted.tsx @@ -13,7 +13,7 @@ import { eventLogger } from '../../../tracking/eventLogger' export interface GettingStartedProps { isSourcegraphDotCom: boolean - authenticatedUser?: Pick | null + authenticatedUser?: Pick | null className?: string } diff --git a/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.story.tsx b/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.story.tsx index 647d8dff2d01..9598a5331a05 100644 --- a/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.story.tsx +++ b/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.story.tsx @@ -241,7 +241,7 @@ export const Create: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} /> @@ -267,7 +267,7 @@ export const Update: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} /> @@ -293,7 +293,7 @@ export const MissingCredentials: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} /> @@ -321,7 +321,7 @@ export const SpecFile: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} /> @@ -349,7 +349,7 @@ export const NoChangesets: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} /> @@ -377,7 +377,7 @@ export const CreateNewStory: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} /> @@ -405,7 +405,7 @@ export const ExceedsLicenseStory: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} /> diff --git a/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.tsx b/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.tsx index 8fda794257bd..b1fa007fd5cf 100644 --- a/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.tsx +++ b/client/web/src/enterprise/batches/preview/BatchChangePreviewPage.tsx @@ -25,7 +25,7 @@ import { BatchSpecInfoByline } from './BatchSpecInfoByline' import { CreateUpdateBatchChangeAlert } from './CreateUpdateBatchChangeAlert' import { PreviewList } from './list/PreviewList' -export type PreviewPageAuthenticatedUser = Pick +export type PreviewPageAuthenticatedUser = Pick export interface BatchChangePreviewPageProps extends BatchChangePreviewProps { /** Used for testing. */ diff --git a/client/web/src/enterprise/batches/preview/list/ChangesetApplyPreviewNode.story.tsx b/client/web/src/enterprise/batches/preview/list/ChangesetApplyPreviewNode.story.tsx index 3ddcb48836f0..7c394d30bb58 100644 --- a/client/web/src/enterprise/batches/preview/list/ChangesetApplyPreviewNode.story.tsx +++ b/client/web/src/enterprise/batches/preview/list/ChangesetApplyPreviewNode.story.tsx @@ -40,7 +40,7 @@ export const Overview: Story = () => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} queryChangesetSpecFileDiffs={queryEmptyFileDiffs} /> diff --git a/client/web/src/enterprise/batches/preview/list/PreviewList.story.tsx b/client/web/src/enterprise/batches/preview/list/PreviewList.story.tsx index 2168ea0146ea..77e82bfde900 100644 --- a/client/web/src/enterprise/batches/preview/list/PreviewList.story.tsx +++ b/client/web/src/enterprise/batches/preview/list/PreviewList.story.tsx @@ -59,7 +59,7 @@ export const DefaultStory: Story = args => { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} queryChangesetApplyPreview={queryChangesetApplyPreview} queryChangesetSpecFileDiffs={queryEmptyFileDiffs} diff --git a/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.story.tsx b/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.story.tsx index 8333faa5b8c7..fb2483b82a4d 100644 --- a/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.story.tsx +++ b/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.story.tsx @@ -35,7 +35,7 @@ const Template: Story<{ node: VisibleChangesetApplyPreviewFields }> = ({ node }) url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], }} queryChangesetSpecFileDiffs={queryEmptyFileDiffs} /> diff --git a/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.tsx b/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.tsx index c6470751a8c4..94a256d35e25 100644 --- a/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.tsx +++ b/client/web/src/enterprise/batches/preview/list/VisibleChangesetApplyPreviewNode.tsx @@ -384,7 +384,8 @@ const ExpandedSection: React.FunctionComponent< node.targets.changeset.author ? node.targets.changeset.author : { - email: authenticatedUser.email, + email: + authenticatedUser.emails.find(email => email.isPrimary)?.email || '', displayName: authenticatedUser.displayName || authenticatedUser.username, user: authenticatedUser, } diff --git a/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.story.tsx b/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.story.tsx index 8c153ad7a2df..9e9b8d76213b 100644 --- a/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.story.tsx +++ b/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.story.tsx @@ -39,7 +39,11 @@ const generateMockFetchMonitors = } const additionalProps = { - authenticatedUser: { id: 'foobar', username: 'alice', email: 'alice@alice.com' } as AuthenticatedUser, + authenticatedUser: { + id: 'foobar', + username: 'alice', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], + } as AuthenticatedUser, toggleCodeMonitorEnabled: sinon.fake(), settingsCascade: EMPTY_SETTINGS_CASCADE, } diff --git a/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.test.tsx b/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.test.tsx index b7e5b6d610ea..7a59dd4b907f 100644 --- a/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.test.tsx +++ b/client/web/src/enterprise/code-monitoring/CodeMonitoringPage.test.tsx @@ -13,7 +13,11 @@ import { CodeMonitoringPage } from './CodeMonitoringPage' import { mockCodeMonitorNodes } from './testing/util' const additionalProps = { - authenticatedUser: { id: 'foobar', username: 'alice', email: 'alice@alice.com' } as AuthenticatedUser, + authenticatedUser: { + id: 'foobar', + username: 'alice', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], + } as AuthenticatedUser, fetchUserCodeMonitors: ({ id, first, after }: ListUserCodeMonitorsVariables) => of({ nodes: mockCodeMonitorNodes, diff --git a/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.story.tsx b/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.story.tsx index f4eedc9049d8..7821436615e5 100644 --- a/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.story.tsx +++ b/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.story.tsx @@ -22,7 +22,13 @@ export const CreateCodeMonitorPageStory: Story = () => ( {props => ( diff --git a/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.test.tsx b/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.test.tsx index 658a569db74d..86adc9b471b9 100644 --- a/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.test.tsx +++ b/client/web/src/enterprise/code-monitoring/CreateCodeMonitorPage.test.tsx @@ -18,7 +18,7 @@ describe('CreateCodeMonitorPage', () => { const mockUser = { id: 'userID', username: 'username', - email: 'user@me.com', + emails: [{ email: 'user@me.com', isPrimary: true, verified: true }], siteAdmin: true, } as AuthenticatedUser diff --git a/client/web/src/enterprise/code-monitoring/ManageCodeMonitorPage.story.tsx b/client/web/src/enterprise/code-monitoring/ManageCodeMonitorPage.story.tsx index 463bf2d049bf..e8a9fc1c6e86 100644 --- a/client/web/src/enterprise/code-monitoring/ManageCodeMonitorPage.story.tsx +++ b/client/web/src/enterprise/code-monitoring/ManageCodeMonitorPage.story.tsx @@ -20,7 +20,12 @@ export const ManageCodeMonitorPageStory: Story = () => ( {props => ( of(mockCodeMonitor))} deleteCodeMonitor={fake(() => NEVER)} diff --git a/client/web/src/enterprise/code-monitoring/components/actions/EmailAction.tsx b/client/web/src/enterprise/code-monitoring/components/actions/EmailAction.tsx index 82972cba04b2..fe7d29ff982a 100644 --- a/client/web/src/enterprise/code-monitoring/components/actions/EmailAction.tsx +++ b/client/web/src/enterprise/code-monitoring/components/actions/EmailAction.tsx @@ -94,6 +94,8 @@ export const EmailAction: React.FunctionComponent email.isPrimary) + const emailNotConfiguredMessage = !emailConfigured ? ( !action ? ( <> @@ -116,7 +118,7 @@ export const EmailAction: React.FunctionComponent { diff --git a/client/web/src/repo/RepoHeader.story.tsx b/client/web/src/repo/RepoHeader.story.tsx index 79883427edd5..4ccca94cab13 100644 --- a/client/web/src/repo/RepoHeader.story.tsx +++ b/client/web/src/repo/RepoHeader.story.tsx @@ -21,7 +21,7 @@ import repoRevisionContainerStyles from './RepoRevisionContainer.module.scss' const mockUser = { id: 'userID', username: 'username', - email: 'user@me.com', + emails: [{ email: 'user@me.com', isPrimary: true, verified: true }], siteAdmin: true, } as AuthenticatedUser diff --git a/client/web/src/search/results/SearchResultsInfoBar.test.tsx b/client/web/src/search/results/SearchResultsInfoBar.test.tsx index 15b333f38ca2..888c1bd62242 100644 --- a/client/web/src/search/results/SearchResultsInfoBar.test.tsx +++ b/client/web/src/search/results/SearchResultsInfoBar.test.tsx @@ -17,7 +17,11 @@ const COMMON_PROPS: Omit = { platformContext: { settings: NEVER, sourcegraphURL: 'https://sourcegraph.com' }, history, location: createLocation('/search'), - authenticatedUser: { id: 'userID', displayName: 'Chuck Cheese', email: 'chuck@chuckeecheese.com' }, + authenticatedUser: { + id: 'userID', + displayName: 'Chuck Cheese', + emails: [{ email: 'chuck@chuckeecheese.com', isPrimary: true, verified: true }], + }, allExpanded: true, onExpandAllResultsToggle: noop, onSaveQueryClick: noop, diff --git a/client/web/src/search/results/SearchResultsInfoBar.tsx b/client/web/src/search/results/SearchResultsInfoBar.tsx index 0e852fdaae1b..2a426ac23d1e 100644 --- a/client/web/src/search/results/SearchResultsInfoBar.tsx +++ b/client/web/src/search/results/SearchResultsInfoBar.tsx @@ -38,7 +38,7 @@ export interface SearchResultsInfoBarProps Pick { history: H.History /** The currently authenticated user or null */ - authenticatedUser: Pick | null + authenticatedUser: Pick | null /** * Whether the code insights feature flag is enabled. diff --git a/client/web/src/search/results/StreamingSearchResults.story.tsx b/client/web/src/search/results/StreamingSearchResults.story.tsx index 45d9baa40dc8..c7e09dea5208 100644 --- a/client/web/src/search/results/StreamingSearchResults.story.tsx +++ b/client/web/src/search/results/StreamingSearchResults.story.tsx @@ -42,7 +42,7 @@ const defaultProps: StreamingSearchResultsProps = { url: '/users/alice', displayName: 'Alice', username: 'alice', - email: 'alice@email.test', + emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }], } as AuthenticatedUser, isLightTheme: true, diff --git a/client/web/src/search/results/StreamingSearchResults.test.tsx b/client/web/src/search/results/StreamingSearchResults.test.tsx index 8bcce33fdf1e..6e2984808be4 100644 --- a/client/web/src/search/results/StreamingSearchResults.test.tsx +++ b/client/web/src/search/results/StreamingSearchResults.test.tsx @@ -80,7 +80,7 @@ describe('StreamingSearchResults', () => { const mockUser = { id: 'userID', username: 'username', - email: 'user@me.com', + emails: [{ email: 'user@me.com', isPrimary: true, verified: true }], siteAdmin: true, } as AuthenticatedUser diff --git a/client/web/src/user/settings/research/ProductResearch.test.tsx b/client/web/src/user/settings/research/ProductResearch.test.tsx index a11acf834ba0..b38a739fed93 100644 --- a/client/web/src/user/settings/research/ProductResearch.test.tsx +++ b/client/web/src/user/settings/research/ProductResearch.test.tsx @@ -11,7 +11,9 @@ describe('ProductResearchPage', () => { queries = render( ) }) diff --git a/client/web/src/user/settings/research/ProductResearch.tsx b/client/web/src/user/settings/research/ProductResearch.tsx index 541e90926a6a..e13c5f22e801 100644 --- a/client/web/src/user/settings/research/ProductResearch.tsx +++ b/client/web/src/user/settings/research/ProductResearch.tsx @@ -10,7 +10,7 @@ import { PageTitle } from '../../../components/PageTitle' interface Props { telemetryService: TelemetryService - authenticatedUser: Pick + authenticatedUser: Pick } const SIGN_UP_FORM_URL = 'https://info.sourcegraph.com/product-research' @@ -24,7 +24,10 @@ export const ProductResearchPage: React.FunctionComponent email.isPrimary) + if (primaryEmail) { + signUpForm.searchParams.set('email', primaryEmail.email) + } return ( <>