PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.25
Advanced Ads – Ad Manager & AdSense v2.0.25
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / assets / src / oneclick / Select2.jsx
advanced-ads / assets / src / oneclick Last commit date
store 1 year ago AddonRow.jsx 1 year ago App.jsx 1 year ago Metabox.jsx 1 year ago Modal.jsx 1 year ago Notices.jsx 1 year ago Select2.jsx 1 year ago Settings.jsx 1 year ago Step1.jsx 1 year ago Step2.jsx 1 year ago Step3.jsx 1 year ago StepWrapper.jsx 1 year ago main.js 1 year ago
Select2.jsx
136 lines
1 /**
2 * External Dependencies
3 */
4 import 'select2';
5 import jQuery from 'jquery';
6 import shallowEqualFuzzy from 'shallow-equal-fuzzy';
7
8 /**
9 * WordPress Dependencies
10 */
11 import { useEffect, useRef, useState, forwardRef } from '@wordpress/element';
12
13 const namespace = 'react-select2';
14
15 const Select2 = forwardRef((props, ref) => {
16 const {
17 defaultValue = '',
18 value: propValue,
19 data = [],
20 events = [
21 [`change.${namespace}`, 'onChange'],
22 [`select2:open.${namespace}`, 'onOpen'],
23 [`select2:close.${namespace}`, 'onClose'],
24 [`select2:select.${namespace}`, 'onSelect'],
25 [`select2:unselect.${namespace}`, 'onUnselect'],
26 ],
27 options = {},
28 multiple = false,
29 onChange,
30 onOpen,
31 onClose,
32 onSelect,
33 onUnselect,
34 ...rest
35 } = props;
36
37 const selectRef = ref || useRef(null);
38 const [internalValue, setInternalValue] = useState(propValue || defaultValue);
39
40 useEffect(() => {
41 const $el = jQuery(selectRef.current);
42
43 // Initialize select2
44 $el.select2(prepareOptions(options));
45 attachEventHandlers($el);
46
47 // Set initial value
48 updateSelect2Value($el, internalValue);
49
50 return () => {
51 // Cleanup: destroy select2 instance
52 detachEventHandlers($el);
53 $el.select2('destroy');
54 };
55 }, []);
56
57 useEffect(() => {
58 const $el = jQuery(selectRef.current);
59
60 // Update select2 options if they change
61 $el.select2(prepareOptions(options));
62
63 // Update value if propValue changes
64 if (propValue !== undefined && !fuzzyValuesEqual($el.val(), propValue)) {
65 updateSelect2Value($el, propValue);
66 }
67 }, [propValue, options]);
68
69 const prepareOptions = options => {
70 const opt = { ...options };
71 if (typeof opt.dropdownParent === 'string') {
72 opt.dropdownParent = jQuery(opt.dropdownParent);
73 }
74 return opt;
75 };
76
77 const attachEventHandlers = $el => {
78 const handlers = { onChange, onOpen, onClose, onSelect, onUnselect };
79 events.forEach(([event, handlerName]) => {
80 if (handlers[handlerName]) {
81 $el.on(event, handlers[handlerName]);
82 }
83 });
84 };
85
86 const detachEventHandlers = $el => {
87 events.forEach(([event]) => {
88 $el.off(event);
89 });
90 };
91
92 const updateSelect2Value = ($el, value) => {
93 $el.off(`change.${namespace}`).val(value).trigger('change');
94 if (onChange) {
95 $el.on(`change.${namespace}`, onChange);
96 }
97 };
98
99 const fuzzyValuesEqual = (currentValue, newValue) => {
100 return (currentValue === null && newValue === '') || shallowEqualFuzzy(currentValue, newValue);
101 };
102
103 const makeOption = item => {
104 if (typeof item === 'object') {
105 const { value, label, ...itemParams } = item;
106 return (
107 <option key={`option-${value}`} value={value} {...itemParams}>
108 {label}
109 </option>
110 );
111 }
112
113 return (
114 <option key={`option-${item}`} value={item}>
115 {item}
116 </option>
117 );
118 };
119
120 return (
121 <select ref={selectRef} {...rest}>
122 {data.map((item, index) =>
123 item.children ? (
124 <optgroup key={`optgroup-${index}`} label={item.label} {...item}>
125 {item.children.map(child => makeOption(child))}
126 </optgroup>
127 ) : (
128 makeOption(item)
129 )
130 )}
131 </select>
132 );
133 });
134
135 export default Select2;
136