fix(591): display error message and styles (#264)

keep-around/af30b88d367751c9e05a735e4a0467a96238ef47
Mirlan 5 years ago committed by GitHub
parent f989da50c5
commit 653fae17f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      src/config/lexics/public.tsx
  2. 7
      src/features/AuthStore/hooks/useRegister.tsx
  3. 2
      src/features/Common/Input/styled.tsx
  4. 2
      src/features/Login/index.tsx
  5. 19
      src/features/Login/styled.tsx
  6. 2
      src/features/Register/components/CardStep/index.tsx
  7. 4
      src/features/Register/components/RegistrationStep/hooks/useSubmitHandler.tsx
  8. 2
      src/features/Register/components/RegistrationStep/index.tsx
  9. 4
      src/features/Register/components/SubscriptionsStep/index.tsx
  10. 15
      src/features/Register/components/SubscriptionsStep/styled.tsx
  11. 2
      src/requests/login.tsx
  12. 23
      src/requests/register.tsx

@ -1,5 +1,6 @@
export const publicLexics = { export const publicLexics = {
error_account_blocked: 12909, error_account_blocked: 12909,
error_email_already_in_use: 11156,
error_empty_email: 2498, error_empty_email: 2498,
error_empty_password: 2499, error_empty_password: 2499,
error_fill_out_required_fields: 12911, error_fill_out_required_fields: 12911,

@ -12,12 +12,7 @@ export const useRegister = () => {
history.replace(`${PAGES.register}/successful`) history.replace(`${PAGES.register}/successful`)
} }
const showError = (message: string) => {
// eslint-disable-next-line no-alert
window.alert(message)
}
return async (args: Args) => ( return async (args: Args) => (
register(args).then(goToRegistrationSuccess, showError) register(args).then(goToRegistrationSuccess)
) )
} }

@ -215,7 +215,7 @@ export const Error = styled(T9n)<ErrorProps>`
${({ marginBottom }) => ( ${({ marginBottom }) => (
marginBottom marginBottom
? `margin-bottom: ${marginBottom}px` ? `margin-bottom: ${marginBottom}px;`
: '' : ''
)} )}

@ -54,7 +54,7 @@ const LoginForm = () => {
/> />
<ButtonsBlock> <ButtonsBlock>
<Error t={requestError || ''} marginBottom={8} /> <Error t={requestError || ''} marginBottom={27} />
<ButtonSolid type='submit'> <ButtonSolid type='submit'>
<T9n t='login' /> <T9n t='login' />
</ButtonSolid> </ButtonSolid>

@ -60,28 +60,31 @@ export const BlockTitle = styled(T9n)`
} }
` `
export const ButtonsBlock = styled.div<{forSubsPage?: boolean}>` type ButtonsBlockProps = {
marginTop?: number,
}
export const ButtonsBlock = styled.div<ButtonsBlockProps>`
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin-top: ${({ forSubsPage }) => (forSubsPage ? '80px' : '60px')};
margin-bottom: ${({ forSubsPage }) => (forSubsPage ? '96px' : '')};
position: relative; position: relative;
margin-top: ${({ marginTop = 2 }) => marginTop}px;
@media ${devices.laptop} { @media ${devices.laptop} {
margin-top: ${({ forSubsPage }) => (forSubsPage ? '80px' : '32px')}; margin-top: 32px;
} }
@media ${devices.mobile} { @media ${devices.mobile} {
bottom: ${({ forSubsPage }) => (forSubsPage ? '20px' : '10px')}; bottom: 10px;
margin-bottom: ${({ forSubsPage }) => (forSubsPage ? '0' : '')}; margin-bottom: 0;
position: ${({ forSubsPage }) => (forSubsPage ? 'absolute' : 'relative')}; position: relative;
} }
` `
export const RegisterButton = styled(Link)` export const RegisterButton = styled(Link)`
${outlineButtonStyles} ${outlineButtonStyles}
margin-top: 40px; margin-top: 15px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;

@ -34,7 +34,7 @@ export const CardStep = () => {
/> />
</Row> </Row>
</Card> </Card>
<ButtonsBlock> <ButtonsBlock marginTop={60}>
<ButtonSolid type='submit'> <ButtonSolid type='submit'>
<T9n t='next' /> <T9n t='next' />
</ButtonSolid> </ButtonSolid>

@ -11,7 +11,7 @@ import { useValidateForm } from './useValidateForm'
export const useSubmitHandler = () => { export const useSubmitHandler = () => {
const { register } = useAuthStore() const { register } = useAuthStore()
const { readFormValue } = useForm() const { readFormValue, updateFormError } = useForm()
const validateForm = useValidateForm() const validateForm = useValidateForm()
const readTrimmedValue = (fieldName: string) => trim(readFormValue(fieldName)) const readTrimmedValue = (fieldName: string) => trim(readFormValue(fieldName))
@ -26,6 +26,8 @@ export const useSubmitHandler = () => {
register({ register({
email, email,
password, password,
}).catch((message) => {
updateFormError(formIds.formError, message)
}) })
} }
} }

@ -44,10 +44,10 @@ const Registration = () => {
onChange={updateFormValue(formIds.password)} onChange={updateFormValue(formIds.password)}
/> />
<ButtonsBlock> <ButtonsBlock>
<Error t={readFormError(formIds.formError) || ''} marginBottom={27} />
<ButtonSolid type='submit'> <ButtonSolid type='submit'>
<T9n t='next' /> <T9n t='next' />
</ButtonSolid> </ButtonSolid>
<Error t={readFormError(formIds.formError) || ''} />
</ButtonsBlock> </ButtonsBlock>
</Form> </Form>
) )

@ -6,7 +6,6 @@ import { PAGES } from 'config'
import { T9n } from 'features/T9n' import { T9n } from 'features/T9n'
import { ButtonSolid } from 'features/Common/Button' import { ButtonSolid } from 'features/Common/Button'
import { ArrowLeft, ArrowRight } from 'features/Common/Arrows' import { ArrowLeft, ArrowRight } from 'features/Common/Arrows'
import { ButtonsBlock } from 'features/Login/styled'
import { MainSubscription } from 'features/Register/components/MainSubscription' import { MainSubscription } from 'features/Register/components/MainSubscription'
import { AdditionalSubscription } from 'features/Register/components/AdditionalSubscription' import { AdditionalSubscription } from 'features/Register/components/AdditionalSubscription'
@ -21,6 +20,7 @@ import {
TotalInfoText, TotalInfoText,
TotalPriceAmmount, TotalPriceAmmount,
TotalPriceDetails, TotalPriceDetails,
ButtonsBlock,
} from './styled' } from './styled'
export const SubscriptionStep = () => { export const SubscriptionStep = () => {
@ -53,7 +53,7 @@ export const SubscriptionStep = () => {
<ArrowRight /> <ArrowRight />
</PricesBlock> </PricesBlock>
</SubscriptionsBlock> </SubscriptionsBlock>
<ButtonsBlock forSubsPage> <ButtonsBlock>
<TotalInfoBlock> <TotalInfoBlock>
<TotalInfoText>Базовая + 2 дополнительно <T9n t='subscription_for' /> <TotalInfoText>Базовая + 2 дополнительно <T9n t='subscription_for' />
<TotalPriceAmmount>6997</TotalPriceAmmount> <TotalPriceAmmount>6997</TotalPriceAmmount>

@ -2,6 +2,21 @@ import styled from 'styled-components/macro'
import { devices } from 'config/devices' import { devices } from 'config/devices'
export const ButtonsBlock = styled.div`
display: flex;
flex-direction: column;
align-items: center;
margin-top: 80px;
margin-bottom: 96px;
position: relative;
@media ${devices.mobile} {
bottom: 20px;
margin-bottom: 0;
position: absolute;
}
`
type SubscriptionsBlockProps = { type SubscriptionsBlockProps = {
forAdditionalTitle?: boolean, forAdditionalTitle?: boolean,
isSubsStep?: boolean, isSubsStep?: boolean,

@ -4,7 +4,6 @@ import {
TOKEN_KEY, TOKEN_KEY,
} from 'config' } from 'config'
import { callApiBase } from 'helpers/callApi' import { callApiBase } from 'helpers/callApi'
import { checkStatus } from 'helpers/callApi/checkStatus'
import { parseJSON } from 'helpers/callApi/parseJSON' import { parseJSON } from 'helpers/callApi/parseJSON'
const proc = PROCEDURES.auth_user const proc = PROCEDURES.auth_user
@ -51,7 +50,6 @@ export const login = async ({
config, config,
url: DATA_URL, url: DATA_URL,
}) })
checkStatus(response)
const token = response.headers.get(TOKEN_KEY) const token = response.headers.get(TOKEN_KEY)
const { _p_status }: Response = await parseJSON(response) const { _p_status }: Response = await parseJSON(response)

@ -1,13 +1,17 @@
import { DATA_URL, PROCEDURES } from 'config' import { DATA_URL, PROCEDURES } from 'config'
import { callApi } from 'helpers' import { callApiBase } from 'helpers'
const proc = PROCEDURES.create_user const proc = PROCEDURES.create_user
const responseStatus = { const statusCodes = {
FAILURE: 2, EMAIL_IN_USE: 2,
SUCCESS: 1, SUCCESS: 1,
} }
const errorMessages = {
[statusCodes.EMAIL_IN_USE]: 'error_email_already_in_use',
}
type Response = { type Response = {
_p_error: string | null, _p_error: string | null,
_p_status: 1 | 2, _p_status: 1 | 2,
@ -32,14 +36,19 @@ export const register = async ({
}, },
} }
const response: Response = await callApi({ try {
const response = await callApiBase({
config, config,
url: DATA_URL, url: DATA_URL,
}) })
if (response._p_status === responseStatus.SUCCESS) { const { _p_status }: Response = await response.json()
if (_p_status === statusCodes.SUCCESS) {
return Promise.resolve(response) return Promise.resolve(response)
} }
return Promise.reject(errorMessages[_p_status])
return Promise.reject(response._p_error) } catch {
return Promise.reject()
}
} }

Loading…
Cancel
Save