PageSourceSearch

https://buildertrend.net/app/static/Contact-Ctaif0W6.js

js buildertrend.net collected 2026-10-02 10:37:05 UTC 28,009 bytes, 2 lines download raw bytes

1import{k as e,r as u,S as Ee,I as H,bm as N}from"./vendor-frozen-BjHTscMc.js";import{ae as Be,tG as h,K as ke,bz as ee,J as f,cf as Z,gP as De,gQ as Fe,r as I,p as g,dk as ie,dl as ne,fi as Y,a as oe,cS as Le,b5 as z,eS as Me,br as Te,b3 as Oe,O as ue,b4 as Ve,n as Re,gT as Ue,qJ as Je,aF as K,a9 as k,aa as X,m as D,ch as We,bQ as He,T as qe,kN as he,U as Ce,V as ze,b7 as pe,bv as Ke,pZ as J,ab as le,hk as fe,tH as $e,B as _e,bw as Ge,q6 as Qe,aj as A,ck as q,d4 as ge,dc as Ye,W as Ze,e0 as Xe,dP as re,a3 as W,tI as et,oo as tt,or as at,c5 as st,eI as it,y as de,aE as nt,gY as ot,gZ as lt}from"./index-BXLY1or4.js";import{C as rt}from"./Contact.api.handler-DWcBNVtX.js";import{B as T}from"./BTSection-EL_JDh1X.js";import{B as dt}from"./BTSplitButton-DH5q50Qh.js";import{u as ct}from"./useEditMode-C7nQfJVU.js";import{G as mt,A as ut}from"./Address-D7Cska8-.js";import{A as ht}from"./AuthoredBy-Dk-pdyGW.js";import{c as Ct,b as pt,C as ft}from"./CellPhoneInput-B7kdgyB0.js";import{V as gt,S as bt}from"./CellPhoneInput.types-UowuRKUA.js";import{g as yt,c as vt}from"./CellPhoneInput.utils-BgslTRgl.js";import{C as xt}from"./ContactEmailAlert-DEvh8aT0.js";import{P as jt,C as St,a as wt}from"./CustomFieldContainer-DIp3YqKD.js";import{I as M}from"./InputEmail.utils-BiqmZ53F.js";import{I as Nt,E as At}from"./EmailFormEntry-CDCsp5Ie.js";import{U as It}from"./UserActivationStatusTag-CsCjJ9a6.js";import{C as Pt,a as Et}from"./ContactInfoDisplay-BxHIRyfO.js";import{H as Bt}from"./HideOnPortal-UvAj92HI.js";import{P as ce}from"./PhoneActionSheet-BaJr_Mow.js";import{F as kt}from"./FormikValidationSummary-DpmLAkyp.js";import{V as Dt}from"./ValidationSummary-BnyDyRBI.js";import{M as Ft,a as Lt}from"./MergeContactModal-OY8_PMRs.js";import"./LoadMapApi-xS-YB8e3.js";import"./BTInput-BCkEBvP_.js";import"./BTMaskedInput-BcjUVtIM.js";import"./index-DyIamSZx.js";import"./CellPhoneField-D1pbXhwV.js";import"./BTNumberInput-drz-jbjz.js";import"./BTDatePicker-c-89lJ3I.js";import"./BTInputNumber-CsCuvC3c.js";import"./NumberDisplay-DIrVWjNP.js";import"./TextTruncate.utility-C3epKT3I.js";import"./BTSelectEditable-CrE-eCNf.js";import"./CollectionEditable-BqrNsSZB.js";import"./BTUpload-BgkFN82v.js";import"./fileUpload.utils-rNC0QUAB.js";import"./BTIconInboxOutlined-YpvwzAp6.js";import"./BTIconUploadOutlined-CfkVUgBq.js";import"./FileDragTarget-BRJYtgcw.js";import"./IconUploadSimple-sPEBDAot.js";import"./ErrorLoading-pJWt4cqF.js";import"./Currency-vBwVcJNE.js";import"./BTIconDeleteFilled-BwONBXmB.js";import"./BTIconPlusCircleFilled-fsPvse7V.js";import"./BTRadioGroupDeprecated-BnTjUQNm.js";function Mt(a,t){return t.map((i,s)=>e.jsx("li",{children:i},`${a}-message-${s}`))}function Tt(a){const t=a.reduce((i,s)=>(i[s.key]=i[s.key]||[],s.message.forEach(d=>i[s.key].push(d)),i),Object.create(null));return Object.keys(t).map(i=>e.jsxs("li",{children:[i,": ",e.jsx("ul",{children:Mt(i,t[i])})]},i))}const Ot=a=>{let t,i=0;const{errors:s}=a;return t=Tt(s),i=Array.isArray(t)?t.length:0,e.jsx(Dt,{errorCount:i,children:e.jsx("ul",{children:t})})};function Vt({contact:a,readOnly:t,isNew:i,values:s,setFieldTouched:d,setFieldValue:o}){const m=u.useCallback((r,c,y,C)=>{o(r,c),(s.displayName===""||s.displayName===`${s.firstName||""} ${s.lastName||""}`.trim())&&o("displayName",`${y} ${C}`.trim())},[o,s.displayName,s.firstName,s.lastName]),n=u.useCallback((r,c)=>{m(r,c,c,s.lastName||"")},[m,s.lastName]),l=u.useCallback((r,c)=>{m(r,c,s.firstName||"",c)},[m,s.firstName]);return e.jsxs(e.Fragment,{children:[a.firstName!==void 0&&a.lastName!==void 0&&e.jsx("div",{className:"@container",children:e.jsxs("div",{className:"grid grid-cols-1 gap-4 padding-bottom-xs @md:grid-cols-2",children:[e.jsx(T,{className:"p-0",children:e.jsx(A,{id:"firstName",useBds:!0,children:e.jsx(q,{id:"firstName","data-testid":"firstName",value:s.firstName,onChange:n,onBlur:d,readOnly:t,autoFocus:i})})}),e.jsx(T,{className:"p-0",children:e.jsx(A,{id:"lastName",useBds:!0,children:e.jsx(q,{id:"lastName","data-testid":"lastName",value:s.lastName,onChange:l,onBlur:d,readOnly:t})})})]})}),e.jsx("div",{className:"grid grid-cols-1 gap-4 padding-bottom-xs",children:e.jsx(T,{className:"p-0",children:e.jsx(A,{id:"displayName",label:({label:r,isRequiredFieldIndicatorVisible:c})=>e.jsxs(e.Fragment,{children:[r,c&&e.jsx(ge,{}),e.jsx(z,{placement:"left",content:"Display Name is shown anywhere the name of this contact is displayed on lead opportunities and jobs."})]}),useBds:!0,children:e.jsx(q,{id:"displayName","data-testid":"displayName",value:s.displayName,onChange:o,onBlur:d,readOnly:t})})})})]})}function Rt({contact:a,readOnly:t,values:i,errors:s,touched:d,setFieldTouched:o,setFieldValue:m}){return t&&a.address?e.jsx("div",{className:"mb-sm last:mb-0",children:e.jsx(Ye,{address:a.address,showMapIcon:!1})}):e.jsx(ut,{id:"address",readOnly:t,entity:a,value:i.address,touched:d,errors:s,onChange:m,onBlur:o,refreshAddress:()=>{},useBds:!0})}function Ut({readOnly:a,values:t,setFieldTouched:i,setFieldValue:s,initialValues:d,contact:o}){if(a){const{phonePrimary:m,phoneCell:n,smsOptInStatus:l}=t;return!m&&!n?null:e.jsxs("div",{className:"mb-sm last:mb-0 grid grid-cols-1 md:grid-cols-2 gap-md",children:[m&&e.jsx(A,{id:"phonePrimary",useBds:!0,children:e.jsx(ce,{value:m,testIdBase:"phonePrimaryActions",defaultCountryCode:o.countryCode})}),n&&e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-xs",children:[e.jsx(A,{id:"phoneCell",label:"Cell Phone",useBds:!0,children:e.jsx(ce,{value:n,testIdBase:"phoneCellActions",defaultCountryCode:o.countryCode})}),l!==bt.None&&e.jsx(A,{id:"smsOptInStatus",label:"Receive text messages",useBds:!0,children:e.jsx(pt,{smsOptInStatus:l,useBds:!0})})]})]})}return e.jsx("div",{className:"@container",children:e.jsxs("div",{className:"grid grid-cols-1 gap-4 @md:grid-cols-2",children:[e.jsx(T,{className:"p-0",children:e.jsx(A,{id:"phonePrimary",useBds:!0,children:e.jsx(q,{id:"phonePrimary","data-testid":"phonePrimary",value:t.phonePrimary,onChange:s,onBlur:i,readOnly:a})})}),e.jsx(T,{className:"p-0",children:e.jsx(ft,{initialValues:d,values:t,defaultCountryCode:o.countryCode,onChange:s,onBlur:i,readOnly:a,useBds:!0})})]})})}function Jt({schema:a}){return e.jsxs(e.Fragment,{children:["Primary email"," ",a.isRequiredFieldIndicatorVisible&&e.jsx(ge,{}),e.jsx(Et,{})]})}function me({contact:a,readOnly:t,values:i,...s}){const d=u.useCallback(l=>e.jsx(Jt,{schema:l}),[]),o=a.activationStatus,n=ee({owner:!a.isBuilderImpersonatingOwner})||o!==h.Active&&o!==h.Disabled;return e.jsx(At,{...s,useBds:!0,values:i,inputFieldReadOnly:o===h.Pending||t||!a.canEditPrimaryEmail,showPrimaryEmailField:n,maxCount:a.maxAdditionalEmailsCount,primaryEmailInputLabel:d,readOnly:t})}const Wt=a=>{const{contact:t,isNew:i,isInEditMode:s,jobAddress:d,setFieldValue:o,values:m}=a,n=16,l=8,r=u.useCallback(()=>{o("address",d)},[d,o]),c=u.useMemo(()=>
1({...Je.fromEntity(t),additionalEmails:void 0}),[t]),y=ee({builder:!0})||t.isBuilderImpersonatingOwner?t.activationStatus:void 0,C={...a,innerGutterWidth:l};return e.jsx(K,{title:e.jsxs(k,{justify:"space-between",align:"middle",children:[e.jsx(D,{level:2,children:"Contact Information"}),d&&i&&e.jsx(g,{id:"copyAddressFromJob","data-testid":"copyAddressFromJob",className:"padding-top-xs",type:"tertiary",onClick:r,children:"Copy from Job"})]}),children:e.jsx(k,{gutter:n,wrap:!1,children:e.jsx(X,{flex:"auto",className:"text-overflow-auto",children:y===h.Active||t.activationStatus===h.Disabled||!t.canEdit&&t.id!==0?e.jsxs(Ee,{className:"Contact-BuilderActiveContactContainer",direction:"vertical",size:m.additionalEmails.length?"small":0,children:[e.jsx(Pt,{contactInfo:c,emptyAddressDisplay:e.jsx(e.Fragment,{}),displayEmailLink:!0,displayPhoneLinks:!0,defaultCountryCode:t.countryCode}),t.canEdit&&e.jsx(me,{...C,readOnly:!s})]}):e.jsxs(e.Fragment,{children:[e.jsx(Vt,{...C,readOnly:!s}),e.jsx(Rt,{...C,readOnly:!s}),e.jsx(Ut,{...C,readOnly:!s}),e.jsx(me,{...C,readOnly:!s})]})})})})};function Ht(a){const{contact:t,values:i,errors:s,getDirtyTrackingProps:d,setFieldValue:o,handleSubmit:m,setSubmitting:n,onSubmit:l,actionBeingPerformed:r,onCustomHandleSubmit:c}=a,[y,C]=u.useState(!1),P=()=>{C(!1),o("sendInvite",!1),o("cancelInvite",!1)},$=async()=>{await c("saveAndSendInvite"),C(!1)},O=async()=>{await c("saveAndCancelInvite"),C(!1)},F=u.useCallback(async p=>{m(),n(!0);const v={...i,sendInvite:p,cancelInvite:!p},L=await l(v,p?"sendInvite":"cancelInvite");n(!1),L&&H.success(p?"Successfully sent invite to user":"Successfully cancelled invite")},[i,n,m,l]),b=u.useCallback(async p=>{d().isDirty?(o("sendInvite",p),o("cancelInvite",!p),C(!0)):await F(p)},[d,o,C,F]),j=u.useCallback(async()=>{await b(!0)},[b]),V=u.useCallback(async()=>{await b(!1)},[b]),_=u.useCallback(()=>{i.isDisabled===void 0?o("isDisabled",!0):o("isDisabled",void 0)},[o,i]),w=u.useCallback(()=>{i.isDisabled===void 0?o("isDisabled",!1):o("isDisabled",void 0)},[o,i]),R=t.jobs.length===0?"This user cannot be invited because they do not have access to any Jobs. Add them to an active Job to send an invitation":"A name and valid email address are required to invite a contact.",E=t.jobs.length!==0&&!Z(i.primaryEmail?.emailAddress)&&!s.primaryEmail&&!Z(i.displayName),G=t.jobs.length===0||!i.primaryEmail?.emailAddress||!We(s?.primaryEmail)||!i.displayName;return e.jsx(He,{builder:!0,render:()=>e.jsxs(e.Fragment,{children:[e.jsxs(K,{title:"Security & Login",extra:e.jsxs(e.Fragment,{children:[e.jsx(k,{children:i.isDisabled===!0&&"Contact will be disabled on save."}),e.jsx(k,{children:i.isDisabled===!1&&"Contact will be enabled on save."})]}),children:[e.jsxs(k,{children:[e.jsx(X,{children:e.jsx(D,{level:4,children:"Login Access"})}),t.activationStatus!==void 0&&e.jsx(X,{children:e.jsx(It,{className:"margin-left-sm",activationStatus:t.activationStatus,activationSent:t.activationSent,activationConfirmed:t.activationConfirmed})})]}),(t.canAdd||t.canEdit)&&e.jsxs(k,{children:[t.activationStatus===h.Pending&&e.jsx(g,{className:"Contact-SecurityLogins","data-testid":"resendInvite",type:"secondary",actionBeingPerformed:r,loadingAction:"sendInvite",onClick:j,children:"Resend Invite"}),t.activationStatus===h.Pending&&e.jsx(g,{className:"Contact-SecurityLogins","data-testid":"cancelInvite",type:"secondary",actionBeingPerformed:r,loadingAction:"cancelInvite",onClick:V,children:"Cancel Invite"}),t.activationStatus===h.NotSent&&e.jsx(z,{content:e.jsx("span",{children:R}),placement:"right",disabled:E,children:e.jsx(g,{className:"Contact-SecurityLogins","data-testid":"sendInvite",type:"secondary",actionBeingPerformed:r,loadingAction:"sendInvite",onClick:j,disabled:G,children:"Send Invite"})}),t.activationStatus===h.Active&&e.jsx(g,{className:"Contact-SecurityLogins","data-testid":"disable",type:"secondary",actionBeingPerformed:r,loadingAction:"other",onClick:_,children:"Disable"}),t.activationStatus===h.Disabled&&e.jsx(z,{content:"This user cannot be enabled because they do not have access to any Jobs. Add them to an active Job to re-enable their access.",placement:"right",disabled:t.jobs.length!==0,children:e.jsx(g,{className:"Contact-SecurityLogins","data-testid":"disable",type:"secondary",actionBeingPerformed:r,loadingAction:"other",disabled:t.jobs.length===0,onClick:w,children:"Enable"})})]})]}),e.jsx(qe,{beforeClose:()=>{r===void 0&&P()}
1,title:i.sendInvite?"Save contact and send invite?":"Save contact and cancel invite?",visible:y,children:e.jsxs(ue,{children:[e.jsx(he,{}),e.jsx(Ce,{children:t.id>0?"You have edited your contact.":""}),e.jsxs(ze,{children:[e.jsx(g,{id:"cancelPrompt","data-testid":"cancelPrompt",onClick:P,disabled:r!==void 0,className:"margin-right-xs",children:"Keep editing"}),i.sendInvite?e.jsx(g,{id:"saveAndSendInvite","data-testid":"saveAndSendInvite",onClick:$,type:"primary",actionBeingPerformed:r,loadingAction:"saveAndSendInvite",children:"Save and send invite"}):e.jsx(g,{id:"saveAndCancelInvite","data-testid":"saveAndCancelInvite",onClick:O,type:"danger",actionBeingPerformed:r,loadingAction:"saveAndCancelInvite",children:"Cancel invite"})]})]})})]})})}const qt=({contact:a,isFromSelector:t,reloadTable:i,match:s,modalConfig:d})=>{const o=u.useCallback(()=>i("lead"),[i]),m=u.useMemo(()=>({parentRoute:s.url,beforeClose:o}),[o,s.url]);return e.jsxs(K,{title:"Lead Opportunities",children:[a.leads.length!==0&&e.jsx("div",{className:"Contact-EmbeddedTableContainer",children:e.jsxs(pe,{dataSource:a.leads,rowKey:"id",size:"small",striped:!0,pagination:!1,children:[e.jsx(N.Column,{title:"Title",sorter:(n,l)=>{const r=n.name.toLowerCase(),c=l.name.toLowerCase();return r===c?0:r<c?-1:1},render:(n,l)=>t?l.name:e.jsx(Ke,{to:I.lead.getDetailsLink(l.id),children:l.name})}),e.jsx(N.Column,{title:"Status",sorter:(n,l)=>n.extraData.status-l.extraData.status,render:(n,l)=>{switch(l.extraData.status){case J.Open:return"Open";case J.Lost:return"Lost";case J.Sold:return"Sold";case J.NoOpportunity:return"No Opportunity";default:return""}}}),e.jsx(N.Column,{title:"Created Date",sorter:(n,l)=>{const r=n.extraData.createdByDate,c=l.extraData.createdByDate;return r.isSame(c)?0:r.isBefore(c)?-1:1},render:(n,l)=>e.jsx(le,{value:l.extraData.createdByDate})}),e.jsx(N.Column,{title:"Sold Date",sorter:(n,l)=>{const r=n.extraData.soldDate,c=l.extraData.soldDate;return!r||!c?r===c?0:r?-1:1:r.isSame(c)?0:r.isBefore(c)?-1:1},render:(n,l)=>{const r=l.extraData.soldDate;return r?e.jsx(le,{value:r}):"N/A"}}),e.jsx(N.Column,{title:"Salesperson",render:(n,l)=>l.extraData.salesperson})]})}),a.leads.length===0&&a.leadsListMessage===""&&e.jsx(D,{level:4,className:"margin-all-zero",children:"No Lead Opportunities Found"}),a.leadsListMessage!==""&&e.jsxs(D,{level:4,className:"margin-all-zero",children:[e.jsx(fe,{})," ",a.leadsListMessage]}),e.jsx($e,{fromContact:!0,onDeleteContact:d?.beforeClose,modalConfig:m})]})},zt=({contact:a,isFromSelector:t,reloadTable:i,match:s,history:d})=>{const o=u.useCallback((n,l)=>n.extraData.address.fields.find(r=>r.id===l.id)?.value??"",[]),m=u.useCallback(async()=>i("job"),[i]);return e.jsxs(K,{title:"Jobs",children:[a.jobs.length!==0&&e.jsx("div",{className:"Contact-EmbeddedTableContainer",children:e.jsxs(pe,{dataSource:a.jobs,rowKey:"id",size:"small",striped:!0,pagination:!1,children:[e.jsx(N.Column,{title:"Job Name",sorter:(n,l)=>{const r=n.name.toLowerCase(),c=l.name.toLowerCase();return r===c?0:r<c?-1:1},render:(n,l)=>t?l.name:e.jsx(_e,{to:Ge.link({jobId:l.id},{accessedFromContact:!0},{overridePrevious:{title:"Contact"}}),children:l.name})}),a.jobs[0].extraData.address.fields.sort((n,l)=>n.order-l.order).map(n=>e.jsx(N.Column,{title:n.title,sorter:(l,r)=>{const c=o(l,n).toLowerCase(),y=o(r,n).toLowerCase();return c===y?0:c<y?-1:1},render:(l,r)=>o(r,n)},n.title)),e.jsx(N.Column,{title:"Project Manager",render:(n,l)=>l.extraData.projectManagers.join(", ")})]})}),a.jobs.length===0&&a.jobsListMessage===""&&e.jsx(D,{level:4,className:"margin-all-zero",children:"No Jobs Found"}),a.jobsListMessage!==""&&e.jsxs(D,{level:4,className:"margin-all-zero",children:[e.jsx(fe,{})," ",a.jobsListMessage]}),e.jsx(Qe,{parentRoute:s.url,history:d,beforeClose:m})]})},Kt=a=>{const{contact:t,isFromSelector:i,actionBeingPerformed:s,isValid:d,values:o,errors:m,getDirtyTrackingProps:n,submitCount:l,handleSubmit:r,setSubmitting:c,validateForm:y,onShowMergeContactsModal:C,onViewContactWithSameEmail:P,onCombineContacts:$,onSubmit:O,onDelete:F,accessedFromOwnerSetup:b,contactAlert:j,failedFields:V,isMergeC
1ontactModalVisible:_,modalConfig:w,resetForm:R}=a,{isInEditMode:E,enterEditMode:G,exitEditMode:p}=ct(),v=u.useCallback(async(x="updateContact")=>{let B=!1;event?.preventDefault(),r(),c(!0);const Ie=await y(o);if(Object.keys(Ie).length===0){const Pe={...o};B=await O(Pe,x)}return c(!1),x==="saveAndClose"&&B&&w?.beforeClose(),x==="updateContact"&&B&&p(),B},[r,c,y,o,O,w,p]),L=u.useCallback(async()=>await v(t.id===0?"saveContact":"updateContact"),[t.id,v]),ye=u.useCallback(async()=>{await v("saveAndNew")},[v]),Q=u.useCallback(async()=>{await v("saveAndClose")},[v]),ve=u.useCallback(()=>De(n,{onCloseWithSave:Q,onCloseWithoutSave:w?.beforeClose},w?.parentRoute),[Q,n,w]),xe=u.useCallback(()=>{const x=n();x.isDirty?Fe(x.dirtyKeys,{onCloseWithSave:async()=>{await v(t.id===0?"saveContact":"updateContact")},onCloseWithoutSave:()=>{R(),p()}}):p()},[t.id,v,p,n,R]),S=t.id===0,U=S&&t.canAdd||t.canEdit,je=(S||t.canEdit)&&t.canAdd&&!i&&!b,te=!S&&t.canDelete&&!i&&!b,ae=!S&&!b,se=u.useCallback(x=>{window.open(`${I.appBase}${x}`,"_blank")},[]),Se=U&&e.jsx(g,{id:"ClientSaveExistingButtonId",type:"primary","data-testid":"save-existing",hotkey:"save",onClick:L,loading:s==="updateContact",disabled:!!s,children:"Save"}),we=U&&e.jsx(dt,{"data-testid":"clientPresentationalSaveGroup",type:"primary",disabled:!!s,actionBeingPerformed:s==="updateContact"?"saveContact":s,loadingAction:"saveContact",buttonAction:{"data-testid":"save",content:"Save",onClick:async()=>{await L()},hotkey:"save"},menuItems:[{"data-testid":"saveAndClose",content:"Save and close",onClick:Q,hotkey:"saveAndClose"},...je?[{"data-testid":"saveAndNew",content:"Save and new",onClick:ye}]:[]]}),Ne=E?e.jsxs("div",{className:"flex w-full flex-row gap-2","data-testid":"ClientPresentationalEditFooter",children:[e.jsx("div",{className:"flex grow flex-row flex-wrap items-center justify-end gap-2","data-testid":"clientPresentationalCancelGroup",children:e.jsx(g,{"data-testid":"Cancel",type:"secondary",disabled:!!s,onClick:xe,children:"Cancel"})}),S?we:Se]}):!t.isBuilderImpersonatingOwner&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex w-full flex-row gap-2","data-testid":"ClientPresentationalViewFooter",children:[te&&e.jsx(ie,{...ne("delete"),disabled:!!s,onCommand:F}),ae&&e.jsx(ie,{...ne("print"),disabled:!!s,onCommand:()=>se(I.contact.getPrintLink(t.id))}),e.jsxs(Y,{testid:"clientPresentationalFooterActions",className:"ClientPresentationalFooterActions grow justify-end",children:[e.jsxs(Y.Menu,{testid:"clientPresentationalButtonGroupMenu",ids:[],children:[ae&&e.jsx(oe.Item,{eventKey:"print",testid:"print-menu-item",children:e.jsx(g,{"data-testid":"print",type:"secondary",loading:s==="other",disabled:!!s,onClick:()=>se(I.contact.getPrintLink(t.id)),children:"Print"})},"print"),te&&e.jsx(oe.Item,{eventKey:"delete",testid:"delete-menu-item",className:"Contact-DeleteButton",children:e.jsx(g,{"data-testid":"delete",type:"secondarydanger",loading:s==="other",disabled:!!s,onClick:F,children:"Delete"})},"delete")]}),U&&e.jsx(Y.Item,{id:"edit",pinned:!0,children:e.jsx(g,{"data-testid":"edit",type:"secondary",icon:e.jsx(Le,{}),"aria-label":"Edit Contact",disabled:!!s,onClick:G})},"edit")]})]}),!S&&!b&&e.jsx("div",{className:"ModalFooterContent",children:e.jsx(z,{content:e.jsx(ht,{createdBy:{date:t.createdDate,displayName:t.createdBy,globalUserId:t.createdById},updatedBy:{date:t.lastUpdatedByDate,displayName:t.lastUpdatedByName,globalUserId:t.lastUpdatedById}}),placement:"topLeft",children:e.jsx(Me,{})})})]}),Ae=u.useCallback(x=>{n().dirtyKeys.every(B=>B==="primaryEmail")?P(x):Te({title:"Unsaved changes",content:"Are you sure you want to discard your changes and view the related contact?",onOk:()=>{P(x)}})},[n,P]);return e.jsx(Oe,{title:S?"Add client contact":"Client contact",footerContent:Ne,modalConfig:ve(),children:e.jsxs(ue,{onSubmitCapture:L,children:[e.jsxs(Ve,{children:[j&&j.isVisible&&e.jsx(xt,{contactAlert:j,onShowMergeContactsModal:C,onViewContactWithSameEmail:Ae}),!b&&(t.activationStatus!==h.NotSent||a.values.sendInvite)&&e.jsx(Re,{"data-testid":"contactOwnershipAlert",type:"info",showIcon:!0,message:t.activationStatus===h.Active?"This user maintains their contact information.":"After activating their account, the user maintains their contact information and will see all jobs they are added to."}),e.jsx(kt,{scheme:be(a),values:o,errors:m,showAfterSubmit:l}),V&&d&&e.jsx(Ot,{errors:V}),e.jsx(Wt,{...a,isNew:S,allowSave:U,isInEditMode:E}),(t.canEdit||t.id===0)&&E&&e.jsx(Ht,{...a,onCustomHandleSubmit:v}),!b&&e.jsx(Ue,{name:"customFieldsContainer",component:wt,expanded:!0,fields:{...t,customFields:o.customFields},readOnly:!t.canEdit&&t.id!==0||!E}),!S&&!b&&e.jsx(Bt,{subs:!0,render:()=>e.jsxs(e.Fragment,{children:[e.jsx(qt,{...a}
1),e.jsx(zt,{...a})]})})]}),_&&w&&j&&j.duplicatedContactIds&&e.jsx(Ft,{data:{contactIds:j.duplicatedContactIds},modalConfig:{beforeClose:async()=>{await C(!1)},parentRoute:""},onSubmit:$,actionBeingPerformed:s})]})})},be=a=>{const t="First name",i="Last name",s="Display name",d="Cell phone",o="Primary email",m=ee({owner:!a.contact.isBuilderImpersonatingOwner});return f.object().shape({firstName:f.string().max(35).label(t),lastName:f.string().max(35).label(i),displayName:f.string().required().max(75).label(s),phonePrimary:f.string().max(25).label("Phone"),phoneCell:a.contact.canEdit&&(a.contact.activationStatus===h.Pending||a.contact.activationStatus===h.NotSent)?vt:f.string().label(d),primaryEmail:M.nullable().label(o).when("additionalEmails",{is:n=>n.some(l=>!!l.emailAddress)&&!m,then:M.nullable().map({emailAddress:n=>n.required("Primary email is required when adding additional emails").label("Primary Email"),friendlyName:n=>n.label("Primary Email Label")}),otherwise:M.nullable().map({emailAddress:n=>(m?n.required():n).label("Primary Email"),friendlyName:n=>n.label("Primary Email Label")})}).when("sendInvite",{is:!0,then:M.nullable().map({emailAddress:n=>n.required().label("Primary Email").test("email populated","Primary Email is required for invitations.",function(r){return!(a.contact.activationStatus===h.Active)&&!Z(r)}),friendlyName:n=>n.label("Primary Email Label")})}),additionalEmails:f.lazy(n=>Nt.of(f.lazy(l=>{const r=n[n.length-1]===l;return M.map({emailAddress:c=>(r?c:c.required()).label("Additional Email"),friendlyName:c=>c.label("Additional Email Label")})})).max(a.contact.maxAdditionalEmailsCount)),address:mt(a.contact),cellEmail:Ct,customFields:a.accessedFromOwnerSetup?f.mixed():St,profilePicture:f.string().label("Profile Picture"),sendInvite:f.boolean().label("Invite to Buildertrend"),cancelInvite:f.boolean().label("Cancel Invite to Buildertrend"),smsOptInStatus:f.number(),verificationRequest:f.number()})},$t=Be({mapPropsToValues:a=>{const t=a.contact.canEdit&&(a.contact.activationStatus===h.Pending||a.contact.activationStatus===h.NotSent);return{firstName:a.contact.firstName,lastName:a.contact.lastName,displayName:a.contact.displayName,phonePrimary:a.contact.phonePrimary,phoneCell:yt(a.contact.phoneCell,a.contact.countryCode,t),primaryEmail:a.contact.primaryEmail,additionalEmails:a.contact.additionalEmails,address:new ke(a.contact),cellEmail:a.contact.cellEmail.fullCellEmail,customFields:jt(a.contact),profilePicture:a.contact.profilePicture,sendInvite:a.contact.sendInvite,cancelInvite:!1,smsOptInStatus:a.contact.smsOptInStatus,verificationRequest:gt.None,isDisabled:void 0}},validationSchema:be,validateOnChange:!0,validateOnBlur:!0,enableReinitialize:!0,handleSubmit:async()=>{}})(Kt);class _t extends u.Component{static defaultProps={handler:new rt,accessedFromOwnerSetup:!1,mergeContactModalHandler:new Lt};state={isLoading:!0,actionBeingPerformed:void 0,isMergeContactModalVisible:!1};componentDidMount=async()=>{await this.loadContact()};componentDidUpdate=async t=>{this.props.id!==t.id&&await this.loadContact()};loadContact=async()=>{this.setState({isLoading:!0});const t=await this.props.handler.get(this.props.id);this.setState(i=>({isLoading:!1,contact:t,contactAlert:{...i.contactAlert,isVisible:!1,duplicatedContactIds:[]}}))};routeSaveRequest=async(t,i)=>{const{handler:s}=this.props,d={id:t};if(t===0){const o=await s.insert(i);o.failedFields?d.failedFields=o.failedFields:d.id=o.id}else{const o=await s.update(t,i);o.failedFields&&(d.failedFields=o.failedFields)}return d};getParentRoute=()=>this.props.modalConfig?.parentRoute||"";updateRouteAfterSave=(t,i,s)=>{const{isFromSelector:d,history:o}=this.props;let m=!1;return t!==i&&(o.replace(this.getParentRoute()+I.contact.getDetailsLink(i,d)),m=!0),s&&(o.replace(Xe(this.getParentRoute()+I.contact.getDetailsLink(0,d))),m=!0),m};handleShowMergeContactsModal=async t=>{this.setState({isMergeContactModalVisible:t})};handleViewContactWithSameEmail=t=>{this.props.history.push(this.getParentRoute()+I.contact.getDetailsLink(t,this.props.isFromSelector))};handleCombineContacts=async t=>{await re(this,{actionBeingPerformed:"save",callback:async()=>{const{contact:i}=this.state,{mergeContactModalHandler:s}
1=this.props;try{i&&t&&t.idToKeep&&t.idsToMerge?.length>0&&(await s.mergeContacts(t)&&H.success("Contacts Combined Successfully"),this.setState({isMergeContactModalVisible:!1}),this.updateRouteAfterSave(i.id,t.idToKeep,!1),await this.loadContact())}catch(d){W(d)}}})};handleSubmit=async(t,i)=>{let s=!1;return await re(this,{actionBeingPerformed:i,callback:async()=>{try{const{onSave:d}=this.props,{contact:o}=this.state;if(!o)return;const m=o.id,n=await this.routeSaveRequest(m,new et(o,t));if(n.failedFields)this.setState({failedFields:n.failedFields});else{const l=this.updateRouteAfterSave(m,n.id,i==="saveAndNew");d?.(n.id),l||await this.loadContact(),H.success("Contact Saved"),this.setState(r=>({failedFields:void 0,contactAlert:r.contactAlert?{...r.contactAlert,isVisible:!1}:void 0})),s=!0}}catch(d){tt(d)?this.handleContactAlert(d):W(d)}}}),s};handleDelete=async()=>{const t=e.jsx(e.Fragment,{children:"Are you sure you want to delete this Client Contact?"}),s=await this.setUsageState()&&this.state.accessConflictCounts&&this.state.accessConflictCounts.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(he,{className:"margin-bottom-md",children:"Deleting this contact will cause this user to lose access to the following:"}),e.jsx(Ce,{children:e.jsx("ul",{children:this.state.accessConflictCounts?.map((d,o)=>e.jsxs("li",{children:[d.count," ",d.description]},o))})})]});this.confirmDeleteModal(s||t)};handleClose=()=>{this.props.modalConfig?.beforeClose()};setUsageState=async()=>{try{const t=await this.props.handler.getUsage(this.props.id);return this.setState({accessConflictCounts:t.accessConflictCounts}),!0}catch(t){return this.handleCloseUsage(),W(t),!1}};handleCloseUsage=()=>{this.setState({usageItems:void 0})};reloadTable=async t=>{this.props.history.goBack();const i=await this.props.handler.get(this.props.id);let s;t==="lead"?s={leads:i.leads,leadsListMessage:i.leadsListMessage}:t==="job"&&(s={jobs:i.jobs,jobsListMessage:i.jobsListMessage}),this.setState(d=>d.contact?{contact:{...d.contact,...s}}:null)};handleContactAlert=t=>{const i=new at(t);this.setState({contactAlert:i}),st("duplicateContactAlert")};confirmDeleteModal(t){it({entityName:"Client Contact",content:t,onOk:async()=>{try{await this.props.handler.delete(this.props.id),this.handleClose(),ot(lt.Contact,this.props.id),this.props.onDelete?.(this.props.id),H.success("Contact Deleted")}catch(i){W(i)}}})}render(){if(!this.state||!this.state.contact)return e.jsx(de,{});const t=e.jsx($t,{...this.props,contact:this.state.contact,contactAlert:this.state.contactAlert,isFromSelector:this.props.isFromSelector,actionBeingPerformed:this.state.actionBeingPerformed,usageItems:this.state.usageItems,jobAddress:this.props.jobAddress,failedFields:this.state.failedFields,onShowMergeContactsModal:this.handleShowMergeContactsModal,onViewContactWithSameEmail:this.handleViewContactWithSameEmail,onCombineContacts:this.handleCombineContacts,onSubmit:this.handleSubmit,onDelete:this.handleDelete,onCloseUsage:this.handleCloseUsage,reloadTable:this.reloadTable,isMergeContactModalVisible:this.state.isMergeContactModalVisible,modalConfig:this.props.modalConfig});return this.props.modalConfig?e.jsx(nt,{"data-testid":"btModalContactCustomer",visible:!0,title:"Client Contact",width:"950px",removeBodyPadding:!0,useModalLayout:!0,beforeClose:this.props.modalConfig.beforeClose,isLoading:this.state.isLoading,children:t}):e.jsxs(e.Fragment,{children:[t,this.state.isLoading&&e.jsx(de,{})]})}}const Ua=Ze(_t)("Could not load Contact");export{Ua as Contact,Ua as default};
2//# sourceMappingURL=Contact-Ctaif0W6.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.