import { Component } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import VariantViewComponent from './variant-view-component'; import styles from './variant.module.scss'; import { Table, TableHead, TableRow, TableCell, TableBody, Button, Typography, } from '@material-ui/core'; import AddVariant from './AddVariant/AddVariant'; import MySelect from '../../common/select'; import ConditionallyRender from '../../common/ConditionallyRender/ConditionallyRender'; const initialState = { showDialog: false, editVariant: undefined, editIndex: -1, }; class UpdateVariantComponent extends Component { constructor(props) { super(props); this.state = { ...initialState }; } closeDialog = () => { this.setState({ ...initialState }); }; openAddVariant = e => { e.preventDefault(); this.setState({ showDialog: true, editVariant: undefined, editIndex: undefined, title: 'Add variant', }); }; openEditVariant = (e, index, variant) => { e.preventDefault(); if (this.props.editable) { this.setState({ showDialog: true, editVariant: variant, editIndex: index, title: 'Edit variant', }); } }; validateName = name => { if (!name) { return { name: 'Name is required' }; } }; onRemoveVariant = (e, index) => { e.preventDefault(); try { this.props.removeVariant(index); } catch (e) { console.log('An exception was caught.'); } }; renderVariant = (variant, index) => ( this.openEditVariant(e, index, variant)} removeVariant={e => this.onRemoveVariant(e, index)} editable={this.props.editable} /> ); renderVariants = variants => ( Variant name Weight Weight Type {variants.map(this.renderVariant)}
); renderStickiness = variants => { const { updateStickiness, stickinessOptions } = this.props; if (!variants || variants.length < 2) { return null; } const value = variants[0].stickiness || 'default'; const options = stickinessOptions.map(c => ({ key: c, label: c })); // guard on stickiness being disabled for context field. if (!stickinessOptions.includes(value)) { options.push({ key: value, label: value }); } const onChange = event => updateStickiness(event.target.value); return (
   By overriding the stickiness you can control which parameter you want to be used in order to ensure consistent traffic allocation across variants.{' '} Read more
); }; render() { const { showDialog, editVariant, editIndex, title } = this.state; const { variants, addVariant, updateVariant } = this.props; const saveVariant = editVariant ? updateVariant.bind(null, editIndex) : addVariant; return (
Variants allows you to return a variant object if the feature toggle is considered enabled for the current request. When using variants you should use the{' '} getVariant() method in the Client SDK. 0} show={this.renderVariants(variants)} elseShow={

No variants defined.

} />
{this.renderStickiness(variants)} } />
); } } UpdateVariantComponent.propTypes = { variants: PropTypes.array.isRequired, addVariant: PropTypes.func.isRequired, removeVariant: PropTypes.func.isRequired, updateVariant: PropTypes.func.isRequired, updateStickiness: PropTypes.func.isRequired, editable: PropTypes.bool.isRequired, stickinessOptions: PropTypes.array, }; export default UpdateVariantComponent;