import AsyncSelect from 'react-select/async';
import { __ } from '@wordpress/i18n';
import * as cmplz_api from "../utils/api";
import {useState, useEffect, useRef, memo} from "@wordpress/element";
import {useUpdateEffect} from 'react-use';
import Icon from "../utils/Icon";
import useFields from "./Fields/FieldsData";
import RadioGroup from './Inputs/RadioGroup';
const DocumentControl = ({id, value, options, defaultValue, disabled}) => {
const [pageId, setPageId] = useState(false);
const [pageUrl, setPageUrl] = useState('');
const [pages, setPages] = useState([]);
const [pagesListLoaded, setPagesListLoaded] = useState(false);
const [pageUrlLoaded, setPageUrlLoaded] = useState(false);
const [timer, setTimer] = useState(null)
const currentType = useRef(value);
const {updateField, setChangedField} = useFields();
const loadSubFields = (onLoad) => {
let loadData = (currentType.current !== value) || onLoad;
if ( value==='custom' && !pagesListLoaded ) {
currentType.current = value
if (loadData) loadOptions(false);
}
if ( value==='url' && !pageUrlLoaded) {
let data = {};
currentType.current = value
data.type = id;
cmplz_api.doAction('get_custom_legal_document_url', data).then( ( response ) => {
setPageUrl(response.pageUrl);
setPageUrlLoaded(true);
});
}
}
useEffect( () => {
let values = options.map(option => option.value);
if ( !values.includes(value) ) {
//we need to save it in the page props, otherwise it's not seen by the conditions validator
updateField(id, defaultValue);
}
loadSubFields(true);
}, [])
useUpdateEffect( () => {
loadSubFields(false);
})
const loadOptions = (search) => {
let data = {};
data.type = id;
data.search = search;
return cmplz_api.doAction('get_pages_list', data).then( ( response ) => {
//get option from pages pages list
let selectedPage = response.pages.filter(function (element) {
return element.value === response.pageId;
});
setPageId(selectedPage);
setPagesListLoaded(true);
setPages(response.pages);
return response.pages;
});
}
const onChangeHandler = (value) => {
updateField(id, value);
setChangedField(id, value);
}
const promisePages = (inputValue) =>
new Promise( (resolve) => {
setTimeout(() => {
resolve(loadOptions(inputValue));
}, 1000);
});
const onChangeSelectHandler = (element) => {
let data = {};
data.pageId = element.value;
data.type = id;
setPageId(element);
cmplz_api.doAction('update_custom_legal_document_id', data).then( ( response ) => {});
}
/*
* Only call api if user stops typing, after 500 ms.
*/
const onChangeUrlHandler = (e) => {
let data = {};
let value = e.target.value;
data.pageUrl = value;
data.type = id;
setPageUrl(value);
clearTimeout(timer)
const newTimer = setTimeout(() => {
cmplz_api.doAction('update_custom_legal_document_url', data).then( ( response ) => {});
}, 500)
setTimer(newTimer)
}
const formattedOptions = {};
for (const key in options) {
const item = options[key];
formattedOptions[item.value] = item.label;
}
return (
<>