| Server IP : 109.234.162.214 / Your IP : 216.73.216.112 Web Server : Apache System : Linux servd162214.srv.odns.fr 4.18.0-372.26.1.lve.1.el8.x86_64 #1 SMP Fri Sep 16 14:08:19 EDT 2022 x86_64 User : carpe ( 1178) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /var/softaculous/sitepad/editor/site-data/plugins/pagelayer/js/react/src/components/ |
Upload File : |
import { useState, useEffect } from '@wordpress/element';
import { LabelControl } from './label';
export const MultiSelectControl = (props) => {
const { prop, label, value, setAttributes } = props;
const { name } = prop['c'];
var selection = pagelayer_empty(value) ? [] : value;
if(pagelayer_is_string(selection)){
selection = selection.split(',');
}
const [isSelectorOpen, setIsSelectorOpen] = useState(false);
const option = (val, lang) => {
const itemSelected = selection.includes(val) ? 'selected' : '';
return (
<li
className="pagelayer-elp-multiselect-option"
data-val={val}
data-selected={itemSelected}
onClick={ () => handleOptionClick(val)}
>{ lang }</li>
);
};
const showSelected = () => {
return selection.map((value) => (
<span className="pagelayer-elp-multiselect-selected" data-val={value}>
{prop['list'][value]}{' '}
<span className="pagelayer-elp-multiselect-remove" onClick={() => handleRemove(value)}>
x
</span>
</span>
));
};
const handleRemove = (value) => {
const updatedSelection = selection.filter((val) => val !== value);
setAttributes({[name]: updatedSelection.join(',') });
};
const handleOptionClick = (val) => {
if (selection.includes(val)) {
const updatedSelection = selection.filter((value) => value !== val);
setAttributes({[name]: updatedSelection.join(',') });
} else {
const updatedSelection = [...selection, val];
setAttributes({[name]: updatedSelection.join(',')});
}
};
return (
<div className="components-base-control pagelayer-base-control">
<LabelControl {...props}/>
<div className="pagelayer-elp-multiselect-div pagelayer-elp-pos-rel">
<div
className="pagelayer-elp-multiselect"
onClick={ () => setIsSelectorOpen(!isSelectorOpen) }
>{showSelected()}</div>
{ isSelectorOpen && (
<ul className={`pagelayer-elp-multiselect-ul ${isSelectorOpen ? 'open' : ''}`} name={name}>
{Object.keys(prop['list']).map((key) => option(key, prop['list'][key]))}
</ul>
)}
</div>
</div>
);
}