adobe / adobe/aem-core-forms-components
Rule Editor and "is submitted successfully" event on "FORM"
- 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
Assessment
This issue has not been assessed yet.