import { Fragment } from 'react'; import { IConstraint, IFeatureStrategy, IParameter, } from '../../../../../interfaces/strategy'; import ConditionallyRender from '../../../../common/ConditionallyRender'; import PercentageCircle from '../../../../common/PercentageCircle/PercentageCircle'; import FeatureStrategiesSeparator from '../FeatureStrategiesEnvironments/FeatureStrategiesSeparator/FeatureStrategiesSeparator'; import { useStyles } from './FeatureStrategyExecution.styles'; import FeatureStrategyExecutionChips from './FeatureStrategyExecutionChips/FeatureStrategyExecutionChips'; import useStrategies from '../../../../../hooks/api/getters/useStrategies/useStrategies'; import Constraint from '../../../../common/Constraint/Constraint'; interface IFeatureStrategiesExecutionProps { parameters: IParameter; constraints?: IConstraint[]; strategy: IFeatureStrategy; percentageFill?: string; } const FeatureStrategyExecution = ({ parameters, constraints = [], strategy, }: IFeatureStrategiesExecutionProps) => { const styles = useStyles(); const { strategies } = useStrategies(); if (!parameters) return null; const definition = strategies.find(strategyDefinition => { return strategyDefinition.name === strategy.name; }); const renderConstraints = () => { return constraints.map((constraint, index) => { if (index !== constraints.length - 1) { return ( ); } return ( ); }); }; const renderParameters = () => { if (definition?.editable) return null; return Object.keys(parameters).map((key, index) => { 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 = parameters[key] .split(',') .filter((userId: string) => userId); return ( ); case 'hostNames': case 'HostNames': const hosts = parameters[key] .split(',') .filter((hosts: string) => hosts); return ( ); case 'IPs': const IPs = parameters[key] .split(',') .filter((hosts: string) => hosts); 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 = strategy?.parameters[param.name] .split(',') .filter((val: string) => val); return ( } /> ); case 'percentage': return (

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

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

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

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

{param.name} is set to {numValue}

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

{param.name} is set to {value}

} /> } /> ); case 'default': return null; } return null; }); }; return ( <> 0} show={ <>

Enabled for match:

{renderConstraints()}
} /> The standard strategy is on for all users.

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