UNPKG

ng2-intercom

Version:

NG2 Intercom integration. See https://github.com/CaliStyle/angular2-intercom

77 lines (73 loc) 1.78 kB
/** * Intercom Browser module for Angular */ export class IntercomBrowser { app_id: string; init (data, onLoad?, onError?) { if (data.app_id) { this.app_id = data.app_id; } let w = (<any> window); // Intercom initialization w.intercomSettings = data; if (w.Intercom === undefined){ w.Intercom = { q: [ ['boot', data], ], }; this.loader(onLoad, onError); } else { this.boot(data); } } sendCmd (cmd: string, data?: any) { let w = (<any> window); // Delay sending requests until Intercom is initialized if (w.Intercom === undefined) { console.error('ERROR Intercom may be blocked'); } else if (typeof w.Intercom === 'function') { w.Intercom(cmd, data); } else { w.Intercom.q.push([cmd, data]); } } boot (data) { this.sendCmd('boot', data); } update (data) { this.sendCmd('update', data); } shutdown () { this.sendCmd('shutdown'); } showNewMessage (msg?: string) { this.sendCmd('showNewMessage', msg); } trackEvent (name: string, data?: any) { let w = (<any> window); // Event tracking takes 3 arguments, so we split this out // into a new function instead of just calling sendCmd if (w.Intercom === undefined) { console.error('ERROR Intercom may be blocked'); } else if (typeof w.Intercom === 'function') { w.Intercom('trackEvent', name, data); } else { w.Intercom.q.push(['trackEvent', name, data]); } } loader (onLoad?, onError?) { let s = document.createElement('script'); s.type='text/javascript'; s.async=true; s.src=`https://widget.intercom.io/widget/${this.app_id}`; if (onLoad) { s.onload = onLoad; } if (onError) { s.onerror = onError; } let x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s,x); } }