UNPKG

@wordpress/block-library

Version:
221 lines (220 loc) 6.98 kB
import { Fragment, jsx, jsxs } from "react/jsx-runtime"; import clsx from "clsx"; import { AlignmentControl, BlockControls, InspectorControls, useBlockProps, Warning, HeadingLevelDropdown } from "@wordpress/block-editor"; import { ToggleControl, __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem } from "@wordpress/components"; import { __, _x, sprintf } from "@wordpress/i18n"; import { useArchiveLabel } from "./use-archive-label"; import { usePostTypeLabel } from "./use-post-type-label"; import { useToolsPanelDropdownMenuProps } from "../utils/hooks"; const SUPPORTED_TYPES = ["archive", "search", "post-type"]; function QueryTitleEdit({ attributes: { type, level, levelOptions, textAlign, showPrefix, showSearchTerm }, setAttributes, context: { query } }) { const { archiveTypeLabel, archiveNameLabel } = useArchiveLabel(); const { postTypeLabel } = usePostTypeLabel(query?.postType); const dropdownMenuProps = useToolsPanelDropdownMenuProps(); const TagName = level === 0 ? "p" : `h${level}`; const blockProps = useBlockProps({ className: clsx("wp-block-query-title__placeholder", { [`has-text-align-${textAlign}`]: textAlign }) }); if (!SUPPORTED_TYPES.includes(type)) { return /* @__PURE__ */ jsx("div", { ...blockProps, children: /* @__PURE__ */ jsx(Warning, { children: __("Provided type is not supported.") }) }); } let titleElement; if (type === "archive") { let title; if (archiveTypeLabel) { if (showPrefix) { if (archiveNameLabel) { title = sprintf( /* translators: 1: Archive type title e.g: "Category", 2: Label of the archive e.g: "Shoes" */ _x("%1$s: %2$s", "archive label"), archiveTypeLabel, archiveNameLabel ); } else { title = sprintf( /* translators: %s: Archive type title e.g: "Category", "Tag"... */ __("%s: Name"), archiveTypeLabel ); } } else if (archiveNameLabel) { title = archiveNameLabel; } else { title = sprintf( /* translators: %s: Archive type title e.g: "Category", "Tag"... */ __("%s name"), archiveTypeLabel ); } } else { title = showPrefix ? __("Archive type: Name") : __("Archive title"); } titleElement = /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx(InspectorControls, { children: /* @__PURE__ */ jsx( ToolsPanel, { label: __("Settings"), resetAll: () => setAttributes({ showPrefix: true }), dropdownMenuProps, children: /* @__PURE__ */ jsx( ToolsPanelItem, { hasValue: () => !showPrefix, label: __("Show archive type in title"), onDeselect: () => setAttributes({ showPrefix: true }), isShownByDefault: true, children: /* @__PURE__ */ jsx( ToggleControl, { __nextHasNoMarginBottom: true, label: __("Show archive type in title"), onChange: () => setAttributes({ showPrefix: !showPrefix }), checked: showPrefix } ) } ) } ) }), /* @__PURE__ */ jsx(TagName, { ...blockProps, children: title }) ] }); } if (type === "search") { titleElement = /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx(InspectorControls, { children: /* @__PURE__ */ jsx( ToolsPanel, { label: __("Settings"), resetAll: () => setAttributes({ showSearchTerm: true }), dropdownMenuProps, children: /* @__PURE__ */ jsx( ToolsPanelItem, { hasValue: () => !showSearchTerm, label: __("Show search term in title"), onDeselect: () => setAttributes({ showSearchTerm: true }), isShownByDefault: true, children: /* @__PURE__ */ jsx( ToggleControl, { __nextHasNoMarginBottom: true, label: __("Show search term in title"), onChange: () => setAttributes({ showSearchTerm: !showSearchTerm }), checked: showSearchTerm } ) } ) } ) }), /* @__PURE__ */ jsx(TagName, { ...blockProps, children: showSearchTerm ? __("Search results for: \u201Csearch term\u201D") : __("Search results") }) ] }); } if (type === "post-type") { let title; if (postTypeLabel) { if (showPrefix) { title = sprintf( /* translators: %s: Singular post type name of the queried object */ __('Post Type: "%s"'), postTypeLabel ); } else { title = postTypeLabel; } } else { title = showPrefix ? __("Post Type: Name") : __("Name"); } titleElement = /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx(InspectorControls, { children: /* @__PURE__ */ jsx( ToolsPanel, { label: __("Settings"), resetAll: () => setAttributes({ showPrefix: true }), dropdownMenuProps, children: /* @__PURE__ */ jsx( ToolsPanelItem, { hasValue: () => !showPrefix, label: __("Show post type label"), onDeselect: () => setAttributes({ showPrefix: true }), isShownByDefault: true, children: /* @__PURE__ */ jsx( ToggleControl, { __nextHasNoMarginBottom: true, label: __("Show post type label"), onChange: () => setAttributes({ showPrefix: !showPrefix }), checked: showPrefix } ) } ) } ) }), /* @__PURE__ */ jsx(TagName, { ...blockProps, children: title }) ] }); } return /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsxs(BlockControls, { group: "block", children: [ /* @__PURE__ */ jsx( HeadingLevelDropdown, { value: level, options: levelOptions, onChange: (newLevel) => setAttributes({ level: newLevel }) } ), /* @__PURE__ */ jsx( AlignmentControl, { value: textAlign, onChange: (nextAlign) => { setAttributes({ textAlign: nextAlign }); } } ) ] }), titleElement ] }); } export { QueryTitleEdit as default }; //# sourceMappingURL=edit.js.map