diff --git a/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.test.tsx b/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.test.tsx
index 6043782183..b1c0c57c47 100644
--- a/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.test.tsx
+++ b/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.test.tsx
@@ -35,14 +35,8 @@ test('should render strategy name, custom title and description', async () => {
parameters: {},
};
- render(
- ,
- );
+ render();
expect(screen.getByText('strategy name:')).toBeInTheDocument();
- expect(screen.getByText('description')).toBeInTheDocument();
await screen.findByText('custom title'); // behind async flag
});
diff --git a/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.tsx b/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.tsx
index 22349c178e..7be8459bf5 100644
--- a/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.tsx
+++ b/frontend/src/component/common/StrategyItemContainer/StrategyItemContainer.tsx
@@ -12,13 +12,12 @@ import { Truncator } from '../Truncator/Truncator';
type StrategyItemContainerProps = {
strategyHeaderLevel?: 1 | 2 | 3 | 4 | 5 | 6;
- strategy: IFeatureStrategy | PlaygroundStrategySchema;
+ strategy: Omit | PlaygroundStrategySchema;
onDragStart?: DragEventHandler;
onDragEnd?: DragEventHandler;
headerItemsRight?: ReactNode;
className?: string;
style?: React.CSSProperties;
- description?: string;
children?: React.ReactNode;
};
@@ -28,23 +27,6 @@ const DragIcon = styled(IconButton)({
transition: 'color 0.2s ease-in-out',
});
-const StyledDescription = styled('div')(({ theme }) => ({
- fontSize: theme.typography.fontSize,
- fontWeight: 'normal',
- color: theme.palette.text.secondary,
- display: 'none',
- top: theme.spacing(2.5),
- [theme.breakpoints.up('md')]: {
- display: 'block',
- },
-}));
-const StyledCustomTitle = styled('div')(({ theme }) => ({
- fontWeight: 'normal',
- display: 'none',
- [theme.breakpoints.up('md')]: {
- display: 'block',
- },
-}));
const StyledHeaderContainer = styled('hgroup')(({ theme }) => ({
display: 'flex',
flexFlow: 'row nowrap',
@@ -66,7 +48,7 @@ const StyledTruncator = styled(Truncator)(({ theme }) => ({
margin: 0,
}));
-const NewStyledHeader = styled('div', {
+const StyledHeader = styled('div', {
shouldForwardProp: (prop) => prop !== 'draggable' && prop !== 'disabled',
})<{ draggable: boolean; disabled: boolean }>(
({ theme, draggable, disabled }) => ({
@@ -89,7 +71,6 @@ export const StrategyItemContainer: FC = ({
strategyHeaderLevel = 3,
children,
style = {},
- description,
}) => {
const StrategyHeaderLink: React.FC<{ children?: React.ReactNode }> =
'links' in strategy // todo: revisit this when we get to playground, related to flag `flagOverviewRedesign`
@@ -99,7 +80,7 @@ export const StrategyItemContainer: FC = ({
return (
-
@@ -146,25 +127,12 @@ export const StrategyItemContainer: FC = ({
{formatStrategyName(String(strategy.name))}
)}
-
- {description}
-
- }
- />
- (
- <>
- Disabled
- >
- )}
- />
+ {strategy.disabled ? (
+ Disabled
+ ) : null}
= ({
>
{headerItemsRight}
-
+
{children}
diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyItem.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyItem.tsx
index f9a514534d..513d910369 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyItem.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyItem.tsx
@@ -3,11 +3,11 @@ import type { IFeatureStrategy } from 'interfaces/strategy';
import { StrategyExecution } from './StrategyExecution/StrategyExecution';
import SplitPreviewSlider from 'component/feature/StrategyTypes/SplitPreviewSlider/SplitPreviewSlider';
import { Box } from '@mui/material';
-import { StrategyItemContainer as NewStrategyItemContainer } from 'component/common/StrategyItemContainer/StrategyItemContainer';
+import { StrategyItemContainer } from 'component/common/StrategyItemContainer/StrategyItemContainer';
type StrategyItemProps = {
headerItemsRight?: ReactNode;
- strategy: IFeatureStrategy;
+ strategy: Omit;
onDragStart?: DragEventHandler;
onDragEnd?: DragEventHandler;
strategyHeaderLevel?: 1 | 2 | 3 | 4 | 5 | 6;
@@ -21,7 +21,7 @@ export const StrategyItem: FC = ({
strategyHeaderLevel,
}) => {
return (
- = ({
) : (
))}
-
+
);
};
diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/EnvironmentHeader.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/EnvironmentHeader.tsx
index f499b2686a..3cc872b2e1 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/EnvironmentHeader.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/EnvironmentHeader.tsx
@@ -1,4 +1,4 @@
-import type { FC, ReactNode } from 'react';
+import type { FC, PropsWithChildren } from 'react';
import {
AccordionSummary,
type AccordionSummaryProps,
@@ -6,6 +6,7 @@ import {
} from '@mui/material';
import ExpandMore from '@mui/icons-material/ExpandMore';
import { Truncator } from 'component/common/Truncator/Truncator';
+import { useId } from 'hooks/useId';
const StyledAccordionSummary = styled(AccordionSummary, {
shouldForwardProp: (prop) => prop !== 'expandable',
@@ -47,22 +48,19 @@ const StyledHeaderTitleLabel = styled('p')(({ theme }) => ({
}));
const StyledTruncator = styled(Truncator)(({ theme }) => ({
- fontSize: theme.typography.body1.fontSize,
+ fontSize: theme.typography.h2.fontSize,
fontWeight: theme.typography.fontWeightMedium,
}));
type EnvironmentHeaderProps = {
environmentId: string;
- children: ReactNode;
expandable?: boolean;
} & AccordionSummaryProps;
-export const EnvironmentHeader: FC = ({
- environmentId,
- children,
- expandable = true,
- ...props
-}) => {
+export const EnvironmentHeader: FC<
+ PropsWithChildren
+> = ({ environmentId, children, expandable = true, ...props }) => {
+ const id = useId();
return (
= ({
sx={{ visibility: expandable ? 'visible' : 'hidden' }}
/>
}
+ id={id}
+ aria-controls={`environment-accordion-${id}-content`}
expandable={expandable}
>
diff --git a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectDefaultStrategySettings.tsx b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectDefaultStrategySettings.tsx
index ae11b1f93a..5fc87b6b92 100644
--- a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectDefaultStrategySettings.tsx
+++ b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectDefaultStrategySettings.tsx
@@ -10,13 +10,15 @@ import {
UPDATE_PROJECT,
} from 'component/providers/AccessProvider/permissions';
import { Alert, styled } from '@mui/material';
-import ProjectEnvironment from './ProjectEnvironment/ProjectEnvironment';
+import LegacyProjectEnvironment from './ProjectEnvironment/LegacyProjectEnvironment';
import { Route, Routes, useNavigate } from 'react-router-dom';
import { SidebarModal } from 'component/common/SidebarModal/SidebarModal';
import EditDefaultStrategy from './ProjectEnvironment/ProjectEnvironmentDefaultStrategy/EditDefaultStrategy';
import useProjectOverview, {
useProjectOverviewNameOrId,
} from 'hooks/api/getters/useProjectOverview/useProjectOverview';
+import { useUiFlag } from 'hooks/useUiFlag';
+import { ProjectEnvironment } from './ProjectEnvironment/ProjectEnvironment';
const StyledAlert = styled(Alert)(({ theme }) => ({
marginBottom: theme.spacing(4),
@@ -28,6 +30,7 @@ export const ProjectDefaultStrategySettings = () => {
const { project } = useProjectOverview(projectId);
const navigate = useNavigate();
usePageTitle(`Project default strategy configuration – ${projectName}`);
+ const flagOverviewRedesign = useUiFlag('flagOverviewRedesign');
if (
!hasAccess(
@@ -61,12 +64,19 @@ export const ProjectDefaultStrategySettings = () => {
specific environment. These will be used when you enable a
toggle environment that has no strategies defined
- {project?.environments.map((environment) => (
-
- ))}
+ {project?.environments.map((environment) =>
+ flagOverviewRedesign ? (
+
+ ) : (
+
+ ),
+ )}
prop !== 'enabled',
+})<{ enabled: boolean }>(({ theme, enabled }) => ({
+ borderRadius: theme.shape.borderRadiusLarge,
+ marginBottom: theme.spacing(2),
+ backgroundColor: enabled
+ ? theme.palette.background.paper
+ : theme.palette.envAccordion.disabled,
+}));
+
+const StyledAccordion = styled(Accordion)({
+ boxShadow: 'none',
+ background: 'none',
+});
+
+const StyledAccordionSummary = styled(AccordionSummary)(({ theme }) => ({
+ boxShadow: 'none',
+ padding: theme.spacing(2, 4),
+ pointerEvents: 'none',
+ [theme.breakpoints.down(400)]: {
+ padding: theme.spacing(1, 2),
+ },
+}));
+
+const StyledAccordionDetails = styled(AccordionDetails)(({ theme }) => ({
+ padding: theme.spacing(3),
+ background: theme.palette.envAccordion.expanded,
+ borderBottomLeftRadius: theme.shape.borderRadiusLarge,
+ borderBottomRightRadius: theme.shape.borderRadiusLarge,
+ boxShadow: theme.boxShadows.accordionFooter,
+
+ [theme.breakpoints.down('md')]: {
+ padding: theme.spacing(2, 1),
+ },
+}));
+
+const StyledAccordionBody = styled('div')(({ theme }) => ({
+ width: '100%',
+ position: 'relative',
+ paddingBottom: theme.spacing(2),
+}));
+
+const StyledAccordionBodyInnerContainer = styled('div')(({ theme }) => ({
+ [theme.breakpoints.down(400)]: {
+ padding: theme.spacing(1),
+ },
+}));
+
+const StyledHeader = styled('div', {
+ shouldForwardProp: (prop) => prop !== 'enabled',
+})<{ enabled: boolean }>(({ theme, enabled }) => ({
+ display: 'flex',
+ justifyContent: 'center',
+ flexDirection: 'column',
+ color: enabled ? theme.palette.text.primary : theme.palette.text.secondary,
+}));
+
+const StyledHeaderTitle = styled('div')(({ theme }) => ({
+ display: 'flex',
+ alignItems: 'center',
+ fontWeight: 'bold',
+ [theme.breakpoints.down(560)]: {
+ flexDirection: 'column',
+ textAlign: 'center',
+ },
+}));
+
+const StyledEnvironmentIcon = styled(EnvironmentIcon)(({ theme }) => ({
+ [theme.breakpoints.down(560)]: {
+ marginBottom: '0.5rem',
+ },
+}));
+
+const StyledStringTruncator = styled(StringTruncator)(({ theme }) => ({
+ fontSize: theme.fontSizes.bodySize,
+ fontWeight: theme.typography.fontWeightMedium,
+ [theme.breakpoints.down(560)]: {
+ textAlign: 'center',
+ },
+}));
+
+const ProjectEnvironment = ({ environment }: IProjectEnvironmentProps) => {
+ const { environment: name } = environment;
+ const description = `Default strategy configuration in the ${name} environment`;
+ const theme = useTheme();
+ const enabled = false;
+
+ return (
+
+ e.stopPropagation()}
+ data-testid={`${PROJECT_ENVIRONMENT_ACCORDION}_${name}`}
+ className={`environment-accordion ${
+ enabled ? '' : 'accordion-disabled'
+ }`}
+ style={{
+ outline: `2px solid ${theme.palette.divider}`,
+ backgroundColor: theme.palette.background.paper,
+ }}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default ProjectEnvironment;
diff --git a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironment.tsx b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironment.tsx
index a2e0140da8..a9f4274a55 100644
--- a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironment.tsx
+++ b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironment.tsx
@@ -1,150 +1,47 @@
-import {
- Accordion,
- AccordionDetails,
- AccordionSummary,
- styled,
- useTheme,
-} from '@mui/material';
-import EnvironmentIcon from 'component/common/EnvironmentIcon/EnvironmentIcon';
-import StringTruncator from 'component/common/StringTruncator/StringTruncator';
+import { Accordion, AccordionDetails, styled } from '@mui/material';
import { PROJECT_ENVIRONMENT_ACCORDION } from 'utils/testIds';
import type { ProjectEnvironmentType } from '../../../../../../interfaces/environments';
-import ProjectEnvironmentDefaultStrategy from './ProjectEnvironmentDefaultStrategy/ProjectEnvironmentDefaultStrategy';
+import { ProjectEnvironmentDefaultStrategy } from './ProjectEnvironmentDefaultStrategy/ProjectEnvironmentDefaultStrategy';
+import { EnvironmentHeader } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentHeader/EnvironmentHeader';
interface IProjectEnvironmentProps {
environment: ProjectEnvironmentType;
}
-const StyledProjectEnvironmentOverview = styled('div', {
- shouldForwardProp: (prop) => prop !== 'enabled',
-})<{ enabled: boolean }>(({ theme, enabled }) => ({
- borderRadius: theme.shape.borderRadiusLarge,
+const StyledProjectEnvironmentOverview = styled('div')(({ theme }) => ({
marginBottom: theme.spacing(2),
- backgroundColor: enabled
- ? theme.palette.background.paper
- : theme.palette.envAccordion.disabled,
}));
-const StyledAccordion = styled(Accordion)({
+const StyledAccordion = styled(Accordion)(({ theme }) => ({
boxShadow: 'none',
- background: 'none',
-});
-
-const StyledAccordionSummary = styled(AccordionSummary)(({ theme }) => ({
- boxShadow: 'none',
- padding: theme.spacing(2, 4),
- pointerEvents: 'none',
- [theme.breakpoints.down(400)]: {
- padding: theme.spacing(1, 2),
- },
+ border: `1px solid ${theme.palette.divider}`,
+ overflow: 'hidden',
}));
-const StyledAccordionDetails = styled(AccordionDetails, {
- shouldForwardProp: (prop) => prop !== 'enabled',
-})<{ enabled: boolean }>(({ theme }) => ({
- padding: theme.spacing(3),
- background: theme.palette.envAccordion.expanded,
- borderBottomLeftRadius: theme.shape.borderRadiusLarge,
- borderBottomRightRadius: theme.shape.borderRadiusLarge,
- boxShadow: theme.boxShadows.accordionFooter,
-
- [theme.breakpoints.down('md')]: {
- padding: theme.spacing(2, 1),
- },
+const StyledAccordionDetails = styled(AccordionDetails)(({ theme }) => ({
+ padding: 0,
+ background: theme.palette.background.elevation1,
}));
-const StyledAccordionBody = styled('div')(({ theme }) => ({
- width: '100%',
- position: 'relative',
- paddingBottom: theme.spacing(2),
-}));
-
-const StyledAccordionBodyInnerContainer = styled('div')(({ theme }) => ({
- [theme.breakpoints.down(400)]: {
- padding: theme.spacing(1),
- },
-}));
-
-const StyledHeader = styled('div', {
- shouldForwardProp: (prop) => prop !== 'enabled',
-})<{ enabled: boolean }>(({ theme, enabled }) => ({
- display: 'flex',
- justifyContent: 'center',
- flexDirection: 'column',
- color: enabled ? theme.palette.text.primary : theme.palette.text.secondary,
-}));
-
-const StyledHeaderTitle = styled('div')(({ theme }) => ({
- display: 'flex',
- alignItems: 'center',
- fontWeight: 'bold',
- [theme.breakpoints.down(560)]: {
- flexDirection: 'column',
- textAlign: 'center',
- },
-}));
-
-const StyledEnvironmentIcon = styled(EnvironmentIcon)(({ theme }) => ({
- [theme.breakpoints.down(560)]: {
- marginBottom: '0.5rem',
- },
-}));
-
-const StyledStringTruncator = styled(StringTruncator)(({ theme }) => ({
- fontSize: theme.fontSizes.bodySize,
- fontWeight: theme.typography.fontWeightMedium,
- [theme.breakpoints.down(560)]: {
- textAlign: 'center',
- },
-}));
-
-const ProjectEnvironment = ({ environment }: IProjectEnvironmentProps) => {
+export const ProjectEnvironment = ({
+ environment,
+}: IProjectEnvironmentProps) => {
const { environment: name } = environment;
- const description = `Default strategy configuration in the ${name} environment`;
- const theme = useTheme();
- const enabled = false;
+
return (
-
+
e.stopPropagation()}
data-testid={`${PROJECT_ENVIRONMENT_ACCORDION}_${name}`}
- className={`environment-accordion ${
- enabled ? '' : 'accordion-disabled'
- }`}
- style={{
- outline: `2px solid ${theme.palette.divider}`,
- backgroundColor: theme.palette.background.paper,
- }}
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
);
};
-
-export default ProjectEnvironment;
diff --git a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/LegacyProjectEnvironmentDefaultStrategy.tsx b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/LegacyProjectEnvironmentDefaultStrategy.tsx
new file mode 100644
index 0000000000..6618227d21
--- /dev/null
+++ b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/LegacyProjectEnvironmentDefaultStrategy.tsx
@@ -0,0 +1,94 @@
+import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
+import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
+import { Link } from 'react-router-dom';
+import Edit from '@mui/icons-material/Edit';
+import { StrategyExecution } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyExecution/StrategyExecution';
+import type { ProjectEnvironmentType } from 'interfaces/environments';
+import { useMemo } from 'react';
+import type { CreateFeatureStrategySchema } from 'openapi';
+import {
+ PROJECT_DEFAULT_STRATEGY_WRITE,
+ UPDATE_PROJECT,
+} from '@server/types/permissions';
+import SplitPreviewSlider from 'component/feature/StrategyTypes/SplitPreviewSlider/SplitPreviewSlider';
+import { StrategyItemContainer } from 'component/common/StrategyItemContainer/LegacyStrategyItemContainer';
+
+interface ProjectEnvironmentDefaultStrategyProps {
+ environment: ProjectEnvironmentType;
+ description: string;
+}
+
+export const formatEditProjectEnvironmentStrategyPath = (
+ projectId: string,
+ environmentId: string,
+): string => {
+ const params = new URLSearchParams({ environmentId });
+
+ return `/projects/${projectId}/settings/default-strategy/edit?${params}`;
+};
+
+const DEFAULT_STRATEGY: CreateFeatureStrategySchema = {
+ name: 'flexibleRollout',
+ disabled: false,
+ constraints: [],
+ title: '',
+ parameters: {
+ rollout: '100',
+ stickiness: 'default',
+ groupId: '',
+ },
+};
+
+const ProjectEnvironmentDefaultStrategy = ({
+ environment,
+ description,
+}: ProjectEnvironmentDefaultStrategyProps) => {
+ const projectId = useRequiredPathParam('projectId');
+ const { environment: environmentId, defaultStrategy } = environment;
+
+ const editStrategyPath = formatEditProjectEnvironmentStrategyPath(
+ projectId,
+ environmentId,
+ );
+
+ const strategy: CreateFeatureStrategySchema = useMemo(() => {
+ return defaultStrategy ? defaultStrategy : DEFAULT_STRATEGY;
+ }, [JSON.stringify(defaultStrategy)]);
+
+ return (
+ <>
+
+
+
+
+ >
+ }
+ >
+
+
+ {strategy.variants && strategy.variants.length > 0 ? (
+
+ ) : null}
+
+ >
+ );
+};
+
+export default ProjectEnvironmentDefaultStrategy;
diff --git a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/ProjectEnvironmentDefaultStrategy.tsx b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/ProjectEnvironmentDefaultStrategy.tsx
index 6618227d21..fd6f23c2f7 100644
--- a/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/ProjectEnvironmentDefaultStrategy.tsx
+++ b/frontend/src/component/project/Project/ProjectSettings/ProjectDefaultStrategySettings/ProjectEnvironment/ProjectEnvironmentDefaultStrategy/ProjectEnvironmentDefaultStrategy.tsx
@@ -2,7 +2,6 @@ import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
import { Link } from 'react-router-dom';
import Edit from '@mui/icons-material/Edit';
-import { StrategyExecution } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyExecution/StrategyExecution';
import type { ProjectEnvironmentType } from 'interfaces/environments';
import { useMemo } from 'react';
import type { CreateFeatureStrategySchema } from 'openapi';
@@ -10,12 +9,11 @@ import {
PROJECT_DEFAULT_STRATEGY_WRITE,
UPDATE_PROJECT,
} from '@server/types/permissions';
-import SplitPreviewSlider from 'component/feature/StrategyTypes/SplitPreviewSlider/SplitPreviewSlider';
-import { StrategyItemContainer } from 'component/common/StrategyItemContainer/LegacyStrategyItemContainer';
+import { StrategyItem } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyItem/StrategyItem';
+import type { IFeatureStrategy } from 'interfaces/strategy';
interface ProjectEnvironmentDefaultStrategyProps {
environment: ProjectEnvironmentType;
- description: string;
}
export const formatEditProjectEnvironmentStrategyPath = (
@@ -39,9 +37,8 @@ const DEFAULT_STRATEGY: CreateFeatureStrategySchema = {
},
};
-const ProjectEnvironmentDefaultStrategy = ({
+export const ProjectEnvironmentDefaultStrategy = ({
environment,
- description,
}: ProjectEnvironmentDefaultStrategyProps) => {
const projectId = useRequiredPathParam('projectId');
const { environment: environmentId, defaultStrategy } = environment;
@@ -51,44 +48,42 @@ const ProjectEnvironmentDefaultStrategy = ({
environmentId,
);
- const strategy: CreateFeatureStrategySchema = useMemo(() => {
- return defaultStrategy ? defaultStrategy : DEFAULT_STRATEGY;
+ const strategy: Omit = useMemo(() => {
+ const baseDefaultStrategy = defaultStrategy
+ ? defaultStrategy
+ : DEFAULT_STRATEGY;
+ return {
+ ...baseDefaultStrategy,
+ disabled: false,
+ constraints: baseDefaultStrategy.constraints ?? [],
+ title: baseDefaultStrategy.title ?? '',
+ parameters: baseDefaultStrategy.parameters ?? {},
+ };
}, [JSON.stringify(defaultStrategy)]);
return (
- <>
-
-
-
-
- >
- }
- >
-
-
- {strategy.variants && strategy.variants.length > 0 ? (
-
- ) : null}
-
- >
+
+
+
+
+ >
+ }
+ />
);
};
-
-export default ProjectEnvironmentDefaultStrategy;