1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-27 11:02:16 +01:00
unleash.unleash/frontend/src/component/strategies/StrategyView/StrategyDetails/StrategyDetails.tsx
olav 35262e404b refactor: clean up strategy parameter types (#944)
* refactor: fix splash page button background color

* refactor: regenerate OpenAPI client

* refactor: clean up strategy parameter types

* refactor: remove index signature from IConstraint

* refactor: fix never-seen status in features list
2022-05-04 15:16:34 +02:00

98 lines
3.3 KiB
TypeScript

import {
Grid,
List,
ListItem,
ListItemAvatar,
ListItemText,
Tooltip,
} from '@mui/material';
import { Add, RadioButtonChecked } from '@mui/icons-material';
import { AppsLinkList } from 'component/common';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import styles from '../../strategies.module.scss';
import { TogglesLinkList } from 'component/strategies/TogglesLinkList/TogglesLinkList';
import { IStrategy, IStrategyParameter } from 'interfaces/strategy';
import { IApplication } from 'interfaces/application';
import { FeatureSchema } from 'openapi';
interface IStrategyDetailsProps {
strategy: IStrategy;
applications: IApplication[];
toggles: FeatureSchema[];
}
export const StrategyDetails = ({
strategy,
applications,
toggles,
}: IStrategyDetailsProps) => {
const { parameters = [] } = strategy;
const renderParameters = (params: IStrategyParameter[]) => {
if (params.length > 0) {
return params.map(({ name, type, description, required }, i) => (
<ListItem key={`${name}-${i}`}>
<ConditionallyRender
condition={required}
show={
<ListItemAvatar>
<Tooltip title="Required parameter">
<Add aria-hidden={false} />
</Tooltip>
</ListItemAvatar>
}
elseShow={
<ListItemAvatar>
<Tooltip title="Optional parameter">
<RadioButtonChecked aria-hidden={false} />
</Tooltip>
</ListItemAvatar>
}
/>
<ListItemText
primary={
<div>
{name} <small>({type})</small>
</div>
}
secondary={description}
/>
</ListItem>
));
} else {
return <ListItem>No params</ListItem>;
}
};
return (
<div className={styles.listcontainer}>
<Grid container>
<ConditionallyRender
condition={strategy.deprecated}
show={
<Grid item>
<h5 style={{ color: '#ff0000' }}>Deprecated</h5>
</Grid>
}
/>
<Grid item sm={12} md={12}>
<h6>Parameters</h6>
<hr />
<List>{renderParameters(parameters)}</List>
</Grid>
<Grid item sm={12} md={6}>
<h6>Applications using this strategy</h6>
<hr />
<AppsLinkList apps={applications} />
</Grid>
<Grid item sm={12} md={6}>
<h6>Toggles using this strategy</h6>
<hr />
<TogglesLinkList toggles={toggles} />
</Grid>
</Grid>
</div>
);
};