From c1bb9051467cb3f8b72c8bed2fead2768ecb55b9 Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Wed, 16 Apr 2025 09:36:29 +0200 Subject: [PATCH] Fix type issues (#9745) --- .../FeatureStrategyConstraints/ValueList.tsx | 87 ++++++++++++++++--- 1 file changed, 76 insertions(+), 11 deletions(-) diff --git a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyConstraints/ValueList.tsx b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyConstraints/ValueList.tsx index f0a94350cc..c4ce259b04 100644 --- a/frontend/src/component/feature/FeatureStrategy/FeatureStrategyConstraints/ValueList.tsx +++ b/frontend/src/component/feature/FeatureStrategy/FeatureStrategyConstraints/ValueList.tsx @@ -1,7 +1,13 @@ import Add from '@mui/icons-material/Add'; import Clear from '@mui/icons-material/Clear'; -import { Chip, type ChipProps, styled } from '@mui/material'; -import { type FC, forwardRef, useRef } from 'react'; +import { Button, Chip, type ChipProps, Popover, styled } from '@mui/material'; +import { + type FC, + forwardRef, + useImperativeHandle, + useRef, + useState, +} from 'react'; const ValueListWrapper = styled('div')(({ theme }) => ({ display: 'flex', @@ -44,18 +50,82 @@ const ValueChip = styled(ValueChipBase)(({ theme }) => ({ }, })); -const AddValuesButton = styled(ValueChipBase)(({ theme }) => ({ +const AddValuesButton = styled('button')(({ theme }) => ({ color: theme.palette.primary.main, svg: { fill: theme.palette.primary.main, height: theme.fontSizes.smallerBody, width: theme.fontSizes.smallerBody, }, - ':hover': { + border: 'none', + borderRadius: theme.shape.borderRadiusExtraLarge, + display: 'flex', + flexFlow: 'row nowrap', + whiteSpace: 'nowrap', + gap: theme.spacing(0.25), + alignItems: 'center', + paddingInline: theme.spacing(1.5), + height: theme.spacing(3), + transition: 'all 0.3s ease', + outline: `1px solid #0000`, + background: theme.palette.background.elevation1, + ':hover, :focus-visible': { + background: theme.palette.background.elevation1, outlineColor: theme.palette.secondary.dark, }, })); +const StyledPopover = styled(Popover)(({ theme }) => ({ + '& .MuiPaper-root': { + borderRadius: theme.shape.borderRadiusLarge, + border: `1px solid ${theme.palette.divider}`, + padding: theme.spacing(1), + }, +})); + +const AddValues = forwardRef((props, ref) => { + const [open, setOpen] = useState(false); + const positioningRef = useRef(null); + useImperativeHandle(ref, () => positioningRef.current as HTMLButtonElement); + + return ( + <> + setOpen(true)} + type='button' + > + + Add values + + setOpen(false)} + anchorOrigin={{ + vertical: 'bottom', + horizontal: 'center', + }} + transformOrigin={{ + vertical: 'top', + horizontal: 'center', + }} + > +
e.preventDefault()}> + + +
+
+ + ); +}); + type Props = { values: string[] | undefined; removeValue: (index: number) => void; @@ -65,7 +135,7 @@ export const ValueList: FC = ({ values = [], removeValue }) => { const constraintElementRefs: React.MutableRefObject< (HTMLDivElement | null)[] > = useRef([]); - const addValuesButtonRef = useRef(null); + const addValuesButtonRef = useRef(null); const nextFocusTarget = (deletedIndex: number) => { if (deletedIndex === values.length - 1) { @@ -98,12 +168,7 @@ export const ValueList: FC = ({ values = [], removeValue }) => { ))} - console.log('adding values')} - icon={} - /> + ); };