PageSourceSearch

https://www.creatorsenseai.com/app/assets/AdminFeedbackTab-DCSMf1Wp.js

js creatorsenseai.com collected 2026-10-02 01:27:03 UTC 7,062 bytes, 1 lines download raw bytes

1import{A as E}from"./AsyncState-C1wY1NSf.js";import{M as H}from"./MasterDataTable-PTWiW2Qq.js";import"./creatorFieldHelp-BrZsjpkG.js";import"./FieldLabel-DcFbp3Rs.js";import{C as O}from"./ChromeButton-DmiFifbd.js";import"./DataTable-DiOue6-9.js";import{M as P}from"./MetricGrid-DMaQt6lc.js";import{A as z}from"./AdminTabToolbar-DQnD-zBS.js";import{D as G}from"./Drawer-CnuouW7X.js";import{S as C}from"./SectionHeader-60mU8zeF.js";import{_ as N,a as F}from"./SelectInput-IwCsbmZN.js";import{T as Q}from"./Textarea-HcEnmNRI.js";import{k as M,e as J,c as B,w as K,C as $,D as c,y as A,z as T,K as S,G as U,H as y,J as R,Q as l,L,r as m,_ as j,u}from"./vendor-misc-5pJBpqhN.js";import{_ as x,k as D}from"./index-BNPflmqD.js";import{P as q,Q as W,R as X,S as Y}from"./adminApi-CoQuaOSc.js";import{g as Z}from"./vendor-vue-BIDZeepx.js";import"./ChromeCard-DkvfllPh.js";import"./useBreakpoint-DOQrj9xp.js";import"./breakpoints-Cr7fi6TV.js";import"./arrow-up-8FIemuBW.js";import"./vendor-utils-CxkvrZ9U.js";import"./format-W5H20hG1.js";import"./PageToolbar-C0IR3MXo.js";import"./FormField-DE1ZP62A.js";import"./chevron-down-CSJg0qTM.js";import"./vendor-tanstack-B6ELLr_Q.js";import"./vendor-sentry-84cD2ryj.js";const ee={class:"admin-feedback-drawer__meta"},ae={key:0},te={class:"admin-feedback-drawer__message"},se={class:"admin-feedback-drawer__grid"},ne={class:"admin-feedback-drawer__actions"},ie=M({__name:"AdminFeedbackDrawer",props:{open:{type:Boolean},feedback:{},admins:{},saving:{type:Boolean}},emits:["update:open","save"],setup(a,{emit:p}){const r=a,k=p,g=["new","under_review","in_progress","resolved","closed"],d=["low","medium","high","critical"],s=J({status:"new",priority:"medium",assignee_id:"",admin_notes:""}),_=B(()=>[{value:"",label:"Unassigned"},...r.admins.map(e=>({value:e.id,label:e.display_name}))]);K(()=>r.feedback,e=>{s.status=(e==null?void 0:e.status)??"new",s.priority=(e==null?void 0:e.priority)??"medium",s.assignee_id=(e==null?void 0:e.assigneeId)??"",s.admin_notes=(e==null?void 0:e.adminNotes)??""},{immediate:!0});function v(e,t){s[e]=t}function b(e){s.assignee_id=e}function i(){r.feedback&&k("save",r.feedback.id,{status:s.status,priority:s.priority,assignee_id:s.assignee_id||null,admin_notes:s.admin_notes})}return(e,t)=>{var o;return A(),$(G,{open:a.open,title:((o=a.feedback)==null?void 0:o.title)??"Feedback",size:"lg","onUpdate:open":t[4]||(t[4]=n=>e.$emit("update:open",n))},{default:c(()=>[a.feedback?(A(),T(L,{key:0},[S("p",ee,[U(y(a.feedback.type)+" · from "+y(a.feedback.creatorName)+" ",1),a.feedback.creatorEmail?(A(),T("span",ae," ("+y(a.feedback.creatorEmail)+")",1)):R("",!0)]),l(C,{title:"Message"}),S("p",te,y(a.feedback.message||"No message provided."),1),l(C,{title:"Triage"}),S("div",se,[l(F,{label:"Status"},{default:c(()=>[l(N,{"model-value":s.status,options:g,"onUpdate:modelValue":t[0]||(t[0]=n=>v("status",n))},null,8,["model-value"])]),_:1}),l(F,{label:"Priority"},{default:c(()=>[l(N,{"model-value":s.priority,options:d,"onUpdate:modelValue":t[1]||(t[1]=n=>v("priority",n))},null,8,["model-value"])]),_:1}),l(F,{label:"Assignee"},{default:c(()=>[l(N,{"model-value":s.assignee_id,options:_.value,"onUpdate:modelValue":t[2]||(t[2]=n=>b(n))},null,8,["model-value","options"])]),_:1})]),l(F,{label:"Admin notes"},{default:c(()=>[l(Q,{modelValue:s.admin_notes,"onUpdate:modelValue":t[3]||(t[3]=n=>s.admin_notes=n),rows:3,placeholder:"Internal notes"},null,8,["modelValue"])]),_:1}),S("div",ne,[l(O,{variant:"primary",loading:a.saving,onClick:i},{default:c(()=>[...t[5]||(t[5]=[U("Save changes",-1)])]),_:1},8,["loading"])])],64)):R("",!0)]),_:1},8,["open","title"])}}}),oe=x(ie,[["__scopeId","data-v-6d8715cd"]]);function le(a){return{id:String(a.id??""),type:String(a.type??"—"),title:String(a.title??"—"),message:String(a.message??""),status:String(a.status??"new"),priority:a.priority?String(a.priority):null,adminNotes:a.admin_notes?String(a.admin_notes):null,creatorName:String(a.creator_name??"Unknown"),creatorEmail:a.creator_email?String(a.creator_email):null,assigneeId:a.assignee_id?String(a.assignee_id):null,assigneeName:a.assignee_name?String(a.assignee_name):null,createdAt:a.created_at?String(a.created_at):null}}function re(){const a=Z(),p=m(!0),r=m(null),k=m(null),g=m([]),d=m(null),s=m([]),_=m(null);async function v(){p.value=!0,r.value=null;try{const[i,e,t]=await Promise.all([q({page_size:100}),W().catch(()=>null),X().catch(()=>[])]),o=Array.isArray(i)?i:(i==null?void 0:i.items)??[];g.value=o.map(le);const n=e;d.value=n?{total:Number(n.total??0),unassigned:Number(n.unassigned??0),avgResolutionH
1ours:n.avg_resolution_time_hours??null}:null,s.value=t,k.value=new Date}catch(i){r.value=D(i,"Failed to load feedback")}finally{p.value=!1}}async function b(i,e){var t;_.value=i;try{await Y(i,e);const o=g.value.find(n=>n.id===i);o&&(e.status!=null&&(o.status=e.status),e.priority!=null&&(o.priority=e.priority),e.admin_notes!=null&&(o.adminNotes=e.admin_notes),e.assignee_id!==void 0&&(o.assigneeId=e.assignee_id,o.assigneeName=((t=s.value.find(n=>n.id===e.assignee_id))==null?void 0:t.display_name)??null)),a.success("Feedback updated")}catch(o){a.error(D(o,"Update failed"))}finally{_.value=null}}return j(v),{loading:p,error:r,lastUpdated:k,rows:g,stats:d,admins:s,updatingId:_,refresh:v,updateFeedback:b}}const de={class:"admin-tab"},ue={class:"admin-feedback__status"},me=M({__name:"AdminFeedbackTab",setup(a){const{loading:p,error:r,lastUpdated:k,rows:g,stats:d,admins:s,updatingId:_,refresh:v,updateFeedback:b}=re(),i=m(!1),e=m(null),t=B(()=>d.value?[{id:"total",label:"Total",value:String(d.value.total)},{id:"unassigned",label:"Unassigned",value:String(d.value.unassigned)},{id:"resolution",label:"Avg resolution",value:d.value.avgResolutionHours!=null?`${d.value.avgResolutionHours}h`:"—"}]:[]),o=[{key:"title",label:"Title"},{key:"type",label:"Type"},{key:"priority",label:"Priority"},{key:"status",label:"Status"},{key:"assigneeName",label:"Assignee"}];function n(h){e.value=g.value.find(f=>f.id===h.id)??null,i.value=!!e.value}async function I(h,f){await b(h,f),i.value=!1}return(h,f)=>{var V;return A(),T("div",de,[l(z,{loading:u(p),"last-updated":u(k),onRefresh:u(v)},null,8,["loading","last-updated","onRefresh"]),l(E,{loading:u(p),error:u(r),onRetry:u(v)},{default:c(()=>[t.value.length?(A(),$(P,{key:0,items:t.value},null,8,["items"])):R("",!0),l(H,{class:"admin-feedback__card",title:"Feedback",description:"Click a row to triage and assign.","count-label":"items",columns:o,rows:u(g),"default-sort-key":"title",layout:"table","row-clickable":"","empty-label":"No feedback","priority-columns":["title","status"],onRowClick:n},{"cell-status":c(({value:w})=>[S("span",ue,y(w),1)]),"cell-assigneeName":c(({value:w})=>[U(y(w??"Unassigned"),1)]),_:1},8,["rows"])]),_:1},8,["loading","error","onRetry"]),l(oe,{open:i.value,"onUpdate:open":f[0]||(f[0]=w=>i.value=w),feedback:e.value,admins:u(s),saving:u(_)===((V=e.value)==null?void 0:V.id),onSave:I},null,8,["open","feedback","admins","saving"])])}}}),He=x(me,[["__scopeId","data-v-21212070"]]);export{He 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.