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-manager / category.js
vk-blocks / src / admin / block-manager Last commit date
category.js 2 months ago checklist.js 2 months ago index.js 2 months ago
category.js
126 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 BlockTypesChecklist from './checklist';
17 import { AdminContext } from '@vkblocks/admin/index';
18
19 function BlockManagerCategory({ title, blockTypes }) {
20 const instanceId = useInstanceId(BlockManagerCategory);
21 const { vkBlocksOption, setVkBlocksOption } = useContext(AdminContext);
22 const defaultAllowedBlockTypes = true;
23 const hiddenBlockTypes = vkBlocksOption.disable_block_lists;
24 const filteredBlockTypes = useMemo(() => {
25 if (defaultAllowedBlockTypes === true) {
26 return blockTypes;
27 }
28 return blockTypes.filter(({ name }) => {
29 return !vkBlocksOption.disable_block_lists.includes(name);
30 });
31 }, [defaultAllowedBlockTypes, blockTypes]);
32
33 const showBlockTypes = (blockNames) => {
34 const existingBlockNames = vkBlocksOption.disable_block_lists ?? [];
35 const newBlockNames = existingBlockNames.filter(
36 (type) =>
37 !(
38 Array.isArray(blockNames) ? blockNames : [blockNames]
39 ).includes(type)
40 );
41 vkBlocksOption.disable_block_lists = newBlockNames;
42 setVkBlocksOption({ ...vkBlocksOption });
43 };
44
45 const hideBlockTypes = (blockNames) => {
46 const existingBlockNames = vkBlocksOption.disable_block_lists ?? [];
47 const mergedBlockNames = new Set([
48 ...existingBlockNames,
49 ...(Array.isArray(blockNames) ? blockNames : [blockNames]),
50 ]);
51 vkBlocksOption.disable_block_lists = [...mergedBlockNames];
52 setVkBlocksOption({ ...vkBlocksOption });
53 };
54
55 const toggleVisible = useCallback(
56 (blockName, nextIsChecked) => {
57 if (nextIsChecked) {
58 showBlockTypes(blockName);
59 } else {
60 hideBlockTypes(blockName);
61 }
62 },
63 [showBlockTypes, hideBlockTypes]
64 );
65 const toggleAllVisible = useCallback(
66 (nextIsChecked) => {
67 const blockNames = blockTypes.map((blockType) => blockType.name);
68 if (nextIsChecked) {
69 showBlockTypes(blockNames);
70 } else {
71 hideBlockTypes(blockNames);
72 }
73 },
74 [blockTypes, showBlockTypes, hideBlockTypes]
75 );
76
77 if (!filteredBlockTypes.length) {
78 return null;
79 }
80
81 // checkするブロック名�
82 �列を作る
83 const checkedBlockNames = filteredBlockTypes
84 .map((blockType) => blockType.name)
85 .filter((type) => !hiddenBlockTypes.includes(type));
86
87 const titleId = 'block-manager__category-title-' + instanceId;
88
89 const isAllChecked = checkedBlockNames.length === filteredBlockTypes.length;
90
91 let ariaChecked;
92 if (isAllChecked) {
93 ariaChecked = 'true';
94 } else if (checkedBlockNames.length > 0) {
95 ariaChecked = 'mixed';
96 } else {
97 ariaChecked = 'false';
98 }
99
100 return (
101 <div
102 role="group"
103 aria-labelledby={titleId}
104 className={classnames(
105 'block-manager__category',
106 'blockManagerList'
107 )}
108 >
109 <CheckboxControl
110 __nextHasNoMarginBottom
111 checked={isAllChecked}
112 onChange={toggleAllVisible}
113 className="block-manager__category-title"
114 aria-checked={ariaChecked}
115 label={<span id={titleId}>{title}</span>}
116 />
117 <BlockTypesChecklist
118 blockTypes={filteredBlockTypes}
119 value={checkedBlockNames}
120 onItemChange={toggleVisible}
121 />
122 </div>
123 );
124 }
125 export default BlockManagerCategory;
126