UNPKG

@wordpress/block-library

Version:
97 lines (85 loc) 2.92 kB
import { createElement } from "@wordpress/element"; /** * External dependencies */ import memoize from 'memize'; /** * WordPress dependencies */ import { calendar as icon } from '@wordpress/icons'; import { Disabled, Placeholder, Spinner } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import ServerSideRender from '@wordpress/server-side-render'; import { useBlockProps } from '@wordpress/block-editor'; import { store as coreStore } from '@wordpress/core-data'; import { __ } from '@wordpress/i18n'; /** * Returns the year and month of a specified date. * * @see `WP_REST_Posts_Controller::prepare_date_response()`. * * @param {string} date Date in `ISO8601/RFC3339` format. * @return {Object} Year and date of the specified date. */ const getYearMonth = memoize(date => { if (!date) { return {}; } const dateObj = new Date(date); return { year: dateObj.getFullYear(), month: dateObj.getMonth() + 1 }; }); export default function CalendarEdit(_ref) { let { attributes } = _ref; const blockProps = useBlockProps(); const { date, hasPosts, hasPostsResolved } = useSelect(select => { const { getEntityRecords, hasFinishedResolution } = select(coreStore); const singlePublishedPostQuery = { status: 'publish', per_page: 1 }; const posts = getEntityRecords('postType', 'post', singlePublishedPostQuery); const postsResolved = hasFinishedResolution('getEntityRecords', ['postType', 'post', singlePublishedPostQuery]); let _date; // FIXME: @wordpress/block-library should not depend on @wordpress/editor. // Blocks can be loaded into a *non-post* block editor. // eslint-disable-next-line @wordpress/data-no-store-string-literals const editorSelectors = select('core/editor'); if (editorSelectors) { const postType = editorSelectors.getEditedPostAttribute('type'); // Dates are used to overwrite year and month used on the calendar. // This overwrite should only happen for 'post' post types. // For other post types the calendar always displays the current month. if (postType === 'post') { _date = editorSelectors.getEditedPostAttribute('date'); } } return { date: _date, hasPostsResolved: postsResolved, hasPosts: postsResolved && (posts === null || posts === void 0 ? void 0 : posts.length) === 1 }; }, []); if (!hasPosts) { return createElement("div", blockProps, createElement(Placeholder, { icon: icon, label: __('Calendar') }, !hasPostsResolved ? createElement(Spinner, null) : __('No published posts found.'))); } return createElement("div", blockProps, createElement(Disabled, null, createElement(ServerSideRender, { block: "core/calendar", attributes: { ...attributes, ...getYearMonth(date) } }))); } //# sourceMappingURL=edit.js.map