import { Fragment } from 'react'; import { IFeatureStrategy, IFeatureStrategyParameters, IConstraint, } from 'interfaces/strategy'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import PercentageCircle from 'component/common/PercentageCircle/PercentageCircle'; import { StrategySeparator } from 'component/common/StrategySeparator/StrategySeparator'; import FeatureOverviewExecutionChips from './FeatureOverviewExecutionChips/FeatureOverviewExecutionChips'; import { useStrategies } from 'hooks/api/getters/useStrategies/useStrategies'; import StringTruncator from 'component/common/StringTruncator/StringTruncator'; import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; import { FeatureOverviewSegment } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewSegment/FeatureOverviewSegment'; import { ConstraintAccordionList } from 'component/common/ConstraintAccordion/ConstraintAccordionList/ConstraintAccordionList'; import { useStyles } from 'component/feature/FeatureView/FeatureOverview/FeatureOverviewExecution/FeatureOverviewExecution.styles'; import { parseParameterString, parseParameterNumber, parseParameterStrings, } from 'utils/parseParameter'; interface IFeatureOverviewExecutionProps { parameters: IFeatureStrategyParameters; constraints?: IConstraint[]; strategy: IFeatureStrategy; percentageFill?: string; } const FeatureOverviewExecution = ({ parameters, constraints = [], strategy, }: IFeatureOverviewExecutionProps) => { const { classes: styles } = useStyles(); const { strategies } = useStrategies(); const { uiConfig } = useUiConfig(); if (!parameters) { return null; } const definition = strategies.find(strategyDefinition => { return strategyDefinition.name === strategy.name; }); const renderParameters = () => { if (definition?.editable) return null; return Object.keys(parameters).map(key => { switch (key) { case 'rollout': case 'Rollout': return (

{parameters[key]}% of your base{' '} {constraints.length > 0 ? 'who match constraints' : ''}{' '} is included.

); case 'userIds': case 'UserIds': const users = parseParameterStrings(parameters[key]); return ( ); case 'hostNames': case 'HostNames': const hosts = parseParameterStrings(parameters[key]); return ( ); case 'IPs': const IPs = parseParameterStrings(parameters[key]); return ( ); case 'stickiness': case 'groupId': return null; default: return null; } }); }; const renderCustomStrategy = () => { if (!definition?.editable) return null; return definition?.parameters.map((param: any, index: number) => { const notLastItem = index !== definition?.parameters?.length - 1; switch (param?.type) { case 'list': const values = parseParameterStrings( strategy?.parameters[param.name] ); return ( } /> ); case 'percentage': return (

{strategy?.parameters[param.name]}% of your base{' '} {constraints?.length > 0 ? 'who match constraints' : ''}{' '} is included.

} />
); case 'boolean': return (

{' '} {strategy.parameters[param.name]}

} /> } />
); case 'string': const value = parseParameterString( strategy.parameters[param.name] ); return (

is set to

} /> } /> ); case 'number': const number = parseParameterNumber( strategy.parameters[param.name] ); return (

is set to

} /> } /> ); case 'default': return null; } return null; }); }; return ( <> } /> 0} show={ <> } /> The standard strategy is on for all users.

} /> {renderParameters()} {renderCustomStrategy()} ); }; export default FeatureOverviewExecution;