55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
;(function (ssaFormEmbed, undefined) {
|
|
|
|
var appointmentId = null;
|
|
// checks if the iframe is on the page.
|
|
var updateFormField = function (e) {
|
|
appointmentId = e.data.id;
|
|
// gets the specific iframe that emit the message event
|
|
var container = e.source.frameElement.parentNode;
|
|
var input = container.querySelector('.ssa_appointment_form_field_appointment_id')
|
|
|
|
if(!appointmentId) appointmentId='';
|
|
|
|
input.setAttribute("value", appointmentId);
|
|
input.dispatchEvent(new Event('change', { bubbles: true } ));
|
|
|
|
if(typeof(gf_apply_rules) === "function"){
|
|
// get fields with conditional logic dependent on this ssa field
|
|
var connectedFields;
|
|
try{
|
|
connectedFields = JSON.parse(input.dataset.fields);
|
|
} catch (e) {
|
|
connectedFields = false;
|
|
}
|
|
if(Array.isArray(connectedFields)){
|
|
// run conditional logic immdeiately - works for fields that are not waiting on merge tag
|
|
// in other words, fields that are connected to ssa field value itself
|
|
gf_apply_rules(input.dataset.formId, connectedFields);
|
|
|
|
// schedule conditional logic for fields outside of ssa - works for fields that are waiting on merge tags
|
|
gform.addAction(
|
|
"gform_input_change",
|
|
function (elem, formId, fieldId) {
|
|
// defer to next tick using timeout
|
|
setTimeout(() => {
|
|
gf_apply_rules(input.dataset.formId, connectedFields);
|
|
}, 0);
|
|
},
|
|
10,
|
|
"ssa_conditional_tag"
|
|
);
|
|
}
|
|
}
|
|
};
|
|
|
|
ssaFormEmbed.listen = function(e) {
|
|
if (typeof e.data == 'object' && e.data.hasOwnProperty('ssaType')) {
|
|
if (e.data.ssaType === 'appointment') {
|
|
updateFormField(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
}(window.ssaFormEmbed = window.ssaFormEmbed || {}));
|
|
|
|
window.addEventListener('message', ssaFormEmbed.listen, false); |