Skip to content

Commit

Permalink
refactor: refactor redirection to workspace if view doesn't exist
Browse files Browse the repository at this point in the history
  • Loading branch information
esasova committed Jul 16, 2024
1 parent 0a8664f commit 4b29784
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 55 deletions.
68 changes: 24 additions & 44 deletions src/hooks/RouterHooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,63 +8,43 @@ import { useWorkspaceData } from '../state/hooks/WorkspaceHooks';
import { ConfigUtils } from '../utils';
import { useSortedScenarioList } from './ScenarioListHooks';

export const useRedirectFromInstanceToScenarioView = () => {
const isUnmounted = useRef(false);
const currentWorkspaceData = useWorkspaceData();
const navigate = useNavigate();

useEffect(() => {
if (isUnmounted.current) {
return;
}
const isInstanceViewEnabled = ConfigUtils.isInstanceViewConfigValid(
currentWorkspaceData?.webApp?.options?.instanceView
);
if (isInstanceViewEnabled) return;
navigate('/workspaces');
return () => {
isUnmounted.current = true;
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [currentWorkspaceData?.webApp?.options?.instanceView]);
};

export const useRedirectFromDatasetManagerToScenarioView = () => {
export const useRedirectToWorkspaceView = (view) => {
const isUnmounted = useRef(false);
const currentWorkspaceData = useWorkspaceData();
const navigate = useNavigate();
const routerParameters = useParams();

useEffect(() => {
if (isUnmounted.current) {
return;
}
const isDatasetManagerViewEnabled = ConfigUtils.isDatasetManagerEnabledInWorkspace(currentWorkspaceData);
if (isDatasetManagerViewEnabled) return;
navigate('/workspaces');
return () => {
isUnmounted.current = true;
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [currentWorkspaceData?.webApp?.options?.datasetmanager, navigate]);
};

export const useRedirectFromDashboardsToScenarioView = () => {
const isUnmounted = useRef(false);
const currentWorkspaceData = useWorkspaceData();
const navigate = useNavigate();

useEffect(() => {
if (isUnmounted.current) {
return;
let isViewEnabled;
switch (view) {
case 'instance':
isViewEnabled = ConfigUtils.isInstanceViewConfigValid(currentWorkspaceData?.webApp?.options?.instanceView);
break;
case 'datasetManager':
isViewEnabled = ConfigUtils.isDatasetManagerEnabledInWorkspace(currentWorkspaceData);
break;
case 'dashboards':
isViewEnabled = ConfigUtils.isResultsDisplayEnabledInWorkspace(currentWorkspaceData);
break;
default:
isViewEnabled = true;
}
const isDatasetManagerViewEnabled = ConfigUtils.isResultsDisplayEnabledInWorkspace(currentWorkspaceData);
if (isDatasetManagerViewEnabled) return;
navigate('/workspaces');
if (isViewEnabled) return;
const workspaceId = routerParameters.workspaceId;
navigate(workspaceId ? `/${workspaceId}` : '/workspaces');
return () => {
isUnmounted.current = true;
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [currentWorkspaceData?.webApp?.options?.charts, navigate]);
}, [
currentWorkspaceData?.webApp?.options?.charts,
currentWorkspaceData?.webApp?.options?.instanceView,
currentWorkspaceData?.webApp?.options?.datasetmanager,
navigate,
]);
};

export const useRouterScenarioId = () => {
Expand Down
4 changes: 2 additions & 2 deletions src/views/Dashboards/Dashboards.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { useTranslation } from 'react-i18next';
import PropTypes from 'prop-types';
import { Card, CardContent, Grid, Tab, Tabs } from '@mui/material';
import makeStyles from '@mui/styles/makeStyles';
import { useRedirectToWorkspaceView } from '../../hooks/RouterHooks';
import { useDashboardsViewReportsConfig } from '../../state/hooks/PowerBIHooks';
import { DashboardsPowerBiReport } from './components';
import {useRedirectFromDashboardsToScenarioView, useRedirectToWorkspaceView} from "../../hooks/RouterHooks";

const useStyles = makeStyles((theme) => ({
dashboardsRoot: {
Expand Down Expand Up @@ -71,7 +71,7 @@ const Dashboards = () => {
};

const dashboardsViewReportsConfig = useDashboardsViewReportsConfig();
useRedirectFromDashboardsToScenarioView();
useRedirectToWorkspaceView('dashboards');
const dashboardTitle = dashboardsViewReportsConfig?.[value]?.title?.[i18n.language] ?? DEFAULT_MISSING_TITLE;

return (
Expand Down
5 changes: 2 additions & 3 deletions src/views/DatasetManager/DatasetManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ import { useDatasetManager } from './DatasetManagerHook';
import { DatasetList, DatasetMetadata, DatasetOverview, NoDatasetsPlaceholder } from './components';

const DatasetManager = () => {
const { datasets, useRedirectFromDatasetManagerToScenarioView, useResetSelectedDatasetIfNecessary } =
useDatasetManager();
const { datasets, useRedirectToWorkspaceView, useResetSelectedDatasetIfNecessary } = useDatasetManager();

useResetSelectedDatasetIfNecessary();
useRedirectFromDatasetManagerToScenarioView();
useRedirectToWorkspaceView('datasetManager');

return datasets?.length > 0 ? (
<div data-cy="dataset-manager-view" style={{ height: '100%', overflow: 'auto' }}>
Expand Down
4 changes: 2 additions & 2 deletions src/views/DatasetManager/DatasetManagerHook.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Licensed under the MIT license.
import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { useRedirectFromDatasetManagerToScenarioView } from '../../hooks/RouterHooks';
import { useRedirectToWorkspaceView } from '../../hooks/RouterHooks';
import { useWorkspaceMainDatasets } from '../../hooks/WorkspaceDatasetsHooks';
import { dispatchSelectDefaultDataset } from '../../state/dispatchers/dataset/DatasetDispatcher';
import { useCurrentDataset } from '../../state/hooks/DatasetHooks';
Expand All @@ -25,5 +25,5 @@ export const useDatasetManager = () => {
}, [currentDataset?.id, workspaceMainDatasets, dispatch]);
};

return { datasets, useResetSelectedDatasetIfNecessary, useRedirectFromDatasetManagerToScenarioView };
return { datasets, useResetSelectedDatasetIfNecessary, useRedirectToWorkspaceView };
};
4 changes: 2 additions & 2 deletions src/views/Instance/Instance.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const Instance = () => {
workspaceId,
currentScenario,
useRedirectionToScenario,
useRedirectFromInstanceToScenarioView,
useRedirectToWorkspaceView,
instanceViewConfig,
} = useInstance();

Expand All @@ -46,7 +46,7 @@ const Instance = () => {
const isSwitchingScenario = currentScenario.status === STATUSES.LOADING;

useRedirectionToScenario();
useRedirectFromInstanceToScenarioView();
useRedirectToWorkspaceView('instance');

useEffect(() => {
// Note that the "active" variable is necessary to prevent race conditions when the effect is called several times
Expand Down
4 changes: 2 additions & 2 deletions src/views/Instance/InstanceHook.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (c) Cosmo Tech.
// Licensed under the MIT license.
import { useRedirectFromInstanceToScenarioView, useRedirectionToScenario } from '../../hooks/RouterHooks';
import { useRedirectionToScenario, useRedirectToWorkspaceView } from '../../hooks/RouterHooks';
import { useDatasets } from '../../state/hooks/DatasetHooks';
import { useOrganizationId } from '../../state/hooks/OrganizationHooks';
import { useCurrentScenario } from '../../state/hooks/ScenarioHooks';
Expand All @@ -18,7 +18,7 @@ export const useInstance = () => {
organizationId,
workspaceId,
currentScenario,
useRedirectFromInstanceToScenarioView,
useRedirectToWorkspaceView,
useRedirectionToScenario,
instanceViewConfig,
};
Expand Down

0 comments on commit 4b29784

Please sign in to comment.