diff --git a/frontend/app/Router.js b/frontend/app/Router.js index 314f36a6e..b760950b7 100644 --- a/frontend/app/Router.js +++ b/frontend/app/Router.js @@ -55,6 +55,7 @@ const withObTab = routes.withObTab; const METRICS_PATH = routes.metrics(); const METRICS_DETAILS = routes.metricDetails(); +const METRICS_DETAILS_SUB = routes.metricDetailsSub(); const DASHBOARD_PATH = routes.dashboard(); const DASHBOARD_SELECT_PATH = routes.dashboardSelected(); @@ -204,6 +205,7 @@ class Router extends React.Component { {/* DASHBOARD and Metrics */} + diff --git a/frontend/app/components/Dashboard/components/DashboardRouter/DashboardRouter.tsx b/frontend/app/components/Dashboard/components/DashboardRouter/DashboardRouter.tsx index 6004202a2..cff066a09 100644 --- a/frontend/app/components/Dashboard/components/DashboardRouter/DashboardRouter.tsx +++ b/frontend/app/components/Dashboard/components/DashboardRouter/DashboardRouter.tsx @@ -5,6 +5,7 @@ import { withRouter } from 'react-router-dom'; import { metrics, metricDetails, + metricDetailsSub, dashboardSelected, dashboardMetricCreate, dashboardMetricDetails, @@ -14,6 +15,7 @@ import { import DashboardView from '../DashboardView'; import MetricsView from '../MetricsView'; import WidgetView from '../WidgetView'; +import WidgetSubDetailsView from '../WidgetSubDetailsView'; function DashboardViewSelected({ siteId, dashboardId}) { return ( @@ -37,6 +39,10 @@ function DashboardRouter(props: Props) { + + + + diff --git a/frontend/app/components/Dashboard/components/WidgetSubDetailsView/WidgetSubDetailsView.tsx b/frontend/app/components/Dashboard/components/WidgetSubDetailsView/WidgetSubDetailsView.tsx new file mode 100644 index 000000000..12e7d821b --- /dev/null +++ b/frontend/app/components/Dashboard/components/WidgetSubDetailsView/WidgetSubDetailsView.tsx @@ -0,0 +1,37 @@ +import Breadcrumb from 'App/components/shared/Breadcrumb'; +import { useStore } from 'App/mstore'; +import { useObserver } from 'mobx-react-lite'; +import React, { useEffect } from 'react'; +import { withSiteId } from 'App/routes'; + +interface Props { + history: any; + match: any + siteId: any +} +function WidgetSubDetailsView(props: Props) { + const { match: { params: { siteId, dashboardId, metricId } } } = props; + const { metricStore } = useStore(); + const widget = useObserver(() => metricStore.instance); + const loadingWidget = useObserver(() => metricStore.isLoading); + + useEffect(() => { + if (!widget || !widget.exists()) { + metricStore.fetch(metricId); + } + }, []); + + return ( +
+ +
+ ); +} + +export default WidgetSubDetailsView; \ No newline at end of file diff --git a/frontend/app/components/Dashboard/components/WidgetSubDetailsView/index.ts b/frontend/app/components/Dashboard/components/WidgetSubDetailsView/index.ts new file mode 100644 index 000000000..669474025 --- /dev/null +++ b/frontend/app/components/Dashboard/components/WidgetSubDetailsView/index.ts @@ -0,0 +1 @@ +export { default } from './WidgetSubDetailsView'; \ No newline at end of file diff --git a/frontend/app/components/Dashboard/components/WidgetView/WidgetView.tsx b/frontend/app/components/Dashboard/components/WidgetView/WidgetView.tsx index de0bdd6f7..789c7d895 100644 --- a/frontend/app/components/Dashboard/components/WidgetView/WidgetView.tsx +++ b/frontend/app/components/Dashboard/components/WidgetView/WidgetView.tsx @@ -23,9 +23,11 @@ function WidgetView(props: Props) { const [expanded, setExpanded] = useState(!metricId || metricId === 'create'); React.useEffect(() => { - if (metricId && metricId !== 'create') { + if (metricId && metricId !== 'create' && (!widget || !widget.exists())) { metricStore.fetch(metricId); - } else { + } + + if (metricId === 'create') { metricStore.init(); } }, []) diff --git a/frontend/app/routes.js b/frontend/app/routes.js index 9dac4d885..4b7b35ebe 100644 --- a/frontend/app/routes.js +++ b/frontend/app/routes.js @@ -127,6 +127,7 @@ const REQUIRED_SITE_ID_ROUTES = [ metrics(), metricDetails(''), + metricDetailsSub(''), dashboard(''), dashboardSelected(''),