From 7213d66b150202eeaa2bee886e117ab79d2a823f Mon Sep 17 00:00:00 2001 From: Saxon Fletcher Date: Fri, 9 Jun 2023 17:05:14 +1000 Subject: [PATCH 01/37] add required inputs --- .../page-details.js | 14 ++ .../publish-date.js | 75 +++++++++++ .../status-label.js | 127 +++++++----------- 3 files changed, 141 insertions(+), 75 deletions(-) create mode 100644 packages/edit-site/src/components/sidebar-navigation-screen-page/publish-date.js diff --git a/packages/edit-site/src/components/sidebar-navigation-screen-page/page-details.js b/packages/edit-site/src/components/sidebar-navigation-screen-page/page-details.js index 996e1c9377314..7bb7bb00b0ab5 100644 --- a/packages/edit-site/src/components/sidebar-navigation-screen-page/page-details.js +++ b/packages/edit-site/src/components/sidebar-navigation-screen-page/page-details.js @@ -17,6 +17,7 @@ import { store as coreStore, useEntityRecord } from '@wordpress/core-data'; * Internal dependencies */ import StatusLabel from './status-label'; +import PublishDate from './publish-date'; import { unlock } from '../../lock-unlock'; import { store as editSiteStore } from '../../store'; @@ -33,6 +34,19 @@ function getPageDetails( page ) { label: __( 'Status' ), value: ( + ), + }, + { + label: __( 'Publish on' ), + value: ( + diff --git a/packages/edit-site/src/components/sidebar-navigation-screen-page/publish-date.js b/packages/edit-site/src/components/sidebar-navigation-screen-page/publish-date.js new file mode 100644 index 0000000000000..2ad25a4dd5c99 --- /dev/null +++ b/packages/edit-site/src/components/sidebar-navigation-screen-page/publish-date.js @@ -0,0 +1,75 @@ +/** + * WordPress dependencies + */ +import { __, sprintf } from '@wordpress/i18n'; +import { dateI18n, getDate, getSettings } from '@wordpress/date'; +import { createInterpolateElement, useState } from '@wordpress/element'; +import { DateTimePicker, Button, Dropdown } from '@wordpress/components'; +import { useDispatch } from '@wordpress/data'; +import { store as coreStore } from '@wordpress/core-data'; +import { store as noticesStore } from '@wordpress/notices'; + +export default function StatusLabel( { date: currentDate, postId, postType } ) { + const [ date, setDate ] = useState( currentDate ); + + const { editEntityRecord } = useDispatch( coreStore ); + const { createErrorNotice } = useDispatch( noticesStore ); + + async function saveDate( newDate ) { + setDate( newDate ); + try { + await editEntityRecord( 'postType', postType, postId, { + date, + } ); + } catch ( error ) { + setDate( currentDate ); + const errorMessage = + error.message && error.code !== 'unknown_error' + ? error.message + : __( 'An error occurred while updating the status' ); + + createErrorNotice( errorMessage, { + type: 'snackbar', + } ); + } + } + + const formattedDate = dateI18n( + getSettings().formats.date, + getDate( date ) + ); + + const statusLabel = createInterpolateElement( + sprintf( + /* translators: %s: is the formatted date and time on which the post is scheduled to be published. */ + __( 'Scheduled for ' ), + formattedDate + ), + { time: