diff --git a/package-lock.json b/package-lock.json index 9e1ce262346da8..104727385ff728 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18123,11 +18123,19 @@ "@wordpress/url": "file:packages/url", "@wordpress/wordcount": "file:packages/wordcount", "classnames": "^2.3.1", + "date-fns": "^2.28.0", "lodash": "^4.17.21", "memize": "^1.1.0", "react-autosize-textarea": "^7.1.0", "rememo": "^4.0.0", "remove-accents": "^0.4.2" + }, + "dependencies": { + "date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + } } }, "@wordpress/element": { @@ -19134,12 +19142,6 @@ "@babel/runtime": "^7.16.0" } }, - "@xmldom/xmldom": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.3.tgz", - "integrity": "sha512-Lv2vySXypg4nfa51LY1nU8yDAGo/5YwF+EY/rUZgIbfvwVARcd67ttCM8SMsTeJy51YhHYavEq+FS6R0hW9PFQ==", - "dev": true - }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -20250,6 +20252,12 @@ "@wdio/logger": "6.10.10" } }, + "@xmldom/xmldom": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz", + "integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==", + "dev": true + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -43785,7 +43793,7 @@ "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, "lodash.ismatch": { "version": "4.4.0", diff --git a/packages/editor/package.json b/packages/editor/package.json index 9984a6ddbcef7d..d0d46269a53699 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -58,6 +58,7 @@ "@wordpress/url": "file:../url", "@wordpress/wordcount": "file:../wordcount", "classnames": "^2.3.1", + "date-fns": "^2.28.0", "lodash": "^4.17.21", "memize": "^1.1.0", "react-autosize-textarea": "^7.1.0", diff --git a/packages/editor/src/components/post-schedule/index.js b/packages/editor/src/components/post-schedule/index.js index 7d410a30cca185..98a22a992113d5 100644 --- a/packages/editor/src/components/post-schedule/index.js +++ b/packages/editor/src/components/post-schedule/index.js @@ -1,3 +1,8 @@ +/** + * External dependencies + */ +import { parseISO, endOfMonth, startOfMonth } from 'date-fns'; + /** * WordPress dependencies */ @@ -12,15 +17,6 @@ import { store as coreStore } from '@wordpress/core-data'; */ import { store as editorStore } from '../../store'; -function getDayOfTheMonth( date = new Date(), firstDay = true ) { - const d = new Date( date ); - return new Date( - d.getFullYear(), - d.getMonth() + ( firstDay ? 0 : 1 ), - firstDay ? 1 : 0 - ).toISOString(); -} - export default function PostSchedule( { onClose } ) { const { postDate, postType } = useSelect( ( select ) => ( { @@ -34,7 +30,7 @@ export default function PostSchedule( { onClose } ) { const onUpdateDate = ( date ) => editPost( { date } ); const [ previewedMonth, setPreviewedMonth ] = useState( - getDayOfTheMonth( postDate ) + startOfMonth( new Date( postDate ) ) ); // Pick up published and schduled site posts. @@ -42,22 +38,20 @@ export default function PostSchedule( { onClose } ) { ( select ) => select( coreStore ).getEntityRecords( 'postType', postType, { status: 'publish,future', - after: getDayOfTheMonth( previewedMonth ), - before: getDayOfTheMonth( previewedMonth, false ), + 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( - ( { title, type, date: eventDate } ) => ( { - title: title?.rendered, - type, - date: new Date( eventDate ), - } ) - ), + ( eventsByPostType || [] ).map( ( { date: eventDate } ) => ( { + date: new Date( eventDate ), + } ) ), [ eventsByPostType ] ); @@ -80,7 +74,9 @@ export default function PostSchedule( { onClose } ) { onChange={ onUpdateDate } is12Hour={ is12HourTime } events={ events } - onMonthPreviewed={ setPreviewedMonth } + onMonthPreviewed={ ( date ) => + setPreviewedMonth( parseISO( date ) ) + } onClose={ onClose } /> );