import { Tab, Tabs, useMediaQuery } from '@mui/material'; import React, { useState } from 'react'; import { Archive, FileCopy, Label, WatchLater } from '@mui/icons-material'; import { Link, Route, useNavigate, Routes, useLocation, } from 'react-router-dom'; import { useFeature } from 'hooks/api/getters/useFeature/useFeature'; import useProject from 'hooks/api/getters/useProject/useProject'; import { CREATE_FEATURE, DELETE_FEATURE, UPDATE_FEATURE, } from 'component/providers/AccessProvider/permissions'; import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton'; import FeatureLog from './FeatureLog/FeatureLog'; import FeatureOverview from './FeatureOverview/FeatureOverview'; import FeatureVariants from './FeatureVariants/FeatureVariants'; import { FeatureMetrics } from './FeatureMetrics/FeatureMetrics'; import { useStyles } from './FeatureView.styles'; import { FeatureSettings } from './FeatureSettings/FeatureSettings'; import useLoading from 'hooks/useLoading'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { FeatureStaleDialog } from 'component/common/FeatureStaleDialog/FeatureStaleDialog'; import AddTagDialog from './FeatureOverview/AddTagDialog/AddTagDialog'; import StatusChip from 'component/common/StatusChip/StatusChip'; import { FeatureNotFound } from 'component/feature/FeatureView/FeatureNotFound/FeatureNotFound'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; import { FeatureArchiveDialog } from '../../common/FeatureArchiveDialog/FeatureArchiveDialog'; export const FeatureView = () => { const projectId = useRequiredPathParam('projectId'); const featureId = useRequiredPathParam('featureId'); const { refetch: projectRefetch } = useProject(projectId); const { refetchFeature } = useFeature(projectId, featureId); const [openTagDialog, setOpenTagDialog] = useState(false); const [showDelDialog, setShowDelDialog] = useState(false); const [openStaleDialog, setOpenStaleDialog] = useState(false); const smallScreen = useMediaQuery(`(max-width:${500}px)`); const { feature, loading, error, status } = useFeature( projectId, featureId ); const { classes: styles } = useStyles(); const navigate = useNavigate(); const { pathname } = useLocation(); const ref = useLoading(loading); const basePath = `/projects/${projectId}/features/${featureId}`; const tabData = [ { title: 'Overview', path: `${basePath}`, name: 'overview', }, { title: 'Metrics', path: `${basePath}/metrics`, name: 'Metrics', }, { title: 'Variants', path: `${basePath}/variants`, name: 'Variants' }, { title: 'Settings', path: `${basePath}/settings`, name: 'Settings' }, { title: 'Event log', path: `${basePath}/logs`, name: 'Event log', }, ]; const activeTab = tabData.find(tab => tab.path === pathname) ?? tabData[0]; const renderTabs = () => { return tabData.map((tab, index) => { return ( navigate(tab.path)} className={styles.tabButton} /> ); }); }; if (status === 404) { return ; } return (

{feature.name}{' '}

} />
setShowDelDialog(true)} > setOpenStaleDialog(true)} permission={UPDATE_FEATURE} projectId={projectId} tooltipProps={{ title: 'Toggle stale state', }} data-loading > setOpenTagDialog(true)} permission={UPDATE_FEATURE} projectId={projectId} tooltipProps={{ title: 'Add tag' }} data-loading >
{renderTabs()}
} /> } /> } /> } /> } /> { projectRefetch(); navigate(`/projects/${projectId}`); }} onClose={() => setShowDelDialog(false)} projectId={projectId} featureId={featureId} /> { setOpenStaleDialog(false); refetchFeature(); }} featureId={featureId} projectId={projectId} />
} /> ); };