Are you a developer or more of a business user of Launch with basic technical know how?
In the case of SPA, I would recommend to use Direct Call rules fired from the app, as the app knows its state, which fields are filled and on which step you currently are.
In our project I have one Direct Call rule in launch which listens to the identifier "form-interaction". It needs a payload object where the data I want to track is provided. Example object for the start event:
{
action: 'start',
name: 'Contact Form',
step: 1,
errors: []
}
Within the rule I have a Custom Code section in a Set Variables action which looks more or less like this (just an example):
s.linkTrackVars = 'events,eVar1,eVar2,prop1,prop2';
if (event.detail.action === 'start') {
s.linkTrackEvents = 'event1';
s.events = 'event1';
} else if (event.detail.action === 'step') {
s.linkTrackEvents = 'event2';
s.events = 'event2';
} else if (event.detail.action === 'end') {
s.linkTrackEvents = 'event3';
s.events = 'event3';
} else if (event.detail.action === 'error') {
s.linkTrackEvents = 'event4';
s.events = 'event4';
s.linkTrackVars += ',eVar3,prop3';
s.eVar3 = event.detail.errors.join(' | ');
s.prop3 = 'D=v3';
}
s.eVar1 = event.detail.name;
s.prop1 = 'D=v1';
s.eVar2 = event.detail.name + ' | Step ' + event.detail.step;
s.prop2 = 'D=v2';
To track a call just use _satellite.track('form-interaction', {
action: 'start',
name: 'Contact Form',
step: 1,
errors: []
});