Ott 1575 add arrow loader (#503)

* fix(#1575): add arrowloader for personal info form

* feat(#1575): add arrow loader

* fix(#1575): delete env
keep-around/af30b88d367751c9e05a735e4a0467a96238ef47
Andrei Dekterev 4 years ago committed by Mirlan
parent bde02bb378
commit 38152114a1
  1. 10
      src/features/UserAccount/components/PagePersonalInfo/hooks/index.tsx
  2. 8
      src/features/UserAccount/components/PagePersonalInfo/index.tsx
  3. 4
      src/features/UserAccount/components/PersonalInfoForm/hooks/useUserInfo.tsx
  4. 4
      src/features/UserAccount/components/PersonalInfoForm/index.tsx

@ -63,6 +63,7 @@ const transformToFormState = async (userInfo: UserInfo) => {
export const useUserInfo = () => { export const useUserInfo = () => {
const { changeLang, lang } = useLexicsStore() const { changeLang, lang } = useLexicsStore()
const [userInfo, setUserInfo] = useState<FormState>() const [userInfo, setUserInfo] = useState<FormState>()
const [loader, setLoader] = useState<boolean>(false)
const fetchUserInfo = useCallback(() => { const fetchUserInfo = useCallback(() => {
getUserInfo() getUserInfo()
@ -71,12 +72,13 @@ export const useUserInfo = () => {
}, []) }, [])
const onSubmit = useCallback((data: SaveWithLang) => { const onSubmit = useCallback((data: SaveWithLang) => {
setLoader(true)
saveUserInfo(data).then(() => { saveUserInfo(data).then(() => {
fetchUserInfo() fetchUserInfo()
if (data.language) { if (data.language) {
changeLang(data.language as Languages) changeLang(data.language as Languages)
} }
}) }).finally(() => setLoader(false))
}, [fetchUserInfo, changeLang]) }, [fetchUserInfo, changeLang])
useEffect(() => { useEffect(() => {
@ -90,5 +92,9 @@ export const useUserInfo = () => {
} }
: null), [userInfo, lang]) : null), [userInfo, lang])
return { onSubmit, userInfo: user } return {
loader,
onSubmit,
userInfo: user,
}
} }

@ -4,11 +4,15 @@ import { useUserInfo } from './hooks'
import { PersonalInfoForm } from '../PersonalInfoForm' import { PersonalInfoForm } from '../PersonalInfoForm'
export const PagePersonalInfo = () => { export const PagePersonalInfo = () => {
const { onSubmit, userInfo } = useUserInfo() const {
loader,
onSubmit,
userInfo,
} = useUserInfo()
if (!userInfo) return null if (!userInfo) return null
return ( return (
<FormStore initialState={userInfo}> <FormStore initialState={userInfo}>
<PersonalInfoForm onSubmit={onSubmit} /> <PersonalInfoForm onSubmit={onSubmit} loader={loader} />
</FormStore> </FormStore>
) )
} }

@ -14,10 +14,11 @@ import { Lang, langOptions } from '../config'
import type { SaveWithLang } from '../../PagePersonalInfo/hooks' import type { SaveWithLang } from '../../PagePersonalInfo/hooks'
export type Props = { export type Props = {
loader?: boolean,
onSubmit: (data: SaveWithLang) => void, onSubmit: (data: SaveWithLang) => void,
} }
export const useUserInfo = ({ onSubmit }: Props) => { export const useUserInfo = ({ loader, onSubmit }: Props) => {
const { const {
hasChanges, hasChanges,
readFormError, readFormError,
@ -97,6 +98,7 @@ export const useUserInfo = ({ onSubmit }: Props) => {
handleSubmit, handleSubmit,
hasChanges, hasChanges,
lang: selectedlangOption, lang: selectedlangOption,
loader,
onCountryBlur, onCountryBlur,
onCountrySelect, onCountrySelect,
onLangSelect, onLangSelect,

@ -5,6 +5,7 @@ import { Combobox } from 'features/Combobox'
import { Input } from 'features/Common' import { Input } from 'features/Common'
import { T9n } from 'features/T9n' import { T9n } from 'features/T9n'
import { Error } from 'features/Common/Input/styled' import { Error } from 'features/Common/Input/styled'
import { ArrowLoader } from 'features/ArrowLoader'
import type { Props } from './hooks/useUserInfo' import type { Props } from './hooks/useUserInfo'
import { useUserInfo } from './hooks/useUserInfo' import { useUserInfo } from './hooks/useUserInfo'
@ -39,6 +40,7 @@ export const PersonalInfoForm = (props: Props) => {
handleSubmit, handleSubmit,
hasChanges, hasChanges,
lang, lang,
loader,
onCountryBlur, onCountryBlur,
onCountrySelect, onCountrySelect,
onLangSelect, onLangSelect,
@ -137,6 +139,7 @@ export const PersonalInfoForm = (props: Props) => {
onChange={updateFormValue(newPassword2)} onChange={updateFormValue(newPassword2)}
/> />
<ButtonWrapper> <ButtonWrapper>
{loader ? <ArrowLoader disabled width='204px' /> : (
<SolidButton <SolidButton
disabled={!hasChanges()} disabled={!hasChanges()}
type='button' type='button'
@ -144,6 +147,7 @@ export const PersonalInfoForm = (props: Props) => {
> >
<T9n t='save_changes' /> <T9n t='save_changes' />
</SolidButton> </SolidButton>
)}
<Error t={readFormError(formError) || ''} /> <Error t={readFormError(formError) || ''} />
</ButtonWrapper> </ButtonWrapper>
<PrivacyPolicyLink <PrivacyPolicyLink

Loading…
Cancel
Save