webpack/JobWizard/steps/Schedule/RepeatCron.js
import URI from 'urijs';
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import {
List,
ListItem,
ListComponent,
OrderType,
TextInput,
FormGroup,
ValidatedOptions,
} from '@patternfly/react-core';
import { foremanUrl } from 'foremanReact/common/helpers';
import { useForemanVersion } from 'foremanReact/Root/Context/ForemanContext';
import { translate as __ } from 'foremanReact/common/I18n';
import { helpLabel } from '../form/FormHelpers';
const docUrl = foremanVersion => {
const rootUrl = `https://docs.theforeman.org/${foremanVersion}/`;
const section =
'Managing_Hosts/index-foreman-el.html#using-extended-cron-lines_managing-hosts';
const url = new URI({
path: '/links/manual',
query: { root_url: rootUrl, section },
});
return foremanUrl(url.href());
};
export const RepeatCron = ({ repeatData, setRepeatData, setValid }) => {
const foremanVersion = useForemanVersion();
const { cronline } = repeatData;
useEffect(() => {
if (cronline) {
setValid(true);
} else {
setValid(false);
}
return () => setValid(true);
}, [setValid, cronline]);
return (
<FormGroup
label={__('Cron line (extended)')}
labelIcon={helpLabel(
<div>
{__("Cron line format '1 2 3 4 5', where:")}
<br />
<List component={ListComponent.ol} type={OrderType.number}>
<ListItem>{__('is minute (range: 0-59)')}</ListItem>
<ListItem>{__('is hour (range: 0-23)')}</ListItem>
<ListItem>{__('is day of month (range: 1-31)')}</ListItem>
<ListItem>{__('is month (range: 1-12)')}</ListItem>
<ListItem>{__('is day of week (range: 0-6)')}</ListItem>
</List>
<br />
{__(
'The cron line supports extended cron line syntax. For details please refer to the '
)}
<a href={docUrl(foremanVersion)} target="_blank" rel="noreferrer">
{__('documentation')}
</a>
.
</div>
)}
isRequired
>
<TextInput
ouiaId="cronline"
isRequired
validated={cronline ? ValidatedOptions.noval : ValidatedOptions.error}
aria-label="cronline"
placeholder="* * * * *"
type="text"
value={cronline || ''}
onChange={newTime => {
setRepeatData({ cronline: newTime });
}}
/>
</FormGroup>
);
};
RepeatCron.propTypes = {
repeatData: PropTypes.object.isRequired,
setRepeatData: PropTypes.func.isRequired,
setValid: PropTypes.func.isRequired,
};