PageSourceSearch

https://portal.clickheredigital.com/assets/PerformanceRemindersAudit-CYoETw50.js

js clickheredigital.com collected 2026-09-24 13:10:02 UTC 19,183 bytes, 1 lines download raw bytes

1import{i as I,n as C,N as Y,r as u,w as q,c as g,j as f,I as K,bh as F,z as x,d as z,o as V,E as G,U as J,u as Q}from"./index-C3PRlZvS.js";import{P as W}from"./PageHeader-PLupPr9R.js";import{C as X}from"./ClientLink-CuuBmMiC.js";const B={getAudit(o={}){return I.get("/reminders/audit",o)},getAuditMetrics(o={}){return I.get("/reminders/audit/metrics",o)}},Z={__name:"AuditFilters",props:{clients:{type:Array,default:()=>[]},users:{type:Array,default:()=>[]},state:{type:String,default:"all"}},emits:["change"],setup(o,{emit:e}){const t=o,s=Y({clientId:null,departmentId:null,ownerId:null,status:null,state:"all",startDate:null,endDate:null}),a=u([]),r=[{text:"Active",value:"active"},{text:"Logged",value:"logged"},{text:"Dismissed",value:"dismissed"},{text:"Opted Out",value:"opted_out"}],n=[{text:"All",value:"all"},{text:"Due",value:"due"},{text:"Overdue",value:"overdue"},{text:"Snoozed",value:"snoozed"},{text:"Upcoming",value:"upcoming"},{text:"Past",value:"past"}];q(()=>t.state,c=>{c!==s.state&&(s.state=c)});const m=g(()=>f.sortBy(f.uniqBy(f.flatMap(t.users,c=>c.departments||[]),"id"),"name").map(c=>({id:c.id,name:c.name}))),i=g(()=>s.departmentId?t.users.filter(c=>f.some(c.departments,{id:s.departmentId})):t.users),d=()=>{e("change",{...s})};return{__sfc:!0,props:t,emit:e,filters:s,dateRange:a,statusOptions:r,stateOptions:n,departments:m,ownerOptions:i,emitChange:d,onDepartmentChange:()=>{s.ownerId&&!i.value.some(c=>c.id===s.ownerId)&&(s.ownerId=null),d()},applyDates:c=>{a.value=c;const[k,y]=[...c].sort();s.startDate=k,s.endDate=y,d()},clearDates:()=>{a.value=[],s.startDate=null,s.endDate=null,d()},DatePickerField:K}}};var ee=function(){var e=this,t=e._self._c,s=e._self._setupProxy;return t("v-row",{staticClass:"mb-1",attrs:{dense:""}},[t("v-col",{attrs:{cols:"12",sm:"6",md:"4"}},[t("v-autocomplete",{attrs:{items:e.clients,"item-text":"name","item-value":"id",label:"Client","prepend-inner-icon":"fas fa-building",clearable:"","hide-details":"",dense:"",filled:""},on:{change:s.emitChange},model:{value:s.filters.clientId,callback:function(a){e.$set(s.filters,"clientId",a)},expression:"filters.clientId"}})],1),t("v-col",{attrs:{cols:"12",sm:"6",md:"4"}},[t("v-autocomplete",{attrs:{items:s.departments,"item-text":"name","item-value":"id",label:"Department","prepend-inner-icon":"fas fa-users",clearable:"","hide-details":"",dense:"",filled:""},on:{change:s.onDepartmentChange},model:{value:s.filters.departmentId,callback:function(a){e.$set(s.filters,"departmentId",a)},expression:"filters.departmentId"}})],1),t("v-col",{attrs:{cols:"12",sm:"6",md:"4"}},[t("v-autocomplete",{attrs:{items:s.ownerOptions,"item-text":"name","item-value":"id",label:"Owner","prepend-inner-icon":"fas fa-user",clearable:"","hide-details":"",dense:"",filled:""},on:{change:s.emitChange},model:{value:s.filters.ownerId,callback:function(a){e.$set(s.filters,"ownerId",a)},expression:"filters.ownerId"}})],1),t("v-col",{attrs:{cols:"6",sm:"4",md:"4"}},[t("v-select",{attrs:{items:s.statusOptions,label:"Status","prepend-inner-icon":"fas fa-circle",clearable:"","hide-details":"",dense:"",filled:""},on:{change:s.emitChange},model:{value:s.filters.status,callback:function(a){e.$set(s.filters,"status",a)},expression:"filters.status"}})],1),t("v-col",{attrs:{cols:"6",sm:"4",md:"4"}},[t("v-select",{attrs:{items:s.stateOptions,label:"Timeframe","prepend-inner-icon":"fas fa-clock","hide-details":"",dense:"",filled:""},on:{change:s.emitChange},model:{value:s.filters.state,callback:function(a){e.$set(s.filters,"state",a)},expression:"filters.state"}})],1),t("v-col",{attrs:{cols:"12",sm:"4",md:"4"}},[t(s.DatePickerField,{attrs:{menu:"",range:"",value:s.dateRange,"display-format":"MM/DD/YYYY","no-title":"","ok-label":"Apply",label:"Reminder Date","prepend-inner-icon":"fas fa-calendar",dense:"",filled:"","hide-details":"",clearable:""},on:{input:s.applyDates,"click:clear":s.clearDates}})],1)],1)},te=[],se=C(Z,ee,te,!1,null,null);const ae=se.exports,S=[{key:"active",label:"active",color:"blue",fill:"bg-blue-500"},{key:"logged",label:"logged",color:"green",fill:"bg-green-500"},{key:"dismissed",label:"dismissed",color:"grey",fill:"bg-gray-400"}
1,{key:"opted_out",label:"opted out",color:"orange",fill:"bg-orange-500"}],M=f.keyBy(S,"key");function U(o){var e;return((e=M[o])==null?void 0:e.color)||"grey"}function L(o){var e;return((e=M[o])==null?void 0:e.label)||o}const re={__name:"AuditMetrics",props:{metrics:{type:Object,required:!0},activeState:{type:String,default:"all"}},emits:["select"],setup(o,{emit:e}){const t=o,s=g(()=>{const i=t.metrics.totals||{};return[{label:"Total",state:"all",value:i.total??0,icon:"fas fa-bell",bar:"bg-gray-400",iconColor:"grey--text",activeRing:"ring-2 ring-gray-400"},{label:"Due Now",state:"due",value:i.dueNow??0,icon:"fas fa-clock",bar:"bg-orange-400",iconColor:"orange--text text--darken-2",activeRing:"ring-2 ring-orange-400"},{label:"Overdue",state:"overdue",value:i.overdue??0,icon:"fas fa-exclamation-triangle",bar:"bg-red-500",iconColor:"red--text",activeRing:"ring-2 ring-red-500"},{label:"Snoozed",state:"snoozed",value:i.snoozed??0,icon:"fas fa-moon",bar:"bg-indigo-400",iconColor:"indigo--text",activeRing:"ring-2 ring-indigo-400"}]}),a=i=>{e("select",i.state===t.activeState?"all":i.state)},r=g(()=>{const i=t.metrics.statusCounts||{},d=f.sumBy(S,v=>i[v.key]||0)||1;return S.map(v=>({...v,count:i[v.key]||0,width:`${(i[v.key]||0)/d*100}%`}))});return{__sfc:!0,props:t,emit:e,tiles:s,onTileClick:a,statusSegments:r,breakdownHeaders:[{text:"Name",value:"name"},{text:"Total",value:"reminderCount",align:"end"},{text:"Logged",value:"loggedCount",align:"end"},{text:"Done",value:"completion",align:"end",sortable:!1}],rate:(i,d)=>d?`${Math.round(i/d*100)}%`:"—"}}};var ne=function(){var e=this,t=e._self._c,s=e._self._setupProxy;return t("div",[t("div",{staticClass:"grid grid-cols-2 md:grid-cols-3 xl:grid-cols-5 gap-3 mb-3"},[e._l(s.tiles,function(a){return t("div",{key:a.label,staticClass:"relative bg-white border border-solid rounded-lg p-4 overflow-hidden cursor-pointer select-none transition-all duration-150 hover:shadow-md hover:-translate-y-px focus:outline-none focus-visible:ring-2 focus-visible:ring-primary",class:a.state===e.activeState?`${a.activeRing} border-transparent shadow-sm`:"border-gray-200 hover:border-gray-300",attrs:{role:"button",tabindex:"0","aria-pressed":`${a.state===e.activeState}`},on:{click:function(r){return s.onTileClick(a)},keydown:[function(r){return!r.type.indexOf("key")&&e._k(r.keyCode,"enter",13,r.key,"Enter")?null:(r.preventDefault(),s.onTileClick(a))},function(r){return!r.type.indexOf("key")&&e._k(r.keyCode,"space",32,r.key,[" ","Spacebar"])?null:(r.preventDefault(),s.onTileClick(a))}]}},[t("div",{staticClass:"absolute top-0 left-0 h-full transition-all duration-150",class:[a.bar,a.state===e.activeState?"w-1.5":"w-1"]}),t("div",{staticClass:"flex items-center justify-between"},[t("span",{staticClass:"text-xs font-semibold uppercase tracking-wider text-gray-500"},[e._v(" "+e._s(a.label)+" ")]),t("v-icon",{class:a.iconColor,attrs:{small:""}},[e._v(e._s(a.icon))])],1),t("div",{staticClass:"mt-2 text-3xl font-bold text-gray-800 tabular-nums"},[e._v(" "+e._s(a.value)+" ")])])}),t("div",{staticClass:"relative bg-white border border-solid border-gray-200 rounded-lg p-4 flex items-center gap-4"},[t("v-progress-circular",{attrs:{value:e.metrics.completionRate,size:64,width:7,color:"success"}},[t("span",{staticClass:"text-sm font-bold text-gray-700"},[e._v(e._s(e.metrics.completionRate)+"%")])]),t("div",[t("div",{staticClass:"text-xs font-semibold uppercase tracking-wider text-gray-500"},[e._v("Completion")]),t("div",{staticClass:"mt-1 text-sm text-gray-600"},[e._v(" "+e._s(e.metrics.loggedCount)+" of "+e._s(e.metrics.subscriberCount)+" logged ")])])],1)],2),t("div",{staticClass:"bg-white border border-solid border-gray-200 rounded-lg p-4 mb-3"},[t("div",{staticClass:"text-xs font-semibold uppercase tracking-wider text-gray-500 mb-3"},[e._v(" Subscriber Status ")]),t("div",{staticClass:"flex h-2.5 w-full rounded-full overflow-hidden bg-gray-100 mb-3"},e._l(s.statusSegments,function(a){return t("div",{key:a.key,class:a.fill,style:{width:a.width}})}),0),t("div",{staticClass:"flex flex-wrap gap-x-6 gap-y-1"},e._l(s.statusSegments,function(a){return t("div",{key:`legend-${a.key}`,staticClass:"flex items-center gap-2"},[t("span",{staticClass:"inline-block h-2.5 w-2.5 rounded-full",class:a.fill}),t("span",{staticClass:"text-sm text-gray-600 capitalize"},[e._v(e._s(a.label))]),t("span",{staticClass:"text-sm font-semibold text-gray-800 tabular-nums"},[e._v(e._s(a.count))])])}),0)]),t("div",{staticClass:"grid grid-cols-1 lg:grid-cols-2 gap-3"},[t("div",{staticClass:"bg-white border border-solid border-gray-200 rounded-lg overflow-hidden"},[t("div",{staticClass:"px-4 py-3 text-xs font-semibold uppercase tracking-wider text-gray-500 border-b border-solid border-gray-100"},[e._v(" Top Clients ")]),t("v-data-table",{staticClass:"audit-breakdown",attrs:{headers:s.breakdownHeaders,items:e.metrics.byClient,"items-per-page":5,dense:"","no-data-text":"No clients in range"}
1,scopedSlots:e._u([{key:"item.completion",fn:function({item:a}){return[e._v(" "+e._s(s.rate(a.loggedCount,a.reminderCount))+" ")]}}])})],1),t("div",{staticClass:"bg-white border border-solid border-gray-200 rounded-lg overflow-hidden"},[t("div",{staticClass:"px-4 py-3 text-xs font-semibold uppercase tracking-wider text-gray-500 border-b border-solid border-gray-100"},[e._v(" Top Owners ")]),t("v-data-table",{staticClass:"audit-breakdown",attrs:{headers:s.breakdownHeaders,items:e.metrics.byOwner,"items-per-page":5,dense:"","no-data-text":"No owners in range"},scopedSlots:e._u([{key:"item.completion",fn:function({item:a}){return[e._v(" "+e._s(s.rate(a.loggedCount,a.reminderCount))+" ")]}}])})],1)])])},ie=[],le=C(re,ne,ie,!1,null,"55786450");const oe=le.exports,ce={__name:"AuditTable",props:{reminders:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},total:{type:Number,default:0},page:{type:Number,default:1},itemsPerPage:{type:Number,default:25},sortBy:{type:String,default:"remindAt"},sortDesc:{type:Boolean,default:!0}},emits:["view","options"],setup(o,{emit:e}){return{__sfc:!0,emit:e,headers:[{text:"Client",value:"Client.name",width:180},{text:"Owner",value:"creator.name",width:140},{text:"Original Note",value:"ClientActivity.body",sortable:!1},{text:"Reminder Date",value:"remindAt",width:150},{text:"Subscribers",value:"subscribers",sortable:!1,width:150},{text:"",value:"actions",sortable:!1,align:"end",width:80}],isSnoozed:r=>r.snoozedUntil&&z(r.snoozedUntil).isAfter(z(),"day"),summaryChips:r=>Object.entries(r.subscriberSummary||{}).filter(([,n])=>n>0).map(([n,m])=>({key:n,count:m,label:L(n),color:U(n)})),formatDate:x,truncateText:F,ClientLink:X}}};var de=function(){var e=this,t=e._self._c,s=e._self._setupProxy;return t("v-data-table",{staticClass:"elevation-1",attrs:{headers:s.headers,items:e.reminders,loading:e.loading,"server-items-length":e.total,page:e.page,"items-per-page":e.itemsPerPage,"sort-by":e.sortBy,"sort-desc":e.sortDesc,"must-sort":"","footer-props":{"items-per-page-options":[25,50,100]},"no-data-text":"No reminders match the current filters"},on:{"update:options":function(a){return s.emit("options",a)}},scopedSlots:e._u([{key:"item.Client.name",fn:function({item:a}){return[a.Client?t(s.ClientLink,{key:`client-${a.Client.id}`,attrs:{client:a.Client}}):t("span",{staticClass:"text-gray-500"},[e._v("—")])]}},{key:"item.creator.name",fn:function({item:a}){var r;return[e._v(" "+e._s(((r=a.creator)==null?void 0:r.name)||"—")+" ")]}},{key:"item.ClientActivity.body",fn:function({item:a}){var r;return[t("span",{staticClass:"text-gray-700"},[e._v(e._s(s.truncateText((r=a.ClientActivity)==null?void 0:r.body,44)||"—"))])]}},{key:"item.remindAt",fn:function({item:a}){return[t("div",{staticClass:"flex items-center gap-1 whitespace-nowrap"},[e._v(" "+e._s(s.formatDate(a.remindAt))+" "),s.isSnoozed(a)?t("v-chip",{staticClass:"ml-1",attrs:{"x-small":"",color:"indigo",outlined:""}},[e._v("snoozed")]):e._e()],1)]}},{key:"item.subscribers",fn:function({item:a}){return[t("div",{staticClass:"flex flex-wrap gap-1"},e._l(s.summaryChips(a),function(r){return t("v-chip",{key:r.key,attrs:{"x-small":"",color:r.color,"text-color":"white"}},[e._v(" "+e._s(r.count)+" "+e._s(r.label)+" ")])}),1)]}},{key:"item.actions",fn:function({item:a}){return[t("v-btn",{attrs:{"x-small":"",outlined:"",color:"primary"},on:{click:function(r){return s.emit("view",a)}}},[e._v("View")])]}}])})},ue=[],me=C(ce,de,ue,!1,null,null);const ve=me.exports,pe={__name:"ReminderAuditDetailDialog",props:{reminder:{type:Object,default:null}},emits:["close"],setup(o,{emit:e}){const t=o,s=g(()=>{var r;return((r=t.reminder)==null?void 0:r.subscribers)||[]}),a=g(()=>{var n,m,i;if(!t.reminder)return[];const r=t.reminder;return[{label:"Owner",value:((n=r.creator)==null?void 0:n.name)||"—"},{label:"Activity Type",value:((i=(m=r.ClientActivity)==null?void 0:m.ClientActivityType)==null?void 0:i.name)||"—"},{label:"Reminder Date",value:x(r.remindAt)},{label:"Snoozed Until",value:r.snoozedUntil?x(r.snoozedUntil):"—"},{label:"Baseline Period",value:`${x(r.baselineStartDate)} – ${x(r.baselineEndDate)}`},{label:"Subscribers",value:s.value.length}]});return{__sfc:!0,props:t,emit:e,subscribers:s,fields:a,truncateText:F,reminderStatusColor:U,reminderStatusLabel:L}}};var fe=function(){var a,r;var e=this,t=e._self._c,s=e._self._setupProxy;return t("v-dialog",{attrs:{value:!0,"max-width":"720",scrollable:""},on:{input:function(n){return s.emit("close")}}},[e.reminder?t("v-card",[t("v-card-title",{staticClass:"d-flex justify-space-between align-start"},[t("div",[t("div",{staticClass:"text-lg font-semibold text-gray-800"},[e._v("Performance Reminder")]),t("div",{staticClass:"text-sm text-gray-500"},[e._v(e._s(((a=e.reminder.Client)==null?void 0:a.name)||"Unknown Client"))])]),t("v-btn",{attrs:{icon:"",small:""},on:{click:function(n){return s.emit("close")}}},[t("v-icon",{attrs:{small:""}},[e._v("fas fa-times")])],1)],1),t("v-divider"),t("v-card-text",{staticClass:"pt-4"},[t("div",{staticClass:"grid grid-cols-2 gap-x-6 gap-y-4 mb-4"},e._l(s.fields,function(n){return t("div",{key:n.label},[t("div",{staticClass:"text-xs font-semibold uppercase tracking-wider text-gray-500"},[e._v(" "+e._s(n.label)+" ")]),t("div",{staticClass:"text-sm text-gray-800 mt-1"},[e._v(e._s(n.value))])])}),0),t("div",{staticClass:"mb-4"},[t("div",{staticClass:"text-xs font-semibold uppercase tracking-wider text-gray-500 mb-1"},[e._v(" Original Note ")]),t("div",{staticClass:"text-sm text-gray-700 bg-gray-100 rounded p-3",domProps:{innerHTML:e._s(((r=e.reminder.ClientActivity)==null?void 0:r.body)||"No note recorded.")}})]),t("div",[t("div",{staticClass:"text-xs font-semibold uppercase tracking-wider text-gray-500 mb-2"},[e._v(" Subscribers ("+e._s(s.subscribers.length)+") ")]),t("v-simple-table",{attrs:{dense:""},scopedSlots:e._u([{key:"default",fn:function(){return[t("thead",[t("tr",[t("th",{staticClass:"text-left"},[e._v("Name")]),t("th",{staticClass:"text-left"},[e._v("Status")]),t("th",{staticClass:"text-left"},[e._v("Logged Update")])])]),t("tbody",[e._l(s.subscribers,function(n,m){return t("tr",{key:`${n.userId}-${m}`},[t("td",[e._v(e._s(n.name||`User #${n.userId}`))]),t("td",[t("v-chip",{staticClass:"capitalize",attrs:{"x-small":"",color:s.reminderStatusColor(n.status),"text-color":"white"}},[e._v(" "+e._s(s.reminderStatusLabel(n.status))+" ")])],1),t("td",{staticClass:"py-2"},[n.loggedNote?t("span",{staticClass:"text-gray-700",attrs:{title:s.truncateText(n.loggedNote,1e3)}
1},[e._v(" "+e._s(s.truncateText(n.loggedNote,90))+" ")]):t("span",{staticClass:"text-gray-400"},[e._v("—")])])])}),s.subscribers.length?e._e():t("tr",[t("td",{staticClass:"text-gray-500",attrs:{colspan:"3"}},[e._v("No subscribers.")])])],2)]},proxy:!0}],null,!1,188922933)})],1)]),t("v-divider"),t("v-card-actions",[t("v-spacer"),t("v-btn",{attrs:{text:""},on:{click:function(n){return s.emit("close")}}},[e._v("Close")])],1)],1):e._e()],1)},ge=[],_e=C(pe,fe,ge,!1,null,null);const be=_e.exports,ye={__name:"PerformanceRemindersAudit",setup(o){const{showErrorNotification:e}=Q(),t=u([]),s=u([]),a=u([]),r=u(null),n=u(!1),m=u(null),i=u({state:"all"}),d=u(1),v=u(25),w=u(0),_=u("remindAt"),c=u(!0),k=g(()=>i.value.state||"all"),y=()=>f.omitBy(i.value,(l,b)=>l===null||l===""||b==="state"&&l==="all"),A=()=>{const l={...y(),page:d.value,limit:v.value};return _.value&&(l.sortBy=_.value,l.sortDesc=c.value),l},h=async()=>{n.value=!0;try{const{data:l}=await B.getAudit(A());a.value=l.rows||[],w.value=l.total||0}catch{e("Error loading performance reminder audit data.")}finally{n.value=!1}},P=async()=>{try{const{data:l}=await B.getAuditMetrics(f.omit(y(),"state"));r.value=l}catch{e("Error loading performance reminder audit data.")}},D=()=>Promise.all([P(),h()]),j=l=>{i.value=l,d.value=1,D()},E=l=>{i.value={...i.value,state:l},d.value=1,h()},H=l=>{var O,T;const b=((O=l.sortBy)==null?void 0:O[0])??null,p=((T=l.sortDesc)==null?void 0:T[0])??!1,$=b!==_.value||p!==c.value,N=$?1:l.page;N===d.value&&l.itemsPerPage===v.value&&!$||(_.value=b,c.value=p,d.value=N,v.value=l.itemsPerPage,h())},R=async()=>{try{const[l,b]=await Promise.all([G.getClientList({withFields:["id","name","slug"]}),J.getManyUsers({userTypeId:1,active:!0,withFields:["id","firstName","lastName","email"]})]);t.value=l.data||[],s.value=(b.data||[]).map(p=>({...p,name:p.fullName||`${p.firstName||""} ${p.lastName||""}`.trim()||p.email}))}catch{e("Error loading filter options.")}};return V(()=>{R(),D()}),{__sfc:!0,showErrorNotification:e,clients:t,users:s,reminders:a,metrics:r,loading:n,selectedReminder:m,filters:i,page:d,itemsPerPage:v,total:w,sortBy:_,sortDesc:c,activeState:k,buildParams:y,buildAuditParams:A,loadAudit:h,loadMetrics:P,load:D,onFilterChange:j,onT
1ileSelect:E,onOptionsChange:H,loadFilterOptions:R,PageHeader:W,AuditFilters:ae,AuditMetrics:oe,AuditTable:ve,ReminderAuditDetailDialog:be}}};var xe=function(){var e=this,t=e._self._c,s=e._self._setupProxy;return t("section",[t(s.PageHeader,{scopedSlots:e._u([{key:"right",fn:function(){return[t("v-btn",{attrs:{small:"",outlined:"",color:"primary",loading:s.loading},on:{click:s.load}},[t("v-icon",{attrs:{"x-small":"",left:""}},[e._v("fas fa-rotate-right")]),e._v(" Refresh ")],1)]},proxy:!0}])},[e._v(" Performance Reminders Audit ")]),t("v-divider"),t("div",{staticClass:"px-3 md:px-6 py-4"},[t(s.AuditFilters,{attrs:{clients:s.clients,users:s.users,state:s.activeState},on:{change:s.onFilterChange}}),s.metrics?t(s.AuditMetrics,{staticClass:"mb-4",attrs:{metrics:s.metrics,"active-state":s.activeState},on:{select:s.onTileSelect}}):e._e(),t(s.AuditTable,{attrs:{reminders:s.reminders,loading:s.loading,total:s.total,page:s.page,"items-per-page":s.itemsPerPage,"sort-by":s.sortBy,"sort-desc":s.sortDesc},on:{options:s.onOptionsChange,view:function(a){s.selectedReminder=a}}})],1),s.selectedReminder?t(s.ReminderAuditDetailDialog,{attrs:{reminder:s.selectedReminder},on:{close:function(a){s.selectedReminder=null}}}):e._e()],1)},Ce=[],he=C(ye,xe,Ce,!1,null,null);const Se=he.exports;export{Se 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.