From e8993813cfa215b55c31d9a7b818297042d3897c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Henrik=20=C3=98verland?= Date: Fri, 20 Feb 2026 12:12:00 +0100 Subject: [PATCH 1/4] fix: use custom period type labels in plugin --- .../VisualizationPlugin.jsx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/components/VisualizationPlugin/VisualizationPlugin.jsx b/src/components/VisualizationPlugin/VisualizationPlugin.jsx index fbd154753..068d4d927 100644 --- a/src/components/VisualizationPlugin/VisualizationPlugin.jsx +++ b/src/components/VisualizationPlugin/VisualizationPlugin.jsx @@ -15,6 +15,7 @@ import { USER_ORG_UNIT_CHILDREN, USER_ORG_UNIT_GRANDCHILDREN, VIS_TYPE_SINGLE_VALUE, + useDataOutputPeriodTypes } from '@dhis2/analytics' import { useConfig, useDataEngine } from '@dhis2/app-runtime' import { Button, IconLegend24, Layer } from '@dhis2/ui' @@ -79,6 +80,8 @@ export const VisualizationPlugin = ({ const [size, setSize] = useState({ width: 0, height: 0 }) const resizeObserverRef = useRef(null) const { baseUrl } = useConfig() + const { supportsEnabledPeriodTypes, enabledPeriodTypesData } = + useDataOutputPeriodTypes() useEffect(() => { resizeObserverRef.current = new window.ResizeObserver((entries) => { @@ -278,6 +281,11 @@ export const VisualizationPlugin = ({ }, [engine]) useEffect(() => { + // Wait for period type data to load when supported + if (supportsEnabledPeriodTypes && !enabledPeriodTypesData) { + return + } + setError(null) setFetchResult(null) setVisualization(null) @@ -393,6 +401,15 @@ export const VisualizationPlugin = ({ } const legendSets = await doFetchLegendSets(legendSetIds) + console.log("enabledPeriodTypesData", enabledPeriodTypesData) + if (enabledPeriodTypesData?.metaData) { + responses.forEach((response) => { + Object.assign( + response.metaData.items, + enabledPeriodTypesData.metaData + ) + }) + } setFetchResult({ visualization: filteredVisualization, @@ -407,7 +424,7 @@ export const VisualizationPlugin = ({ .catch((error) => setError(error)) // since errors are rendered here, always call loading complete .finally(() => onLoadingComplete()) - }, [originalVisualization, filters, forDashboard]) + }, [originalVisualization, filters, forDashboard, supportsEnabledPeriodTypes, enabledPeriodTypesData]) useEffect(() => { if (fetchResult?.visualization && ouLevels) { From 52d5826a3882514cafd88eead6d2d74e8bb80ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Henrik=20=C3=98verland?= Date: Fri, 20 Feb 2026 12:22:16 +0100 Subject: [PATCH 2/4] fix: allow override of metadata --- src/actions/metadata.js | 7 ++++++- src/components/Visualization/Visualization.jsx | 12 ++++++++++-- src/reducers/metadata.js | 8 ++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/actions/metadata.js b/src/actions/metadata.js index 4e4931151..d3253c7f6 100644 --- a/src/actions/metadata.js +++ b/src/actions/metadata.js @@ -1,6 +1,11 @@ -import { ADD_METADATA } from '../reducers/metadata.js' +import { ADD_METADATA, OVERRIDE_METADATA } from '../reducers/metadata.js' export const acAddMetadata = (value) => ({ type: ADD_METADATA, value, }) + +export const acOverrideMetadata = (value) => ({ + type: OVERRIDE_METADATA, + value, +}) diff --git a/src/components/Visualization/Visualization.jsx b/src/components/Visualization/Visualization.jsx index 3f230559f..18a5dab24 100644 --- a/src/components/Visualization/Visualization.jsx +++ b/src/components/Visualization/Visualization.jsx @@ -1,10 +1,11 @@ import debounce from 'lodash-es/debounce' +import { useDataOutputPeriodTypes } from '@dhis2/analytics' import PropTypes from 'prop-types' -import React, { Component, Fragment, useCallback, useMemo } from 'react' +import React, { Component, Fragment, useCallback, useEffect, useMemo } from 'react' import { useDispatch, useSelector } from 'react-redux' import { tSetCurrentFromUi } from '../../actions/current.js' import { acSetPluginLoading } from '../../actions/loader.js' -import { acAddMetadata } from '../../actions/metadata.js' +import { acAddMetadata, acOverrideMetadata } from '../../actions/metadata.js' import { acSetUiItems, acSetUiDataSorting, @@ -216,6 +217,13 @@ export const Visualization = (props) => { ) const { setChart } = useChartContext() + const { enabledPeriodTypesData } = useDataOutputPeriodTypes() + useEffect(() => { + if (enabledPeriodTypesData?.metaData) { + dispatch(acOverrideMetadata(enabledPeriodTypesData.metaData)) + } + }, [dispatch, enabledPeriodTypesData]) + const visualization = useMemo( () => getVisualizationWithFilteredOptionsByType(current), [current] diff --git a/src/reducers/metadata.js b/src/reducers/metadata.js index f0513b9b3..1440ea1b7 100644 --- a/src/reducers/metadata.js +++ b/src/reducers/metadata.js @@ -1,6 +1,7 @@ import getDefaultMetadata from '../modules/metadata.js' export const ADD_METADATA = 'ADD_METADATA' +export const OVERRIDE_METADATA = 'OVERRIDE_METADATA' export const DEFAULT_METADATA = getDefaultMetadata() @@ -18,6 +19,13 @@ export default (state = DEFAULT_METADATA, action) => { }) return result } + case OVERRIDE_METADATA: { + const result = { ...state } + Object.entries(action.value).forEach(([key, value]) => { + result[key] = { ...result[key], ...value } + }) + return result + } default: return state } From e4dcc0a7f6fb5dd3e805ef8287cb743b08cab597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Henrik=20=C3=98verland?= Date: Mon, 2 Mar 2026 11:56:59 +0100 Subject: [PATCH 3/4] chore: remove log --- src/components/VisualizationPlugin/VisualizationPlugin.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/VisualizationPlugin/VisualizationPlugin.jsx b/src/components/VisualizationPlugin/VisualizationPlugin.jsx index 068d4d927..d45096ab8 100644 --- a/src/components/VisualizationPlugin/VisualizationPlugin.jsx +++ b/src/components/VisualizationPlugin/VisualizationPlugin.jsx @@ -401,7 +401,7 @@ export const VisualizationPlugin = ({ } const legendSets = await doFetchLegendSets(legendSetIds) - console.log("enabledPeriodTypesData", enabledPeriodTypesData) + if (enabledPeriodTypesData?.metaData) { responses.forEach((response) => { Object.assign( From 438970912a7a34235039c538e80a2b60db691d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Henrik=20=C3=98verland?= Date: Tue, 3 Mar 2026 11:23:47 +0100 Subject: [PATCH 4/4] fix: analytics --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8141aef4d..f511ecb82 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "typescript-eslint": "^8.35.0" }, "dependencies": { - "@dhis2/analytics": "^29.1.0", + "@dhis2/analytics": "^29.3.0", "@dhis2/app-runtime": "^3.14.1", "@dhis2/app-service-datastore": "^1.0.0-beta.3", "@dhis2/d2-i18n": "^1.1.0", diff --git a/yarn.lock b/yarn.lock index 18913d6f8..9cfe7ad98 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1906,10 +1906,10 @@ classnames "^2.3.1" prop-types "^15.7.2" -"@dhis2/analytics@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-29.1.0.tgz#aaef83cab9edd3a59c891ee1e6a59a195059704b" - integrity sha512-A+c8O8uUc3omOa7PTBIyJsA1+9oIZw0AXZwSMdTYl6KZHiIiTkrLZvV8hLpMldKH4s7WMPeRiZxXt9F8ls57BA== +"@dhis2/analytics@^29.3.0": + version "29.3.0" + resolved "https://registry.yarnpkg.com/@dhis2/analytics/-/analytics-29.3.0.tgz#f34f53ff4c80e3f95169cbc7307a2f252043dabe" + integrity sha512-V5QchXBOv6rbv/HWYKiJDKHp84kY6xjuNwKHs5SHz7LwTgEd9DZhtDkbKQaNvOyTiR18XNG8qweZx9Y9PL0hng== dependencies: "@dhis2/multi-calendar-dates" "^1.2.2" "@dnd-kit/core" "^6.0.7"