Merge pull request #10898 from kialam/fix-10718-null-datetime

Validate that start/end datetime creates at least 1 schedule.
This commit is contained in:
kialam 2021-08-20 13:42:53 -04:00 committed by GitHub
commit c6a63d01db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 9 deletions

View File

@ -29,7 +29,7 @@
"react-error-boundary": "^3.1.3",
"react-router-dom": "^5.1.2",
"react-virtualized": "^9.21.1",
"rrule": "^2.6.4",
"rrule": "2.6.4",
"sanitize-html": "2.4.0",
"styled-components": "5.3.0"
},
@ -20990,9 +20990,9 @@
"dev": true
},
"node_modules/rrule": {
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/rrule/-/rrule-2.6.8.tgz",
"integrity": "sha512-cUaXuUPrz9d1wdyzHsBfT1hptKlGgABeCINFXFvulEPqh9Np9BnF3C3lrv9uO54IIr8VDb58tsSF3LhsW+4VRw==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/rrule/-/rrule-2.6.4.tgz",
"integrity": "sha512-sLdnh4lmjUqq8liFiOUXD5kWp/FcnbDLPwq5YAc/RrN6120XOPb86Ae5zxF7ttBVq8O3LxjjORMEit1baluahA==",
"dependencies": {
"tslib": "^1.10.0"
},
@ -43726,9 +43726,9 @@
}
},
"rrule": {
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/rrule/-/rrule-2.6.8.tgz",
"integrity": "sha512-cUaXuUPrz9d1wdyzHsBfT1hptKlGgABeCINFXFvulEPqh9Np9BnF3C3lrv9uO54IIr8VDb58tsSF3LhsW+4VRw==",
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/rrule/-/rrule-2.6.4.tgz",
"integrity": "sha512-sLdnh4lmjUqq8liFiOUXD5kWp/FcnbDLPwq5YAc/RrN6120XOPb86Ae5zxF7ttBVq8O3LxjjORMEit1baluahA==",
"requires": {
"luxon": "^1.21.3",
"tslib": "^1.10.0"

View File

@ -29,7 +29,7 @@
"react-error-boundary": "^3.1.3",
"react-router-dom": "^5.1.2",
"react-virtualized": "^9.21.1",
"rrule": "^2.6.4",
"rrule": "2.6.4",
"sanitize-html": "2.4.0",
"styled-components": "5.3.0"
},

View File

@ -30,6 +30,13 @@ import {
import FrequencyDetailSubform from './FrequencyDetailSubform';
import SchedulePromptableFields from './SchedulePromptableFields';
import DateTimePicker from './DateTimePicker';
import buildRuleObj from './buildRuleObj';
const NUM_DAYS_PER_FREQUENCY = {
week: 7,
month: 31,
year: 365,
};
const generateRunOnTheDay = (days = []) => {
if (
@ -555,6 +562,19 @@ function ScheduleForm({
startDate,
} = values;
if (
end === 'onDate' &&
DateTime.fromISO(endDate)
.diff(DateTime.fromISO(startDate), 'days')
.toObject().days < NUM_DAYS_PER_FREQUENCY[frequency]
) {
const rule = new RRule(buildRuleObj(values));
if (rule.all().length === 0) {
errors.startDate = t`Selected date range must have at least 1 schedule occurrence.`;
errors.endDate = t`Selected date range must have at least 1 schedule occurrence.`;
}
}
if (
end === 'onDate' &&
DateTime.fromISO(startDate) >= DateTime.fromISO(endDate)
@ -569,7 +589,6 @@ function ScheduleForm({
) {
errors.runOn = t`Please select a day number between 1 and 31.`;
}
return errors;
}}
>