Skip to content

Commit

Permalink
Ensure purchase date fields are properly validated
Browse files Browse the repository at this point in the history
MAILPOET-4986
  • Loading branch information
johnolek authored and Aschepikov committed Apr 3, 2023
1 parent 4eaaa51 commit 1d87c43
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,32 @@ export function DateFields({ filterIndex }: Props): JSX.Element {
</Grid.CenteredRow>
);
}

export function dateFieldValidator(formItems: DateFormItem): boolean {
if (!formItems.operator || !formItems.value) {
return false;
}

if (
[
DateOperator.BEFORE,
DateOperator.AFTER,
DateOperator.ON,
DateOperator.NOT_ON,
].includes(formItems.operator as DateOperator)
) {
const re = /^\d+-\d+-\d+$/;
return re.test(formItems.value);
}

if (
[DateOperator.IN_THE_LAST, DateOperator.NOT_IN_THE_LAST].includes(
formItems.operator as DateOperator,
)
) {
const re = /^\d+$/;
return re.test(formItems.value) && Number(formItems.value) > 0;
}

return false;
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { useSelect } from '@wordpress/data';

import { WordpressRoleFormItem, SubscriberActionTypes } from '../types';
import { SubscriberActionTypes, WordpressRoleFormItem } from '../types';
import { storeName } from '../store';
import { WordpressRoleFields } from './subscriber_wordpress_role';
import {
SubscriberScoreFields,
validateSubscriberScore,
} from './subscriber_score';
import { DateFields, DateOperator } from './date_fields';
import { DateFields, dateFieldValidator, DateOperator } from './date_fields';
import {
MailPoetCustomFields,
validateMailPoetCustomField,
Expand Down Expand Up @@ -44,20 +44,9 @@ export function validateSubscriber(formItems: WordpressRoleFormItem): boolean {
return false;
}
if (
formItems.operator === DateOperator.BEFORE ||
formItems.operator === DateOperator.AFTER ||
formItems.operator === DateOperator.ON ||
formItems.operator === DateOperator.NOT_ON
Object.values(DateOperator).includes(formItems.operator as DateOperator)
) {
const re = /^\d+-\d+-\d+$/;
return re.test(formItems.value);
}
if (
formItems.operator === DateOperator.IN_THE_LAST ||
formItems.operator === DateOperator.NOT_IN_THE_LAST
) {
const re = /^\d+$/;
return re.test(formItems.value) && Number(formItems.value) > 0;
return dateFieldValidator(formItems);
}
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { MailPoet } from 'mailpoet';
import { filter } from 'lodash/fp';
import { ReactSelect } from 'common/form/react_select/react_select';
import { Select } from 'common/form/select/select';
import { useSelect, useDispatch } from '@wordpress/data';
import { useDispatch, useSelect } from '@wordpress/data';

import { Grid } from 'common/grid';
import { Input } from 'common/form/input/input';
Expand All @@ -15,11 +15,11 @@ import {
WindowWooCommerceCountries,
WooCommerceFormItem,
} from '../types';
import { DateFields } from './date_fields';
import { DateFields, dateFieldValidator, DateOperator } from './date_fields';
import { storeName } from '../store';
import {
WooCommerceActionTypes,
actionTypesWithDefaultTypeAny,
WooCommerceActionTypes,
} from './woocommerce_options';

export function validateWooCommerce(formItems: WooCommerceFormItem): boolean {
Expand Down Expand Up @@ -74,6 +74,11 @@ export function validateWooCommerce(formItems: WooCommerceFormItem): boolean {
) {
return false;
}
if (
Object.values(DateOperator).includes(formItems.operator as DateOperator)
) {
return dateFieldValidator(formItems);
}
if (
formItems.action === WooCommerceActionTypes.SINGLE_ORDER_VALUE &&
(!formItems.single_order_value_amount ||
Expand Down

0 comments on commit 1d87c43

Please sign in to comment.