Viewing File: /home/fshjisk/myqueen/wp-content/plugins/woo-stripe-payment/assets/js/admin/feedback.js

import {useState, useCallback, useEffect, render} from '@wordpress/element';
import {Modal, Button, RadioControl, TextareaControl} from '@wordpress/components';
import apiFetch from '@wordpress/api-fetch';

window.addEventListener('load', () => {
    const app = document.createElement('div');
    app.id = 'stripe-app';
    document.getElementById('wpbody')?.append(app);
    const el = document.getElementById('deactivate-woo-stripe-payment');
    render(<App el={el}/>, document.getElementById('stripe-app'));
});

const App = ({el}) => {
    const [open, setOpen] = useState(false);
    const openModal = useCallback((e) => {
        e.preventDefault();
        setOpen(true)
    }, []);
    useEffect(() => {
        el.addEventListener('click', openModal);
        return () => el.removeEventListener('click', openModal);
    }, [openModal]);
    const submit = () => {
        el.removeEventListener('click', openModal);
        el.click();
        setOpen(false);
    }
    return <FeedbackModal submit={submit} deactivateLink={el.href} open={open} setOpen={setOpen} data={stripeFeedbackParams}/>
}

const FeedbackModal = ({deactivateLink, open, setOpen, data, submit}) => {
    const [reasonCode, setReasonCode] = useState(false);
    const [reasonText, setReasonText] = useState('');
    const [processing, setProcessing] = useState();
    const [placeholder, setPlaceHolder] = useState('');
    const onClose = () => setOpen(false);
    const options = Object.keys(data.options).map(id => ({
        label: data.options[id],
        value: id
    }));
    const onSubmit = async () => {
        setProcessing(true);
        try {
            await apiFetch({
                method: 'POST',
                url: data.route,
                data: {
                    reason_code: reasonCode,
                    reason_text: reasonText
                }
            })
        } catch (error) {

        } finally {
            setProcessing(false);
            submit();
        }
    }

    useEffect(() => {
        if (data.placeholders.hasOwnProperty(reasonCode)) {
            setPlaceHolder(data.placeholders[reasonCode]);
        } else {
            setPlaceHolder('');
        }
    }, [reasonCode]);

    const props = {
        title: data.title,
        isDismissible: true,
        focusOnMount: true,
        isFullScreen: false,
        onRequestClose: onClose
    }
    if (open) {
        return (
            <Modal {...props}>
                <div className='stripe-modal-content'>
                    <p>{data.description}</p>
                    <div className='options-container'>
                        <RadioControl selected={reasonCode} options={options} onChange={setReasonCode}/>
                    </div>
                    <div className='stripe-deactivation__text'>
                        <TextareaControl placeholder={placeholder} label={data.reasonTextLabel} value={reasonText} onChange={setReasonText}/>
                    </div>
                </div>
                <div className='stripe-modal-actions'>
                    <Button variant='primary' onClick={onSubmit} isBusy={processing} disabled={processing}>{data.buttons.primary}</Button>
                    <Button href={deactivateLink} className='stripe-skip-deactivate' variant='tertiary' onClick={onClose}>{data.buttons.secondary}</Button>
                </div>
            </Modal>
        )
    }
    return null;
}
Back to Directory File Manager