-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🪟 Updated email invitation flow that enables invited users to set nam…
…e and create password (#12788) * First pass accepting email link invitation * Update Auth service with signInWithEmailLink calls * Add AcceptEmailInvite component * Update FirebaseActionRoute to handle sign in mode * Rename ResetPasswordAction to FirebseActionRoute * Add create password setp to AcceptEmailInvite component * Remove continueURL from invite fetch * Update accept email invite for user to enter both email and password together * Set name during email link signup * Update AcceptEmailInvite to send name * Add updateName to UserService * Update AuthService to set name during sign up * Remove steps from AcceptEmailInvite component Remove setPassword from AuthService * Add header and title to accept invite page * Move invite error messages to en file * For invite link pages, show login link instead of sign up * Disable name update on sign in via email lnk * Resend email invite when the invite link is expired * Fix status message in accept email invite page * Re-enable set user's name during sign up email invite * Update signUpWithEmailLink so that sign up is successful even if we fail to update the user's name * Update comments on GoogleAuthService signInWithEmailLink * Add newsletter and accept terms checkboxes to accept email invite component * Extract signup form from signup page * Extract fields from signup form * Update accept email invite component to use field components from signup form * Ensure that sign up button is disable until form is valid and security checkbox is checked * Make error status text color in accept email link red * Update workspace check in DefaultView so that user lands in workspace selector when there are no workspaces * Add coment around continueUrl param usage in UserService * Remove usless default case in GoogleAuthService
- Loading branch information
Showing
13 changed files
with
449 additions
and
194 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 13 additions & 1 deletion
14
airbyte-webapp/src/packages/cloud/lib/domain/users/types.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,19 @@ | ||
export type UserStatus = "invited" | "registered" | "disabled"; | ||
|
||
export interface User { | ||
email: string; | ||
name: string; | ||
userId: string; | ||
status?: "invited" | "registered" | "disabled"; | ||
status?: UserStatus; | ||
intercomHash: string; | ||
} | ||
|
||
export interface UserUpdate { | ||
userId: string; | ||
authUserId: string; | ||
name?: string; | ||
defaultWorkspaceId?: string; | ||
status?: UserStatus; | ||
email?: string; | ||
news?: boolean; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
99 changes: 99 additions & 0 deletions
99
airbyte-webapp/src/packages/cloud/views/AcceptEmailInvite.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
import { Formik } from "formik"; | ||
import { FormattedMessage, useIntl } from "react-intl"; | ||
import * as yup from "yup"; | ||
|
||
import { H1, LoadingButton } from "components"; | ||
import HeadTitle from "components/HeadTitle"; | ||
|
||
import { FieldError } from "../lib/errors/FieldError"; | ||
import { useAuthService } from "../services/auth/AuthService"; | ||
import { EmailLinkErrorCodes } from "../services/auth/types"; | ||
import { BottomBlock, BottomBlockStatusMessage, FieldItem, Form } from "./auth/components/FormComponents"; | ||
import { | ||
EmailField, | ||
NameField, | ||
NewsField, | ||
PasswordField, | ||
SecurityField, | ||
} from "./auth/SignupPage/components/SignupForm"; | ||
|
||
const ValidationSchema = yup.object().shape({ | ||
name: yup.string().required("form.empty.error"), | ||
email: yup.string().email("form.email.error").required("form.empty.error"), | ||
password: yup.string().min(12, "signup.password.minLength").required("form.empty.error"), | ||
security: yup.boolean().oneOf([true], "form.empty.error"), | ||
}); | ||
|
||
export const AcceptEmailInvite: React.FC = () => { | ||
const { formatMessage } = useIntl(); | ||
const authService = useAuthService(); | ||
|
||
const formElement = ( | ||
<Formik | ||
initialValues={{ | ||
name: "", | ||
email: "", | ||
password: "", | ||
news: true, | ||
security: false, | ||
}} | ||
validationSchema={ValidationSchema} | ||
onSubmit={async ({ name, email, password, news }, { setFieldError, setStatus }) => { | ||
try { | ||
await authService.signUpWithEmailLink({ name, email, password, news }); | ||
} catch (err) { | ||
if (err instanceof FieldError) { | ||
setFieldError(err.field, err.message); | ||
} else { | ||
setStatus( | ||
formatMessage({ | ||
id: [EmailLinkErrorCodes.LINK_EXPIRED, EmailLinkErrorCodes.LINK_INVALID].includes(err.message) | ||
? `login.${err.message}` | ||
: "errorView.unknownError", | ||
}) | ||
); | ||
} | ||
} | ||
}} | ||
> | ||
{({ isSubmitting, status, values, isValid }) => ( | ||
<Form> | ||
<FieldItem> | ||
<NameField /> | ||
</FieldItem> | ||
<FieldItem> | ||
<EmailField label={<FormattedMessage id="login.inviteEmail" />} /> | ||
</FieldItem> | ||
<FieldItem> | ||
<PasswordField label={<FormattedMessage id="login.createPassword" />} /> | ||
</FieldItem> | ||
<FieldItem> | ||
<NewsField /> | ||
<SecurityField /> | ||
</FieldItem> | ||
<BottomBlock> | ||
<LoadingButton | ||
type="submit" | ||
isLoading={isSubmitting} | ||
disabled={!isValid || !values.security} | ||
data-testid="login.signup" | ||
> | ||
<FormattedMessage id="login.signup" /> | ||
</LoadingButton> | ||
{status && <BottomBlockStatusMessage>{status}</BottomBlockStatusMessage>} | ||
</BottomBlock> | ||
</Form> | ||
)} | ||
</Formik> | ||
); | ||
|
||
return ( | ||
<> | ||
<HeadTitle titles={[{ id: "login.inviteTitle" }]} /> | ||
<H1 bold> | ||
<FormattedMessage id="login.inviteTitle" /> | ||
</H1> | ||
{formElement} | ||
</> | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.