adobe / adobe/aem-core-forms-components

Rule Editor and "is submitted successfully" event on "FORM"

Open
#1,283 6 comments 0 reactions 1 assignee Claimed by @arunattri26 View on GitHub
Dominant language
JavaScript
Stars
36
Forks
62
Avg merge
1d 6h
Merged PRs (30d)
8

Description

### Expected Behaviour
I expect to be able to create a container level rule via the rule editor, particularly when a form is successfully submitted.

### Actual Behaviour
The rule editor cannot be invoked on the form container. When you enter the rule editor via a different component and select "FORM", making changes fail.

#### Steps to Reproduce
Navigate to a form based on af core components, enter the rule editor and try to create a rule at the "FORM" level with the event of "is submitted successfully", click done and view the console.

#### Platform and Version
Core Components Version: 2.24.2
Core Form Components: 1.1.32

#### AEM Version (mention the exact version in case of cloud SDK)
6.5.18

#### AEM Forms Version
6.0.1016

#### Sample Code that illustrates the problem

#### Logs taken while reproducing problem

When you get into the rule editor and configure a rule on the form container, when clicking done, you see the following error in the console:

```
authoring.min.js:516 Uncaught
TypeError: Cannot read properties of undefined (reading 'startsWith')
at authoring.min.js:516:33
at lodash.min.js:55:41
at wa (lodash.min.js:36:14)
at lodash.min.js:54:347
at Function.nf (lodash.min.js:77:7)
at preparePostData (authoring.min.js:506:15)
at saveScript (authoring.min.js:573:24)
at authoring.min.js:442:9
at Object.saveModel (authoring.min.js:605:60)
at Object.saveHandler (authoring.min.js:1186:69)
```
After further investigation, the event being invoked is as follows:

```
{
"Successful Submission": {
"content": [
"upper(language.$value)"
]
}
}
```

But when we take a look at the clientlib, `/libs/fd/af-expeditor/clientlibs/authoring/js/RuleSaveHandler.js`, we see "Successful Submission" missing from the `eventMapping`
```
const AFStorageSettings = {
AF1 : {
copyright: true,
saveScripts: false,
eventMapping: RuntimeUtil.EVENT_PROPERTY_MAPPING,
scriptMerger: guidelib.author.scriptMerger,
deleteLegacyProperties : true,
multipleEvents : false,
saveValidationStatus: false
},
AF2 : {
copyright: false,
saveScripts: true,
multipleEvents : true,
eventMapping: {
'Visibility' : 'visible',
'Calculate' : 'value',
"Enabled" : "enabled",
'Value Commit' : 'event:change',
'Initialize' : 'event:initialize',
'Click' : 'event:click',
'Validate' : 'validationExpression'
},
...
}
}
```
With the mapping missing, the following code (starting on line 122) causes "name" to be undefined causing the error and preventing the rule from being processed.
```
if (storageSettings.saveScripts) {
...
_.each(allEvents, function (script, evntName) {
let name;
if (storageSettings.multipleEvents && evntName.startsWith('custom:')) {
name = "event:custom_" + evntName.substring('custom:'.length)
} else {
name = storageSettings.eventMapping[evntName]
}
...
});
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.