diff --git a/packages/app/i18n/en.pot b/packages/app/i18n/en.pot index bbbc040dc8..9b1a65e48b 100644 --- a/packages/app/i18n/en.pot +++ b/packages/app/i18n/en.pot @@ -523,6 +523,14 @@ msgstr "" msgid "Add at least one item to {{axisName}}." msgstr "" +msgid "{{columnsAxisName}} and {{rowsAxisName}} are empty" +msgstr "" + +msgid "" +"Add at least one item to {{columnsAxisName}} or {{rowsAxisName}} to create " +"a {{visualizationType}}." +msgstr "" + msgid "No period selected" msgstr "" diff --git a/packages/app/package.json b/packages/app/package.json index 2a74c3a7c6..004ce423bb 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -12,7 +12,7 @@ "redux-mock-store": "^1.5.3" }, "dependencies": { - "@dhis2/analytics": "^4.3.8", + "@dhis2/analytics": "^4.3.11", "@dhis2/app-runtime": "*", "@dhis2/d2-i18n": "*", "@dhis2/d2-ui-core": "^6.5.5", diff --git a/packages/app/src/modules/error.js b/packages/app/src/modules/error.js index d6eb2b8786..223c837efd 100644 --- a/packages/app/src/modules/error.js +++ b/packages/app/src/modules/error.js @@ -79,6 +79,38 @@ export class NoCategoryError extends VisualizationError { } } +export class NoSeriesOrCategoryError extends VisualizationError { + constructor(visType) { + super( + EmptyBox, + i18n.t(`{{columnsAxisName}} and {{rowsAxisName}} are empty`, { + columnsAxisName: getAxisNameByLayoutType( + AXIS_ID_COLUMNS, + getLayoutTypeByVisType(visType) + ), + rowsAxisName: getAxisNameByLayoutType( + AXIS_ID_ROWS, + getLayoutTypeByVisType(visType) + ), + }), + i18n.t( + 'Add at least one item to {{columnsAxisName}} or {{rowsAxisName}} to create a {{visualizationType}}.', + { + columnsAxisName: getAxisNameByLayoutType( + AXIS_ID_COLUMNS, + getLayoutTypeByVisType(visType) + ), + rowsAxisName: getAxisNameByLayoutType( + AXIS_ID_ROWS, + getLayoutTypeByVisType(visType) + ), + visualizationType: getDisplayNameByVisType(visType), + } + ) + ) + } +} + export class NoPeriodError extends VisualizationError { constructor(visType) { super( diff --git a/packages/app/src/modules/layoutValidation.js b/packages/app/src/modules/layoutValidation.js index fc9ebd3f96..13fdb13f6f 100644 --- a/packages/app/src/modules/layoutValidation.js +++ b/packages/app/src/modules/layoutValidation.js @@ -6,6 +6,7 @@ import { VIS_TYPE_PIE, VIS_TYPE_GAUGE, VIS_TYPE_SINGLE_VALUE, + VIS_TYPE_PIVOT_TABLE, getPredefinedDimensionProp, dimensionIsValid, layoutGetDimension, @@ -19,6 +20,7 @@ import { NoCategoryError, NoPeriodError, NoDataError, + NoSeriesOrCategoryError, } from './error' // Layout validation helper functions @@ -55,6 +57,16 @@ const validateDefaultLayout = layout => { ) } +const validatePivotTableLayout = layout => { + if (!isAxisValid(layout.columns) && !isAxisValid(layout.rows)) { + throw new NoSeriesOrCategoryError(layout.type) + } + validateDimension( + layoutGetDimension(layout, DIMENSION_ID_PERIOD), + new NoPeriodError(layout.type) + ) +} + const validateYearOverYearLayout = layout => { validateDimension( layoutGetDimension(layout, DIMENSION_ID_DATA), @@ -93,8 +105,6 @@ const validateSingleValueLayout = layout => { ) } -// TODO: Add validatePivotLayout - export const validateLayout = layout => { switch (layout.type) { case VIS_TYPE_PIE: @@ -105,6 +115,8 @@ export const validateLayout = layout => { case VIS_TYPE_SINGLE_VALUE: case VIS_TYPE_GAUGE: return validateSingleValueLayout(layout) + case VIS_TYPE_PIVOT_TABLE: + return validatePivotTableLayout(layout) default: return validateDefaultLayout(layout) } diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 9e0694a005..6795f38ed3 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@dhis2/analytics": "^4.3.8", + "@dhis2/analytics": "^4.3.11", "@material-ui/core": "^3.1.2", "d2-analysis": "33.2.11", "lodash-es": "^4.17.11" diff --git a/yarn.lock b/yarn.lock index b12edc2699..7cf02aba14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1417,9 +1417,9 @@ lodash.once "^4.1.1" "@dhis2/analytics@^4.0.1": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-4.3.6.tgz#67e301b45a81e12502051f0a1533ae07ad580b28" - integrity sha512-t4nI8oa3Mp5LlhPuYIEaV4TmdGLYnsa1zhCAHzC0dWjSmp9/fy/+0LXxCguBLagnJKL8ONrMob1X07L1GIvz4A== + version "4.3.10" + resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-4.3.10.tgz#32844e1832ba76db4cf570df96592643482036bf" + integrity sha512-yKu1QnnMJbI3I4eM7P4A0meSk533KfS4mzgB7HxaVxg/UTSQdPQk67jRWwSqfjjv/atv8pmWOpSQQ99Ni/ePug== dependencies: "@dhis2/d2-i18n" "^1.0.4" "@dhis2/d2-ui-org-unit-dialog" "^6.5.9" @@ -1436,10 +1436,10 @@ resize-observer-polyfill "^1.5.1" styled-jsx "^3.2.1" -"@dhis2/analytics@^4.3.8": - version "4.3.8" - resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-4.3.8.tgz#3fca235bc36cd09d1df78e3f15946b3a46aec2f7" - integrity sha512-Gxm00ECiOzXNluJsPMp7J5VKCJUz0cIqENbmhu2Osm04MvfNtO2YmS9SghjfZIP7GB7eFJDDz/eRlomXDwy3yw== +"@dhis2/analytics@^4.3.11": + version "4.3.11" + resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-4.3.11.tgz#72874f23478d9f76f906fd975ab101e37daac024" + integrity sha512-2uVw+4zoSpZv5xLbQFcXdeUzhh/JFjO0fJJ675d2L9k6hVZe6ZMlaBVEdhZe2m19ruP4kj/Z6fePCaORqc1Now== dependencies: "@dhis2/d2-i18n" "^1.0.4" "@dhis2/d2-ui-org-unit-dialog" "^6.5.9"