1import{i as ue,n as F,r as i,d as Q,o as G,b as me,c as j,E as x,j as C,M as ie,u as oe,a as ve,G as re,O as fe,b8 as pe,Q as he}from"./index-C3PRlZvS.js";import{C as ge,W as be}from"./ClientImplementationNote-DrXTlLuR.js";import{I as _e}from"./IndustryResource-M9XhWYYL.js";import{u as ye}from"./useFilter--W0njOqf.js";import{D as De}from"./DashboardTableFilters-Cjr7oqEV.js";import{u as Ie}from"./useAchievements-DmIvbQOz.js";import{A as we,a as Ce}from"./AchievementClientDetailTable-BmE_g1n-.js";import{D as xe,a as Ae}from"./DeliverableForm-4cK7sBws.js";import{I as ke}from"./ImplementationNotes-BHBsn8_W.js";import{C as Ne}from"./ClientLink-CuuBmMiC.js";import{M as Se}from"./MetricDisplay-DDuJSn9c.js";import"./DateRangeComparePicker-BSn_lKyC.js";import"./dateRange.helper--dYNUQ06.js";import"./quarterOfYear-Bt6Hboky.js";import"./DatePickerCell-CJhnmsN4.js";import"./useSeoDeliverable-DRrBKx5T.js";import"./useDeliverableHelpers-wMEIZB7Z.js";import"./isoWeek-DxtuiUO0.js";const Oe={getSeoData(p){return ue.get("/seo",{clientIds:p})}},Te={__name:"ClientAchievements",props:["client","departmentId"],emits:["refresh"],setup(p,{emit:a}){const t=p,e=i(null),{achievementDialog:l,achievementLoading:s,achievements:v,getAllAchievements:b,deleteAchievement:h,updateAchievement:y,approveAchievement:c,rejectAchievement:f,closeAchievementDialog:A,createAchievement:S}=Ie({achievementClientId:e,refreshData(){b(),a("refresh")}}),I=Q().format("YYYY-MM-DD");return G(()=>{e.value=t.client.id,me(()=>{b()})}),{__sfc:!0,props:t,emit:a,achievementClientId:e,achievementDialog:l,achievementLoading:s,achievements:v,getAllAchievements:b,deleteAchievement:h,updateAchievement:y,approveAchievement:c,rejectAchievement:f,closeAchievementDialog:A,createAchievement:S,reportDate:I,AchievementClientDetailTable:Ce,AchievementForm:we}}};var Re=function(){var a=this,t=a._self._c,e=a._self._setupProxy;return t("div",[t("div",{staticClass:"flex justify-end"},[t("v-btn",{attrs:{small:"",title:"Create New Achievement",color:"primary",outlined:""},on:{click:function(l){e.achievementDialog=!0}}},[t("v-icon",{attrs:{small:"",left:""}},[a._v("mdi mdi-plus-box")]),a._v(" Add Achievement ")],1)],1),t(e.AchievementClientDetailTable,{staticClass:"pt-2",attrs:{items:e.achievements,reducedView:!0,detailTableLoading:e.achievementLoading},on:{deleteItem:e.deleteAchievement,updateItem:e.updateAchievement,approveItem:e.approveAchievement,rejectItem:e.rejectAchievement}}),t("v-dialog",{attrs:{"max-width":"890",width:"95%",persistent:"",scrollable:""},on:{keydown:function(l){return!l.type.indexOf("key")&&a._k(l.keyCode,"esc",27,l.key,["Esc","Escape"])?null:e.closeAchievementDialog.apply(null,arguments)}},model:{value:e.achievementDialog,callback:function(l){e.achievementDialog=l},expression:"achievementDialog"}},[e.achievementDialog?t(e.AchievementForm,{attrs:{"department-id":a.departmentId,title:"New Achievement",reportDate:e.reportDate,"selected-client-id":a.client.id,loading:e.achievementLoading},on:{createItem:e.createAchievement,closeDialog:e.closeAchievementDialog}}):a._e()],1)],1)},$e=[],Ee=F(Te,Re,$e,!1,null,null);const Be=Ee.exports,Me={__name:"ClientDeliverables",props:["client","date"],emits:["refresh"],setup(p,{emit:a}){const t=p,{showErrorNotification:e,showSuccessNotification:l,showWarningNotification:s}=oe(),v=i([]),b=i([]),h=i({}),y=i(!1),c=i(!1),f=i(!1),A=i([]),S=j(()=>[t.client]);function I(){f.value=!0;const[d,D]=t.date,M={clientId:t.client.id,startDate:d,endDate:D,deliverableStatusId:5};x.getClientsWithDeliverables(M).then(Y=>{var _,P;const g=(_=Y.data)==null?void 0:_.find(N=>N.id===t.client.id);A.value=((P=g==null?void 0:g.deliverables)==null?void 0:P.filter(N=>N.details===null||N.details===""||N.details==="<p></p>"))||[]}).catch(()=>{e()}).finally(()=>{f.value=!1})}function T(){x.getDeliverableStatuses().then(d=>{v.value=C.sortBy(d.data,"name")}).catch(()=>{e()})}function R(){x.getDeliverableTypes().then(d=>{b.value=C.sortBy(d.data,"name")}).catch(()=>{e()})}function E(d){h.value={...d},c.value=!c.value,y.value=!0}function k(d){h.value={...d},c.value=!c.value}function O(){y.value=!1,h.value={},c.value=!1}async function W(d,D,M){f.value=!0,await x.updateDeliverable(d).then(async Y=>{for await(const g of d.deleteFile||[])await ie.deleteAttachment(g);if((D==null?void 0:D.length)>0){const g=new FormData;g.append("attachableType","seo-strategy-deliverable"),g.append("attachableId",Y.data.id);for(let _=0;_<(D==null?void 0:D.length);_++)g.append(`files[${_}]`,D[_]),g.append(`label[${_}]`,M[_]);await ie.uploadAttachment(g).then(()=>{l("Deliverable has been updated added and file uploaded.")}).catch(()=>{s("Deliverable has been successfully updated but file upload failed. Please try uploading the file again.")})}else l("Deliverable has been successfully updated.");I(),a("refresh"),O()}).catch(()=>{e()}).finally(()=>{f.value=!1})}async function B(d){f.value=!0,await x.deleteDeliverable(d.id).then(()=>{I(),l("Deliverable has been deleted.")}).catch(()=>{e()}).finally(()=>{f.value=!1})}return G(()=>{I(),T(),R()}),{__sfc:!0,props:t,emit:a,showErrorNotification:e,showSuccessNotification:l,showWarningNotification:s,deliverableStatuses:v,deliverableTypes:b,selectedDeliverable:h,show:y,dialog:c,detailTableLoading:f,deliverables:A,clients:S,getDeliverables:I,getDeliverableStatuses:T,getDeliverableTypes:R,openViewItemDialog:E,openEditItemDialog:k,closeDeliverablesDialog:O,updateDeliverable:W,deleteItem:B,DeliverableClientDetailTable:Ae,DeliverableForm:xe}}};var Ye=function(){var a=this,t=a._self._c,e=a._self._setupProxy;return t("div",[e.detailTableLoading===!1&&e.deliverables.length===0?[a._v(" No completed deliverables without description. ")]:[t(e.DeliverableClientDetailTable,{attrs:{items:e.deliverables,deliverableStatuses:e.deliverableStatuses,deliverableTypes:e.deliverableTypes,detailTableLoading:e.detailTableLoading},on:{showItem:e.openViewItemDialog,editItem:e.openEditItemDialog,updateItem:e.updateDeliverable,deleteItem:e.deleteItem}})],t("v-dialog",{attrs:{"max-width":"890",width:"95%",persistent:"",scrollable:""},on:{keydown:function(l){return!l.type.indexOf("key")&&a._k(l.keyCode,"esc",27,l.key,["Esc","Escape"])?null:e.closeDeliverablesDialog.apply(null,arguments)}},model:{value:e.dialog,callback:function(l){e.dialog=l},expression:"dialog"}},[e.dialog?t(e.DeliverableForm,{attrs:{deliverable:e.selectedDeliverable,deliverableStatuses:e.deliverableStatuses,deliverableTypes:e.deliverableTypes,show:e.show,clients:e.clients},on:{closeDialog:e.closeDeliverablesDialog,updateDeliverable:e.updateDeliverable}}):a._e()],1)],2)},Pe=[],Fe=F(Me,Ye,Pe,!1,null,null);
1const Le=Fe.exports,je={__name:"ImplementationNotes",props:{client:{type:Object,default:null},departmentId:{type:[String,Number],default:null}},emits:["close"],setup(p,{emit:a}){const t=p,e=i(!1),l=i(!1),s=i([]);async function v(){e.value=!0,x.getImplementationNotes(t.client.id).then(y=>{var c;s.value=((c=y.data)==null?void 0:c.filter(f=>f.departmentId===Number(t.departmentId)))||[]}).finally(()=>{e.value=!1})}function b(){re.on("refresh-client",()=>{v()})}function h(){re.off("refresh-client")}return b(),G(()=>{v()}),ve(()=>{h()}),{__sfc:!0,props:t,emit:a,loading:e,addImplementationNote:l,implementationNotes:s,getImplementationNotes:v,registerEvents:b,unloadEvents:h,ClientImplementationNote:ge,ImplementationNoteHistory:ke}}};var Ge=function(){var a=this,t=a._self._c,e=a._self._setupProxy;return t("div",[t("div",{staticClass:"flex justify-end mb-3"},[t("v-btn",{attrs:{small:"",title:"Create New Achievement",color:"primary",outlined:""},on:{click:function(l){e.addImplementationNote=!0}}},[t("v-icon",{attrs:{small:"",left:""}},[a._v("mdi mdi-plus-box")]),a._v(" Add Implementation Note ")],1)],1),t(e.ImplementationNoteHistory,{attrs:{"hide-close":!0,"implementation-notes":e.implementationNotes},on:{close:function(l){return e.emit("close")}}}),e.loading?t("v-overlay",{staticStyle:{"z-index":"40 !important"}},[t("v-progress-circular",{attrs:{indeterminate:"",size:"64"}})],1):a._e(),t("v-dialog",{attrs:{width:"95%","max-width":"800"},model:{value:e.addImplementationNote,callback:function(l){e.addImplementationNote=l},expression:"addImplementationNote"}},[t(e.ClientImplementationNote,{attrs:{client:a.client,"department-id":a.departmentId},on:{close:function(l){e.addImplementationNote=!1}}})],1)],1)},We=[],qe=F(je,Ge,We,!1,null,null);const Ve=qe.exports,Ue={__name:"SEODashboardTable",props:{clients:{type:Array,required:!0},loading:{type:Boolean,required:!0}},emits:["show"],setup(p,{emit:a}){const t=i([{text:"Client",value:"name"},{text:"Analyst",value:"analyst.fullName"},{text:"SEO Budget",value:"seoBudget"},{text:"GSC Clicks",value:"metrics.gscClicks",actualValue:"gscClicks",format:"formatNumber",compare:!0},{text:"GSC Impressions",value:"metrics.gscImpressions",actualValue:"gscImpressions",format:"formatNumber",compare:!0},{text:"GBP Phone Calls",value:"metrics.gbpPhoneCalls",actualValue:"gbpPhoneCalls",format:"formatNumber",compare:!0},{text:"Analytics",value:"analytics",sortable:!1,align:"center",icon:"mdi-chart-line-stacked",withBadge:!0},{text:"Website",value:"website",sortable:!1,align:"center",icon:"mdi-web"},{text:"GSC",value:"gsc",sortable:!1,align:"center",icon:"mdi-google"},{text:"# of Achievements",value:"numberOfAchievements",sortable:!0,align:"center"},{text:"# of Completed Deliverables w/out Description",value:"numberOfDeliverables",sortable:!0,align:"center",class:"w-48"},{text:"SEO Performance",value:"detailedSEOReport",sortable:!1,align:"center",icon:"mdi-file-document",class:"w-36"},{text:"SEO Implementation Notes",value:"seoImplementationNotes",sortable:!1,align:"center",icon:"mdi-note-multiple-outline",class:"w-48"}]);function e(l,s,v){a("show",{client:l,info:s,title:v})}return{__sfc:!0,emit:a,headers:t,showModal:e,formatCurrency:fe,ClientLink:Ne,MetricDisplay:Se}}};var ze=function(){var a=this,t=a._self._c,e=a._self._setupProxy;return t("div",{staticClass:"w-full"},[t("v-data-table",{staticClass:"max-w-[2560px] elevation-1",attrs:{"hide-default-footer":!0,"disable-pagination":!0,headers:e.headers,items:a.clients,"fixed-header":"",height:"calc(100vh - 420px)","sort-by":"name"},scopedSlots:a._u([{key:"item.name",fn:function({item:l}){return[t(e.ClientLink,{key:`client-${l.id}`,attrs:{client:l}})]}},{key:"item.seoBudget",fn:function({item:l}){return[a._v(" "+a._s(e.formatCurrency(l.seoBudget))+" ")]}},{key:"item.metrics.gscClicks",fn:function({item:l,header:s}){return[l.metrics===null?[t("v-skeleton-loader",{attrs:{type:"text"}})]:[t(e.MetricDisplay,{attrs:{data:l.metrics,metric:s}})]]}},{key:"item.metrics.gscImpressions",fn:function({item:l,header:s}){return[l.metrics===null?[t("v-skeleton-loader",{attrs:{type:"text"}})]:[t(e.MetricDisplay,{attrs:{data:l.metrics,metric:s}})]]}},{key:"item.metrics.gbpPhoneCalls",fn:function({item:l,header:s}){return[l.metrics===null?[t("v-skeleton-loader",{attrs:{type:"text"}})]:[t(e.MetricDisplay,{attrs:{data:l.metrics,metric:s}})]]}},{key:"item.analytics",fn:function({item:l,header:s}){return[t("a",{attrs:{href:l.analytics,target:"_blank",rel:"noopener noreferrer"}}
1,[t("v-icon",{attrs:{color:l.analytics?"":"grey lighten-1"}},[a._v(a._s(s.icon))])],1)]}},{key:"item.website",fn:function({item:l,header:s}){return[t("a",{attrs:{href:l.website,target:"_blank",rel:"noopener noreferrer"}},[t("v-icon",{attrs:{color:l.website?"":"grey lighten-1"}},[a._v(a._s(s.icon))])],1)]}},{key:"item.gsc",fn:function({item:l,header:s}){return[t("a",{attrs:{href:l.gsc,target:"_blank",rel:"noopener noreferrer"}},[t("v-icon",{attrs:{color:l.gsc?"":"grey lighten-1"}},[a._v(a._s(s.icon))])],1)]}},{key:"item.numberOfAchievements",fn:function({item:l}){return[t("v-btn",{attrs:{text:""},on:{click:function(s){return e.showModal(l,"achievements","Achievements")}}},[a._v(" "+a._s(l.numberOfAchievements)+" ")])]}},{key:"item.numberOfDeliverables",fn:function({item:l}){return[l.numberOfDeliverables>0?t("v-btn",{attrs:{text:"",color:"error"},on:{click:function(s){return e.showModal(l,"deliverables","Completed Deliverables w/out Description")}}},[a._v(" "+a._s(l.numberOfDeliverables)+" ")]):t("span",[a._v("0")])]}},{key:"item.detailedSEOReport",fn:function({item:l,header:s}){return[t("RouterLink",{attrs:{to:{name:"clients.seo-division-report",params:{slug:l.slug}}}},[t("v-icon",[a._v(a._s(s.icon))])],1)]}},{key:"item.seoImplementationNotes",fn:function({item:l,header:s}){return[t("v-icon",{on:{click:function(v){return e.showModal(l,"seoImplementationNotes")}}},[a._v(a._s(s.icon))])]}}])})],1)},He=[],Qe=F(Ue,ze,He,!1,null,null);const Je=Qe.exports,Ke={__name:"DashboardSEO",props:["myClients","additionalSupportClients"],setup(p){const a=p,{showErrorNotification:t}=oe(),e=1,l="SEO",s=i(!1),v=i([]),b=i(null),h=i({dialog:!1,seoImplementationNotes:!1,achievements:!1,deliverables:!1}),y=i(""),c=i({selectedClientId:"my-clients",selectedAnalystId:null,division:null}),f=i(!1),A=i([]),S=i([]),I=i([]),T=i([]),R=i([]),E=i([]),k=i([]),O=i([]),{divisions:W}=ye(T),B=j(()=>{let n=[];return c.value.selectedClientId==="my-clients"?n=C.uniqBy([...a.myClients,...a.additionalSupportClients],"id"):c.value.selectedClientId==="all-clients"?n=[...v.value]:c.value.selectedClientId&&(n=C.uniqBy([...v.value,...a.myClients,...a.additionalSupportClients],"id").filter(r=>r.id===c.value.selectedClientId)),c.value.selectedAnalystId&&(n=n.filter(u=>{var r;return(r=u.ClientUsers)==null?void 0:r.some(o=>o.userId===c.value.selectedAnalystId&&o.ClientUserType.departmentId===e)})),c.value.division&&(n=n.filter(u=>{var r,o;return(o=(r=c.value.division)==null?void 0:r.value)==null?void 0:o.includes(u.industryId)})),n}),d=j(()=>C.uniq(C.map([...a.myClients,...v.value],"id"))),D=j(()=>B.value.map(n=>{var te,ae,le,ne,se;const u=((te=n.ClientUsers.find(m=>m.clientUserTypeId===5))==null?void 0:te.user)||{fullName:"Not Assigned"},r=S.value.find(m=>n.id===m.clientId),o=I.value.find(m=>m.clientId===n.id),w=A.value.filter(m=>n.id===m.clientId),U=C.sumBy(w,m=>m.invoiceAmount+C.sumBy(m.Fees,de=>de.invoiceAmount)),z=((ae=R.value.filter(m=>n.id===m.clientId))==null?void 0:ae.length)||0,L=((ne=(le=E.value.find(m=>m.id===n.id))==null?void 0:le.deliverables)==null?void 0:ne.filter(m=>m.details===null||m.details===""||m.details==="<p></p>"))||[],$=((se=k.value.find(m=>m.clientId===n.id))==null?void 0:se.data)||null,H=$?{...$.current_period,previousPeriod:$.previous_period}:null;return{...n,analyst:u,website:(r==null?void 0:r.domain)??n.website,seoBudget:U,numberOfAchievements:z,deliverables:L,numberOfDeliverables:L.length,metrics:H,...o?{semRush:o.semRush,analytics:o.analytics,proactivePlan:o.proactivePlan,nineOneOne:o.nineOneOne,gmb:o.gmb,gsc:o.gsc}:{}}}));function M(n){const{client:u,info:r,title:o}=n;y.value=`${u.name} ${o||""}`,b.value=u,h.value.dialog=!0,h.value[r]=!0}function Y(){y.value="",Object.keys(h.value).forEach(n=>{h.value[n]=!1})}function g(){const n=Q().startOf("month"),u=Q().subtract(1,"day");return u.isSame(n,"month")?[n.format("YYYY-MM-DD"),u.format("YYYY-MM-DD")]:[n.format("YYYY-MM-DD"),n.format("YYYY-MM-DD")]}function _(){var n;return((n=O.value)==null?void 0:n.length)===2?O.value:g()}async function P(){await x.getClientsByServiceGroup({serviceGroupName:l}).then(n=>{v.value=C.sortBy(n.data,"name")})}async function N(){await be.getWebsitesList(d.value).then(n=>{S.value=n.data})}async function J(){await Oe.getSeoData(d.value).then(n=>{I.value=n.data})}async function K(){await _e.getIndustriesList({scope:"active"}).then(n=>{T.value=n.data})}async function X(){const n={clientId:d.value,departmentId:1};await x.getAllAchievements(n).then(u=>{R.value=u.data})}async function q(n=_()){const[u,r]=n,o={clientId:d.value,startDate:u,endDate:r,deliverableStatusId:5};await x.getClientsWithDeliverables(o).then(w=>
1{E.value=w.data})}async function Z(){await he.getAllBudgetsWithParams({clientId:d.value,scope:"active",serviceGroup:"2"}).then(n=>{A.value=n.data})}async function V(n,u=!1){let r=[...B.value];if(r=r.filter(o=>!k.value||!k.value.find(w=>w.client_id===o.id)),r.length>0){const o=r.map(w=>{const{id:U,website:z}=w,L=w.profiles.map($=>{const{identifier:H}=$;return{name:$.ProfileType.name,identifier:H}});return{id:U,profiles:L,website:z}});o.length>0&&await pe.getSeoDashboard(o,n[0],n[1],u).then(w=>{f.value=!1,k.value.push(...w.data)}).catch(()=>{t(),f.value=!0})}}function ce(n,u,r=!1){O.value=n,f.value=!1,(u||r)&&(k.value=[],q(n)),s.value||V(n,r)}async function ee(n=!1){s.value=!0,n||await Promise.allSettled([N(),J(),Z(),X(),q(),K()]),await V(g()),s.value=!1}return G(async()=>{await P(),await ee()}),{__sfc:!0,props:a,showErrorNotification:t,departmentId:e,serviceGroupName:l,loading:s,allClients:v,selectedClient:b,show:h,dialogTitle:y,filters:c,error:f,budgets:A,websites:S,seoData:I,industries:T,achievements:R,deliverables:E,report:k,reportDate:O,divisions:W,filteredClients:B,clientIds:d,clientResults:D,showModal:M,closeDialog:Y,defaultReportRange:g,effectiveReportRange:_,getAllClients:P,getWebsites:N,getSeoData:J,getIndustries:K,getAchievements:X,getDeliverables:q,getSEOBudgetBreakout:Z,getDashboardData:V,refreshReport:ce,getData:ee,DashboardTableFilters:De,ClientAchievements:Be,ClientDeliverables:Le,ImplementationNotes:Ve,SEODashboardTable:Je}}};var Xe=function(){var a=this,t=a._self._c,e=a._self._setupProxy;return t("div",[t("div",{staticClass:"px-6 pt-6"},[t(e.DashboardTableFilters,{attrs:{"my-clients":a.myClients,clients:e.allClients,departmentId:e.departmentId,divisions:e.divisions,loading:e.loading,"hide-sort-by-change":!0,"show-division-filter":!0,"skip-initial-fetch":!0},on:{fetch:e.refreshReport},model:{value:e.filters,callback:function(l){e.filters=l},expression:"filters"}})],1),e.error?t("v-toolbar",{staticClass:"mb-6",attrs:{flat:""}},[t("v-toolbar-title",[t("div",{staticClass:"bg-red-700 text-white p-3 font-bold rounded animate-pulse text-lg uppercase"},[a._v(" There was an error while getting the data. Please refresh this page and try again! ")])])],1):a._e(),t("div",{staticClass:"px-6"},[t(e.SEODashboardTable,{attrs:{clients:e.clientResults,loading:e.loading},on:{show:e.showModal}})],1),t("v-dialog",{attrs:{"max-width":"1400",width:"90%",persistent:""},model:{value:e.show.dialog,callback:function(l){a.$set(e.show,"dialog",l)},expression:"show.dialog"}},[t("v-card",{attrs:{color:"py-3"}},[t("v-card-title",{staticClass:"flex justify-between"},[t("span",{staticClass:"text-xl md:text-3xl tracking-tight font-bold"},[a._v(a._s(e.dialogTitle))]),t("span",{on:{click:e.closeDialog}},[t("i",{staticClass:"fas fa-times text-gray-400 hover:text-gray-500 cursor-pointer"})])]),t("v-card-text",{staticClass:"p-0 mt-5"},[e.show.seoImplementationNotes?t(e.ImplementationNotes,{attrs:{departmentId:e.departmentId,client:e.selectedClient},on:{close:e.closeDialog}}):a._e(),e.show.achievements?t(e.ClientAchievements,{attrs:{client:e.selectedClient,departmentId:e.departmentId},on:{close:e.closeDialog,refresh:e.getAchievements}}):a._e(),e.show.deliverables?t(e.ClientDeliverables,{attrs:{client:e.selectedClient,date:e.effectiveReportRange()},on:{close:e.closeDialog,refresh:e.getDeliverables}}):a._e()],1)],1)],1)],1)},Ze=[],et=F(Ke,Xe,Ze,!1,null,null);const _t=et.exports;export{_t as default};
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.