diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx index 23219938e..009d8f000 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx +++ b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx @@ -1,42 +1,43 @@ +import { availableWorkspacesState } from '@/auth/states/availableWorkspacesState'; +import { useBuildWorkspaceUrl } from '@/domain-manager/hooks/useBuildWorkspaceUrl'; +import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; +import { Trans, useLingui } from '@lingui/react/macro'; import { motion } from 'framer-motion'; import { useState } from 'react'; import { FormProvider } from 'react-hook-form'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -import { useTheme } from '@emotion/react'; -import { useLingui } from '@lingui/react/macro'; -import { UndecoratedLink } from 'twenty-ui/navigation'; -import { useBuildWorkspaceUrl } from '@/domain-manager/hooks/useBuildWorkspaceUrl'; -import { availableWorkspacesState } from '@/auth/states/availableWorkspacesState'; +import { ClickToActionLink, UndecoratedLink } from 'twenty-ui/navigation'; +import { useAuth } from '@/auth/hooks/useAuth'; import { SignInUpEmailField } from '@/auth/sign-in-up/components/internal/SignInUpEmailField'; import { SignInUpPasswordField } from '@/auth/sign-in-up/components/internal/SignInUpPasswordField'; import { SignInUpWithGoogle } from '@/auth/sign-in-up/components/internal/SignInUpWithGoogle'; import { SignInUpWithMicrosoft } from '@/auth/sign-in-up/components/internal/SignInUpWithMicrosoft'; import { useSignInUp } from '@/auth/sign-in-up/hooks/useSignInUp'; import { useSignInUpForm } from '@/auth/sign-in-up/hooks/useSignInUpForm'; +import { useSignUpInNewWorkspace } from '@/auth/sign-in-up/hooks/useSignUpInNewWorkspace'; import { signInUpModeState } from '@/auth/states/signInUpModeState'; import { SignInUpStep, signInUpStepState, } from '@/auth/states/signInUpStepState'; -import { getAvailableWorkspacePathAndSearchParams } from '@/auth/utils/availableWorkspacesUtils'; import { SignInUpMode } from '@/auth/types/signInUpMode'; +import { getAvailableWorkspacePathAndSearchParams } from '@/auth/utils/availableWorkspacesUtils'; import { isRequestingCaptchaTokenState } from '@/captcha/states/isRequestingCaptchaTokenState'; import { authProvidersState } from '@/client-config/states/authProvidersState'; +import { DEFAULT_WORKSPACE_LOGO } from '@/ui/navigation/navigation-drawer/constants/DefaultWorkspaceLogo'; import { isDefined } from 'twenty-shared/utils'; import { + Avatar, HorizontalSeparator, IconChevronRight, IconPlus, - Avatar, } from 'twenty-ui/display'; import { Loader } from 'twenty-ui/feedback'; import { MainButton } from 'twenty-ui/input'; -import { getWorkspaceUrl } from '~/utils/getWorkspaceUrl'; -import { DEFAULT_WORKSPACE_LOGO } from '@/ui/navigation/navigation-drawer/constants/DefaultWorkspaceLogo'; -import { useSignUpInNewWorkspace } from '@/auth/sign-in-up/hooks/useSignUpInNewWorkspace'; import { AvailableWorkspace } from '~/generated/graphql'; +import { getWorkspaceUrl } from '~/utils/getWorkspaceUrl'; const StyledContentContainer = styled(motion.div)` margin-bottom: ${({ theme }) => theme.spacing(8)}; @@ -52,6 +53,7 @@ const StyledForm = styled.form` `; const StyledWorkspaceContainer = styled.div` + background-color: ${({ theme }) => theme.background.secondary}; border: 1px solid ${({ theme }) => theme.border.color.light}; border-radius: ${({ theme }) => theme.border.radius.md}; display: flex; @@ -60,6 +62,14 @@ const StyledWorkspaceContainer = styled.div` margin-top: ${({ theme }) => theme.spacing(4)}; overflow: hidden; width: 100%; + + > * { + border-bottom: 1px solid ${({ theme }) => theme.border.color.medium}; + + &:last-child { + border-bottom: none; + } + } `; const StyledWorkspaceItem = styled.div` @@ -71,7 +81,6 @@ const StyledWorkspaceItem = styled.div` padding: 0; overflow: hidden; - border-bottom: 1px solid ${({ theme }) => theme.border.color.light}; cursor: pointer; justify-content: space-between; @@ -125,10 +134,16 @@ const StyledChevronIcon = styled.div` display: flex; `; +const StyledActionLinkContainer = styled.div` + display: flex; + justify-content: center; +`; + export const SignInUpGlobalScopeForm = () => { const authProviders = useRecoilValue(authProvidersState); const signInUpStep = useRecoilValue(signInUpStepState); const { buildWorkspaceUrl } = useBuildWorkspaceUrl(); + const { signOut } = useAuth(); const { createWorkspace } = useSignUpInNewWorkspace(); const setSignInUpStep = useSetRecoilState(signInUpStepState); @@ -183,57 +198,65 @@ export const SignInUpGlobalScopeForm = () => { return ( <> {signInUpStep === SignInUpStep.WorkspaceSelection && ( - - {[ - ...availableWorkspaces.availableWorkspacesForSignIn, - ...availableWorkspaces.availableWorkspacesForSignUp, - ].map((availableWorkspace) => ( - - - - - - - {availableWorkspace.displayName || availableWorkspace.id} - - - { - new URL( - getWorkspaceUrl(availableWorkspace.workspaceUrls), - ).hostname + <> + + {[ + ...availableWorkspaces.availableWorkspacesForSignIn, + ...availableWorkspaces.availableWorkspacesForSignUp, + ].map((availableWorkspace) => ( + + + + - - - - - - - - ))} - createWorkspace()}> - - - - - - {t`Create a workspace`} - - - - - - - + size="lg" + /> + + + {availableWorkspace.displayName || + availableWorkspace.id} + + + { + new URL( + getWorkspaceUrl(availableWorkspace.workspaceUrls), + ).hostname + } + + + + + + + + + ))} + createWorkspace()}> + + + + + + {t`Create a workspace`} + + + + + + + + + + Log out + + + )} {signInUpStep !== SignInUpStep.WorkspaceSelection && ( diff --git a/packages/twenty-front/src/pages/auth/SignInUp.tsx b/packages/twenty-front/src/pages/auth/SignInUp.tsx index 0b9bb651d..133b7700d 100644 --- a/packages/twenty-front/src/pages/auth/SignInUp.tsx +++ b/packages/twenty-front/src/pages/auth/SignInUp.tsx @@ -12,8 +12,8 @@ import { Title } from '@/auth/components/Title'; import { EmailVerificationSent } from '@/auth/sign-in-up/components/EmailVerificationSent'; import { FooterNote } from '@/auth/sign-in-up/components/FooterNote'; import { SignInUpGlobalScopeForm } from '@/auth/sign-in-up/components/SignInUpGlobalScopeForm'; -import { SignInUpSSOIdentityProviderSelection } from '@/auth/sign-in-up/components/internal/SignInUpSSOIdentityProviderSelection'; import { SignInUpWorkspaceScopeForm } from '@/auth/sign-in-up/components/SignInUpWorkspaceScopeForm'; +import { SignInUpSSOIdentityProviderSelection } from '@/auth/sign-in-up/components/internal/SignInUpSSOIdentityProviderSelection'; import { SignInUpWorkspaceScopeFormEffect } from '@/auth/sign-in-up/components/internal/SignInUpWorkspaceScopeFormEffect'; import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState'; import { useGetPublicWorkspaceDataByDomain } from '@/domain-manager/hooks/useGetPublicWorkspaceDataByDomain'; @@ -22,6 +22,7 @@ import { useIsCurrentLocationOnDefaultDomain } from '@/domain-manager/hooks/useI import { DEFAULT_WORKSPACE_NAME } from '@/ui/navigation/navigation-drawer/constants/DefaultWorkspaceName'; import { useMemo } from 'react'; +import { SignInUpGlobalScopeFormEffect } from '@/auth/sign-in-up/components/internal/SignInUpGlobalScopeFormEffect'; import { useWorkspaceFromInviteHash } from '@/auth/sign-in-up/hooks/useWorkspaceFromInviteHash'; import { Modal } from '@/ui/layout/modal/components/Modal'; import { useLingui } from '@lingui/react/macro'; @@ -29,7 +30,6 @@ import { useSearchParams } from 'react-router-dom'; import { isDefined } from 'twenty-shared/utils'; import { AnimatedEaseIn } from 'twenty-ui/utilities'; import { PublicWorkspaceDataOutput } from '~/generated/graphql'; -import { SignInUpGlobalScopeFormEffect } from '@/auth/sign-in-up/components/internal/SignInUpGlobalScopeFormEffect'; const StandardContent = ({ workspacePublicData, @@ -55,7 +55,8 @@ const StandardContent = ({ {title} {signInUpForm} - {signInUpStep !== SignInUpStep.Password && } + {signInUpStep !== SignInUpStep.Password && + signInUpStep !== SignInUpStep.WorkspaceSelection && } ); };