import { Tab, Tabs, useMediaQuery } from '@material-ui/core'; import { useState } from 'react'; import { WatchLater, Archive, FileCopy, Label } from '@material-ui/icons'; import { Link, Route, useHistory, useParams } from 'react-router-dom'; import useFeatureApi from '../../../hooks/api/actions/useFeatureApi/useFeatureApi'; import useFeature from '../../../hooks/api/getters/useFeature/useFeature'; import useProject from '../../../hooks/api/getters/useProject/useProject'; import useTabs from '../../../hooks/useTabs'; import useToast from '../../../hooks/useToast'; import { IFeatureViewParams } from '../../../interfaces/params'; import { CREATE_FEATURE, DELETE_FEATURE, UPDATE_FEATURE, } from '../../providers/AccessProvider/permissions'; import Dialogue from '../../common/Dialogue'; import PermissionIconButton from '../../common/PermissionIconButton/PermissionIconButton'; import FeatureLog from './FeatureLog/FeatureLog'; import FeatureMetrics from './FeatureMetrics/FeatureMetrics'; import FeatureOverview from './FeatureOverview/FeatureOverview'; import FeatureStrategies from './FeatureStrategies/FeatureStrategies'; import FeatureVariants from './FeatureVariants/FeatureVariants'; import { useStyles } from './FeatureView.styles'; import FeatureSettings from './FeatureSettings/FeatureSettings'; import useLoading from '../../../hooks/useLoading'; import ConditionallyRender from '../../common/ConditionallyRender'; import { getCreateTogglePath } from '../../../utils/route-path-helpers'; import useUiConfig from '../../../hooks/api/getters/useUiConfig/useUiConfig'; import StaleDialog from './FeatureOverview/StaleDialog/StaleDialog'; import AddTagDialog from './FeatureOverview/AddTagDialog/AddTagDialog'; import StatusChip from '../../common/StatusChip/StatusChip'; const FeatureView = () => { const { projectId, featureId } = useParams(); const { feature, loading, error } = useFeature(projectId, featureId); const { refetch: projectRefetch } = useProject(projectId); const [openTagDialog, setOpenTagDialog] = useState(false); const { a11yProps } = useTabs(0); const { archiveFeatureToggle } = useFeatureApi(); const { setToastData, setToastApiError } = useToast(); const [showDelDialog, setShowDelDialog] = useState(false); const [openStaleDialog, setOpenStaleDialog] = useState(false); const smallScreen = useMediaQuery(`(max-width:${500}px)`); const styles = useStyles(); const history = useHistory(); const ref = useLoading(loading); const { uiConfig } = useUiConfig(); const basePath = `/projects/${projectId}/features/${featureId}`; const archiveToggle = async () => { try { await archiveFeatureToggle(projectId, featureId); setToastData({ text: 'Your feature toggle has been archived', type: 'success', title: 'Feature archived', }); setShowDelDialog(false); projectRefetch(); history.push(`/projects/${projectId}`); } catch (e) { setToastApiError(e.toString()); setShowDelDialog(false); } }; const handleCancel = () => setShowDelDialog(false); const tabData = [ { title: 'Overview', path: `${basePath}`, name: 'overview', }, { title: 'Strategies', path: `${basePath}/strategies`, name: 'strategies', }, { 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 renderTabs = () => { return tabData.map((tab, index) => { return ( { history.push(tab.path); }} className={styles.tabButton} /> ); }); }; const renderFeatureNotExist = () => { return (

The feature {featureId.substring(0, 30)}{' '} does not exist. Do you want to   create it  ?

); }; return (

{feature.name}{' '}

} />
setShowDelDialog(true)} > setOpenStaleDialog(true)} permission={UPDATE_FEATURE} projectId={projectId} tooltip="Toggle stale status" data-loading > setOpenTagDialog(true)} permission={UPDATE_FEATURE} projectId={projectId} tooltip="Add tag" data-loading >
{renderTabs()}
archiveToggle()} open={showDelDialog} onClose={handleCancel} primaryButtonText="Archive toggle" secondaryButtonText="Cancel" title="Archive feature toggle" > Are you sure you want to archive this feature toggle?
} elseShow={renderFeatureNotExist()} /> ); }; export default FeatureView;