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