diff --git a/frontend/src/component/project/Project/ProjectStatus/LifecycleMessages.ts b/frontend/src/component/project/Project/ProjectStatus/LifecycleMessages.ts new file mode 100644 index 000000000000..3641cca2ffdb --- /dev/null +++ b/frontend/src/component/project/Project/ProjectStatus/LifecycleMessages.ts @@ -0,0 +1,16 @@ +import type { ProjectStatusSchemaLifecycleSummary } from 'openapi'; + +export const lifecycleMessages: Record< + keyof ProjectStatusSchemaLifecycleSummary, + string +> = { + initial: + 'Feature flags in the initial phase indicate you have created flags that is not detected in any environments which mean either integration issues or unused flags', + preLive: + 'In the pre-live phase the feature is being developed and tested in controlled environments. Once the feature is ready the flag can be enabled in production.', + live: 'The feature is being rolled out in production according to the decided strategy targeting user segments and/or using percentage rollout. ', + completed: + 'Flags that are in cleanup are potentially stale flags. View the flags to evaluate whether you should archive them in Unleash and clean up your codebase to reduce technical debt', + archived: + 'Flags that have been archived and are no longer in use, but kept for future reference.', +}; diff --git a/frontend/src/component/project/Project/ProjectStatus/ProjectLifecycleSummary.tsx b/frontend/src/component/project/Project/ProjectStatus/ProjectLifecycleSummary.tsx index 89a122a0530d..a872ace6b448 100644 --- a/frontend/src/component/project/Project/ProjectStatus/ProjectLifecycleSummary.tsx +++ b/frontend/src/component/project/Project/ProjectStatus/ProjectLifecycleSummary.tsx @@ -1,9 +1,9 @@ -import { styled } from '@mui/material'; +import { CardActionArea, styled } from '@mui/material'; import { FeatureLifecycleStageIcon } from 'component/feature/FeatureView/FeatureOverview/FeatureLifecycle/FeatureLifecycleStageIcon'; import { useProjectStatus } from 'hooks/api/getters/useProjectStatus/useProjectStatus'; import useLoading from 'hooks/useLoading'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; -import type { FC } from 'react'; +import { useState, type FC } from 'react'; import { PrettifyLargeNumber } from 'component/common/PrettifyLargeNumber/PrettifyLargeNumber'; import type { ProjectStatusSchemaLifecycleSummary } from 'openapi'; import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; @@ -24,16 +24,45 @@ const HeaderRow = styled('div')(({ theme }) => ({ }, })); -const LifecycleBox = styled('li')(({ theme }) => ({ +const LifecycleBoxContent = styled('div')(({ theme }) => ({ padding: theme.spacing(2), - borderRadius: theme.shape.borderRadiusExtraLarge, - border: `2px solid ${theme.palette.divider}`, gap: theme.spacing(4), display: 'flex', flexFlow: 'column', justifyContent: 'space-between', + transition: 'border-color 200ms', + borderRadius: theme.shape.borderRadiusExtraLarge, + border: `2px solid ${theme.palette.divider}`, })); +const StyledCardActionArea = styled(CardActionArea)(({ theme }) => ({ + borderRadius: theme.shape.borderRadiusExtraLarge, + '&[aria-pressed="true"] > *': { + borderColor: theme.palette.primary.main, + }, +})); + +const LifecycleBox = ({ + children, + isActive, + onClick, +}: { + children: React.ReactNode; + isActive?: boolean; + onClick?: () => void; +}) => { + return ( +