/**
* WordPress dependencies
*/
import { useSelect, useDispatch } from '@safe-wordpress/data';
/**
* External dependencies
*/
import { DateInput } from '@nelio-content/components';
import { store as NC_DATA } from '@nelio-content/data';
import { extractDateTimeValues } from '@nelio-content/utils';
/**
* Internal dependencies
*/
import { useIsDisabled, useIsPublished } from '../hooks';
import { store as NC_POST_EDITOR } from '../store';
export const DateSelector = (): JSX.Element => {
const [ date, setDate ] = useDate();
const minDate = useMinDate();
const disabled = useIsDisabled();
const published = useIsPublished();
return (
setDate( d ?? '' ) }
min={ minDate }
/>
);
};
// =====
// HOOKS
// =====
const useDate = () => {
const dateValue = useSelect(
( select ) => select( NC_POST_EDITOR ).getDateValue(),
[]
);
const { setDateValue } = useDispatch( NC_POST_EDITOR );
return [ dateValue, setDateValue ] as const;
};
const useMinDate = () =>
useSelect( ( select ) => {
const data = select( NC_DATA );
const editor = select( NC_POST_EDITOR );
const today = data.getToday();
if ( editor.isNewPost() ) {
return today;
}
const post = data.getPost( editor.getId() );
const dtv = extractDateTimeValues( post?.date );
return minDate( today, dtv?.dateValue );
}, [] );
// =======
// HELPERS
// =======
const minDate = ( d1: string, d2?: string ) => ( ! d2 || d1 < d2 ? d1 : d2 );