@plaudit/gutenberg-api-extensions 2.8.0 → 2.10.0
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/build/blocks/common-native-property-implementations.d.ts +118 -0
- package/build/blocks/common-native-property-implementations.js +141 -20
- package/build/blocks/common-native-property-implementations.js.map +1 -1
- package/build/blocks/index.d.ts +5 -0
- package/build/blocks/layered-styles.d.ts +31 -0
- package/build/blocks/layered-styles.js +9 -7
- package/build/blocks/layered-styles.js.map +1 -1
- package/build/blocks/simple-block.d.ts +22 -0
- package/build/blocks/simple-block.js +10 -6
- package/build/blocks/simple-block.js.map +1 -1
- package/build/blocks/simple-native-property.d.ts +30 -0
- package/build/blocks/simple-native-property.js +106 -95
- package/build/blocks/simple-native-property.js.map +1 -1
- package/build/controls/AsynchronousFormTokenField.d.ts +20 -0
- package/build/controls/AsynchronousFormTokenField.js +23 -12
- package/build/controls/AsynchronousFormTokenField.js.map +1 -1
- package/build/controls/ExtendedPostPicker.d.ts +13 -0
- package/build/controls/ExtendedPostPicker.js +5 -10
- package/build/controls/ExtendedPostPicker.js.map +1 -1
- package/build/controls/InspectorPanel.d.ts +6 -0
- package/build/controls/InspectorPanel.js +3 -2
- package/build/controls/InspectorPanel.js.map +1 -1
- package/build/controls/LazySuggestionsComboboxControl.d.ts +7 -0
- package/build/controls/LazySuggestionsComboboxControl.js +70 -0
- package/build/controls/LazySuggestionsComboboxControl.js.map +1 -0
- package/build/controls/PickOne.d.ts +19 -0
- package/build/controls/PickOne.js +8 -7
- package/build/controls/PickOne.js.map +1 -1
- package/build/controls/SimpleToggle.d.ts +3 -0
- package/build/controls/SimpleToggle.js +2 -2
- package/build/controls/SimpleToggle.js.map +1 -1
- package/build/controls/SortableItemsControl.d.ts +11 -0
- package/build/controls/SortableItemsControl.js +154 -0
- package/build/controls/SortableItemsControl.js.map +1 -0
- package/{src/controls/index.ts → build/controls/index.d.ts} +1 -0
- package/build/controls/index.js +1 -0
- package/build/controls/index.js.map +1 -1
- package/build/controls/shared.d.ts +8 -0
- package/build/controls/shared.js +7 -0
- package/build/controls/shared.js.map +1 -0
- package/build/controls/types.d.ts +12 -0
- package/build/lib/plaudit-icons/column-1.d.ts +2 -0
- package/build/lib/plaudit-icons/column-1.js +3 -2
- package/build/lib/plaudit-icons/column-1.js.map +1 -1
- package/build/lib/plaudit-icons/column-2.d.ts +2 -0
- package/build/lib/plaudit-icons/column-2.js +3 -2
- package/build/lib/plaudit-icons/column-2.js.map +1 -1
- package/build/lib/plaudit-icons/column-3.d.ts +2 -0
- package/build/lib/plaudit-icons/column-3.js +3 -2
- package/build/lib/plaudit-icons/column-3.js.map +1 -1
- package/build/lib/plaudit-icons/placement-center.d.ts +2 -0
- package/build/lib/plaudit-icons/placement-center.js +3 -2
- package/build/lib/plaudit-icons/placement-center.js.map +1 -1
- package/build/lib/plaudit-icons/placement-end.d.ts +2 -0
- package/build/lib/plaudit-icons/placement-end.js +3 -2
- package/build/lib/plaudit-icons/placement-end.js.map +1 -1
- package/build/lib/plaudit-icons/placement-start.d.ts +2 -0
- package/build/lib/plaudit-icons/placement-start.js +3 -2
- package/build/lib/plaudit-icons/placement-start.js.map +1 -1
- package/build/lib/plaudit-icons/placement-stretch.d.ts +2 -0
- package/build/lib/plaudit-icons/placement-stretch.js +3 -2
- package/build/lib/plaudit-icons/placement-stretch.js.map +1 -1
- package/build/lib/plaudit-icons/plaudit-icon.d.ts +2 -0
- package/build/lib/plaudit-icons/plaudit-icon.js +3 -2
- package/build/lib/plaudit-icons/plaudit-icon.js.map +1 -1
- package/build/lib/plaudit-icons/reusable-block-marker.d.ts +2 -0
- package/build/lib/plaudit-icons/reusable-block-marker.js +3 -2
- package/build/lib/plaudit-icons/reusable-block-marker.js.map +1 -1
- package/{src/lib/plaudit-icons.ts → build/lib/plaudit-icons.d.ts} +0 -4
- package/package.json +14 -14
- package/src/blocks/common-native-property-implementations.tsx +0 -271
- package/src/blocks/index.ts +0 -12
- package/src/blocks/layered-styles.tsx +0 -108
- package/src/blocks/simple-block.tsx +0 -72
- package/src/blocks/simple-native-property.tsx +0 -200
- package/src/controls/AsynchronousFormTokenField.tsx +0 -151
- package/src/controls/ExtendedPostPicker.tsx +0 -50
- package/src/controls/InspectorPanel.tsx +0 -16
- package/src/controls/PickOne.tsx +0 -80
- package/src/controls/SimpleToggle.tsx +0 -9
- package/src/controls/types.ts +0 -11
- package/src/lib/plaudit-icons/column-1.tsx +0 -8
- package/src/lib/plaudit-icons/column-2.tsx +0 -8
- package/src/lib/plaudit-icons/column-3.tsx +0 -8
- package/src/lib/plaudit-icons/placement-center.tsx +0 -5
- package/src/lib/plaudit-icons/placement-end.tsx +0 -5
- package/src/lib/plaudit-icons/placement-start.tsx +0 -5
- package/src/lib/plaudit-icons/placement-stretch.tsx +0 -5
- package/src/lib/plaudit-icons/plaudit-icon.tsx +0 -6
- package/src/lib/plaudit-icons/reusable-block-marker.tsx +0 -5
- /package/{src/index.ts → build/index.d.ts} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ActualBlockEditProps } from "./common-native-property-implementations";
|
|
2
|
+
import { type ReactElement } from "react";
|
|
3
|
+
export type InspectorPanelGroup = 'default' | 'advanced' | 'background' | 'border' | 'color' | 'dimensions' | 'effects' | 'filter' | 'list' | 'position' | 'settings' | 'styles' | 'typography';
|
|
4
|
+
type GenericSimpleNativeProperty<T, V extends 'string' | 'number' | 'boolean' | 'array' | 'object'> = {
|
|
5
|
+
name: string;
|
|
6
|
+
type: V;
|
|
7
|
+
enum?: T[];
|
|
8
|
+
default?: T;
|
|
9
|
+
alwaysStore?: boolean;
|
|
10
|
+
renderer(value: T | undefined, onChange: (v: T | undefined) => void): ReactElement;
|
|
11
|
+
condition?(blockEditProps: ActualBlockEditProps): boolean;
|
|
12
|
+
};
|
|
13
|
+
export type SimpleNativeProperty = GenericSimpleNativeProperty<string, 'string'> & {
|
|
14
|
+
enum?: string[];
|
|
15
|
+
} | GenericSimpleNativeProperty<number, 'number'> & {
|
|
16
|
+
enum?: number[];
|
|
17
|
+
} | GenericSimpleNativeProperty<boolean, 'boolean'> | GenericSimpleNativeProperty<any[], 'array'> | GenericSimpleNativeProperty<Record<string | number, unknown>, 'object'>;
|
|
18
|
+
export type SimpleNativePanel = {
|
|
19
|
+
title: string;
|
|
20
|
+
group?: InspectorPanelGroup;
|
|
21
|
+
initialOpen?: boolean;
|
|
22
|
+
properties: SimpleNativeProperty[];
|
|
23
|
+
condition?(blockEditProps: ActualBlockEditProps): boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare function registerSimpleNativeProperties(config: {
|
|
26
|
+
block: `${string}/${string}` | Array<`${string}/${string}`>;
|
|
27
|
+
panel: SimpleNativePanel | Array<SimpleNativePanel>;
|
|
28
|
+
}): void;
|
|
29
|
+
export declare function installSimpleNativePropertiesSupport(): void;
|
|
30
|
+
export {};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { createElement as _createElement } from "react";
|
|
2
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
1
|
import { createHigherOrderComponent } from "@wordpress/compose";
|
|
4
2
|
import { addFilter } from "@wordpress/hooks";
|
|
5
3
|
import { InspectorPanel } from "../controls";
|
|
4
|
+
import React from "react";
|
|
6
5
|
export function registerSimpleNativeProperties(config) {
|
|
7
6
|
const simpleNativePanels = window.plauditSimpleNativePanels ?? (window.plauditSimpleNativePanels = {});
|
|
8
7
|
if (Array.isArray(config.block)) {
|
|
@@ -29,38 +28,41 @@ export function installSimpleNativePropertiesSupport() {
|
|
|
29
28
|
}
|
|
30
29
|
window.plauditSimpleNativePropertiesSupportInstalled = true;
|
|
31
30
|
const simpleNativePanels = window.plauditSimpleNativePanels ?? (window.plauditSimpleNativePanels = {});
|
|
31
|
+
function attachSNP(property, injectableProperties) {
|
|
32
|
+
const attrPath = property.name.split('.');
|
|
33
|
+
if (attrPath.length === 1) {
|
|
34
|
+
injectableProperties[property.name] = { type: property.type, default: property.alwaysStore ? undefined : property.default };
|
|
35
|
+
if ('enum' in property) {
|
|
36
|
+
injectableProperties[property.name].enum = property.enum;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
let actualProp = injectableProperties[attrPath[0]];
|
|
41
|
+
if (actualProp === undefined) {
|
|
42
|
+
injectableProperties[attrPath[0]] = actualProp = { type: "object" };
|
|
43
|
+
}
|
|
44
|
+
else if (actualProp.type !== "object") {
|
|
45
|
+
throw new Error(`Property type collision on ${property.name}. Attempted treat the property as an object when it was already a ${actualProp.type}`);
|
|
46
|
+
}
|
|
47
|
+
if (property.default !== undefined) {
|
|
48
|
+
if (actualProp.default === undefined) {
|
|
49
|
+
actualProp.default = {};
|
|
50
|
+
}
|
|
51
|
+
let target = actualProp.default;
|
|
52
|
+
for (let i = 1; i < attrPath.length - 1; i++) {
|
|
53
|
+
target = target[attrPath[i]] = {};
|
|
54
|
+
}
|
|
55
|
+
target[attrPath[attrPath.length - 1]] = property.default;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
32
59
|
addFilter('blocks.registerBlockType', 'plaudit/gutenberg-api-extensions/attach-simple-native-properties', (atts) => {
|
|
33
60
|
const blockSimpleNativePanels = simpleNativePanels[atts.name];
|
|
34
61
|
if (blockSimpleNativePanels) {
|
|
35
62
|
const injectableProperties = {};
|
|
36
63
|
for (const blockSimpleNativePanel of blockSimpleNativePanels) {
|
|
37
64
|
for (const property of blockSimpleNativePanel.properties) {
|
|
38
|
-
|
|
39
|
-
if (attrPath.length === 1) {
|
|
40
|
-
injectableProperties[property.name] = { type: property.type, default: property.alwaysStore ? undefined : property.default };
|
|
41
|
-
if ('enum' in property) {
|
|
42
|
-
injectableProperties[property.name].enum = property.enum;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
let actualProp = injectableProperties[attrPath[0]];
|
|
47
|
-
if (actualProp === undefined) {
|
|
48
|
-
injectableProperties[attrPath[0]] = actualProp = { type: "object" };
|
|
49
|
-
}
|
|
50
|
-
else if (actualProp.type !== "object") {
|
|
51
|
-
throw new Error(`Property type collision on ${property.name}. Attempted treat the property as an object when it was already a ${actualProp.type}`);
|
|
52
|
-
}
|
|
53
|
-
if (property.default !== undefined) {
|
|
54
|
-
if (actualProp.default === undefined) {
|
|
55
|
-
actualProp.default = {};
|
|
56
|
-
}
|
|
57
|
-
let target = actualProp.default;
|
|
58
|
-
for (let i = 1; i < attrPath.length - 1; i++) {
|
|
59
|
-
target = target[attrPath[i]] = {};
|
|
60
|
-
}
|
|
61
|
-
target[attrPath[attrPath.length - 1]] = property.default;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
65
|
+
attachSNP(property, injectableProperties);
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
for (const [name, config] of Object.entries(injectableProperties)) {
|
|
@@ -83,78 +85,87 @@ export function installSimpleNativePropertiesSupport() {
|
|
|
83
85
|
currentLayer[attrPath[attrPath.length - 1]] = value;
|
|
84
86
|
blockEditProps.setAttributes({ [attrPath[0]]: payload });
|
|
85
87
|
}
|
|
88
|
+
function getExistingValue(blockEditProps, prop) {
|
|
89
|
+
const propPath = prop.name.split('.');
|
|
90
|
+
if (propPath.length === 1) {
|
|
91
|
+
let existingValue = blockEditProps.attributes[prop.name];
|
|
92
|
+
if (existingValue === undefined && prop.default !== undefined) {
|
|
93
|
+
existingValue = prop.default;
|
|
94
|
+
blockEditProps.setAttributes({ [prop.name]: prop.default });
|
|
95
|
+
}
|
|
96
|
+
return existingValue;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
let graphExistingValue = blockEditProps.attributes[propPath[0]];
|
|
100
|
+
if (graphExistingValue === undefined) {
|
|
101
|
+
blockEditProps.attributes[propPath[0]] = graphExistingValue = {};
|
|
102
|
+
}
|
|
103
|
+
for (let i = 1; i < propPath.length; i++) {
|
|
104
|
+
if (graphExistingValue[propPath[i]] === undefined) {
|
|
105
|
+
for (; i < propPath.length - 1; i++) {
|
|
106
|
+
graphExistingValue = graphExistingValue[propPath[i]] = {};
|
|
107
|
+
}
|
|
108
|
+
graphExistingValue[propPath[propPath.length - 1]] = prop.default;
|
|
109
|
+
if (prop.default !== undefined) {
|
|
110
|
+
blockEditProps.setAttributes({ [propPath[0]]: blockEditProps.attributes[propPath[0]] });
|
|
111
|
+
}
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
graphExistingValue = graphExistingValue[propPath[i]];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return graphExistingValue ?? prop.default;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function renderPropertyComponent(blockEditProps, prop) {
|
|
122
|
+
let existingValue = getExistingValue(blockEditProps, prop);
|
|
123
|
+
let ele;
|
|
124
|
+
if (prop.type === "array") { // If the value is not an array or is a sparse array, then it will cause unrecoverable errors upon conversion to PHP
|
|
125
|
+
if (existingValue !== undefined && (!Array.isArray(existingValue) || existingValue.length > existingValue.filter(() => true).length)) {
|
|
126
|
+
throw new Error(`Invalid value passed to an array-type property: ${existingValue}`);
|
|
127
|
+
}
|
|
128
|
+
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
129
|
+
}
|
|
130
|
+
else if (prop.type === "object") {
|
|
131
|
+
if (existingValue !== undefined && (Array.isArray(existingValue) || typeof existingValue !== 'object')) {
|
|
132
|
+
throw new Error(`Invalid value passed to an object-type property: ${existingValue}`);
|
|
133
|
+
}
|
|
134
|
+
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
135
|
+
}
|
|
136
|
+
else if (prop.type === "boolean") {
|
|
137
|
+
if (typeof existingValue !== 'boolean' && existingValue !== undefined) {
|
|
138
|
+
existingValue = !!existingValue;
|
|
139
|
+
}
|
|
140
|
+
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
141
|
+
}
|
|
142
|
+
else if (prop.type === "string") {
|
|
143
|
+
if (typeof existingValue !== 'string' && existingValue !== undefined) {
|
|
144
|
+
existingValue = existingValue.toString();
|
|
145
|
+
}
|
|
146
|
+
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
if (typeof existingValue !== 'number' && existingValue !== undefined) {
|
|
150
|
+
existingValue = parseFloat(existingValue);
|
|
151
|
+
}
|
|
152
|
+
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
153
|
+
}
|
|
154
|
+
return prop.condition === undefined || prop.condition(blockEditProps) ? ele : undefined;
|
|
155
|
+
}
|
|
86
156
|
addFilter('editor.BlockEdit', 'plaudit/gutenberg-api-extensions/simple-native-properties', createHigherOrderComponent(BlockEdit => (blockEditProps) => {
|
|
87
157
|
const blockSimpleNativePanels = simpleNativePanels[blockEditProps.name];
|
|
88
158
|
if (!blockSimpleNativePanels) {
|
|
89
|
-
return
|
|
159
|
+
return React.createElement(BlockEdit, { ...blockEditProps });
|
|
90
160
|
}
|
|
91
161
|
let keyIndex = 0;
|
|
92
|
-
return
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
existingValue = prop.default;
|
|
100
|
-
blockEditProps.setAttributes({ [prop.name]: prop.default });
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
let graphExistingValue = blockEditProps.attributes[propPath[0]];
|
|
105
|
-
if (graphExistingValue === undefined) {
|
|
106
|
-
blockEditProps.attributes[propPath[0]] = graphExistingValue = {};
|
|
107
|
-
}
|
|
108
|
-
for (let i = 1; i < propPath.length; i++) {
|
|
109
|
-
if (graphExistingValue[propPath[i]] === undefined) {
|
|
110
|
-
for (; i < propPath.length - 1; i++) {
|
|
111
|
-
graphExistingValue = graphExistingValue[propPath[i]] = {};
|
|
112
|
-
}
|
|
113
|
-
graphExistingValue[propPath[propPath.length - 1]] = existingValue = prop.default;
|
|
114
|
-
blockEditProps.setAttributes({ [propPath[0]]: blockEditProps.attributes[propPath[0]] });
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
graphExistingValue = graphExistingValue[propPath[i]];
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
existingValue = graphExistingValue ?? prop.default;
|
|
122
|
-
}
|
|
123
|
-
let ele;
|
|
124
|
-
if (prop.type === "array") { // If the value is not an array or is a sparse array, then it will cause unrecoverable errors upon conversion to PHP
|
|
125
|
-
if (!Array.isArray(existingValue) || existingValue.length > existingValue.filter(() => true).length) {
|
|
126
|
-
throw new Error(`Invalid value passed to an array-type property: ${existingValue}`);
|
|
127
|
-
}
|
|
128
|
-
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
129
|
-
}
|
|
130
|
-
else if (prop.type === "object") {
|
|
131
|
-
if (Array.isArray(existingValue) || typeof existingValue !== 'object') {
|
|
132
|
-
throw new Error(`Invalid value passed to an object-type property: ${existingValue}`);
|
|
133
|
-
}
|
|
134
|
-
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
135
|
-
}
|
|
136
|
-
else if (prop.type === "boolean") {
|
|
137
|
-
if (typeof existingValue !== 'boolean' && existingValue !== undefined) {
|
|
138
|
-
existingValue = !!existingValue;
|
|
139
|
-
}
|
|
140
|
-
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
141
|
-
}
|
|
142
|
-
else if (prop.type === "string") {
|
|
143
|
-
if (typeof existingValue !== 'string' && existingValue !== undefined) {
|
|
144
|
-
existingValue = existingValue.toString();
|
|
145
|
-
}
|
|
146
|
-
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
if (typeof existingValue !== 'number' && existingValue !== undefined) {
|
|
150
|
-
existingValue = parseFloat(existingValue);
|
|
151
|
-
}
|
|
152
|
-
ele = prop.renderer(existingValue, value => setDottedAttribute(blockEditProps, prop.name, value));
|
|
153
|
-
}
|
|
154
|
-
return prop.condition === undefined || prop.condition(blockEditProps) ? ele : undefined;
|
|
155
|
-
}).filter((ele) => ele !== undefined);
|
|
156
|
-
return _createElement(InspectorPanel, { ...p, condition: () => items.length > 0 && (p.condition === undefined || p.condition(blockEditProps)), key: `plaudit-simple-native-property-${keyIndex++}` }, ...items);
|
|
157
|
-
})] });
|
|
162
|
+
return React.createElement(React.Fragment, null,
|
|
163
|
+
React.createElement(BlockEdit, { ...blockEditProps }),
|
|
164
|
+
...blockSimpleNativePanels.map(p => {
|
|
165
|
+
const items = p.properties.map(prop => renderPropertyComponent(blockEditProps, prop))
|
|
166
|
+
.filter((ele) => ele !== undefined);
|
|
167
|
+
return React.createElement(InspectorPanel, { ...p, condition: () => items.length > 0 && (p.condition === undefined || p.condition(blockEditProps)), key: `plaudit-simple-native-property-${keyIndex++}` }, ...items);
|
|
168
|
+
}));
|
|
158
169
|
}, 'plauditGutenbergApiExtensionsSimpleNativeProperties'));
|
|
159
170
|
}
|
|
160
171
|
//# sourceMappingURL=simple-native-property.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-native-property.js","sourceRoot":"","sources":["../../src/blocks/simple-native-property.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"simple-native-property.js","sourceRoot":"","sources":["../../src/blocks/simple-native-property.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TokenItem } from "@wordpress/components/build-types/form-token-field/types";
|
|
2
|
+
import React from "react";
|
|
3
|
+
export declare const enum ValidationState {
|
|
4
|
+
Valid = "success",
|
|
5
|
+
Invalid = "error",
|
|
6
|
+
Validating = "validating"
|
|
7
|
+
}
|
|
8
|
+
export interface AsynchronousFormTokenFieldProps {
|
|
9
|
+
label: string;
|
|
10
|
+
help?: string;
|
|
11
|
+
value?: string[];
|
|
12
|
+
onChange: (value: string[]) => void;
|
|
13
|
+
validationQuery(tokens: string[]): Promise<Array<TokenItem>>;
|
|
14
|
+
suggestionQuery(input: string): Promise<Array<string>>;
|
|
15
|
+
makeTokenFromSuggestion(suggestion: string): TokenItem;
|
|
16
|
+
validValues: Map<string, ValidationState>;
|
|
17
|
+
validator?: (value: string) => boolean;
|
|
18
|
+
multiple?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function AsynchronousFormTokenField(props: AsynchronousFormTokenFieldProps): React.JSX.Element;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
1
|
import { Spinner, FormTokenField } from '@wordpress/components';
|
|
3
2
|
import { __ } from "@wordpress/i18n";
|
|
4
3
|
import { useEffect, useState } from '@wordpress/element';
|
|
5
4
|
import debounce from "debounce";
|
|
5
|
+
import React from "react";
|
|
6
6
|
// The strange values correspond to the literals that are expected by TokenItem.status, which allows the assignment code to be cleaner
|
|
7
7
|
export var ValidationState;
|
|
8
8
|
(function (ValidationState) {
|
|
@@ -83,30 +83,41 @@ export function AsynchronousFormTokenField(props) {
|
|
|
83
83
|
}, 500)
|
|
84
84
|
}));
|
|
85
85
|
useEffect(() => {
|
|
86
|
-
props.validationQuery(props.value).then(data => {
|
|
86
|
+
props.validationQuery(props.value ?? []).then(data => {
|
|
87
87
|
const tokenLabels = new Map();
|
|
88
88
|
for (const rep of data) {
|
|
89
89
|
tokenLabels.set(rep.value, rep.title);
|
|
90
90
|
props.validValues.set(rep.value, ValidationState.Valid);
|
|
91
91
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
props.validValues.
|
|
92
|
+
if (props.value) {
|
|
93
|
+
for (const value of props.value) {
|
|
94
|
+
if (!props.validValues.has(value)) {
|
|
95
|
+
props.validValues.set(value, ValidationState.Invalid);
|
|
96
|
+
}
|
|
95
97
|
}
|
|
96
98
|
}
|
|
97
|
-
setCurrentTokens(props.value
|
|
99
|
+
setCurrentTokens(props.value?.map(value => ({ value, title: tokenLabels.get(value) ?? value, status: props.validValues.get(value) })) ?? []);
|
|
98
100
|
setIsInitializing(false);
|
|
99
101
|
});
|
|
100
102
|
}, []);
|
|
101
103
|
useEffect(() => myValidationRequestQueue.trigger(currentTokens), [currentTokens]);
|
|
102
104
|
if (isInitializing) {
|
|
103
|
-
return
|
|
105
|
+
return React.createElement(Spinner, null);
|
|
104
106
|
}
|
|
105
107
|
const tokenTitleMappings = new Map(currentTokens.map(currentToken => [currentToken.value, currentToken.title]));
|
|
106
|
-
return
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
return React.createElement(React.Fragment, null,
|
|
109
|
+
React.createElement(FormTokenField, { value: currentTokens, label: props.label, placeholder: "Start typing to see suggestions", suggestions: suggestions, onChange: tokens => {
|
|
110
|
+
const tokenItems = tokens.map(token => typeof token === 'string' ? props.makeTokenFromSuggestion(token) : token);
|
|
111
|
+
props.onChange(tokenItems.map(token => token.value));
|
|
112
|
+
setCurrentTokens(tokenItems);
|
|
113
|
+
}, __experimentalValidateInput: props.validator, __experimentalAutoSelectFirstMatch: true, displayTransform: token => tokenTitleMappings.get(token) ?? token, onInputChange: mySuggestionRequestQueue.debouncer }),
|
|
114
|
+
props.help && React.createElement("div", null,
|
|
115
|
+
React.createElement("span", { className: "components-form-token-field__help" }, props.help)),
|
|
116
|
+
isLoading && React.createElement("div", null,
|
|
117
|
+
React.createElement(Spinner, null),
|
|
118
|
+
React.createElement("span", { className: "components-form-token-field__help" }, __("Updating Suggestions"))),
|
|
119
|
+
isValidating && React.createElement("div", null,
|
|
120
|
+
React.createElement(Spinner, null),
|
|
121
|
+
React.createElement("span", { className: "components-form-token-field__help" }, __("Validating"))));
|
|
111
122
|
}
|
|
112
123
|
//# sourceMappingURL=AsynchronousFormTokenField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsynchronousFormTokenField.js","sourceRoot":"","sources":["../../src/controls/AsynchronousFormTokenField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AsynchronousFormTokenField.js","sourceRoot":"","sources":["../../src/controls/AsynchronousFormTokenField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type ExtendedPostPickerProps = {
|
|
3
|
+
onChange: (value: string[]) => void;
|
|
4
|
+
label: string;
|
|
5
|
+
help?: string;
|
|
6
|
+
postTypes: string[];
|
|
7
|
+
placeholder: string;
|
|
8
|
+
value?: string[];
|
|
9
|
+
multiple?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type ExtendedPostPickerConstructorProps = Partial<Omit<ExtendedPostPickerProps, 'onChange' | 'value' | 'label'>> & Pick<ExtendedPostPickerProps, 'onChange' | 'value' | 'label'>;
|
|
12
|
+
export declare function ExtendedPostPicker(props: ExtendedPostPickerConstructorProps): React.JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import apiFetch from '@wordpress/api-fetch';
|
|
3
1
|
import { AsynchronousFormTokenField, ValidationState } from "./AsynchronousFormTokenField";
|
|
4
2
|
import { useState } from "@wordpress/element";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
return (await apiFetch({ path: addQueryArgs("/plaudit/common/v1/post-table-search", data) }))
|
|
8
|
-
.map(item => ({ id: item.id.toString(), title: item.title }));
|
|
9
|
-
}
|
|
3
|
+
import { requestPostsFromAPI } from "./shared";
|
|
4
|
+
import React from "react";
|
|
10
5
|
export function ExtendedPostPicker(props) {
|
|
11
6
|
const [validPostIds, _] = useState(new Map());
|
|
12
7
|
const value = props.value ?? [];
|
|
13
|
-
return
|
|
8
|
+
return React.createElement(AsynchronousFormTokenField, { ...props, value: value, makeTokenFromSuggestion: token => {
|
|
14
9
|
if (isNumeric(token)) {
|
|
15
10
|
return { value: token, status: validPostIds.get(token) ?? ValidationState.Validating, title: token };
|
|
16
11
|
}
|
|
@@ -21,8 +16,8 @@ export function ExtendedPostPicker(props) {
|
|
|
21
16
|
}
|
|
22
17
|
return { value: token, status: ValidationState.Invalid, title: token };
|
|
23
18
|
}
|
|
24
|
-
}, suggestionQuery: input =>
|
|
25
|
-
.then(posts => posts.map(post => `${post.title} (#${post.id})`)), validationQuery: idsBeingValidated =>
|
|
19
|
+
}, suggestionQuery: input => requestPostsFromAPI({ search: input, postTypes: props.postTypes?.join(',') })
|
|
20
|
+
.then(posts => posts.map(post => `${post.title} (#${post.id})`)), validationQuery: idsBeingValidated => requestPostsFromAPI({ ids: idsBeingValidated.join(','), postTypes: props.postTypes?.join(',') })
|
|
26
21
|
.then(posts => posts.map(post => ({ value: post.id, title: post.title, status: ValidationState.Valid }))), validValues: validPostIds, validator: token => /\(#([0-9]+)\)$/.exec(token)?.[1] !== undefined });
|
|
27
22
|
}
|
|
28
23
|
function isNumeric(str) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtendedPostPicker.js","sourceRoot":"","sources":["../../src/controls/ExtendedPostPicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExtendedPostPicker.js","sourceRoot":"","sources":["../../src/controls/ExtendedPostPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAE,eAAe,EAAC,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAC,mBAAmB,EAAC,MAAM,UAAU,CAAC;AAE7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,MAAM,UAAU,kBAAkB,CAAC,KAAyC;IAC3E,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAA2B,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,OAAO,oBAAC,0BAA0B,OAC7B,KAAK,EACT,KAAK,EAAE,KAAK,EACZ,uBAAuB,EAAE,KAAK,CAAC,EAAE;YAChC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACP,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,OAAO,EAAE,CAAC;oBACb,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC;gBACxG,CAAC;gBACD,OAAO,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC;YACtE,CAAC;QACF,CAAC,EACD,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC;aACnG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EACjE,eAAe,EAAE,iBAAiB,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC;aAClI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EACxG,WAAW,EAAE,YAAY,EACzB,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,GAClE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,GAAkB;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,2BAA2B;IACrE,OAAO,CAAC,KAAK,CAAC,GAAU,CAAC,IAAI,mGAAmG;QAC/H,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,2CAA2C;AACrE,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
1
|
import { InspectorControls } from "@wordpress/block-editor";
|
|
3
2
|
import { PanelBody } from "@wordpress/components";
|
|
3
|
+
import React from "react";
|
|
4
4
|
export function InspectorPanel(props) {
|
|
5
5
|
const FullyTypedInspectorControls = InspectorControls;
|
|
6
|
-
return
|
|
6
|
+
return React.createElement(FullyTypedInspectorControls, { group: props.group },
|
|
7
|
+
React.createElement(PanelBody, { ...props, children: props.condition === undefined || props.condition() ? props.children : [] }));
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=InspectorPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InspectorPanel.js","sourceRoot":"","sources":["../../src/controls/InspectorPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InspectorPanel.js","sourceRoot":"","sources":["../../src/controls/InspectorPanel.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAEhD,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,UAAU,cAAc,CAAC,KAA6D;IAC3F,MAAM,2BAA2B,GAAG,iBAA0C,CAAC;IAC/E,OAAO,oBAAC,2BAA2B,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK;QACrD,oBAAC,SAAS,OAAK,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAI,CAC/E,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ComboboxControlOption, ComboboxControlProps } from "@wordpress/components/build-types/combobox-control/types";
|
|
2
|
+
import React from "react";
|
|
3
|
+
export type LazySuggestionsComboboxControlProps = Omit<ComboboxControlProps, 'options'> & {
|
|
4
|
+
getOption(value?: string): Promise<ComboboxControlOption | undefined>;
|
|
5
|
+
getSuggestions(filterValue: string): Promise<ComboboxControlOption[]>;
|
|
6
|
+
};
|
|
7
|
+
export declare function LazySuggestionsComboboxControl(props: LazySuggestionsComboboxControlProps): React.JSX.Element;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { BaseControl, ComboboxControl, Spinner } from "@wordpress/components";
|
|
2
|
+
import { useEffect, useState } from "@wordpress/element";
|
|
3
|
+
import { __ } from "@wordpress/i18n";
|
|
4
|
+
import debounce from "debounce";
|
|
5
|
+
import React from "react";
|
|
6
|
+
export function LazySuggestionsComboboxControl(props) {
|
|
7
|
+
const [isInitializing, setIsInitializing] = useState(true);
|
|
8
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
9
|
+
const [suggestions, setSuggestions] = useState([]);
|
|
10
|
+
const [mySuggestionRequestQueue] = useState(() => ({
|
|
11
|
+
queue: Promise.resolve(true),
|
|
12
|
+
currentRequest: 0,
|
|
13
|
+
debouncer: debounce((input) => {
|
|
14
|
+
setIsLoading(true);
|
|
15
|
+
const myNumber = ++mySuggestionRequestQueue.currentRequest;
|
|
16
|
+
mySuggestionRequestQueue.queue = mySuggestionRequestQueue.queue.then(async () => {
|
|
17
|
+
let suggestions;
|
|
18
|
+
if (input.length < 2) {
|
|
19
|
+
if (props.value) {
|
|
20
|
+
const propValue = await props.getOption(props.value);
|
|
21
|
+
if (propValue) {
|
|
22
|
+
suggestions = [propValue];
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
suggestions = [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
suggestions = [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
suggestions = await props.getSuggestions(input);
|
|
34
|
+
}
|
|
35
|
+
if (myNumber === mySuggestionRequestQueue.currentRequest) {
|
|
36
|
+
if (props.onFilterValueChange) {
|
|
37
|
+
props.onFilterValueChange(input);
|
|
38
|
+
}
|
|
39
|
+
setSuggestions(suggestions);
|
|
40
|
+
setIsLoading(false);
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
});
|
|
44
|
+
}, 500)
|
|
45
|
+
}));
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (props.value) {
|
|
48
|
+
props.getOption(props.value).then(option => {
|
|
49
|
+
setSuggestions(option ? [option] : []);
|
|
50
|
+
setIsInitializing(false);
|
|
51
|
+
}, () => {
|
|
52
|
+
//TODO: Add a notice for the error
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
setIsInitializing(false);
|
|
57
|
+
}
|
|
58
|
+
}, []);
|
|
59
|
+
if (isInitializing) {
|
|
60
|
+
return React.createElement(BaseControl, { ...props },
|
|
61
|
+
React.createElement(Spinner, null),
|
|
62
|
+
React.createElement("span", null, __(`Initializing ${props.label}`)));
|
|
63
|
+
}
|
|
64
|
+
return React.createElement(React.Fragment, null,
|
|
65
|
+
React.createElement(ComboboxControl, { ...props, options: suggestions, onFilterValueChange: mySuggestionRequestQueue.debouncer, allowReset: props.allowReset !== false }),
|
|
66
|
+
isLoading && React.createElement("div", null,
|
|
67
|
+
React.createElement(Spinner, null),
|
|
68
|
+
React.createElement("span", { className: "components-base-control__help" }, __("Updating Suggestions"))));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=LazySuggestionsComboboxControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LazySuggestionsComboboxControl.js","sourceRoot":"","sources":["../../src/controls/LazySuggestionsComboboxControl.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PickableOptions, SimpleBlockControlProps } from "./types";
|
|
2
|
+
import React, { type ReactElement } from "react";
|
|
3
|
+
export type PickOneFromToggleGroupProps<T extends string> = SimpleBlockControlProps<T, string | number> & {
|
|
4
|
+
options: PickableOptions<string, {
|
|
5
|
+
icon: ReactElement;
|
|
6
|
+
}>;
|
|
7
|
+
};
|
|
8
|
+
export declare function PickOneFromToggleGroup<T extends string>(props: PickOneFromToggleGroupProps<T>): React.JSX.Element;
|
|
9
|
+
export declare function PickOneFromSelect<T extends string>(props: SimpleBlockControlProps<T, string> & {
|
|
10
|
+
options: PickableOptions<string>;
|
|
11
|
+
}): React.JSX.Element;
|
|
12
|
+
export declare function PickOneFromRadios<T extends string>(props: SimpleBlockControlProps<T, string> & {
|
|
13
|
+
options: PickableOptions<string>;
|
|
14
|
+
}): React.JSX.Element;
|
|
15
|
+
export declare function PickOneFromColors<T extends string>(props: SimpleBlockControlProps<T, string> & {
|
|
16
|
+
options: PickableOptions<string, {
|
|
17
|
+
color?: string | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
}): React.JSX.Element;
|