@meetelise/chat 1.20.69 → 1.20.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/public/dist/index.js
CHANGED
|
@@ -2509,20 +2509,20 @@ var e={8005:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){retur
|
|
|
2509
2509
|
justify-content: center;
|
|
2510
2510
|
align-items: center;
|
|
2511
2511
|
}
|
|
2512
|
-
`;var zi=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a};let Vi=class extends ae{constructor(){super(...arguments),this.onClickMinimize=()=>{},this.onClickEmailOption=()=>{},this.onClickPhoneOption=()=>{},this.onClickSSTOption=()=>{},this.onChatTapped=()=>{},this.hideChat=!1,this.isMobile=!1,this.brandColor=ri,this.renderListElement=(e,t)=>J` <li
|
|
2513
|
-
@click=${
|
|
2512
|
+
`;var zi=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a};let Vi=class extends ae{constructor(){super(...arguments),this.onClickMinimize=()=>{},this.onClickEmailOption=()=>{},this.onClickPhoneOption=()=>{},this.onClickSSTOption=()=>{},this.onChatTapped=()=>{},this.hideChat=!1,this.isMobile=!1,this.brandColor=ri,this.hasChatEnabled=!1,this.hasEmailEnabled=!1,this.hasCallUsEnabled=!1,this.hasSSTEnabled=!1,this.renderListElement=(e,t,n)=>e?J` <li
|
|
2513
|
+
@click=${t}
|
|
2514
2514
|
class="typeMobile-bttn"
|
|
2515
2515
|
style=${Si({background:`${this.brandColor}`})}
|
|
2516
2516
|
>
|
|
2517
2517
|
<div class="typeMobile-inner">
|
|
2518
|
-
<div class="typeMobile-icon">${
|
|
2518
|
+
<div class="typeMobile-icon">${n}</div>
|
|
2519
2519
|
</div>
|
|
2520
|
-
</li
|
|
2520
|
+
</li>`:""}render(){return J`<div class="typeMobile-list">
|
|
2521
2521
|
<ul>
|
|
2522
|
-
${this.renderListElement(this.onClickEmailOption,Pi)}
|
|
2523
|
-
${this.renderListElement(this.onClickPhoneOption,Mi)}
|
|
2524
|
-
${this.renderListElement(this.onClickSSTOption,_i)}
|
|
2525
|
-
${this.
|
|
2522
|
+
${this.renderListElement(this.hasEmailEnabled,this.onClickEmailOption,Pi)}
|
|
2523
|
+
${this.renderListElement(this.hasCallUsEnabled,this.onClickPhoneOption,Mi)}
|
|
2524
|
+
${this.renderListElement(this.hasSSTEnabled,this.onClickSSTOption,_i)}
|
|
2525
|
+
${this.renderListElement(this.hasChatEnabled&&!this.hideChat,this.onChatTapped,qi)}
|
|
2526
2526
|
${this.isMobile||this.hideChat?"":J`
|
|
2527
2527
|
<minimize-expand-button
|
|
2528
2528
|
.onClick=${this.onClickMinimize}
|
|
@@ -2531,7 +2531,7 @@ var e={8005:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){retur
|
|
|
2531
2531
|
></minimize-expand-button>
|
|
2532
2532
|
`}
|
|
2533
2533
|
</ul>
|
|
2534
|
-
</div>`}};Vi.styles=[Qi],zi([de({attribute:!0})],Vi.prototype,"onClickMinimize",void 0),zi([de({attribute:!0})],Vi.prototype,"onClickEmailOption",void 0),zi([de({attribute:!0})],Vi.prototype,"onClickPhoneOption",void 0),zi([de({attribute:!0})],Vi.prototype,"onClickSSTOption",void 0),zi([de({attribute:!0})],Vi.prototype,"onChatTapped",void 0),zi([de({attribute:!0})],Vi.prototype,"hideChat",void 0),zi([de({attribute:!0})],Vi.prototype,"isMobile",void 0),zi([de({attribute:!0})],Vi.prototype,"brandColor",void 0),Vi=zi([ue("mobile-launcher")],Vi);var Xi=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a};let Yi=class extends ae{constructor(){super(...arguments),this.isMobile=!1,this.isMinimized=!1,this.isFirstMount=!1,this.backgroundColor="rgba(255, 255, 255, 0.75)",this.textColor="#202020",this.isMini=!0,this.autoOpenChatWidget=!1,this.phoneNumber="",this.chatId="",this.chatCallUsHeader="",this.buildingId=0,this.buildingSlug="",this.orgSlug="",this.sgtUrl="",this.buildingABTestType="",this.featureFlagShowDropdown="",this.leadSources=[],this.currentLeadSource="",this.escortedToursLink="",this.virtualToursLink="",this.hasCallUsEnabled=!1,this.hasChatEnabled=!1,this.hasEmailEnabled=!1,this.hasSSTEnabled=!1,this.hasTextUsEnabled=!1,this.layoutOptions=[],this.unitOptions=[],this.tourTypeOptions=[],this.onChatTapped=()=>{},this.onClickMinimize=()=>{},this.launcherStyles={},this.brandColor=ri,this.isEmailWindowOpen=!1,this.isCallUsWindowOpen=!1,this.isSSTWindowOpen=!1,this.isTextUsWindowOpen=!1,this.getNumCallToActions=()=>[this.hasEmailEnabled,!!this.phoneNumber&&this.hasCallUsEnabled,this.hasSSTEnabled,this.hasTextUsEnabled].filter((e=>e)).length,this.emailUsWindowRef=Oe(),this.textUsWindowRef=Oe(),this.tourSchedulerRef=Oe(),this.updated=async()=>{if(this.attachOnClickToEmailUsWindow(),this.attachOnClickToTextUsWindow(),this.attachOnClickToSSTWindow(),this.buildingId){const e=await(async e=>{if(Wi[e])return Wi[e];const n=`https://app.meetelise.com/sms_management_numbers/webchat/building/${e}/numbers`,i=await t().get(n);return Wi[e]=i.data,i.data})(this.buildingId);this.hasTextUsEnabled=e.length>0&&this.hasTextUsEnabled&&4895!==this.buildingId,await async function(e){return!!e}(this.buildingId)&&this.hasSSTEnabled&&(this.hasSSTEnabled=!0)}},this.attachOnClickToEmailUsWindow=()=>{const e=this.emailUsWindowRef.value;e&&(e.onCloseClicked=this.onCloseEmailWindow)},this.attachOnClickToTextUsWindow=()=>{const e=this.textUsWindowRef.value;e&&(e.onCloseClicked=this.onCloseTextUsWindow)},this.attachOnClickToSSTWindow=()=>{const e=this.tourSchedulerRef.value;e&&(e.onCloseClicked=this.onCloseSSTWindow)},this.onClickEmailOption=e=>{e.preventDefault(),e.stopPropagation(),this.isEmailWindowOpen=!0},this.onCloseEmailWindow=()=>{this.isEmailWindowOpen=!1},this.renderEmailOption=()=>{const e=this.getNumCallToActions()>2?"Email":"Email us";return J`
|
|
2534
|
+
</div>`}};Vi.styles=[Qi],zi([de({attribute:!0})],Vi.prototype,"onClickMinimize",void 0),zi([de({attribute:!0})],Vi.prototype,"onClickEmailOption",void 0),zi([de({attribute:!0})],Vi.prototype,"onClickPhoneOption",void 0),zi([de({attribute:!0})],Vi.prototype,"onClickSSTOption",void 0),zi([de({attribute:!0})],Vi.prototype,"onChatTapped",void 0),zi([de({attribute:!0})],Vi.prototype,"hideChat",void 0),zi([de({attribute:!0})],Vi.prototype,"isMobile",void 0),zi([de({attribute:!0})],Vi.prototype,"brandColor",void 0),zi([de({attribute:!0})],Vi.prototype,"hasChatEnabled",void 0),zi([de({attribute:!0})],Vi.prototype,"hasEmailEnabled",void 0),zi([de({attribute:!0})],Vi.prototype,"hasCallUsEnabled",void 0),zi([de({attribute:!0})],Vi.prototype,"hasSSTEnabled",void 0),Vi=zi([ue("mobile-launcher")],Vi);var Xi=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a};let Yi=class extends ae{constructor(){super(...arguments),this.isMobile=!1,this.isMinimized=!1,this.isFirstMount=!1,this.backgroundColor="rgba(255, 255, 255, 0.75)",this.textColor="#202020",this.isMini=!0,this.autoOpenChatWidget=!1,this.phoneNumber="",this.chatId="",this.chatCallUsHeader="",this.buildingId=0,this.buildingSlug="",this.orgSlug="",this.sgtUrl="",this.buildingABTestType="",this.featureFlagShowDropdown="",this.leadSources=[],this.currentLeadSource="",this.escortedToursLink="",this.virtualToursLink="",this.hasCallUsEnabled=!1,this.hasChatEnabled=!1,this.hasEmailEnabled=!1,this.hasSSTEnabled=!1,this.hasTextUsEnabled=!1,this.layoutOptions=[],this.unitOptions=[],this.tourTypeOptions=[],this.onChatTapped=()=>{},this.onClickMinimize=()=>{},this.launcherStyles={},this.brandColor=ri,this.isEmailWindowOpen=!1,this.isCallUsWindowOpen=!1,this.isSSTWindowOpen=!1,this.isTextUsWindowOpen=!1,this.getNumCallToActions=()=>[this.hasEmailEnabled,!!this.phoneNumber&&this.hasCallUsEnabled,this.hasSSTEnabled,this.hasTextUsEnabled].filter((e=>e)).length,this.emailUsWindowRef=Oe(),this.textUsWindowRef=Oe(),this.tourSchedulerRef=Oe(),this.updated=async()=>{if(this.attachOnClickToEmailUsWindow(),this.attachOnClickToTextUsWindow(),this.attachOnClickToSSTWindow(),this.buildingId){const e=await(async e=>{if(Wi[e])return Wi[e];const n=`https://app.meetelise.com/sms_management_numbers/webchat/building/${e}/numbers`,i=await t().get(n);return Wi[e]=i.data,i.data})(this.buildingId);this.hasTextUsEnabled=e.length>0&&this.hasTextUsEnabled&&4895!==this.buildingId,await async function(e){return!!e}(this.buildingId)&&this.hasSSTEnabled&&(this.hasSSTEnabled=!0)}},this.attachOnClickToEmailUsWindow=()=>{const e=this.emailUsWindowRef.value;e&&(e.onCloseClicked=this.onCloseEmailWindow)},this.attachOnClickToTextUsWindow=()=>{const e=this.textUsWindowRef.value;e&&(e.onCloseClicked=this.onCloseTextUsWindow)},this.attachOnClickToSSTWindow=()=>{const e=this.tourSchedulerRef.value;e&&(e.onCloseClicked=this.onCloseSSTWindow)},this.onClickEmailOption=e=>{e.preventDefault(),e.stopPropagation(),this.isEmailWindowOpen=!0},this.onCloseEmailWindow=()=>{this.isEmailWindowOpen=!1},this.renderEmailOption=()=>{const e=this.getNumCallToActions()>2?"Email":"Email us";return J`
|
|
2535
2535
|
<div
|
|
2536
2536
|
@click=${this.onClickEmailOption}
|
|
2537
2537
|
class="launcher__call-to-action-option"
|
|
@@ -2576,6 +2576,10 @@ var e={8005:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){retur
|
|
|
2576
2576
|
.onChatTapped=${this.onChatTapped}
|
|
2577
2577
|
.isMobile=${this.isMobile}
|
|
2578
2578
|
.brandColor=${this.brandColor}
|
|
2579
|
+
.hasChatEnabled=${this.hasChatEnabled}
|
|
2580
|
+
.hasEmailEnabled=${this.hasEmailEnabled}
|
|
2581
|
+
.hasCallUsEnabled=${this.phoneNumber&&this.hasCallUsEnabled}
|
|
2582
|
+
.hasSSTEnabled=${this.hasSSTEnabled}
|
|
2579
2583
|
></mobile-launcher>`:this.buildingABTestType===pi.ConceptEmoji?J`
|
|
2580
2584
|
<div
|
|
2581
2585
|
class="type-hey__list"
|
|
@@ -2837,7 +2841,7 @@ var e={8005:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){retur
|
|
|
2837
2841
|
cursor: pointer;
|
|
2838
2842
|
filter: brightness(90%);
|
|
2839
2843
|
}
|
|
2840
|
-
`],pr([de({attribute:!0})],fr.prototype,"onClick",void 0),pr([de({attribute:!0})],fr.prototype,"brandColor",void 0),pr([de({attribute:!0})],fr.prototype,"toExpand",void 0),fr=pr([ue("minimize-expand-button")],fr);var hr,mr=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a};let vr=hr=class extends ae{constructor(){super(...arguments),this.buildingSlug="",this.orgSlug="",this.themeId="Glass",this.useMiniWidget=!0,this.launcherStyles={},this.isMinimized=!1,this.brandColor=null,this.popup=null,this.theme=ui({themeId:this.themeId,brandColor:this.brandColor}),this.chatId="",this.analytics=null,this.isMobile=r(),this.launcher=null,this.building=null,this.buildingABTestType=null,this.leadSources=null,this.currentLeadSource=null,this.featureFlagShowDropdown=Mn.always,this.phoneNumberForSource=null,this.hasMounted=!1,this.hideLauncher=!1,this.isLoading=!0,this.talkjsPopupElement=null,this.yardiDNIScriptInterval=null,this.launcherRef=Oe(),this.initializeInstanceVariables=async()=>{await this.setBuildingDerivedInfo(),await this.initializeLaunchJS(),this.attachOnClickToLauncher(),this.isLoading=!1
|
|
2844
|
+
`],pr([de({attribute:!0})],fr.prototype,"onClick",void 0),pr([de({attribute:!0})],fr.prototype,"brandColor",void 0),pr([de({attribute:!0})],fr.prototype,"toExpand",void 0),fr=pr([ue("minimize-expand-button")],fr);var hr,mr=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a};let vr=hr=class extends ae{constructor(){super(...arguments),this.buildingSlug="",this.orgSlug="",this.themeId="Glass",this.useMiniWidget=!0,this.launcherStyles={},this.isMinimized=!1,this.brandColor=null,this.popup=null,this.theme=ui({themeId:this.themeId,brandColor:this.brandColor}),this.chatId="",this.analytics=null,this.isMobile=r(),this.launcher=null,this.building=null,this.buildingABTestType=null,this.leadSources=null,this.currentLeadSource=null,this.featureFlagShowDropdown=Mn.always,this.phoneNumberForSource=null,this.hasMounted=!1,this.hideLauncher=!1,this.isLoading=!0,this.talkjsPopupElement=null,this.yardiDNIScriptInterval=null,this.launcherRef=Oe(),this.initializeInstanceVariables=async()=>{await this.setBuildingDerivedInfo(),await this.initializeLaunchJS(),this.attachOnClickToLauncher(),this.isLoading=!1},this.setBuildingDerivedInfo=async()=>{var e,n,i,r;if(!this.buildingSlug||!this.orgSlug)return;const[o,a,s,u,l,d,c]=await Promise.all([di(this.orgSlug,this.buildingSlug),fi(this.buildingSlug),cr(this.buildingSlug),hi(this.buildingSlug,document.referrer),Pn(this.buildingSlug),Dn(this.buildingSlug),ci(this.buildingSlug)]);o.phoneNumber=Fe(o.phoneNumber),this.building=o,this.buildingABTestType=null!==(e=null==a?void 0:a.abTestType)&&void 0!==e?e:"",this.leadSources=s,this.currentLeadSource=u,this.featureFlagShowDropdown=l,c&&(null===this.brandColor&&(this.brandColor=null!==(n=c.primaryColor)&&void 0!==n?n:null),null===this.buildingABTestType&&(this.buildingABTestType=null!==(i=c.designConcept)&&void 0!==i?i:null)),null===this.brandColor&&(this.brandColor=ri);let p=null;d&&(p=await async function(e,n){try{const i=await t().get(`https://app.meetelise.com/platformApi/webchat/${e}/phone-number-by-source?source=${n}`);return i.data?{number:Fe(i.data.number),isMatch:i.data.isMatch,isPropertyWebsiteCatchall:i.data.isPropertyWebsiteCatchall}:null}catch(e){return null}}(this.buildingSlug,this.currentLeadSource)),this.phoneNumberForSource=p||{number:this.building.phoneNumber,isMatch:!1,isPropertyWebsiteCatchall:!0},this.currentLeadSource&&(this.leadSources.includes(this.currentLeadSource)||this.leadSources.push(this.currentLeadSource)),An(this.building.id),this.chatId=function(e,t){const n=ei(e,t),i=localStorage.getItem(n);return i&&!function(e,t){const n=ti(e,t),i=localStorage.getItem(n)||$n(e,t),r=new Date(new Date(i).getTime()+216e5);return new Date>r}(e,t)?i:Zn(e,t)}(this.orgSlug,this.buildingSlug),this.avatarSrc=this.avatarSrc||this.building.avatarSrc,this.theme=ui({themeId:null!==(r=this.themeId)&&void 0!==r?r:this.building.themeId,brandColor:this.brandColor}),this.analytics=new jn(this.orgSlug,this.buildingSlug,this.chatId),this.analytics.ping("webchat_heartbeat")},this.initializeLaunchJS=async()=>{var e;if(!this.building||!this.theme)return;if(this.popup&&this.launcher)return;const[t,n,i,r]=await Promise.all([this.building,this.theme,this.avatarSrc,hr.session]);if(t.conversationMaintenanceMode)return new Promise((()=>{console.warn("MeetElise Chat is in maintenance mode. Chat icon will not appear.")}));await this.configureTalkJSPopup(t,n,r,i),this.configureLauncherElement(),null===(e=this.analytics)||void 0===e||e.ping("load"),this.yardiDNIScriptInterval=setInterval((()=>this.pollForYardiCampaignSource()),1e3),setTimeout(clearInterval,15e3,this.yardiDNIScriptInterval)},this.configureLauncherElement=()=>{this.popup&&this.launcherRef.value&&(this.launcher=this.launcherRef.value)},this.configureTalkJSPopup=async(e,t,n,i)=>{var o;const a=n.createPopup(li(n,e,t,i||e.avatarSrc,this.chatId,this.isMobile),{launcher:"never",showCloseInHeader:!0,messageField:{placeholder:"Ask a question..."}});await a.mount({show:!1}),a.on("close",(()=>{this.hideLauncher=!1}));const s=document.querySelector(".__talkjs_popup");if(this.talkjsPopupElement=s,!s)throw new Error("Failed to find chat window");s.classList.add("meetelise-chat","pane"),this.isMobile||s.classList.add("launcher__desktop"),s.style.zIndex="99999999999",this.popup=a;const u=sessionStorage.getItem("autoOpenedTimestamp"),l=!u||u&&an(un(u));e.autoOpenChatWidget&&l&&!r()&&(this.popup.show(),this.hideLauncher=!0,this.hasMounted=!0,sessionStorage.setItem("autoOpenedTimestamp",tn(function(e,t){Ue(2,arguments);var n=et(t);return tt(e,6e4*n)}(new Date,15))),null===(o=this.analytics)||void 0===o||o.ping("autoOpen"))},this.firstUpdated=()=>{this.initializeInstanceVariables()},this.handleContactClicked=e=>{var t,n;null===(t=this.popup)||void 0===t||t.hide(),this.hideLauncher=!1,null===(n=this.launcherRef.value)||void 0===n||n.onClickEmailOption(e)},this.handleTourClicked=e=>{var t,n;null===(t=this.popup)||void 0===t||t.hide(),this.hideLauncher=!1,null===(n=this.launcherRef.value)||void 0===n||n.onClickSSTOption(e)},this.handleContactTabClicked=e=>{var t,n;null===(t=this.popup)||void 0===t||t.hide(),this.hideLauncher=!1,null===(n=this.launcherRef.value)||void 0===n||n.onClickPhoneOption(e)},this.adjustTopHeaderContactCoords=()=>{var e;if(this.talkjsPopupElement){const t=this.talkjsPopupElement.getBoundingClientRect(),n=null===(e=this.shadowRoot)||void 0===e?void 0:e.getElementById("chatAdditionalActions");if(!n)return;n.style.left=`${t.left+20}px`,n.style.top=t.bottom-24+"px"}},this.onClickMinimize=e=>{e.preventDefault(),e.stopPropagation(),this.isMinimized=!this.isMinimized},this.attachOnClickToLauncher=()=>{const e=this.launcherRef.value;e&&(e.onChatTapped=async()=>{var e;this.popup&&(this.popup.show(),null===(e=this.analytics)||void 0===e||e.ping("open"),this.hideLauncher=!0,this.hasMounted=!0)})}}pollForYardiCampaignSource(){var e,t,n;(null===(t=null===(e=window.RCTPCampaign)||void 0===e?void 0:e.CampaignDetails)||void 0===t?void 0:t.Source)&&(null===(n=this.analytics)||void 0===n||n.ping("yardi-DNI-init"),this.yardiDNIScriptInterval&&clearInterval(this.yardiDNIScriptInterval))}async restartConversation(){if(!(this.analytics&&this.analytics.chatId&&this.building&&this.popup&&hr.session))return;this.chatId=Zn(this.orgSlug,this.buildingSlug);const e=await hr.session;this.analytics.chatId=this.chatId,this.popup.select(li(e,this.building,this.theme,this.avatarSrc||this.building.avatarSrc,this.chatId,this.isMobile))}remove(){var e;null===(e=this.popup)||void 0===e||e.destroy()}open(){var e;null===(e=this.popup)||void 0===e||e.show()}close(){var e;null===(e=this.popup)||void 0===e||e.hide()}show(){this.launcher&&(this.launcher.style.display="")}hide(){this.launcher&&(this.launcher.style.display="none")}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.adjustTopHeaderContactCoords)}disconnectedCallback(){window.removeEventListener("resize",this.adjustTopHeaderContactCoords),super.disconnectedCallback()}updated(){this.adjustTopHeaderContactCoords()}render(){var e,t,n,i,r,o,a,s,u,l,d,c,p,f,h,m,v,g,y,b,w,S,T,A,x,O,C,I,N,R,E,F,_,M,P,D,q,U,B,k,L,j;window.customElements.get("meetelise-launcher")||window.customElements.define("meetelise-launcher",Yi);const H=this.hideLauncher&&!this.isLoading&&!this.isMobile;return J`
|
|
2841
2845
|
<meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=1">
|
|
2842
2846
|
<div id="aria-describe-info" style="display: none;">
|
|
2843
2847
|
EliseAI widget that allows you to chat with a virtual assistant, book
|
|
@@ -2886,7 +2890,7 @@ var e={8005:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){retur
|
|
|
2886
2890
|
</div>
|
|
2887
2891
|
<div
|
|
2888
2892
|
id="chatAdditionalActions"
|
|
2889
|
-
class=${ve({showTab:
|
|
2893
|
+
class=${ve({showTab:H,hideTab:!H})}
|
|
2890
2894
|
>
|
|
2891
2895
|
<mobile-launcher
|
|
2892
2896
|
.onClickMinimize=${this.onClickMinimize}
|
|
@@ -2896,6 +2900,10 @@ var e={8005:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){retur
|
|
|
2896
2900
|
.isMobile=${this.isMobile}
|
|
2897
2901
|
.brandColor=${this.brandColor}
|
|
2898
2902
|
.hideChat=${!0}
|
|
2903
|
+
.hasChatEnabled=${!(null===(P=this.building)||void 0===P?void 0:P.chatWidgets)||(null===(D=this.building)||void 0===D?void 0:D.chatWidgets.includes("CHAT"))}
|
|
2904
|
+
.hasEmailEnabled=${!(null===(q=this.building)||void 0===q?void 0:q.chatWidgets)||(null===(U=this.building)||void 0===U?void 0:U.chatWidgets.includes("EMAIL"))}
|
|
2905
|
+
.hasCallUsEnabled=${!(null===(B=this.building)||void 0===B?void 0:B.chatWidgets)||(null===(k=this.building)||void 0===k?void 0:k.chatWidgets.includes("CALL"))}
|
|
2906
|
+
.hasSSTEnabled=${!(null===(L=this.building)||void 0===L?void 0:L.chatWidgets)||(null===(j=this.building)||void 0===j?void 0:j.chatWidgets.includes("SST"))}
|
|
2899
2907
|
></mobile-launcher>
|
|
2900
2908
|
<minimize-expand-button
|
|
2901
2909
|
.brandColor=${this.brandColor}
|
|
@@ -2948,4 +2956,4 @@ var e={8005:function(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){retur
|
|
|
2948
2956
|
border-bottom: 22px solid transparent;
|
|
2949
2957
|
border-right: 30px solid black;
|
|
2950
2958
|
}
|
|
2951
|
-
`,vr.session=Re.ready.then((()=>{const e=new Re.User({id:"anonymous",name:"Me",email:null,role:"Default"});return new Re.Session({appId:"ogKIvCor",me:e})})),mr([de({type:String})],vr.prototype,"buildingSlug",void 0),mr([de({type:String})],vr.prototype,"orgSlug",void 0),mr([de({type:String})],vr.prototype,"themeId",void 0),mr([de({attribute:!1})],vr.prototype,"avatarSrc",void 0),mr([de({type:Boolean})],vr.prototype,"useMiniWidget",void 0),mr([de({type:Object})],vr.prototype,"launcherStyles",void 0),mr([de({type:Boolean})],vr.prototype,"isMinimized",void 0),mr([de({type:String})],vr.prototype,"brandColor",void 0),mr([ce()],vr.prototype,"popup",void 0),mr([ce()],vr.prototype,"theme",void 0),mr([ce()],vr.prototype,"chatId",void 0),mr([ce()],vr.prototype,"analytics",void 0),mr([ce()],vr.prototype,"isMobile",void 0),mr([ce()],vr.prototype,"launcher",void 0),mr([ce()],vr.prototype,"building",void 0),mr([ce()],vr.prototype,"buildingABTestType",void 0),mr([ce()],vr.prototype,"leadSources",void 0),mr([ce()],vr.prototype,"currentLeadSource",void 0),mr([ce()],vr.prototype,"featureFlagShowDropdown",void 0),mr([ce()],vr.prototype,"phoneNumberForSource",void 0),mr([ce()],vr.prototype,"hasMounted",void 0),mr([ce()],vr.prototype,"hideLauncher",void 0),mr([ce()],vr.prototype,"isLoading",void 0),mr([ce()],vr.prototype,"talkjsPopupElement",void 0),vr=hr=mr([ue("me-chat")],vr);class gr{static start(e,t=!0){if(window.location.pathname.includes("residentservices")||window.location.pathname.includes("onlineleasing"))return;t&&(this.orgSlug=e.organization,this.hasBuildingSlug=!!e.building),yr(),br();const n=document.createElement("me-chat");n.setAttribute("orgSlug",e.organization),this.handleBuildingslug(n,e.building),n.setAttribute("class","meetelise-chat"),n.setAttribute("role","dialog"),n.setAttribute("aria-label","EliseAI Widget"),n.setAttribute("aria-describedby","aria-describe-info"),n.setAttribute("aria-modal","true"),e.themeId&&n.setAttribute("themeId",e.themeId),e.avatarSrc&&n.setAttribute("avatarSrc",e.avatarSrc),void 0!==e.mini&&(n.useMiniWidget=e.mini),e.launcherStyles&&(n.launcherStyles=e.launcherStyles),e.brandColor&&(this.brandColor=e.brandColor,n.setAttribute("brandColor",((e,t)=>{const n=(r=e,{r:parseInt(r.substring(1,3),16),g:parseInt(r.substring(3,5),16),b:parseInt(r.substring(5,7),16)}),i={r:n.r+Math.round(.3*(0-n.r)),g:n.g+Math.round(.3*(0-n.g)),b:n.b+Math.round(.3*(0-n.b))};var r;return((e,t,n)=>"#"+[e,t,n].map((e=>{const t=e.toString(16);return 1===t.length?"0"+t:t})).join(""))(i.r,i.g,i.b)})(e.brandColor))),document.body.appendChild(n),gr.meChat=n}static async restartConversation(){this.meChat&&await this.meChat.restartConversation()}static async remove(){this.meChat&&(await this.meChat.remove(),document.body.removeChild(this.meChat),gr.meChat=null)}static async handleBuildingslug(e,t){t?e.setAttribute("buildingSlug",t):this.mutationObserver||(this.handleSingleFamilyUrl(),this.previousUrl=window.location.href,document.body.addEventListener("click",(()=>{requestAnimationFrame((()=>{this.previousUrl===window.location.href||this.hasBuildingSlug||(this.previousUrl=window.location.href,this.handleSingleFamilyUrl())}))}),!0))}static async handleSingleFamilyUrl(){if(this.hasBuildingSlug)return;this.remove();const e=window.location.href,n=`https://app.meetelise.com/platformApi/webchat/microsite_slug?uri=${encodeURIComponent(e)}`,i=await t().get(n,{headers:{"org-slug":this.orgSlug}});if(!i||!i.data)return;const r={organization:this.orgSlug,building:i.data,brandColor:this.brandColor};this.start(r,!1)}}gr.meChat=null,gr.orgSlug="",gr.mutationObserver=null,gr.previousUrl="",gr.hasBuildingSlug=null,gr.brandColor="";const yr=()=>{const e=document.createElement("link");e.setAttribute("rel","stylesheet"),e.setAttribute("type","text/css"),document.head.appendChild(e)},br=()=>{const e=document.createElement("meta");e.setAttribute("name","viewport"),e.setAttribute("content","width=device-width, initial-scale=1, maximum-scale=2"),document.head.appendChild(e)}})();var r=i.Z;export{r as default};
|
|
2959
|
+
`,vr.session=Re.ready.then((()=>{const e=new Re.User({id:"anonymous",name:"Me",email:null,role:"Default"});return new Re.Session({appId:"ogKIvCor",me:e})})),mr([de({type:String})],vr.prototype,"buildingSlug",void 0),mr([de({type:String})],vr.prototype,"orgSlug",void 0),mr([de({type:String})],vr.prototype,"themeId",void 0),mr([de({attribute:!1})],vr.prototype,"avatarSrc",void 0),mr([de({type:Boolean})],vr.prototype,"useMiniWidget",void 0),mr([de({type:Object})],vr.prototype,"launcherStyles",void 0),mr([de({type:Boolean})],vr.prototype,"isMinimized",void 0),mr([de({type:String})],vr.prototype,"brandColor",void 0),mr([ce()],vr.prototype,"popup",void 0),mr([ce()],vr.prototype,"theme",void 0),mr([ce()],vr.prototype,"chatId",void 0),mr([ce()],vr.prototype,"analytics",void 0),mr([ce()],vr.prototype,"isMobile",void 0),mr([ce()],vr.prototype,"launcher",void 0),mr([ce()],vr.prototype,"building",void 0),mr([ce()],vr.prototype,"buildingABTestType",void 0),mr([ce()],vr.prototype,"leadSources",void 0),mr([ce()],vr.prototype,"currentLeadSource",void 0),mr([ce()],vr.prototype,"featureFlagShowDropdown",void 0),mr([ce()],vr.prototype,"phoneNumberForSource",void 0),mr([ce()],vr.prototype,"hasMounted",void 0),mr([ce()],vr.prototype,"hideLauncher",void 0),mr([ce()],vr.prototype,"isLoading",void 0),mr([ce()],vr.prototype,"talkjsPopupElement",void 0),vr=hr=mr([ue("me-chat")],vr);class gr{static start(e,t=!0){if(window.location.pathname.includes("residentservices")||window.location.pathname.includes("onlineleasing"))return;t&&(this.orgSlug=e.organization,this.hasBuildingSlug=!!e.building),yr(),br();const n=document.createElement("me-chat");n.setAttribute("orgSlug",e.organization),this.handleBuildingslug(n,e.building),n.setAttribute("class","meetelise-chat"),n.setAttribute("role","dialog"),n.setAttribute("aria-label","EliseAI Widget"),n.setAttribute("aria-describedby","aria-describe-info"),n.setAttribute("aria-modal","true"),e.themeId&&n.setAttribute("themeId",e.themeId),e.avatarSrc&&n.setAttribute("avatarSrc",e.avatarSrc),void 0!==e.mini&&(n.useMiniWidget=e.mini),e.launcherStyles&&(n.launcherStyles=e.launcherStyles),e.brandColor&&(this.brandColor=e.brandColor,n.setAttribute("brandColor",((e,t)=>{const n=(r=e,{r:parseInt(r.substring(1,3),16),g:parseInt(r.substring(3,5),16),b:parseInt(r.substring(5,7),16)}),i={r:n.r+Math.round(.3*(0-n.r)),g:n.g+Math.round(.3*(0-n.g)),b:n.b+Math.round(.3*(0-n.b))};var r;return((e,t,n)=>"#"+[e,t,n].map((e=>{const t=e.toString(16);return 1===t.length?"0"+t:t})).join(""))(i.r,i.g,i.b)})(e.brandColor))),document.body.appendChild(n),gr.meChat=n,e.building&&e.organization&&wr(e.organization,e.building)}static async restartConversation(){this.meChat&&await this.meChat.restartConversation()}static async remove(){this.meChat&&(await this.meChat.remove(),document.body.removeChild(this.meChat),gr.meChat=null)}static async handleBuildingslug(e,t){t?e.setAttribute("buildingSlug",t):this.mutationObserver||(this.handleSingleFamilyUrl(),this.previousUrl=window.location.href,document.body.addEventListener("click",(()=>{requestAnimationFrame((()=>{this.previousUrl===window.location.href||this.hasBuildingSlug||(this.previousUrl=window.location.href,this.handleSingleFamilyUrl())}))}),!0))}static async handleSingleFamilyUrl(){if(this.hasBuildingSlug)return;this.remove();const e=window.location.href,n=`https://app.meetelise.com/platformApi/webchat/microsite_slug?uri=${encodeURIComponent(e)}`,i=await t().get(n,{headers:{"org-slug":this.orgSlug}});if(!i||!i.data)return;const r={organization:this.orgSlug,building:i.data,brandColor:this.brandColor};this.start(r,!1)}}gr.meChat=null,gr.orgSlug="",gr.mutationObserver=null,gr.previousUrl="",gr.hasBuildingSlug=null,gr.brandColor="";const yr=()=>{const e=document.createElement("link");e.setAttribute("rel","stylesheet"),e.setAttribute("type","text/css"),document.head.appendChild(e)},br=()=>{const e=document.createElement("meta");e.setAttribute("name","viewport"),e.setAttribute("content","width=device-width, initial-scale=1, maximum-scale=2"),document.head.appendChild(e)},wr=async(e,n)=>{var i;if("true"!==localStorage.getItem("overrideContactUsForm"))return;const r=await async function(e){try{return(await t().get(_n(e),{params:{building_slug:e,flag_type:"bool",feature_flag:"webchat-use-override-contact-us-form",default_str:null,default_bool:!1}})).data}catch(e){return!1}}(n);if(!r)return;const o=document.getElementById("myContactForm");let a;if(!(o&&o instanceof HTMLFormElement))return void(window.location.pathname.toLowerCase().includes("contactus")&&Sr(n,e,"Could not find form"));for(let e=0;e<o.elements.length;e++){const t=o.elements[e];if("button"===t.tagName.toLowerCase()&&"fakebutton"===t.getAttribute("data-selenium-id")){a=t;break}}if(!a)return Sr(n,e,"Could not find submit button");const s=()=>({firstName:document.getElementById("firstname"),lastName:document.getElementById("lastname"),email:document.getElementById("email"),phone:document.getElementById("phonenumber"),message:document.getElementById("message")});if(Object.values(s()).some((e=>null===e))){const t=Object.entries(s()).filter((([,e])=>null===e)).map((([e])=>e));return Sr(n,e,"Missing the following form elements: "+t.join(", "))}const u=a.cloneNode(!0);null===(i=a.parentNode)||void 0===i||i.replaceChild(u,a),u.textContent="Elise Submit",u.onclick=async function(t){if(!Object.values(s()).every((t=>null!==t&&(null===t.getAttribute("aria-invalid")&&Sr(n,e,"Missing aria-invalid attribute on "+t.id),"true"!==t.getAttribute("aria-invalid")))))return;t.preventDefault();const i={};Object.entries(s()).forEach((([e,t])=>i[e]=null==t?void 0:t.value));const r=await di(e,n),a=await hi(n,document.referrer);if(!r)return Sr(n,e,"Could not find building"),null;const l={email_address:i.email,first_name:i.firstName,last_name:i.lastName,phone_number:i.phone,first_message:i.message,building_id:r.id,is_external_form:!0,lead_sources:[...new Set(a?[a,"property-website"]:["property-website"])]},d=JSON.stringify(l);fetch("https://app.meetelise.com/platformApi/state/create/contactMe",{method:"POST",headers:{"Content-Type":"application/json","building-slug":n,"org-slug":e},body:d}).then((e=>{if(!e.ok)throw new Error(`HTTP error ${e.status}`);return o.reset(),Object.values(s()).forEach((e=>{e&&(e.disabled=!0)})),u.textContent="Submitted",u.disabled=!0,e.json()}))}},Sr=(e,t,n)=>{const i=JSON.stringify({orgSlug:t,buildingSlug:e,reason:n});fetch("https://app.meetelise.com/platformApi/webchat/form-override-error",{method:"POST",headers:{"Content-Type":"application/json","building-slug":e,"org-slug":t},body:i})}})();var r=i.Z;export{r as default};
|
package/src/MEChat.ts
CHANGED
|
@@ -4,6 +4,9 @@ import { ThemeIdString } from "./themes";
|
|
|
4
4
|
import { tintColor } from "./utils";
|
|
5
5
|
import "./WebComponent/me-chat";
|
|
6
6
|
import { MEChat as MEChatLitElement } from "./WebComponent/me-chat";
|
|
7
|
+
import fetchBuildingInfo from "./fetchBuildingInfo";
|
|
8
|
+
import { fetchFeatureFlagUseOverrideContactUsForm } from "./fetchFeatureFlag";
|
|
9
|
+
import fetchCurrentParsedLeadSource from "./fetchCurrentParsedLeadSource";
|
|
7
10
|
|
|
8
11
|
/**
|
|
9
12
|
* The interface to MeetElise chat.
|
|
@@ -68,6 +71,10 @@ export default class MEChat {
|
|
|
68
71
|
}
|
|
69
72
|
document.body.appendChild(meChat);
|
|
70
73
|
MEChat.meChat = meChat;
|
|
74
|
+
|
|
75
|
+
if (opts.building && opts.organization) {
|
|
76
|
+
overrideContactUsForm(opts.organization, opts.building);
|
|
77
|
+
}
|
|
71
78
|
}
|
|
72
79
|
|
|
73
80
|
static async restartConversation(): Promise<void> {
|
|
@@ -171,3 +178,195 @@ const installTalkjsMobileStyleFix = () => {
|
|
|
171
178
|
);
|
|
172
179
|
document.head.appendChild(metaTag);
|
|
173
180
|
};
|
|
181
|
+
|
|
182
|
+
const overrideContactUsForm = async (
|
|
183
|
+
orgSlug: string,
|
|
184
|
+
buildingSlug: string
|
|
185
|
+
): Promise<void> => {
|
|
186
|
+
// TODO: Remove after testing in production
|
|
187
|
+
if (localStorage.getItem("overrideContactUsForm") !== "true") return;
|
|
188
|
+
const shouldUseOverrideContactUsForm =
|
|
189
|
+
await fetchFeatureFlagUseOverrideContactUsForm(buildingSlug);
|
|
190
|
+
if (!shouldUseOverrideContactUsForm) return;
|
|
191
|
+
|
|
192
|
+
const form = document.getElementById(
|
|
193
|
+
"myContactForm"
|
|
194
|
+
) as HTMLFormElement | null;
|
|
195
|
+
let btn = undefined;
|
|
196
|
+
|
|
197
|
+
if (!form || !(form instanceof HTMLFormElement)) {
|
|
198
|
+
if (window.location.pathname.toLowerCase().includes("contactus")) {
|
|
199
|
+
logContactUsFormError(buildingSlug, orgSlug, "Could not find form");
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Loop through the elements of the form
|
|
205
|
+
for (let i = 0; i < form.elements.length; i++) {
|
|
206
|
+
const element = form.elements[i];
|
|
207
|
+
if (
|
|
208
|
+
element.tagName.toLowerCase() === "button" &&
|
|
209
|
+
element.getAttribute("data-selenium-id") === "fakebutton"
|
|
210
|
+
) {
|
|
211
|
+
btn = element;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (!btn) {
|
|
217
|
+
return logContactUsFormError(
|
|
218
|
+
buildingSlug,
|
|
219
|
+
orgSlug,
|
|
220
|
+
"Could not find submit button"
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const eliseUrl =
|
|
225
|
+
"https://app.meetelise.com/platformApi/state/create/contactMe";
|
|
226
|
+
|
|
227
|
+
const getFormElements = () => {
|
|
228
|
+
const firstName = document.getElementById(
|
|
229
|
+
"firstname"
|
|
230
|
+
) as HTMLInputElement | null;
|
|
231
|
+
const lastName = document.getElementById(
|
|
232
|
+
"lastname"
|
|
233
|
+
) as HTMLInputElement | null;
|
|
234
|
+
const email = document.getElementById("email") as HTMLInputElement | null;
|
|
235
|
+
const phone = document.getElementById(
|
|
236
|
+
"phonenumber"
|
|
237
|
+
) as HTMLInputElement | null;
|
|
238
|
+
const message = document.getElementById(
|
|
239
|
+
"message"
|
|
240
|
+
) as HTMLTextAreaElement | null;
|
|
241
|
+
|
|
242
|
+
const formElements = { firstName, lastName, email, phone, message };
|
|
243
|
+
|
|
244
|
+
return formElements;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
const isMissingFormElements = () => {
|
|
248
|
+
if (Object.values(getFormElements()).some((el) => el === null)) {
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
return false;
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
const isValid = () => {
|
|
255
|
+
return Object.values(getFormElements()).every((el) => {
|
|
256
|
+
if (el === null) return false;
|
|
257
|
+
if (el.getAttribute("aria-invalid") === null) {
|
|
258
|
+
logContactUsFormError(
|
|
259
|
+
buildingSlug,
|
|
260
|
+
orgSlug,
|
|
261
|
+
"Missing aria-invalid attribute on " + el.id
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
return el.getAttribute("aria-invalid") !== "true";
|
|
265
|
+
});
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
if (isMissingFormElements()) {
|
|
269
|
+
const missingElements = Object.entries(getFormElements())
|
|
270
|
+
.filter(([, val]) => val === null)
|
|
271
|
+
.map(([key]) => key);
|
|
272
|
+
return logContactUsFormError(
|
|
273
|
+
buildingSlug,
|
|
274
|
+
orgSlug,
|
|
275
|
+
"Missing the following form elements: " + missingElements.join(", ")
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Replace the original form element with the cloned one
|
|
280
|
+
const clonedButton = btn.cloneNode(true) as HTMLButtonElement;
|
|
281
|
+
btn.parentNode?.replaceChild(clonedButton, btn);
|
|
282
|
+
|
|
283
|
+
// TODO: Remove after testing in production
|
|
284
|
+
clonedButton.textContent = "Elise Submit";
|
|
285
|
+
|
|
286
|
+
clonedButton.onclick = async function (event) {
|
|
287
|
+
if (!isValid()) return;
|
|
288
|
+
event.preventDefault();
|
|
289
|
+
|
|
290
|
+
const formValues: { [key: string]: string | undefined } = {};
|
|
291
|
+
Object.entries(getFormElements()).forEach(
|
|
292
|
+
([key, val]) => (formValues[key] = val?.value)
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
const building = await fetchBuildingInfo(orgSlug, buildingSlug);
|
|
296
|
+
const currentLeadSource = await fetchCurrentParsedLeadSource(
|
|
297
|
+
buildingSlug,
|
|
298
|
+
document.referrer
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
if (!building) {
|
|
302
|
+
logContactUsFormError(buildingSlug, orgSlug, "Could not find building");
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const data = {
|
|
307
|
+
email_address: formValues.email,
|
|
308
|
+
first_name: formValues.firstName,
|
|
309
|
+
last_name: formValues.lastName,
|
|
310
|
+
phone_number: formValues.phone,
|
|
311
|
+
first_message: formValues.message,
|
|
312
|
+
building_id: building.id,
|
|
313
|
+
is_external_form: true,
|
|
314
|
+
lead_sources: [
|
|
315
|
+
...new Set(
|
|
316
|
+
currentLeadSource
|
|
317
|
+
? [currentLeadSource, "property-website"]
|
|
318
|
+
: ["property-website"]
|
|
319
|
+
),
|
|
320
|
+
],
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
const jsonData = JSON.stringify(data);
|
|
324
|
+
|
|
325
|
+
fetch(eliseUrl, {
|
|
326
|
+
method: "POST",
|
|
327
|
+
headers: {
|
|
328
|
+
"Content-Type": "application/json",
|
|
329
|
+
"building-slug": buildingSlug,
|
|
330
|
+
"org-slug": orgSlug,
|
|
331
|
+
},
|
|
332
|
+
body: jsonData,
|
|
333
|
+
}).then((response) => {
|
|
334
|
+
if (!response.ok) {
|
|
335
|
+
throw new Error(`HTTP error ${response.status}`);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
form.reset();
|
|
339
|
+
Object.values(getFormElements()).forEach((el) => {
|
|
340
|
+
if (!el) return;
|
|
341
|
+
el.disabled = true;
|
|
342
|
+
});
|
|
343
|
+
clonedButton.textContent = "Submitted";
|
|
344
|
+
clonedButton.disabled = true;
|
|
345
|
+
|
|
346
|
+
return response.json();
|
|
347
|
+
});
|
|
348
|
+
};
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
const logContactUsFormError = (
|
|
352
|
+
buildingSlug: string,
|
|
353
|
+
orgSlug: string,
|
|
354
|
+
reason?: string
|
|
355
|
+
) => {
|
|
356
|
+
const url = `https://app.meetelise.com/platformApi/webchat/form-override-error`;
|
|
357
|
+
const body = JSON.stringify({
|
|
358
|
+
orgSlug,
|
|
359
|
+
buildingSlug,
|
|
360
|
+
reason,
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
fetch(url, {
|
|
364
|
+
method: "POST",
|
|
365
|
+
headers: {
|
|
366
|
+
"Content-Type": "application/json",
|
|
367
|
+
"building-slug": buildingSlug,
|
|
368
|
+
"org-slug": orgSlug,
|
|
369
|
+
},
|
|
370
|
+
body,
|
|
371
|
+
});
|
|
372
|
+
};
|
|
@@ -324,6 +324,10 @@ export class Launcher extends LitElement {
|
|
|
324
324
|
.onChatTapped=${this.onChatTapped}
|
|
325
325
|
.isMobile=${this.isMobile}
|
|
326
326
|
.brandColor=${this.brandColor}
|
|
327
|
+
.hasChatEnabled=${this.hasChatEnabled}
|
|
328
|
+
.hasEmailEnabled=${this.hasEmailEnabled}
|
|
329
|
+
.hasCallUsEnabled=${this.phoneNumber && this.hasCallUsEnabled}
|
|
330
|
+
.hasSSTEnabled=${this.hasSSTEnabled}
|
|
327
331
|
></mobile-launcher>`;
|
|
328
332
|
}
|
|
329
333
|
|
|
@@ -45,10 +45,26 @@ export class MobileLauncher extends LitElement {
|
|
|
45
45
|
@property({ attribute: true })
|
|
46
46
|
brandColor: string = defaultBrandColor;
|
|
47
47
|
|
|
48
|
+
@property({ attribute: true })
|
|
49
|
+
hasChatEnabled = false;
|
|
50
|
+
|
|
51
|
+
@property({ attribute: true })
|
|
52
|
+
hasEmailEnabled = false;
|
|
53
|
+
|
|
54
|
+
@property({ attribute: true })
|
|
55
|
+
hasCallUsEnabled = false;
|
|
56
|
+
|
|
57
|
+
@property({ attribute: true })
|
|
58
|
+
hasSSTEnabled = false;
|
|
59
|
+
|
|
48
60
|
private renderListElement = (
|
|
61
|
+
isEnabled: boolean,
|
|
49
62
|
onClick: (e: MouseEvent) => void,
|
|
50
63
|
icon: TemplateResult<2> // is an svg icon in lit
|
|
51
64
|
) => {
|
|
65
|
+
if (!isEnabled) {
|
|
66
|
+
return "";
|
|
67
|
+
}
|
|
52
68
|
return html` <li
|
|
53
69
|
@click=${onClick}
|
|
54
70
|
class="typeMobile-bttn"
|
|
@@ -66,20 +82,25 @@ export class MobileLauncher extends LitElement {
|
|
|
66
82
|
return html`<div class="typeMobile-list">
|
|
67
83
|
<ul>
|
|
68
84
|
${this.renderListElement(
|
|
85
|
+
this.hasEmailEnabled,
|
|
69
86
|
this.onClickEmailOption,
|
|
70
87
|
EmailBlackOutlineIcon
|
|
71
88
|
)}
|
|
72
89
|
${this.renderListElement(
|
|
90
|
+
this.hasCallUsEnabled,
|
|
73
91
|
this.onClickPhoneOption,
|
|
74
92
|
PhoneBlackOutlineIcon
|
|
75
93
|
)}
|
|
76
94
|
${this.renderListElement(
|
|
95
|
+
this.hasSSTEnabled,
|
|
77
96
|
this.onClickSSTOption,
|
|
78
97
|
BookTourBlackOutlineIcon
|
|
79
98
|
)}
|
|
80
|
-
${this.
|
|
81
|
-
|
|
82
|
-
|
|
99
|
+
${this.renderListElement(
|
|
100
|
+
this.hasChatEnabled && !this.hideChat, // hide chat if under talkjs popup
|
|
101
|
+
this.onChatTapped,
|
|
102
|
+
ChatBlackOutlineIcon
|
|
103
|
+
)}
|
|
83
104
|
${!this.isMobile && !this.hideChat
|
|
84
105
|
? html`
|
|
85
106
|
<minimize-expand-button
|
|
@@ -161,16 +161,6 @@ export class MEChat extends LitElement {
|
|
|
161
161
|
await this.initializeLaunchJS();
|
|
162
162
|
this.attachOnClickToLauncher();
|
|
163
163
|
this.isLoading = false;
|
|
164
|
-
if (localStorage.getItem("overrideContactUsForm") === "true") {
|
|
165
|
-
this
|
|
166
|
-
.overrideContactUsForm
|
|
167
|
-
// {
|
|
168
|
-
// orgSlug: this.orgSlug,
|
|
169
|
-
// buildingSlug: this.buildingSlug,
|
|
170
|
-
// buildingId: this.building?.id ?? null,
|
|
171
|
-
// }
|
|
172
|
-
();
|
|
173
|
-
}
|
|
174
164
|
};
|
|
175
165
|
|
|
176
166
|
setBuildingDerivedInfo = async (): Promise<void> => {
|
|
@@ -571,6 +561,26 @@ export class MEChat extends LitElement {
|
|
|
571
561
|
.isMobile=${this.isMobile}
|
|
572
562
|
.brandColor=${this.brandColor}
|
|
573
563
|
.hideChat=${true}
|
|
564
|
+
.hasChatEnabled=${
|
|
565
|
+
!this.building?.chatWidgets
|
|
566
|
+
? true
|
|
567
|
+
: this.building?.chatWidgets.includes("CHAT")
|
|
568
|
+
}
|
|
569
|
+
.hasEmailEnabled=${
|
|
570
|
+
!this.building?.chatWidgets
|
|
571
|
+
? true
|
|
572
|
+
: this.building?.chatWidgets.includes("EMAIL")
|
|
573
|
+
}
|
|
574
|
+
.hasCallUsEnabled=${
|
|
575
|
+
!this.building?.chatWidgets
|
|
576
|
+
? true
|
|
577
|
+
: this.building?.chatWidgets.includes("CALL")
|
|
578
|
+
}
|
|
579
|
+
.hasSSTEnabled=${
|
|
580
|
+
!this.building?.chatWidgets
|
|
581
|
+
? true
|
|
582
|
+
: this.building?.chatWidgets.includes("SST")
|
|
583
|
+
}
|
|
574
584
|
></mobile-launcher>
|
|
575
585
|
<minimize-expand-button
|
|
576
586
|
.brandColor=${this.brandColor}
|
|
@@ -601,147 +611,6 @@ export class MEChat extends LitElement {
|
|
|
601
611
|
this.hasMounted = true;
|
|
602
612
|
};
|
|
603
613
|
};
|
|
604
|
-
|
|
605
|
-
private overrideContactUsForm = (): // {
|
|
606
|
-
// orgSlug,
|
|
607
|
-
// buildingSlug,
|
|
608
|
-
// buildingId,
|
|
609
|
-
// }: {
|
|
610
|
-
// orgSlug: MEChat["orgSlug"];
|
|
611
|
-
// buildingSlug: MEChat["buildingSlug"];
|
|
612
|
-
// buildingId: Building["id"] | null;
|
|
613
|
-
// }
|
|
614
|
-
void => {
|
|
615
|
-
const form = document.getElementById(
|
|
616
|
-
"myContactForm"
|
|
617
|
-
) as HTMLFormElement | null;
|
|
618
|
-
let btn = undefined;
|
|
619
|
-
if (!form || !(form instanceof HTMLFormElement)) {
|
|
620
|
-
// TODO: Add log
|
|
621
|
-
// return console.log("No Contact Us Form Found");
|
|
622
|
-
return;
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
// Loop through the elements of the form
|
|
626
|
-
for (let i = 0; i < form.elements.length; i++) {
|
|
627
|
-
const element = form.elements[i];
|
|
628
|
-
if (
|
|
629
|
-
element.tagName.toLowerCase() === "button" &&
|
|
630
|
-
element.getAttribute("data-selenium-id") === "fakebutton"
|
|
631
|
-
) {
|
|
632
|
-
btn = element;
|
|
633
|
-
break;
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
if (!btn) {
|
|
638
|
-
// TODO: Add log
|
|
639
|
-
// return console.log('No button with data-selenium-id="fakebutton" found');
|
|
640
|
-
return;
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
// Replace the original form element with the cloned one
|
|
644
|
-
const clonedButton = btn.cloneNode(true) as HTMLButtonElement;
|
|
645
|
-
btn.parentNode?.replaceChild(clonedButton, btn);
|
|
646
|
-
//TODO: Remove textContent after testing
|
|
647
|
-
clonedButton.textContent = "Elise Submit";
|
|
648
|
-
|
|
649
|
-
const eliseUrl =
|
|
650
|
-
"https://app.meetelise.com/platformApi/state/create/contactMe";
|
|
651
|
-
|
|
652
|
-
const getFormElements = () => {
|
|
653
|
-
const firstName = document.getElementById(
|
|
654
|
-
"firstname"
|
|
655
|
-
) as HTMLInputElement | null;
|
|
656
|
-
const lastName = document.getElementById(
|
|
657
|
-
"lastname"
|
|
658
|
-
) as HTMLInputElement | null;
|
|
659
|
-
const email = document.getElementById("email") as HTMLInputElement | null;
|
|
660
|
-
const phone = document.getElementById(
|
|
661
|
-
"phonenumber"
|
|
662
|
-
) as HTMLInputElement | null;
|
|
663
|
-
const message = document.getElementById(
|
|
664
|
-
"message"
|
|
665
|
-
) as HTMLTextAreaElement | null;
|
|
666
|
-
|
|
667
|
-
const formElements = { firstName, lastName, email, phone, message };
|
|
668
|
-
|
|
669
|
-
if (Object.values(formElements).some((el) => el === null)) {
|
|
670
|
-
// console.log("Form is missing elements");
|
|
671
|
-
// TODO: Add logger to log that form scraper is boken on el.name in current route or buildingId
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
return formElements;
|
|
675
|
-
};
|
|
676
|
-
const getFormValues = () => {
|
|
677
|
-
const formValues: { [key: string]: string | undefined } = {};
|
|
678
|
-
Object.entries(getFormElements()).forEach(
|
|
679
|
-
([key, val]) => (formValues[key] = val?.value)
|
|
680
|
-
);
|
|
681
|
-
return formValues;
|
|
682
|
-
};
|
|
683
|
-
|
|
684
|
-
const isValid = () => {
|
|
685
|
-
return Object.values(getFormElements()).every((el) => {
|
|
686
|
-
if (el === null) return false;
|
|
687
|
-
//TODO: May need to not depend on aria-invalid
|
|
688
|
-
return el.getAttribute("aria-invalid") !== "true";
|
|
689
|
-
});
|
|
690
|
-
};
|
|
691
|
-
|
|
692
|
-
clonedButton.onclick = function (event) {
|
|
693
|
-
if (!isValid()) return;
|
|
694
|
-
event.preventDefault();
|
|
695
|
-
const formValues = getFormValues();
|
|
696
|
-
|
|
697
|
-
const data = {
|
|
698
|
-
email_address: formValues.email,
|
|
699
|
-
first_name: formValues.firstName,
|
|
700
|
-
last_name: formValues.lastName,
|
|
701
|
-
phone_number: formValues.phone,
|
|
702
|
-
first_message: formValues.message,
|
|
703
|
-
|
|
704
|
-
//TODO: Replace after testing is done
|
|
705
|
-
building_id: 3660,
|
|
706
|
-
};
|
|
707
|
-
|
|
708
|
-
// Convert the data object to a JSON string
|
|
709
|
-
const jsonData = JSON.stringify(data);
|
|
710
|
-
|
|
711
|
-
fetch(eliseUrl, {
|
|
712
|
-
method: "POST",
|
|
713
|
-
headers: {
|
|
714
|
-
"Content-Type": "application/json",
|
|
715
|
-
"building-slug": "e2e-test-yardi-building",
|
|
716
|
-
"org-slug": "test-company",
|
|
717
|
-
//TODO: Replace org and building slugs
|
|
718
|
-
},
|
|
719
|
-
body: jsonData,
|
|
720
|
-
}).then((response) => {
|
|
721
|
-
// TODO: What's needed here?
|
|
722
|
-
// console.log(response);
|
|
723
|
-
// Check if the request was successful
|
|
724
|
-
if (!response.ok) {
|
|
725
|
-
throw new Error(`HTTP error ${response.status}`);
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
form.reset();
|
|
729
|
-
|
|
730
|
-
// Parse the response as JSON
|
|
731
|
-
return response.json();
|
|
732
|
-
});
|
|
733
|
-
// .then((responseData) => {
|
|
734
|
-
// // Handle the JSON response data
|
|
735
|
-
// // TODO: What's needed here?
|
|
736
|
-
// // console.log("Response data:", responseData);
|
|
737
|
-
// })
|
|
738
|
-
// .catch((error) => {
|
|
739
|
-
// // Handle any errors that occurred during the request
|
|
740
|
-
// // TODO: What's needed here?
|
|
741
|
-
// // console.error("Error:", error);
|
|
742
|
-
// });
|
|
743
|
-
};
|
|
744
|
-
};
|
|
745
614
|
}
|
|
746
615
|
|
|
747
616
|
declare global {
|
package/src/fetchFeatureFlag.ts
CHANGED
|
@@ -60,3 +60,25 @@ export async function fetchFeatureFlagUsePhoneNumberBySource(
|
|
|
60
60
|
return false;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
+
|
|
64
|
+
export async function fetchFeatureFlagUseOverrideContactUsForm(
|
|
65
|
+
buildingSlug: string
|
|
66
|
+
): Promise<boolean> {
|
|
67
|
+
try {
|
|
68
|
+
const featureFlagResponse = await axios.get(
|
|
69
|
+
featureFlagEndpoint(buildingSlug),
|
|
70
|
+
{
|
|
71
|
+
params: {
|
|
72
|
+
building_slug: buildingSlug,
|
|
73
|
+
flag_type: "bool",
|
|
74
|
+
feature_flag: "webchat-use-override-contact-us-form",
|
|
75
|
+
default_str: null,
|
|
76
|
+
default_bool: false,
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
return featureFlagResponse.data;
|
|
81
|
+
} catch (_) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|