UNPKG

@wordpress/editor

Version:
119 lines (118 loc) 3.79 kB
// packages/editor/src/components/post-schedule/index.js import { parseISO, endOfMonth, startOfMonth } from "date-fns"; import { speak } from "@wordpress/a11y"; import { getSettings } from "@wordpress/date"; import { __, _x, sprintf } from "@wordpress/i18n"; import { Button } from "@wordpress/components"; import { useDispatch, useSelect } from "@wordpress/data"; import { privateApis as blockEditorPrivateApis } from "@wordpress/block-editor"; import { useState, useMemo } from "@wordpress/element"; import { store as coreStore } from "@wordpress/core-data"; import { store as editorStore } from "../../store/index.mjs"; import { getFullPostScheduleLabel } from "./label.mjs"; import { unlock } from "../../lock-unlock.mjs"; import { Fragment, jsx, jsxs } from "react/jsx-runtime"; var { PrivatePublishDateTimePicker } = unlock(blockEditorPrivateApis); function PostSchedule(props) { return /* @__PURE__ */ jsx( PrivatePostSchedule, { ...props, showPopoverHeaderActions: true, isCompact: false } ); } function PrivatePostSchedule({ onClose, showPopoverHeader = true, showPopoverHeaderActions, isCompact }) { const { postDate, postType, isDateFloating } = useSelect( (select) => ({ postDate: select(editorStore).getEditedPostAttribute("date"), postType: select(editorStore).getCurrentPostType(), isDateFloating: select(editorStore).isEditedPostDateFloating() }), [] ); const { editPost } = useDispatch(editorStore); const onUpdateDate = (date) => { editPost({ date }); speak( date ? sprintf( // translators: %s: The new publish date and time, e.g. "June 3, 2025 12:00 pm UTC+0". __("Publish date set to %s."), getFullPostScheduleLabel(date) ) : __("Publish date set to now."), "assertive" ); }; const [previewedMonth, setPreviewedMonth] = useState( startOfMonth(new Date(postDate)) ); const eventsByPostType = useSelect( (select) => select(coreStore).getEntityRecords("postType", postType, { status: "publish,future", after: startOfMonth(previewedMonth).toISOString(), before: endOfMonth(previewedMonth).toISOString(), exclude: [select(editorStore).getCurrentPostId()], per_page: 100, _fields: "id,date" }), [previewedMonth, postType] ); const events = useMemo( () => (eventsByPostType || []).map(({ date: eventDate }) => ({ date: new Date(eventDate) })), [eventsByPostType] ); const settings = getSettings(); const is12HourTime = /a(?!\\)/i.test( settings.formats.time.toLowerCase().replace(/\\\\/g, "").split("").reverse().join("") // Reverse the string and test for "a" not followed by a slash. ); const picker = /* @__PURE__ */ jsx( PrivatePublishDateTimePicker, { currentDate: postDate, onChange: onUpdateDate, is12Hour: is12HourTime, dateOrder: ( /* translators: Order of day, month, and year. Available formats are 'dmy', 'mdy', and 'ymd'. */ _x("dmy", "date order") ), events, onMonthPreviewed: (date) => setPreviewedMonth(parseISO(date)), onClose, isCompact, showPopoverHeader, showPopoverHeaderActions } ); if (showPopoverHeader) { return picker; } return /* @__PURE__ */ jsxs(Fragment, { children: [ picker, /* @__PURE__ */ jsx( Button, { className: "editor-post-schedule__reset", variant: "secondary", __next40pxDefaultSize: true, disabled: isDateFloating, accessibleWhenDisabled: true, onClick: () => onUpdateDate(null), children: __("Reset") } ) ] }); } export { PrivatePostSchedule, PostSchedule as default }; //# sourceMappingURL=index.mjs.map