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 / admin / block-style-manager / category.js
vk-blocks / src / admin / block-style-manager Last commit date
category.js 2 months ago checklist.js 2 months ago index.js 2 months ago
category.js
180 lines
1 /**
2 * External dependencies
3 */
4 import classnames from 'classnames';
5
6 /**
7 * WordPress dependencies
8 */
9 import { CheckboxControl } from '@wordpress/components';
10 import { useMemo, useContext, useCallback } from '@wordpress/element';
11 import { useInstanceId } from '@wordpress/compose';
12
13 /**
14 * Internal dependencies
15 */
16 import BlockStyleChecklist from './checklist';
17 import { AdminContext } from '@vkblocks/admin/index';
18
19 export default function BlockStyleManagerCategory({
20 blockName,
21 blockTitle,
22 blockStyleTypes,
23 }) {
24 const instanceId = useInstanceId(BlockStyleManagerCategory);
25 const { vkBlocksOption, setVkBlocksOption } = useContext(AdminContext);
26 const defaultAllowedBlockStyleTypes = true;
27 const hiddenBlockTypes = vkBlocksOption.disable_block_style_lists;
28 const filteredBlockStyleTypes = useMemo(() => {
29 if (defaultAllowedBlockStyleTypes === true) {
30 return blockStyleTypes;
31 }
32 return blockStyleTypes.filter(({ name }) => {
33 const hiddenBlockStyleLists =
34 vkBlocksOption.disable_block_style_lists.find(
35 (item) => item.block_name === blockName
36 );
37 return !hiddenBlockStyleLists.includes(name);
38 });
39 }, [defaultAllowedBlockStyleTypes, blockStyleTypes]);
40
41 const showBlockStyles = (blockStyles) => {
42 const targetBlockStyles = vkBlocksOption.disable_block_style_lists.find(
43 (item) => item.block_name === blockName
44 );
45 const existingBlockStyleNames = targetBlockStyles?.property_name ?? [];
46 const mergedBlockNames = existingBlockStyleNames.filter(
47 (type) =>
48 !(
49 Array.isArray(blockStyles) ? blockStyles : [blockStyles]
50 ).includes(type)
51 );
52
53 // 対象のオプション値がない時
54 if (
55 existingBlockStyleNames.length === 0 &&
56 targetBlockStyles === undefined
57 ) {
58 vkBlocksOption.disable_block_style_lists.push({
59 block_name: blockName,
60 property_name: [...mergedBlockNames],
61 });
62 }
63 // vkBlocksOptionのproperty_nameを上書きする
64 vkBlocksOption.disable_block_style_lists.forEach((item) => {
65 if (item.block_name === blockName) {
66 item.property_name = [...mergedBlockNames];
67 }
68 });
69
70 setVkBlocksOption({ ...vkBlocksOption });
71 };
72
73 const hideBlockStyles = (blockStyles) => {
74 const targetBlockStyles = vkBlocksOption.disable_block_style_lists.find(
75 (item) => item.block_name === blockName
76 );
77 const existingBlockStyleNames = targetBlockStyles?.property_name ?? [];
78 const mergedBlockNames = new Set([
79 ...existingBlockStyleNames,
80 ...(Array.isArray(blockStyles) ? blockStyles : [blockStyles]),
81 ]);
82
83 // 対象のオプション値がない時
84 if (
85 existingBlockStyleNames.length === 0 &&
86 targetBlockStyles === undefined
87 ) {
88 vkBlocksOption.disable_block_style_lists.push({
89 block_name: blockName,
90 property_name: [...mergedBlockNames],
91 });
92 }
93 // vkBlocksOptionのproperty_nameを上書きする
94 vkBlocksOption.disable_block_style_lists.forEach((item) => {
95 if (item.block_name === blockName) {
96 item.property_name = [...mergedBlockNames];
97 }
98 });
99
100 setVkBlocksOption({ ...vkBlocksOption });
101 };
102
103 const toggleVisible = useCallback(
104 (blockStyleName, nextIsChecked) => {
105 if (nextIsChecked) {
106 showBlockStyles(blockStyleName);
107 } else {
108 hideBlockStyles(blockStyleName);
109 }
110 },
111 [showBlockStyles, hideBlockStyles]
112 );
113 const toggleAllVisible = useCallback(
114 (nextIsChecked) => {
115 const blockStyles = blockStyleTypes.map(
116 (blockType) => blockType.name
117 );
118 if (nextIsChecked) {
119 showBlockStyles(blockStyles);
120 } else {
121 hideBlockStyles(blockStyles);
122 }
123 },
124 [blockStyleTypes, showBlockStyles, hideBlockStyles]
125 );
126
127 if (!filteredBlockStyleTypes.length) {
128 return null;
129 }
130
131 // checkするブロック名�
132 �列を作る
133 const hiddenBlockStyleLists = hiddenBlockTypes.find(
134 (item) => item.block_name === blockName
135 );
136 const checkedBlockStyles = filteredBlockStyleTypes
137 .map((blockType) => blockType.name)
138 .filter((type) => !hiddenBlockStyleLists?.property_name.includes(type));
139
140 const titleId = 'block-manager__category-title-' + instanceId;
141
142 const isAllChecked =
143 checkedBlockStyles.length === filteredBlockStyleTypes.length;
144
145 let ariaChecked;
146 if (isAllChecked) {
147 ariaChecked = 'true';
148 } else if (checkedBlockStyles.length > 0) {
149 ariaChecked = 'mixed';
150 } else {
151 ariaChecked = 'false';
152 }
153
154 return (
155 <div
156 role="group"
157 aria-labelledby={titleId}
158 className={classnames(
159 'block-manager__category',
160 'blockManagerList'
161 )}
162 >
163 <CheckboxControl
164 __nextHasNoMarginBottom
165 checked={isAllChecked}
166 onChange={toggleAllVisible}
167 className="block-manager__category-title"
168 aria-checked={ariaChecked}
169 label={<span id={titleId}>{blockTitle}</span>}
170 />
171 <BlockStyleChecklist
172 blockStyleTypes={filteredBlockStyleTypes}
173 value={checkedBlockStyles}
174 onItemChange={toggleVisible}
175 blockName={blockName}
176 />
177 </div>
178 );
179 }
180