import React, { useRef, useState, useContext } from 'react'; import { Button } from '@material-ui/core'; import { Add } from '@material-ui/icons'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import PermissionButton from 'component/common/PermissionButton/PermissionButton'; import { SidebarModal } from 'component/common/SidebarModal/SidebarModal'; import { CreateUnleashContext } from 'component/context/CreateUnleashContext/CreateUnleashContext'; import { CREATE_CONTEXT_FIELD, CREATE_SEGMENT, UPDATE_SEGMENT, } from 'component/providers/AccessProvider/permissions'; import useUnleashContext from 'hooks/api/getters/useUnleashContext/useUnleashContext'; import { IConstraint } from 'interfaces/strategy'; import { useHistory } from 'react-router-dom'; import { useStyles } from 'component/segments/SegmentFormStepTwo/SegmentFormStepTwo.styles'; import { ConstraintAccordionList, IConstraintAccordionListRef, } from 'component/common/ConstraintAccordion/ConstraintAccordionList/ConstraintAccordionList'; import { SegmentFormStep, SegmentFormMode } from '../SegmentForm/SegmentForm'; import { AutocompleteBox, IAutocompleteBoxOption, } from 'component/common/AutocompleteBox/AutocompleteBox'; import { SegmentDocsValuesWarning, SegmentDocsValuesError, } from 'component/segments/SegmentDocs/SegmentDocs'; import { useSegmentValuesCount } from 'component/segments/hooks/useSegmentValuesCount'; import { SEGMENT_VALUES_LIMIT } from 'utils/segmentLimits'; import AccessContext from 'contexts/AccessContext'; interface ISegmentFormPartTwoProps { constraints: IConstraint[]; setConstraints: React.Dispatch>; setCurrentStep: React.Dispatch>; mode: SegmentFormMode; } export const SegmentFormStepTwo: React.FC = ({ children, constraints, setConstraints, setCurrentStep, mode, }) => { const constraintsAccordionListRef = useRef(); const history = useHistory(); const styles = useStyles(); const { hasAccess } = useContext(AccessContext); const { context = [] } = useUnleashContext(); const [open, setOpen] = useState(false); const segmentValuesCount = useSegmentValuesCount(constraints); const overSegmentValuesLimit = segmentValuesCount > SEGMENT_VALUES_LIMIT; const modePermission = mode === 'create' ? CREATE_SEGMENT : UPDATE_SEGMENT; const autocompleteOptions = context.map(c => ({ value: c.name, label: c.name, })); const onChange = ([option]: IAutocompleteBoxOption[]) => { constraintsAccordionListRef.current?.addConstraint?.(option.value); }; return ( <>

Select the context fields you want to include in the segment.

Use a predefined context field:

...or add a new context field:

setOpen(false)} open={open} > setOpen(false)} onCancel={() => setOpen(false)} modal /> } onClick={() => setOpen(true)} > Add context field {overSegmentValuesLimit && (
)}

Start adding context fields by selecting an option from above, or you can create a new context field and use it right away

} />
{children}
); };