diff --git a/frontend/src/component/feature/FeatureView/FeatureViewHeader.tsx b/frontend/src/component/feature/FeatureView/FeatureViewHeader.tsx
index a1e5c26130..4a99e7dbc1 100644
--- a/frontend/src/component/feature/FeatureView/FeatureViewHeader.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureViewHeader.tsx
@@ -4,6 +4,7 @@ import {
styled,
Tab,
Tabs,
+ type Theme,
Tooltip,
Typography,
useMediaQuery,
@@ -49,8 +50,16 @@ const NewStyledHeader = styled('div')(({ theme }) => ({
backgroundColor: 'none',
marginBottom: theme.spacing(2),
borderBottom: `1px solid ${theme.palette.divider}`,
+ containerType: 'inline-size',
}));
+const onNarrowHeader = (theme: Theme, css: object) => ({
+ '@container (max-width: 650px)': css,
+ '@supports not (container-type: inline-size)': {
+ [theme.breakpoints.down('md')]: css,
+ },
+});
+
const UpperHeaderRow = styled('div')(({ theme }) => ({
display: 'flex',
flexFlow: 'row wrap',
@@ -60,12 +69,23 @@ const UpperHeaderRow = styled('div')(({ theme }) => ({
const LowerHeaderRow = styled(UpperHeaderRow)(({ theme }) => ({
justifyContent: 'space-between',
+ flexFlow: 'row nowrap',
+ ...onNarrowHeader(theme, {
+ flexFlow: 'column nowrap',
+ alignItems: 'flex-start',
+ }),
}));
-const HeaderActions = styled('div')(({ theme }) => ({
- display: 'flex',
+const HeaderActions = styled('div', {
+ shouldForwardProp: (propName) => propName !== 'showOnNarrowScreens',
+})<{ showOnNarrowScreens?: boolean }>(({ theme, showOnNarrowScreens }) => ({
+ display: showOnNarrowScreens ? 'none' : 'flex',
flexFlow: 'row nowrap',
alignItems: 'center',
+
+ ...onNarrowHeader(theme, {
+ display: showOnNarrowScreens ? 'flex' : 'none',
+ }),
}));
const IconButtonWithTooltip: FC<
@@ -174,6 +194,79 @@ const useLegacyVariants = (environments: IFeatureToggle['environments']) => {
return enableLegacyVariants || existingLegacyVariantsExist;
};
+type HeaderActionsProps = {
+ feature: IFeatureToggle;
+ showOnNarrowScreens?: boolean;
+ onFavorite: () => void;
+ handleCopyToClipboard: () => void;
+ isFeatureNameCopied: boolean;
+ openStaleDialog: () => void;
+ openDeleteDialog: () => void;
+};
+
+const HeaderActionsComponent = ({
+ showOnNarrowScreens,
+ feature,
+ onFavorite,
+ handleCopyToClipboard,
+ isFeatureNameCopied,
+ openStaleDialog,
+ openDeleteDialog,
+}: HeaderActionsProps) => (
+
+
+ {feature.favorite ? : }
+
+
+
+ {isFeatureNameCopied ? : }
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
type Props = {
feature: IFeatureToggle;
};
@@ -260,6 +353,22 @@ export const FeatureViewHeader: FC = ({ feature }) => {
}
};
+ const HeaderActionsInner: FC<{ showOnNarrowScreens?: boolean }> = ({
+ showOnNarrowScreens,
+ }) => {
+ return (
+ setOpenStaleDialog(true)}
+ openDeleteDialog={() => setShowDelDialog(true)}
+ />
+ );
+ };
+
return (
<>
{flagOverviewRedesign ? (
@@ -271,6 +380,7 @@ export const FeatureViewHeader: FC = ({ feature }) => {
) : null}
+
= ({ feature }) => {
/>
))}
-
-
- {feature.favorite ? : }
-
-
-
- {isFeatureNameCopied ? (
-
- ) : (
-
- )}
-
-
-
-
-
- setShowDelDialog(true)}
- >
-
-
- setOpenStaleDialog(true)}
- permission={UPDATE_FEATURE}
- projectId={projectId}
- tooltipProps={{
- title: 'Toggle stale state',
- }}
- data-loading
- >
-
-
-
+
) : (