import React, { FC, FormEvent, useCallback, useEffect, useMemo, useState } from 'react'; import { connect } from 'react-redux'; import { DIALOGS, IDialogProps } from '~/redux/modal/constants'; import { useCloseOnEscape } from '~/utils/hooks'; import { Group } from '~/components/containers/Group'; import { InputText } from '~/components/input/InputText'; import { Button } from '~/components/input/Button'; import { Padder } from '~/components/containers/Padder'; import { selectAuthLogin } from '~/redux/auth/selectors'; import { API } from '~/constants/api'; import { BetterScrollDialog } from '../BetterScrollDialog'; import * as styles from './styles.scss'; import * as ACTIONS from '~/redux/auth/actions'; import * as MODAL_ACTIONS from '~/redux/modal/actions'; import { ISocialProvider } from '~/redux/auth/types'; import pick from 'ramda/es/pick'; import { LoginDialogButtons } from '~/containers/dialogs/LoginDialogButtons'; import { IOAuthEvent, OAUTH_EVENT_TYPES } from '~/redux/types'; import { DialogTitle } from '~/components/dialogs/DialogTitle'; const mapStateToProps = state => ({ ...pick(['error', 'is_registering'], selectAuthLogin(state)), }); const mapDispatchToProps = { userSendLoginRequest: ACTIONS.userSendLoginRequest, userSetLoginError: ACTIONS.userSetLoginError, authLoginWithSocial: ACTIONS.authLoginWithSocial, modalShowDialog: MODAL_ACTIONS.modalShowDialog, authGotOauthEvent: ACTIONS.authGotOauthEvent, }; type IProps = ReturnType & typeof mapDispatchToProps & IDialogProps & {}; const LoginDialogUnconnected: FC = ({ error, onRequestClose, userSendLoginRequest, userSetLoginError, authLoginWithSocial, modalShowDialog, authGotOauthEvent, }) => { const [username, setUserName] = useState(''); const [password, setPassword] = useState(''); const onSubmit = useCallback( (event: FormEvent) => { event.preventDefault(); userSendLoginRequest({ username, password }); }, [userSendLoginRequest, username, password] ); const onRestoreRequest = useCallback( event => { console.log('a', { MODAL_ACTIONS, modalShowDialog, userSetLoginError }); event.preventDefault(); modalShowDialog(DIALOGS.RESTORE_REQUEST); }, [modalShowDialog, userSetLoginError] ); const openOauthWindow = useCallback( (provider: ISocialProvider) => () => { window.open(API.USER.OAUTH_WINDOW(provider), '', 'width=600,height=400'); }, [] ); const onMessage = useCallback( (event: MessageEvent) => { if (!event?.data?.type || !Object.values(OAUTH_EVENT_TYPES).includes(event.data.type)) { return; } authGotOauthEvent(event.data); }, [authGotOauthEvent] ); useEffect(() => { if (error) userSetLoginError(null); }, [username, password]); useEffect(() => { window.addEventListener('message', onMessage); return () => window.removeEventListener('message', onMessage); }, [onMessage]); useCloseOnEscape(onRequestClose); return (
} >
Решительно войти
); }; const LoginDialog = connect(mapStateToProps, mapDispatchToProps)(LoginDialogUnconnected); export { LoginDialog };