PluginProbe ʕ •ᴥ•ʔ
VK Blocks / trunk
VK Blocks vtrunk
1.123.0 1.122.0 1.121.0 1.120.0 1.119.2 1.119.1 1.119.0 1.118.7 1.82.0.0 1.82.0.1 1.83.0.0 1.83.0.1 1.84.0.0 1.84.0.1 1.85.0.2 1.85.0.3 1.85.1.0 1.85.1.1 1.86.0.0 1.86.0.1 1.86.1.0 1.87.0.0 1.87.0.1 1.88.0.1 1.88.0.2 1.89.0.0 1.9.2 1.90.0.0 1.90.0.1 1.90.1.1 1.91.0.0 1.91.1.1 1.92.0.0 1.92.0.1 1.92.1.0 1.92.1.1 1.93.0.0 trunk 1.93.0.1 0.1.1 1.93.1.0 0.10.3 1.93.1.1 0.11.0 1.94.0.0 0.12.6 1.94.0.1 0.15.1 1.94.1.0 0.16.2 1.94.2.1 0.17.6 1.94.2.2 0.2.2 1.95.0.3 0.22.4 1.95.0.4 0.26.7 1.96.2.0 0.3.2 1.96.2.1 0.31.0 1.97.0.1 0.35.5 1.97.0.2 0.37.5 1.99.0.0 0.38.8 1.99.0.1 0.39.4 0.4.7 0.41.0 0.42.0 0.44.13 0.45.2 0.46.1 0.47.0 0.48.0 0.49.8 0.5.2 0.50.3 0.51.0 0.52.2 0.53.2 0.54.0 0.55.0 0.56.2 0.56.3 0.57.6 0.58.10 0.59.0 0.6.0 0.60.1 0.61.2 0.7.1 0.8.2 1.0.16 1.10.0 1.100.0.0 1.100.0.1 1.102.0.0 1.102.0.1 1.103.0.0 1.104.0.0 1.104.0.1 1.105.1.0 1.105.1.1 1.106.0.0 1.106.0.1 1.107.0.0 1.107.0.1 1.107.0.2 1.108.0.0 1.108.0.1 1.109.0.0 1.109.0.1 1.11.4 1.110.0.0 1.110.0.1 1.111.0.0 1.111.0.1 1.111.0.2 1.112.0.0 1.112.0.1 1.113.0.0 1.113.0.1 1.114.0.0 1.114.0.1 1.114.2.0 1.114.2.1 1.115.0.0 1.115.0.1 1.115.1.0 1.115.1.1 1.115.2.0 1.115.2.1 1.116.0.0 1.116.0.1 1.116.1.0 1.116.1.1 1.116.2.0 1.117.0.0 1.117.0.1 1.117.1.0 1.118.2 1.118.5 1.12.0 1.13.2 1.14.1 1.15.1 1.16.11 1.17.0 1.18.6 1.19.0 1.19.1 1.2.3 1.20.7 1.21.0 1.22.4 1.23.0 1.24.5 1.25.1 1.26.2 1.27.7.2 1.28.0.1 1.29.2.0 1.3.9 1.30.0.1 1.31.0.1 1.32.0.2 1.33.2.1 1.36.1.5 1.37.0.0 1.39.2.1 1.4.6 1.40.0.1 1.40.1.0 1.40.1.1 1.41.0.0 1.41.0.1 1.41.2.2 1.41.2.3 1.43.0.0 1.43.0.1 1.43.0.2 1.44.0.0 1.44.0.1 1.45.0.0 1.45.0.1 1.46.0.0 1.46.0.1 1.47.0.0 1.47.0.1 1.47.1.0 1.48.0.0 1.48.0.1 1.48.0.2 1.48.1.0 1.48.1.1 1.5.0 1.50.0.0 1.50.0.1 1.51.0.0 1.51.0.1 1.52.0.0 1.52.0.1 1.53.0.0 1.53.0.1 1.54.0.0 1.54.0.1 1.55.0.0 1.55.0.1 1.56.0.0 1.56.0.1 1.57.0.0 1.57.0.2 1.57.0.3 1.57.0.4 1.57.0.5 1.57.1.0 1.57.1.1 1.57.1.2 1.58.0.0 1.58.0.1 1.59.0.0 1.59.0.1 1.6.0 1.60.0.0 1.60.0.1 1.63.0.0 1.63.0.1 1.64.0.0 1.64.0.1 1.64.1.0 1.64.1.2 1.67.0.0 1.67.0.1 1.68.0.0 1.68.0.1 1.69.0.0 1.69.0.1 1.69.1.1 1.69.1.2 1.7.1 1.70.0.0 1.70.0.1 1.71.0.0 1.71.0.1 1.72.0.0 1.72.1.0 1.72.1.1 1.73.0.0 1.73.0.1 1.74.0.0 1.74.0.1 1.75.0.0 1.75.1.0 1.75.1.1 1.76.0.0 1.76.0.1 1.76.1.0 1.76.1.1 1.76.2.0 1.76.2.1 1.77.0.0 1.77.0.1 1.78.0.0 1.78.0.1 1.79.0.0 1.79.0.1 1.79.0.2 1.79.0.3 1.79.1.0 1.79.1.1 1.8.2 1.80.1.0 1.80.1.1 1.80.1.2 1.81.0.1 1.81.0.2
vk-blocks / src / components / scroll-hint / index.js
vk-blocks / src / components / scroll-hint Last commit date
styles 2 months ago index.js 2 months ago
index.js
176 lines
1 import { useState, useEffect } from 'react';
2 import { __ } from '@wordpress/i18n';
3 import { ToggleControl, TextControl, BaseControl } from '@wordpress/components';
4 import { FontAwesome } from '@vkblocks/utils/font-awesome-new';
5 import { iconLabel } from '@vkblocks/utils/icon-label';
6
7 /**
8 * Scroll Hint Component
9 *
10 * スクロールヒントメッセージの設定UIコンポーネント
11 * tableとgroupブロックのHorizontal Scrollで使用
12 *
13 * @param {Object} props - Component props
14 * @param {boolean} props.showScrollMessage - スクロールメッセージを表示するか
15 * @param {string} props.scrollMessageText - スクロールメッセージのテキスト
16 * @param {string} props.scrollIconLeft - 左側のアイコンクラス
17 * @param {string} props.scrollIconRight - 右側のアイコンクラス
18 * @param {Function} props.setAttributes - 属性を設定する関数
19 * @param {Object} props.attributes - ブロックの属性オブジェクト
20 * @return {JSX.Element} Scroll Hint Controls
21 */
22 const ScrollHint = ({
23 showScrollMessage,
24 scrollMessageText,
25 scrollIconLeft,
26 scrollIconRight,
27 setAttributes,
28 attributes,
29 ...props
30 }) => {
31 const [iconOutputLeft, setIconOutputLeft] = useState(scrollIconLeft !== '');
32 const [iconOutputRight, setIconOutputRight] = useState(
33 scrollIconRight !== ''
34 );
35
36 // アイコンの状�
37 �が空の場合には、トグルをOFFに設定
38 useEffect(() => {
39 if (attributes.scrollIconLeft === '') {
40 setIconOutputLeft(false);
41 }
42 if (attributes.scrollIconRight === '') {
43 setIconOutputRight(false);
44 }
45 }, [attributes.scrollIconLeft, attributes.scrollIconRight]);
46
47 // アイコン出力の状�
48 �に応じて data-attributes を更新
49 useEffect(() => {
50 setAttributes({
51 iconOutputLeft,
52 iconOutputRight,
53 });
54 }, [iconOutputLeft, iconOutputRight]);
55
56 const handleScrollMessageToggle = (isChecked) => {
57 setAttributes({ showScrollMessage: isChecked });
58 };
59
60 const handleMessageTextChange = (value) => {
61 setAttributes({ scrollMessageText: value });
62 };
63
64 const handleIconChange = (position, iconClass) => {
65 if (position === 'left') {
66 setAttributes({ scrollIconLeft: iconClass });
67 } else if (position === 'right') {
68 setAttributes({ scrollIconRight: iconClass });
69 }
70 };
71
72 // ToggleControlが動いたときに状�
73 �を更新
74 const handleIconOutputToggle = (position) => {
75 if (position === 'left') {
76 setIconOutputLeft(!iconOutputLeft);
77
78 // トグルがONになった場合にデフォルトアイコンを設定、OFFになった場合は削除
79 if (!iconOutputLeft && !attributes.scrollIconLeft) {
80 setAttributes({
81 scrollIconLeft: 'fa-solid fa-caret-left',
82 });
83 } else if (iconOutputLeft) {
84 setAttributes({
85 scrollIconLeft: '',
86 });
87 }
88 } else if (position === 'right') {
89 setIconOutputRight(!iconOutputRight);
90
91 // トグルがONになった場合にデフォルトアイコンを設定、OFFになった場合は削除
92 if (!iconOutputRight && !attributes.scrollIconRight) {
93 setAttributes({
94 scrollIconRight: 'fa-solid fa-caret-right',
95 });
96 } else if (iconOutputRight) {
97 setAttributes({
98 scrollIconRight: '',
99 });
100 }
101 }
102 };
103
104 return (
105 <>
106 <ToggleControl
107 label={__('Show Scroll Message', 'vk-blocks')}
108 checked={showScrollMessage}
109 onChange={() => handleScrollMessageToggle(!showScrollMessage)}
110 />
111 {showScrollMessage && (
112 <>
113 <TextControl
114 label={__('Scroll Message Text', 'vk-blocks')}
115 value={scrollMessageText}
116 onChange={(value) => handleMessageTextChange(value)} // handleMessageTextChangeに正しく引数を渡す
117 />
118 <h4>{iconLabel(__('Icon', 'vk-blocks'))}</h4>
119 <ToggleControl
120 label={__(
121 'Display the icon before the text',
122 'vk-blocks'
123 )}
124 checked={iconOutputLeft}
125 onChange={() => handleIconOutputToggle('left')}
126 />
127 {iconOutputLeft && (
128 <BaseControl
129 label={__('Before text', 'vk-blocks')}
130 id="scrollIconLeftControl"
131 >
132 <FontAwesome
133 attributeName={'scrollIconLeft'}
134 attributes={attributes}
135 setAttributes={setAttributes}
136 modeClass={true}
137 onChange={(iconClass) =>
138 handleIconChange('left', iconClass)
139 }
140 {...props}
141 />
142 </BaseControl>
143 )}
144 <ToggleControl
145 label={__(
146 'Display the icon after the text.',
147 'vk-blocks'
148 )}
149 checked={iconOutputRight}
150 onChange={() => handleIconOutputToggle('right')}
151 />
152 {iconOutputRight && (
153 <BaseControl
154 label={__('After text', 'vk-blocks')}
155 id="scrollIconRightControl"
156 >
157 <FontAwesome
158 attributeName={'scrollIconRight'}
159 attributes={attributes}
160 setAttributes={setAttributes}
161 modeClass={true}
162 onChange={(iconClass) =>
163 handleIconChange('right', iconClass)
164 }
165 {...props}
166 />
167 </BaseControl>
168 )}
169 </>
170 )}
171 </>
172 );
173 };
174
175 export default ScrollHint;
176