From 4e2ef069a7fead71915bb2bd27c1161982a2edce Mon Sep 17 00:00:00 2001 From: Bakhodyr Kadyrov Date: Sun, 24 May 2020 10:22:05 +0600 Subject: [PATCH] refactor: Split React components into logical and representational Fix #1405 --- .../src/components/AddCatalogNumbersForm.js | 32 +++++++-- .../src/components/AddCatalogPriceForm.js | 66 ++++++++++++------- .../frontend/src/components/AddCommentForm.js | 28 ++++++-- .../src/components/AddReleaseYearForm.js | 47 ++++++++----- .../src/components/SeriesSaleImportForm.js | 33 +++++++--- .../web/feature/site/ResourceUrl.java | 2 +- 6 files changed, 147 insertions(+), 61 deletions(-) diff --git a/src/main/frontend/src/components/AddCatalogNumbersForm.js b/src/main/frontend/src/components/AddCatalogNumbersForm.js index a58353908a..35decea1cd 100644 --- a/src/main/frontend/src/components/AddCatalogNumbersForm.js +++ b/src/main/frontend/src/components/AddCatalogNumbersForm.js @@ -84,13 +84,31 @@ class AddCatalogNumbersForm extends React.PureComponent { }); } render() { - const hasValidationErrors = this.state.validationErrors.length > 0; + return ( + + ); + } +} + +class AddCatalogNumbersFormView extends React.PureComponent { + render() { + const {handleSubmit, hasServerError, handleChangeCatalog, handleChangeNumbers, validationErrors, isDisabled} = this.props; + const hasValidationErrors = validationErrors.length > 0; + return (
-
+
+ className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden'}` }> { this.props.l10n['t_server_error'] || 'Server error' }
@@ -102,7 +120,7 @@ class AddCatalogNumbersForm extends React.PureComponent { id="catalog-name" name="catalogName" className="form-control" - onChange={this.handleChangeCatalog}> + onChange={ handleChangeCatalog }> @@ -136,7 +154,7 @@ class AddCatalogNumbersForm extends React.PureComponent { className="form-control" size="5" required="required" - onChange={ this.handleChangeNumbers } /> + onChange={ handleChangeNumbers } />
@@ -144,12 +162,12 @@ class AddCatalogNumbersForm extends React.PureComponent { - { this.state.validationErrors.join(', ') } + { validationErrors.join(', ') } diff --git a/src/main/frontend/src/components/AddCatalogPriceForm.js b/src/main/frontend/src/components/AddCatalogPriceForm.js index 6c3532740d..c9af8f0e08 100644 --- a/src/main/frontend/src/components/AddCatalogPriceForm.js +++ b/src/main/frontend/src/components/AddCatalogPriceForm.js @@ -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(); @@ -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 ( + + ); + } +} + +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 (
- +
+ className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden'}` }> { this.props.l10n['t_server_error'] || 'Server error' }
@@ -120,7 +138,7 @@ class AddCatalogPriceForm extends React.PureComponent { id="catalog-name" name="catalogName" className="form-control" - onChange={this.handleChangeCatalog}> + onChange={ handleChangeCatalog }> @@ -156,7 +174,7 @@ class AddCatalogPriceForm extends React.PureComponent { size="5" title={ currencyName } required="required" - onChange={ this.handleChangePrice }/> + onChange={ handleChangePrice } />
@@ -164,12 +182,12 @@ class AddCatalogPriceForm extends React.PureComponent { - { this.state.validationErrors.join(', ') } + { validationErrors.join(', ') } diff --git a/src/main/frontend/src/components/AddCommentForm.js b/src/main/frontend/src/components/AddCommentForm.js index acd73b95fb..6cd42cda98 100644 --- a/src/main/frontend/src/components/AddCommentForm.js +++ b/src/main/frontend/src/components/AddCommentForm.js @@ -73,13 +73,29 @@ class AddCommentForm extends React.PureComponent { }); } render() { - const hasValidationErrors = this.state.validationErrors.length > 0; + return ( + + ); + } +} + +class AddCommentFormView extends React.PureComponent { + render() { + const {handleSubmit, hasServerError, handleChange, validationErrors, isDisabled} = this.props; + const hasValidationErrors = validationErrors.length > 0; return (
- +
+ className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden'}` }> { this.props.l10n['t_server_error'] || 'Server error' }
@@ -93,7 +109,7 @@ class AddCommentForm extends React.PureComponent { cols="22" rows="3" required="required" - onChange={this.handleChange}> + onChange={ handleChange }>
@@ -101,12 +117,12 @@ class AddCommentForm extends React.PureComponent { - { this.state.validationErrors.join(', ') } + { validationErrors.join(', ') } diff --git a/src/main/frontend/src/components/AddReleaseYearForm.js b/src/main/frontend/src/components/AddReleaseYearForm.js index 76be6b1da4..9ce8fbbcd9 100644 --- a/src/main/frontend/src/components/AddReleaseYearForm.js +++ b/src/main/frontend/src/components/AddReleaseYearForm.js @@ -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({ @@ -81,17 +75,40 @@ class AddReleaseYearForm extends React.PureComponent { } render() { - const rangeOfYears = this.generateRange( - this.props.sinceYear, - this.props.tillYear + return ( + ); - 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 (
- +
+ className={ `alert alert-danger text-center col-sm-8 col-sm-offset-2 ${hasServerError ? '' : 'hidden' }` }> { this.props.l10n['t_server_error'] || 'Server error' }
@@ -104,7 +121,7 @@ class AddReleaseYearForm extends React.PureComponent { name="release-year" className="form-control" required="required" - onChange={this.handleChange}> + onChange={ handleChange }> {rangeOfYears.map(year => (
diff --git a/src/main/frontend/src/components/SeriesSaleImportForm.js b/src/main/frontend/src/components/SeriesSaleImportForm.js index 0def30bea7..2c286a92d3 100644 --- a/src/main/frontend/src/components/SeriesSaleImportForm.js +++ b/src/main/frontend/src/components/SeriesSaleImportForm.js @@ -94,7 +94,24 @@ class SeriesSaleImportForm extends React.PureComponent { } render() { - const hasValidationErrors = this.state.validationErrors.length > 0; + return ( + + ) + } +} + +class SeriesSaleImportFormView extends React.PureComponent { + render() { + const { hasServerError, handleSubmit, url, handleChange, isDisabled, validationErrors} = this.props; + const hasValidationErrors = validationErrors.length > 0; return (
@@ -108,7 +125,7 @@ class SeriesSaleImportForm extends React.PureComponent {
+ 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' }
@@ -116,7 +133,7 @@ class SeriesSaleImportForm extends React.PureComponent {
+ onSubmit={ handleSubmit }>
@@ -143,7 +160,7 @@ class SeriesSaleImportForm extends React.PureComponent {
diff --git a/src/main/java/ru/mystamps/web/feature/site/ResourceUrl.java b/src/main/java/ru/mystamps/web/feature/site/ResourceUrl.java index 2a4723f5e5..9f59e353ba 100644 --- a/src/main/java/ru/mystamps/web/feature/site/ResourceUrl.java +++ b/src/main/java/ru/mystamps/web/feature/site/ResourceUrl.java @@ -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";