@wordpress/block-library 9.30.0 → 9.30.1-next.6f42e1382.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/accordion-content/edit.js +8 -8
- package/build/accordion-content/edit.js.map +1 -1
- package/build/accordion-content/index.js +2 -1
- package/build/accordion-content/index.js.map +1 -1
- package/build/accordion-panel/index.js +2 -1
- package/build/accordion-panel/index.js.map +1 -1
- package/build/buttons/index.js +2 -1
- package/build/buttons/index.js.map +1 -1
- package/build/categories/edit.js +3 -1
- package/build/categories/edit.js.map +1 -1
- package/build/index.js +4 -0
- package/build/index.js.map +1 -1
- package/build/navigation/constants.js +5 -1
- package/build/navigation/constants.js.map +1 -1
- package/build/navigation/edit/index.js +45 -1
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/edit/leaf-more-menu.js +0 -1
- package/build/navigation/edit/leaf-more-menu.js.map +1 -1
- package/build/navigation/edit/menu-inspector-controls.js +40 -5
- package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build/navigation-link/block-inserter.js +69 -0
- package/build/navigation-link/block-inserter.js.map +1 -0
- package/build/navigation-link/dialog-wrapper.js +80 -0
- package/build/navigation-link/dialog-wrapper.js.map +1 -0
- package/build/navigation-link/link-ui.js +80 -120
- package/build/navigation-link/link-ui.js.map +1 -1
- package/build/navigation-link/page-creator.js +137 -0
- package/build/navigation-link/page-creator.js.map +1 -0
- package/build/search/edit.js +22 -14
- package/build/search/edit.js.map +1 -1
- package/build/social-links/index.js +2 -1
- package/build/social-links/index.js.map +1 -1
- package/build/table-of-contents/edit.js +33 -9
- package/build/table-of-contents/edit.js.map +1 -1
- package/build/table-of-contents/index.js +4 -0
- package/build/table-of-contents/index.js.map +1 -1
- package/build/table-of-contents/list.js +6 -3
- package/build/table-of-contents/list.js.map +1 -1
- package/build/table-of-contents/save.js +6 -3
- package/build/table-of-contents/save.js.map +1 -1
- package/build/term-template/edit.js +318 -0
- package/build/term-template/edit.js.map +1 -0
- package/build/term-template/index.js +109 -0
- package/build/term-template/index.js.map +1 -0
- package/build/term-template/save.js +16 -0
- package/build/term-template/save.js.map +1 -0
- package/build/term-template/variations.js +83 -0
- package/build/term-template/variations.js.map +1 -0
- package/build/terms-query/edit.js +20 -0
- package/build/terms-query/edit.js.map +1 -0
- package/build/terms-query/index.js +83 -0
- package/build/terms-query/index.js.map +1 -0
- package/build/terms-query/inspector-controls.js +246 -0
- package/build/terms-query/inspector-controls.js.map +1 -0
- package/build/terms-query/save.js +24 -0
- package/build/terms-query/save.js.map +1 -0
- package/build/terms-query/terms-query-content.js +71 -0
- package/build/terms-query/terms-query-content.js.map +1 -0
- package/build-module/accordion-content/edit.js +8 -8
- package/build-module/accordion-content/edit.js.map +1 -1
- package/build-module/accordion-content/index.js +2 -1
- package/build-module/accordion-content/index.js.map +1 -1
- package/build-module/accordion-panel/index.js +2 -1
- package/build-module/accordion-panel/index.js.map +1 -1
- package/build-module/buttons/index.js +2 -1
- package/build-module/buttons/index.js.map +1 -1
- package/build-module/categories/edit.js +3 -1
- package/build-module/categories/edit.js.map +1 -1
- package/build-module/index.js +4 -0
- package/build-module/index.js.map +1 -1
- package/build-module/navigation/constants.js +5 -1
- package/build-module/navigation/constants.js.map +1 -1
- package/build-module/navigation/edit/index.js +50 -4
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/edit/leaf-more-menu.js +0 -1
- package/build-module/navigation/edit/leaf-more-menu.js.map +1 -1
- package/build-module/navigation/edit/menu-inspector-controls.js +40 -5
- package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build-module/navigation-link/block-inserter.js +61 -0
- package/build-module/navigation-link/block-inserter.js.map +1 -0
- package/build-module/navigation-link/dialog-wrapper.js +75 -0
- package/build-module/navigation-link/dialog-wrapper.js.map +1 -0
- package/build-module/navigation-link/link-ui.js +85 -125
- package/build-module/navigation-link/link-ui.js.map +1 -1
- package/build-module/navigation-link/page-creator.js +130 -0
- package/build-module/navigation-link/page-creator.js.map +1 -0
- package/build-module/search/edit.js +22 -14
- package/build-module/search/edit.js.map +1 -1
- package/build-module/social-links/index.js +2 -1
- package/build-module/social-links/index.js.map +1 -1
- package/build-module/table-of-contents/edit.js +35 -11
- package/build-module/table-of-contents/edit.js.map +1 -1
- package/build-module/table-of-contents/index.js +4 -0
- package/build-module/table-of-contents/index.js.map +1 -1
- package/build-module/table-of-contents/list.js +6 -3
- package/build-module/table-of-contents/list.js.map +1 -1
- package/build-module/table-of-contents/save.js +6 -3
- package/build-module/table-of-contents/save.js.map +1 -1
- package/build-module/term-template/edit.js +310 -0
- package/build-module/term-template/edit.js.map +1 -0
- package/build-module/term-template/index.js +102 -0
- package/build-module/term-template/index.js.map +1 -0
- package/build-module/term-template/save.js +9 -0
- package/build-module/term-template/save.js.map +1 -0
- package/build-module/term-template/variations.js +76 -0
- package/build-module/term-template/variations.js.map +1 -0
- package/build-module/terms-query/edit.js +12 -0
- package/build-module/terms-query/edit.js.map +1 -0
- package/build-module/terms-query/index.js +76 -0
- package/build-module/terms-query/index.js.map +1 -0
- package/build-module/terms-query/inspector-controls.js +239 -0
- package/build-module/terms-query/inspector-controls.js.map +1 -0
- package/build-module/terms-query/save.js +17 -0
- package/build-module/terms-query/save.js.map +1 -0
- package/build-module/terms-query/terms-query-content.js +63 -0
- package/build-module/terms-query/terms-query-content.js.map +1 -0
- package/build-style/accordion/style-rtl.css +5 -6
- package/build-style/accordion/style.css +5 -6
- package/build-style/editor-rtl.css +38 -0
- package/build-style/editor.css +38 -0
- package/build-style/form-input/style-rtl.css +4 -3
- package/build-style/form-input/style.css +4 -3
- package/build-style/navigation-link/editor-rtl.css +14 -0
- package/build-style/navigation-link/editor.css +14 -0
- package/build-style/navigation-link/style-rtl.css +1 -1
- package/build-style/navigation-link/style.css +1 -1
- package/build-style/post-comments-form/style-rtl.css +8 -5
- package/build-style/post-comments-form/style.css +8 -5
- package/build-style/search/style-rtl.css +11 -12
- package/build-style/search/style.css +11 -12
- package/build-style/style-rtl.css +45 -27
- package/build-style/style.css +45 -27
- package/build-style/term-template/editor-rtl.css +160 -0
- package/build-style/term-template/editor.css +160 -0
- package/build-style/term-template/style-rtl.css +146 -0
- package/build-style/term-template/style.css +146 -0
- package/build-style/terms-query/style-rtl.css +140 -0
- package/build-style/terms-query/style.css +140 -0
- package/build-types/table-of-contents/list.d.ts +2 -1
- package/build-types/table-of-contents/list.d.ts.map +1 -1
- package/package.json +35 -35
- package/src/accordion/style.scss +6 -6
- package/src/accordion-content/block.json +2 -1
- package/src/accordion-content/edit.js +21 -27
- package/src/accordion-panel/block.json +2 -1
- package/src/buttons/block.json +2 -1
- package/src/categories/edit.js +2 -1
- package/src/cover/test/edit.js +1 -5
- package/src/editor.scss +1 -0
- package/src/form-input/style.scss +3 -2
- package/src/index.js +4 -0
- package/src/navigation/constants.js +4 -0
- package/src/navigation/edit/index.js +50 -1
- package/src/navigation/edit/leaf-more-menu.js +0 -1
- package/src/navigation/edit/menu-inspector-controls.js +40 -5
- package/src/navigation-link/block-inserter.js +65 -0
- package/src/navigation-link/dialog-wrapper.js +74 -0
- package/src/navigation-link/editor.scss +17 -0
- package/src/navigation-link/link-ui.js +108 -164
- package/src/navigation-link/page-creator.js +157 -0
- package/src/navigation-link/style.scss +1 -1
- package/src/post-comments-form/style.scss +11 -11
- package/src/post-date/index.php +18 -13
- package/src/search/edit.js +44 -13
- package/src/search/index.php +16 -2
- package/src/search/style.scss +15 -16
- package/src/social-links/block.json +2 -1
- package/src/style.scss +2 -0
- package/src/table-of-contents/block.json +4 -0
- package/src/table-of-contents/edit.js +58 -21
- package/src/table-of-contents/list.tsx +7 -2
- package/src/table-of-contents/save.js +7 -3
- package/src/term-template/block.json +73 -0
- package/src/term-template/edit.js +391 -0
- package/src/term-template/editor.scss +26 -0
- package/src/term-template/index.js +26 -0
- package/src/term-template/index.php +224 -0
- package/src/term-template/save.js +8 -0
- package/src/term-template/style.scss +12 -0
- package/src/term-template/variations.js +87 -0
- package/src/terms-query/block.json +49 -0
- package/src/terms-query/edit.js +10 -0
- package/src/terms-query/index.js +24 -0
- package/src/terms-query/index.php +44 -0
- package/src/terms-query/inspector-controls.js +233 -0
- package/src/terms-query/save.js +10 -0
- package/src/terms-query/style.scss +6 -0
- package/src/terms-query/terms-query-content.js +74 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { Button, VisuallyHidden } from '@wordpress/components';
|
|
5
|
+
import { __, isRTL } from '@wordpress/i18n';
|
|
6
|
+
import { chevronLeftSmall, chevronRightSmall } from '@wordpress/icons';
|
|
7
|
+
import { useInstanceId, useFocusOnMount } from '@wordpress/compose';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Shared BackButton component for consistent navigation across LinkUI sub-components.
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} props Component props.
|
|
13
|
+
* @param {string} props.className CSS class name for the button.
|
|
14
|
+
* @param {Function} props.onBack Callback when user wants to go back.
|
|
15
|
+
*/
|
|
16
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
function BackButton({
|
|
18
|
+
className,
|
|
19
|
+
onBack
|
|
20
|
+
}) {
|
|
21
|
+
return /*#__PURE__*/_jsx(Button, {
|
|
22
|
+
className: className,
|
|
23
|
+
icon: isRTL() ? chevronRightSmall : chevronLeftSmall,
|
|
24
|
+
onClick: e => {
|
|
25
|
+
e.preventDefault();
|
|
26
|
+
onBack();
|
|
27
|
+
},
|
|
28
|
+
size: "small",
|
|
29
|
+
children: __('Back')
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Shared DialogWrapper component for consistent dialog structure across LinkUI sub-components.
|
|
35
|
+
*
|
|
36
|
+
* @param {Object} props Component props.
|
|
37
|
+
* @param {string} props.className CSS class name for the dialog container.
|
|
38
|
+
* @param {string} props.title Dialog title for accessibility.
|
|
39
|
+
* @param {string} props.description Dialog description for accessibility.
|
|
40
|
+
* @param {Function} props.onBack Callback when user wants to go back.
|
|
41
|
+
* @param {Object} props.children Child components to render inside the dialog.
|
|
42
|
+
*/
|
|
43
|
+
function DialogWrapper({
|
|
44
|
+
className,
|
|
45
|
+
title,
|
|
46
|
+
description,
|
|
47
|
+
onBack,
|
|
48
|
+
children
|
|
49
|
+
}) {
|
|
50
|
+
const dialogTitleId = useInstanceId(DialogWrapper, 'link-ui-dialog-title');
|
|
51
|
+
const dialogDescriptionId = useInstanceId(DialogWrapper, 'link-ui-dialog-description');
|
|
52
|
+
const focusOnMountRef = useFocusOnMount('firstElement');
|
|
53
|
+
const backButtonClassName = `${className}__back`;
|
|
54
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
55
|
+
className: className,
|
|
56
|
+
role: "dialog",
|
|
57
|
+
"aria-labelledby": dialogTitleId,
|
|
58
|
+
"aria-describedby": dialogDescriptionId,
|
|
59
|
+
ref: focusOnMountRef,
|
|
60
|
+
children: [/*#__PURE__*/_jsxs(VisuallyHidden, {
|
|
61
|
+
children: [/*#__PURE__*/_jsx("h2", {
|
|
62
|
+
id: dialogTitleId,
|
|
63
|
+
children: title
|
|
64
|
+
}), /*#__PURE__*/_jsx("p", {
|
|
65
|
+
id: dialogDescriptionId,
|
|
66
|
+
children: description
|
|
67
|
+
})]
|
|
68
|
+
}), /*#__PURE__*/_jsx(BackButton, {
|
|
69
|
+
className: backButtonClassName,
|
|
70
|
+
onBack: onBack
|
|
71
|
+
}), children]
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export default DialogWrapper;
|
|
75
|
+
//# sourceMappingURL=dialog-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Button","VisuallyHidden","__","isRTL","chevronLeftSmall","chevronRightSmall","useInstanceId","useFocusOnMount","jsx","_jsx","jsxs","_jsxs","BackButton","className","onBack","icon","onClick","e","preventDefault","size","children","DialogWrapper","title","description","dialogTitleId","dialogDescriptionId","focusOnMountRef","backButtonClassName","role","ref","id"],"sources":["@wordpress/block-library/src/navigation-link/dialog-wrapper.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Button, VisuallyHidden } from '@wordpress/components';\nimport { __, isRTL } from '@wordpress/i18n';\nimport { chevronLeftSmall, chevronRightSmall } from '@wordpress/icons';\nimport { useInstanceId, useFocusOnMount } from '@wordpress/compose';\n\n/**\n * Shared BackButton component for consistent navigation across LinkUI sub-components.\n *\n * @param {Object} props Component props.\n * @param {string} props.className CSS class name for the button.\n * @param {Function} props.onBack Callback when user wants to go back.\n */\nfunction BackButton( { className, onBack } ) {\n\treturn (\n\t\t<Button\n\t\t\tclassName={ className }\n\t\t\ticon={ isRTL() ? chevronRightSmall : chevronLeftSmall }\n\t\t\tonClick={ ( e ) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tonBack();\n\t\t\t} }\n\t\t\tsize=\"small\"\n\t\t>\n\t\t\t{ __( 'Back' ) }\n\t\t</Button>\n\t);\n}\n\n/**\n * Shared DialogWrapper component for consistent dialog structure across LinkUI sub-components.\n *\n * @param {Object} props Component props.\n * @param {string} props.className CSS class name for the dialog container.\n * @param {string} props.title Dialog title for accessibility.\n * @param {string} props.description Dialog description for accessibility.\n * @param {Function} props.onBack Callback when user wants to go back.\n * @param {Object} props.children Child components to render inside the dialog.\n */\nfunction DialogWrapper( { className, title, description, onBack, children } ) {\n\tconst dialogTitleId = useInstanceId(\n\t\tDialogWrapper,\n\t\t'link-ui-dialog-title'\n\t);\n\tconst dialogDescriptionId = useInstanceId(\n\t\tDialogWrapper,\n\t\t'link-ui-dialog-description'\n\t);\n\tconst focusOnMountRef = useFocusOnMount( 'firstElement' );\n\tconst backButtonClassName = `${ className }__back`;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={ className }\n\t\t\trole=\"dialog\"\n\t\t\taria-labelledby={ dialogTitleId }\n\t\t\taria-describedby={ dialogDescriptionId }\n\t\t\tref={ focusOnMountRef }\n\t\t>\n\t\t\t<VisuallyHidden>\n\t\t\t\t<h2 id={ dialogTitleId }>{ title }</h2>\n\t\t\t\t<p id={ dialogDescriptionId }>{ description }</p>\n\t\t\t</VisuallyHidden>\n\n\t\t\t<BackButton className={ backButtonClassName } onBack={ onBack } />\n\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nexport default DialogWrapper;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,MAAM,EAAEC,cAAc,QAAQ,uBAAuB;AAC9D,SAASC,EAAE,EAAEC,KAAK,QAAQ,iBAAiB;AAC3C,SAASC,gBAAgB,EAAEC,iBAAiB,QAAQ,kBAAkB;AACtE,SAASC,aAAa,EAAEC,eAAe,QAAQ,oBAAoB;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AANA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOA,SAASC,UAAUA,CAAE;EAAEC,SAAS;EAAEC;AAAO,CAAC,EAAG;EAC5C,oBACCL,IAAA,CAACT,MAAM;IACNa,SAAS,EAAGA,SAAW;IACvBE,IAAI,EAAGZ,KAAK,CAAC,CAAC,GAAGE,iBAAiB,GAAGD,gBAAkB;IACvDY,OAAO,EAAKC,CAAC,IAAM;MAClBA,CAAC,CAACC,cAAc,CAAC,CAAC;MAClBJ,MAAM,CAAC,CAAC;IACT,CAAG;IACHK,IAAI,EAAC,OAAO;IAAAC,QAAA,EAEVlB,EAAE,CAAE,MAAO;EAAC,CACP,CAAC;AAEX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASmB,aAAaA,CAAE;EAAER,SAAS;EAAES,KAAK;EAAEC,WAAW;EAAET,MAAM;EAAEM;AAAS,CAAC,EAAG;EAC7E,MAAMI,aAAa,GAAGlB,aAAa,CAClCe,aAAa,EACb,sBACD,CAAC;EACD,MAAMI,mBAAmB,GAAGnB,aAAa,CACxCe,aAAa,EACb,4BACD,CAAC;EACD,MAAMK,eAAe,GAAGnB,eAAe,CAAE,cAAe,CAAC;EACzD,MAAMoB,mBAAmB,GAAG,GAAId,SAAS,QAAS;EAElD,oBACCF,KAAA;IACCE,SAAS,EAAGA,SAAW;IACvBe,IAAI,EAAC,QAAQ;IACb,mBAAkBJ,aAAe;IACjC,oBAAmBC,mBAAqB;IACxCI,GAAG,EAAGH,eAAiB;IAAAN,QAAA,gBAEvBT,KAAA,CAACV,cAAc;MAAAmB,QAAA,gBACdX,IAAA;QAAIqB,EAAE,EAAGN,aAAe;QAAAJ,QAAA,EAAGE;MAAK,CAAM,CAAC,eACvCb,IAAA;QAAGqB,EAAE,EAAGL,mBAAqB;QAAAL,QAAA,EAAGG;MAAW,CAAK,CAAC;IAAA,CAClC,CAAC,eAEjBd,IAAA,CAACG,UAAU;MAACC,SAAS,EAAGc,mBAAqB;MAACb,MAAM,EAAGA;IAAQ,CAAE,CAAC,EAEhEM,QAAQ;EAAA,CACN,CAAC;AAER;AAEA,eAAeC,aAAa","ignoreList":[]}
|
|
@@ -3,23 +3,18 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
|
|
5
5
|
import { Popover, Button, VisuallyHidden, __experimentalVStack as VStack } from '@wordpress/components';
|
|
6
|
-
import { __
|
|
7
|
-
import { LinkControl,
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { chevronLeftSmall, chevronRightSmall, plus } from '@wordpress/icons';
|
|
13
|
-
import { useInstanceId, useFocusOnMount } from '@wordpress/compose';
|
|
6
|
+
import { __ } from '@wordpress/i18n';
|
|
7
|
+
import { LinkControl, useBlockEditingMode } from '@wordpress/block-editor';
|
|
8
|
+
import { useMemo, useState, useRef, useEffect, forwardRef } from '@wordpress/element';
|
|
9
|
+
import { useResourcePermissions } from '@wordpress/core-data';
|
|
10
|
+
import { plus } from '@wordpress/icons';
|
|
11
|
+
import { useInstanceId } from '@wordpress/compose';
|
|
14
12
|
|
|
15
13
|
/**
|
|
16
14
|
* Internal dependencies
|
|
17
15
|
*/
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
20
|
-
const {
|
|
21
|
-
PrivateQuickInserter: QuickInserter
|
|
22
|
-
} = unlock(blockEditorPrivateApis);
|
|
16
|
+
import { LinkUIPageCreator } from './page-creator';
|
|
17
|
+
import LinkUIBlockInserter from './block-inserter';
|
|
23
18
|
|
|
24
19
|
/**
|
|
25
20
|
* Given the Link block's type attribute, return the query params to give to
|
|
@@ -29,6 +24,7 @@ const {
|
|
|
29
24
|
* @param {string} kind Link block's entity of kind (post-type|taxonomy)
|
|
30
25
|
* @return {{ type?: string, subtype?: string }} Search query params.
|
|
31
26
|
*/
|
|
27
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
32
28
|
export function getSuggestionsQuery(type, kind) {
|
|
33
29
|
switch (type) {
|
|
34
30
|
case 'post':
|
|
@@ -75,59 +71,6 @@ export function getSuggestionsQuery(type, kind) {
|
|
|
75
71
|
};
|
|
76
72
|
}
|
|
77
73
|
}
|
|
78
|
-
function LinkUIBlockInserter({
|
|
79
|
-
clientId,
|
|
80
|
-
onBack
|
|
81
|
-
}) {
|
|
82
|
-
const {
|
|
83
|
-
rootBlockClientId
|
|
84
|
-
} = useSelect(select => {
|
|
85
|
-
const {
|
|
86
|
-
getBlockRootClientId
|
|
87
|
-
} = select(blockEditorStore);
|
|
88
|
-
return {
|
|
89
|
-
rootBlockClientId: getBlockRootClientId(clientId)
|
|
90
|
-
};
|
|
91
|
-
}, [clientId]);
|
|
92
|
-
const focusOnMountRef = useFocusOnMount('firstElement');
|
|
93
|
-
const dialogTitleId = useInstanceId(LinkControl, `link-ui-block-inserter__title`);
|
|
94
|
-
const dialogDescriptionId = useInstanceId(LinkControl, `link-ui-block-inserter__description`);
|
|
95
|
-
if (!clientId) {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
return /*#__PURE__*/_jsxs("div", {
|
|
99
|
-
className: "link-ui-block-inserter",
|
|
100
|
-
role: "dialog",
|
|
101
|
-
"aria-labelledby": dialogTitleId,
|
|
102
|
-
"aria-describedby": dialogDescriptionId,
|
|
103
|
-
ref: focusOnMountRef,
|
|
104
|
-
children: [/*#__PURE__*/_jsxs(VisuallyHidden, {
|
|
105
|
-
children: [/*#__PURE__*/_jsx("h2", {
|
|
106
|
-
id: dialogTitleId,
|
|
107
|
-
children: __('Add block')
|
|
108
|
-
}), /*#__PURE__*/_jsx("p", {
|
|
109
|
-
id: dialogDescriptionId,
|
|
110
|
-
children: __('Choose a block to add to your Navigation.')
|
|
111
|
-
})]
|
|
112
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
113
|
-
className: "link-ui-block-inserter__back",
|
|
114
|
-
icon: isRTL() ? chevronRightSmall : chevronLeftSmall,
|
|
115
|
-
onClick: e => {
|
|
116
|
-
e.preventDefault();
|
|
117
|
-
onBack();
|
|
118
|
-
},
|
|
119
|
-
size: "small",
|
|
120
|
-
children: __('Back')
|
|
121
|
-
}), /*#__PURE__*/_jsx(QuickInserter, {
|
|
122
|
-
rootClientId: rootBlockClientId,
|
|
123
|
-
clientId: clientId,
|
|
124
|
-
isAppender: false,
|
|
125
|
-
prioritizePatterns: false,
|
|
126
|
-
selectBlockOnInsert: true,
|
|
127
|
-
hasSearch: false
|
|
128
|
-
})]
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
74
|
function UnforwardedLinkUI(props, ref) {
|
|
132
75
|
const {
|
|
133
76
|
label,
|
|
@@ -138,42 +81,14 @@ function UnforwardedLinkUI(props, ref) {
|
|
|
138
81
|
} = props.link;
|
|
139
82
|
const postType = type || 'page';
|
|
140
83
|
const [addingBlock, setAddingBlock] = useState(false);
|
|
84
|
+
const [addingPage, setAddingPage] = useState(false);
|
|
141
85
|
const [focusAddBlockButton, setFocusAddBlockButton] = useState(false);
|
|
142
|
-
const
|
|
143
|
-
saveEntityRecord
|
|
144
|
-
} = useDispatch(coreStore);
|
|
86
|
+
const [focusAddPageButton, setFocusAddPageButton] = useState(false);
|
|
145
87
|
const permissions = useResourcePermissions({
|
|
146
88
|
kind: 'postType',
|
|
147
89
|
name: postType
|
|
148
90
|
});
|
|
149
91
|
|
|
150
|
-
// Check if we're in contentOnly mode
|
|
151
|
-
const blockEditingMode = useBlockEditingMode();
|
|
152
|
-
const isDefaultBlockEditingMode = blockEditingMode === 'default';
|
|
153
|
-
async function handleCreate(pageTitle) {
|
|
154
|
-
const page = await saveEntityRecord('postType', postType, {
|
|
155
|
-
title: pageTitle,
|
|
156
|
-
status: 'draft'
|
|
157
|
-
});
|
|
158
|
-
return {
|
|
159
|
-
id: page.id,
|
|
160
|
-
type: postType,
|
|
161
|
-
// Make `title` property consistent with that in `fetchLinkSuggestions` where the `rendered` title (containing HTML entities)
|
|
162
|
-
// is also being decoded. By being consistent in both locations we avoid having to branch in the rendering output code.
|
|
163
|
-
// Ideally in the future we will update both APIs to utilise the "raw" form of the title which is better suited to edit contexts.
|
|
164
|
-
// e.g.
|
|
165
|
-
// - title.raw = "Yes & No"
|
|
166
|
-
// - title.rendered = "Yes & No"
|
|
167
|
-
// - decodeEntities( title.rendered ) = "Yes & No"
|
|
168
|
-
// See:
|
|
169
|
-
// - https://github.com/WordPress/gutenberg/pull/41063
|
|
170
|
-
// - https://github.com/WordPress/gutenberg/blob/a1e1fdc0e6278457e9f4fc0b31ac6d2095f5450b/packages/core-data/src/fetch/__experimental-fetch-link-suggestions.js#L212-L218
|
|
171
|
-
title: decodeEntities(page.title.rendered),
|
|
172
|
-
url: page.link,
|
|
173
|
-
kind: 'post-type'
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
|
|
177
92
|
// Memoize link value to avoid overriding the LinkControl's internal state.
|
|
178
93
|
// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.
|
|
179
94
|
const link = useMemo(() => ({
|
|
@@ -181,15 +96,22 @@ function UnforwardedLinkUI(props, ref) {
|
|
|
181
96
|
opensInNewTab,
|
|
182
97
|
title: label && stripHTML(label)
|
|
183
98
|
}), [label, opensInNewTab, url]);
|
|
184
|
-
const
|
|
185
|
-
|
|
99
|
+
const handlePageCreated = pageLink => {
|
|
100
|
+
// Set the new page as the current link
|
|
101
|
+
props.onChange(pageLink);
|
|
102
|
+
// Return to main Link UI
|
|
103
|
+
setAddingPage(false);
|
|
104
|
+
};
|
|
105
|
+
const dialogTitleId = useInstanceId(LinkUI, 'link-ui-link-control__title');
|
|
106
|
+
const dialogDescriptionId = useInstanceId(LinkUI, 'link-ui-link-control__description');
|
|
107
|
+
const blockEditingMode = useBlockEditingMode();
|
|
186
108
|
return /*#__PURE__*/_jsxs(Popover, {
|
|
187
109
|
ref: ref,
|
|
188
110
|
placement: "bottom",
|
|
189
111
|
onClose: props.onClose,
|
|
190
112
|
anchor: props.anchor,
|
|
191
113
|
shift: true,
|
|
192
|
-
children: [!addingBlock && /*#__PURE__*/_jsxs("div", {
|
|
114
|
+
children: [!addingBlock && !addingPage && /*#__PURE__*/_jsxs("div", {
|
|
193
115
|
role: "dialog",
|
|
194
116
|
"aria-labelledby": dialogTitleId,
|
|
195
117
|
"aria-describedby": dialogDescriptionId,
|
|
@@ -206,51 +128,66 @@ function UnforwardedLinkUI(props, ref) {
|
|
|
206
128
|
hasRichPreviews: true,
|
|
207
129
|
value: link,
|
|
208
130
|
showInitialSuggestions: true,
|
|
209
|
-
withCreateSuggestion:
|
|
210
|
-
createSuggestion: handleCreate,
|
|
211
|
-
createSuggestionButtonText: searchTerm => {
|
|
212
|
-
let format;
|
|
213
|
-
if (type === 'post') {
|
|
214
|
-
/* translators: %s: search term. */
|
|
215
|
-
format = __('Create draft post: <mark>%s</mark>');
|
|
216
|
-
} else {
|
|
217
|
-
/* translators: %s: search term. */
|
|
218
|
-
format = __('Create draft page: <mark>%s</mark>');
|
|
219
|
-
}
|
|
220
|
-
return createInterpolateElement(sprintf(format, searchTerm), {
|
|
221
|
-
mark: /*#__PURE__*/_jsx("mark", {})
|
|
222
|
-
});
|
|
223
|
-
},
|
|
131
|
+
withCreateSuggestion: false,
|
|
224
132
|
noDirectEntry: !!type,
|
|
225
133
|
noURLSuggestion: !!type,
|
|
226
134
|
suggestionsQuery: getSuggestionsQuery(type, kind),
|
|
227
135
|
onChange: props.onChange,
|
|
228
136
|
onRemove: props.onRemove,
|
|
229
137
|
onCancel: props.onCancel,
|
|
230
|
-
renderControlBottom: () =>
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
setFocusAddBlockButton(false);
|
|
138
|
+
renderControlBottom: () => {
|
|
139
|
+
// Don't show the tools when there is submitted link (preview state).
|
|
140
|
+
if (link?.url?.length) {
|
|
141
|
+
return null;
|
|
235
142
|
}
|
|
236
|
-
|
|
143
|
+
return /*#__PURE__*/_jsx(LinkUITools, {
|
|
144
|
+
focusAddBlockButton: focusAddBlockButton,
|
|
145
|
+
focusAddPageButton: focusAddPageButton,
|
|
146
|
+
setAddingBlock: () => {
|
|
147
|
+
setAddingBlock(true);
|
|
148
|
+
setFocusAddBlockButton(false);
|
|
149
|
+
},
|
|
150
|
+
setAddingPage: () => {
|
|
151
|
+
setAddingPage(true);
|
|
152
|
+
setFocusAddPageButton(false);
|
|
153
|
+
},
|
|
154
|
+
canAddPage: permissions?.canCreate && type === 'page',
|
|
155
|
+
canAddBlock: blockEditingMode === 'default'
|
|
156
|
+
});
|
|
157
|
+
}
|
|
237
158
|
})]
|
|
238
159
|
}), addingBlock && /*#__PURE__*/_jsx(LinkUIBlockInserter, {
|
|
239
160
|
clientId: props.clientId,
|
|
240
161
|
onBack: () => {
|
|
241
162
|
setAddingBlock(false);
|
|
242
163
|
setFocusAddBlockButton(true);
|
|
243
|
-
|
|
164
|
+
setFocusAddPageButton(false);
|
|
165
|
+
},
|
|
166
|
+
onBlockInsert: props?.onBlockInsert
|
|
167
|
+
}), addingPage && /*#__PURE__*/_jsx(LinkUIPageCreator, {
|
|
168
|
+
postType: postType,
|
|
169
|
+
onBack: () => {
|
|
170
|
+
setAddingPage(false);
|
|
171
|
+
setFocusAddPageButton(true);
|
|
172
|
+
setFocusAddBlockButton(false);
|
|
173
|
+
},
|
|
174
|
+
onPageCreated: handlePageCreated,
|
|
175
|
+
initialTitle: link?.url || ''
|
|
244
176
|
})]
|
|
245
177
|
});
|
|
246
178
|
}
|
|
247
179
|
export const LinkUI = forwardRef(UnforwardedLinkUI);
|
|
248
180
|
const LinkUITools = ({
|
|
249
181
|
setAddingBlock,
|
|
250
|
-
|
|
182
|
+
setAddingPage,
|
|
183
|
+
focusAddBlockButton,
|
|
184
|
+
focusAddPageButton,
|
|
185
|
+
canAddPage,
|
|
186
|
+
canAddBlock
|
|
251
187
|
}) => {
|
|
252
188
|
const blockInserterAriaRole = 'listbox';
|
|
253
189
|
const addBlockButtonRef = useRef();
|
|
190
|
+
const addPageButtonRef = useRef();
|
|
254
191
|
|
|
255
192
|
// Focus the add block button when the popover is opened.
|
|
256
193
|
useEffect(() => {
|
|
@@ -258,9 +195,32 @@ const LinkUITools = ({
|
|
|
258
195
|
addBlockButtonRef.current?.focus();
|
|
259
196
|
}
|
|
260
197
|
}, [focusAddBlockButton]);
|
|
261
|
-
|
|
198
|
+
|
|
199
|
+
// Focus the add page button when the popover is opened.
|
|
200
|
+
useEffect(() => {
|
|
201
|
+
if (focusAddPageButton) {
|
|
202
|
+
addPageButtonRef.current?.focus();
|
|
203
|
+
}
|
|
204
|
+
}, [focusAddPageButton]);
|
|
205
|
+
|
|
206
|
+
// Don't render anything if neither button should be shown
|
|
207
|
+
if (!canAddPage && !canAddBlock) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
return /*#__PURE__*/_jsxs(VStack, {
|
|
211
|
+
spacing: 0,
|
|
262
212
|
className: "link-ui-tools",
|
|
263
|
-
children: /*#__PURE__*/_jsx(Button, {
|
|
213
|
+
children: [canAddPage && /*#__PURE__*/_jsx(Button, {
|
|
214
|
+
__next40pxDefaultSize: true,
|
|
215
|
+
ref: addPageButtonRef,
|
|
216
|
+
icon: plus,
|
|
217
|
+
onClick: e => {
|
|
218
|
+
e.preventDefault();
|
|
219
|
+
setAddingPage(true);
|
|
220
|
+
},
|
|
221
|
+
"aria-haspopup": blockInserterAriaRole,
|
|
222
|
+
children: __('Create page')
|
|
223
|
+
}), canAddBlock && /*#__PURE__*/_jsx(Button, {
|
|
264
224
|
__next40pxDefaultSize: true,
|
|
265
225
|
ref: addBlockButtonRef,
|
|
266
226
|
icon: plus,
|
|
@@ -270,7 +230,7 @@ const LinkUITools = ({
|
|
|
270
230
|
},
|
|
271
231
|
"aria-haspopup": blockInserterAriaRole,
|
|
272
232
|
children: __('Add block')
|
|
273
|
-
})
|
|
233
|
+
})]
|
|
274
234
|
});
|
|
275
235
|
};
|
|
276
236
|
export default LinkUITools;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__unstableStripHTML","stripHTML","Popover","Button","VisuallyHidden","__experimentalVStack","VStack","__","sprintf","isRTL","LinkControl","store","blockEditorStore","privateApis","blockEditorPrivateApis","useBlockEditingMode","createInterpolateElement","useMemo","useState","useRef","useEffect","forwardRef","coreStore","useResourcePermissions","decodeEntities","useSelect","useDispatch","chevronLeftSmall","chevronRightSmall","plus","useInstanceId","useFocusOnMount","unlock","jsx","_jsx","jsxs","_jsxs","PrivateQuickInserter","QuickInserter","getSuggestionsQuery","type","kind","subtype","initialSuggestionsSearchOptions","perPage","LinkUIBlockInserter","clientId","onBack","rootBlockClientId","select","getBlockRootClientId","focusOnMountRef","dialogTitleId","dialogDescriptionId","className","role","ref","children","id","icon","onClick","e","preventDefault","size","rootClientId","isAppender","prioritizePatterns","selectBlockOnInsert","hasSearch","UnforwardedLinkUI","props","label","url","opensInNewTab","link","postType","addingBlock","setAddingBlock","focusAddBlockButton","setFocusAddBlockButton","saveEntityRecord","permissions","name","blockEditingMode","isDefaultBlockEditingMode","handleCreate","pageTitle","page","title","status","rendered","LinkUI","placement","onClose","anchor","shift","hasTextControl","hasRichPreviews","value","showInitialSuggestions","withCreateSuggestion","canCreate","createSuggestion","createSuggestionButtonText","searchTerm","format","mark","noDirectEntry","noURLSuggestion","suggestionsQuery","onChange","onRemove","onCancel","renderControlBottom","length","LinkUITools","blockInserterAriaRole","addBlockButtonRef","current","focus","__next40pxDefaultSize"],"sources":["@wordpress/block-library/src/navigation-link/link-ui.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tPopover,\n\tButton,\n\tVisuallyHidden,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\nimport {\n\tLinkControl,\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport {\n\tcreateInterpolateElement,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tforwardRef,\n} from '@wordpress/element';\nimport {\n\tstore as coreStore,\n\tuseResourcePermissions,\n} from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { chevronLeftSmall, chevronRightSmall, plus } from '@wordpress/icons';\nimport { useInstanceId, useFocusOnMount } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\nconst { PrivateQuickInserter: QuickInserter } = unlock(\n\tblockEditorPrivateApis\n);\n\n/**\n * Given the Link block's type attribute, return the query params to give to\n * /wp/v2/search.\n *\n * @param {string} type Link block's type attribute.\n * @param {string} kind Link block's entity of kind (post-type|taxonomy)\n * @return {{ type?: string, subtype?: string }} Search query params.\n */\nexport function getSuggestionsQuery( type, kind ) {\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\tcase 'page':\n\t\t\treturn { type: 'post', subtype: type };\n\t\tcase 'category':\n\t\t\treturn { type: 'term', subtype: 'category' };\n\t\tcase 'tag':\n\t\t\treturn { type: 'term', subtype: 'post_tag' };\n\t\tcase 'post_format':\n\t\t\treturn { type: 'post-format' };\n\t\tdefault:\n\t\t\tif ( kind === 'taxonomy' ) {\n\t\t\t\treturn { type: 'term', subtype: type };\n\t\t\t}\n\t\t\tif ( kind === 'post-type' ) {\n\t\t\t\treturn { type: 'post', subtype: type };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// for custom link which has no type\n\t\t\t\t// always show pages as initial suggestions\n\t\t\t\tinitialSuggestionsSearchOptions: {\n\t\t\t\t\ttype: 'post',\n\t\t\t\t\tsubtype: 'page',\n\t\t\t\t\tperPage: 20,\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nfunction LinkUIBlockInserter( { clientId, onBack } ) {\n\tconst { rootBlockClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId } = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\trootBlockClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst focusOnMountRef = useFocusOnMount( 'firstElement' );\n\n\tconst dialogTitleId = useInstanceId(\n\t\tLinkControl,\n\t\t`link-ui-block-inserter__title`\n\t);\n\tconst dialogDescriptionId = useInstanceId(\n\t\tLinkControl,\n\t\t`link-ui-block-inserter__description`\n\t);\n\n\tif ( ! clientId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"link-ui-block-inserter\"\n\t\t\trole=\"dialog\"\n\t\t\taria-labelledby={ dialogTitleId }\n\t\t\taria-describedby={ dialogDescriptionId }\n\t\t\tref={ focusOnMountRef }\n\t\t>\n\t\t\t<VisuallyHidden>\n\t\t\t\t<h2 id={ dialogTitleId }>{ __( 'Add block' ) }</h2>\n\n\t\t\t\t<p id={ dialogDescriptionId }>\n\t\t\t\t\t{ __( 'Choose a block to add to your Navigation.' ) }\n\t\t\t\t</p>\n\t\t\t</VisuallyHidden>\n\n\t\t\t<Button\n\t\t\t\tclassName=\"link-ui-block-inserter__back\"\n\t\t\t\ticon={ isRTL() ? chevronRightSmall : chevronLeftSmall }\n\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonBack();\n\t\t\t\t} }\n\t\t\t\tsize=\"small\"\n\t\t\t>\n\t\t\t\t{ __( 'Back' ) }\n\t\t\t</Button>\n\n\t\t\t<QuickInserter\n\t\t\t\trootClientId={ rootBlockClientId }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tisAppender={ false }\n\t\t\t\tprioritizePatterns={ false }\n\t\t\t\tselectBlockOnInsert\n\t\t\t\thasSearch={ false }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction UnforwardedLinkUI( props, ref ) {\n\tconst { label, url, opensInNewTab, type, kind } = props.link;\n\tconst postType = type || 'page';\n\n\tconst [ addingBlock, setAddingBlock ] = useState( false );\n\tconst [ focusAddBlockButton, setFocusAddBlockButton ] = useState( false );\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst permissions = useResourcePermissions( {\n\t\tkind: 'postType',\n\t\tname: postType,\n\t} );\n\n\t// Check if we're in contentOnly mode\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst isDefaultBlockEditingMode = blockEditingMode === 'default';\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst page = await saveEntityRecord( 'postType', postType, {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: postType,\n\t\t\t// Make `title` property consistent with that in `fetchLinkSuggestions` where the `rendered` title (containing HTML entities)\n\t\t\t// is also being decoded. By being consistent in both locations we avoid having to branch in the rendering output code.\n\t\t\t// Ideally in the future we will update both APIs to utilise the \"raw\" form of the title which is better suited to edit contexts.\n\t\t\t// e.g.\n\t\t\t// - title.raw = \"Yes & No\"\n\t\t\t// - title.rendered = \"Yes & No\"\n\t\t\t// - decodeEntities( title.rendered ) = \"Yes & No\"\n\t\t\t// See:\n\t\t\t// - https://github.com/WordPress/gutenberg/pull/41063\n\t\t\t// - https://github.com/WordPress/gutenberg/blob/a1e1fdc0e6278457e9f4fc0b31ac6d2095f5450b/packages/core-data/src/fetch/__experimental-fetch-link-suggestions.js#L212-L218\n\t\t\ttitle: decodeEntities( page.title.rendered ),\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.\n\tconst link = useMemo(\n\t\t() => ( {\n\t\t\turl,\n\t\t\topensInNewTab,\n\t\t\ttitle: label && stripHTML( label ),\n\t\t} ),\n\t\t[ label, opensInNewTab, url ]\n\t);\n\n\tconst dialogTitleId = useInstanceId(\n\t\tLinkUI,\n\t\t`link-ui-link-control__title`\n\t);\n\tconst dialogDescriptionId = useInstanceId(\n\t\tLinkUI,\n\t\t`link-ui-link-control__description`\n\t);\n\n\treturn (\n\t\t<Popover\n\t\t\tref={ ref }\n\t\t\tplacement=\"bottom\"\n\t\t\tonClose={ props.onClose }\n\t\t\tanchor={ props.anchor }\n\t\t\tshift\n\t\t>\n\t\t\t{ ! addingBlock && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-labelledby={ dialogTitleId }\n\t\t\t\t\taria-describedby={ dialogDescriptionId }\n\t\t\t\t>\n\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t<h2 id={ dialogTitleId }>{ __( 'Add link' ) }</h2>\n\n\t\t\t\t\t\t<p id={ dialogDescriptionId }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Search for and add a link to your Navigation.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\thasTextControl\n\t\t\t\t\t\thasRichPreviews\n\t\t\t\t\t\tvalue={ link }\n\t\t\t\t\t\tshowInitialSuggestions\n\t\t\t\t\t\twithCreateSuggestion={ permissions.canCreate }\n\t\t\t\t\t\tcreateSuggestion={ handleCreate }\n\t\t\t\t\t\tcreateSuggestionButtonText={ ( searchTerm ) => {\n\t\t\t\t\t\t\tlet format;\n\n\t\t\t\t\t\t\tif ( type === 'post' ) {\n\t\t\t\t\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t\t\t\t\tformat = __(\n\t\t\t\t\t\t\t\t\t'Create draft post: <mark>%s</mark>'\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t\t\t\t\tformat = __(\n\t\t\t\t\t\t\t\t\t'Create draft page: <mark>%s</mark>'\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn createInterpolateElement(\n\t\t\t\t\t\t\t\tsprintf( format, searchTerm ),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmark: <mark />,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tnoDirectEntry={ !! type }\n\t\t\t\t\t\tnoURLSuggestion={ !! type }\n\t\t\t\t\t\tsuggestionsQuery={ getSuggestionsQuery( type, kind ) }\n\t\t\t\t\t\tonChange={ props.onChange }\n\t\t\t\t\t\tonRemove={ props.onRemove }\n\t\t\t\t\t\tonCancel={ props.onCancel }\n\t\t\t\t\t\trenderControlBottom={ () =>\n\t\t\t\t\t\t\t! link?.url?.length &&\n\t\t\t\t\t\t\tisDefaultBlockEditingMode && (\n\t\t\t\t\t\t\t\t<LinkUITools\n\t\t\t\t\t\t\t\t\tfocusAddBlockButton={ focusAddBlockButton }\n\t\t\t\t\t\t\t\t\tsetAddingBlock={ () => {\n\t\t\t\t\t\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t\t\t\t\t\t\tsetFocusAddBlockButton( false );\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)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ addingBlock && (\n\t\t\t\t<LinkUIBlockInserter\n\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\tonBack={ () => {\n\t\t\t\t\t\tsetAddingBlock( false );\n\t\t\t\t\t\tsetFocusAddBlockButton( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Popover>\n\t);\n}\n\nexport const LinkUI = forwardRef( UnforwardedLinkUI );\n\nconst LinkUITools = ( { setAddingBlock, focusAddBlockButton } ) => {\n\tconst blockInserterAriaRole = 'listbox';\n\tconst addBlockButtonRef = useRef();\n\n\t// Focus the add block button when the popover is opened.\n\tuseEffect( () => {\n\t\tif ( focusAddBlockButton ) {\n\t\t\taddBlockButtonRef.current?.focus();\n\t\t}\n\t}, [ focusAddBlockButton ] );\n\n\treturn (\n\t\t<VStack className=\"link-ui-tools\">\n\t\t\t<Button\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\tref={ addBlockButtonRef }\n\t\t\t\ticon={ plus }\n\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t} }\n\t\t\t\taria-haspopup={ blockInserterAriaRole }\n\t\t\t>\n\t\t\t\t{ __( 'Add block' ) }\n\t\t\t</Button>\n\t\t</VStack>\n\t);\n};\n\nexport default LinkUITools;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["__unstableStripHTML","stripHTML","Popover","Button","VisuallyHidden","__experimentalVStack","VStack","__","LinkControl","useBlockEditingMode","useMemo","useState","useRef","useEffect","forwardRef","useResourcePermissions","plus","useInstanceId","LinkUIPageCreator","LinkUIBlockInserter","jsx","_jsx","jsxs","_jsxs","getSuggestionsQuery","type","kind","subtype","initialSuggestionsSearchOptions","perPage","UnforwardedLinkUI","props","ref","label","url","opensInNewTab","link","postType","addingBlock","setAddingBlock","addingPage","setAddingPage","focusAddBlockButton","setFocusAddBlockButton","focusAddPageButton","setFocusAddPageButton","permissions","name","title","handlePageCreated","pageLink","onChange","dialogTitleId","LinkUI","dialogDescriptionId","blockEditingMode","placement","onClose","anchor","shift","children","role","id","hasTextControl","hasRichPreviews","value","showInitialSuggestions","withCreateSuggestion","noDirectEntry","noURLSuggestion","suggestionsQuery","onRemove","onCancel","renderControlBottom","length","LinkUITools","canAddPage","canCreate","canAddBlock","clientId","onBack","onBlockInsert","onPageCreated","initialTitle","blockInserterAriaRole","addBlockButtonRef","addPageButtonRef","current","focus","spacing","className","__next40pxDefaultSize","icon","onClick","e","preventDefault"],"sources":["@wordpress/block-library/src/navigation-link/link-ui.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tPopover,\n\tButton,\n\tVisuallyHidden,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { LinkControl, useBlockEditingMode } from '@wordpress/block-editor';\nimport {\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tforwardRef,\n} from '@wordpress/element';\nimport { useResourcePermissions } from '@wordpress/core-data';\nimport { plus } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { LinkUIPageCreator } from './page-creator';\nimport LinkUIBlockInserter from './block-inserter';\n\n/**\n * Given the Link block's type attribute, return the query params to give to\n * /wp/v2/search.\n *\n * @param {string} type Link block's type attribute.\n * @param {string} kind Link block's entity of kind (post-type|taxonomy)\n * @return {{ type?: string, subtype?: string }} Search query params.\n */\nexport function getSuggestionsQuery( type, kind ) {\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\tcase 'page':\n\t\t\treturn { type: 'post', subtype: type };\n\t\tcase 'category':\n\t\t\treturn { type: 'term', subtype: 'category' };\n\t\tcase 'tag':\n\t\t\treturn { type: 'term', subtype: 'post_tag' };\n\t\tcase 'post_format':\n\t\t\treturn { type: 'post-format' };\n\t\tdefault:\n\t\t\tif ( kind === 'taxonomy' ) {\n\t\t\t\treturn { type: 'term', subtype: type };\n\t\t\t}\n\t\t\tif ( kind === 'post-type' ) {\n\t\t\t\treturn { type: 'post', subtype: type };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// for custom link which has no type\n\t\t\t\t// always show pages as initial suggestions\n\t\t\t\tinitialSuggestionsSearchOptions: {\n\t\t\t\t\ttype: 'post',\n\t\t\t\t\tsubtype: 'page',\n\t\t\t\t\tperPage: 20,\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nfunction UnforwardedLinkUI( props, ref ) {\n\tconst { label, url, opensInNewTab, type, kind } = props.link;\n\tconst postType = type || 'page';\n\n\tconst [ addingBlock, setAddingBlock ] = useState( false );\n\tconst [ addingPage, setAddingPage ] = useState( false );\n\tconst [ focusAddBlockButton, setFocusAddBlockButton ] = useState( false );\n\tconst [ focusAddPageButton, setFocusAddPageButton ] = useState( false );\n\tconst permissions = useResourcePermissions( {\n\t\tkind: 'postType',\n\t\tname: postType,\n\t} );\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.\n\tconst link = useMemo(\n\t\t() => ( {\n\t\t\turl,\n\t\t\topensInNewTab,\n\t\t\ttitle: label && stripHTML( label ),\n\t\t} ),\n\t\t[ label, opensInNewTab, url ]\n\t);\n\n\tconst handlePageCreated = ( pageLink ) => {\n\t\t// Set the new page as the current link\n\t\tprops.onChange( pageLink );\n\t\t// Return to main Link UI\n\t\tsetAddingPage( false );\n\t};\n\n\tconst dialogTitleId = useInstanceId(\n\t\tLinkUI,\n\t\t'link-ui-link-control__title'\n\t);\n\tconst dialogDescriptionId = useInstanceId(\n\t\tLinkUI,\n\t\t'link-ui-link-control__description'\n\t);\n\n\tconst blockEditingMode = useBlockEditingMode();\n\n\treturn (\n\t\t<Popover\n\t\t\tref={ ref }\n\t\t\tplacement=\"bottom\"\n\t\t\tonClose={ props.onClose }\n\t\t\tanchor={ props.anchor }\n\t\t\tshift\n\t\t>\n\t\t\t{ ! addingBlock && ! addingPage && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-labelledby={ dialogTitleId }\n\t\t\t\t\taria-describedby={ dialogDescriptionId }\n\t\t\t\t>\n\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t<h2 id={ dialogTitleId }>{ __( 'Add link' ) }</h2>\n\n\t\t\t\t\t\t<p id={ dialogDescriptionId }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Search for and add a link to your Navigation.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\thasTextControl\n\t\t\t\t\t\thasRichPreviews\n\t\t\t\t\t\tvalue={ link }\n\t\t\t\t\t\tshowInitialSuggestions\n\t\t\t\t\t\twithCreateSuggestion={ false }\n\t\t\t\t\t\tnoDirectEntry={ !! type }\n\t\t\t\t\t\tnoURLSuggestion={ !! type }\n\t\t\t\t\t\tsuggestionsQuery={ getSuggestionsQuery( type, kind ) }\n\t\t\t\t\t\tonChange={ props.onChange }\n\t\t\t\t\t\tonRemove={ props.onRemove }\n\t\t\t\t\t\tonCancel={ props.onCancel }\n\t\t\t\t\t\trenderControlBottom={ () => {\n\t\t\t\t\t\t\t// Don't show the tools when there is submitted link (preview state).\n\t\t\t\t\t\t\tif ( link?.url?.length ) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<LinkUITools\n\t\t\t\t\t\t\t\t\tfocusAddBlockButton={ focusAddBlockButton }\n\t\t\t\t\t\t\t\t\tfocusAddPageButton={ focusAddPageButton }\n\t\t\t\t\t\t\t\t\tsetAddingBlock={ () => {\n\t\t\t\t\t\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t\t\t\t\t\t\tsetFocusAddBlockButton( false );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tsetAddingPage={ () => {\n\t\t\t\t\t\t\t\t\t\tsetAddingPage( true );\n\t\t\t\t\t\t\t\t\t\tsetFocusAddPageButton( false );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tcanAddPage={\n\t\t\t\t\t\t\t\t\t\tpermissions?.canCreate &&\n\t\t\t\t\t\t\t\t\t\ttype === 'page'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcanAddBlock={\n\t\t\t\t\t\t\t\t\t\tblockEditingMode === 'default'\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);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ addingBlock && (\n\t\t\t\t<LinkUIBlockInserter\n\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\tonBack={ () => {\n\t\t\t\t\t\tsetAddingBlock( false );\n\t\t\t\t\t\tsetFocusAddBlockButton( true );\n\t\t\t\t\t\tsetFocusAddPageButton( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonBlockInsert={ props?.onBlockInsert }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ addingPage && (\n\t\t\t\t<LinkUIPageCreator\n\t\t\t\t\tpostType={ postType }\n\t\t\t\t\tonBack={ () => {\n\t\t\t\t\t\tsetAddingPage( false );\n\t\t\t\t\t\tsetFocusAddPageButton( true );\n\t\t\t\t\t\tsetFocusAddBlockButton( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonPageCreated={ handlePageCreated }\n\t\t\t\t\tinitialTitle={ link?.url || '' }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Popover>\n\t);\n}\n\nexport const LinkUI = forwardRef( UnforwardedLinkUI );\n\nconst LinkUITools = ( {\n\tsetAddingBlock,\n\tsetAddingPage,\n\tfocusAddBlockButton,\n\tfocusAddPageButton,\n\tcanAddPage,\n\tcanAddBlock,\n} ) => {\n\tconst blockInserterAriaRole = 'listbox';\n\tconst addBlockButtonRef = useRef();\n\tconst addPageButtonRef = useRef();\n\n\t// Focus the add block button when the popover is opened.\n\tuseEffect( () => {\n\t\tif ( focusAddBlockButton ) {\n\t\t\taddBlockButtonRef.current?.focus();\n\t\t}\n\t}, [ focusAddBlockButton ] );\n\n\t// Focus the add page button when the popover is opened.\n\tuseEffect( () => {\n\t\tif ( focusAddPageButton ) {\n\t\t\taddPageButtonRef.current?.focus();\n\t\t}\n\t}, [ focusAddPageButton ] );\n\n\t// Don't render anything if neither button should be shown\n\tif ( ! canAddPage && ! canAddBlock ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<VStack spacing={ 0 } className=\"link-ui-tools\">\n\t\t\t{ canAddPage && (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tref={ addPageButtonRef }\n\t\t\t\t\ticon={ plus }\n\t\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetAddingPage( true );\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup={ blockInserterAriaRole }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Create page' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t\t{ canAddBlock && (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tref={ addBlockButtonRef }\n\t\t\t\t\ticon={ plus }\n\t\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup={ blockInserterAriaRole }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Add block' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t</VStack>\n\t);\n};\n\nexport default LinkUITools;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { Button, TextControl, Notice, CheckboxControl, __experimentalVStack as VStack, __experimentalHStack as HStack } from '@wordpress/components';
|
|
5
|
+
import { __ } from '@wordpress/i18n';
|
|
6
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
7
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
8
|
+
import { decodeEntities } from '@wordpress/html-entities';
|
|
9
|
+
import { useState } from '@wordpress/element';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
import DialogWrapper from './dialog-wrapper';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Component for creating new pages within the Navigation Link UI.
|
|
18
|
+
*
|
|
19
|
+
* @param {Object} props Component props.
|
|
20
|
+
* @param {string} props.postType The post type to create.
|
|
21
|
+
* @param {Function} props.onBack Callback when user wants to go back.
|
|
22
|
+
* @param {Function} props.onPageCreated Callback when page is successfully created.
|
|
23
|
+
* @param {string} [props.initialTitle] Initial title to pre-fill the form.
|
|
24
|
+
*/
|
|
25
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
26
|
+
export function LinkUIPageCreator({
|
|
27
|
+
postType,
|
|
28
|
+
onBack,
|
|
29
|
+
onPageCreated,
|
|
30
|
+
initialTitle = ''
|
|
31
|
+
}) {
|
|
32
|
+
const [title, setTitle] = useState(initialTitle);
|
|
33
|
+
const [shouldPublish, setShouldPublish] = useState(false);
|
|
34
|
+
|
|
35
|
+
// Check if the title is valid for submission
|
|
36
|
+
const isTitleValid = title.trim().length > 0;
|
|
37
|
+
|
|
38
|
+
// Get the last created entity record (without ID) to track creation state
|
|
39
|
+
const {
|
|
40
|
+
lastError,
|
|
41
|
+
isSaving
|
|
42
|
+
} = useSelect(select => ({
|
|
43
|
+
lastError: select(coreStore).getLastEntitySaveError('postType', postType),
|
|
44
|
+
isSaving: select(coreStore).isSavingEntityRecord('postType', postType)
|
|
45
|
+
}), [postType]);
|
|
46
|
+
const {
|
|
47
|
+
saveEntityRecord
|
|
48
|
+
} = useDispatch(coreStore);
|
|
49
|
+
async function createPage(event) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
if (isSaving || !isTitleValid) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const savedRecord = await saveEntityRecord('postType', postType, {
|
|
56
|
+
title,
|
|
57
|
+
status: shouldPublish ? 'publish' : 'draft'
|
|
58
|
+
}, {
|
|
59
|
+
throwOnError: true
|
|
60
|
+
});
|
|
61
|
+
if (savedRecord) {
|
|
62
|
+
// Create the page link object from the saved record
|
|
63
|
+
const pageLink = {
|
|
64
|
+
id: savedRecord.id,
|
|
65
|
+
type: postType,
|
|
66
|
+
title: decodeEntities(savedRecord.title.rendered),
|
|
67
|
+
url: savedRecord.link,
|
|
68
|
+
kind: 'post-type'
|
|
69
|
+
};
|
|
70
|
+
onPageCreated(pageLink);
|
|
71
|
+
}
|
|
72
|
+
} catch (error) {
|
|
73
|
+
// Error handling is done via the data store selectors
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const isSubmitDisabled = isSaving || !isTitleValid;
|
|
77
|
+
return /*#__PURE__*/_jsx(DialogWrapper, {
|
|
78
|
+
className: "link-ui-page-creator",
|
|
79
|
+
title: __('Create page'),
|
|
80
|
+
description: __('Create a new page to add to your Navigation.'),
|
|
81
|
+
onBack: onBack,
|
|
82
|
+
children: /*#__PURE__*/_jsx(VStack, {
|
|
83
|
+
className: "link-ui-page-creator__inner",
|
|
84
|
+
spacing: 4,
|
|
85
|
+
children: /*#__PURE__*/_jsx("form", {
|
|
86
|
+
onSubmit: createPage,
|
|
87
|
+
children: /*#__PURE__*/_jsxs(VStack, {
|
|
88
|
+
spacing: 4,
|
|
89
|
+
children: [/*#__PURE__*/_jsx(TextControl, {
|
|
90
|
+
__next40pxDefaultSize: true,
|
|
91
|
+
__nextHasNoMarginBottom: true,
|
|
92
|
+
label: __('Title'),
|
|
93
|
+
onChange: setTitle,
|
|
94
|
+
placeholder: __('No title'),
|
|
95
|
+
value: title
|
|
96
|
+
}), /*#__PURE__*/_jsx(CheckboxControl, {
|
|
97
|
+
__nextHasNoMarginBottom: true,
|
|
98
|
+
label: __('Publish immediately'),
|
|
99
|
+
help: __('If unchecked, the page will be created as a draft.'),
|
|
100
|
+
checked: shouldPublish,
|
|
101
|
+
onChange: setShouldPublish
|
|
102
|
+
}), lastError && /*#__PURE__*/_jsx(Notice, {
|
|
103
|
+
status: "error",
|
|
104
|
+
isDismissible: false,
|
|
105
|
+
children: lastError.message
|
|
106
|
+
}), /*#__PURE__*/_jsxs(HStack, {
|
|
107
|
+
spacing: 2,
|
|
108
|
+
justify: "flex-end",
|
|
109
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
110
|
+
__next40pxDefaultSize: true,
|
|
111
|
+
variant: "tertiary",
|
|
112
|
+
onClick: onBack,
|
|
113
|
+
disabled: isSaving,
|
|
114
|
+
accessibleWhenDisabled: true,
|
|
115
|
+
children: __('Cancel')
|
|
116
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
117
|
+
__next40pxDefaultSize: true,
|
|
118
|
+
variant: "primary",
|
|
119
|
+
type: "submit",
|
|
120
|
+
isBusy: isSaving,
|
|
121
|
+
"aria-disabled": isSubmitDisabled,
|
|
122
|
+
children: __('Create page')
|
|
123
|
+
})]
|
|
124
|
+
})]
|
|
125
|
+
})
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=page-creator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Button","TextControl","Notice","CheckboxControl","__experimentalVStack","VStack","__experimentalHStack","HStack","__","useSelect","useDispatch","store","coreStore","decodeEntities","useState","DialogWrapper","jsx","_jsx","jsxs","_jsxs","LinkUIPageCreator","postType","onBack","onPageCreated","initialTitle","title","setTitle","shouldPublish","setShouldPublish","isTitleValid","trim","length","lastError","isSaving","select","getLastEntitySaveError","isSavingEntityRecord","saveEntityRecord","createPage","event","preventDefault","savedRecord","status","throwOnError","pageLink","id","type","rendered","url","link","kind","error","isSubmitDisabled","className","description","children","spacing","onSubmit","__next40pxDefaultSize","__nextHasNoMarginBottom","label","onChange","placeholder","value","help","checked","isDismissible","message","justify","variant","onClick","disabled","accessibleWhenDisabled","isBusy"],"sources":["@wordpress/block-library/src/navigation-link/page-creator.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tTextControl,\n\tNotice,\n\tCheckboxControl,\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport DialogWrapper from './dialog-wrapper';\n\n/**\n * Component for creating new pages within the Navigation Link UI.\n *\n * @param {Object} props Component props.\n * @param {string} props.postType The post type to create.\n * @param {Function} props.onBack Callback when user wants to go back.\n * @param {Function} props.onPageCreated Callback when page is successfully created.\n * @param {string} [props.initialTitle] Initial title to pre-fill the form.\n */\nexport function LinkUIPageCreator( {\n\tpostType,\n\tonBack,\n\tonPageCreated,\n\tinitialTitle = '',\n} ) {\n\tconst [ title, setTitle ] = useState( initialTitle );\n\tconst [ shouldPublish, setShouldPublish ] = useState( false );\n\n\t// Check if the title is valid for submission\n\tconst isTitleValid = title.trim().length > 0;\n\n\t// Get the last created entity record (without ID) to track creation state\n\tconst { lastError, isSaving } = useSelect(\n\t\t( select ) => ( {\n\t\t\tlastError: select( coreStore ).getLastEntitySaveError(\n\t\t\t\t'postType',\n\t\t\t\tpostType\n\t\t\t),\n\t\t\tisSaving: select( coreStore ).isSavingEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType\n\t\t\t),\n\t\t} ),\n\t\t[ postType ]\n\t);\n\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tasync function createPage( event ) {\n\t\tevent.preventDefault();\n\t\tif ( isSaving || ! isTitleValid ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst savedRecord = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\t{\n\t\t\t\t\ttitle,\n\t\t\t\t\tstatus: shouldPublish ? 'publish' : 'draft',\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\tif ( savedRecord ) {\n\t\t\t\t// Create the page link object from the saved record\n\t\t\t\tconst pageLink = {\n\t\t\t\t\tid: savedRecord.id,\n\t\t\t\t\ttype: postType,\n\t\t\t\t\ttitle: decodeEntities( savedRecord.title.rendered ),\n\t\t\t\t\turl: savedRecord.link,\n\t\t\t\t\tkind: 'post-type',\n\t\t\t\t};\n\n\t\t\t\tonPageCreated( pageLink );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\t// Error handling is done via the data store selectors\n\t\t}\n\t}\n\n\tconst isSubmitDisabled = isSaving || ! isTitleValid;\n\n\treturn (\n\t\t<DialogWrapper\n\t\t\tclassName=\"link-ui-page-creator\"\n\t\t\ttitle={ __( 'Create page' ) }\n\t\t\tdescription={ __( 'Create a new page to add to your Navigation.' ) }\n\t\t\tonBack={ onBack }\n\t\t>\n\t\t\t<VStack className=\"link-ui-page-creator__inner\" spacing={ 4 }>\n\t\t\t\t<form onSubmit={ createPage }>\n\t\t\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Title' ) }\n\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\tplaceholder={ __( 'No title' ) }\n\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Publish immediately' ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'If unchecked, the page will be created as a draft.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tchecked={ shouldPublish }\n\t\t\t\t\t\t\tonChange={ setShouldPublish }\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{ lastError && (\n\t\t\t\t\t\t\t<Notice status=\"error\" isDismissible={ false }>\n\t\t\t\t\t\t\t\t{ lastError.message }\n\t\t\t\t\t\t\t</Notice>\n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t<HStack spacing={ 2 } justify=\"flex-end\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\tonClick={ onBack }\n\t\t\t\t\t\t\t\tdisabled={ isSaving }\n\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t\t\taria-disabled={ isSubmitDisabled }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Create page' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</VStack>\n\t\t\t\t</form>\n\t\t\t</VStack>\n\t\t</DialogWrapper>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|