import React, { useState, useRef, useEffect } from 'react'; import PropTypes from 'prop-types'; import { Link, useParams } from 'react-router-dom'; import { Button, TextField, Switch, Paper, FormControlLabel, } from '@material-ui/core'; import { FileCopy } from '@material-ui/icons'; import { styles as commonStyles } from '../../../common'; import styles from './CopyFeature.module.scss'; import { trim } from '../../../common/util'; import ConditionallyRender from '../../../common/ConditionallyRender'; import { Alert } from '@material-ui/lab'; import { getTogglePath } from '../../../../utils/route-path-helpers'; import useFeatureApi from '../../../../hooks/api/actions/useFeatureApi/useFeatureApi'; import useFeature from '../../../../hooks/api/getters/useFeature/useFeature'; import useUiConfig from '../../../../hooks/api/getters/useUiConfig/useUiConfig'; const CopyFeature = props => { // static displayName = `AddFeatureComponent-${getDisplayName(Component)}`; const [replaceGroupId, setReplaceGroupId] = useState(true); const [apiError, setApiError] = useState(''); const [nameError, setNameError] = useState(undefined); const [newToggleName, setNewToggleName] = useState(); const { cloneFeatureToggle } = useFeatureApi(); const inputRef = useRef(); const { name: copyToggleName, id: projectId } = useParams(); const { feature } = useFeature(projectId, copyToggleName); const { uiConfig } = useUiConfig(); useEffect(() => { inputRef.current?.focus(); }, []); const setValue = evt => { const value = trim(evt.target.value); setNewToggleName(value); }; const toggleReplaceGroupId = () => { setReplaceGroupId(prev => !prev); }; const onValidateName = async () => { try { await props.validateName(newToggleName); setNameError(undefined); } catch (err) { setNameError(err.message); } }; const onSubmit = async evt => { evt.preventDefault(); if (nameError) { return; } try { await cloneFeatureToggle(projectId, copyToggleName, { name: newToggleName, replaceGroupId, }); props.history.push( getTogglePath(projectId, newToggleName, uiConfig.flags.E) ); } catch (e) { setApiError(e.toString()); } }; if (!feature || !feature.name) return Toggle not found; return (

Copy {copyToggleName}

{apiError}} />

You are about to create a new feature toggle by cloning the configuration of feature toggle  {copyToggleName} . You must give the new feature toggle a unique name before you can proceed.

} label="Replace groupId" />
); }; CopyFeature.propTypes = { history: PropTypes.object.isRequired, validateName: PropTypes.func.isRequired, }; export default CopyFeature;