fixup registration page with back buttons for now

Relates #1889
pull/1888/head
audric 4 years ago
parent 8462d7d38e
commit 56412df2b4

@ -154,7 +154,6 @@
&__unique-session-id { &__unique-session-id {
@include registration-label-mixin; @include registration-label-mixin;
padding-top: 1em;
text-align: center; text-align: center;
} }

@ -15,10 +15,8 @@ export enum SessionButtonColor {
Green = 'green', Green = 'green',
White = 'white', White = 'white',
Primary = 'primary', Primary = 'primary',
Secondary = 'secondary',
Success = 'success', Success = 'success',
Danger = 'danger', Danger = 'danger',
DangerAlt = 'danger-alt',
Warning = 'warning', Warning = 'warning',
None = '', None = '',
} }

@ -84,7 +84,12 @@ class SessionMessagesListContainerInner extends React.Component<Props> {
if (isSameConvo && snapShot?.realScrollTop && prevMsgLength !== newMsgLength) { if (isSameConvo && snapShot?.realScrollTop && prevMsgLength !== newMsgLength) {
if (messageAddedWasMoreRecentOne) { if (messageAddedWasMoreRecentOne) {
currentRef.scrollTop = -(currentRef.scrollHeight - snapShot.realScrollTop); if (snapShot.scrollHeight - snapShot.realScrollTop < 50) {
// consider that we were scrolled to bottom
currentRef.scrollTop = 0;
} else {
currentRef.scrollTop = -(currentRef.scrollHeight - snapShot.realScrollTop);
}
} else { } else {
currentRef.scrollTop = snapShot.fakeScrollTop; currentRef.scrollTop = snapShot.fakeScrollTop;
} }

@ -2,8 +2,8 @@ import React, { createContext, useEffect, useState } from 'react';
import { PromiseUtils, StringUtils, ToastUtils, UserUtils } from '../../../session/utils'; import { PromiseUtils, StringUtils, ToastUtils, UserUtils } from '../../../session/utils';
import { getConversationController } from '../../../session/conversations'; import { getConversationController } from '../../../session/conversations';
import { createOrUpdateItem, removeAll } from '../../../data/data'; import { createOrUpdateItem, removeAll } from '../../../data/data';
import { SignUpTab } from './SignUpTab'; import { SignUpMode, SignUpTab } from './SignUpTab';
import { SignInTab } from './SignInTab'; import { SignInMode, SignInTab } from './SignInTab';
import { trigger } from '../../../shims/events'; import { trigger } from '../../../shims/events';
import { import {
generateMnemonic, generateMnemonic,
@ -159,14 +159,22 @@ export enum RegistrationPhase {
interface RegistrationPhaseContext { interface RegistrationPhaseContext {
registrationPhase: RegistrationPhase; registrationPhase: RegistrationPhase;
signUpMode: SignUpMode;
signInMode: SignInMode;
setRegistrationPhase: (phase: RegistrationPhase) => void; setRegistrationPhase: (phase: RegistrationPhase) => void;
setSignInMode: (phase: SignInMode) => void;
setSignUpMode: (phase: SignUpMode) => void;
generatedRecoveryPhrase: string; generatedRecoveryPhrase: string;
hexGeneratedPubKey: string; hexGeneratedPubKey: string;
} }
export const RegistrationContext = createContext<RegistrationPhaseContext>({ export const RegistrationContext = createContext<RegistrationPhaseContext>({
registrationPhase: RegistrationPhase.Start, registrationPhase: RegistrationPhase.Start,
signInMode: SignInMode.Default,
signUpMode: SignUpMode.Default,
setRegistrationPhase: () => undefined, setRegistrationPhase: () => undefined,
setSignUpMode: () => undefined,
setSignInMode: () => undefined,
generatedRecoveryPhrase: '', generatedRecoveryPhrase: '',
hexGeneratedPubKey: '', hexGeneratedPubKey: '',
}); });
@ -175,6 +183,8 @@ export const RegistrationStages = () => {
const [generatedRecoveryPhrase, setGeneratedRecoveryPhrase] = useState(''); const [generatedRecoveryPhrase, setGeneratedRecoveryPhrase] = useState('');
const [hexGeneratedPubKey, setHexGeneratedPubKey] = useState(''); const [hexGeneratedPubKey, setHexGeneratedPubKey] = useState('');
const [registrationPhase, setRegistrationPhase] = useState(RegistrationPhase.Start); const [registrationPhase, setRegistrationPhase] = useState(RegistrationPhase.Start);
const [signInMode, setSignInMode] = useState(SignInMode.Default);
const [signUpMode, setSignUpMode] = useState(SignUpMode.Default);
useEffect(() => { useEffect(() => {
void generateMnemonicAndKeyPair(); void generateMnemonicAndKeyPair();
@ -206,6 +216,10 @@ export const RegistrationStages = () => {
<RegistrationContext.Provider <RegistrationContext.Provider
value={{ value={{
registrationPhase, registrationPhase,
signInMode,
signUpMode,
setSignInMode,
setSignUpMode,
setRegistrationPhase, setRegistrationPhase,
generatedRecoveryPhrase, generatedRecoveryPhrase,
hexGeneratedPubKey, hexGeneratedPubKey,

@ -10,6 +10,7 @@ import {
signInWithRecovery, signInWithRecovery,
} from './RegistrationStages'; } from './RegistrationStages';
import { RegistrationUserDetails } from './RegistrationUserDetails'; import { RegistrationUserDetails } from './RegistrationUserDetails';
import { GoBackMainMenuButton } from './SignUpTab';
import { TermsAndConditions } from './TermsAndConditions'; import { TermsAndConditions } from './TermsAndConditions';
export enum SignInMode { export enum SignInMode {
@ -91,9 +92,8 @@ const SignInButtons = (props: {
}; };
export const SignInTab = () => { export const SignInTab = () => {
const { setRegistrationPhase } = useContext(RegistrationContext); const { setRegistrationPhase, signInMode, setSignInMode } = useContext(RegistrationContext);
const [signInMode, setSignInMode] = useState(SignInMode.Default);
const [recoveryPhrase, setRecoveryPhrase] = useState(''); const [recoveryPhrase, setRecoveryPhrase] = useState('');
const [recoveryPhraseError, setRecoveryPhraseError] = useState(undefined as string | undefined); const [recoveryPhraseError, setRecoveryPhraseError] = useState(undefined as string | undefined);
const [displayName, setDisplayName] = useState(''); const [displayName, setDisplayName] = useState('');
@ -135,24 +135,28 @@ export const SignInTab = () => {
return ( return (
<div className="session-registration__content"> <div className="session-registration__content">
{signInMode !== SignInMode.Default && ( {signInMode !== SignInMode.Default && (
<RegistrationUserDetails <>
showDisplayNameField={showDisplayNameField} <GoBackMainMenuButton />
showSeedField={true}
displayName={displayName} <RegistrationUserDetails
handlePressEnter={continueYourSession} showDisplayNameField={showDisplayNameField}
onDisplayNameChanged={(name: string) => { showSeedField={true}
const sanitizedName = name.replace(window.displayNameRegex, ''); displayName={displayName}
const trimName = sanitizedName.trim(); handlePressEnter={continueYourSession}
setDisplayName(sanitizedName); onDisplayNameChanged={(name: string) => {
setDisplayNameError(!trimName ? window.i18n('displayNameEmpty') : undefined); const sanitizedName = name.replace(window.displayNameRegex, '');
}} const trimName = sanitizedName.trim();
onSeedChanged={(seed: string) => { setDisplayName(sanitizedName);
setRecoveryPhrase(seed); setDisplayNameError(!trimName ? window.i18n('displayNameEmpty') : undefined);
setRecoveryPhraseError(!seed ? window.i18n('recoveryPhraseEmpty') : undefined); }}
}} onSeedChanged={(seed: string) => {
recoveryPhrase={recoveryPhrase} setRecoveryPhrase(seed);
stealAutoFocus={true} setRecoveryPhraseError(!seed ? window.i18n('recoveryPhraseEmpty') : undefined);
/> }}
recoveryPhrase={recoveryPhrase}
stealAutoFocus={true}
/>
</>
)} )}
<SignInButtons <SignInButtons

@ -1,8 +1,11 @@
import React, { useContext, useEffect, useState } from 'react'; import React, { useContext, useEffect, useState } from 'react';
import { Flex } from '../../basic/Flex';
import { SessionIconButton } from '../icon';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../SessionButton'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../SessionButton';
import { SessionIdEditable } from '../SessionIdEditable'; import { SessionIdEditable } from '../SessionIdEditable';
import { RegistrationContext, RegistrationPhase, signUp } from './RegistrationStages'; import { RegistrationContext, RegistrationPhase, signUp } from './RegistrationStages';
import { RegistrationUserDetails } from './RegistrationUserDetails'; import { RegistrationUserDetails } from './RegistrationUserDetails';
import { SignInMode } from './SignInTab';
import { TermsAndConditions } from './TermsAndConditions'; import { TermsAndConditions } from './TermsAndConditions';
export enum SignUpMode { export enum SignUpMode {
@ -41,12 +44,32 @@ const SignUpDefault = (props: { createSessionID: () => void }) => {
); );
}; };
export const GoBackMainMenuButton = () => {
const { setRegistrationPhase, setSignInMode, setSignUpMode } = useContext(RegistrationContext);
return (
<SessionIconButton
iconSize="huge"
iconType="arrow"
iconPadding="5px"
onClick={() => {
setRegistrationPhase(RegistrationPhase.Start);
setSignInMode(SignInMode.Default);
setSignUpMode(SignUpMode.Default);
}}
/>
);
};
const SignUpSessionIDShown = (props: { continueSignUp: () => void }) => { const SignUpSessionIDShown = (props: { continueSignUp: () => void }) => {
return ( return (
<div className="session-registration__content"> <div className="session-registration__content">
<div className="session-registration__unique-session-id"> <Flex flexDirection="row" container={true} alignItems="center">
{window.i18n('yourUniqueSessionID')} <GoBackMainMenuButton />
</div>
<div className="session-registration__unique-session-id">
{window.i18n('yourUniqueSessionID')}
</div>
</Flex>
<SessionIdEditable editable={false} placeholder={undefined} /> <SessionIdEditable editable={false} placeholder={undefined} />
<div className="session-description-long">{window.i18n('signupSessionIDBlurb')}</div> <div className="session-description-long">{window.i18n('signupSessionIDBlurb')}</div>
<ContinueSignUpButton continueSignUp={props.continueSignUp} /> <ContinueSignUpButton continueSignUp={props.continueSignUp} />
@ -56,11 +79,13 @@ const SignUpSessionIDShown = (props: { continueSignUp: () => void }) => {
}; };
export const SignUpTab = () => { export const SignUpTab = () => {
const { setRegistrationPhase, generatedRecoveryPhrase, hexGeneratedPubKey } = useContext( const {
RegistrationContext signUpMode,
); setRegistrationPhase,
generatedRecoveryPhrase,
const [signUpMode, setSignUpMode] = useState(SignUpMode.Default); hexGeneratedPubKey,
setSignUpMode,
} = useContext(RegistrationContext);
const [displayName, setDisplayName] = useState(''); const [displayName, setDisplayName] = useState('');
const [displayNameError, setDisplayNameError] = useState(''); const [displayNameError, setDisplayNameError] = useState('');
@ -106,10 +131,12 @@ export const SignUpTab = () => {
return ( return (
<div className="session-registration__content"> <div className="session-registration__content">
<div className="session-registration__welcome-session"> <Flex flexDirection="row" container={true} alignItems="center">
{window.i18n('welcomeToYourSession')} <GoBackMainMenuButton />
</div> <Flex className="session-registration__welcome-session" padding="20px">
{window.i18n('welcomeToYourSession')}
</Flex>
</Flex>
<RegistrationUserDetails <RegistrationUserDetails
showDisplayNameField={true} showDisplayNameField={true}
showSeedField={false} showSeedField={false}

@ -663,6 +663,7 @@ const conversationsSlice = createSlice({
// keep the unread visible just like in other apps. It will be shown until the user changes convo // keep the unread visible just like in other apps. It will be shown until the user changes convo
return { return {
...state, ...state,
firstUnreadMessageId: undefined,
}; };
}, },

Loading…
Cancel
Save