diff --git a/package.json b/package.json index 10250a77..5683ff3d 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-dom-confetti": "^0.2.0", - "react-dropzone": "^12.0.4", + "react-dropzone": "^14.2.3", "react-foundation-components": "git+https://github.com/golos-blockchain/react-foundation-components.git#6606fd5529f1ccbc77cd8d33a8ce139fdf8f9a11", "react-intl": "^5.24.6", "react-notification": "^6.8.5", diff --git a/src/components/modules/CreateGroup.jsx b/src/components/modules/CreateGroup.jsx index 97defcc3..16c33654 100644 --- a/src/components/modules/CreateGroup.jsx +++ b/src/components/modules/CreateGroup.jsx @@ -5,7 +5,6 @@ import { Map } from 'immutable' import { api, formatter } from 'golos-lib-js' import { Asset, Price, AssetEditor } from 'golos-lib-js/lib/utils' import tt from 'counterpart' -import getSlug from 'speakingurl' import g from 'app/redux/GlobalReducer' import transaction from 'app/redux/TransactionReducer' @@ -15,13 +14,15 @@ import Icon from 'app/components/elements/Icon' import LoadingIndicator from 'app/components/elements/LoadingIndicator' import FormikAgent from 'app/components/elements/donate/FormikUtils' import Stepper from 'app/components/elements/messages/Stepper' +import GroupName, { validateNameStep } from 'app/components/modules/groups/GroupName' +import GroupLogo from 'app/components/modules/groups/GroupLogo' -const STEPS = { +const STEPS = () => { return { name: tt('create_group_jsx.step_name'), logo: tt('create_group_jsx.step_logo'), admin: tt('create_group_jsx.step_admin'), create: tt('create_group_jsx.step_create') -} +} } class CreateGroup extends React.Component { constructor(props) { @@ -32,7 +33,9 @@ class CreateGroup extends React.Component { title: '', name: '', is_encrypted: true, - privacy: 'public_group' + privacy: 'public_group', + + logo: '', } } this.stepperRef = React.createRef() @@ -80,28 +83,9 @@ class CreateGroup extends React.Component { validate = async (values) => { const errors = {} - if (!values.title) { - errors.title = tt('g.required') - } - if (values.name) { - if (values.name.length < 3) { - errors.name = tt('create_group_jsx.group_min_length') - } else { - let group - try { - console.time('x') - group = await api.getGroupsAsync({ - start_group: values.name, - limit: 1 - }) - console.timeEnd('x') - } catch (err) { - console.error(err) - } - if (group && group[0]) { - errors.name = tt('create_group_jsx.group_already_exists') - } - } + const { step } = this.state + if (step === 'name') { + await validateNameStep(values, errors, (validating) => this.setState({ validating })) } return errors } @@ -117,37 +101,8 @@ class CreateGroup extends React.Component { }) } - onTitleChange = (e, setFieldValue, setFieldTouched) => { - const { value } = e.target - if (value.trimLeft() !== value) { - return - } - setFieldValue('title', value) - let link = getSlug(value) - setFieldValue('name', link) - setFieldTouched('name', true) - this.setState({ - showName: true - }) - } - - onNameChange = (e, setFieldValue) => { - const { value } = e.target - for (const c of value) { - if ((c > 'z' || c < 'a') && c !== '-' && c !== '_') { - return - } - } - setFieldValue('name', value) - } - - onPrivacyChange = (e, setFieldValue) => { - setFieldValue('privacy', e.target.value) - setFieldValue('is_encrypted', true) - } - render() { - const { showName, step, loaded, createError } = this.state + const { step, loaded, createError, validating } = this.state let form if (!loaded) { @@ -181,83 +136,19 @@ class CreateGroup extends React.Component { {({ handleSubmit, isSubmitting, isValid, values, setFieldValue, setFieldTouched, handleChange, }) => { - const disabled = !isValid + const disabled = !isValid || validating return (