itmar-block-packages 2.1.2 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -4
- package/build/cjs/AnimationBlock.js +61 -92
- package/build/cjs/AnimationBlock.js.map +1 -1
- package/build/cjs/BlockEditWrapper.js +3 -10
- package/build/cjs/BlockEditWrapper.js.map +1 -1
- package/build/cjs/BlockPlace.js +277 -482
- package/build/cjs/BlockPlace.js.map +1 -1
- package/build/cjs/BrockInserter.js +195 -191
- package/build/cjs/BrockInserter.js.map +1 -1
- package/build/cjs/DateElm.js +254 -281
- package/build/cjs/DateElm.js.map +1 -1
- package/build/cjs/DraggableBox.js +99 -129
- package/build/cjs/DraggableBox.js.map +1 -1
- package/build/cjs/GridControls.js +292 -392
- package/build/cjs/GridControls.js.map +1 -1
- package/build/cjs/IconSelectControl.js +65 -156
- package/build/cjs/IconSelectControl.js.map +1 -1
- package/build/cjs/JapaneseHolidays.js +67 -76
- package/build/cjs/JapaneseHolidays.js.map +1 -1
- package/build/cjs/MasonryControl.js +95 -100
- package/build/cjs/MasonryControl.js.map +1 -1
- package/build/cjs/PseudoElm.js +37 -50
- package/build/cjs/PseudoElm.js.map +1 -1
- package/build/cjs/ShadowStyle.js +216 -430
- package/build/cjs/ShadowStyle.js.map +1 -1
- package/build/cjs/SwiperControl.js +240 -241
- package/build/cjs/SwiperControl.js.map +1 -1
- package/build/cjs/ToggleElement.js +17 -9
- package/build/cjs/ToggleElement.js.map +1 -1
- package/build/cjs/TypographyControls.js +73 -139
- package/build/cjs/TypographyControls.js.map +1 -1
- package/build/cjs/UpdateAllPostsBlockAttributes.js +102 -119
- package/build/cjs/UpdateAllPostsBlockAttributes.js.map +1 -1
- package/build/cjs/ZipAddress.js +27 -23
- package/build/cjs/ZipAddress.js.map +1 -1
- package/build/cjs/blockStore.js +42 -47
- package/build/cjs/blockStore.js.map +1 -1
- package/build/cjs/cssPropertes.js +165 -117
- package/build/cjs/cssPropertes.js.map +1 -1
- package/build/cjs/customHooks.js +277 -0
- package/build/cjs/customHooks.js.map +1 -0
- package/build/cjs/formatCreate.js +115 -145
- package/build/cjs/formatCreate.js.map +1 -1
- package/build/cjs/hslToRgb.js +112 -116
- package/build/cjs/hslToRgb.js.map +1 -1
- package/build/cjs/index.js +15 -11
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/mediaUpload.js +95 -158
- package/build/cjs/mediaUpload.js.map +1 -1
- package/build/cjs/node_modules/swiper/shared/ssr-window.esm.js +144 -0
- package/build/cjs/node_modules/swiper/shared/ssr-window.esm.js.map +1 -0
- package/build/cjs/node_modules/swiper/shared/swiper-core.js +3925 -0
- package/build/cjs/node_modules/swiper/shared/swiper-core.js.map +1 -0
- package/build/cjs/node_modules/swiper/shared/utils.js +294 -0
- package/build/cjs/node_modules/swiper/shared/utils.js.map +1 -0
- package/build/cjs/pickupStore.js +56 -54
- package/build/cjs/pickupStore.js.map +1 -1
- package/build/cjs/shopfiApi.js +127 -138
- package/build/cjs/shopfiApi.js.map +1 -1
- package/build/cjs/types/AnimationBlock.d.ts +22 -0
- package/build/cjs/types/BlockEditWrapper.d.ts +7 -0
- package/build/cjs/types/BlockPlace.d.ts +49 -0
- package/build/cjs/types/BrockInserter.d.ts +6 -0
- package/build/cjs/types/DateElm.d.ts +69 -0
- package/build/cjs/types/DraggableBox.d.ts +19 -0
- package/build/cjs/types/GridControls.d.ts +27 -0
- package/build/cjs/types/IconSelectControl.d.ts +17 -0
- package/build/cjs/types/JapaneseHolidays.d.ts +6 -0
- package/build/cjs/types/MasonryControl.d.ts +35 -0
- package/build/cjs/types/PseudoElm.d.ts +11 -0
- package/build/cjs/types/ShadowStyle.d.ts +33 -0
- package/build/cjs/types/SwiperControl.d.ts +12 -0
- package/build/cjs/types/ToggleElement.d.ts +13 -0
- package/build/cjs/types/TypographyControls.d.ts +17 -0
- package/build/cjs/types/UpdateAllPostsBlockAttributes.d.ts +10 -0
- package/build/cjs/types/ZipAddress.d.ts +18 -0
- package/build/cjs/types/blockStore.d.ts +15 -0
- package/build/cjs/types/cssPropertes.d.ts +53 -0
- package/build/cjs/types/customHooks.d.ts +11 -0
- package/build/cjs/types/formatCreate.d.ts +18 -0
- package/build/cjs/types/hslToRgb.d.ts +23 -0
- package/build/cjs/types/index.d.ts +31 -0
- package/build/cjs/types/mediaUpload.d.ts +29 -0
- package/build/cjs/types/pickupStore.d.ts +39 -0
- package/build/cjs/types/shopfiApi.d.ts +18 -0
- package/build/cjs/types/validationCheck.d.ts +5 -0
- package/build/cjs/types/wordpressApi.d.ts +99 -0
- package/build/cjs/validationCheck.js +15 -9
- package/build/cjs/validationCheck.js.map +1 -1
- package/build/cjs/wordpressApi.js +364 -576
- package/build/cjs/wordpressApi.js.map +1 -1
- package/build/esm/AnimationBlock.d.ts +22 -0
- package/build/esm/AnimationBlock.js +61 -92
- package/build/esm/AnimationBlock.js.map +1 -1
- package/build/esm/BlockEditWrapper.d.ts +7 -0
- package/build/esm/BlockEditWrapper.js +4 -11
- package/build/esm/BlockEditWrapper.js.map +1 -1
- package/build/esm/BlockPlace.d.ts +49 -0
- package/build/esm/BlockPlace.js +279 -484
- package/build/esm/BlockPlace.js.map +1 -1
- package/build/esm/BrockInserter.d.ts +6 -0
- package/build/esm/BrockInserter.js +195 -191
- package/build/esm/BrockInserter.js.map +1 -1
- package/build/esm/DateElm.d.ts +69 -0
- package/build/esm/DateElm.js +254 -281
- package/build/esm/DateElm.js.map +1 -1
- package/build/esm/DraggableBox.d.ts +19 -0
- package/build/esm/DraggableBox.js +99 -129
- package/build/esm/DraggableBox.js.map +1 -1
- package/build/esm/GridControls.d.ts +27 -0
- package/build/esm/GridControls.js +294 -394
- package/build/esm/GridControls.js.map +1 -1
- package/build/esm/IconSelectControl.d.ts +17 -0
- package/build/esm/IconSelectControl.js +65 -156
- package/build/esm/IconSelectControl.js.map +1 -1
- package/build/esm/JapaneseHolidays.d.ts +6 -0
- package/build/esm/JapaneseHolidays.js +67 -76
- package/build/esm/JapaneseHolidays.js.map +1 -1
- package/build/esm/MasonryControl.d.ts +35 -0
- package/build/esm/MasonryControl.js +95 -100
- package/build/esm/MasonryControl.js.map +1 -1
- package/build/esm/PseudoElm.d.ts +11 -0
- package/build/esm/PseudoElm.js +37 -50
- package/build/esm/PseudoElm.js.map +1 -1
- package/build/esm/ShadowStyle.d.ts +33 -0
- package/build/esm/ShadowStyle.js +217 -431
- package/build/esm/ShadowStyle.js.map +1 -1
- package/build/esm/SwiperControl.d.ts +12 -0
- package/build/esm/SwiperControl.js +240 -241
- package/build/esm/SwiperControl.js.map +1 -1
- package/build/esm/ToggleElement.d.ts +13 -0
- package/build/esm/ToggleElement.js +17 -9
- package/build/esm/ToggleElement.js.map +1 -1
- package/build/esm/TypographyControls.d.ts +17 -0
- package/build/esm/TypographyControls.js +73 -139
- package/build/esm/TypographyControls.js.map +1 -1
- package/build/esm/UpdateAllPostsBlockAttributes.d.ts +10 -0
- package/build/esm/UpdateAllPostsBlockAttributes.js +103 -120
- package/build/esm/UpdateAllPostsBlockAttributes.js.map +1 -1
- package/build/esm/ZipAddress.d.ts +18 -0
- package/build/esm/ZipAddress.js +27 -23
- package/build/esm/ZipAddress.js.map +1 -1
- package/build/esm/blockStore.d.ts +15 -0
- package/build/esm/blockStore.js +42 -47
- package/build/esm/blockStore.js.map +1 -1
- package/build/esm/cssPropertes.d.ts +53 -0
- package/build/esm/cssPropertes.js +165 -117
- package/build/esm/cssPropertes.js.map +1 -1
- package/build/esm/customHooks.d.ts +11 -0
- package/build/esm/customHooks.js +267 -0
- package/build/esm/customHooks.js.map +1 -0
- package/build/esm/formatCreate.d.ts +18 -0
- package/build/esm/formatCreate.js +115 -145
- package/build/esm/formatCreate.js.map +1 -1
- package/build/esm/hslToRgb.d.ts +23 -0
- package/build/esm/hslToRgb.js +112 -116
- package/build/esm/hslToRgb.js.map +1 -1
- package/build/esm/index.d.ts +27 -0
- package/build/esm/index.js +8 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/mediaUpload.d.ts +29 -0
- package/build/esm/mediaUpload.js +95 -158
- package/build/esm/mediaUpload.js.map +1 -1
- package/build/esm/node_modules/swiper/shared/ssr-window.esm.js +141 -0
- package/build/esm/node_modules/swiper/shared/ssr-window.esm.js.map +1 -0
- package/build/esm/node_modules/swiper/shared/swiper-core.js +3922 -0
- package/build/esm/node_modules/swiper/shared/swiper-core.js.map +1 -0
- package/build/esm/node_modules/swiper/shared/utils.js +274 -0
- package/build/esm/node_modules/swiper/shared/utils.js.map +1 -0
- package/build/esm/pickupStore.d.ts +39 -0
- package/build/esm/pickupStore.js +56 -54
- package/build/esm/pickupStore.js.map +1 -1
- package/build/esm/shopfiApi.d.ts +18 -0
- package/build/esm/shopfiApi.js +127 -138
- package/build/esm/shopfiApi.js.map +1 -1
- package/build/esm/types/AnimationBlock.d.ts +22 -0
- package/build/esm/types/BlockEditWrapper.d.ts +7 -0
- package/build/esm/types/BlockPlace.d.ts +49 -0
- package/build/esm/types/BrockInserter.d.ts +6 -0
- package/build/esm/types/DateElm.d.ts +69 -0
- package/build/esm/types/DraggableBox.d.ts +19 -0
- package/build/esm/types/GridControls.d.ts +27 -0
- package/build/esm/types/IconSelectControl.d.ts +17 -0
- package/build/esm/types/JapaneseHolidays.d.ts +6 -0
- package/build/esm/types/MasonryControl.d.ts +35 -0
- package/build/esm/types/PseudoElm.d.ts +11 -0
- package/build/esm/types/ShadowStyle.d.ts +33 -0
- package/build/esm/types/SwiperControl.d.ts +12 -0
- package/build/esm/types/ToggleElement.d.ts +13 -0
- package/build/esm/types/TypographyControls.d.ts +17 -0
- package/build/esm/types/UpdateAllPostsBlockAttributes.d.ts +10 -0
- package/build/esm/types/ZipAddress.d.ts +18 -0
- package/build/esm/types/blockStore.d.ts +15 -0
- package/build/esm/types/cssPropertes.d.ts +53 -0
- package/build/esm/types/customHooks.d.ts +11 -0
- package/build/esm/types/formatCreate.d.ts +18 -0
- package/build/esm/types/hslToRgb.d.ts +23 -0
- package/build/esm/types/index.d.ts +31 -0
- package/build/esm/types/mediaUpload.d.ts +29 -0
- package/build/esm/types/pickupStore.d.ts +39 -0
- package/build/esm/types/shopfiApi.d.ts +18 -0
- package/build/esm/types/validationCheck.d.ts +5 -0
- package/build/esm/types/wordpressApi.d.ts +99 -0
- package/build/esm/validationCheck.d.ts +5 -0
- package/build/esm/validationCheck.js +15 -9
- package/build/esm/validationCheck.js.map +1 -1
- package/build/esm/wordpressApi.d.ts +99 -0
- package/build/esm/wordpressApi.js +365 -577
- package/build/esm/wordpressApi.js.map +1 -1
- package/package.json +29 -7
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -117
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/cjs/customFooks.js +0 -300
- package/build/cjs/customFooks.js.map +0 -1
- package/build/esm/_virtual/_rollupPluginBabelHelpers.js +0 -107
- package/build/esm/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/esm/customFooks.js +0 -290
- package/build/esm/customFooks.js.map +0 -1
|
@@ -1,620 +1,408 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
|
|
4
3
|
var element = require('@wordpress/element');
|
|
5
4
|
var i18n = require('@wordpress/i18n');
|
|
5
|
+
var _ = require('lodash');
|
|
6
6
|
var components = require('@wordpress/components');
|
|
7
7
|
var apiFetch = require('@wordpress/api-fetch');
|
|
8
8
|
var url = require('@wordpress/url');
|
|
9
9
|
|
|
10
10
|
//const _ = require("lodash");
|
|
11
|
-
|
|
12
|
-
var restFetchData = /*#__PURE__*/function () {
|
|
13
|
-
var _ref = _rollupPluginBabelHelpers.asyncToGenerator(function* (path) {
|
|
11
|
+
const restFetchData = async (path) => {
|
|
14
12
|
try {
|
|
15
|
-
|
|
16
|
-
path
|
|
17
|
-
|
|
18
|
-
return ret_data;
|
|
19
|
-
} catch (error) {
|
|
20
|
-
console.error("Error fetching data:", error.message);
|
|
13
|
+
// apiFetch にジェネリクス <T> を渡すことで戻り値に型が付く
|
|
14
|
+
const ret_data = await apiFetch({ path });
|
|
15
|
+
return ret_data;
|
|
21
16
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
//コンボボックスコントロールのレンダリング関数
|
|
29
|
-
var SelectControl = props => {
|
|
30
|
-
var {
|
|
31
|
-
selectedSlug,
|
|
32
|
-
label,
|
|
33
|
-
homeUrl,
|
|
34
|
-
fetchOptions
|
|
35
|
-
} = props;
|
|
36
|
-
var [options, setOptions] = element.useState([]);
|
|
37
|
-
element.useEffect(() => {
|
|
38
|
-
var fetchData = /*#__PURE__*/function () {
|
|
39
|
-
var _ref2 = _rollupPluginBabelHelpers.asyncToGenerator(function* () {
|
|
40
|
-
try {
|
|
41
|
-
var fetchedOptions = yield fetchOptions(homeUrl, props);
|
|
42
|
-
setOptions(fetchedOptions);
|
|
43
|
-
} catch (error) {
|
|
44
|
-
console.error("Error fetching data:", error.message);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
return function fetchData() {
|
|
48
|
-
return _ref2.apply(this, arguments);
|
|
49
|
-
};
|
|
50
|
-
}();
|
|
51
|
-
fetchData();
|
|
52
|
-
}, [fetchOptions, homeUrl, props.restBase, props.status, props.perPage, props.orderby, props.order, props.search]);
|
|
53
|
-
var selectedInfo = options.find(info => info.slug === selectedSlug);
|
|
54
|
-
return /*#__PURE__*/React.createElement(components.ComboboxControl, {
|
|
55
|
-
label: label,
|
|
56
|
-
options: options,
|
|
57
|
-
value: selectedInfo ? selectedInfo.value : -1,
|
|
58
|
-
onChange: newValue => {
|
|
59
|
-
var newInfo = options.find(info => info.value === newValue);
|
|
60
|
-
props.onChange(newInfo);
|
|
17
|
+
catch (error) {
|
|
18
|
+
// エラーメッセージの安全な取り出し
|
|
19
|
+
const errorMessage = error.message || "Unknown error occurred";
|
|
20
|
+
console.error("Error fetching data:", errorMessage);
|
|
21
|
+
// エラー時は undefined を返して呼び出し元で判定できるようにする
|
|
22
|
+
return undefined;
|
|
61
23
|
}
|
|
62
|
-
});
|
|
63
24
|
};
|
|
64
|
-
|
|
25
|
+
//コンボボックスコントロールのレンダリング関数
|
|
26
|
+
const SelectControl = (props) => {
|
|
27
|
+
const { selectedSlug, label, homeUrl, fetchOptions } = props;
|
|
28
|
+
const [options, setOptions] = element.useState([]);
|
|
29
|
+
element.useEffect(() => {
|
|
30
|
+
const fetchData = async () => {
|
|
31
|
+
try {
|
|
32
|
+
const fetchedOptions = await fetchOptions(homeUrl, props);
|
|
33
|
+
setOptions(fetchedOptions);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error("Error fetching data:", error.message);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
fetchData();
|
|
40
|
+
}, [
|
|
41
|
+
fetchOptions,
|
|
42
|
+
homeUrl,
|
|
43
|
+
props.restBase,
|
|
44
|
+
props.status,
|
|
45
|
+
props.perPage,
|
|
46
|
+
props.orderby,
|
|
47
|
+
props.order,
|
|
48
|
+
props.search,
|
|
49
|
+
]);
|
|
50
|
+
const selectedInfo = options.find((info) => info.slug === selectedSlug);
|
|
51
|
+
return (element.createElement(components.ComboboxControl, { label: label, options: options, value: selectedInfo ? selectedInfo.value : undefined, onChange: (newValue) => {
|
|
52
|
+
const newInfo = options.find((info) => info.value === newValue);
|
|
53
|
+
props.onChange(newInfo);
|
|
54
|
+
} }));
|
|
55
|
+
};
|
|
65
56
|
//選択コントロールのレンダリング関数
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
57
|
+
const ChoiceControl = (props) => {
|
|
58
|
+
const { selectedSlug, choiceItems, dispTaxonomies, type, blockMap, fetchFunction, } = props;
|
|
59
|
+
const [choices, setChoices] = element.useState([]);
|
|
60
|
+
element.useEffect(() => {
|
|
61
|
+
if (!selectedSlug)
|
|
62
|
+
return; //ポストタイプのスラッグが選択されていないときは処理終了
|
|
63
|
+
const fetchData = async () => {
|
|
64
|
+
try {
|
|
65
|
+
const fetchChoices = await fetchFunction(selectedSlug);
|
|
66
|
+
// ここでチェックを入れる
|
|
67
|
+
if (!fetchChoices) {
|
|
68
|
+
setChoices([]); // データがない場合は空配列にする
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
setChoices(fetchChoices);
|
|
72
|
+
//指定の投稿タイプに含まれないフィールドを削除する
|
|
73
|
+
pruneChoiceItemsByObjectKeys(fetchChoices[0], choiceItems);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error("Error fetching data:", error.message);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
fetchData();
|
|
80
|
+
}, [selectedSlug, fetchFunction]);
|
|
81
|
+
//選択肢が変わったときに選択されている項目の配列内容を更新するハンドラ
|
|
82
|
+
const handleChoiceChange = (checked, target, setItems) => {
|
|
83
|
+
if (checked) {
|
|
84
|
+
// targetが重複していない場合のみ追加
|
|
85
|
+
if (!setItems.some((item) => _.isEqual(item, target))) {
|
|
86
|
+
return [...setItems, target];
|
|
87
|
+
}
|
|
88
88
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
};
|
|
93
|
-
}();
|
|
94
|
-
fetchData();
|
|
95
|
-
}, [selectedSlug, fetchFunction]);
|
|
96
|
-
|
|
97
|
-
//選択肢が変わったときに選択されている項目の配列内容を更新するハンドラ
|
|
98
|
-
var handleChoiceChange = (checked, target, setItems) => {
|
|
99
|
-
if (checked) {
|
|
100
|
-
// targetが重複していない場合のみ追加
|
|
101
|
-
if (!setItems.some(item => _.isEqual(item, target))) {
|
|
102
|
-
return [...setItems, target];
|
|
103
|
-
}
|
|
104
|
-
} else {
|
|
105
|
-
// targetを配列から削除
|
|
106
|
-
return setItems.filter(item => !_.isEqual(item, target));
|
|
107
|
-
}
|
|
108
|
-
return setItems;
|
|
109
|
-
};
|
|
110
|
-
/**
|
|
111
|
-
* dataObj のキー一覧を「choiceItems と比較する形」に変換して Set で返す
|
|
112
|
-
* - 通常キー: そのまま
|
|
113
|
-
* - acf / meta: 子キーに `${parent}_` を付けたもの(例: acf_relate_url, meta_footnotes)
|
|
114
|
-
*/
|
|
115
|
-
function buildComparableKeySet(dataObj) {
|
|
116
|
-
var keySet = new Set();
|
|
117
|
-
if (!dataObj || typeof dataObj !== "object") return keySet;
|
|
118
|
-
for (var [key, val] of Object.entries(dataObj)) {
|
|
119
|
-
if ((key === "acf" || key === "meta") && val && typeof val === "object" && !Array.isArray(val)) {
|
|
120
|
-
for (var childKey of Object.keys(val)) {
|
|
121
|
-
keySet.add("".concat(key, "_").concat(childKey));
|
|
89
|
+
else {
|
|
90
|
+
// targetを配列から削除
|
|
91
|
+
return setItems.filter((item) => !_.isEqual(item, target));
|
|
122
92
|
}
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
keySet.add(key);
|
|
126
|
-
}
|
|
127
|
-
return keySet;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* choiceItems を dataObj のキーに合わせて削除する
|
|
132
|
-
* - choiceItems が string 配列でも、{value: "..."} の配列でも動くようにしてあります
|
|
133
|
-
*/
|
|
134
|
-
function pruneChoiceItemsByObjectKeys(dataObj, choiceItems) {
|
|
135
|
-
var validKeys = buildComparableKeySet(dataObj);
|
|
136
|
-
var getItemKey = item => {
|
|
137
|
-
var _ref4, _ref5, _item$value;
|
|
138
|
-
if (typeof item === "string") return item;
|
|
139
|
-
if (item && typeof item === "object") return (_ref4 = (_ref5 = (_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : item.key) !== null && _ref5 !== void 0 ? _ref5 : item.name) !== null && _ref4 !== void 0 ? _ref4 : "";
|
|
140
|
-
return "";
|
|
93
|
+
return setItems;
|
|
141
94
|
};
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
className: "group_area"
|
|
161
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
162
|
-
className: "group_label"
|
|
163
|
-
}, fieldLabel), /*#__PURE__*/React.createElement("div", {
|
|
164
|
-
key: fieldName,
|
|
165
|
-
className: "field_group"
|
|
166
|
-
}, _dispCustumFields(value, fieldName, isImage, onChange)));
|
|
167
|
-
} else {
|
|
168
|
-
if (key === "meta__acf_changed" || key === "meta_footnotes") return; //_acf_changedは対象外
|
|
169
|
-
|
|
170
|
-
//フィールドを表示するブロックの選択肢
|
|
171
|
-
var options = [{
|
|
172
|
-
value: "itmar/design-title",
|
|
173
|
-
label: "itmar/design-title"
|
|
174
|
-
}, {
|
|
175
|
-
value: "core/paragraph",
|
|
176
|
-
label: "core/paragraph"
|
|
177
|
-
}, {
|
|
178
|
-
value: "core/image",
|
|
179
|
-
label: "core/image"
|
|
180
|
-
}, {
|
|
181
|
-
value: "itmar/slide-mv",
|
|
182
|
-
label: "itmar/slide-mv"
|
|
183
|
-
}];
|
|
184
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
185
|
-
className: "itmar_custom_field_set"
|
|
186
|
-
}, /*#__PURE__*/React.createElement(components.ToggleControl, {
|
|
187
|
-
key: fieldName,
|
|
188
|
-
className: "field_choice",
|
|
189
|
-
label: fieldLabel,
|
|
190
|
-
checked: choiceItems.some(choiceField => choiceField === fieldName),
|
|
191
|
-
onChange: checked => {
|
|
192
|
-
var newChoiceFields = handleChoiceChange(checked, fieldName, choiceItems);
|
|
193
|
-
props.onChange(newChoiceFields);
|
|
194
|
-
}
|
|
195
|
-
}), !isImage && /*#__PURE__*/React.createElement(components.ComboboxControl, {
|
|
196
|
-
options: options,
|
|
197
|
-
value:
|
|
198
|
-
//blockMap[`${prefix ? groupLabel : ""}${key}`] || "itmar/design-title"
|
|
199
|
-
blockMap["".concat(prefix ? prefix + "." : "").concat(key)] || "itmar/design-title",
|
|
200
|
-
onChange: newValue => {
|
|
201
|
-
//const fieldKey = prefix ? `${groupLabel}${key}` : `${key}`;
|
|
202
|
-
var fieldKey = prefix ? "".concat(prefix, ".").concat(key) : "".concat(key);
|
|
203
|
-
var newBlockMap = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, blockMap), {}, {
|
|
204
|
-
[fieldKey]: newValue
|
|
205
|
-
});
|
|
206
|
-
props.onBlockMapChange(newBlockMap);
|
|
207
|
-
}
|
|
208
|
-
}));
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
};
|
|
212
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
213
|
-
className: "".concat(type, "_section")
|
|
214
|
-
}, type === "taxonomy" && choices.map((choice, index) => {
|
|
215
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
216
|
-
key: index,
|
|
217
|
-
className: "term_section"
|
|
218
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
219
|
-
className: "tax_label"
|
|
220
|
-
}, choice.name, /*#__PURE__*/React.createElement(components.ToggleControl, {
|
|
221
|
-
label: i18n.__("Display", "block-collections"),
|
|
222
|
-
checked: dispTaxonomies.some(tax => tax === choice.slug),
|
|
223
|
-
onChange: checked => {
|
|
224
|
-
var newChoiceFields = handleChoiceChange(checked, choice.slug, dispTaxonomies);
|
|
225
|
-
props.onSetDispTax(newChoiceFields);
|
|
226
|
-
}
|
|
227
|
-
})), choice.terms.map((term, index) => {
|
|
228
|
-
return /*#__PURE__*/React.createElement(components.CheckboxControl, {
|
|
229
|
-
className: "term_check",
|
|
230
|
-
key: index,
|
|
231
|
-
label: term.name,
|
|
232
|
-
checked: choiceItems.some(choiceTerm => {
|
|
233
|
-
return choiceTerm.taxonomy === choice.slug && choiceTerm.term.id === term.id;
|
|
234
|
-
}),
|
|
235
|
-
onChange: checked => {
|
|
236
|
-
var target = {
|
|
237
|
-
taxonomy: choice.slug,
|
|
238
|
-
term: {
|
|
239
|
-
id: term.id,
|
|
240
|
-
slug: term.slug,
|
|
241
|
-
name: term.name
|
|
95
|
+
/**
|
|
96
|
+
* dataObj のキー一覧を「choiceItems と比較する形」に変換して Set で返す
|
|
97
|
+
* - 通常キー: そのまま
|
|
98
|
+
* - acf / meta: 子キーに `${parent}_` を付けたもの(例: acf_relate_url, meta_footnotes)
|
|
99
|
+
*/
|
|
100
|
+
function buildComparableKeySet(dataObj) {
|
|
101
|
+
const keySet = new Set();
|
|
102
|
+
if (!dataObj || typeof dataObj !== "object")
|
|
103
|
+
return keySet;
|
|
104
|
+
for (const [key, val] of Object.entries(dataObj)) {
|
|
105
|
+
if ((key === "acf" || key === "meta") &&
|
|
106
|
+
val &&
|
|
107
|
+
typeof val === "object" &&
|
|
108
|
+
!Array.isArray(val)) {
|
|
109
|
+
for (const childKey of Object.keys(val)) {
|
|
110
|
+
keySet.add(`${key}_${childKey}`);
|
|
111
|
+
}
|
|
112
|
+
continue;
|
|
242
113
|
}
|
|
243
|
-
|
|
244
|
-
var newChoiceTerms = handleChoiceChange(checked, target, choiceItems);
|
|
245
|
-
props.onChange(newChoiceTerms);
|
|
114
|
+
keySet.add(key);
|
|
246
115
|
}
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
checked: choiceItems.some(choiceField => choiceField === "link"),
|
|
303
|
-
onChange: checked => {
|
|
304
|
-
var newChoiceFields = handleChoiceChange(checked, "link", choiceItems);
|
|
305
|
-
props.onChange(newChoiceFields);
|
|
306
|
-
}
|
|
307
|
-
}), /*#__PURE__*/React.createElement(components.ComboboxControl, {
|
|
308
|
-
options: [{
|
|
309
|
-
value: "itmar/design-button",
|
|
310
|
-
label: "itmar/design-button"
|
|
311
|
-
}, {
|
|
312
|
-
value: "itmar/design-title",
|
|
313
|
-
label: "itmar/design-title"
|
|
314
|
-
}],
|
|
315
|
-
value: blockMap["link"],
|
|
316
|
-
onChange: newValue => {
|
|
317
|
-
var newBlockMap = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, blockMap), {}, {
|
|
318
|
-
link: newValue
|
|
116
|
+
return keySet;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* choiceItems を dataObj のキーに合わせて削除する
|
|
120
|
+
* - choiceItems が string 配列でも、{value: "..."} の配列でも動くようにしてあります
|
|
121
|
+
*/
|
|
122
|
+
function pruneChoiceItemsByObjectKeys(dataObj, items) {
|
|
123
|
+
const validKeys = buildComparableKeySet(dataObj);
|
|
124
|
+
const getItemKey = (item) => {
|
|
125
|
+
if (typeof item === "string")
|
|
126
|
+
return item;
|
|
127
|
+
if (item && typeof item === "object")
|
|
128
|
+
return item.value ?? item.key ?? item.name ?? "";
|
|
129
|
+
return "";
|
|
130
|
+
};
|
|
131
|
+
const next = (items ?? []).filter((item) => validKeys.has(getItemKey(item)));
|
|
132
|
+
// ★ 配列の参照はそのまま、中身だけ置き換える
|
|
133
|
+
items.splice(0, items.length, ...next);
|
|
134
|
+
return items; // 必要なら返す
|
|
135
|
+
}
|
|
136
|
+
//階層化されたカスタムフィールドのフィールド名を表示する関数
|
|
137
|
+
const dispCustumFields = (obj, prefix = "", isImage = false) => {
|
|
138
|
+
return Object.entries(obj).map(([key, value]) => {
|
|
139
|
+
const fieldName = prefix ? `${prefix}.${key}` : key; //prefixはグループ名
|
|
140
|
+
const fieldLabel = key.replace(/^(meta_|acf_)/, "");
|
|
141
|
+
//オブジェクトであって配列でないものがグループと考える
|
|
142
|
+
if (typeof value === "object" &&
|
|
143
|
+
!Array.isArray(value) &&
|
|
144
|
+
value !== null) {
|
|
145
|
+
return (element.createElement("div", { className: "group_area", key: fieldName },
|
|
146
|
+
element.createElement("div", { className: "group_label" }, fieldLabel),
|
|
147
|
+
element.createElement("div", { className: "field_group" }, dispCustumFields(value, fieldName, isImage))));
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
if (key === "meta__acf_changed" || key === "meta_footnotes")
|
|
151
|
+
return null; //_acf_changedは対象外
|
|
152
|
+
//フィールドを表示するブロックの選択肢
|
|
153
|
+
const options = [
|
|
154
|
+
{ value: "itmar/design-title", label: "itmar/design-title" },
|
|
155
|
+
{ value: "core/paragraph", label: "core/paragraph" },
|
|
156
|
+
{ value: "core/image", label: "core/image" },
|
|
157
|
+
{ value: "itmar/slide-mv", label: "itmar/slide-mv" },
|
|
158
|
+
];
|
|
159
|
+
return (element.createElement("div", { className: "itmar_custom_field_set", key: fieldName },
|
|
160
|
+
element.createElement(components.ToggleControl, { className: "field_choice", label: fieldLabel, checked: choiceItems.some((choiceField) => choiceField === fieldName), onChange: (checked) => {
|
|
161
|
+
const newItems = handleChoiceChange(checked, fieldName, choiceItems);
|
|
162
|
+
props.onChange(newItems);
|
|
163
|
+
} }),
|
|
164
|
+
!isImage && (element.createElement(components.ComboboxControl, { options: options, value: blockMap[fieldName] || "itmar/design-title", onChange: (newValue) => {
|
|
165
|
+
props.onBlockMapChange({
|
|
166
|
+
...blockMap,
|
|
167
|
+
[fieldName]: newValue || "",
|
|
168
|
+
});
|
|
169
|
+
} }))));
|
|
170
|
+
}
|
|
319
171
|
});
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
className: "field_choice",
|
|
350
|
-
label: i18n.__("Content", "block-collections"),
|
|
351
|
-
checked: choiceItems.some(choiceField => choiceField === "content"),
|
|
352
|
-
onChange: checked => {
|
|
353
|
-
var newChoiceFields = handleChoiceChange(checked, "content", choiceItems);
|
|
354
|
-
props.onChange(newChoiceFields);
|
|
355
|
-
}
|
|
356
|
-
}), (choice.featured_media || choice.featured_media === 0) && /*#__PURE__*/React.createElement(components.ToggleControl, {
|
|
357
|
-
className: "field_choice",
|
|
358
|
-
label: i18n.__("Featured Image", "block-collections"),
|
|
359
|
-
checked: choiceItems.some(choiceField => choiceField === "featured_media"),
|
|
360
|
-
onChange: checked => {
|
|
361
|
-
var newChoiceFields = handleChoiceChange(checked, "featured_media", choiceItems);
|
|
362
|
-
props.onChange(newChoiceFields);
|
|
363
|
-
}
|
|
364
|
-
}), (metaFlg || acfFlg) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
365
|
-
className: "custom_field_label"
|
|
366
|
-
}, i18n.__("Custom Field", "block-collections")), /*#__PURE__*/React.createElement("div", {
|
|
367
|
-
className: "custom_field_area"
|
|
368
|
-
}, _dispCustumFields(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, Object.entries(choice.meta).reduce((acc, _ref0) => {
|
|
369
|
-
var [key, value] = _ref0;
|
|
370
|
-
return _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, acc), {}, {
|
|
371
|
-
["meta_".concat(key)]: value
|
|
372
|
-
});
|
|
373
|
-
}, {})), Object.entries(choice.acf).filter(_ref1 => {
|
|
374
|
-
var [key] = _ref1;
|
|
375
|
-
return !key.endsWith("_source");
|
|
376
|
-
}).reduce((acc, _ref10) => {
|
|
377
|
-
var [key, value] = _ref10;
|
|
378
|
-
return _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, acc), {}, {
|
|
379
|
-
["acf_".concat(key)]: value
|
|
380
|
-
});
|
|
381
|
-
}, {})), "", true))));
|
|
382
|
-
}));
|
|
172
|
+
};
|
|
173
|
+
return (element.createElement("div", { className: `${type}_section` },
|
|
174
|
+
type === "taxonomy" &&
|
|
175
|
+
choices.map((choice, index) => (element.createElement("div", { key: index, className: "term_section" },
|
|
176
|
+
element.createElement("div", { className: "tax_label" },
|
|
177
|
+
choice.name,
|
|
178
|
+
element.createElement(components.ToggleControl, { label: i18n.__("Display", "block-collections"), checked: dispTaxonomies.some((tax) => tax === choice.slug), onChange: (checked) => {
|
|
179
|
+
const newTax = handleChoiceChange(checked, choice.slug, dispTaxonomies);
|
|
180
|
+
props.onSetDispTax(newTax);
|
|
181
|
+
} })),
|
|
182
|
+
choice.terms?.map((term, tIndex) => (element.createElement(components.CheckboxControl, { key: tIndex, label: term.name, checked: choiceItems.some((c) => c.taxonomy === choice.slug && c.term.id === term.id), onChange: (checked) => {
|
|
183
|
+
const target = {
|
|
184
|
+
taxonomy: choice.slug,
|
|
185
|
+
term: { id: term.id, slug: term.slug, name: term.name },
|
|
186
|
+
};
|
|
187
|
+
props.onChange(handleChoiceChange(checked, target, choiceItems));
|
|
188
|
+
} })))))),
|
|
189
|
+
(type === "field" || type === "imgField") &&
|
|
190
|
+
choices.map((choice, index) => {
|
|
191
|
+
const isImgMode = type === "imgField";
|
|
192
|
+
return (element.createElement("div", { key: index, className: "field_section" },
|
|
193
|
+
!isImgMode && choice.title && (element.createElement(components.ToggleControl, { label: i18n.__("Title", "block-collections"), checked: choiceItems.includes("title"), onChange: (checked) => props.onChange(handleChoiceChange(checked, "title", choiceItems)) })),
|
|
194
|
+
element.createElement("div", { className: "custom_field_area" }, dispCustumFields({
|
|
195
|
+
...Object.entries(choice.meta || {}).reduce((acc, [k, v]) => ({ ...acc, [`meta_${k}`]: v }), {}),
|
|
196
|
+
...Object.entries(choice.acf || {})
|
|
197
|
+
.filter(([k]) => !k.endsWith("_source"))
|
|
198
|
+
.reduce((acc, [k, v]) => ({ ...acc, [`acf_${k}`]: v }), {}),
|
|
199
|
+
}, "", isImgMode))));
|
|
200
|
+
})));
|
|
383
201
|
};
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
var _ref11 = _rollupPluginBabelHelpers.asyncToGenerator(function* (home_url) {
|
|
388
|
-
var allPages = [];
|
|
389
|
-
var page = 1;
|
|
202
|
+
const fetchPagesOptions = async (home_url) => {
|
|
203
|
+
const allPages = [];
|
|
204
|
+
let page = 1;
|
|
390
205
|
while (true) {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
})
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
page++;
|
|
206
|
+
// apiFetchに型を指定
|
|
207
|
+
const items = await apiFetch({
|
|
208
|
+
path: url.addQueryArgs("/wp/v2/pages", {
|
|
209
|
+
status: "publish", // 公開のみ
|
|
210
|
+
per_page: 100, // 最大100
|
|
211
|
+
page,
|
|
212
|
+
// orderby: "title",
|
|
213
|
+
// order: "asc",
|
|
214
|
+
}),
|
|
215
|
+
});
|
|
216
|
+
allPages.push(...items);
|
|
217
|
+
// 100件未満ならこれが最後
|
|
218
|
+
if (!items || items.length < 100)
|
|
219
|
+
break;
|
|
220
|
+
page++;
|
|
407
221
|
}
|
|
408
|
-
|
|
409
222
|
// ページIDが-1である要素をホーム要素として作成
|
|
410
|
-
if (!allPages.some(p => p.id === -1)) {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
slug: ""
|
|
418
|
-
});
|
|
223
|
+
if (!allPages.some((p) => p.id === -1)) {
|
|
224
|
+
allPages.unshift({
|
|
225
|
+
id: -1,
|
|
226
|
+
title: { rendered: "ホーム" },
|
|
227
|
+
link: home_url,
|
|
228
|
+
slug: "",
|
|
229
|
+
});
|
|
419
230
|
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
value: p.id,
|
|
231
|
+
// 最終的な整形
|
|
232
|
+
const ret_pages = allPages.map((p) => ({
|
|
233
|
+
// ComboboxControl のために string に変換
|
|
234
|
+
value: String(p.id),
|
|
424
235
|
slug: p.slug,
|
|
425
|
-
label:
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
};
|
|
429
|
-
});
|
|
236
|
+
label: p.title?.rendered ?? "",
|
|
237
|
+
link: p.link || (p.slug ? `${home_url}/${p.slug}` : home_url),
|
|
238
|
+
}));
|
|
430
239
|
return ret_pages;
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
//アーカイブ情報取得RestAPI関数
|
|
438
|
-
var fetchArchiveOptions = /*#__PURE__*/function () {
|
|
439
|
-
var _ref12 = _rollupPluginBabelHelpers.asyncToGenerator(function* (home_url) {
|
|
440
|
-
var response = yield apiFetch({
|
|
441
|
-
path: "/wp/v2/types"
|
|
240
|
+
};
|
|
241
|
+
const fetchArchiveOptions = async (home_url) => {
|
|
242
|
+
// apiFetchの戻り値は、キーが投稿タイプ名のオブジェクト
|
|
243
|
+
const response = await apiFetch({
|
|
244
|
+
path: "/wp/v2/types",
|
|
442
245
|
});
|
|
443
|
-
|
|
246
|
+
let idCounter = 0;
|
|
444
247
|
return Object.keys(response).reduce((acc, key) => {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
248
|
+
const postType = response[key];
|
|
249
|
+
// アーカイブが有効なものだけを抽出
|
|
250
|
+
if (postType.has_archive === true) {
|
|
251
|
+
acc.push({
|
|
252
|
+
value: String(idCounter++),
|
|
253
|
+
slug: postType.slug,
|
|
254
|
+
rest_base: postType.rest_base,
|
|
255
|
+
link: `${home_url}/${postType.slug}`,
|
|
256
|
+
label: postType.name,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
else if (typeof postType.has_archive === "string") {
|
|
260
|
+
//アーカイブ名がついているとき
|
|
261
|
+
acc.push({
|
|
262
|
+
value: String(idCounter++),
|
|
263
|
+
slug: postType.slug,
|
|
264
|
+
rest_base: postType.rest_base,
|
|
265
|
+
link: `${home_url}/${postType.has_archive}`,
|
|
266
|
+
label: postType.name,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
return acc;
|
|
465
270
|
}, []);
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
if (!Array.isArray(posts) || posts.length === 0) break;
|
|
499
|
-
allPosts.push(...posts);
|
|
500
|
-
|
|
501
|
-
// これ以上ページがない(=最終ページ)と判断
|
|
502
|
-
if (posts.length < perPage) break;
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
273
|
+
* 1. 投稿データ取得RestAPI関数
|
|
274
|
+
*/
|
|
275
|
+
const fetchPostOptions = async (home_url, props = {}) => {
|
|
276
|
+
const perPage = Math.min(Number(props.perPage || 100), 100);
|
|
277
|
+
const status = props.status || "publish"; // 管理画面で下書き等も含めたいなら 'any' を検討
|
|
278
|
+
const orderby = props.orderby || "title";
|
|
279
|
+
const order = props.order || "asc";
|
|
280
|
+
const search = props.search ? String(props.search) : "";
|
|
281
|
+
const restBase = props.restBase || "";
|
|
282
|
+
const allPosts = [];
|
|
283
|
+
const maxPagesSafety = 50; // 念のための安全上限
|
|
284
|
+
for (let page = 1; page <= maxPagesSafety; page++) {
|
|
285
|
+
const params = new URLSearchParams();
|
|
286
|
+
params.set("per_page", String(perPage));
|
|
287
|
+
params.set("page", String(page));
|
|
288
|
+
params.set("status", status);
|
|
289
|
+
params.set("orderby", orderby);
|
|
290
|
+
params.set("order", order);
|
|
291
|
+
// 必要なフィールドだけ返して軽量化
|
|
292
|
+
params.set("_fields", "id,slug,title,link");
|
|
293
|
+
if (search)
|
|
294
|
+
params.set("search", search);
|
|
295
|
+
const path = `/wp/v2/${encodeURIComponent(restBase)}?${params.toString()}`;
|
|
296
|
+
const posts = await apiFetch({ path });
|
|
297
|
+
if (!Array.isArray(posts) || posts.length === 0)
|
|
298
|
+
break;
|
|
299
|
+
allPosts.push(...posts);
|
|
300
|
+
// これ以上ページがない(=最終ページ)と判断
|
|
301
|
+
if (posts.length < perPage)
|
|
302
|
+
break;
|
|
503
303
|
}
|
|
504
|
-
|
|
505
304
|
// title.rendered はHTMLを含むことがあるのでタグを除去
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
post_id: Number(post.id)
|
|
520
|
-
};
|
|
305
|
+
const stripTags = (html) => String(html || "")
|
|
306
|
+
.replace(/<[^>]*>/g, "")
|
|
307
|
+
.trim();
|
|
308
|
+
return allPosts.map((post) => {
|
|
309
|
+
const title = stripTags(post?.title?.rendered) || "(no title)";
|
|
310
|
+
return {
|
|
311
|
+
value: String(post.id), // 重要: stringに変換
|
|
312
|
+
label: title,
|
|
313
|
+
slug: post.slug,
|
|
314
|
+
link: post.link || `${home_url}/?p=${post.id}`,
|
|
315
|
+
rest_base: restBase,
|
|
316
|
+
post_id: Number(post.id),
|
|
317
|
+
};
|
|
521
318
|
});
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
if (!post_type) return;
|
|
532
|
-
var response = yield apiFetch({
|
|
533
|
-
path: "/wp/v2/types/".concat(post_type, "?context=edit")
|
|
319
|
+
};
|
|
320
|
+
/**
|
|
321
|
+
* 2. タクソノミー取得RestAPI関数
|
|
322
|
+
*/
|
|
323
|
+
const restTaxonomies = async (post_type) => {
|
|
324
|
+
if (!post_type)
|
|
325
|
+
return;
|
|
326
|
+
const response = await apiFetch({
|
|
327
|
+
path: `/wp/v2/types/${post_type}?context=edit`,
|
|
534
328
|
});
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
path: "/wp/v2/taxonomies/".concat(slug, "?context=edit")
|
|
329
|
+
const taxonomies = response.taxonomies;
|
|
330
|
+
const taxonomyPromises = taxonomies.map(async (slug) => {
|
|
331
|
+
const taxonomyResponse = await apiFetch({
|
|
332
|
+
path: `/wp/v2/taxonomies/${slug}?context=edit`,
|
|
540
333
|
});
|
|
541
|
-
|
|
542
|
-
|
|
334
|
+
const terms = await apiFetch({
|
|
335
|
+
path: `/wp/v2/${taxonomyResponse.rest_base}`,
|
|
543
336
|
});
|
|
544
337
|
return {
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
338
|
+
slug: slug,
|
|
339
|
+
name: taxonomyResponse.name,
|
|
340
|
+
rest_base: taxonomyResponse.rest_base,
|
|
341
|
+
terms: terms,
|
|
549
342
|
};
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
// taxonomyがまだ存在しない場合は初期化
|
|
571
|
-
if (!acc[taxonomy]) {
|
|
572
|
-
acc[taxonomy] = [];
|
|
343
|
+
});
|
|
344
|
+
return await Promise.all(taxonomyPromises);
|
|
345
|
+
};
|
|
346
|
+
const termToDispObj = (terms, connectString) => {
|
|
347
|
+
const result = terms.reduce((acc, item) => {
|
|
348
|
+
const taxonomy = item.taxonomy;
|
|
349
|
+
const termName = item.term.name;
|
|
350
|
+
// taxonomyがまだ存在しない場合は初期化
|
|
351
|
+
if (!acc[taxonomy]) {
|
|
352
|
+
acc[taxonomy] = [];
|
|
353
|
+
}
|
|
354
|
+
// term.nameを配列に追加
|
|
355
|
+
acc[taxonomy].push(termName);
|
|
356
|
+
return acc;
|
|
357
|
+
}, {});
|
|
358
|
+
// 各taxonomyの配列を connectString でつなげて文字列化
|
|
359
|
+
const displayObj = {};
|
|
360
|
+
for (const taxonomy in result) {
|
|
361
|
+
displayObj[taxonomy] = result[taxonomy].join(connectString);
|
|
573
362
|
}
|
|
574
|
-
|
|
575
|
-
// term.nameを配列に追加
|
|
576
|
-
acc[taxonomy].push(termName);
|
|
577
|
-
return acc;
|
|
578
|
-
}, {});
|
|
579
|
-
|
|
580
|
-
// 各taxonomyの配列を connectString でつなげて文字列化
|
|
581
|
-
for (var taxonomy in result) {
|
|
582
|
-
result[taxonomy] = result[taxonomy].join(connectString);
|
|
583
|
-
}
|
|
584
|
-
return result;
|
|
363
|
+
return displayObj;
|
|
585
364
|
};
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
365
|
+
/**
|
|
366
|
+
* 4. フィールド情報取得RestAPI関数
|
|
367
|
+
*/
|
|
368
|
+
const restFieldes = async (rest_base) => {
|
|
369
|
+
const selectedFields = [
|
|
370
|
+
"title",
|
|
371
|
+
"content",
|
|
372
|
+
"date",
|
|
373
|
+
"excerpt",
|
|
374
|
+
"featured_media",
|
|
375
|
+
"link",
|
|
376
|
+
"meta",
|
|
377
|
+
"acf",
|
|
378
|
+
];
|
|
379
|
+
const fieldsParam = selectedFields.join(",");
|
|
380
|
+
return await apiFetch({
|
|
381
|
+
path: `/wp/v2/${rest_base}?_fields=${fieldsParam}&per_page=1&order=desc`,
|
|
596
382
|
});
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
})
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
383
|
+
};
|
|
384
|
+
// --- 各コンポーネントの型定義 ---
|
|
385
|
+
/**
|
|
386
|
+
* 固定ページ選択用
|
|
387
|
+
*/
|
|
388
|
+
const PageSelectControl = (props) => element.createElement(SelectControl, { ...props, fetchOptions: fetchPagesOptions });
|
|
389
|
+
/**
|
|
390
|
+
* アーカイブ(投稿タイプ)選択用
|
|
391
|
+
*/
|
|
392
|
+
const ArchiveSelectControl = (props) => element.createElement(SelectControl, { ...props, fetchOptions: fetchArchiveOptions });
|
|
393
|
+
/**
|
|
394
|
+
* 投稿(各投稿タイプの中身)選択用
|
|
395
|
+
*/
|
|
396
|
+
const PostSelectControl = (props) => element.createElement(SelectControl, { ...props, fetchOptions: fetchPostOptions });
|
|
397
|
+
/**
|
|
398
|
+
* タクソノミー・ターム選択用
|
|
399
|
+
*/
|
|
400
|
+
const TermChoiceControl = (props) => element.createElement(ChoiceControl, { ...props, fetchFunction: restTaxonomies });
|
|
401
|
+
/**
|
|
402
|
+
* カスタムフィールド(ACF/Meta)選択用
|
|
403
|
+
*/
|
|
404
|
+
const FieldChoiceControl = (props) => (element.createElement(ChoiceControl, { ...props, type: "field" // フィールド用であることを固定
|
|
405
|
+
, fetchFunction: restFieldes }));
|
|
618
406
|
|
|
619
407
|
exports.ArchiveSelectControl = ArchiveSelectControl;
|
|
620
408
|
exports.FieldChoiceControl = FieldChoiceControl;
|