import { useState, useRef, useEffect } from 'react'; import { Link, useHistory, 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'; export const CopyFeatureToggle = () => { const [replaceGroupId, setReplaceGroupId] = useState(true); const [apiError, setApiError] = useState(''); const [nameError, setNameError] = useState(undefined); const [newToggleName, setNewToggleName] = useState(); const { cloneFeatureToggle, validateFeatureToggleName } = useFeatureApi(); const inputRef = useRef(); const { name: copyToggleName, id: projectId } = useParams(); const { feature } = useFeature(projectId, copyToggleName); const { uiConfig } = useUiConfig(); const history = useHistory(); 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 validateFeatureToggleName(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, }); 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" />
); };