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 / import-export / export-form.js
vk-blocks / src / admin / import-export Last commit date
export-form.js 2 months ago file.js 2 months ago import-form.js 2 months ago import.js 2 months ago index.js 2 months ago
export-form.js
165 lines
1 /**
2 * WordPress dependencies
3 */
4 import { __, sprintf } from '@wordpress/i18n';
5 import { Button, CheckboxControl } from '@wordpress/components';
6 import { download as downloadIcon } from '@wordpress/icons';
7 import { useState } from '@wordpress/element';
8 import { useSelect } from '@wordpress/data';
9
10 /**
11 * Internal dependencies
12 */
13 import { download } from './file';
14 import { OPTION_DEFAULT_SETTINGS } from './index';
15 import { STORE_NAME } from '@vkblocks/utils/store/constants';
16
17 export default function ExportForm(props) {
18 const { isChanged } = props;
19 const [exportOptionLists, setExportOptionLists] = useState(
20 OPTION_DEFAULT_SETTINGS
21 );
22
23 const storeVkBlocksOption = useSelect((select) => {
24 const { getOptions } = select(STORE_NAME);
25 return getOptions().vkBlocksOption;
26 }, []);
27
28 async function handleExport(event) {
29 event.preventDefault();
30
31 // exportOptionListsからすべてのオプションプロパティー名を取得(isShow が false でないもののみ)
32 const allOptionNames = new Set();
33 exportOptionLists.forEach((setting) => {
34 // isShowがfalseの設定はエクスポート対象から除外
35 if (setting.isShow !== false) {
36 setting.options.forEach((option) => {
37 allOptionNames.add(option.name);
38 });
39 }
40 });
41
42 // 一旦DBから�
43 �ての値をエクスポート対象の変数に�
44 �れる
45 const exportVkBlocksOptions = { ...storeVkBlocksOption };
46
47 // exportVkBlocksOptionsから、exportOptionListsに存在しないプロパティを削除します
48 for (const key in exportVkBlocksOptions) {
49 if (!allOptionNames.has(key)) {
50 delete exportVkBlocksOptions[key];
51 }
52 }
53
54 // ユーザーがエクスポート対象外にしたものを削除する
55 exportOptionLists.forEach((setting) => {
56 if (!setting.isExport) {
57 setting.options.forEach(
58 (option) => delete exportVkBlocksOptions[option.name]
59 );
60 }
61 });
62
63 // ライセンスキーを空文字に設定(セキュリティのため)
64 if (exportVkBlocksOptions.vk_blocks_pro_license_key !== undefined) {
65 exportVkBlocksOptions.vk_blocks_pro_license_key = '';
66 }
67
68 const exportContents = {
69 vkBlocksOptions: {
70 ...exportVkBlocksOptions,
71 },
72 };
73 const fileContent = JSON.stringify(exportContents);
74 const publishDate = new Date().toISOString().split('T')[0];
75 const fileName = `vk-blocks-${publishDate}-export.json`;
76 download(fileName, fileContent, 'application/json');
77 }
78
79 // 表示されている�
80 目のみをカウント
81 const visibleExportLists = exportOptionLists.filter((list, index) => {
82 const { isShow = true } = OPTION_DEFAULT_SETTINGS[index];
83 return isShow;
84 });
85 const isExportLists = visibleExportLists.filter((list) => !!list.isExport);
86
87 let ariaChecked;
88 if (isExportLists.length === visibleExportLists.length) {
89 ariaChecked = 'true';
90 } else if (isExportLists.length > 0) {
91 ariaChecked = 'mixed';
92 } else {
93 ariaChecked = 'false';
94 }
95
96 const handleToggleAll = (value) => {
97 const copyObj = JSON.parse(JSON.stringify(exportOptionLists));
98 copyObj.forEach((list) => (list.isExport = value));
99 setExportOptionLists(copyObj);
100 };
101
102 const canExport =
103 !isChanged && exportOptionLists.some((list) => !!list.isExport)
104 ? true
105 : false;
106
107 return (
108 <div>
109 <h4>{__('Export', 'vk-blocks')}</h4>
110 <CheckboxControl
111 label={__('Toggle all', 'vk-blocks')}
112 checked={isExportLists.length === exportOptionLists.length}
113 onChange={handleToggleAll}
114 aria-checked={ariaChecked}
115 />
116 {Object.keys(OPTION_DEFAULT_SETTINGS).map((key, index) => {
117 const { groupTitle, isShow = true } =
118 OPTION_DEFAULT_SETTINGS[key];
119 const checked = exportOptionLists[index].isExport
120 ? true
121 : false;
122 const handleToggle = (value) => {
123 const copyObj = JSON.parse(
124 JSON.stringify(exportOptionLists)
125 );
126 copyObj[index].isExport = value;
127 setExportOptionLists(copyObj);
128 };
129 return (
130 isShow && (
131 <CheckboxControl
132 key={index}
133 label={sprintf(
134 // translators: Export %s
135 __('Export %s', 'vk-blocks'),
136 groupTitle
137 )}
138 checked={checked}
139 onChange={(value) => handleToggle(value, index)}
140 />
141 )
142 );
143 })}
144 {isChanged && (
145 <p>
146 {__(
147 'It seems that the changed settings are not saved. Please save your changes.',
148 'vk-blocks'
149 )}
150 </p>
151 )}
152 <div className="submit">
153 <Button
154 variant="primary"
155 icon={downloadIcon}
156 onClick={handleExport}
157 disabled={!canExport}
158 >
159 {__('Export', 'vk-blocks')}
160 </Button>
161 </div>
162 </div>
163 );
164 }
165