UNPKG

@gravityforms/utils

Version:
64 lines (60 loc) 1.91 kB
import assign from '../data/object-assign'; /** * @module trigger * @description Trigger an event, either native or custom, and optionally pass data along. * * @since 1.0.0 * * @param {{data: {uuid: (*|string)}, native: boolean, event: string}} opts The options object. * @param {object} opts.data Data to pass inside an object with the event. * Available as `event.detail` in the listener. * @param {Document|Window|HTMLElement} opts.el The element to trigger the event on. * @param {string} opts.event The event name. * @param {boolean} opts.native Whether or not the event is a native browser event or a custom one. * * @requires assign * * @return {void} * * @example * import { trigger } from "@gravityforms/utils"; * * function Example() { * trigger( { event: 'gform/flyout/open', native: false, data: { * something: 'we need', * } } ); * }; * * // elsewhere in the codebase * * document.addEventListener( 'gform/flyout/open', function( event ) { * console.log( event.detail.something ); * } ); * */ export default function trigger( opts = {} ) { let event; const options = assign( { data: {}, el: document, event: '', native: true, }, opts ); if ( options.native ) { event = document.createEvent( 'HTMLEvents' ); event.initEvent( options.event, true, false ); } else { try { event = new window.CustomEvent( options.event, { detail: options.data, } ); } catch ( e ) { event = document.createEvent( 'CustomEvent' ); event.initCustomEvent( options.event, true, true, options.data ); } } options.el.dispatchEvent( event ); }