All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.js.admin.components.ScheduleModal.js Maven / Gradle / Ivy

The newest version!
/**
 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

import ClayAlert from '@clayui/alert';
import ClayButton from '@clayui/button';
import ClayDatePicker from '@clayui/date-picker';
import ClayModal from '@clayui/modal';
import classnames from 'classnames';
import PropTypes from 'prop-types';
import React, {useEffect, useState} from 'react';

const DIFFERENCE_IN_YEARS = 1;

export function isValidDate(dateString, userTimeZone) {

	// Regular expression for the 'yyyy-MM-dd HH:mm' format

	const dateRegex =
		/^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/;

	if (!dateRegex.test(dateString.trim())) {
		return false;
	}

	const [, year, month, day, hour, minute] = dateString
		.trim()
		.match(dateRegex);
	const date = new Date(year, month - 1, day, hour, minute);

	const currenDate = new Date(
		new Date().toLocaleString('en-US', {timeZone: userTimeZone})
	);

	if (date <= currenDate) {
		return false;
	}

	const dateYear = date.getFullYear();
	const currentYear = currenDate.getFullYear();

	if (dateYear > currentYear + DIFFERENCE_IN_YEARS) {
		return false;
	}

	return true;
}

const noop = () => {};

export default function ScheduleModal({
	callback = noop,
	displayDate: initialDisplayDate,
	scheduled,
	timeZone,
	observer,
	onModalClose = noop,
}) {
	const [displayDate, setDisplayDate] = useState(
		scheduled ? initialDisplayDate : ''
	);
	const [invalidDate, setInvalidDate] = useState(false);

	const handleScheduleButtonOnClick = () => {
		onModalClose();
		callback(displayDate.trim());
	};

	const publisNowButtonOnClick = () => {
		onModalClose();
		callback('');
	};

	const currentYear = new Date().getFullYear();

	useEffect(() => {
		setInvalidDate(
			displayDate !== '' && !isValidDate(displayDate, timeZone)
		);
	}, [displayDate, timeZone]);

	return (
		
			
				{scheduled
					? Liferay.Language.get('edit-scheduled-publication')
					: Liferay.Language.get('schedule-publication')}
			

			
				

{scheduled ? Liferay.Language.get( 'this-article-is-set-to-publish-later' ) : Liferay.Language.get( 'set-date-and-time-for-publication' )}

{invalidDate && (
{Liferay.Language.get('please-enter-a-valid-date')}
)}
{Liferay.Language.get('cancel')} {scheduled && ( {Liferay.Language.get('publish-now')} )} {Liferay.Language.get('schedule')} } />
); } ScheduleModal.propTypes = { callback: PropTypes.func, displayDate: PropTypes.string, observer: PropTypes.object.isRequired, onModalClose: PropTypes.func, scheduled: PropTypes.bool, timeZone: PropTypes.string, };




© 2015 - 2025 Weber Informatics LLC | Privacy Policy