1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-03-18 00:19:49 +01:00

Chore: constraint context field legal values improvement ()

Improves how we show context field legal values in the new strategy
configuration.

Refactored makeStyles to styled components 

Closes #
[1-2235](https://linear.app/unleash/issue/1-2235/context-field-ui-in-strategy-configuration)

Before: 

![Screenshot 2024-03-28 at 12 19
12](https://github.com/Unleash/unleash/assets/104830839/43c62cf4-f344-476f-9ef6-75e388fab000)

After:

![Screenshot 2024-03-28 at 13 03
46](https://github.com/Unleash/unleash/assets/104830839/16dd03e0-bc67-402b-ba54-56fa1af136a5)

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
This commit is contained in:
andreas-unleash 2024-03-28 14:15:14 +02:00 committed by GitHub
parent d3847fd8ee
commit 81aff26394
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 62 additions and 41 deletions
frontend/src/component/common/NewConstraintAccordion/ConstraintAccordionEdit/ConstraintAccordionEditBody

View File

@ -1,17 +1,24 @@
import { makeStyles } from 'tss-react/mui'; import { styled } from '@mui/material';
export const useStyles = makeStyles()((theme) => ({ export const StyledContainer = styled('div')(({ theme }) => ({
container: { display: 'inline-block',
display: 'inline-block', wordBreak: 'break-word',
wordBreak: 'break-word', padding: theme.spacing(0.5, 1),
}, background: theme.palette.common.white,
value: { border: `1px solid ${theme.palette.divider}`,
lineHeight: 1.33, borderRadius: theme.shape.borderRadius,
fontSize: theme.fontSizes.smallBody,
}, '&:hover': {
description: { border: `2px solid ${theme.palette.primary.main}`,
lineHeight: 1.33,
fontSize: theme.fontSizes.smallerBody,
color: theme.palette.action.active,
}, },
})); }));
export const StyledValue = styled('div')(({ theme }) => ({
lineHeight: 1.33,
fontSize: theme.fontSizes.smallBody,
}));
export const StyledDescription = styled('div')(({ theme }) => ({
lineHeight: 1.33,
fontSize: theme.fontSizes.smallerBody,
color: theme.palette.action.active,
}));

View File

@ -1,5 +1,9 @@
import type { ILegalValue } from 'interfaces/context'; import type { ILegalValue } from 'interfaces/context';
import { useStyles } from './LegalValueLabel.styles'; import {
StyledContainer,
StyledValue,
StyledDescription,
} from './LegalValueLabel.styles';
import type React from 'react'; import type React from 'react';
import { FormControlLabel } from '@mui/material'; import { FormControlLabel } from '@mui/material';
@ -9,23 +13,21 @@ interface ILegalValueTextProps {
} }
export const LegalValueLabel = ({ legal, control }: ILegalValueTextProps) => { export const LegalValueLabel = ({ legal, control }: ILegalValueTextProps) => {
const { classes: styles } = useStyles();
return ( return (
<div className={styles.container}> <StyledContainer>
<FormControlLabel <FormControlLabel
value={legal.value} value={legal.value}
control={control} control={control}
label={ label={
<> <>
<div className={styles.value}>{legal.value}</div> <StyledValue>{legal.value}</StyledValue>
<div className={styles.description}> <StyledDescription>
{legal.description} {legal.description}
</div> </StyledDescription>
</> </>
} }
/> />
</div> </StyledContainer>
); );
}; };

View File

@ -1,6 +1,6 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import { Alert, Checkbox } from '@mui/material'; import { Alert, Checkbox, styled } from '@mui/material';
import { useThemeStyles } from 'themes/themeStyles'; import { useThemeStyles } from 'themes/themeStyles';
import { ConstraintValueSearch } from 'component/common/ConstraintAccordion/ConstraintValueSearch/ConstraintValueSearch'; import { ConstraintValueSearch } from 'component/common/ConstraintAccordion/ConstraintValueSearch/ConstraintValueSearch';
import { ConstraintFormHeader } from '../ConstraintFormHeader/ConstraintFormHeader'; import { ConstraintFormHeader } from '../ConstraintFormHeader/ConstraintFormHeader';
@ -50,6 +50,17 @@ export const getIllegalValues = (
return constraintValues.filter((value) => deletedValuesSet.has(value)); return constraintValues.filter((value) => deletedValuesSet.has(value));
}; };
const StyledValuesContainer = styled('div')(({ theme }) => ({
display: 'flex',
flexWrap: 'wrap',
gap: theme.spacing(1),
padding: theme.spacing(2),
border: `1px solid ${theme.palette.divider}`,
borderRadius: theme.shape.borderRadiusMedium,
maxHeight: '378px',
overflow: 'auto',
}));
export const RestrictiveLegalValues = ({ export const RestrictiveLegalValues = ({
data, data,
values, values,
@ -136,24 +147,25 @@ export const RestrictiveLegalValues = ({
/> />
} }
/> />
{filteredValues.map((match) => ( <StyledValuesContainer>
<LegalValueLabel {filteredValues.map((match) => (
key={match.value} <LegalValueLabel
legal={match} key={match.value}
control={ legal={match}
<Checkbox control={
checked={Boolean(valuesMap[match.value])} <Checkbox
onChange={() => onChange(match.value)} checked={Boolean(valuesMap[match.value])}
name={match.value} onChange={() => onChange(match.value)}
color='primary' name={match.value}
disabled={deletedLegalValues color='primary'
.map(({ value }) => value) disabled={deletedLegalValues
.includes(match.value)} .map(({ value }) => value)
/> .includes(match.value)}
} />
/> }
))} />
))}
</StyledValuesContainer>
<ConditionallyRender <ConditionallyRender
condition={Boolean(error)} condition={Boolean(error)}
show={<p className={styles.error}>{error}</p>} show={<p className={styles.error}>{error}</p>}