2026-03-27 15:53:29 +00:00

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);