Skip to content

Commit a298f27

Browse files
committed
AP-5880 # Added EXCEL_ADD_ROW form workflow event to validation
1 parent 9386fff commit a298f27

File tree

4 files changed

+67
-52
lines changed

4 files changed

+67
-52
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
### Added
1111

1212
- `hideApprovalDenyButton` to `approvalStepNodeProps`
13+
- `EXCEL_ADD_ROW` form workflow event to validation
1314

1415
## [12.3.1] - 2025-11-07
1516

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/forms-schema/index.ts

Lines changed: 59 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,38 @@ export const formWorkflowEventTypes: SubmissionEventTypes.FormWorkflowEventType[
299299
'SHAREPOINT_STORE_FILES',
300300
'CIVIC_REC_COMPLETE_CHECKOUT',
301301
'GOOD_TO_GO_UPDATE_ASSET',
302+
'EXCEL_ADD_ROW',
302303
]
303304

305+
const entraApplicationKeys = {
306+
integrationEntraApplicationId: Joi.string().required(),
307+
}
308+
309+
const entraApplicationEntitySchema = Joi.object().keys({
310+
id: Joi.string().required(),
311+
displayName: Joi.string().required(),
312+
})
313+
314+
const entraApplicationFolderPathSchema = Joi.string()
315+
.custom((value, helpers) => {
316+
if (typeof value === 'string') {
317+
if (!value.startsWith('/')) {
318+
return helpers.error('string.startsWithSlash')
319+
}
320+
if (value.endsWith('/')) {
321+
return helpers.error('string.endsWithSlash')
322+
}
323+
}
324+
325+
return value
326+
})
327+
.messages({
328+
'string.startsWithSlash':
329+
'{{#label}} must start with a forward slash ("/")',
330+
'string.endsWithSlash':
331+
'{{#label}} must not end with a forward slash ("/")',
332+
})
333+
304334
export const WorkflowEventSchema = Joi.object().keys({
305335
type: Joi.string()
306336
.required()
@@ -469,19 +499,9 @@ export const WorkflowEventSchema = Joi.object().keys({
469499
.when('type', {
470500
is: 'SHAREPOINT_CREATE_LIST_ITEM',
471501
then: Joi.object().keys({
472-
integrationEntraApplicationId: Joi.string().required(),
473-
sharepointSite: Joi.object()
474-
.keys({
475-
id: Joi.string().required(),
476-
displayName: Joi.string().required(),
477-
})
478-
.required(),
479-
sharepointList: Joi.object()
480-
.keys({
481-
id: Joi.string().required(),
482-
displayName: Joi.string().required(),
483-
})
484-
.required(),
502+
...entraApplicationKeys,
503+
sharepointSite: entraApplicationEntitySchema.required(),
504+
sharepointList: entraApplicationEntitySchema.required(),
485505
mapping: Joi.array()
486506
.items(
487507
Joi.object({
@@ -498,42 +518,36 @@ export const WorkflowEventSchema = Joi.object().keys({
498518
.when('type', {
499519
is: 'SHAREPOINT_STORE_FILES',
500520
then: Joi.object().keys({
501-
integrationEntraApplicationId: Joi.string().required(),
502-
sharepointSite: Joi.object()
503-
.keys({
504-
id: Joi.string().required(),
505-
displayName: Joi.string().required(),
506-
})
507-
.required(),
508-
sharepointDrive: Joi.object()
509-
.keys({
510-
id: Joi.string().required(),
511-
displayName: Joi.string().required(),
512-
})
513-
.required(),
514-
folderPath: Joi.string()
515-
.custom((value, helpers) => {
516-
if (typeof value === 'string') {
517-
if (!value.startsWith('/')) {
518-
return helpers.error('string.startsWithSlash')
519-
}
520-
if (value.endsWith('/')) {
521-
return helpers.error('string.endsWithSlash')
522-
}
523-
}
524-
525-
return value
526-
})
527-
.messages({
528-
'string.startsWithSlash':
529-
'{{#label}} must start with a forward slash ("/")',
530-
'string.endsWithSlash':
531-
'{{#label}} must not end with a forward slash ("/")',
532-
}),
521+
...entraApplicationKeys,
522+
sharepointSite: entraApplicationEntitySchema.required(),
523+
sharepointDrive: entraApplicationEntitySchema.required(),
524+
folderPath: entraApplicationFolderPathSchema,
533525
excludeAttachments: Joi.boolean().default(false),
534526
...pdfSubmissionEventConfiguration,
535527
}),
536528
})
529+
.when('type', {
530+
is: 'EXCEL_ADD_ROW',
531+
then: Joi.object().keys({
532+
...entraApplicationKeys,
533+
site: entraApplicationFolderPathSchema.required(),
534+
drive: entraApplicationFolderPathSchema.required(),
535+
folderPath: entraApplicationFolderPathSchema.required(),
536+
excelFile: entraApplicationEntitySchema.required(),
537+
table: entraApplicationEntitySchema.required(),
538+
mapping: Joi.array()
539+
.items(
540+
Joi.object({
541+
columnName: Joi.string().required(),
542+
...generateFormWorkflowEventElementMappingKeys(
543+
'ExcelAddRowMapping',
544+
[],
545+
),
546+
}).id('ExcelAddRowMapping'),
547+
)
548+
.default([]),
549+
}),
550+
})
537551
.when('type', {
538552
is: 'CIVIC_REC_COMPLETE_CHECKOUT',
539553
then: Joi.object().keys({

tests/forms-schema/forms-schema-form-events.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ describe('Scheduling events should throw errors when not passed to "schedulingEv
6464
submissionEvents: [schedulingEvent],
6565
}),
6666
).toThrow(
67-
'"submissionEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET]',
67+
'"submissionEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET, EXCEL_ADD_ROW]',
6868
)
6969
})
7070
test('SCHEDULING form event should error when being passed to "paymentEvents"', () => {
@@ -116,7 +116,7 @@ describe('Payment events should throw errors when not passed to "paymentEvents"
116116
submissionEvents: [paymentEvent],
117117
}),
118118
).toThrow(
119-
'"submissionEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET]',
119+
'"submissionEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET, EXCEL_ADD_ROW]',
120120
)
121121
})
122122
test('Payment form event should error when being passed to "schedulingEvents"', () => {
@@ -343,7 +343,7 @@ describe('"draftEvents" and "approvalEvents" should allow only submission events
343343
draftEvents: [paymentEvent],
344344
}),
345345
).toThrow(
346-
'"draftEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET]',
346+
'"draftEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET, EXCEL_ADD_ROW]',
347347
)
348348
})
349349
test('SCHEDULING form event should error when being passed to "draftEvents"', () => {
@@ -353,7 +353,7 @@ describe('"draftEvents" and "approvalEvents" should allow only submission events
353353
draftEvents: [schedulingEvent],
354354
}),
355355
).toThrow(
356-
'"draftEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET]',
356+
'"draftEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET, EXCEL_ADD_ROW]',
357357
)
358358
})
359359
test('Should not error when passing submissionEvents to "draftEvents"', () => {
@@ -372,7 +372,7 @@ describe('"draftEvents" and "approvalEvents" should allow only submission events
372372
approvalEvents: [paymentEvent],
373373
}),
374374
).toThrow(
375-
'"approvalEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET]',
375+
'"approvalEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET, EXCEL_ADD_ROW]',
376376
)
377377
})
378378
test('SCHEDULING form event should error when being passed to "approvalEvents"', () => {
@@ -382,7 +382,7 @@ describe('"draftEvents" and "approvalEvents" should allow only submission events
382382
approvalEvents: [schedulingEvent],
383383
}),
384384
).toThrow(
385-
'"approvalEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET]',
385+
'"approvalEvents[0].type" must be one of [CALLBACK, POWER_AUTOMATE_FLOW, CP_INTEGRATION_HUB_WEBHOOK, PDF, EMAIL, ONEBLINK_API, TRIM, CP_HCMS, CIVICA_CRM, FRESHDESK_CREATE_TICKET, FRESHDESK_ADD_NOTE_TO_TICKET, SHAREPOINT_CREATE_LIST_ITEM, SHAREPOINT_STORE_FILES, CIVIC_REC_COMPLETE_CHECKOUT, GOOD_TO_GO_UPDATE_ASSET, EXCEL_ADD_ROW]',
386386
)
387387
})
388388
test('Should not error when passing submissionEvents to "approvalEvents"', () => {

0 commit comments

Comments
 (0)