/** * WordPress dependencies */ import apiFetch from '@safe-wordpress/api-fetch'; import { Button } from '@safe-wordpress/components'; import { useState } from '@safe-wordpress/element'; import { _x } from '@safe-wordpress/i18n'; import { addQueryArgs } from '@safe-wordpress/url'; /** * External dependencies */ import { ConfirmationDialog } from '@nab/components'; import type { AlternativeId, ExperimentId } from '@nab/types'; export type DuplicateControlWidgetsButtonProps = { readonly experiment: ExperimentId; readonly alternative: AlternativeId; }; export const DuplicateControlWidgetsButton = ( { experiment, alternative, }: DuplicateControlWidgetsButtonProps ): JSX.Element => { const [ isWorking, markAsWorking ] = useState( false ); const [ isDialogVisible, openDialog ] = useState( false ); const duplicateWidgets = () => { if ( isWorking ) { return; } markAsWorking( true ); void apiFetch( { path: addQueryArgs( '/nab/v1/widget/duplicate-control', { experiment, alternative, } ), method: 'PUT', } ).finally( () => window.location.reload() ); }; const confirmationLabel = isWorking ? _x( 'Duplicating…', 'text (widgets)', 'nelio-ab-testing' ) : _x( 'Duplicate', 'command', 'nelio-ab-testing' ); return ( <> openDialog( false ) } onConfirm={ duplicateWidgets } /> ); };