diff --git a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx index ca7e54dc64..2847355dc7 100644 --- a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx +++ b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCards.tsx @@ -38,6 +38,8 @@ const FILTERS = [ export type StrategyFilterValue = (typeof FILTERS)[number]['value']; +const CUSTOM_STRATEGY_DISPLAY_LIMIT = 5; + const StyledContainer = styled(Box)(() => ({ width: '100%', display: 'flex', @@ -118,6 +120,9 @@ export const FeatureStrategyMenuCards = ({ (strategy) => strategy.editable, ); + const customStrategyDisplayLimit = + filter === 'custom' ? 0 : CUSTOM_STRATEGY_DISPLAY_LIMIT; + const availableFilters = useMemo( () => FILTERS.filter(({ value }) => { @@ -281,7 +286,11 @@ export const FeatureStrategyMenuCards = ({ )} {shouldRender('custom') && customStrategies.length > 0 && ( - + setFilter('custom')} + > {customStrategies.map(renderStrategy)} )} diff --git a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCardsSection.tsx b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCardsSection.tsx index 654d10df50..771179cbf1 100644 --- a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCardsSection.tsx +++ b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyMenu/FeatureStrategyMenuCards/FeatureStrategyMenuCardsSection.tsx @@ -1,4 +1,4 @@ -import { Box, styled } from '@mui/material'; +import { Box, Button, styled } from '@mui/material'; import type { ReactNode } from 'react'; export const StyledStrategyModalSectionHeader = styled(Box)(({ theme }) => ({ @@ -17,23 +17,52 @@ const StyledStrategyModalSectionGrid = styled(Box)(({ theme }) => ({ width: '100%', })); +const StyledViewMoreButton = styled(Button)(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + height: theme.spacing(10), + padding: theme.spacing(2), + border: `1px solid ${theme.palette.divider}`, + borderRadius: theme.spacing(1), +})); + interface IFeatureStrategyMenuCardsSectionProps { title?: string; - children: ReactNode; + limit?: number; + viewMore?: () => void; + viewMoreLabel?: string; + children: ReactNode[]; } export const FeatureStrategyMenuCardsSection = ({ title, + limit, + viewMore, + viewMoreLabel = 'View more', children, -}: IFeatureStrategyMenuCardsSectionProps) => ( - - {title && ( - - {title} - - )} - - {children} - - -); +}: IFeatureStrategyMenuCardsSectionProps) => { + const limitedChildren = limit ? children.slice(0, limit) : children; + + return ( + + {title && ( + + {title} + + )} + + {limitedChildren} + {viewMore && limitedChildren.length < children.length && ( + + {viewMoreLabel} + + )} + + + ); +};