2019-12-30 14:17:29 +05:30
import React from 'react' ;
2020-06-04 22:11:27 +05:30
import { defineMessages , FormattedMessage as Message } from 'react-intl' ;
2019-12-30 12:59:39 +05:30
import { Helmet } from 'react-helmet-async' ;
2019-12-08 00:32:00 +05:30
import { Input , Button , Form , FormModel } from 'app/components/ui/form' ;
import { BackButton } from 'app/components/profile/ProfileForm' ;
2016-05-02 23:02:03 +05:30
2019-12-30 14:17:29 +05:30
import styles from '../profileForm.scss' ;
2020-06-04 22:11:27 +05:30
const labels = defineMessages ( {
changeUsernameButton : 'Change nickname' ,
} ) ;
2016-05-02 18:43:18 +05:30
2019-12-30 14:17:29 +05:30
interface Props {
2020-05-24 04:38:24 +05:30
username : string ;
form : FormModel ;
onChange : ( name : string ) = > void ;
onSubmit : ( form : FormModel ) = > Promise < void > ;
2019-12-30 14:17:29 +05:30
}
2019-11-27 14:33:32 +05:30
2019-12-30 14:17:29 +05:30
export default class ChangeUsername extends React . Component < Props > {
2020-05-24 04:38:24 +05:30
static get defaultProps ( ) : Partial < Props > {
return {
form : new FormModel ( ) ,
} ;
}
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
render() {
const { form , username } = this . props ;
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
return (
< Form onSubmit = { this . onFormSubmit } form = { form } >
< div className = { styles . contentWithBackButton } >
< BackButton / >
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
< div className = { styles . form } >
< div className = { styles . formBody } >
2020-06-04 22:11:27 +05:30
< Message key = "changeUsernameTitle" defaultMessage = "Change nickname" >
2020-05-24 04:38:24 +05:30
{ ( pageTitle ) = > (
< h3 className = { styles . title } >
< Helmet title = { pageTitle as string } / >
{ pageTitle }
< / h3 >
) }
< / Message >
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
< div className = { styles . formRow } >
< p className = { styles . description } >
2020-06-04 22:11:27 +05:30
< Message
key = "changeUsernameDescription"
defaultMessage = "You can change your nickname to any arbitrary value. Remember that it is not recommended to take a nickname of already existing Mojang account."
/ >
2020-05-24 04:38:24 +05:30
< / p >
< / div >
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
< div className = { styles . formRow } >
< Input
{ . . . form . bindField ( 'username' ) }
value = { username }
onChange = { this . onUsernameChange }
required
skin = "light"
/ >
< / div >
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
< div className = { styles . formRow } >
< p className = { styles . description } >
2020-06-04 22:11:27 +05:30
< Message
key = "changeUsernameWarning"
defaultMessage = "Be careful: if you playing on the server with nickname binding, then after changing nickname you may lose all your progress."
/ >
2020-05-24 04:38:24 +05:30
< / p >
< / div >
< / div >
2019-11-27 14:33:32 +05:30
2020-06-04 22:11:27 +05:30
< Button color = "green" block label = { labels . changeUsernameButton } type = "submit" / >
2020-05-24 04:38:24 +05:30
< / div >
< / div >
< / Form >
) ;
}
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
onUsernameChange = ( event : React.ChangeEvent < HTMLInputElement > ) = > {
this . props . onChange ( event . target . value ) ;
} ;
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
onFormSubmit = ( ) = > {
const { form } = this . props ;
2019-11-27 14:33:32 +05:30
2020-05-24 04:38:24 +05:30
this . props . onSubmit ( form ) . catch ( ( resp ) = > {
if ( resp . errors ) {
form . setErrors ( resp . errors ) ;
} else {
return Promise . reject ( resp ) ;
}
} ) ;
} ;
2016-05-02 18:43:18 +05:30
}