@wordpress/block-editor 11.3.5 → 11.3.6
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/CHANGELOG.md +11 -1
- package/build/components/block-inspector/index.js +11 -10
- package/build/components/block-inspector/index.js.map +1 -1
- package/build/components/block-inspector/useBlockInspectorAnimationSettings.js +46 -0
- package/build/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
- package/build/components/inserter/media-tab/hooks.js +10 -11
- package/build/components/inserter/media-tab/hooks.js.map +1 -1
- package/build/components/inserter/media-tab/media-list.js +5 -108
- package/build/components/inserter/media-tab/media-list.js.map +1 -1
- package/build/components/inserter/media-tab/media-preview.js +242 -0
- package/build/components/inserter/media-tab/media-preview.js.map +1 -0
- package/build/components/inserter/menu.js +4 -7
- package/build/components/inserter/menu.js.map +1 -1
- package/build/components/link-control/index.js +17 -44
- package/build/components/link-control/index.js.map +1 -1
- package/build/store/defaults.js +28 -1
- package/build/store/defaults.js.map +1 -1
- package/build/store/selectors.js +1 -1
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/block-inspector/index.js +9 -9
- package/build-module/components/block-inspector/index.js.map +1 -1
- package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js +37 -0
- package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
- package/build-module/components/inserter/media-tab/hooks.js +10 -11
- package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
- package/build-module/components/inserter/media-tab/media-list.js +6 -105
- package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
- package/build-module/components/inserter/media-tab/media-preview.js +222 -0
- package/build-module/components/inserter/media-tab/media-preview.js.map +1 -0
- package/build-module/components/inserter/menu.js +4 -7
- package/build-module/components/inserter/menu.js.map +1 -1
- package/build-module/components/link-control/index.js +16 -44
- package/build-module/components/link-control/index.js.map +1 -1
- package/build-module/store/defaults.js +28 -1
- package/build-module/store/defaults.js.map +1 -1
- package/build-module/store/selectors.js +1 -1
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +43 -8
- package/build-style/style.css +43 -8
- package/package.json +4 -4
- package/src/components/block-inspector/index.js +11 -14
- package/src/components/block-inspector/useBlockInspectorAnimationSettings.js +53 -0
- package/src/components/inserter/media-tab/hooks.js +9 -8
- package/src/components/inserter/media-tab/media-list.js +3 -122
- package/src/components/inserter/media-tab/media-preview.js +268 -0
- package/src/components/inserter/menu.js +14 -20
- package/src/components/inserter/style.scss +22 -0
- package/src/components/link-control/index.js +23 -58
- package/src/components/link-control/style.scss +23 -7
- package/src/components/link-control/test/index.js +5 -134
- package/src/components/media-replace-flow/test/index.js +1 -1
- package/src/components/spacing-sizes-control/style.scss +1 -1
- package/src/store/defaults.js +14 -1
- package/src/store/selectors.js +4 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* External dependencies
|
|
6
|
+
*/
|
|
7
|
+
import classnames from 'classnames';
|
|
8
|
+
/**
|
|
9
|
+
* WordPress dependencies
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { __unstableCompositeItem as CompositeItem, Tooltip, DropdownMenu, MenuGroup, MenuItem, Spinner, Modal, Flex, FlexItem, Button, __experimentalVStack as VStack } from '@wordpress/components';
|
|
13
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
14
|
+
import { useMemo, useCallback, useState } from '@wordpress/element';
|
|
15
|
+
import { cloneBlock } from '@wordpress/blocks';
|
|
16
|
+
import { moreVertical, external } from '@wordpress/icons';
|
|
17
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
18
|
+
import { store as noticesStore } from '@wordpress/notices';
|
|
19
|
+
import { isBlobURL } from '@wordpress/blob';
|
|
20
|
+
/**
|
|
21
|
+
* Internal dependencies
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import InserterDraggableBlocks from '../../inserter-draggable-blocks';
|
|
25
|
+
import { getBlockAndPreviewFromMedia } from './utils';
|
|
26
|
+
import { store as blockEditorStore } from '../../../store';
|
|
27
|
+
const ALLOWED_MEDIA_TYPES = ['image'];
|
|
28
|
+
const MAXIMUM_TITLE_LENGTH = 25;
|
|
29
|
+
const MEDIA_OPTIONS_POPOVER_PROPS = {
|
|
30
|
+
position: 'bottom left',
|
|
31
|
+
className: 'block-editor-inserter__media-list__item-preview-options__popover'
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
function MediaPreviewOptions(_ref) {
|
|
35
|
+
let {
|
|
36
|
+
category,
|
|
37
|
+
media
|
|
38
|
+
} = _ref;
|
|
39
|
+
|
|
40
|
+
if (!category.getReportUrl) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const reportUrl = category.getReportUrl(media);
|
|
45
|
+
return createElement(DropdownMenu, {
|
|
46
|
+
className: "block-editor-inserter__media-list__item-preview-options",
|
|
47
|
+
label: __('Options'),
|
|
48
|
+
popoverProps: MEDIA_OPTIONS_POPOVER_PROPS,
|
|
49
|
+
icon: moreVertical
|
|
50
|
+
}, () => createElement(MenuGroup, null, createElement(MenuItem, {
|
|
51
|
+
onClick: () => window.open(reportUrl, '_blank').focus(),
|
|
52
|
+
icon: external
|
|
53
|
+
}, sprintf(
|
|
54
|
+
/* translators: %s: The media type to report e.g: "image", "video", "audio" */
|
|
55
|
+
__('Report %s'), category.mediaType))));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function InsertExternalImageModal(_ref2) {
|
|
59
|
+
let {
|
|
60
|
+
onClose,
|
|
61
|
+
onSubmit
|
|
62
|
+
} = _ref2;
|
|
63
|
+
return createElement(Modal, {
|
|
64
|
+
title: __('Insert external image'),
|
|
65
|
+
onRequestClose: onClose,
|
|
66
|
+
className: "block-editor-inserter-media-tab-media-preview-inserter-external-image-modal"
|
|
67
|
+
}, createElement(VStack, {
|
|
68
|
+
spacing: 3
|
|
69
|
+
}, createElement("p", null, __('This image cannot be uploaded to your Media Library, but it can still be inserted as an external image.')), createElement("p", null, __('External images can be removed by the external provider without warning and could even have legal compliance issues related to privacy legislation.'))), createElement(Flex, {
|
|
70
|
+
className: "block-editor-block-lock-modal__actions",
|
|
71
|
+
justify: "flex-end",
|
|
72
|
+
expanded: false
|
|
73
|
+
}, createElement(FlexItem, null, createElement(Button, {
|
|
74
|
+
variant: "tertiary",
|
|
75
|
+
onClick: onClose
|
|
76
|
+
}, __('Cancel'))), createElement(FlexItem, null, createElement(Button, {
|
|
77
|
+
variant: "primary",
|
|
78
|
+
onClick: onSubmit
|
|
79
|
+
}, __('Insert')))));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function MediaPreview(_ref3) {
|
|
83
|
+
var _media$title;
|
|
84
|
+
|
|
85
|
+
let {
|
|
86
|
+
media,
|
|
87
|
+
onClick,
|
|
88
|
+
composite,
|
|
89
|
+
category
|
|
90
|
+
} = _ref3;
|
|
91
|
+
const [showExternalUploadModal, setShowExternalUploadModal] = useState(false);
|
|
92
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
93
|
+
const [isInserting, setIsInserting] = useState(false);
|
|
94
|
+
const [block, preview] = useMemo(() => getBlockAndPreviewFromMedia(media, category.mediaType), [media, category.mediaType]);
|
|
95
|
+
const {
|
|
96
|
+
createErrorNotice,
|
|
97
|
+
createSuccessNotice
|
|
98
|
+
} = useDispatch(noticesStore);
|
|
99
|
+
const mediaUpload = useSelect(select => select(blockEditorStore).getSettings().mediaUpload, []);
|
|
100
|
+
const onMediaInsert = useCallback(previewBlock => {
|
|
101
|
+
// Prevent multiple uploads when we're in the process of inserting.
|
|
102
|
+
if (isInserting) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const clonedBlock = cloneBlock(previewBlock);
|
|
107
|
+
const {
|
|
108
|
+
id,
|
|
109
|
+
url,
|
|
110
|
+
caption
|
|
111
|
+
} = clonedBlock.attributes; // Media item already exists in library, so just insert it.
|
|
112
|
+
|
|
113
|
+
if (!!id) {
|
|
114
|
+
onClick(clonedBlock);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
setIsInserting(true); // Media item does not exist in library, so try to upload it.
|
|
119
|
+
// Fist fetch the image data. This may fail if the image host
|
|
120
|
+
// doesn't allow CORS with the domain.
|
|
121
|
+
// If this happens, we insert the image block using the external
|
|
122
|
+
// URL and let the user know about the possible implications.
|
|
123
|
+
|
|
124
|
+
window.fetch(url).then(response => response.blob()).then(blob => {
|
|
125
|
+
mediaUpload({
|
|
126
|
+
filesList: [blob],
|
|
127
|
+
additionalData: {
|
|
128
|
+
caption
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
onFileChange(_ref4) {
|
|
132
|
+
let [img] = _ref4;
|
|
133
|
+
|
|
134
|
+
if (isBlobURL(img.url)) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
onClick({ ...clonedBlock,
|
|
139
|
+
attributes: { ...clonedBlock.attributes,
|
|
140
|
+
id: img.id,
|
|
141
|
+
url: img.url
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
createSuccessNotice(__('Image uploaded and inserted.'), {
|
|
145
|
+
type: 'snackbar'
|
|
146
|
+
});
|
|
147
|
+
setIsInserting(false);
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
allowedTypes: ALLOWED_MEDIA_TYPES,
|
|
151
|
+
|
|
152
|
+
onError(message) {
|
|
153
|
+
createErrorNotice(message, {
|
|
154
|
+
type: 'snackbar'
|
|
155
|
+
});
|
|
156
|
+
setIsInserting(false);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
});
|
|
160
|
+
}).catch(() => {
|
|
161
|
+
setShowExternalUploadModal(true);
|
|
162
|
+
setIsInserting(false);
|
|
163
|
+
});
|
|
164
|
+
}, [isInserting, onClick, mediaUpload, createErrorNotice, createSuccessNotice]);
|
|
165
|
+
const title = ((_media$title = media.title) === null || _media$title === void 0 ? void 0 : _media$title.rendered) || media.title;
|
|
166
|
+
let truncatedTitle;
|
|
167
|
+
|
|
168
|
+
if (title.length > MAXIMUM_TITLE_LENGTH) {
|
|
169
|
+
const omission = '...';
|
|
170
|
+
truncatedTitle = title.slice(0, MAXIMUM_TITLE_LENGTH - omission.length) + omission;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const onMouseEnter = useCallback(() => setIsHovered(true), []);
|
|
174
|
+
const onMouseLeave = useCallback(() => setIsHovered(false), []);
|
|
175
|
+
return createElement(Fragment, null, createElement(InserterDraggableBlocks, {
|
|
176
|
+
isEnabled: true,
|
|
177
|
+
blocks: [block]
|
|
178
|
+
}, _ref5 => {
|
|
179
|
+
let {
|
|
180
|
+
draggable,
|
|
181
|
+
onDragStart,
|
|
182
|
+
onDragEnd
|
|
183
|
+
} = _ref5;
|
|
184
|
+
return createElement("div", {
|
|
185
|
+
className: classnames('block-editor-inserter__media-list__list-item', {
|
|
186
|
+
'is-hovered': isHovered
|
|
187
|
+
}),
|
|
188
|
+
draggable: draggable,
|
|
189
|
+
onDragStart: onDragStart,
|
|
190
|
+
onDragEnd: onDragEnd
|
|
191
|
+
}, createElement(Tooltip, {
|
|
192
|
+
text: truncatedTitle || title
|
|
193
|
+
}, createElement("div", {
|
|
194
|
+
onMouseEnter: onMouseEnter,
|
|
195
|
+
onMouseLeave: onMouseLeave
|
|
196
|
+
}, createElement(CompositeItem, _extends({
|
|
197
|
+
role: "option",
|
|
198
|
+
as: "div"
|
|
199
|
+
}, composite, {
|
|
200
|
+
className: "block-editor-inserter__media-list__item",
|
|
201
|
+
onClick: () => onMediaInsert(block),
|
|
202
|
+
"aria-label": title
|
|
203
|
+
}), createElement("div", {
|
|
204
|
+
className: "block-editor-inserter__media-list__item-preview"
|
|
205
|
+
}, preview, isInserting && createElement("div", {
|
|
206
|
+
className: "block-editor-inserter__media-list__item-preview-spinner"
|
|
207
|
+
}, createElement(Spinner, null)))), !isInserting && createElement(MediaPreviewOptions, {
|
|
208
|
+
category: category,
|
|
209
|
+
media: media
|
|
210
|
+
}))));
|
|
211
|
+
}), showExternalUploadModal && createElement(InsertExternalImageModal, {
|
|
212
|
+
onClose: () => setShowExternalUploadModal(false),
|
|
213
|
+
onSubmit: () => {
|
|
214
|
+
onClick(cloneBlock(block));
|
|
215
|
+
createSuccessNotice(__('Image inserted.'), {
|
|
216
|
+
type: 'snackbar'
|
|
217
|
+
});
|
|
218
|
+
setShowExternalUploadModal(false);
|
|
219
|
+
}
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=media-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/inserter/media-tab/media-preview.js"],"names":["classnames","__unstableCompositeItem","CompositeItem","Tooltip","DropdownMenu","MenuGroup","MenuItem","Spinner","Modal","Flex","FlexItem","Button","__experimentalVStack","VStack","__","sprintf","useMemo","useCallback","useState","cloneBlock","moreVertical","external","useSelect","useDispatch","store","noticesStore","isBlobURL","InserterDraggableBlocks","getBlockAndPreviewFromMedia","blockEditorStore","ALLOWED_MEDIA_TYPES","MAXIMUM_TITLE_LENGTH","MEDIA_OPTIONS_POPOVER_PROPS","position","className","MediaPreviewOptions","category","media","getReportUrl","reportUrl","window","open","focus","mediaType","InsertExternalImageModal","onClose","onSubmit","MediaPreview","onClick","composite","showExternalUploadModal","setShowExternalUploadModal","isHovered","setIsHovered","isInserting","setIsInserting","block","preview","createErrorNotice","createSuccessNotice","mediaUpload","select","getSettings","onMediaInsert","previewBlock","clonedBlock","id","url","caption","attributes","fetch","then","response","blob","filesList","additionalData","onFileChange","img","type","allowedTypes","onError","message","catch","title","rendered","truncatedTitle","length","omission","slice","onMouseEnter","onMouseLeave","draggable","onDragStart","onDragEnd"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__unstableCompositeItem as CompositeItem,\n\tTooltip,\n\tDropdownMenu,\n\tMenuGroup,\n\tMenuItem,\n\tSpinner,\n\tModal,\n\tFlex,\n\tFlexItem,\n\tButton,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useMemo, useCallback, useState } from '@wordpress/element';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { moreVertical, external } from '@wordpress/icons';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport InserterDraggableBlocks from '../../inserter-draggable-blocks';\nimport { getBlockAndPreviewFromMedia } from './utils';\nimport { store as blockEditorStore } from '../../../store';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\nconst MAXIMUM_TITLE_LENGTH = 25;\nconst MEDIA_OPTIONS_POPOVER_PROPS = {\n\tposition: 'bottom left',\n\tclassName:\n\t\t'block-editor-inserter__media-list__item-preview-options__popover',\n};\n\nfunction MediaPreviewOptions( { category, media } ) {\n\tif ( ! category.getReportUrl ) {\n\t\treturn null;\n\t}\n\tconst reportUrl = category.getReportUrl( media );\n\treturn (\n\t\t<DropdownMenu\n\t\t\tclassName=\"block-editor-inserter__media-list__item-preview-options\"\n\t\t\tlabel={ __( 'Options' ) }\n\t\t\tpopoverProps={ MEDIA_OPTIONS_POPOVER_PROPS }\n\t\t\ticon={ moreVertical }\n\t\t>\n\t\t\t{ () => (\n\t\t\t\t<MenuGroup>\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\twindow.open( reportUrl, '_blank' ).focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t/* translators: %s: The media type to report e.g: \"image\", \"video\", \"audio\" */\n\t\t\t\t\t\t\t__( 'Report %s' ),\n\t\t\t\t\t\t\tcategory.mediaType\n\t\t\t\t\t\t) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t</MenuGroup>\n\t\t\t) }\n\t\t</DropdownMenu>\n\t);\n}\n\nfunction InsertExternalImageModal( { onClose, onSubmit } ) {\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ __( 'Insert external image' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t\tclassName=\"block-editor-inserter-media-tab-media-preview-inserter-external-image-modal\"\n\t\t>\n\t\t\t<VStack spacing={ 3 }>\n\t\t\t\t<p>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'This image cannot be uploaded to your Media Library, but it can still be inserted as an external image.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'External images can be removed by the external provider without warning and could even have legal compliance issues related to privacy legislation.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t</VStack>\n\t\t\t<Flex\n\t\t\t\tclassName=\"block-editor-block-lock-modal__actions\"\n\t\t\t\tjustify=\"flex-end\"\n\t\t\t\texpanded={ false }\n\t\t\t>\n\t\t\t\t<FlexItem>\n\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</FlexItem>\n\t\t\t\t<FlexItem>\n\t\t\t\t\t<Button variant=\"primary\" onClick={ onSubmit }>\n\t\t\t\t\t\t{ __( 'Insert' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</FlexItem>\n\t\t\t</Flex>\n\t\t</Modal>\n\t);\n}\n\nexport function MediaPreview( { media, onClick, composite, category } ) {\n\tconst [ showExternalUploadModal, setShowExternalUploadModal ] =\n\t\tuseState( false );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst [ isInserting, setIsInserting ] = useState( false );\n\tconst [ block, preview ] = useMemo(\n\t\t() => getBlockAndPreviewFromMedia( media, category.mediaType ),\n\t\t[ media, category.mediaType ]\n\t);\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst mediaUpload = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().mediaUpload,\n\t\t[]\n\t);\n\tconst onMediaInsert = useCallback(\n\t\t( previewBlock ) => {\n\t\t\t// Prevent multiple uploads when we're in the process of inserting.\n\t\t\tif ( isInserting ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst clonedBlock = cloneBlock( previewBlock );\n\t\t\tconst { id, url, caption } = clonedBlock.attributes;\n\t\t\t// Media item already exists in library, so just insert it.\n\t\t\tif ( !! id ) {\n\t\t\t\tonClick( clonedBlock );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetIsInserting( true );\n\t\t\t// Media item does not exist in library, so try to upload it.\n\t\t\t// Fist fetch the image data. This may fail if the image host\n\t\t\t// doesn't allow CORS with the domain.\n\t\t\t// If this happens, we insert the image block using the external\n\t\t\t// URL and let the user know about the possible implications.\n\t\t\twindow\n\t\t\t\t.fetch( url )\n\t\t\t\t.then( ( response ) => response.blob() )\n\t\t\t\t.then( ( blob ) => {\n\t\t\t\t\tmediaUpload( {\n\t\t\t\t\t\tfilesList: [ blob ],\n\t\t\t\t\t\tadditionalData: { caption },\n\t\t\t\t\t\tonFileChange( [ img ] ) {\n\t\t\t\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick( {\n\t\t\t\t\t\t\t\t...clonedBlock,\n\t\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t\t...clonedBlock.attributes,\n\t\t\t\t\t\t\t\t\tid: img.id,\n\t\t\t\t\t\t\t\t\turl: img.url,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tcreateSuccessNotice(\n\t\t\t\t\t\t\t\t__( 'Image uploaded and inserted.' ),\n\t\t\t\t\t\t\t\t{ type: 'snackbar' }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\t\t\tonError( message ) {\n\t\t\t\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\tsetShowExternalUploadModal( true );\n\t\t\t\t\tsetIsInserting( false );\n\t\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tisInserting,\n\t\t\tonClick,\n\t\t\tmediaUpload,\n\t\t\tcreateErrorNotice,\n\t\t\tcreateSuccessNotice,\n\t\t]\n\t);\n\tconst title = media.title?.rendered || media.title;\n\tlet truncatedTitle;\n\tif ( title.length > MAXIMUM_TITLE_LENGTH ) {\n\t\tconst omission = '...';\n\t\ttruncatedTitle =\n\t\t\ttitle.slice( 0, MAXIMUM_TITLE_LENGTH - omission.length ) + omission;\n\t}\n\tconst onMouseEnter = useCallback( () => setIsHovered( true ), [] );\n\tconst onMouseLeave = useCallback( () => setIsHovered( false ), [] );\n\treturn (\n\t\t<>\n\t\t\t<InserterDraggableBlocks isEnabled={ true } blocks={ [ block ] }>\n\t\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t'block-editor-inserter__media-list__list-item',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t'is-hovered': isHovered,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tdraggable={ draggable }\n\t\t\t\t\t\tonDragStart={ onDragStart }\n\t\t\t\t\t\tonDragEnd={ onDragEnd }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Tooltip text={ truncatedTitle || title }>\n\t\t\t\t\t\t\t{ /* Adding `is-hovered` class to the wrapper element is needed\n\t\t\t\t\t\t\tbecause the options Popover is rendered outside of this node. */ }\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\t\t\t\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\tas=\"div\"\n\t\t\t\t\t\t\t\t\t{ ...composite }\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-inserter__media-list__item\"\n\t\t\t\t\t\t\t\t\tonClick={ () => onMediaInsert( block ) }\n\t\t\t\t\t\t\t\t\taria-label={ title }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"block-editor-inserter__media-list__item-preview\">\n\t\t\t\t\t\t\t\t\t\t{ preview }\n\t\t\t\t\t\t\t\t\t\t{ isInserting && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"block-editor-inserter__media-list__item-preview-spinner\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</CompositeItem>\n\t\t\t\t\t\t\t\t{ ! isInserting && (\n\t\t\t\t\t\t\t\t\t<MediaPreviewOptions\n\t\t\t\t\t\t\t\t\t\tcategory={ category }\n\t\t\t\t\t\t\t\t\t\tmedia={ media }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</InserterDraggableBlocks>\n\t\t\t{ showExternalUploadModal && (\n\t\t\t\t<InsertExternalImageModal\n\t\t\t\t\tonClose={ () => setShowExternalUploadModal( false ) }\n\t\t\t\t\tonSubmit={ () => {\n\t\t\t\t\t\tonClick( cloneBlock( block ) );\n\t\t\t\t\t\tcreateSuccessNotice( __( 'Image inserted.' ), {\n\t\t\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tsetShowExternalUploadModal( false );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -55,18 +55,15 @@ function InserterMenu(_ref, ref) {
|
|
|
55
55
|
});
|
|
56
56
|
const {
|
|
57
57
|
showPatterns,
|
|
58
|
-
inserterItems
|
|
59
|
-
enableOpenverseMediaCategory
|
|
58
|
+
inserterItems
|
|
60
59
|
} = useSelect(select => {
|
|
61
60
|
const {
|
|
62
61
|
__experimentalGetAllowedPatterns,
|
|
63
|
-
getInserterItems
|
|
64
|
-
getSettings
|
|
62
|
+
getInserterItems
|
|
65
63
|
} = select(blockEditorStore);
|
|
66
64
|
return {
|
|
67
65
|
showPatterns: !!__experimentalGetAllowedPatterns(destinationRootClientId).length,
|
|
68
|
-
inserterItems: getInserterItems(destinationRootClientId)
|
|
69
|
-
enableOpenverseMediaCategory: getSettings().enableOpenverseMediaCategory
|
|
66
|
+
inserterItems: getInserterItems(destinationRootClientId)
|
|
70
67
|
};
|
|
71
68
|
}, [destinationRootClientId]);
|
|
72
69
|
const hasReusableBlocks = useMemo(() => {
|
|
@@ -78,7 +75,7 @@ function InserterMenu(_ref, ref) {
|
|
|
78
75
|
});
|
|
79
76
|
}, [inserterItems]);
|
|
80
77
|
const mediaCategories = useMediaCategories(destinationRootClientId);
|
|
81
|
-
const showMedia = !!mediaCategories.length
|
|
78
|
+
const showMedia = !!mediaCategories.length;
|
|
82
79
|
const onInsert = useCallback((blocks, meta, shouldForceFocusBlock) => {
|
|
83
80
|
onInsertBlocks(blocks, meta, shouldForceFocusBlock);
|
|
84
81
|
onSelect();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/inserter/menu.js"],"names":["classnames","forwardRef","useState","useCallback","useMemo","useImperativeHandle","useRef","VisuallyHidden","SearchControl","__","useSelect","Tips","InserterPreviewPanel","BlockTypesTab","BlockPatternsTabs","BlockPatternsCategoryDialog","ReusableBlocksTab","MediaTab","MediaCategoryDialog","useMediaCategories","InserterSearchResults","useDebouncedInput","useInsertionPoint","InserterTabs","store","blockEditorStore","InserterMenu","ref","rootClientId","clientId","isAppender","__experimentalInsertionIndex","onSelect","showInserterHelpPanel","showMostUsedBlocks","__experimentalFilterValue","shouldFocusBlock","prioritizePatterns","filterValue","setFilterValue","delayedFilterValue","hoveredItem","setHoveredItem","selectedPatternCategory","setSelectedPatternCategory","selectedMediaCategory","setSelectedMediaCategory","selectedTab","setSelectedTab","destinationRootClientId","onInsertBlocks","onToggleInsertionPoint","insertionIndex","showPatterns","inserterItems","enableOpenverseMediaCategory","select","__experimentalGetAllowedPatterns","getInserterItems","getSettings","length","hasReusableBlocks","some","category","mediaCategories","showMedia","onInsert","blocks","meta","shouldForceFocusBlock","onInsertPattern","patternName","onHover","item","onHoverPattern","onClickPatternCategory","patternCategory","blocksTab","patternsTab","reusableBlocksTab","mediaTab","getCurrentTab","tab","name","searchRef","focusSearch","current","focus","showPatternPanel","showAsTabs","showMediaPanel","value"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tforwardRef,\n\tuseState,\n\tuseCallback,\n\tuseMemo,\n\tuseImperativeHandle,\n\tuseRef,\n} from '@wordpress/element';\nimport { VisuallyHidden, SearchControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport Tips from './tips';\nimport InserterPreviewPanel from './preview-panel';\nimport BlockTypesTab from './block-types-tab';\nimport BlockPatternsTabs, {\n\tBlockPatternsCategoryDialog,\n} from './block-patterns-tab';\nimport ReusableBlocksTab from './reusable-blocks-tab';\nimport { MediaTab, MediaCategoryDialog, useMediaCategories } from './media-tab';\nimport InserterSearchResults from './search-results';\nimport useDebouncedInput from './hooks/use-debounced-input';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport InserterTabs from './tabs';\nimport { store as blockEditorStore } from '../../store';\n\nfunction InserterMenu(\n\t{\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\t__experimentalInsertionIndex,\n\t\tonSelect,\n\t\tshowInserterHelpPanel,\n\t\tshowMostUsedBlocks,\n\t\t__experimentalFilterValue = '',\n\t\tshouldFocusBlock = true,\n\t\tprioritizePatterns,\n\t},\n\tref\n) {\n\tconst [ filterValue, setFilterValue, delayedFilterValue ] =\n\t\tuseDebouncedInput( __experimentalFilterValue );\n\tconst [ hoveredItem, setHoveredItem ] = useState( null );\n\tconst [ selectedPatternCategory, setSelectedPatternCategory ] =\n\t\tuseState( null );\n\tconst [ selectedMediaCategory, setSelectedMediaCategory ] =\n\t\tuseState( null );\n\tconst [ selectedTab, setSelectedTab ] = useState( null );\n\n\tconst [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ] =\n\t\tuseInsertionPoint( {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tinsertionIndex: __experimentalInsertionIndex,\n\t\t\tshouldFocusBlock,\n\t\t} );\n\tconst { showPatterns, inserterItems, enableOpenverseMediaCategory } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalGetAllowedPatterns,\n\t\t\t\t\tgetInserterItems,\n\t\t\t\t\tgetSettings,\n\t\t\t\t} = select( blockEditorStore );\n\t\t\t\treturn {\n\t\t\t\t\tshowPatterns: !! __experimentalGetAllowedPatterns(\n\t\t\t\t\t\tdestinationRootClientId\n\t\t\t\t\t).length,\n\t\t\t\t\tinserterItems: getInserterItems( destinationRootClientId ),\n\t\t\t\t\tenableOpenverseMediaCategory:\n\t\t\t\t\t\tgetSettings().enableOpenverseMediaCategory,\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ destinationRootClientId ]\n\t\t);\n\tconst hasReusableBlocks = useMemo( () => {\n\t\treturn inserterItems.some(\n\t\t\t( { category } ) => category === 'reusable'\n\t\t);\n\t}, [ inserterItems ] );\n\n\tconst mediaCategories = useMediaCategories( destinationRootClientId );\n\tconst showMedia = !! mediaCategories.length || enableOpenverseMediaCategory;\n\n\tconst onInsert = useCallback(\n\t\t( blocks, meta, shouldForceFocusBlock ) => {\n\t\t\tonInsertBlocks( blocks, meta, shouldForceFocusBlock );\n\t\t\tonSelect();\n\t\t},\n\t\t[ onInsertBlocks, onSelect ]\n\t);\n\n\tconst onInsertPattern = useCallback(\n\t\t( blocks, patternName ) => {\n\t\t\tonInsertBlocks( blocks, { patternName } );\n\t\t\tonSelect();\n\t\t},\n\t\t[ onInsertBlocks, onSelect ]\n\t);\n\n\tconst onHover = useCallback(\n\t\t( item ) => {\n\t\t\tonToggleInsertionPoint( !! item );\n\t\t\tsetHoveredItem( item );\n\t\t},\n\t\t[ onToggleInsertionPoint, setHoveredItem ]\n\t);\n\n\tconst onHoverPattern = useCallback(\n\t\t( item ) => {\n\t\t\tonToggleInsertionPoint( !! item );\n\t\t},\n\t\t[ onToggleInsertionPoint ]\n\t);\n\n\tconst onClickPatternCategory = useCallback(\n\t\t( patternCategory ) => {\n\t\t\tsetSelectedPatternCategory( patternCategory );\n\t\t},\n\t\t[ setSelectedPatternCategory ]\n\t);\n\n\tconst blocksTab = useMemo(\n\t\t() => (\n\t\t\t<>\n\t\t\t\t<div className=\"block-editor-inserter__block-list\">\n\t\t\t\t\t<BlockTypesTab\n\t\t\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\tonHover={ onHover }\n\t\t\t\t\t\tshowMostUsedBlocks={ showMostUsedBlocks }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{ showInserterHelpPanel && (\n\t\t\t\t\t<div className=\"block-editor-inserter__tips\">\n\t\t\t\t\t\t<VisuallyHidden as=\"h2\">\n\t\t\t\t\t\t\t{ __( 'A tip for using the block editor' ) }\n\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t<Tips />\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</>\n\t\t),\n\t\t[\n\t\t\tdestinationRootClientId,\n\t\t\tonInsert,\n\t\t\tonHover,\n\t\t\tdelayedFilterValue,\n\t\t\tshowMostUsedBlocks,\n\t\t\tshowInserterHelpPanel,\n\t\t]\n\t);\n\n\tconst patternsTab = useMemo(\n\t\t() => (\n\t\t\t<BlockPatternsTabs\n\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\tonInsert={ onInsertPattern }\n\t\t\t\tonSelectCategory={ onClickPatternCategory }\n\t\t\t\tselectedCategory={ selectedPatternCategory }\n\t\t\t/>\n\t\t),\n\t\t[\n\t\t\tdestinationRootClientId,\n\t\t\tonInsertPattern,\n\t\t\tonClickPatternCategory,\n\t\t\tselectedPatternCategory,\n\t\t]\n\t);\n\n\tconst reusableBlocksTab = useMemo(\n\t\t() => (\n\t\t\t<ReusableBlocksTab\n\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t/>\n\t\t),\n\t\t[ destinationRootClientId, onInsert, onHover ]\n\t);\n\n\tconst mediaTab = useMemo(\n\t\t() => (\n\t\t\t<MediaTab\n\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\tselectedCategory={ selectedMediaCategory }\n\t\t\t\tonSelectCategory={ setSelectedMediaCategory }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t/>\n\t\t),\n\t\t[\n\t\t\tdestinationRootClientId,\n\t\t\tonInsert,\n\t\t\tselectedMediaCategory,\n\t\t\tsetSelectedMediaCategory,\n\t\t]\n\t);\n\n\tconst getCurrentTab = useCallback(\n\t\t( tab ) => {\n\t\t\tif ( tab.name === 'blocks' ) {\n\t\t\t\treturn blocksTab;\n\t\t\t} else if ( tab.name === 'patterns' ) {\n\t\t\t\treturn patternsTab;\n\t\t\t} else if ( tab.name === 'reusable' ) {\n\t\t\t\treturn reusableBlocksTab;\n\t\t\t} else if ( tab.name === 'media' ) {\n\t\t\t\treturn mediaTab;\n\t\t\t}\n\t\t},\n\t\t[ blocksTab, patternsTab, reusableBlocksTab, mediaTab ]\n\t);\n\n\tconst searchRef = useRef();\n\tuseImperativeHandle( ref, () => ( {\n\t\tfocusSearch: () => {\n\t\t\tsearchRef.current.focus();\n\t\t},\n\t} ) );\n\n\tconst showPatternPanel =\n\t\tselectedTab === 'patterns' &&\n\t\t! delayedFilterValue &&\n\t\tselectedPatternCategory;\n\tconst showAsTabs =\n\t\t! delayedFilterValue &&\n\t\t( showPatterns || hasReusableBlocks || showMedia );\n\tconst showMediaPanel =\n\t\tselectedTab === 'media' &&\n\t\t! delayedFilterValue &&\n\t\tselectedMediaCategory;\n\treturn (\n\t\t<div className=\"block-editor-inserter__menu\">\n\t\t\t<div\n\t\t\t\tclassName={ classnames( 'block-editor-inserter__main-area', {\n\t\t\t\t\t'show-as-tabs': showAsTabs,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<SearchControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tclassName=\"block-editor-inserter__search\"\n\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\tif ( hoveredItem ) setHoveredItem( null );\n\t\t\t\t\t\tsetFilterValue( value );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ filterValue }\n\t\t\t\t\tlabel={ __( 'Search for blocks and patterns' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t\tref={ searchRef }\n\t\t\t\t/>\n\t\t\t\t{ !! delayedFilterValue && (\n\t\t\t\t\t<div className=\"block-editor-inserter__no-tab-container\">\n\t\t\t\t\t\t<InserterSearchResults\n\t\t\t\t\t\t\tfilterValue={ delayedFilterValue }\n\t\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\t\tonHover={ onHover }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tisAppender={ isAppender }\n\t\t\t\t\t\t\t__experimentalInsertionIndex={\n\t\t\t\t\t\t\t\t__experimentalInsertionIndex\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tshowBlockDirectory\n\t\t\t\t\t\t\tshouldFocusBlock={ shouldFocusBlock }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t{ showAsTabs && (\n\t\t\t\t\t<InserterTabs\n\t\t\t\t\t\tshowPatterns={ showPatterns }\n\t\t\t\t\t\tshowReusableBlocks={ hasReusableBlocks }\n\t\t\t\t\t\tshowMedia={ showMedia }\n\t\t\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t\t\t\tonSelect={ setSelectedTab }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ getCurrentTab }\n\t\t\t\t\t</InserterTabs>\n\t\t\t\t) }\n\t\t\t\t{ ! delayedFilterValue && ! showAsTabs && (\n\t\t\t\t\t<div className=\"block-editor-inserter__no-tab-container\">\n\t\t\t\t\t\t{ blocksTab }\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t{ showMediaPanel && (\n\t\t\t\t<MediaCategoryDialog\n\t\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\tcategory={ selectedMediaCategory }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ showInserterHelpPanel && hoveredItem && (\n\t\t\t\t<InserterPreviewPanel item={ hoveredItem } />\n\t\t\t) }\n\t\t\t{ showPatternPanel && (\n\t\t\t\t<BlockPatternsCategoryDialog\n\t\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\t\tonInsert={ onInsertPattern }\n\t\t\t\t\tonHover={ onHoverPattern }\n\t\t\t\t\tcategory={ selectedPatternCategory }\n\t\t\t\t\tshowTitlesAsTooltip\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nexport default forwardRef( InserterMenu );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/inserter/menu.js"],"names":["classnames","forwardRef","useState","useCallback","useMemo","useImperativeHandle","useRef","VisuallyHidden","SearchControl","__","useSelect","Tips","InserterPreviewPanel","BlockTypesTab","BlockPatternsTabs","BlockPatternsCategoryDialog","ReusableBlocksTab","MediaTab","MediaCategoryDialog","useMediaCategories","InserterSearchResults","useDebouncedInput","useInsertionPoint","InserterTabs","store","blockEditorStore","InserterMenu","ref","rootClientId","clientId","isAppender","__experimentalInsertionIndex","onSelect","showInserterHelpPanel","showMostUsedBlocks","__experimentalFilterValue","shouldFocusBlock","prioritizePatterns","filterValue","setFilterValue","delayedFilterValue","hoveredItem","setHoveredItem","selectedPatternCategory","setSelectedPatternCategory","selectedMediaCategory","setSelectedMediaCategory","selectedTab","setSelectedTab","destinationRootClientId","onInsertBlocks","onToggleInsertionPoint","insertionIndex","showPatterns","inserterItems","select","__experimentalGetAllowedPatterns","getInserterItems","length","hasReusableBlocks","some","category","mediaCategories","showMedia","onInsert","blocks","meta","shouldForceFocusBlock","onInsertPattern","patternName","onHover","item","onHoverPattern","onClickPatternCategory","patternCategory","blocksTab","patternsTab","reusableBlocksTab","mediaTab","getCurrentTab","tab","name","searchRef","focusSearch","current","focus","showPatternPanel","showAsTabs","showMediaPanel","value"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tforwardRef,\n\tuseState,\n\tuseCallback,\n\tuseMemo,\n\tuseImperativeHandle,\n\tuseRef,\n} from '@wordpress/element';\nimport { VisuallyHidden, SearchControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport Tips from './tips';\nimport InserterPreviewPanel from './preview-panel';\nimport BlockTypesTab from './block-types-tab';\nimport BlockPatternsTabs, {\n\tBlockPatternsCategoryDialog,\n} from './block-patterns-tab';\nimport ReusableBlocksTab from './reusable-blocks-tab';\nimport { MediaTab, MediaCategoryDialog, useMediaCategories } from './media-tab';\nimport InserterSearchResults from './search-results';\nimport useDebouncedInput from './hooks/use-debounced-input';\nimport useInsertionPoint from './hooks/use-insertion-point';\nimport InserterTabs from './tabs';\nimport { store as blockEditorStore } from '../../store';\n\nfunction InserterMenu(\n\t{\n\t\trootClientId,\n\t\tclientId,\n\t\tisAppender,\n\t\t__experimentalInsertionIndex,\n\t\tonSelect,\n\t\tshowInserterHelpPanel,\n\t\tshowMostUsedBlocks,\n\t\t__experimentalFilterValue = '',\n\t\tshouldFocusBlock = true,\n\t\tprioritizePatterns,\n\t},\n\tref\n) {\n\tconst [ filterValue, setFilterValue, delayedFilterValue ] =\n\t\tuseDebouncedInput( __experimentalFilterValue );\n\tconst [ hoveredItem, setHoveredItem ] = useState( null );\n\tconst [ selectedPatternCategory, setSelectedPatternCategory ] =\n\t\tuseState( null );\n\tconst [ selectedMediaCategory, setSelectedMediaCategory ] =\n\t\tuseState( null );\n\tconst [ selectedTab, setSelectedTab ] = useState( null );\n\n\tconst [ destinationRootClientId, onInsertBlocks, onToggleInsertionPoint ] =\n\t\tuseInsertionPoint( {\n\t\t\trootClientId,\n\t\t\tclientId,\n\t\t\tisAppender,\n\t\t\tinsertionIndex: __experimentalInsertionIndex,\n\t\t\tshouldFocusBlock,\n\t\t} );\n\tconst { showPatterns, inserterItems } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalGetAllowedPatterns, getInserterItems } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tshowPatterns: !! __experimentalGetAllowedPatterns(\n\t\t\t\t\tdestinationRootClientId\n\t\t\t\t).length,\n\t\t\t\tinserterItems: getInserterItems( destinationRootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ destinationRootClientId ]\n\t);\n\tconst hasReusableBlocks = useMemo( () => {\n\t\treturn inserterItems.some(\n\t\t\t( { category } ) => category === 'reusable'\n\t\t);\n\t}, [ inserterItems ] );\n\n\tconst mediaCategories = useMediaCategories( destinationRootClientId );\n\tconst showMedia = !! mediaCategories.length;\n\n\tconst onInsert = useCallback(\n\t\t( blocks, meta, shouldForceFocusBlock ) => {\n\t\t\tonInsertBlocks( blocks, meta, shouldForceFocusBlock );\n\t\t\tonSelect();\n\t\t},\n\t\t[ onInsertBlocks, onSelect ]\n\t);\n\n\tconst onInsertPattern = useCallback(\n\t\t( blocks, patternName ) => {\n\t\t\tonInsertBlocks( blocks, { patternName } );\n\t\t\tonSelect();\n\t\t},\n\t\t[ onInsertBlocks, onSelect ]\n\t);\n\n\tconst onHover = useCallback(\n\t\t( item ) => {\n\t\t\tonToggleInsertionPoint( !! item );\n\t\t\tsetHoveredItem( item );\n\t\t},\n\t\t[ onToggleInsertionPoint, setHoveredItem ]\n\t);\n\n\tconst onHoverPattern = useCallback(\n\t\t( item ) => {\n\t\t\tonToggleInsertionPoint( !! item );\n\t\t},\n\t\t[ onToggleInsertionPoint ]\n\t);\n\n\tconst onClickPatternCategory = useCallback(\n\t\t( patternCategory ) => {\n\t\t\tsetSelectedPatternCategory( patternCategory );\n\t\t},\n\t\t[ setSelectedPatternCategory ]\n\t);\n\n\tconst blocksTab = useMemo(\n\t\t() => (\n\t\t\t<>\n\t\t\t\t<div className=\"block-editor-inserter__block-list\">\n\t\t\t\t\t<BlockTypesTab\n\t\t\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\t\tonHover={ onHover }\n\t\t\t\t\t\tshowMostUsedBlocks={ showMostUsedBlocks }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{ showInserterHelpPanel && (\n\t\t\t\t\t<div className=\"block-editor-inserter__tips\">\n\t\t\t\t\t\t<VisuallyHidden as=\"h2\">\n\t\t\t\t\t\t\t{ __( 'A tip for using the block editor' ) }\n\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t<Tips />\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</>\n\t\t),\n\t\t[\n\t\t\tdestinationRootClientId,\n\t\t\tonInsert,\n\t\t\tonHover,\n\t\t\tdelayedFilterValue,\n\t\t\tshowMostUsedBlocks,\n\t\t\tshowInserterHelpPanel,\n\t\t]\n\t);\n\n\tconst patternsTab = useMemo(\n\t\t() => (\n\t\t\t<BlockPatternsTabs\n\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\tonInsert={ onInsertPattern }\n\t\t\t\tonSelectCategory={ onClickPatternCategory }\n\t\t\t\tselectedCategory={ selectedPatternCategory }\n\t\t\t/>\n\t\t),\n\t\t[\n\t\t\tdestinationRootClientId,\n\t\t\tonInsertPattern,\n\t\t\tonClickPatternCategory,\n\t\t\tselectedPatternCategory,\n\t\t]\n\t);\n\n\tconst reusableBlocksTab = useMemo(\n\t\t() => (\n\t\t\t<ReusableBlocksTab\n\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t\tonHover={ onHover }\n\t\t\t/>\n\t\t),\n\t\t[ destinationRootClientId, onInsert, onHover ]\n\t);\n\n\tconst mediaTab = useMemo(\n\t\t() => (\n\t\t\t<MediaTab\n\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\tselectedCategory={ selectedMediaCategory }\n\t\t\t\tonSelectCategory={ setSelectedMediaCategory }\n\t\t\t\tonInsert={ onInsert }\n\t\t\t/>\n\t\t),\n\t\t[\n\t\t\tdestinationRootClientId,\n\t\t\tonInsert,\n\t\t\tselectedMediaCategory,\n\t\t\tsetSelectedMediaCategory,\n\t\t]\n\t);\n\n\tconst getCurrentTab = useCallback(\n\t\t( tab ) => {\n\t\t\tif ( tab.name === 'blocks' ) {\n\t\t\t\treturn blocksTab;\n\t\t\t} else if ( tab.name === 'patterns' ) {\n\t\t\t\treturn patternsTab;\n\t\t\t} else if ( tab.name === 'reusable' ) {\n\t\t\t\treturn reusableBlocksTab;\n\t\t\t} else if ( tab.name === 'media' ) {\n\t\t\t\treturn mediaTab;\n\t\t\t}\n\t\t},\n\t\t[ blocksTab, patternsTab, reusableBlocksTab, mediaTab ]\n\t);\n\n\tconst searchRef = useRef();\n\tuseImperativeHandle( ref, () => ( {\n\t\tfocusSearch: () => {\n\t\t\tsearchRef.current.focus();\n\t\t},\n\t} ) );\n\n\tconst showPatternPanel =\n\t\tselectedTab === 'patterns' &&\n\t\t! delayedFilterValue &&\n\t\tselectedPatternCategory;\n\tconst showAsTabs =\n\t\t! delayedFilterValue &&\n\t\t( showPatterns || hasReusableBlocks || showMedia );\n\tconst showMediaPanel =\n\t\tselectedTab === 'media' &&\n\t\t! delayedFilterValue &&\n\t\tselectedMediaCategory;\n\treturn (\n\t\t<div className=\"block-editor-inserter__menu\">\n\t\t\t<div\n\t\t\t\tclassName={ classnames( 'block-editor-inserter__main-area', {\n\t\t\t\t\t'show-as-tabs': showAsTabs,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<SearchControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tclassName=\"block-editor-inserter__search\"\n\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\tif ( hoveredItem ) setHoveredItem( null );\n\t\t\t\t\t\tsetFilterValue( value );\n\t\t\t\t\t} }\n\t\t\t\t\tvalue={ filterValue }\n\t\t\t\t\tlabel={ __( 'Search for blocks and patterns' ) }\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t\tref={ searchRef }\n\t\t\t\t/>\n\t\t\t\t{ !! delayedFilterValue && (\n\t\t\t\t\t<div className=\"block-editor-inserter__no-tab-container\">\n\t\t\t\t\t\t<InserterSearchResults\n\t\t\t\t\t\t\tfilterValue={ delayedFilterValue }\n\t\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\t\tonHover={ onHover }\n\t\t\t\t\t\t\trootClientId={ rootClientId }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tisAppender={ isAppender }\n\t\t\t\t\t\t\t__experimentalInsertionIndex={\n\t\t\t\t\t\t\t\t__experimentalInsertionIndex\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tshowBlockDirectory\n\t\t\t\t\t\t\tshouldFocusBlock={ shouldFocusBlock }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t{ showAsTabs && (\n\t\t\t\t\t<InserterTabs\n\t\t\t\t\t\tshowPatterns={ showPatterns }\n\t\t\t\t\t\tshowReusableBlocks={ hasReusableBlocks }\n\t\t\t\t\t\tshowMedia={ showMedia }\n\t\t\t\t\t\tprioritizePatterns={ prioritizePatterns }\n\t\t\t\t\t\tonSelect={ setSelectedTab }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ getCurrentTab }\n\t\t\t\t\t</InserterTabs>\n\t\t\t\t) }\n\t\t\t\t{ ! delayedFilterValue && ! showAsTabs && (\n\t\t\t\t\t<div className=\"block-editor-inserter__no-tab-container\">\n\t\t\t\t\t\t{ blocksTab }\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t\t{ showMediaPanel && (\n\t\t\t\t<MediaCategoryDialog\n\t\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\t\tonInsert={ onInsert }\n\t\t\t\t\tcategory={ selectedMediaCategory }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ showInserterHelpPanel && hoveredItem && (\n\t\t\t\t<InserterPreviewPanel item={ hoveredItem } />\n\t\t\t) }\n\t\t\t{ showPatternPanel && (\n\t\t\t\t<BlockPatternsCategoryDialog\n\t\t\t\t\trootClientId={ destinationRootClientId }\n\t\t\t\t\tonInsert={ onInsertPattern }\n\t\t\t\t\tonHover={ onHoverPattern }\n\t\t\t\t\tcategory={ selectedPatternCategory }\n\t\t\t\t\tshowTitlesAsTooltip\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nexport default forwardRef( InserterMenu );\n"]}
|
|
@@ -9,6 +9,7 @@ import classnames from 'classnames';
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { Button, Spinner, Notice, TextControl } from '@wordpress/components';
|
|
12
|
+
import { keyboardReturn } from '@wordpress/icons';
|
|
12
13
|
import { __ } from '@wordpress/i18n';
|
|
13
14
|
import { useRef, useState, useEffect } from '@wordpress/element';
|
|
14
15
|
import { focus } from '@wordpress/dom';
|
|
@@ -111,7 +112,7 @@ const noop = () => {};
|
|
|
111
112
|
|
|
112
113
|
|
|
113
114
|
function LinkControl(_ref) {
|
|
114
|
-
var _value$url, _value$url$trim
|
|
115
|
+
var _currentUrlInputValue, _value$url, _value$url$trim;
|
|
115
116
|
|
|
116
117
|
let {
|
|
117
118
|
searchInputPlaceholder,
|
|
@@ -119,7 +120,6 @@ function LinkControl(_ref) {
|
|
|
119
120
|
settings = DEFAULT_LINK_SETTINGS,
|
|
120
121
|
onChange = noop,
|
|
121
122
|
onRemove,
|
|
122
|
-
onCancel,
|
|
123
123
|
noDirectEntry = false,
|
|
124
124
|
showSuggestions = true,
|
|
125
125
|
showInitialSuggestions,
|
|
@@ -180,7 +180,6 @@ function LinkControl(_ref) {
|
|
|
180
180
|
nextFocusTarget.focus();
|
|
181
181
|
isEndingEditWithFocus.current = false;
|
|
182
182
|
}, [isEditingLink, isCreatingPage]);
|
|
183
|
-
const hasLinkValue = (value === null || value === void 0 ? void 0 : (_value$url = value.url) === null || _value$url === void 0 ? void 0 : (_value$url$trim = _value$url.trim()) === null || _value$url$trim === void 0 ? void 0 : _value$url$trim.length) > 0;
|
|
184
183
|
/**
|
|
185
184
|
* Cancels editing state and marks that focus may need to be restored after
|
|
186
185
|
* the next render, if focus was within the wrapper when editing finished.
|
|
@@ -223,28 +222,6 @@ function LinkControl(_ref) {
|
|
|
223
222
|
}
|
|
224
223
|
};
|
|
225
224
|
|
|
226
|
-
const resetInternalValues = () => {
|
|
227
|
-
setInternalUrlInputValue(value === null || value === void 0 ? void 0 : value.url);
|
|
228
|
-
setInternalTextInputValue(value === null || value === void 0 ? void 0 : value.title);
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
const handleCancel = event => {
|
|
232
|
-
event.preventDefault();
|
|
233
|
-
event.stopPropagation(); // Ensure that any unsubmitted input changes are reset.
|
|
234
|
-
|
|
235
|
-
resetInternalValues();
|
|
236
|
-
|
|
237
|
-
if (hasLinkValue) {
|
|
238
|
-
// If there is a link then exist editing mode and show preview.
|
|
239
|
-
stopEditing();
|
|
240
|
-
} else {
|
|
241
|
-
// If there is no link value, then remove the link entirely.
|
|
242
|
-
onRemove === null || onRemove === void 0 ? void 0 : onRemove();
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
onCancel === null || onCancel === void 0 ? void 0 : onCancel();
|
|
246
|
-
};
|
|
247
|
-
|
|
248
225
|
const currentUrlInputValue = propInputValue || internalUrlInputValue;
|
|
249
226
|
const currentInputIsEmpty = !(currentUrlInputValue !== null && currentUrlInputValue !== void 0 && (_currentUrlInputValue = currentUrlInputValue.trim()) !== null && _currentUrlInputValue !== void 0 && _currentUrlInputValue.length);
|
|
250
227
|
const shownUnlinkControl = onRemove && value && !isEditingLink && !isCreatingPage;
|
|
@@ -252,15 +229,14 @@ function LinkControl(_ref) {
|
|
|
252
229
|
// and it isn't just empty whitespace.
|
|
253
230
|
// See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.
|
|
254
231
|
|
|
255
|
-
const showTextControl =
|
|
256
|
-
const isEditing = (isEditingLink || !value) && !isCreatingPage;
|
|
232
|
+
const showTextControl = (value === null || value === void 0 ? void 0 : (_value$url = value.url) === null || _value$url === void 0 ? void 0 : (_value$url$trim = _value$url.trim()) === null || _value$url$trim === void 0 ? void 0 : _value$url$trim.length) > 0 && hasTextControl;
|
|
257
233
|
return createElement("div", {
|
|
258
234
|
tabIndex: -1,
|
|
259
235
|
ref: wrapperNode,
|
|
260
236
|
className: "block-editor-link-control"
|
|
261
237
|
}, isCreatingPage && createElement("div", {
|
|
262
238
|
className: "block-editor-link-control__loading"
|
|
263
|
-
}, createElement(Spinner, null), " ", __('Creating'), "\u2026"),
|
|
239
|
+
}, createElement(Spinner, null), " ", __('Creating'), "\u2026"), (isEditingLink || !value) && !isCreatingPage && createElement(Fragment, null, createElement("div", {
|
|
264
240
|
className: classnames({
|
|
265
241
|
'block-editor-link-control__search-input-wrapper': true,
|
|
266
242
|
'has-text-control': showTextControl
|
|
@@ -289,7 +265,16 @@ function LinkControl(_ref) {
|
|
|
289
265
|
withURLSuggestion: !noURLSuggestion,
|
|
290
266
|
createSuggestionButtonText: createSuggestionButtonText,
|
|
291
267
|
useLabel: showTextControl
|
|
292
|
-
}
|
|
268
|
+
}, createElement("div", {
|
|
269
|
+
className: "block-editor-link-control__search-actions"
|
|
270
|
+
}, createElement(Button, {
|
|
271
|
+
onClick: handleSubmit,
|
|
272
|
+
label: __('Submit'),
|
|
273
|
+
icon: keyboardReturn,
|
|
274
|
+
className: "block-editor-link-control__search-submit",
|
|
275
|
+
disabled: currentInputIsEmpty // Disallow submitting empty values.
|
|
276
|
+
|
|
277
|
+
})))), errorMessage && createElement(Notice, {
|
|
293
278
|
className: "block-editor-link-control__search-error",
|
|
294
279
|
status: "error",
|
|
295
280
|
isDismissible: false
|
|
@@ -301,26 +286,13 @@ function LinkControl(_ref) {
|
|
|
301
286
|
hasRichPreviews: hasRichPreviews,
|
|
302
287
|
hasUnlinkControl: shownUnlinkControl,
|
|
303
288
|
onRemove: onRemove
|
|
304
|
-
}), createElement("div", {
|
|
305
|
-
className: "block-editor-link-control__drawer"
|
|
306
|
-
}, showSettingsDrawer && createElement("div", {
|
|
289
|
+
}), showSettingsDrawer && createElement("div", {
|
|
307
290
|
className: "block-editor-link-control__tools"
|
|
308
291
|
}, createElement(LinkControlSettingsDrawer, {
|
|
309
292
|
value: value,
|
|
310
293
|
settings: settings,
|
|
311
294
|
onChange: onChange
|
|
312
|
-
})),
|
|
313
|
-
className: "block-editor-link-control__search-actions"
|
|
314
|
-
}, createElement(Button, {
|
|
315
|
-
variant: "primary",
|
|
316
|
-
onClick: handleSubmit,
|
|
317
|
-
className: "xblock-editor-link-control__search-submit",
|
|
318
|
-
disabled: currentInputIsEmpty // Disallow submitting empty values.
|
|
319
|
-
|
|
320
|
-
}, __('Apply')), createElement(Button, {
|
|
321
|
-
variant: "tertiary",
|
|
322
|
-
onClick: handleCancel
|
|
323
|
-
}, __('Cancel')))), renderControlBottom && renderControlBottom());
|
|
295
|
+
})), renderControlBottom && renderControlBottom());
|
|
324
296
|
}
|
|
325
297
|
|
|
326
298
|
LinkControl.ViewerFill = ViewerFill;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/link-control/index.js"],"names":["classnames","Button","Spinner","Notice","TextControl","__","useRef","useState","useEffect","focus","ENTER","LinkControlSettingsDrawer","LinkControlSearchInput","LinkPreview","useCreatePage","useInternalInputValue","ViewerFill","DEFAULT_LINK_SETTINGS","noop","LinkControl","searchInputPlaceholder","value","settings","onChange","onRemove","onCancel","noDirectEntry","showSuggestions","showInitialSuggestions","forceIsEditingLink","createSuggestion","withCreateSuggestion","inputValue","propInputValue","suggestionsQuery","noURLSuggestion","createSuggestionButtonText","hasRichPreviews","hasTextControl","renderControlBottom","undefined","isMounting","wrapperNode","textInputRef","isEndingEditWithFocus","internalUrlInputValue","setInternalUrlInputValue","url","internalTextInputValue","setInternalTextInputValue","title","isEditingLink","setIsEditingLink","createPage","isCreatingPage","errorMessage","current","whichFocusTargetIndex","nextFocusTarget","focusable","find","hasLinkValue","trim","length","stopEditing","contains","ownerDocument","activeElement","handleSelectSuggestion","updatedValue","handleSubmit","currentUrlInputValue","handleSubmitWithEnter","event","keyCode","currentInputIsEmpty","preventDefault","resetInternalValues","handleCancel","stopPropagation","shownUnlinkControl","showSettingsDrawer","showTextControl","isEditing"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Spinner, Notice, TextControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useState, useEffect } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport { ENTER } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSettingsDrawer from './settings-drawer';\nimport LinkControlSearchInput from './search-input';\nimport LinkPreview from './link-preview';\nimport useCreatePage from './use-create-page';\nimport useInternalInputValue from './use-internal-input-value';\nimport { ViewerFill } from './viewer-slot';\nimport { DEFAULT_LINK_SETTINGS } from './constants';\n\n/**\n * Default properties associated with a link control value.\n *\n * @typedef WPLinkControlDefaultValue\n *\n * @property {string} url Link URL.\n * @property {string=} title Link title.\n * @property {boolean=} opensInNewTab Whether link should open in a new browser\n * tab. This value is only assigned if not\n * providing a custom `settings` prop.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Custom settings values associated with a link.\n *\n * @typedef {{[setting:string]:any}} WPLinkControlSettingsValue\n */\n/* eslint-enable */\n\n/**\n * Custom settings values associated with a link.\n *\n * @typedef WPLinkControlSetting\n *\n * @property {string} id Identifier to use as property for setting value.\n * @property {string} title Human-readable label to show in user interface.\n */\n\n/**\n * Properties associated with a link control value, composed as a union of the\n * default properties and any custom settings values.\n *\n * @typedef {WPLinkControlDefaultValue&WPLinkControlSettingsValue} WPLinkControlValue\n */\n\n/** @typedef {(nextValue:WPLinkControlValue)=>void} WPLinkControlOnChangeProp */\n\n/**\n * Properties associated with a search suggestion used within the LinkControl.\n *\n * @typedef WPLinkControlSuggestion\n *\n * @property {string} id Identifier to use to uniquely identify the suggestion.\n * @property {string} type Identifies the type of the suggestion (eg: `post`,\n * `page`, `url`...etc)\n * @property {string} title Human-readable label to show in user interface.\n * @property {string} url A URL for the suggestion.\n */\n\n/** @typedef {(title:string)=>WPLinkControlSuggestion} WPLinkControlCreateSuggestionProp */\n\n/**\n * @typedef WPLinkControlProps\n *\n * @property {(WPLinkControlSetting[])=} settings An array of settings objects. Each object will used to\n * render a `ToggleControl` for that setting.\n * @property {boolean=} forceIsEditingLink If passed as either `true` or `false`, controls the\n * internal editing state of the component to respective\n * show or not show the URL input field.\n * @property {WPLinkControlValue=} value Current link value.\n * @property {WPLinkControlOnChangeProp=} onChange Value change handler, called with the updated value if\n * the user selects a new link or updates settings.\n * @property {boolean=} noDirectEntry Whether to allow turning a URL-like search query directly into a link.\n * @property {boolean=} showSuggestions Whether to present suggestions when typing the URL.\n * @property {boolean=} showInitialSuggestions Whether to present initial suggestions immediately.\n * @property {boolean=} withCreateSuggestion Whether to allow creation of link value from suggestion.\n * @property {Object=} suggestionsQuery Query parameters to pass along to wp.blockEditor.__experimentalFetchLinkSuggestions.\n * @property {boolean=} noURLSuggestion Whether to add a fallback suggestion which treats the search query as a URL.\n * @property {boolean=} hasTextControl Whether to add a text field to the UI to update the value.title.\n * @property {string|Function|undefined} createSuggestionButtonText The text to use in the button that calls createSuggestion.\n * @property {Function} renderControlBottom Optional controls to be rendered at the bottom of the component.\n */\n\nconst noop = () => {};\n\n/**\n * Renders a link control. A link control is a controlled input which maintains\n * a value associated with a link (HTML anchor element) and relevant settings\n * for how that link is expected to behave.\n *\n * @param {WPLinkControlProps} props Component props.\n */\nfunction LinkControl( {\n\tsearchInputPlaceholder,\n\tvalue,\n\tsettings = DEFAULT_LINK_SETTINGS,\n\tonChange = noop,\n\tonRemove,\n\tonCancel,\n\tnoDirectEntry = false,\n\tshowSuggestions = true,\n\tshowInitialSuggestions,\n\tforceIsEditingLink,\n\tcreateSuggestion,\n\twithCreateSuggestion,\n\tinputValue: propInputValue = '',\n\tsuggestionsQuery = {},\n\tnoURLSuggestion = false,\n\tcreateSuggestionButtonText,\n\thasRichPreviews = false,\n\thasTextControl = false,\n\trenderControlBottom = null,\n} ) {\n\tif ( withCreateSuggestion === undefined && createSuggestion ) {\n\t\twithCreateSuggestion = true;\n\t}\n\n\tconst isMounting = useRef( true );\n\tconst wrapperNode = useRef();\n\tconst textInputRef = useRef();\n\tconst isEndingEditWithFocus = useRef( false );\n\n\tconst [ internalUrlInputValue, setInternalUrlInputValue ] =\n\t\tuseInternalInputValue( value?.url || '' );\n\n\tconst [ internalTextInputValue, setInternalTextInputValue ] =\n\t\tuseInternalInputValue( value?.title || '' );\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState(\n\t\tforceIsEditingLink !== undefined\n\t\t\t? forceIsEditingLink\n\t\t\t: ! value || ! value.url\n\t);\n\n\tconst { createPage, isCreatingPage, errorMessage } =\n\t\tuseCreatePage( createSuggestion );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\tforceIsEditingLink !== undefined &&\n\t\t\tforceIsEditingLink !== isEditingLink\n\t\t) {\n\t\t\tsetIsEditingLink( forceIsEditingLink );\n\t\t}\n\t}, [ forceIsEditingLink ] );\n\n\tuseEffect( () => {\n\t\t// We don't auto focus into the Link UI on mount\n\t\t// because otherwise using the keyboard to select text\n\t\t// *within* the link format is not possible.\n\t\tif ( isMounting.current ) {\n\t\t\tisMounting.current = false;\n\t\t\treturn;\n\t\t}\n\t\t// Unless we are mounting, we always want to focus either:\n\t\t// - the URL input\n\t\t// - the first focusable element in the Link UI.\n\t\t// But in editing mode if there is a text input present then\n\t\t// the URL input is at index 1. If not then it is at index 0.\n\t\tconst whichFocusTargetIndex = textInputRef?.current ? 1 : 0;\n\n\t\t// Scenario - when:\n\t\t// - switching between editable and non editable LinkControl\n\t\t// - clicking on a link\n\t\t// ...then move focus to the *first* element to avoid focus loss\n\t\t// and to ensure focus is *within* the Link UI.\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperNode.current )[\n\t\t\t\twhichFocusTargetIndex\n\t\t\t] || wrapperNode.current;\n\n\t\tnextFocusTarget.focus();\n\n\t\tisEndingEditWithFocus.current = false;\n\t}, [ isEditingLink, isCreatingPage ] );\n\n\tconst hasLinkValue = value?.url?.trim()?.length > 0;\n\n\t/**\n\t * Cancels editing state and marks that focus may need to be restored after\n\t * the next render, if focus was within the wrapper when editing finished.\n\t */\n\tconst stopEditing = () => {\n\t\tisEndingEditWithFocus.current = !! wrapperNode.current?.contains(\n\t\t\twrapperNode.current.ownerDocument.activeElement\n\t\t);\n\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst handleSelectSuggestion = ( updatedValue ) => {\n\t\tonChange( {\n\t\t\t...updatedValue,\n\t\t\ttitle: internalTextInputValue || updatedValue?.title,\n\t\t} );\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif (\n\t\t\tcurrentUrlInputValue !== value?.url ||\n\t\t\tinternalTextInputValue !== value?.title\n\t\t) {\n\t\t\tonChange( {\n\t\t\t\t...value,\n\t\t\t\turl: currentUrlInputValue,\n\t\t\t\ttitle: internalTextInputValue,\n\t\t\t} );\n\t\t}\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmitWithEnter = ( event ) => {\n\t\tconst { keyCode } = event;\n\t\tif (\n\t\t\tkeyCode === ENTER &&\n\t\t\t! currentInputIsEmpty // Disallow submitting empty values.\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\thandleSubmit();\n\t\t}\n\t};\n\n\tconst resetInternalValues = () => {\n\t\tsetInternalUrlInputValue( value?.url );\n\t\tsetInternalTextInputValue( value?.title );\n\t};\n\n\tconst handleCancel = ( event ) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t// Ensure that any unsubmitted input changes are reset.\n\t\tresetInternalValues();\n\n\t\tif ( hasLinkValue ) {\n\t\t\t// If there is a link then exist editing mode and show preview.\n\t\t\tstopEditing();\n\t\t} else {\n\t\t\t// If there is no link value, then remove the link entirely.\n\t\t\tonRemove?.();\n\t\t}\n\n\t\tonCancel?.();\n\t};\n\n\tconst currentUrlInputValue = propInputValue || internalUrlInputValue;\n\n\tconst currentInputIsEmpty = ! currentUrlInputValue?.trim()?.length;\n\n\tconst shownUnlinkControl =\n\t\tonRemove && value && ! isEditingLink && ! isCreatingPage;\n\n\tconst showSettingsDrawer = !! settings?.length;\n\n\t// Only show text control once a URL value has been committed\n\t// and it isn't just empty whitespace.\n\t// See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.\n\tconst showTextControl = hasLinkValue && hasTextControl;\n\n\tconst isEditing = ( isEditingLink || ! value ) && ! isCreatingPage;\n\treturn (\n\t\t<div\n\t\t\ttabIndex={ -1 }\n\t\t\tref={ wrapperNode }\n\t\t\tclassName=\"block-editor-link-control\"\n\t\t>\n\t\t\t{ isCreatingPage && (\n\t\t\t\t<div className=\"block-editor-link-control__loading\">\n\t\t\t\t\t<Spinner /> { __( 'Creating' ) }…\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ isEditing && (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t\t'block-editor-link-control__search-input-wrapper': true,\n\t\t\t\t\t\t\t'has-text-control': showTextControl,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ showTextControl && (\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tref={ textInputRef }\n\t\t\t\t\t\t\t\tclassName=\"block-editor-link-control__field block-editor-link-control__text-content\"\n\t\t\t\t\t\t\t\tlabel=\"Text\"\n\t\t\t\t\t\t\t\tvalue={ internalTextInputValue }\n\t\t\t\t\t\t\t\tonChange={ setInternalTextInputValue }\n\t\t\t\t\t\t\t\tonKeyDown={ handleSubmitWithEnter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t<LinkControlSearchInput\n\t\t\t\t\t\t\tcurrentLink={ value }\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__field block-editor-link-control__search-input\"\n\t\t\t\t\t\t\tplaceholder={ searchInputPlaceholder }\n\t\t\t\t\t\t\tvalue={ currentUrlInputValue }\n\t\t\t\t\t\t\twithCreateSuggestion={ withCreateSuggestion }\n\t\t\t\t\t\t\tonCreateSuggestion={ createPage }\n\t\t\t\t\t\t\tonChange={ setInternalUrlInputValue }\n\t\t\t\t\t\t\tonSelect={ handleSelectSuggestion }\n\t\t\t\t\t\t\tshowInitialSuggestions={ showInitialSuggestions }\n\t\t\t\t\t\t\tallowDirectEntry={ ! noDirectEntry }\n\t\t\t\t\t\t\tshowSuggestions={ showSuggestions }\n\t\t\t\t\t\t\tsuggestionsQuery={ suggestionsQuery }\n\t\t\t\t\t\t\twithURLSuggestion={ ! noURLSuggestion }\n\t\t\t\t\t\t\tcreateSuggestionButtonText={\n\t\t\t\t\t\t\t\tcreateSuggestionButtonText\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tuseLabel={ showTextControl }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t{ errorMessage && (\n\t\t\t\t\t\t<Notice\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__search-error\"\n\t\t\t\t\t\t\tstatus=\"error\"\n\t\t\t\t\t\t\tisDismissible={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ errorMessage }\n\t\t\t\t\t\t</Notice>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ value && ! isEditingLink && ! isCreatingPage && (\n\t\t\t\t<LinkPreview\n\t\t\t\t\tkey={ value?.url } // force remount when URL changes to avoid race conditions for rich previews\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonEditClick={ () => setIsEditingLink( true ) }\n\t\t\t\t\thasRichPreviews={ hasRichPreviews }\n\t\t\t\t\thasUnlinkControl={ shownUnlinkControl }\n\t\t\t\t\tonRemove={ onRemove }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t<div className=\"block-editor-link-control__drawer\">\n\t\t\t\t{ showSettingsDrawer && (\n\t\t\t\t\t<div className=\"block-editor-link-control__tools\">\n\t\t\t\t\t\t<LinkControlSettingsDrawer\n\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\tsettings={ settings }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\n\t\t\t\t{ isEditing && (\n\t\t\t\t\t<div className=\"block-editor-link-control__search-actions\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ handleSubmit }\n\t\t\t\t\t\t\tclassName=\"xblock-editor-link-control__search-submit\"\n\t\t\t\t\t\t\tdisabled={ currentInputIsEmpty } // Disallow submitting empty values.\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ handleCancel }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</div>\n\n\t\t\t{ renderControlBottom && renderControlBottom() }\n\t\t</div>\n\t);\n}\n\nLinkControl.ViewerFill = ViewerFill;\n\nexport default LinkControl;\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/link-control/index.js"],"names":["classnames","Button","Spinner","Notice","TextControl","keyboardReturn","__","useRef","useState","useEffect","focus","ENTER","LinkControlSettingsDrawer","LinkControlSearchInput","LinkPreview","useCreatePage","useInternalInputValue","ViewerFill","DEFAULT_LINK_SETTINGS","noop","LinkControl","searchInputPlaceholder","value","settings","onChange","onRemove","noDirectEntry","showSuggestions","showInitialSuggestions","forceIsEditingLink","createSuggestion","withCreateSuggestion","inputValue","propInputValue","suggestionsQuery","noURLSuggestion","createSuggestionButtonText","hasRichPreviews","hasTextControl","renderControlBottom","undefined","isMounting","wrapperNode","textInputRef","isEndingEditWithFocus","internalUrlInputValue","setInternalUrlInputValue","url","internalTextInputValue","setInternalTextInputValue","title","isEditingLink","setIsEditingLink","createPage","isCreatingPage","errorMessage","current","whichFocusTargetIndex","nextFocusTarget","focusable","find","stopEditing","contains","ownerDocument","activeElement","handleSelectSuggestion","updatedValue","handleSubmit","currentUrlInputValue","handleSubmitWithEnter","event","keyCode","currentInputIsEmpty","preventDefault","trim","length","shownUnlinkControl","showSettingsDrawer","showTextControl"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Button, Spinner, Notice, TextControl } from '@wordpress/components';\nimport { keyboardReturn } from '@wordpress/icons';\nimport { __ } from '@wordpress/i18n';\nimport { useRef, useState, useEffect } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\nimport { ENTER } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport LinkControlSettingsDrawer from './settings-drawer';\nimport LinkControlSearchInput from './search-input';\nimport LinkPreview from './link-preview';\nimport useCreatePage from './use-create-page';\nimport useInternalInputValue from './use-internal-input-value';\nimport { ViewerFill } from './viewer-slot';\nimport { DEFAULT_LINK_SETTINGS } from './constants';\n\n/**\n * Default properties associated with a link control value.\n *\n * @typedef WPLinkControlDefaultValue\n *\n * @property {string} url Link URL.\n * @property {string=} title Link title.\n * @property {boolean=} opensInNewTab Whether link should open in a new browser\n * tab. This value is only assigned if not\n * providing a custom `settings` prop.\n */\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Custom settings values associated with a link.\n *\n * @typedef {{[setting:string]:any}} WPLinkControlSettingsValue\n */\n/* eslint-enable */\n\n/**\n * Custom settings values associated with a link.\n *\n * @typedef WPLinkControlSetting\n *\n * @property {string} id Identifier to use as property for setting value.\n * @property {string} title Human-readable label to show in user interface.\n */\n\n/**\n * Properties associated with a link control value, composed as a union of the\n * default properties and any custom settings values.\n *\n * @typedef {WPLinkControlDefaultValue&WPLinkControlSettingsValue} WPLinkControlValue\n */\n\n/** @typedef {(nextValue:WPLinkControlValue)=>void} WPLinkControlOnChangeProp */\n\n/**\n * Properties associated with a search suggestion used within the LinkControl.\n *\n * @typedef WPLinkControlSuggestion\n *\n * @property {string} id Identifier to use to uniquely identify the suggestion.\n * @property {string} type Identifies the type of the suggestion (eg: `post`,\n * `page`, `url`...etc)\n * @property {string} title Human-readable label to show in user interface.\n * @property {string} url A URL for the suggestion.\n */\n\n/** @typedef {(title:string)=>WPLinkControlSuggestion} WPLinkControlCreateSuggestionProp */\n\n/**\n * @typedef WPLinkControlProps\n *\n * @property {(WPLinkControlSetting[])=} settings An array of settings objects. Each object will used to\n * render a `ToggleControl` for that setting.\n * @property {boolean=} forceIsEditingLink If passed as either `true` or `false`, controls the\n * internal editing state of the component to respective\n * show or not show the URL input field.\n * @property {WPLinkControlValue=} value Current link value.\n * @property {WPLinkControlOnChangeProp=} onChange Value change handler, called with the updated value if\n * the user selects a new link or updates settings.\n * @property {boolean=} noDirectEntry Whether to allow turning a URL-like search query directly into a link.\n * @property {boolean=} showSuggestions Whether to present suggestions when typing the URL.\n * @property {boolean=} showInitialSuggestions Whether to present initial suggestions immediately.\n * @property {boolean=} withCreateSuggestion Whether to allow creation of link value from suggestion.\n * @property {Object=} suggestionsQuery Query parameters to pass along to wp.blockEditor.__experimentalFetchLinkSuggestions.\n * @property {boolean=} noURLSuggestion Whether to add a fallback suggestion which treats the search query as a URL.\n * @property {boolean=} hasTextControl Whether to add a text field to the UI to update the value.title.\n * @property {string|Function|undefined} createSuggestionButtonText The text to use in the button that calls createSuggestion.\n * @property {Function} renderControlBottom Optional controls to be rendered at the bottom of the component.\n */\n\nconst noop = () => {};\n\n/**\n * Renders a link control. A link control is a controlled input which maintains\n * a value associated with a link (HTML anchor element) and relevant settings\n * for how that link is expected to behave.\n *\n * @param {WPLinkControlProps} props Component props.\n */\nfunction LinkControl( {\n\tsearchInputPlaceholder,\n\tvalue,\n\tsettings = DEFAULT_LINK_SETTINGS,\n\tonChange = noop,\n\tonRemove,\n\tnoDirectEntry = false,\n\tshowSuggestions = true,\n\tshowInitialSuggestions,\n\tforceIsEditingLink,\n\tcreateSuggestion,\n\twithCreateSuggestion,\n\tinputValue: propInputValue = '',\n\tsuggestionsQuery = {},\n\tnoURLSuggestion = false,\n\tcreateSuggestionButtonText,\n\thasRichPreviews = false,\n\thasTextControl = false,\n\trenderControlBottom = null,\n} ) {\n\tif ( withCreateSuggestion === undefined && createSuggestion ) {\n\t\twithCreateSuggestion = true;\n\t}\n\n\tconst isMounting = useRef( true );\n\tconst wrapperNode = useRef();\n\tconst textInputRef = useRef();\n\tconst isEndingEditWithFocus = useRef( false );\n\n\tconst [ internalUrlInputValue, setInternalUrlInputValue ] =\n\t\tuseInternalInputValue( value?.url || '' );\n\n\tconst [ internalTextInputValue, setInternalTextInputValue ] =\n\t\tuseInternalInputValue( value?.title || '' );\n\n\tconst [ isEditingLink, setIsEditingLink ] = useState(\n\t\tforceIsEditingLink !== undefined\n\t\t\t? forceIsEditingLink\n\t\t\t: ! value || ! value.url\n\t);\n\n\tconst { createPage, isCreatingPage, errorMessage } =\n\t\tuseCreatePage( createSuggestion );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\tforceIsEditingLink !== undefined &&\n\t\t\tforceIsEditingLink !== isEditingLink\n\t\t) {\n\t\t\tsetIsEditingLink( forceIsEditingLink );\n\t\t}\n\t}, [ forceIsEditingLink ] );\n\n\tuseEffect( () => {\n\t\t// We don't auto focus into the Link UI on mount\n\t\t// because otherwise using the keyboard to select text\n\t\t// *within* the link format is not possible.\n\t\tif ( isMounting.current ) {\n\t\t\tisMounting.current = false;\n\t\t\treturn;\n\t\t}\n\t\t// Unless we are mounting, we always want to focus either:\n\t\t// - the URL input\n\t\t// - the first focusable element in the Link UI.\n\t\t// But in editing mode if there is a text input present then\n\t\t// the URL input is at index 1. If not then it is at index 0.\n\t\tconst whichFocusTargetIndex = textInputRef?.current ? 1 : 0;\n\n\t\t// Scenario - when:\n\t\t// - switching between editable and non editable LinkControl\n\t\t// - clicking on a link\n\t\t// ...then move focus to the *first* element to avoid focus loss\n\t\t// and to ensure focus is *within* the Link UI.\n\t\tconst nextFocusTarget =\n\t\t\tfocus.focusable.find( wrapperNode.current )[\n\t\t\t\twhichFocusTargetIndex\n\t\t\t] || wrapperNode.current;\n\n\t\tnextFocusTarget.focus();\n\n\t\tisEndingEditWithFocus.current = false;\n\t}, [ isEditingLink, isCreatingPage ] );\n\n\t/**\n\t * Cancels editing state and marks that focus may need to be restored after\n\t * the next render, if focus was within the wrapper when editing finished.\n\t */\n\tconst stopEditing = () => {\n\t\tisEndingEditWithFocus.current = !! wrapperNode.current?.contains(\n\t\t\twrapperNode.current.ownerDocument.activeElement\n\t\t);\n\n\t\tsetIsEditingLink( false );\n\t};\n\n\tconst handleSelectSuggestion = ( updatedValue ) => {\n\t\tonChange( {\n\t\t\t...updatedValue,\n\t\t\ttitle: internalTextInputValue || updatedValue?.title,\n\t\t} );\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmit = () => {\n\t\tif (\n\t\t\tcurrentUrlInputValue !== value?.url ||\n\t\t\tinternalTextInputValue !== value?.title\n\t\t) {\n\t\t\tonChange( {\n\t\t\t\t...value,\n\t\t\t\turl: currentUrlInputValue,\n\t\t\t\ttitle: internalTextInputValue,\n\t\t\t} );\n\t\t}\n\t\tstopEditing();\n\t};\n\n\tconst handleSubmitWithEnter = ( event ) => {\n\t\tconst { keyCode } = event;\n\t\tif (\n\t\t\tkeyCode === ENTER &&\n\t\t\t! currentInputIsEmpty // Disallow submitting empty values.\n\t\t) {\n\t\t\tevent.preventDefault();\n\t\t\thandleSubmit();\n\t\t}\n\t};\n\n\tconst currentUrlInputValue = propInputValue || internalUrlInputValue;\n\n\tconst currentInputIsEmpty = ! currentUrlInputValue?.trim()?.length;\n\n\tconst shownUnlinkControl =\n\t\tonRemove && value && ! isEditingLink && ! isCreatingPage;\n\n\tconst showSettingsDrawer = !! settings?.length;\n\n\t// Only show text control once a URL value has been committed\n\t// and it isn't just empty whitespace.\n\t// See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.\n\tconst showTextControl = value?.url?.trim()?.length > 0 && hasTextControl;\n\n\treturn (\n\t\t<div\n\t\t\ttabIndex={ -1 }\n\t\t\tref={ wrapperNode }\n\t\t\tclassName=\"block-editor-link-control\"\n\t\t>\n\t\t\t{ isCreatingPage && (\n\t\t\t\t<div className=\"block-editor-link-control__loading\">\n\t\t\t\t\t<Spinner /> { __( 'Creating' ) }…\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ ( isEditingLink || ! value ) && ! isCreatingPage && (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t\t'block-editor-link-control__search-input-wrapper': true,\n\t\t\t\t\t\t\t'has-text-control': showTextControl,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ showTextControl && (\n\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\tref={ textInputRef }\n\t\t\t\t\t\t\t\tclassName=\"block-editor-link-control__field block-editor-link-control__text-content\"\n\t\t\t\t\t\t\t\tlabel=\"Text\"\n\t\t\t\t\t\t\t\tvalue={ internalTextInputValue }\n\t\t\t\t\t\t\t\tonChange={ setInternalTextInputValue }\n\t\t\t\t\t\t\t\tonKeyDown={ handleSubmitWithEnter }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t<LinkControlSearchInput\n\t\t\t\t\t\t\tcurrentLink={ value }\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__field block-editor-link-control__search-input\"\n\t\t\t\t\t\t\tplaceholder={ searchInputPlaceholder }\n\t\t\t\t\t\t\tvalue={ currentUrlInputValue }\n\t\t\t\t\t\t\twithCreateSuggestion={ withCreateSuggestion }\n\t\t\t\t\t\t\tonCreateSuggestion={ createPage }\n\t\t\t\t\t\t\tonChange={ setInternalUrlInputValue }\n\t\t\t\t\t\t\tonSelect={ handleSelectSuggestion }\n\t\t\t\t\t\t\tshowInitialSuggestions={ showInitialSuggestions }\n\t\t\t\t\t\t\tallowDirectEntry={ ! noDirectEntry }\n\t\t\t\t\t\t\tshowSuggestions={ showSuggestions }\n\t\t\t\t\t\t\tsuggestionsQuery={ suggestionsQuery }\n\t\t\t\t\t\t\twithURLSuggestion={ ! noURLSuggestion }\n\t\t\t\t\t\t\tcreateSuggestionButtonText={\n\t\t\t\t\t\t\t\tcreateSuggestionButtonText\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tuseLabel={ showTextControl }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"block-editor-link-control__search-actions\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tonClick={ handleSubmit }\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Submit' ) }\n\t\t\t\t\t\t\t\t\ticon={ keyboardReturn }\n\t\t\t\t\t\t\t\t\tclassName=\"block-editor-link-control__search-submit\"\n\t\t\t\t\t\t\t\t\tdisabled={ currentInputIsEmpty } // Disallow submitting empty values.\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</LinkControlSearchInput>\n\t\t\t\t\t</div>\n\t\t\t\t\t{ errorMessage && (\n\t\t\t\t\t\t<Notice\n\t\t\t\t\t\t\tclassName=\"block-editor-link-control__search-error\"\n\t\t\t\t\t\t\tstatus=\"error\"\n\t\t\t\t\t\t\tisDismissible={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ errorMessage }\n\t\t\t\t\t\t</Notice>\n\t\t\t\t\t) }\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ value && ! isEditingLink && ! isCreatingPage && (\n\t\t\t\t<LinkPreview\n\t\t\t\t\tkey={ value?.url } // force remount when URL changes to avoid race conditions for rich previews\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonEditClick={ () => setIsEditingLink( true ) }\n\t\t\t\t\thasRichPreviews={ hasRichPreviews }\n\t\t\t\t\thasUnlinkControl={ shownUnlinkControl }\n\t\t\t\t\tonRemove={ onRemove }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ showSettingsDrawer && (\n\t\t\t\t<div className=\"block-editor-link-control__tools\">\n\t\t\t\t\t<LinkControlSettingsDrawer\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tsettings={ settings }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ renderControlBottom && renderControlBottom() }\n\t\t</div>\n\t);\n}\n\nLinkControl.ViewerFill = ViewerFill;\n\nexport default LinkControl;\n"]}
|