diff --git a/packages/app/i18n/en.pot b/packages/app/i18n/en.pot index f0a5252637..adfc4dd3b4 100644 --- a/packages/app/i18n/en.pot +++ b/packages/app/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2019-11-11T13:15:11.091Z\n" -"PO-Revision-Date: 2019-11-11T13:15:11.091Z\n" +"POT-Creation-Date: 2019-11-11T14:45:11.552Z\n" +"PO-Revision-Date: 2019-11-11T14:45:11.552Z\n" msgid "Rename successful" msgstr "" @@ -45,9 +45,6 @@ msgstr "" msgid "Hide" msgstr "" -msgid "Remove" -msgstr "" - msgid "Download" msgstr "" @@ -114,6 +111,9 @@ msgstr "" msgid "Move to" msgstr "" +msgid "Remove" +msgstr "" + msgid "None selected" msgstr "" @@ -297,45 +297,6 @@ msgstr "" msgid "Chart options" msgstr "" -msgid "Column" -msgstr "" - -msgid "Stacked column" -msgstr "" - -msgid "Bar" -msgstr "" - -msgid "Stacked bar" -msgstr "" - -msgid "Line" -msgstr "" - -msgid "Area" -msgstr "" - -msgid "Pie" -msgstr "" - -msgid "Radar" -msgstr "" - -msgid "Gauge" -msgstr "" - -msgid "Year over year (line)" -msgstr "" - -msgid "Year over year (column)" -msgstr "" - -msgid "Single value" -msgstr "" - -msgid "Open as Map" -msgstr "" - msgid "Reporting rate" msgstr "" diff --git a/packages/app/package.json b/packages/app/package.json index c4eb892717..3ac43d06f8 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -25,7 +25,7 @@ "webpack-bundle-analyzer": "^3.0.3" }, "dependencies": { - "@dhis2/analytics": "^2.5.1", + "@dhis2/analytics": "^2.5.2", "@dhis2/d2-i18n": "^1.0.6", "@dhis2/d2-ui-core": "^6.2.1", "@dhis2/d2-ui-file-menu": "^6.2.1", diff --git a/packages/app/src/actions/current.js b/packages/app/src/actions/current.js index 4c510071c9..6321951131 100644 --- a/packages/app/src/actions/current.js +++ b/packages/app/src/actions/current.js @@ -3,6 +3,7 @@ import { SET_CURRENT_FROM_UI, CLEAR_CURRENT, } from '../reducers/current'; +import { sGetUi } from '../reducers/ui'; export const acSetCurrent = value => ({ type: SET_CURRENT, @@ -17,3 +18,7 @@ export const acSetCurrentFromUi = value => ({ type: SET_CURRENT_FROM_UI, value, }); + +export const tSetCurrentFromUi = () => async (dispatch, getState) => { + dispatch(acSetCurrentFromUi(sGetUi(getState()))); +}; diff --git a/packages/app/src/components/DimensionsPanel/Dialogs/AddToLayoutButton/AddToLayoutButton.js b/packages/app/src/components/DimensionsPanel/Dialogs/AddToLayoutButton/AddToLayoutButton.js index bf13ae2cd9..3c53cfdc5d 100644 --- a/packages/app/src/components/DimensionsPanel/Dialogs/AddToLayoutButton/AddToLayoutButton.js +++ b/packages/app/src/components/DimensionsPanel/Dialogs/AddToLayoutButton/AddToLayoutButton.js @@ -9,15 +9,15 @@ import { getAvailableAxes } from '@dhis2/analytics'; import UpdateButton from '../../../UpdateButton/UpdateButton'; import Menu from './Menu'; import { - sGetUi, sGetUiActiveModalDialog, sGetDimensionIdsFromLayout, + sGetUiType, } from '../../../../reducers/ui'; import { acSetUiActiveModalDialog, acAddUiLayoutDimensions, } from '../../../../actions/ui'; -import { acSetCurrentFromUi } from '../../../../actions/current'; +import { tSetCurrentFromUi } from '../../../../actions/current'; import { ADD_TO_LAYOUT_OPTIONS } from '../../../../modules/layout'; import styles from './styles/AddToLayoutButton.style'; @@ -41,7 +41,9 @@ export class AddToLayoutButton extends Component { this.props.onAddDimension({ [this.props.dialogId]: axisName, }); - this.props.onUpdate(this.props.ui); + + this.props.onUpdate(); + this.props.closeDialog(null); }; @@ -53,7 +55,7 @@ export class AddToLayoutButton extends Component { ); renderMenuItems = () => - this.getAxisMeta(getAvailableAxes(this.props.ui.type)) + this.getAxisMeta(getAvailableAxes(this.props.visType)) .slice(1) .map(axisMetaObj => ( { const availableAxisMeta = this.getAxisMeta( - getAvailableAxes(this.props.ui.type) + getAvailableAxes(this.props.visType) ); return ( @@ -79,7 +81,7 @@ export class AddToLayoutButton extends Component { color="primary" disableRipple disableFocusRipple - onClick={() => this.onUpdate(availableAxisMeta[0].name)} + onClick={() => this.onUpdate(availableAxisMeta[0].axisName)} > {availableAxisMeta[0].name} @@ -117,14 +119,16 @@ export class AddToLayoutButton extends Component { AddToLayoutButton.propTypes = { classes: PropTypes.object.isRequired, + visType: PropTypes.string.isRequired, dialogId: PropTypes.string.isRequired, dimensionIdsInLayout: PropTypes.array.isRequired, - closeDialog: PropTypes.func.isRequired, onAddDimension: PropTypes.func.isRequired, + onUpdate: PropTypes.func.isRequired, + closeDialog: PropTypes.func.isRequired, }; const mapStateToProps = state => ({ - ui: sGetUi(state), + visType: sGetUiType(state), dialogId: sGetUiActiveModalDialog(state), dimensionIdsInLayout: sGetDimensionIdsFromLayout(state), }); @@ -132,8 +136,8 @@ const mapStateToProps = state => ({ export default connect( mapStateToProps, { - closeDialog: acSetUiActiveModalDialog, onAddDimension: acAddUiLayoutDimensions, - onUpdate: acSetCurrentFromUi, + onUpdate: tSetCurrentFromUi, + closeDialog: acSetUiActiveModalDialog, } )(withStyles(styles)(AddToLayoutButton)); diff --git a/packages/app/src/components/DimensionsPanel/Dialogs/DialogManager.js b/packages/app/src/components/DimensionsPanel/Dialogs/DialogManager.js index efb8773302..58b1fc39bd 100644 --- a/packages/app/src/components/DimensionsPanel/Dialogs/DialogManager.js +++ b/packages/app/src/components/DimensionsPanel/Dialogs/DialogManager.js @@ -18,6 +18,7 @@ import { DIMENSION_ID_PERIOD, DIMENSION_ID_ORGUNIT, FIXED_DIMENSIONS, + isSingleValue, } from '@dhis2/analytics'; import HideButton from './HideButton'; @@ -45,7 +46,6 @@ import { sGetMetadata } from '../../../reducers/metadata'; import { sGetSettingsDisplayNameProperty } from '../../../reducers/settings'; import { apiFetchRecommendedIds } from '../../../api/dimensions'; import { removeLastPathSegment, getOuPath } from '../../../modules/orgUnit'; -import { isSingleValue } from '../../../modules/chartTypes'; export class DialogManager extends Component { state = { diff --git a/packages/app/src/components/DimensionsPanel/Dialogs/__tests__/DialogManager.spec.js b/packages/app/src/components/DimensionsPanel/Dialogs/__tests__/DialogManager.spec.js index 2b8ba252a6..4f5a76368c 100644 --- a/packages/app/src/components/DimensionsPanel/Dialogs/__tests__/DialogManager.spec.js +++ b/packages/app/src/components/DimensionsPanel/Dialogs/__tests__/DialogManager.spec.js @@ -28,6 +28,7 @@ jest.mock('@dhis2/analytics', () => { DynamicDimension: () =>
, PeriodDimension: () =>
, OrgUnitDimension: () =>
, + isSingleValue: () => true, DIMENSION_ID_DATA: dataId, DIMENSION_ID_PERIOD: periodId, DIMENSION_ID_ORGUNIT: ouId, diff --git a/packages/app/src/components/DimensionsPanel/DimensionsPanel.js b/packages/app/src/components/DimensionsPanel/DimensionsPanel.js index 059e4f5ac8..8d95ca6642 100644 --- a/packages/app/src/components/DimensionsPanel/DimensionsPanel.js +++ b/packages/app/src/components/DimensionsPanel/DimensionsPanel.js @@ -4,12 +4,12 @@ import { DIMENSION_ID_PERIOD, DimensionsPanel, DimensionMenu, + isYearOverYear, } from '@dhis2/analytics'; import DialogManager from './Dialogs/DialogManager'; import { SOURCE_DIMENSIONS, getInverseLayout } from '../../modules/layout'; import { setDataTransfer } from '../../modules/dnd'; -import { isYearOverYear } from '../../modules/chartTypes'; import * as fromReducers from '../../reducers'; import * as fromActions from '../../actions'; diff --git a/packages/app/src/components/Layout/Chip.js b/packages/app/src/components/Layout/Chip.js index 8d3dbd0ada..ac26edf099 100644 --- a/packages/app/src/components/Layout/Chip.js +++ b/packages/app/src/components/Layout/Chip.js @@ -1,8 +1,12 @@ import React from 'react'; import { connect } from 'react-redux'; -import i18n from '@dhis2/d2-i18n'; -import { FIXED_DIMENSIONS, DIMENSION_ID_DATA } from '@dhis2/analytics'; import WarningIcon from '@material-ui/icons/Warning'; +import i18n from '@dhis2/d2-i18n'; +import { + FIXED_DIMENSIONS, + DIMENSION_ID_DATA, + isSingleValue, +} from '@dhis2/analytics'; import Menu from './Menu'; import Tooltip from './Tooltip'; @@ -12,7 +16,6 @@ import { sGetUiItemsByDimension, sGetUiType } from '../../reducers/ui'; import DynamicDimensionIcon from '../../assets/DynamicDimensionIcon'; import { sGetMetadata } from '../../reducers/metadata'; import { styles } from './styles/Chip.style'; -import { isSingleValue } from '../../modules/chartTypes'; const TOOLTIP_ENTER_DELAY = 500; diff --git a/packages/app/src/components/Layout/DefaultLayout/DefaultAxis.js b/packages/app/src/components/Layout/DefaultLayout/DefaultAxis.js index ce53b8ee7e..987ebfa9cb 100644 --- a/packages/app/src/components/Layout/DefaultLayout/DefaultAxis.js +++ b/packages/app/src/components/Layout/DefaultLayout/DefaultAxis.js @@ -7,6 +7,8 @@ import { AXIS_NAME_COLUMNS, AXIS_NAMES, DIMENSION_ID_DATA, + isYearOverYear, + isDualAxisType, } from '@dhis2/analytics'; import Chip from '../Chip'; @@ -18,7 +20,6 @@ import { } from '../../../actions/ui'; import { SOURCE_DIMENSIONS, menuLabels } from '../../../modules/layout'; import { getAdaptedUiByType } from '../../../modules/ui'; -import { isYearOverYear, isDualAxisType } from '../../../modules/chartTypes'; import styles from './styles/DefaultAxis.style'; diff --git a/packages/app/src/components/Layout/Layout.js b/packages/app/src/components/Layout/Layout.js index e75f1a40a6..be15fc2d11 100644 --- a/packages/app/src/components/Layout/Layout.js +++ b/packages/app/src/components/Layout/Layout.js @@ -1,38 +1,38 @@ import React from 'react'; import { connect } from 'react-redux'; +import { + VIS_TYPE_COLUMN, + VIS_TYPE_STACKED_COLUMN, + VIS_TYPE_BAR, + VIS_TYPE_STACKED_BAR, + VIS_TYPE_LINE, + VIS_TYPE_AREA, + VIS_TYPE_PIE, + VIS_TYPE_RADAR, + VIS_TYPE_GAUGE, + VIS_TYPE_YEAR_OVER_YEAR_LINE, + VIS_TYPE_YEAR_OVER_YEAR_COLUMN, + VIS_TYPE_SINGLE_VALUE, +} from '@dhis2/analytics'; import DefaultLayout from './DefaultLayout/DefaultLayout'; import YearOverYearLayout from './YearOverYearLayout/YearOverYearLayout'; import PieLayout from './PieLayout/PieLayout'; -import { - COLUMN, - STACKED_COLUMN, - BAR, - STACKED_BAR, - LINE, - AREA, - PIE, - RADAR, - GAUGE, - YEAR_OVER_YEAR_LINE, - YEAR_OVER_YEAR_COLUMN, - SINGLE_VALUE, -} from '../../modules/chartTypes'; import { sGetUiType } from '../../reducers/ui'; const layoutMap = { - [COLUMN]: DefaultLayout, - [STACKED_COLUMN]: DefaultLayout, - [BAR]: DefaultLayout, - [STACKED_BAR]: DefaultLayout, - [LINE]: DefaultLayout, - [AREA]: DefaultLayout, - [PIE]: PieLayout, - [RADAR]: DefaultLayout, - [GAUGE]: PieLayout, - [YEAR_OVER_YEAR_LINE]: YearOverYearLayout, - [YEAR_OVER_YEAR_COLUMN]: YearOverYearLayout, - [SINGLE_VALUE]: PieLayout, + [VIS_TYPE_COLUMN]: DefaultLayout, + [VIS_TYPE_STACKED_COLUMN]: DefaultLayout, + [VIS_TYPE_BAR]: DefaultLayout, + [VIS_TYPE_STACKED_BAR]: DefaultLayout, + [VIS_TYPE_LINE]: DefaultLayout, + [VIS_TYPE_AREA]: DefaultLayout, + [VIS_TYPE_PIE]: PieLayout, + [VIS_TYPE_RADAR]: DefaultLayout, + [VIS_TYPE_GAUGE]: PieLayout, + [VIS_TYPE_YEAR_OVER_YEAR_LINE]: YearOverYearLayout, + [VIS_TYPE_YEAR_OVER_YEAR_COLUMN]: YearOverYearLayout, + [VIS_TYPE_SINGLE_VALUE]: PieLayout, }; const getLayoutByType = (type, props) => { diff --git a/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeIcon.js b/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeIcon.js index 47070d4ed8..08771c3ced 100644 --- a/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeIcon.js +++ b/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeIcon.js @@ -1,5 +1,21 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { + VIS_TYPE_COLUMN, + VIS_TYPE_STACKED_COLUMN, + VIS_TYPE_BAR, + VIS_TYPE_STACKED_BAR, + VIS_TYPE_LINE, + VIS_TYPE_AREA, + VIS_TYPE_PIE, + VIS_TYPE_RADAR, + VIS_TYPE_GAUGE, + VIS_TYPE_YEAR_OVER_YEAR_LINE, + VIS_TYPE_YEAR_OVER_YEAR_COLUMN, + VIS_TYPE_SINGLE_VALUE, + VIS_TYPE_MAP, + visTypeDisplayNames, +} from '@dhis2/analytics'; import ColumnIcon from '../../assets/ColumnIcon'; import StackedColumnIcon from '../../assets/StackedColumnIcon'; @@ -15,57 +31,40 @@ import YearOverYearColumnIcon from '../../assets/YearOverYearColumnIcon'; import SingleValueIcon from '../../assets/SingleValueIcon'; import GlobeIcon from '../../assets/GlobeIcon'; -import { - COLUMN, - STACKED_COLUMN, - BAR, - STACKED_BAR, - LINE, - AREA, - PIE, - RADAR, - GAUGE, - YEAR_OVER_YEAR_LINE, - YEAR_OVER_YEAR_COLUMN, - SINGLE_VALUE, - OPEN_AS_MAP, - chartTypeDisplayNames, -} from '../../modules/chartTypes'; - -const VisualizationTypeIcon = ({ type = COLUMN, style }) => { +const VisualizationTypeIcon = ({ type = VIS_TYPE_COLUMN, style }) => { switch (type) { - case STACKED_COLUMN: + case VIS_TYPE_STACKED_COLUMN: return ; - case BAR: + case VIS_TYPE_BAR: return ; - case STACKED_BAR: + case VIS_TYPE_STACKED_BAR: return ; - case PIE: + case VIS_TYPE_PIE: return ; - case GAUGE: + case VIS_TYPE_GAUGE: return ; - case LINE: + case VIS_TYPE_LINE: return ; - case AREA: + case VIS_TYPE_AREA: return ; - case RADAR: + case VIS_TYPE_RADAR: return ; - case YEAR_OVER_YEAR_LINE: + case VIS_TYPE_YEAR_OVER_YEAR_LINE: return ; - case YEAR_OVER_YEAR_COLUMN: + case VIS_TYPE_YEAR_OVER_YEAR_COLUMN: return ; - case SINGLE_VALUE: + case VIS_TYPE_SINGLE_VALUE: return ; - case OPEN_AS_MAP: + case VIS_TYPE_MAP: return ; - case COLUMN: + case VIS_TYPE_COLUMN: default: return ; } }; VisualizationTypeIcon.propTypes = { - type: PropTypes.oneOf(Object.keys(chartTypeDisplayNames)), + type: PropTypes.oneOf(Object.keys(visTypeDisplayNames)), style: PropTypes.object, }; diff --git a/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeMenuItem.js b/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeMenuItem.js index 211aa8d5b5..2789c1735e 100644 --- a/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeMenuItem.js +++ b/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeMenuItem.js @@ -1,11 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; - import MenuItem from '@material-ui/core/MenuItem/MenuItem'; +import { visTypeDisplayNames } from '@dhis2/analytics'; + import ListItemIcon from '@material-ui/core/ListItemIcon/ListItemIcon'; import ListItemText from '@material-ui/core/ListItemText/ListItemText'; - -import { chartTypeDisplayNames } from '../../modules/chartTypes'; import VisualizationTypeIcon from './VisualizationTypeIcon'; const VisualizationTypeMenuItem = ({ @@ -24,7 +23,7 @@ const VisualizationTypeMenuItem = ({ @@ -32,8 +31,8 @@ const VisualizationTypeMenuItem = ({ ); VisualizationTypeMenuItem.propTypes = { - type: PropTypes.oneOf(Object.keys(chartTypeDisplayNames)), - visualizationType: PropTypes.oneOf(Object.keys(chartTypeDisplayNames)), + type: PropTypes.oneOf(Object.keys(visTypeDisplayNames)), + visualizationType: PropTypes.oneOf(Object.keys(visTypeDisplayNames)), styles: PropTypes.object, }; diff --git a/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeSelector.js b/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeSelector.js index 4ffad570ce..8841ae5404 100644 --- a/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeSelector.js +++ b/packages/app/src/components/VisualizationTypeSelector/VisualizationTypeSelector.js @@ -1,16 +1,15 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; - import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'; import Button from '@material-ui/core/Button'; import Menu from '@material-ui/core/Menu'; - import { - chartTypeDisplayNames, + VIS_TYPE_MAP, + visTypeDisplayNames, isOpenAsType, - OPEN_AS_MAP, -} from '../../modules/chartTypes'; +} from '@dhis2/analytics'; + import { prepareCurrentAnalyticalObject } from '../../modules/currentAnalyticalObject'; import { sGetUi, sGetUiType } from '../../reducers/ui'; import { sGetCurrent } from '../../reducers/current'; @@ -50,7 +49,7 @@ export class VisualizationTypeSelector extends Component { }; handleOpenAsMenuItemClick = type => () => { - if (type === OPEN_AS_MAP) { + if (type === VIS_TYPE_MAP) { this.handleOpenChartAsMapClick(); } }; @@ -72,7 +71,7 @@ export class VisualizationTypeSelector extends Component { }; getChartTypes = () => { - return Object.keys(chartTypeDisplayNames).reduce( + return Object.keys(visTypeDisplayNames).reduce( (result, type) => { const chartType = isOpenAsType(type) ? 'openAsTypes' @@ -102,7 +101,7 @@ export class VisualizationTypeSelector extends Component { style={styles.button} > - {chartTypeDisplayNames[visualizationType]} + {visTypeDisplayNames[visualizationType]} { let props; @@ -18,8 +19,8 @@ describe('VisualizationTypeMenuItem component ', () => { beforeEach(() => { props = { - type: COLUMN, - visualizationType: COLUMN, + type: VIS_TYPE_COLUMN, + visualizationType: VIS_TYPE_COLUMN, styles: {}, }; shallowElement = undefined; diff --git a/packages/app/src/modules/chartTypes.js b/packages/app/src/modules/chartTypes.js deleted file mode 100644 index ad3619ac53..0000000000 --- a/packages/app/src/modules/chartTypes.js +++ /dev/null @@ -1,44 +0,0 @@ -import i18n from '@dhis2/d2-i18n'; - -export const COLUMN = 'COLUMN'; -export const STACKED_COLUMN = 'STACKED_COLUMN'; -export const BAR = 'BAR'; -export const STACKED_BAR = 'STACKED_BAR'; -export const LINE = 'LINE'; -export const AREA = 'AREA'; -export const PIE = 'PIE'; -export const RADAR = 'RADAR'; -export const GAUGE = 'GAUGE'; -export const BUBBLE = 'BUBBLE'; -export const YEAR_OVER_YEAR_LINE = 'YEAR_OVER_YEAR_LINE'; -export const YEAR_OVER_YEAR_COLUMN = 'YEAR_OVER_YEAR_COLUMN'; -export const SINGLE_VALUE = 'SINGLE_VALUE'; -export const OPEN_AS_MAP = 'OPEN_AS_MAP'; - -export const chartTypeDisplayNames = { - [COLUMN]: i18n.t('Column'), - [STACKED_COLUMN]: i18n.t('Stacked column'), - [BAR]: i18n.t('Bar'), - [STACKED_BAR]: i18n.t('Stacked bar'), - [LINE]: i18n.t('Line'), - [AREA]: i18n.t('Area'), - [PIE]: i18n.t('Pie'), - [RADAR]: i18n.t('Radar'), - [GAUGE]: i18n.t('Gauge'), - [YEAR_OVER_YEAR_LINE]: i18n.t('Year over year (line)'), - [YEAR_OVER_YEAR_COLUMN]: i18n.t('Year over year (column)'), - [SINGLE_VALUE]: i18n.t('Single value'), - [OPEN_AS_MAP]: i18n.t('Open as Map'), // TODO Open as: Map when i18next nsSeparator fixed -}; - -const stackedTypes = [STACKED_COLUMN, STACKED_BAR, AREA]; -const yearOverYearTypes = [YEAR_OVER_YEAR_LINE, YEAR_OVER_YEAR_COLUMN]; -const openAsTypes = [OPEN_AS_MAP]; -const dualAxisTypes = [COLUMN, BAR, LINE, AREA]; - -export const defaultChartType = COLUMN; -export const isStacked = type => stackedTypes.includes(type); -export const isYearOverYear = type => yearOverYearTypes.includes(type); -export const isOpenAsType = type => openAsTypes.includes(type); -export const isDualAxisType = type => dualAxisTypes.includes(type); -export const isSingleValue = type => type === SINGLE_VALUE; diff --git a/packages/app/src/modules/layoutValidation.js b/packages/app/src/modules/layoutValidation.js index e09053b2e4..c2c160913f 100644 --- a/packages/app/src/modules/layoutValidation.js +++ b/packages/app/src/modules/layoutValidation.js @@ -4,18 +4,16 @@ import { DIMENSION_ID_DATA, DIMENSION_ID_PERIOD, FIXED_DIMENSIONS, + VIS_TYPE_YEAR_OVER_YEAR_LINE, + VIS_TYPE_YEAR_OVER_YEAR_COLUMN, + VIS_TYPE_PIE, + VIS_TYPE_GAUGE, + VIS_TYPE_SINGLE_VALUE, dimensionIsValid, layoutGetDimension, axisLabels, } from '@dhis2/analytics'; -import { - YEAR_OVER_YEAR_LINE, - YEAR_OVER_YEAR_COLUMN, - PIE, - GAUGE, - SINGLE_VALUE, -} from './chartTypes'; import { BASE_FIELD_YEARLY_SERIES } from './fields/baseFields'; const dxName = FIXED_DIMENSIONS[DIMENSION_ID_DATA].name; @@ -139,13 +137,13 @@ const validateSingleValueLayout = layout => { export const validateLayout = layout => { switch (layout.type) { - case PIE: - case GAUGE: + case VIS_TYPE_PIE: + case VIS_TYPE_GAUGE: return validatePieLayout(layout); - case YEAR_OVER_YEAR_COLUMN: - case YEAR_OVER_YEAR_LINE: + case VIS_TYPE_YEAR_OVER_YEAR_COLUMN: + case VIS_TYPE_YEAR_OVER_YEAR_LINE: return validateYearOverYearLayout(layout); - case SINGLE_VALUE: + case VIS_TYPE_SINGLE_VALUE: return validateSingleValueLayout(layout); default: return validateDefaultLayout(layout); diff --git a/packages/app/src/modules/ui.js b/packages/app/src/modules/ui.js index b631e50785..891b2731eb 100644 --- a/packages/app/src/modules/ui.js +++ b/packages/app/src/modules/ui.js @@ -3,18 +3,16 @@ import { DIMENSION_ID_ORGUNIT, layoutGetAxisNameDimensionIdsObject, layoutGetDimensionIdItemIdsObject, + VIS_TYPE_YEAR_OVER_YEAR_LINE, + VIS_TYPE_YEAR_OVER_YEAR_COLUMN, + VIS_TYPE_PIE, + VIS_TYPE_GAUGE, + VIS_TYPE_SINGLE_VALUE, + defaultVisType, + isYearOverYear, } from '@dhis2/analytics'; -import { - YEAR_OVER_YEAR_LINE, - YEAR_OVER_YEAR_COLUMN, - PIE, - GAUGE, - SINGLE_VALUE, - defaultChartType, -} from './chartTypes'; import { getInverseLayout } from './layout'; -import { isYearOverYear } from './chartTypes'; import { getOptionsFromVisualization } from './options'; import { BASE_FIELD_YEARLY_SERIES } from './fields/baseFields'; import { @@ -28,7 +26,7 @@ import { getAxesFromSeriesItems } from './seriesItems'; // Transform from backend model to store.ui format export const getUiFromVisualization = (vis, currentState = {}) => ({ ...currentState, - type: vis.type || defaultChartType, + type: vis.type || defaultVisType, options: getOptionsFromVisualization(vis), layout: layoutGetAxisNameDimensionIdsObject(vis), itemsByDimension: layoutGetDimensionIdItemIdsObject(vis), @@ -73,15 +71,15 @@ export const singleValueUiAdapter = ui => ({ export const getAdaptedUiByType = ui => { switch (ui.type) { - case YEAR_OVER_YEAR_LINE: - case YEAR_OVER_YEAR_COLUMN: { + case VIS_TYPE_YEAR_OVER_YEAR_LINE: + case VIS_TYPE_YEAR_OVER_YEAR_COLUMN: { return yearOverYearUiAdapter(ui); } - case PIE: - case GAUGE: { + case VIS_TYPE_PIE: + case VIS_TYPE_GAUGE: { return pieUiAdapter(ui); } - case SINGLE_VALUE: { + case VIS_TYPE_SINGLE_VALUE: { return singleValueUiAdapter(ui); } default: diff --git a/packages/app/src/reducers/__tests__/current.spec.js b/packages/app/src/reducers/__tests__/current.spec.js index 88369dd988..a8dd1e9d64 100644 --- a/packages/app/src/reducers/__tests__/current.spec.js +++ b/packages/app/src/reducers/__tests__/current.spec.js @@ -2,6 +2,8 @@ import { DIMENSION_ID_DATA, DIMENSION_ID_PERIOD, DIMENSION_ID_ORGUNIT, + VIS_TYPE_YEAR_OVER_YEAR_LINE, + VIS_TYPE_COLUMN, } from '@dhis2/analytics'; import options from '../../modules/options'; @@ -11,7 +13,6 @@ import reducer, { SET_CURRENT_FROM_UI, CLEAR_CURRENT, } from '../current'; -import { COLUMN, YEAR_OVER_YEAR_LINE } from '../../modules/chartTypes'; describe('reducer: current', () => { it('should return the default state', () => { @@ -41,7 +42,7 @@ describe('reducer: current', () => { it('SET_CURRENT_FROM_UI: should set the current from the ui state section', () => { const ui = { - type: COLUMN, + type: VIS_TYPE_COLUMN, layout: { columns: [DIMENSION_ID_DATA], rows: [DIMENSION_ID_ORGUNIT], @@ -89,7 +90,7 @@ describe('reducer: current', () => { it('SET_CURRENT_FROM_UI: should set current on a year on year format from the ui state section', () => { const ui = { - type: YEAR_OVER_YEAR_LINE, + type: VIS_TYPE_YEAR_OVER_YEAR_LINE, options, layout: { columns: [], diff --git a/packages/app/src/reducers/__tests__/ui.spec.js b/packages/app/src/reducers/__tests__/ui.spec.js index f34bcab069..4c4629fb6a 100644 --- a/packages/app/src/reducers/__tests__/ui.spec.js +++ b/packages/app/src/reducers/__tests__/ui.spec.js @@ -5,10 +5,10 @@ import { AXIS_NAME_COLUMNS, AXIS_NAME_ROWS, AXIS_NAME_FILTERS, + VIS_TYPE_BAR, } from '@dhis2/analytics'; import * as ui from '../ui'; -import { BAR } from '../../modules/chartTypes'; const reducer = ui.default; @@ -32,7 +32,7 @@ const ou = { items: [{ id: ouItem1Id }], }; -const type = BAR; +const type = VIS_TYPE_BAR; const aggregationType = 'SUM'; const visualization = { diff --git a/packages/app/src/reducers/current.js b/packages/app/src/reducers/current.js index 92283d9faf..ce3db3be9c 100644 --- a/packages/app/src/reducers/current.js +++ b/packages/app/src/reducers/current.js @@ -1,3 +1,11 @@ +import { + VIS_TYPE_YEAR_OVER_YEAR_LINE, + VIS_TYPE_YEAR_OVER_YEAR_COLUMN, + VIS_TYPE_PIE, + VIS_TYPE_GAUGE, + VIS_TYPE_SINGLE_VALUE, +} from '@dhis2/analytics'; + import { getAxesFromUi, getOptionsFromUi, @@ -6,13 +14,6 @@ import { getSingleValueCurrentFromUi, getSeriesItemsFromUi, } from '../modules/current'; -import { - YEAR_OVER_YEAR_LINE, - YEAR_OVER_YEAR_COLUMN, - PIE, - GAUGE, - SINGLE_VALUE, -} from '../modules/chartTypes'; import { BASE_FIELD_TYPE } from '../modules/fields/baseFields'; export const SET_CURRENT = 'SET_CURRENT'; @@ -42,13 +43,13 @@ export default (state = DEFAULT_CURRENT, action) => { } case SET_CURRENT_FROM_UI: { switch (action.value.type) { - case PIE: - case GAUGE: + case VIS_TYPE_PIE: + case VIS_TYPE_GAUGE: return getPieCurrentFromUi(state, action); - case SINGLE_VALUE: + case VIS_TYPE_SINGLE_VALUE: return getSingleValueCurrentFromUi(state, action); - case YEAR_OVER_YEAR_LINE: - case YEAR_OVER_YEAR_COLUMN: + case VIS_TYPE_YEAR_OVER_YEAR_LINE: + case VIS_TYPE_YEAR_OVER_YEAR_COLUMN: return getYearOverYearCurrentFromUi(state, action); default: { return getDefaultFromUi(state, action); @@ -69,13 +70,13 @@ export const sGetCurrentFromUi = state => { const ui = state.ui; switch (ui.type) { - case PIE: - case GAUGE: + case VIS_TYPE_PIE: + case VIS_TYPE_GAUGE: return getPieCurrentFromUi(state, { value: ui }); - case SINGLE_VALUE: + case VIS_TYPE_SINGLE_VALUE: return getSingleValueCurrentFromUi(state, { value: ui }); - case YEAR_OVER_YEAR_LINE: - case YEAR_OVER_YEAR_COLUMN: + case VIS_TYPE_YEAR_OVER_YEAR_LINE: + case VIS_TYPE_YEAR_OVER_YEAR_COLUMN: return getYearOverYearCurrentFromUi(state, { value: ui }); default: { return getDefaultFromUi(state, { value: ui }); diff --git a/packages/app/src/reducers/ui.js b/packages/app/src/reducers/ui.js index 4854897322..b956131d91 100644 --- a/packages/app/src/reducers/ui.js +++ b/packages/app/src/reducers/ui.js @@ -5,11 +5,11 @@ import { DIMENSION_ID_ORGUNIT, AXIS_NAME_COLUMNS, AXIS_NAME_ROWS, + VIS_TYPE_COLUMN, } from '@dhis2/analytics'; import { getFilteredLayout, getSwapModObj } from '../modules/layout'; import { getOptionsForUi } from '../modules/options'; -import { COLUMN } from '../modules/chartTypes'; import { getUiFromVisualization } from '../modules/ui'; export const SET_UI = 'SET_UI'; @@ -35,7 +35,7 @@ export const CLEAR_UI_INTERPRETATION = 'CLEAR_UI_INTERPRETATION'; export const SET_AXES = 'SET_AXES'; export const DEFAULT_UI = { - type: COLUMN, + type: VIS_TYPE_COLUMN, options: getOptionsForUi(), layout: { columns: [DIMENSION_ID_DATA], diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 2f7e8e7236..7165ab1af2 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -5,7 +5,7 @@ "main": "./build/index.js", "license": "BSD-3-Clause", "dependencies": { - "@dhis2/analytics": "^2.5.1", + "@dhis2/analytics": "^2.5.2", "@material-ui/core": "^3.1.2", "lodash-es": "^4.17.11", "react": "^16.6.0", diff --git a/packages/plugin/src/ChartPlugin.js b/packages/plugin/src/ChartPlugin.js index 3f07e23a4a..777d8b0383 100644 --- a/packages/plugin/src/ChartPlugin.js +++ b/packages/plugin/src/ChartPlugin.js @@ -2,14 +2,17 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import isEqual from 'lodash-es/isEqual'; import i18n from '@dhis2/d2-i18n'; -import { createVisualization } from '@dhis2/analytics'; +import { + isYearOverYear, + isSingleValue, + createVisualization, +} from '@dhis2/analytics'; import { apiFetchVisualization } from './api/visualization'; import { apiFetchAnalytics, apiFetchAnalyticsForYearOverYear, } from './api/analytics'; -import { isYearOverYear, isSingleValue } from './modules/chartTypes'; import { getOptionsForRequest } from './modules/options'; import { computeGenericPeriodNames } from './modules/analytics'; import { BASE_FIELD_YEARLY_SERIES } from './modules/fields/baseFields'; @@ -111,7 +114,7 @@ class ChartPlugin extends Component { const extraOptions = { dashboard: forDashboard, - noData: { text: i18n.t('No data') } + noData: { text: i18n.t('No data') }, }; let responses = []; diff --git a/packages/plugin/src/__tests__/ChartPlugin.spec.js b/packages/plugin/src/__tests__/ChartPlugin.spec.js index 348e87d092..961089f3a1 100644 --- a/packages/plugin/src/__tests__/ChartPlugin.spec.js +++ b/packages/plugin/src/__tests__/ChartPlugin.spec.js @@ -1,16 +1,12 @@ import React from 'react'; import { shallow } from 'enzyme'; +import * as analytics from '@dhis2/analytics'; + import LoadingMask from '../widgets/LoadingMask'; import ChartPlugin from '../ChartPlugin'; -import * as analytics from '@dhis2/analytics'; import * as api from '../api/analytics'; import * as apiViz from '../api/visualization'; import * as options from '../modules/options'; -import { - YEAR_OVER_YEAR_LINE, - COLUMN, - SINGLE_VALUE, -} from '../modules/chartTypes'; jest.mock('@dhis2/analytics'); @@ -42,21 +38,21 @@ const ouMock = { }; const defaultCurrentMock = { - type: COLUMN, + type: analytics.VIS_TYPE_COLUMN, columns: [dxMock], rows: [peMock], filters: [ouMock], }; const yearOverYearCurrentMock = { - type: YEAR_OVER_YEAR_LINE, + type: analytics.VIS_TYPE_YEAR_OVER_YEAR_LINE, columns: [dxMock], rows: [peMock], yearlySeries: ['LAST_YEAR'], }; const singleValueCurrentMock = { - type: SINGLE_VALUE, + type: analytics.VIS_TYPE_SINGLE_VALUE, columns: [dxMock], rows: [], filters: [ouMock, peMock], @@ -100,6 +96,14 @@ const createVisualizationMock = { }, }; +const isYearOverYearMockResponse = visType => { + return visType === analytics.VIS_TYPE_YEAR_OVER_YEAR_LINE; +}; + +const isSingleValueMockResponse = visType => { + return visType === analytics.VIS_TYPE_SINGLE_VALUE; +}; + describe('ChartPlugin', () => { options.getOptionsForRequest = () => [ ['option1', { defaultValue: 'abc' }], @@ -277,6 +281,12 @@ describe('ChartPlugin', () => { api.apiFetchAnalyticsForYearOverYear = jest .fn() .mockResolvedValue(new MockYoYAnalyticsResponse()); + + analytics.isYearOverYear = jest + .fn() + .mockReturnValue( + isYearOverYearMockResponse(props.config.type) + ); }); it('makes year-on-year analytics request', done => { @@ -327,6 +337,12 @@ describe('ChartPlugin', () => { props.config = { ...singleValueCurrentMock, }; + + analytics.isSingleValue = jest + .fn() + .mockReturnValue( + isSingleValueMockResponse(props.config.type) + ); }); it('provides dhis as output format to createChart', done => { diff --git a/yarn.lock b/yarn.lock index cbedb51574..f263d4b50a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -183,10 +183,10 @@ react-beautiful-dnd "^10.1.1" styled-jsx "^3.2.1" -"@dhis2/analytics@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-2.5.1.tgz#02c2d27b35e67c3a8f9753f704b70423d97ab02d" - integrity sha512-Ifqz8NXUAaeZTDJMdfpbIEYKX8EjxCxZDY6VPGsM7RJaAqYB/y/HpcFaQHJ1gunKZ9a5CtRLSDL2EDFXNabx7A== +"@dhis2/analytics@^2.5.2": + version "2.5.2" + resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-2.5.2.tgz#d7076653765947efee87ac5fac6d67c9815dae9d" + integrity sha512-BCySFEKXDUdGnw3Glnv+vZBdmA7a279jdAt69dDLAbea61phvkHrlSKmpRwuTtv3EB0UboaFxzE89/3n21XxGg== dependencies: "@dhis2/d2-i18n" "^1.0.4" "@dhis2/d2-ui-org-unit-dialog" "^6.3.0"