Skip to content

refactor: Split React components into logical and representational #1406

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 25 additions & 7 deletions src/main/frontend/src/components/AddCatalogNumbersForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,31 @@ class AddCatalogNumbersForm extends React.PureComponent {
});
}
render() {
const hasValidationErrors = this.state.validationErrors.length > 0;
return (
<AddCatalogNumbersFormView
l10n={this.props.l10n}
handleSubmit={this.handleSubmit}
hasServerError={this.state.hasServerError}
handleChangeCatalog={this.handleChangeCatalog}
handleChangeNumbers={this.handleChangeNumbers}
validationErrors={this.state.validationErrors}
isDisabled={this.state.isDisabled}
/>
);
}
}

class AddCatalogNumbersFormView extends React.PureComponent {
render() {
const {handleSubmit, hasServerError, handleChangeCatalog, handleChangeNumbers, validationErrors, isDisabled} = this.props;
const hasValidationErrors = validationErrors.length > 0;

return (
<div className="col-sm-12 form-group">
<form className={`form-horizontal ${hasValidationErrors ? 'has-error' : ''}`} onSubmit={this.handleSubmit}>
<form className={ `form-horizontal ${hasValidationErrors ? 'has-error' : ''}` } onSubmit={ handleSubmit }>
<div
id="add-catalog-numbers-failed-msg"
className={`alert alert-danger text-center col-sm-8 col-sm-offset-2 ${this.state.hasServerError ? '' : 'hidden'}`}>
className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden'}` }>
{ this.props.l10n['t_server_error'] || 'Server error' }
</div>
<div className="form-group form-group-sm">
Expand All @@ -102,7 +120,7 @@ class AddCatalogNumbersForm extends React.PureComponent {
id="catalog-name"
name="catalogName"
className="form-control"
onChange={this.handleChangeCatalog}>
onChange={ handleChangeCatalog }>
<option value="michel">
{ this.props.l10n['t_michel'] || 'Michel' }
</option>
Expand Down Expand Up @@ -136,20 +154,20 @@ class AddCatalogNumbersForm extends React.PureComponent {
className="form-control"
size="5"
required="required"
onChange={ this.handleChangeNumbers } />
onChange={ handleChangeNumbers } />
</div>
</div>
</div>
<div className="col-sm-offset-3 col-sm-4">
<span
id="catalog-numbers.errors"
className={`help-block ${hasValidationErrors ? '' : 'hidden'}`}>
{ this.state.validationErrors.join(', ') }
{ validationErrors.join(', ') }
</span>
<button
type="submit"
className="btn btn-primary btn-sm"
disabled={ this.state.isDisabled }>
disabled={ isDisabled }>
{ this.props.l10n['t_add'] || 'Add' }
</button>
</div>
Expand Down
66 changes: 42 additions & 24 deletions src/main/frontend/src/components/AddCatalogPriceForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,6 @@ class AddCatalogPriceForm extends React.PureComponent {
});
}

getCurrencyByCatalogName(catalog) {
switch (catalog) {
case 'michel':
case 'yvert':
return ['\u20AC', 'EUR'];
case 'scott':
return ['$', 'USD'];
case 'gibbons':
return ['\u00A3', 'GBP'];
case 'solovyov':
case 'zagorski':
return ['\u20BD', 'RUB'];
}
}

handleSubmit(event) {
event.preventDefault();

Expand Down Expand Up @@ -100,15 +85,48 @@ class AddCatalogPriceForm extends React.PureComponent {
});
}
render() {
const hasValidationErrors = this.state.validationErrors.length > 0;
const [currencySymbol, currencyName] = this.getCurrencyByCatalogName(this.state.catalog);


return (
<AddCatalogPriceFormView
l10n={this.props.l10n}
handleSubmit={this.handleSubmit}
hasServerError={this.state.hasServerError}
handleChangeCatalog={this.handleChangeCatalog}
catalog={this.state.catalog}
handleChangePrice={this.handleChangePrice}
validationErrors={this.state.validationErrors}
isDisabled={this.state.isDisabled}
/>
);
}
}

class AddCatalogPriceFormView extends React.PureComponent {

getCurrencyByCatalogName(catalog) {
switch (catalog) {
case 'michel':
case 'yvert':
return ['\u20AC', 'EUR'];
case 'scott':
return ['$', 'USD'];
case 'gibbons':
return ['\u00A3', 'GBP'];
case 'solovyov':
case 'zagorski':
return ['\u20BD', 'RUB'];
}
}
render() {
const {handleSubmit, hasServerError, handleChangeCatalog, handleChangePrice, validationErrors, isDisabled, catalog} = this.props;
const hasValidationErrors = validationErrors.length > 0;
const [currencySymbol, currencyName] = this.getCurrencyByCatalogName(catalog);
return (
<div className="col-sm-12 form-group">
<form className={`form-horizontal ${hasValidationErrors ? 'has-error' : ''}`} onSubmit={this.handleSubmit}>
<form className={ `form-horizontal ${hasValidationErrors ? 'has-error' : ''}` } onSubmit={ handleSubmit }>
<div
id="add-catalog-price-failed-msg"
className={`alert alert-danger text-center col-sm-8 col-sm-offset-2 ${this.state.hasServerError ? '' : 'hidden'}`}>
className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden'}` }>
{ this.props.l10n['t_server_error'] || 'Server error' }
</div>
<div className="form-group form-group-sm">
Expand All @@ -120,7 +138,7 @@ class AddCatalogPriceForm extends React.PureComponent {
id="catalog-name"
name="catalogName"
className="form-control"
onChange={this.handleChangeCatalog}>
onChange={ handleChangeCatalog }>
<option value="michel">
{ this.props.l10n['t_michel'] || 'Michel' }
</option>
Expand Down Expand Up @@ -156,20 +174,20 @@ class AddCatalogPriceForm extends React.PureComponent {
size="5"
title={ currencyName }
required="required"
onChange={ this.handleChangePrice }/>
onChange={ handleChangePrice } />
</div>
</div>
</div>
<div className="col-sm-offset-3 col-sm-4">
<span
id="catalog-price.errors"
className={`help-block ${hasValidationErrors ? '' : 'hidden'}`}>
{ this.state.validationErrors.join(', ') }
{ validationErrors.join(', ') }
</span>
<button
type="submit"
className="btn btn-primary btn-sm"
disabled={ this.state.isDisabled }>
disabled={ isDisabled }>
{ this.props.l10n['t_add'] || 'Add' }
</button>
</div>
Expand Down
28 changes: 22 additions & 6 deletions src/main/frontend/src/components/AddCommentForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,29 @@ class AddCommentForm extends React.PureComponent {
});
}
render() {
const hasValidationErrors = this.state.validationErrors.length > 0;
return (
<AddCommentFormView
l10n={this.props.l10n}
handleSubmit={this.handleSubmit}
hasServerError={this.state.hasServerError}
handleChange={this.handleChange}
validationErrors={this.state.validationErrors}
isDisabled={this.state.isDisabled}
/>
);
}
}

class AddCommentFormView extends React.PureComponent {
render() {
const {handleSubmit, hasServerError, handleChange, validationErrors, isDisabled} = this.props;
const hasValidationErrors = validationErrors.length > 0;
return (
<div className="col-sm-12 form-group">
<form className={`form-horizontal ${hasValidationErrors ? 'has-error' : ''}`} onSubmit={this.handleSubmit}>
<form className={ `form-horizontal ${hasValidationErrors ? 'has-error' : ''}` } onSubmit={ handleSubmit }>
<div
id="add-comment-failed-msg"
className={`alert alert-danger text-center col-sm-8 col-sm-offset-2 ${this.state.hasServerError ? '' : 'hidden'}`}>
className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden'}` }>
{ this.props.l10n['t_server_error'] || 'Server error' }
</div>
<div className="form-group form-group-sm">
Expand All @@ -93,20 +109,20 @@ class AddCommentForm extends React.PureComponent {
cols="22"
rows="3"
required="required"
onChange={this.handleChange}>
onChange={ handleChange }>
</textarea>
</div>
</div>
<div className="col-sm-offset-3 col-sm-4">
<span
id="comment.errors"
className={`help-block ${hasValidationErrors ? '' : 'hidden'}`}>
{ this.state.validationErrors.join(', ') }
{ validationErrors.join(', ') }
</span>
<button
type="submit"
className="btn btn-primary btn-sm"
disabled={ this.state.isDisabled }>
disabled={ isDisabled }>
{ this.props.l10n['t_add'] || 'Add' }
</button>
</div>
Expand Down
47 changes: 32 additions & 15 deletions src/main/frontend/src/components/AddReleaseYearForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,6 @@ class AddReleaseYearForm extends React.PureComponent {
this.handleChange = this.handleChange.bind(this);
}

generateRange(start, end) {
return new Array(end - start + 1)
.fill()
.map((_, idx) => start + idx);
}

handleChange(event) {
event.preventDefault();
this.setState({
Expand Down Expand Up @@ -81,17 +75,40 @@ class AddReleaseYearForm extends React.PureComponent {
}

render() {
const rangeOfYears = this.generateRange(
this.props.sinceYear,
this.props.tillYear
return (
<AddReleaseYearFormView
l10n={this.props.l10n}
handleSubmit={this.handleSubmit}
hasServerError={this.state.hasServerError}
handleChange={this.handleChange}
validationErrors={this.state.validationErrors}
isDisabled={this.state.isDisabled}
sinceYear={this.props.sinceYear}
tillYear={this.props.tillYear}
/>
);
const hasValidationErrors = this.state.validationErrors.length > 0;
}
}

class AddReleaseYearFormView extends React.PureComponent {

generateRange(start, end) {
return new Array(end - start + 1)
.fill()
.map((_, idx) => start + idx);
}

render() {
const {handleSubmit, hasServerError, handleChange, validationErrors, isDisabled, sinceYear, tillYear} = this.props;
const hasValidationErrors = validationErrors.length > 0;
const rangeOfYears = this.generateRange(sinceYear, tillYear);

return (
<div className="col-sm-12 form-group">
<form className={`form-horizontal ${hasValidationErrors ? 'has-error' : ''}`} onSubmit={this.handleSubmit}>
<form className={ `form-horizontal ${hasValidationErrors ? 'has-error' : ''}` } onSubmit={ handleSubmit }>
<div
id="add-release-year-failed-msg"
className={`alert alert-danger text-center col-sm-8 col-sm-offset-2 ${ this.state.hasServerError ? '' : 'hidden' }`}>
className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden' }` }>
{ this.props.l10n['t_server_error'] || 'Server error' }
</div>
<div className="form-group form-group-sm">
Expand All @@ -104,7 +121,7 @@ class AddReleaseYearForm extends React.PureComponent {
name="release-year"
className="form-control"
required="required"
onChange={this.handleChange}>
onChange={ handleChange }>
<option value=""></option>
{rangeOfYears.map(year => (
<option key={year.toString()} value={year}>
Expand All @@ -118,12 +135,12 @@ class AddReleaseYearForm extends React.PureComponent {
<span
id="release-year.errors"
className={`help-block ${hasValidationErrors ? '' : 'hidden'}`}>
{ this.state.validationErrors.join(', ') }
{ validationErrors.join(', ') }
</span>
<button
type="submit"
className="btn btn-primary btn-sm"
disabled={ this.state.isDisabled }>
disabled={ isDisabled }>
{ this.props.l10n['t_add'] || 'Add' }
</button>
</div>
Expand Down
33 changes: 25 additions & 8 deletions src/main/frontend/src/components/SeriesSaleImportForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,24 @@ class SeriesSaleImportForm extends React.PureComponent {
}

render() {
const hasValidationErrors = this.state.validationErrors.length > 0;
return (
<SeriesSaleImportFormView
l10n={this.props.l10n}
hasServerError={this.state.hasServerError}
handleSubmit={this.handleSubmit}
url={this.state.url}
handleChange={this.handleChange}
isDisabled={this.state.isDisabled}
validationErrors={this.state.validationErrors}
/>
)
}
}

class SeriesSaleImportFormView extends React.PureComponent {
render() {
const { hasServerError, handleSubmit, url, handleChange, isDisabled, validationErrors} = this.props;
const hasValidationErrors = validationErrors.length > 0;

return (
<div className="row">
Expand All @@ -108,15 +125,15 @@ class SeriesSaleImportForm extends React.PureComponent {
</div>
<div className="row">
<div id="import-series-sale-failed-msg"
className={`alert alert-danger text-center col-sm-8 col-sm-offset-2 ${this.state.hasServerError ? '' : 'hidden'}`}>
className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden'}` }>
{ this.props.l10n['t_could_not_import_info'] || 'Could not import information from this page' }
</div>
</div>
<div className="row">
<div className="col-sm-12">
<form id="import-series-sale-form"
className={`form-horizontal ${hasValidationErrors ? 'has-error' : ''}`}
onSubmit={this.handleSubmit}>
onSubmit={ handleSubmit }>

<div className="form-group form-group-sm">
<label htmlFor="series-sale-url" className="control-label col-sm-3">
Expand All @@ -129,12 +146,12 @@ class SeriesSaleImportForm extends React.PureComponent {
type="url"
className="form-control"
required="required"
value={this.state.url}
onChange={this.handleChange}
disabled={this.state.isDisabled} />
value={ url }
onChange={ handleChange }
disabled={ isDisabled } />
<span id="series-sale-url.errors"
className={`help-block ${hasValidationErrors ? '' : 'hidden'}`}>
{ this.state.validationErrors.join(', ') }
{ validationErrors.join(', ') }
</span>
</div>
</div>
Expand All @@ -143,7 +160,7 @@ class SeriesSaleImportForm extends React.PureComponent {
<div className="col-sm-offset-3 col-sm-4">
<button type="submit"
className="btn btn-primary btn-sm"
disabled={this.state.isDisabled}>
disabled={ isDisabled }>
{ this.props.l10n['t_import_info'] || 'Import info' }
</button>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public final class ResourceUrl {
public static final String STATIC_RESOURCES_URL = "https://stamps.filezz.ru";

// MUST be updated when any of our resources were modified
public static final String RESOURCES_VERSION = "v0.4.3.7";
public static final String RESOURCES_VERSION = "v0.4.3.8";

// CheckStyle: ignore LineLength for next 15 lines
private static final String CATALOG_UTILS_JS = "/public/js/" + RESOURCES_VERSION + "/CatalogUtils.min.js";
Expand Down