import { useState, FormEventHandler, ChangeEventHandler } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { Button, TextField, Switch, Paper, FormControlLabel, Alert, } from '@mui/material'; import { FileCopy } from '@mui/icons-material'; import { styles as themeStyles } from 'component/common'; import { formatUnknownError } from 'utils/formatUnknownError'; import styles from './CopyFeature.module.scss'; import { trim } from 'component/common/util'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { getTogglePath } from 'utils/routePathHelpers'; import useFeatureApi from 'hooks/api/actions/useFeatureApi/useFeatureApi'; import { useFeature } from 'hooks/api/getters/useFeature/useFeature'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; export const CopyFeatureToggle = () => { const [replaceGroupId, setReplaceGroupId] = useState(true); const [apiError, setApiError] = useState(''); const [nameError, setNameError] = useState(); const [newToggleName, setNewToggleName] = useState(); const { cloneFeatureToggle, validateFeatureToggleName } = useFeatureApi(); const featureId = useRequiredPathParam('featureId'); const projectId = useRequiredPathParam('projectId'); const { feature } = useFeature(projectId, featureId); const navigate = useNavigate(); const setValue: ChangeEventHandler = event => { const value = trim(event.target.value); setNewToggleName(value); }; const toggleReplaceGroupId = () => { setReplaceGroupId(prev => !prev); }; const onValidateName = async () => { try { await validateFeatureToggleName(newToggleName); setNameError(undefined); return true; } catch (error) { setNameError(formatUnknownError(error)); } return false; }; const onSubmit: FormEventHandler = async event => { event.preventDefault(); const isValidName = await onValidateName(); if (!isValidName) { return; } try { await cloneFeatureToggle(projectId, featureId, { name: newToggleName as string, replaceGroupId, }); navigate(getTogglePath(projectId, newToggleName as string)); } catch (error) { setApiError(formatUnknownError(error)); } }; if (!feature || !feature.name) return Toggle not found; return (

Copy {featureId}

{apiError}} />

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

} label="Replace groupId" />
); };