PluginProbe
ElasticPress / 4.2.1
ElasticPress v4.2.1
5.3.5 5.3.4 3.6.5 3.6.6 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.7.0 4.7.1 4.7.2 5.0.0 5.0.1 5.0.2 All 108 releases
elasticpress / assets / js / synonyms / components / editors / SetsEditor.js

SetsEditor.js in ElasticPress 4.2.1, at assets/js/synonyms/components/editors/SetsEditor.js

68 lines 1.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * WordPress dependencies.
3 */
4 import { Fragment, useContext, WPElement } from '@wordpress/element';
5
6 /**
7 * Internal dependencies.
8 */
9 import { Dispatch, State } from '../../context';
10 import LinkedMultiInput from '../shared/LinkedMultiInput';
11
12 /**
13 * Synonyms editor component.
14 *
15 * @param {object} props Props
16 * @param {object[]} props.sets Defined sets (equivalent synonyms).
17 * @returns {WPElement} SetsEditor component
18 */
19 const SetsEditor = ({ sets }) => {
20 const dispatch = useContext(Dispatch);
21 const state = useContext(State);
22 const { setsInputHeading, setsAddButtonText, setsErrorMessage } = window.epSynonyms.i18n;
23
24 /**
25 * Handle click.
26 *
27 * @param {Event} e Event
28 */
29 const handleClick = (e) => {
30 const [lastSet] = state.sets.slice(-1);
31 if (!sets.length || lastSet.synonyms.length) {
32 dispatch({ type: 'ADD_SET' });
33 }
34 e.preventDefault();
35 };
36
37 return (
38 <div className="synonym-sets-editor metabox-holder">
39 <div className="postbox">
40 <h2 className="hndle">
41 <span>{setsInputHeading}</span>
42 </h2>
43 <div className="inside">
44 {sets.map((props) => (
45 <Fragment key={props.id}>
46 <div className="synonym-set-editor">
47 <LinkedMultiInput
48 {...props}
49 updateAction="UPDATE_SET"
50 removeAction="REMOVE_SET"
51 />
52 </div>
53 {!props.valid && (
54 <p className="synonym__validation">{setsErrorMessage}</p>
55 )}
56 </Fragment>
57 ))}
58 <button type="button" className="button button-secondary" onClick={handleClick}>
59 {setsAddButtonText}
60 </button>
61 </div>
62 </div>
63 </div>
64 );
65 };
66
67 export default SetsEditor;
68