UNPKG

@wordpress/editor

Version:
113 lines (110 loc) 3.61 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = PostURLPanel; var _element = require("@wordpress/element"); var _data = require("@wordpress/data"); var _components = require("@wordpress/components"); var _i18n = require("@wordpress/i18n"); var _url = require("@wordpress/url"); var _coreData = require("@wordpress/core-data"); var _check = _interopRequireDefault(require("./check")); var _index = _interopRequireDefault(require("./index")); var _postPanelRow = _interopRequireDefault(require("../post-panel-row")); var _store = require("../../store"); var _jsxRuntime = require("react/jsx-runtime"); /** * WordPress dependencies */ /** * Internal dependencies */ /** * Renders the `PostURLPanel` component. * * @return {JSX.Element} The rendered PostURLPanel component. */function PostURLPanel() { // Use internal state instead of a ref to make sure that the component // re-renders when the popover's anchor updates. const [popoverAnchor, setPopoverAnchor] = (0, _element.useState)(null); // Memoize popoverProps to avoid returning a new object every time. const popoverProps = (0, _element.useMemo)(() => ({ // Anchor the popover to the middle of the entire row so that it doesn't // move around when the label changes. anchor: popoverAnchor, placement: 'left-start', offset: 36, shift: true }), [popoverAnchor]); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_check.default, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_postPanelRow.default, { label: (0, _i18n.__)('Link'), ref: setPopoverAnchor, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Dropdown, { popoverProps: popoverProps, className: "editor-post-url__panel-dropdown", contentClassName: "editor-post-url__panel-dialog", focusOnMount: true, renderToggle: ({ isOpen, onToggle }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(PostURLToggle, { isOpen: isOpen, onClick: onToggle }), renderContent: ({ onClose }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.default, { onClose: onClose }) }) }) }); } function PostURLToggle({ isOpen, onClick }) { const { slug, isFrontPage, postLink } = (0, _data.useSelect)(select => { const { getCurrentPostId, getCurrentPost } = select(_store.store); const { getEditedEntityRecord, canUser } = select(_coreData.store); const siteSettings = canUser('read', { kind: 'root', name: 'site' }) ? getEditedEntityRecord('root', 'site') : undefined; const _id = getCurrentPostId(); return { slug: select(_store.store).getEditedPostSlug(), isFrontPage: siteSettings?.page_on_front === _id, postLink: getCurrentPost()?.link }; }, []); const decodedSlug = (0, _url.safeDecodeURIComponent)(slug); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, { size: "compact", className: "editor-post-url__panel-toggle", variant: "tertiary", "aria-expanded": isOpen // translators: %s: Current post link. , "aria-label": (0, _i18n.sprintf)((0, _i18n.__)('Change link: %s'), decodedSlug), onClick: onClick, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalTruncate, { numberOfLines: 1, children: isFrontPage ? postLink : `/${decodedSlug}` }) }); } //# sourceMappingURL=panel.js.map