diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverview.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverview.tsx index cbe27f217704..cf0ff0e10bb2 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverview.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverview.tsx @@ -1,5 +1,4 @@ -import NewFeatureOverviewMetaData from './FeatureOverviewMetaData/FeatureOverviewMetaData'; -import FeatureOverviewEnvironments from './FeatureOverviewEnvironments/FeatureOverviewEnvironments'; +import FeatureOverviewMetaData from './FeatureOverviewMetaData/FeatureOverviewMetaData'; import { Route, Routes, useNavigate } from 'react-router-dom'; import { SidebarModal } from 'component/common/SidebarModal/SidebarModal'; import { @@ -8,21 +7,20 @@ import { } from 'component/feature/FeatureStrategy/FeatureStrategyEdit/FeatureStrategyEdit'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; import { usePageTitle } from 'hooks/usePageTitle'; -import { FeatureOverviewSidePanel as NewFeatureOverviewSidePanel } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSidePanel/FeatureOverviewSidePanel'; -import { useHiddenEnvironments } from 'hooks/useHiddenEnvironments'; import { styled } from '@mui/material'; import { FeatureStrategyCreate } from 'component/feature/FeatureStrategy/FeatureStrategyCreate/FeatureStrategyCreate'; -import { useEffect, useState } from 'react'; +import { useEffect } from 'react'; import { useLastViewedFlags } from 'hooks/useLastViewedFlags'; import { useUiFlag } from 'hooks/useUiFlag'; -import OldFeatureOverviewMetaData from './FeatureOverviewMetaData/OldFeatureOverviewMetaData'; -import { OldFeatureOverviewSidePanel } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSidePanel/OldFeatureOverviewSidePanel'; -import { NewFeatureOverviewEnvironment } from './NewFeatureOverviewEnvironment/NewFeatureOverviewEnvironment'; +import { FeatureOverviewEnvironment } from './NewFeatureOverviewEnvironment/NewFeatureOverviewEnvironment'; +import { default as LegacyFleatureOverview } from './LegacyFeatureOverview'; +import { useEnvironmentVisibility } from './FeatureOverviewMetaData/EnvironmentVisibilityMenu/hooks/useEnvironmentVisibility'; const StyledContainer = styled('div')(({ theme }) => ({ display: 'flex', width: '100%', - [theme.breakpoints.down(1000)]: { + gap: theme.spacing(2), + [theme.breakpoints.down('md')]: { flexDirection: 'column', }, })); @@ -30,57 +28,43 @@ const StyledContainer = styled('div')(({ theme }) => ({ const StyledMainContent = styled('div')(({ theme }) => ({ display: 'flex', flexDirection: 'column', - width: `calc(100% - (350px + 1rem))`, - [theme.breakpoints.down(1000)]: { - width: '100%', - }, + flexGrow: 1, + gap: theme.spacing(2), })); -const FeatureOverview = () => { +export const FeatureOverview = () => { const navigate = useNavigate(); const projectId = useRequiredPathParam('projectId'); const featureId = useRequiredPathParam('featureId'); const featurePath = formatFeaturePath(projectId, featureId); - const { hiddenEnvironments, setHiddenEnvironments } = - useHiddenEnvironments(); + const { hiddenEnvironments, onEnvironmentVisibilityChange } = + useEnvironmentVisibility(); const onSidebarClose = () => navigate(featurePath); usePageTitle(featureId); const { setLastViewed } = useLastViewedFlags(); useEffect(() => { setLastViewed({ featureId, projectId }); }, [featureId]); - const [environmentId, setEnvironmentId] = useState(''); const flagOverviewRedesign = useUiFlag('flagOverviewRedesign'); + if (!flagOverviewRedesign) { + return ; + } + return ( - {flagOverviewRedesign ? ( - <> - - - > - ) : ( - <> - - - > - )} + - {flagOverviewRedesign ? ( - - ) : ( - - )} + { ); }; - -export default FeatureOverview; diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/AddTagButton.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/AddTagButton.tsx index 8094870dc8d6..c148feccf68d 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/AddTagButton.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/AddTagButton.tsx @@ -29,6 +29,7 @@ export const AddTagButton: FC = ({ project, onClick }) => ( variant='text' onClick={onClick} startIcon={} + data-loading > Add tag diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/EnvironmentVisibilityMenu/EnvironmentVisibilityMenu.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/EnvironmentVisibilityMenu/EnvironmentVisibilityMenu.tsx new file mode 100644 index 000000000000..27f6a2d9bf47 --- /dev/null +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/EnvironmentVisibilityMenu/EnvironmentVisibilityMenu.tsx @@ -0,0 +1,69 @@ +import { Button, Checkbox, Menu, MenuItem, styled } from '@mui/material'; +import { useState, type FC } from 'react'; + +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import ExpandLessIcon from '@mui/icons-material/ExpandLess'; + +type EnvironmentVisibilityMenuProps = { + environments: Array<{ name: string }>; + hiddenEnvironments: string[]; + onChange: (name: string) => void; +}; + +const buttonId = 'environment-visibility-button'; +const menuId = 'environment-visibility-menu'; + +const StyledContainer = styled('div')(({ theme }) => ({ + display: 'flex', + justifyContent: 'center', + paddingTop: theme.spacing(4), +})); + +export const EnvironmentVisibilityMenu: FC = ({ + environments, + hiddenEnvironments, + onChange, +}) => { + const [anchorEl, setAnchorEl] = useState(null); + const isOpen = Boolean(anchorEl); + const handleOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleClose = () => { + setAnchorEl(null); + }; + + return ( + + : } + variant='outlined' + id={buttonId} + aria-controls={isOpen ? menuId : undefined} + aria-haspopup='true' + aria-expanded={isOpen ? 'true' : undefined} + data-loading + > + Hide/show environments + + + {environments.map(({ name }) => ( + onChange(name)}> + onChange(name)} + checked={!hiddenEnvironments?.includes(name)} + /> + {name} + + ))} + + + ); +}; diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/EnvironmentVisibilityMenu/hooks/useEnvironmentVisibility.ts b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/EnvironmentVisibilityMenu/hooks/useEnvironmentVisibility.ts new file mode 100644 index 000000000000..3eef3725a1eb --- /dev/null +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/EnvironmentVisibilityMenu/hooks/useEnvironmentVisibility.ts @@ -0,0 +1,39 @@ +import { useLocalStorageState } from 'hooks/useLocalStorageState'; +import { usePlausibleTracker } from 'hooks/usePlausibleTracker'; +import { createLocalStorage } from 'utils/createLocalStorage'; + +// Reading legacy value will be safely refactored out in a next version - related to `flagOverviewRedesign` flag +const { value: legacyStoreValue } = createLocalStorage<{ + hiddenEnvironments?: Array; +}>('global:v1', {}); + +export const useEnvironmentVisibility = () => { + const [value, setValue] = useLocalStorageState>( + 'environment-visibiilty', + legacyStoreValue?.hiddenEnvironments || [], + ); + const { trackEvent } = usePlausibleTracker(); + + const onEnvironmentVisibilityChange = (environment: string) => { + if (value.includes(environment)) { + setValue(value.filter((env) => env !== environment)); + trackEvent('hidden_environment', { + props: { + eventType: `environment unhidden`, + }, + }); + } else { + setValue([...value, environment]); + trackEvent('hidden_environment', { + props: { + eventType: `environment hidden`, + }, + }); + } + }; + + return { + hiddenEnvironments: value, + onEnvironmentVisibilityChange, + }; +}; diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/FeatureOverviewMetaData.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/FeatureOverviewMetaData.tsx index f2e407595124..e508eb5aa8a6 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/FeatureOverviewMetaData.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewMetaData/FeatureOverviewMetaData.tsx @@ -1,9 +1,9 @@ +import { type FC, useState } from 'react'; import { styled } from '@mui/material'; import { useNavigate } from 'react-router-dom'; import { useFeature } from 'hooks/api/getters/useFeature/useFeature'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; import { FeatureArchiveDialog } from 'component/common/FeatureArchiveDialog/FeatureArchiveDialog'; -import { useState } from 'react'; import { FeatureArchiveNotAllowedDialog } from 'component/common/FeatureArchiveDialog/FeatureArchiveNotAllowedDialog'; import { formatDateYMD } from 'utils/formatDate'; import { parseISO } from 'date-fns'; @@ -15,6 +15,7 @@ import { MarkCompletedDialogue } from '../FeatureLifecycle/MarkCompletedDialogue import { TagRow } from './TagRow'; import { capitalizeFirst } from 'utils/capitalizeFirst'; import { Collaborators } from './Collaborators'; +import { EnvironmentVisibilityMenu } from './EnvironmentVisibilityMenu/EnvironmentVisibilityMenu'; const StyledMetaDataContainer = styled('div')(({ theme }) => ({ padding: theme.spacing(3), @@ -24,7 +25,8 @@ const StyledMetaDataContainer = styled('div')(({ theme }) => ({ flexDirection: 'column', gap: theme.spacing(2), width: '350px', - [theme.breakpoints.down(1000)]: { + border: `1px solid ${theme.palette.divider}`, + [theme.breakpoints.down('md')]: { width: '100%', }, })); @@ -63,7 +65,15 @@ export const StyledMetaDataItemValue = styled('div')(({ theme }) => ({ gap: theme.spacing(1), })); -const FeatureOverviewMetaData = () => { +type FeatureOverviewMetaDataProps = { + hiddenEnvironments?: string[]; + onEnvironmentVisibilityChange?: (environment: string) => void; +}; + +const FeatureOverviewMetaData: FC = ({ + hiddenEnvironments, + onEnvironmentVisibilityChange, +}) => { const projectId = useRequiredPathParam('projectId'); const featureId = useRequiredPathParam('featureId'); const { feature, refetchFeature } = useFeature(projectId, featureId); @@ -156,6 +166,13 @@ const FeatureOverviewMetaData = () => { ) : null} + {onEnvironmentVisibilityChange ? ( + + ) : null} {feature.children.length > 0 ? ( diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewSidePanel/FeatureOverviewSidePanel.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewSidePanel/FeatureOverviewSidePanel.tsx index aa323e82a5e8..4428586d1b87 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewSidePanel/FeatureOverviewSidePanel.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewSidePanel/FeatureOverviewSidePanel.tsx @@ -19,7 +19,7 @@ const StyledContainer = styled(Box)(({ theme }) => ({ flexDirection: 'column', gap: theme.spacing(2), width: '350px', - [theme.breakpoints.down(1000)]: { + [theme.breakpoints.down('md')]: { width: '100%', }, })); diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/LegacyFeatureOverview.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/LegacyFeatureOverview.tsx new file mode 100644 index 000000000000..c3762c4fd848 --- /dev/null +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/LegacyFeatureOverview.tsx @@ -0,0 +1,91 @@ +import FeatureOverviewEnvironments from './FeatureOverviewEnvironments/FeatureOverviewEnvironments'; +import { Route, Routes, useNavigate } from 'react-router-dom'; +import { SidebarModal } from 'component/common/SidebarModal/SidebarModal'; +import { + FeatureStrategyEdit, + formatFeaturePath, +} from 'component/feature/FeatureStrategy/FeatureStrategyEdit/FeatureStrategyEdit'; +import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; +import { usePageTitle } from 'hooks/usePageTitle'; +import { useHiddenEnvironments } from 'hooks/useHiddenEnvironments'; +import { styled } from '@mui/material'; +import { FeatureStrategyCreate } from 'component/feature/FeatureStrategy/FeatureStrategyCreate/FeatureStrategyCreate'; +import { useEffect } from 'react'; +import { useLastViewedFlags } from 'hooks/useLastViewedFlags'; +import OldFeatureOverviewMetaData from './FeatureOverviewMetaData/OldFeatureOverviewMetaData'; +import { OldFeatureOverviewSidePanel } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSidePanel/OldFeatureOverviewSidePanel'; + +const StyledContainer = styled('div')(({ theme }) => ({ + display: 'flex', + width: '100%', + [theme.breakpoints.down(1000)]: { + flexDirection: 'column', + }, +})); + +const StyledMainContent = styled('div')(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + width: `calc(100% - (350px + 1rem))`, + [theme.breakpoints.down(1000)]: { + width: '100%', + }, +})); + +const FeatureOverview = () => { + const navigate = useNavigate(); + const projectId = useRequiredPathParam('projectId'); + const featureId = useRequiredPathParam('featureId'); + const featurePath = formatFeaturePath(projectId, featureId); + const { hiddenEnvironments, setHiddenEnvironments } = + useHiddenEnvironments(); + const onSidebarClose = () => navigate(featurePath); + usePageTitle(featureId); + const { setLastViewed } = useLastViewedFlags(); + useEffect(() => { + setLastViewed({ featureId, projectId }); + }, [featureId]); + + return ( + + + + + + + + + + + + + } + /> + + + + } + /> + + + ); +}; + +export default FeatureOverview; diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/FeatureOverviewEnvironmentBody.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/FeatureOverviewEnvironmentBody.tsx index b9f35c8ba265..46fc7013ce12 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/FeatureOverviewEnvironmentBody.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/FeatureOverviewEnvironmentBody.tsx @@ -8,7 +8,6 @@ import { Alert, Pagination, styled } from '@mui/material'; import useFeatureStrategyApi from 'hooks/api/actions/useFeatureStrategyApi/useFeatureStrategyApi'; import { formatUnknownError } from 'utils/formatUnknownError'; import useToast from 'hooks/useToast'; -import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { StrategyDraggableItem } from '../FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem'; import type { IFeatureEnvironment } from 'interfaces/featureToggle'; import { FeatureStrategyEmpty } from 'component/feature/FeatureStrategy/FeatureStrategyEmpty/FeatureStrategyEmpty'; @@ -230,132 +229,91 @@ export const FeatureOverviewEnvironmentBody = ({ return ( - 0 || - strategiesToDisplay.length > 0) && - isDisabled - } - show={() => ( - - This environment is disabled, which means that none - of your strategies are executing. - - )} - /> - 0 || - strategiesToDisplay.length > 0 - } - show={ - <> - {releasePlans.map((plan) => ( - - ))} - 0 && - strategies.length > 0 - } - show={ - - OR - - } - /> - - {strategiesToDisplay.map( - (strategy, index) => ( - - ), - )} - > - } - elseShow={ - <> - - We noticed you're using a high - number of activation strategies. To - ensure a more targeted approach, - consider leveraging constraints or - segments. - - - {page.map((strategy, index) => ( - {}) as any - } - onDragOver={(() => {}) as any} - onDragEnd={(() => {}) as any} - /> - ))} - - - setPageIndex(page - 1) - } - /> - > - } + {(releasePlans.length > 0 || strategiesToDisplay.length > 0) && + isDisabled ? ( + + This environment is disabled, which means that none of + your strategies are executing. + + ) : null} + {releasePlans.length > 0 || strategiesToDisplay.length > 0 ? ( + <> + {releasePlans.map((plan) => ( + - > - } - elseShow={ - - } - /> + ))} + {releasePlans.length > 0 && strategies.length > 0 ? ( + + OR + + ) : null} + {strategiesToDisplay.length < 50 || + !manyStrategiesPagination ? ( + <> + {strategiesToDisplay.map((strategy, index) => ( + + ))} + > + ) : ( + <> + + We noticed you're using a high number of + activation strategies. To ensure a more + targeted approach, consider leveraging + constraints or segments. + + + {page.map((strategy, index) => ( + {}) as any} + onDragOver={(() => {}) as any} + onDragEnd={(() => {}) as any} + /> + ))} + + + setPageIndex(page - 1) + } + /> + > + )} + > + ) : ( + + )} ); diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/NewFeatureOverviewEnvironment.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/NewFeatureOverviewEnvironment.tsx index 4c088c9e6a17..9eb218df89f6 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/NewFeatureOverviewEnvironment.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/NewFeatureOverviewEnvironment/NewFeatureOverviewEnvironment.tsx @@ -2,7 +2,6 @@ import { Box, styled } from '@mui/material'; import { useFeature } from 'hooks/api/getters/useFeature/useFeature'; import useFeatureMetrics from 'hooks/api/getters/useFeatureMetrics/useFeatureMetrics'; import { getFeatureMetrics } from 'utils/getFeatureMetrics'; -import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { FeatureOverviewEnvironmentBody } from './FeatureOverviewEnvironmentBody'; import FeatureOverviewEnvironmentMetrics from '../FeatureOverviewEnvironments/FeatureOverviewEnvironment/FeatureOverviewEnvironmentMetrics/FeatureOverviewEnvironmentMetrics'; import { FeatureStrategyMenu } from 'component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenu'; @@ -13,6 +12,7 @@ const StyledFeatureOverviewEnvironment = styled('div')(({ theme }) => ({ padding: theme.spacing(1, 3), borderRadius: theme.shape.borderRadiusLarge, backgroundColor: theme.palette.background.paper, + border: `1px solid ${theme.palette.divider}`, })); const StyledFeatureOverviewEnvironmentBody = styled( @@ -52,62 +52,75 @@ const StyledHeaderTitle = styled('span')(({ theme }) => ({ })); interface INewFeatureOverviewEnvironmentProps { - environmentId: string; + hiddenEnvironments: string[]; } -export const NewFeatureOverviewEnvironment = ({ - environmentId, +export const FeatureOverviewEnvironment = ({ + hiddenEnvironments, }: INewFeatureOverviewEnvironmentProps) => { const projectId = useRequiredPathParam('projectId'); const featureId = useRequiredPathParam('featureId'); const { metrics } = useFeatureMetrics(projectId, featureId); const { feature } = useFeature(projectId, featureId); - const featureMetrics = getFeatureMetrics(feature?.environments, metrics); - const environmentMetric = featureMetrics.find( - ({ environment }) => environment === environmentId, - ); - const featureEnvironment = feature?.environments.find( - ({ name }) => name === environmentId, - ); + const environments = + feature?.environments.filter( + ({ name }) => !hiddenEnvironments.includes(name), + ) || []; - if (!featureEnvironment) + if (!environments || environments.length === 0) { return ( ); + } - return ( - - - - { + const featureMetrics = getFeatureMetrics( + feature?.environments, + metrics, + ); + const environmentMetric = featureMetrics.find( + ({ environment }) => environment === environmentId, + ); + const featureEnvironment = feature?.environments.find( + ({ name }) => name === environmentId, + ); + + if (!featureEnvironment) { + return null; + } + + return ( + + + + + + + Environment + + + {environmentId} + + + + - - - Environment - - {environmentId} - - - + name) + .filter((name) => name !== environmentId)} /> - - - name) - .filter((name) => name !== environmentId)} - /> - 0} - show={ + {featureEnvironment?.strategies?.length > 0 ? ( <> > - } - /> - - ); + ) : null} + + ); + }); }; diff --git a/frontend/src/component/feature/FeatureView/FeatureView.tsx b/frontend/src/component/feature/FeatureView/FeatureView.tsx index 95b83e39f812..4ab2b3b1c189 100644 --- a/frontend/src/component/feature/FeatureView/FeatureView.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureView.tsx @@ -1,7 +1,7 @@ import { Link, Route, Routes } from 'react-router-dom'; import { useFeature } from 'hooks/api/getters/useFeature/useFeature'; import FeatureLog from './FeatureLog/FeatureLog'; -import FeatureOverview from './FeatureOverview/FeatureOverview'; +import { FeatureOverview } from './FeatureOverview/FeatureOverview'; import { FeatureEnvironmentVariants } from './FeatureVariants/FeatureEnvironmentVariants/FeatureEnvironmentVariants'; import { FeatureMetrics } from './FeatureMetrics/FeatureMetrics'; import { FeatureSettings } from './FeatureSettings/FeatureSettings'; diff --git a/frontend/src/hooks/useGlobalLocalStorage.ts b/frontend/src/hooks/useGlobalLocalStorage.ts index ce9ac1e32b64..7c34385686db 100644 --- a/frontend/src/hooks/useGlobalLocalStorage.ts +++ b/frontend/src/hooks/useGlobalLocalStorage.ts @@ -5,6 +5,9 @@ interface IGlobalStore { hiddenEnvironments?: Array; } +/** + * @deprecated use tested `useLocalStorageState` hook instead + */ export const useGlobalLocalStorage = () => { const { value, setValue } = createLocalStorage( 'global:v1', diff --git a/frontend/src/hooks/useHiddenEnvironments.ts b/frontend/src/hooks/useHiddenEnvironments.ts index 64318b9f85e2..c17f3d974673 100644 --- a/frontend/src/hooks/useHiddenEnvironments.ts +++ b/frontend/src/hooks/useHiddenEnvironments.ts @@ -2,6 +2,9 @@ import { useGlobalLocalStorage } from './useGlobalLocalStorage'; import { useState } from 'react'; import { usePlausibleTracker } from 'hooks/usePlausibleTracker'; +/** + * @deprecated remove with `flagOverviewRedesign` + */ export const useHiddenEnvironments = () => { const { trackEvent } = usePlausibleTracker(); @@ -25,11 +28,6 @@ export const useHiddenEnvironments = () => { }); } else { hiddenEnvironments.add(environment); - trackEvent('hidden_environment', { - props: { - eventType: `environment hidden`, - }, - }); } setStoredHiddenEnvironments(hiddenEnvironments);