
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