PluginProbe
WebberZone Top 10 — Popular Posts / 4.3.2
WebberZone Top 10 — Popular Posts v4.3.2
4.5.1 4.5.0 4.4.3 4.4.2 4.4.1 4.4.0 4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 trunk 1.0 1.0.1 1.1 1.2 1.3 1.4 1.4.1 1.5 1.5.1 1.5.2 1.5.3 1.6 1.6.1 All 117 releases
top-10 / includes / frontend / blocks / src / post-count / components / padding-control.js

padding-control.js in WebberZone Top 10 — Popular Posts 4.3.2, at includes/frontend/blocks/src/post-count/components/padding-control.js

130 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { Button } from '@wordpress/components';
2 import { __ } from '@wordpress/i18n';
3 import { useState } from '@wordpress/element';
4 import UnitControl from './unit-control';
5 import { LinkIcon, UnlinkIcon } from './icons';
6
7 const PaddingControl = ({ attributes, setAttributes }) => {
8 const {
9 svgPaddingValues = [0, 0, 0, 0], // Default values for top, right, bottom, left
10 svgPaddingUnits = ['px', 'px', 'px', 'px'], // Default units for top, right, bottom, left
11 } = attributes;
12
13 const [isPaddingLinked, setIsPaddingLinked] = useState(false);
14
15 const handlePaddingChange = (value, index) => {
16 const newPaddingValues = [...svgPaddingValues];
17 if (isPaddingLinked) {
18 newPaddingValues.fill(value);
19 } else {
20 newPaddingValues[index] = value;
21 }
22 setAttributes({ svgPaddingValues: newPaddingValues });
23 };
24
25 const handleUnitChange = (unit, index) => {
26 const newPaddingUnits = [...svgPaddingUnits];
27 if (isPaddingLinked) {
28 newPaddingUnits.fill(unit);
29 } else {
30 newPaddingUnits[index] = unit;
31 }
32 setAttributes({ svgPaddingUnits: newPaddingUnits });
33 };
34
35 const togglePaddingLink = () => {
36 const newIsPaddingLinked = !isPaddingLinked;
37 setIsPaddingLinked(newIsPaddingLinked);
38 if (!newIsPaddingLinked) {
39 const value =
40 svgPaddingValues[0] ||
41 svgPaddingValues[1] ||
42 svgPaddingValues[2] ||
43 svgPaddingValues[3] ||
44 0;
45 setAttributes({
46 svgPaddingValues: [value, value, value, value],
47 svgPaddingUnits: [
48 svgPaddingUnits[0],
49 svgPaddingUnits[0],
50 svgPaddingUnits[0],
51 svgPaddingUnits[0],
52 ],
53 });
54 }
55 };
56
57 return (
58 <>
59 <div
60 style={{
61 display: 'flex',
62 alignItems: 'center',
63 }}
64 >
65 <span>{__('Padding', 'top-10')}</span>
66 <Button
67 onClick={togglePaddingLink}
68 variant="secondary"
69 style={{
70 marginLeft: '10px',
71 padding: '0px',
72 border: 0,
73 boxShadow: 'none',
74 }}
75 title={
76 isPaddingLinked
77 ? __('Unlink Padding', 'top-10')
78 : __('Link Padding', 'top-10')
79 }
80 >
81 <span
82 dangerouslySetInnerHTML={{
83 __html: isPaddingLinked ? LinkIcon : UnlinkIcon,
84 }}
85 />
86 </Button>
87 </div>
88 {isPaddingLinked ? (
89 <UnitControl
90 label={__('Padding', 'top-10')}
91 value={svgPaddingValues[0]}
92 unit={svgPaddingUnits[0]}
93 onValueChange={(value) => handlePaddingChange(value, 0)}
94 onUnitChange={(unit) => handleUnitChange(unit, 0)}
95 />
96 ) : (
97 <div
98 style={{
99 display: 'grid',
100 gridTemplateColumns: '1fr 1fr',
101 gap: '5px',
102 }}
103 >
104 {[
105 { index: 0, label: __('Top', 'top-10') },
106 { index: 1, label: __('Right', 'top-10') },
107 { index: 2, label: __('Bottom', 'top-10') },
108 { index: 3, label: __('Left', 'top-10') },
109 ].map(({ index, label }) => (
110 <UnitControl
111 key={index}
112 label={label}
113 value={svgPaddingValues[index]}
114 unit={svgPaddingUnits[index]}
115 onValueChange={(value) =>
116 handlePaddingChange(value, index)
117 }
118 onUnitChange={(unit) =>
119 handleUnitChange(unit, index)
120 }
121 />
122 ))}
123 </div>
124 )}
125 </>
126 );
127 };
128
129 export default PaddingControl;
130