strapi-plugin-publisher
Version:
A plugin for Strapi Headless CMS that provides the ability to schedule publishing for any content type.
77 lines (66 loc) • 2.04 kB
JavaScript
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import { DateTimePicker, Typography, Stack } from '@strapi/design-system';
import { getTrad } from '../../../utils/getTrad';
import { useSettings } from '../../../hooks/useSettings';
import './ActionDateTimerPicker.css';
const ActionDateTimePicker = ({ executeAt, mode, isCreating, isEditing, onChange }) => {
const { formatMessage, locale: browserLocale } = useIntl();
const [locale, setLocale] = useState(browserLocale);
const [step, setStep] = useState(1);
const { getSettings } = useSettings();
function handleDateChange(date) {
if (onChange) {
onChange(date);
}
}
const { isLoading, data, isRefetching } = getSettings();
useEffect(() => {
if (!isLoading && !isRefetching) {
if (data) {
setStep(data.components.dateTimePicker.step);
const customLocale = data.components.dateTimePicker.locale;
try {
Intl.DateTimeFormat(customLocale);
setLocale(customLocale);
} catch (error) {
console.log(
`'${customLocale}' is not a valid format, using browser locale: '${browserLocale}'`
);
}
}
}
}, [isLoading, isRefetching]);
if (!isCreating && !isEditing) {
return null;
}
return (
<div id="action-date-time-picker">
<Stack spacing={2}>
<Typography variant="sigma" textColor="neutral600" merginBottom={1}>
{formatMessage({
id: getTrad(`action.header.${mode}.title`),
defaultMessage: `${mode} Date`,
})}
</Typography>
<DateTimePicker
ariaLabel="datetime picker"
onChange={handleDateChange}
value={executeAt ? new Date(executeAt) : null}
disabled={!isCreating}
step={step}
locale={locale}
/>
</Stack>
</div>
);
};
ActionDateTimePicker.propTypes = {
executeAt: PropTypes.string,
onChange: PropTypes.func,
mode: PropTypes.string.isRequired,
isCreating: PropTypes.bool.isRequired,
isEditing: PropTypes.bool.isRequired,
};
export default ActionDateTimePicker;