1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-04 01:18:20 +02:00
unleash.unleash/frontend/src/component/feature/FeatureStrategy/FeatureStrategySegment/FeatureStrategySegment.tsx
andreas-unleash c3e9b49e12 Fix/constraint card adjustments (#1154)
* style fixes

* Constraint card styling adjustments

* Style Fixes

* lint and fmt

* lint and fmt

* Changed the way the expandable property is evaluated to use the text.length

Co-authored-by: Tymoteusz Czech <tymek+gpg@getunleash.ai>
2022-07-27 13:50:47 +02:00

73 lines
2.6 KiB
TypeScript

import React from 'react';
import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
import { ISegment } from 'interfaces/segment';
import {
AutocompleteBox,
IAutocompleteBoxOption,
} from 'component/common/AutocompleteBox/AutocompleteBox';
import { FeatureStrategySegmentList } from 'component/feature/FeatureStrategy/FeatureStrategySegment/FeatureStrategySegmentList';
import { useStyles } from 'component/feature/FeatureStrategy/FeatureStrategySegment/FeatureStrategySegment.styles';
import { SegmentDocsStrategyWarning } from 'component/segments/SegmentDocs/SegmentDocs';
import { useSegmentLimits } from 'hooks/api/getters/useSegmentLimits/useSegmentLimits';
import { Divider } from '@mui/material';
interface IFeatureStrategySegmentProps {
segments: ISegment[];
setSegments: React.Dispatch<React.SetStateAction<ISegment[]>>;
}
export const FeatureStrategySegment = ({
segments: selectedSegments,
setSegments: setSelectedSegments,
}: IFeatureStrategySegmentProps) => {
const { segments: allSegments } = useSegments();
const { classes: styles } = useStyles();
const { strategySegmentsLimit } = useSegmentLimits();
const atStrategySegmentsLimit: boolean = Boolean(
strategySegmentsLimit &&
selectedSegments.length >= strategySegmentsLimit
);
if (!allSegments || allSegments.length === 0) {
return null;
}
const unusedSegments = allSegments.filter(segment => {
return !selectedSegments.find(selected => selected.id === segment.id);
});
const autocompleteOptions = unusedSegments.map(segment => ({
value: String(segment.id),
label: segment.name,
}));
const onChange = ([option]: IAutocompleteBoxOption[]) => {
const selectedSegment = allSegments.find(segment => {
return String(segment.id) === option.value;
});
if (selectedSegment) {
setSelectedSegments(prev => [...prev, selectedSegment]);
}
};
return (
<>
<h3 className={styles.title}>Segmentation</h3>
{atStrategySegmentsLimit && <SegmentDocsStrategyWarning />}
<p>Add a predefined segment to constrain this feature toggle:</p>
<AutocompleteBox
label="Select segments"
options={autocompleteOptions}
onChange={onChange}
disabled={atStrategySegmentsLimit}
/>
<FeatureStrategySegmentList
segments={selectedSegments}
setSegments={setSelectedSegments}
/>
<Divider className={styles.divider} />
</>
);
};