import React, { useState, useCallback } from 'react' import { Button, Modal, SelectControl } from '@wordpress/components' import { FeedbackSuccess, FeedbackWarning, } from './FeedbackBanner' import { __ } from '@wordpress/i18n' import apiFetch from '@wordpress/api-fetch' export declare interface FeedbackFormProps extends React.HTMLProps {} const FeedbackForm: React.FC = ({ className }) => { const [active, setActive] = useState(false) const [status, setStatus] = useState('') const [category, setCategory] = useState('Problem') const [message, setMessage] = useState('') const [email, setEmail] = useState('') const [submittable, setSubmittable] = useState(false) const handleChange = useCallback(() => { if (active) { // Closing modal - reset form fields setMessage('') setEmail('') setSubmittable(false) setStatus('') } else { validateForm(email, message) } setActive(!active) }, [active, email, message]) const validateForm = useCallback((emailValue: string, messageValue: string) => { const hasValidEmail = emailValue.trim().length > 0 const hasValidMessage = messageValue.trim().length > 0 setSubmittable(hasValidEmail && hasValidMessage) }, []) const handleFeedback = () => { const feedbackData = { category, message: message.trim(), email: email.trim(), } apiFetch({ path: `/posten-bring-checkout/feedback`, method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(feedbackData), }) .then(() => { setStatus('success') setMessage('') setEmail('') setSubmittable(false) }) .catch(() => { setStatus('error') }) } const handleMessageChange = (e: React.ChangeEvent) => { const value = e.target.value setMessage(value) validateForm(email, value) } const handleEmailChange = (e: React.ChangeEvent) => { const value = e.target.value setEmail(value) validateForm(value, message) } const renderPlaceholder = (): string => { switch (category) { case 'Problem': return __('How can we improve?', 'posten-bring-checkout') case 'Feature request': return __('What should we add?', 'posten-bring-checkout') case 'Praise': return __('What did we do correctly?', 'posten-bring-checkout') default: return __('How can we improve?', 'posten-bring-checkout') } } return (
{active && (
setCategory(newCategory)} />