Skip to content

Commit 8fed604

Browse files
committed
Fix confirmations and notifications validation to accept objects
The Gravity Forms REST API v2 returns confirmations and notifications as objects keyed by ID, not arrays. The validation was incorrectly using validateArray()/`.array()` which rejected the correct format. Changed both validators to use validateObject()/`.object()` and added missing notifications validation.
1 parent 8911c9f commit 8fed604

2 files changed

Lines changed: 14 additions & 8 deletions

File tree

src/config/validation.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,15 +309,18 @@ export class FormsValidator extends BaseValidator {
309309
}
310310

311311
if (formData.confirmations !== undefined) {
312-
validated.confirmations = this.validateArray(formData.confirmations, 'confirmations');
313-
validated.confirmations = validated.confirmations.map((conf, index) => {
312+
validated.confirmations = this.validateObject(formData.confirmations, 'confirmations');
313+
Object.entries(validated.confirmations).forEach(([key, conf]) => {
314314
if (conf.type === 'redirect' && conf.url !== undefined) {
315-
conf.url = this.validateURL(conf.url, `confirmations[${index}].url`);
315+
conf.url = this.validateURL(conf.url, `confirmations.${key}.url`);
316316
}
317-
return conf;
318317
});
319318
}
320319

320+
if (formData.notifications !== undefined) {
321+
validated.notifications = this.validateObject(formData.notifications, 'notifications');
322+
}
323+
321324
if (formData.schedule_start !== undefined) {
322325
validated.schedule_start = this.validateDate(formData.schedule_start, 'schedule_start');
323326
}

src/config/validators.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,12 @@ export class FormsValidator {
8888
.array()
8989
)
9090
.field('confirmations', validate('confirmations')
91-
.array()
91+
.object()
9292
.custom((confirmations) => {
93-
if (Array.isArray(confirmations)) {
94-
confirmations.forEach((conf, index) => {
93+
if (confirmations && typeof confirmations === 'object' && !Array.isArray(confirmations)) {
94+
Object.entries(confirmations).forEach(([key, conf]) => {
9595
if (conf.type === 'redirect' && conf.url !== undefined) {
96-
validate(`confirmations[${index}].url`)
96+
validate(`confirmations.${key}.url`)
9797
.required()
9898
.string()
9999
.url()
@@ -104,6 +104,9 @@ export class FormsValidator {
104104
return true;
105105
})
106106
)
107+
.field('notifications', validate('notifications')
108+
.object()
109+
)
107110
.field('schedule_start', validate('schedule_start')
108111
.string()
109112
.date()

0 commit comments

Comments
 (0)