import React, { useEffect, useState, useCallback } from 'react'; import { classNames } from 'primereact/utils'; import { __ } from '@wordpress/i18n'; import { head, isEmpty } from 'ramda'; import { diff } from 'deep-object-diff'; // components import { Button } from 'primereact/button'; import { Dropdown } from 'primereact/dropdown'; import { Accordion, AccordionTab } from 'primereact/accordion'; import { Dialog } from 'primereact/dialog'; import { InputSwitch } from 'primereact/inputswitch'; import renderHtmlContent from '../../helpers/renderHtmlContent'; import { Editor } from 'primereact/editor'; import DOMPurify from 'dompurify'; const FormFieldRepeaterFaq = ({ data, setDataFn, fieldName, options = [], errors, register, label, config = {}, disabled = false }) => { const [stateFieldData, setStateFieldData] = useState([]); const [stateOptionsData, setStateOptionsData] = useState([]); const [question, setQuestion] = useState(''); const [answer, setAnswer] = useState(''); const [title, setTitle] = useState(''); const [isVisible, setIsVisible] = useState(false); const [editDataIndex, setEditDataIndex] = useState(null); const [isVisibleEditDialog, setIsVisibleEditDialog] = useState(false); const removeItem = (index) => { const newData = stateFieldData.toSpliced(index, 1); setStateFieldData(newData); } const selectItem = (e) => { const targetedOption = head(stateOptionsData.filter(o => o.value === e.value)); if (targetedOption) { setStateFieldData([...stateFieldData, { ...targetedOption, isVisible: true }]); } } const addNewItem = () => { const newItem = { id: null, lookUpDataId: null, title: '', value: '', response: '', isVisible: true }; setStateFieldData([...stateFieldData, newItem]); } const editItem = (e, index) => { e.stopPropagation(); setTitle(stateFieldData[index].title); setQuestion(stateFieldData[index].value); setAnswer(stateFieldData[index].response); setIsVisible(stateFieldData[index].isVisible); setEditDataIndex(index); setIsVisibleEditDialog(true); } const hideEditDialog = () => { setIsVisibleEditDialog(false); setQuestion(''); setAnswer(''); setTitle(''); setIsVisible(false); setEditDataIndex(null); } const onChangeEditItem = (value, key) => { if (key === 'title') { setTitle(value); } else if (key === 'value') { setQuestion(value); } else if (key === 'response') { setAnswer(value) } else { setIsVisible(value); } } const saveEditDialog = () => { const newData = stateFieldData.map((o, i) => { if (i === editDataIndex) { o.title = title; o.value = question; o.response = answer; o.isVisible = isVisible; return o } else { return o; } }); setStateFieldData(newData); setIsVisibleEditDialog(false); setQuestion(''); setAnswer(''); setTitle(''); setIsVisible(false); setEditDataIndex(null); } const headerEditDialog = () => { return {__('Aggiungi/modifica FAQ', 'gepafin')} } const footerEditDialog = () => { return
} const usedExistingValues = useCallback(() => { return stateFieldData .filter(o => o.lookUpDataId) .map(o => o.title) }, [stateFieldData]); const renderHeader = () => { return ( ); }; const header = renderHeader(); const faqOptionTemplate = (option) => { return DOMPurify.sanitize(option.title, {ALLOWED_TAGS: ['#text']}); } useEffect(() => { const storeFieldData = data ?? []; setStateFieldData(storeFieldData); setStateOptionsData([...options, ...storeFieldData]); register(fieldName, config) }, []); useEffect(() => { const diffData = diff(data, stateFieldData); if (!isEmpty(diffData)) { const storeFieldData = data ?? []; setStateFieldData(storeFieldData); } }, [data]); useEffect(() => { setStateOptionsData([...options]); }, [options]); useEffect(() => { setDataFn(fieldName, stateFieldData, { shouldValidate: true }); }, [stateFieldData]); return (
{stateFieldData.map((o, i) =>
{renderHtmlContent(o.value)}
{o.isVisible ? : null} {!o.isVisible ? : null}
} > {renderHtmlContent(o.response)} )}
onChangeEditItem(e.htmlValue, 'title')} style={{ height: 80 * 1 }} />
onChangeEditItem(e.htmlValue, 'value')} style={{ height: 80 * 1 }} />
onChangeEditItem(e.htmlValue, 'response')} style={{ height: 80 * 2 }} />
onChangeEditItem(e.value, 'isVisible')}/>
) } export default FormFieldRepeaterFaq;