File "confirmation-popover.js"

Full Path: /home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/wp-content/plugins/surerank/src/global/components/confirmation-popover/confirmation-popover.js
File size: 1.76 KB
MIME-type: text/x-java
Charset: utf-8

import { __ } from '@wordpress/i18n';
import { cloneElement, useState } from '@wordpress/element';
import { Button } from '@bsf/force-ui';
import { SeoPopupTooltip } from '@AdminComponents/tooltip';
import { cn } from '@/functions/utils';

const ConfirmationPopover = ( {
	onConfirm,
	confirmText = __( 'Remove', 'surerank' ),
	cancelText = __( 'Cancel', 'surerank' ),
	children,
	className,
	...props
} ) => {
	const [ isOpen, setIsOpen ] = useState( false );

	const preventDefault = ( event ) => {
		event.preventDefault();
		event.stopPropagation();
	};

	const handleConfirm = ( event ) => {
		preventDefault( event );
		onConfirm();
		setIsOpen( false );
	};

	const handleCancel = ( event ) => {
		preventDefault( event );
		setIsOpen( false );
	};

	const popoverContent = (
		<div className="flex gap-2 items-center">
			<Button
				size="xs"
				variant="outline"
				onClick={ handleCancel }
				aria-label={ __( 'Cancel', 'surerank' ) }
			>
				{ cancelText }
			</Button>
			<Button
				size="xs"
				className="focus:[box-shadow:none] bg-button-danger hover:bg-button-danger-hover outline-button-danger hover:outline-button-danger-hover"
				onClick={ handleConfirm }
				destructive
				aria-label={ __( 'Confirm', 'surerank' ) }
			>
				{ confirmText }
			</Button>
		</div>
	);

	return (
		<SeoPopupTooltip
			className={ cn(
				'w-fit p-1.5 rounded shadow-md border border-solid border-border-subtle [&>svg]:fill-border-subtle',
				className
			) }
			content={ popoverContent }
			open={ isOpen }
			setOpen={ setIsOpen }
			variant="light"
			arrow
			{ ...props }
		>
			{ cloneElement( children, {
				onClick: ( event ) => {
					preventDefault( event );
					setIsOpen( ( prev ) => ! prev );
				},
			} ) }
		</SeoPopupTooltip>
	);
};

export default ConfirmationPopover;