1import{e as y,w as le,o as ne,k as o,l,B as j,C as ie,A as de,n as t,F as x,t as $,p as u,v as r,y as d,D as ce,$ as ue,q as L,a as _,g}from"./_plugin-vue_export-helper-D-DLBFXG.js";import{A as pe}from"./AuthenticatedLayout-BJfSs0SQ.js";import{h as he}from"./app-CIT4hbzU.js";import{u as ye,T as ge}from"./ToastMessage-DSYX9ovi.js";import{_ as me}from"./InputLabel-aaeK22A4.js";import"./Modal-CFNr_Hq7.js";import"./useTheme-CQu7LMDX.js";import"./useJennaRestrictedSettingsNav-BIi3IGix.js";import"./index-P0QL1Peh.js";import"./index-Dh0--Pjx.js";/* empty css *//* empty css */const ve={class:"min-h-screen py-8 px-6 md:px-10 lg:px-12"},xe={class:"max-w-5xl w-full mx-auto"},_e={key:0,class:"rounded-lg border border-amber-200 dark:border-amber-500/25 bg-amber-50/60 dark:bg-amber-500/5 p-5"},be={class:"mt-4 divide-y divide-amber-200/70 dark:divide-amber-500/15"},ke={class:"min-w-0"},fe={class:"text-sm text-gray-900 dark:text-gray-100 truncate"},we={key:0,class:"text-gray-500"},$e={class:"mt-0.5 text-xs text-gray-500 truncate"},Ce={key:0},Re={key:1},Ae=["disabled","onClick"],De={key:1,class:"mt-4 mb-4 rounded-lg border border-purple-200 dark:border-purple-500/25 bg-purple-50/60 dark:bg-purple-500/5 p-5"},Ie={class:"mt-4 divide-y divide-purple-200/70 dark:divide-purple-500/15"},Se={class:"min-w-0"},Ne={class:"text-sm text-gray-900 dark:text-gray-100 truncate"},Te={key:0,class:"text-gray-500"},Xe={class:"mt-0.5 text-xs text-gray-500 truncate"},Me={key:0},je=["disabled","onClick"],Le={class:"rounded-lg border border-gray-200 dark:border-[hsla(220,20%,40%,.2)] bg-white dark:bg-[hsla(220,20%,20%,.15)] p-5"},Be=["value"],Ee={key:0,class:"mt-4 pt-4 border-t border-gray-100 dark:border-[hsla(220,20%,40%,.12)]"},Ve={class:"flex items-start justify-between gap-4"},Pe={class:"text-xs text-gray-500"},He=["disabled"],Ke={key:1,class:"mt-4 pt-4 border-t border-gray-100 dark:border-[hsla(220,20%,40%,.12)]"},Oe={class:"flex items-start justify-between gap-4"},We=["disabled"],Fe={key:0,class:"mt-3"},Ge={class:"flex flex-wrap items-center gap-2"},qe={class:"font-mono text-[12px] px-2 py-1 rounded bg-gray-100 dark:bg-gray-900 dark:text-gray-200 break-all"},ze={key:0},Ue={key:1},Je={key:2,class:"mt-5 rounded-lg border border-gray-200 dark:border-[hsla(220,20%,40%,.2)] bg-white dark:bg-[hsla(220,20%,20%,.15)] p-5"},Qe={class:"flex items-center justify-between"},Ye={class:"flex items-center gap-4"},Ze=["disabled"],et=["disabled"],tt={class:"mt-3 flex flex-wrap gap-6 text-sm"},st={class:"font-bold"},at={class:"font-bold"},rt={class:"font-bold"},ot={key:0,class:"mt-4 overflow-x-auto"},lt={class:"w-full text-sm"},nt={class:"py-2 font-mono text-[12px]"},it={class:"py-2"},dt={class:"py-2"},ct={class:"py-2 text-gray-500 truncate max-w-[200px]"},ut={class:"py-2 whitespace-nowrap"},pt={key:0,class:"text-gray-400"},ht={key:1,class:"text-green-600 dark:text-green-400"},yt={key:2,class:"text-amber-600 dark:text-amber-400"},gt={key:3,class:"text-gray-400"},mt={key:4,class:"text-gray-500"},vt={class:"py-2 text-right"},xt=["onClick"],_t={key:1,class:"mt-4 text-sm text-gray-500"},bt={key:2,class:"mt-5"},kt={class:"mt-2 flex flex-wrap gap-4 text-sm"},ft={class:"font-mono text-[12px] text-gray-500"},wt={class:"ml-1 font-bold"},$t={key:3,class:"mt-5 rounded-lg border border-gray-200 dark:border-[hsla(220,20%,40%,.2)] bg-white dark:bg-[hsla(220,20%,20%,.15)] p-5"},Ct={class:"text-xs uppercase tracking-wide text-gray-400"},Rt={class:"font-mono normal-case"},At={class:"mt-2 text-sm text-gray-500"},Dt={key:0},It={class:"mt-3 flex flex-wrap gap-2"},St=["disabled"],Nt=["disabled"],Tt={key:0,class:"mt-4 overflow-x-auto"},Xt={class:"w-full text-sm"},Mt={class:"py-2"},jt={class:"py-2"},Lt={class:"py-2 font-mono text-[12px]"},Bt={class:"py-2"},Et={class:"py-2 truncate max-w-[200px]"},Vt={class:"py-2"},Pt={key:0,class:"text-red-600 dark:text-red-400"},Ht={key:1,class:"text-amber-600 dark:text-amber-400"},Kt={key:2,class:"text-green-600 dark:text-green-400"},Ot={class:"py-2 text-gray-500 truncate max-w-[200px]"},Wt={key:0,class:"font-mono text-[12px]"},Ft={key:1},Gt={key:2},qt={key:4,class:"mt-5 rounded-lg border border-gray-200 dark:border-[hsla(220,20%,40%,.2)] bg-white dark:bg-[hsla(220,20%,20%,.15)] p-5"},zt={key:0,class:"mt-3 text-sm text-red-600 dark:text-red-400"},Ut={class:"mt-3 overflow-x-auto"},Jt={class:"w-full text-sm"},Qt={class:"py-2 font-mono text-[12px]"},Yt={class:"py-2"},Zt={class:"py-2 truncate max-w-[180px]"},es={class:"py-2 text-gray-500"},ts={class:"py-2 text-gray-500 truncate max-w-[220px]"},q="info",ys={__name:"IdxMigrationGaps",props:{migrations:{type:Array,default:()=>[]},pausedAccounts:{type:Array,default:()=>[]},enrolmentAccounts:{type:Array,default:()=>[]}},setup(z){const R=z,{showToast:c}=ye(),m=y(""),I=y(null),b=y(null),v=y([]),k=y([]),B=y(!1),i=y(null),f=g(()=>i.value!==null),S=g(()=>{var a;return((a=I.value)==null?void 0:a.params)??[]}),N=g(()=>{var a;return((a=I.value)==null?void 0:a.totals)??null}),V=g(()=>{var a;return Object.entries(((a=I.value)==null?void 0:a.skipped)??{})}),U=["documented_gap","no_aeroidx_filter"],J=a=>a.param!==q&&(a.reasons??[]).some(s=>U.includes(s)),Q=g(()=>v.value.filter(a=>(a.other_gaps??[]).length===0&&!a.blocked_by_shape).length),A=g(()=>v.value.filter(a=>a.blocked_by_shape).length),T=()=>m.value===""?{}:{migration:m.value},C=g(()=>R.migrations.find(a=>String(a.id)===String(m.value))??null);async function Y(){var a,s;i.value="resume";try{const{data:e}=await _.post(route("admin.idx-migrations.resume-notifications"),{migration:m.value});C.value&&(C.value.paused_searches=0),c("success",e.resumed>0?`${e.resumed} search${e.resumed===1?"":"es"} will start alerting on the next digest.`:"Nothing was paused for this client.")}catch(e){c("error",((s=(a=e.response)==null?void 0:a.data)==null?void 0:s.message)||"Couldn't resume notifications.")}finally{i.value=null}}const X=y(R.pausedAccounts.map(a=>({...a})));async function Z(a){var s,e;i.value=`account:${a.owner_id}`;try{const{data:n}=await _.post(route("admin.idx-migrations.resume-notifications"),{owner:a.owner_id});X.value=X.value.filter(h=>h.owner_id!==a.owner_id),R.migrations.forEach(h=>{h.user_id===a.owner_id&&(h.paused_searches=0)}),c("success",n.resumed>0?`${n.resumed} search${n.resumed===1?"":"es"} will start alerting on the next digest.`:"Nothing was paused for this account.")}catch(n){c("error",((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.message)||"Couldn't resume notifications.")}finally{i.value=null}}const P=y(R.enrolmentAccounts.map(a=>({...a}))),H=a=>
1a?new Date(a).toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"}):"";function ee(a){const s=a.last_run;if(a.running)return`enrolling since ${H(s==null?void 0:s.started_at)} â reload to follow it`;if((s==null?void 0:s.status)==="finished"){const e=s.failed?`, ${s.failed} failed`:"";return`enrolled ${H(s.finished_at)} (${s.enrolled} of ${s.leads}${e})`}return"not enrolled yet"}async function te(a){var s,e;i.value=`enroll:${a.owner_id}`;try{const{data:n}=await _.post(route("admin.idx-migrations.enroll-imported-leads"),{owner:a.owner_id});n.leads>0&&(a.running=!0,a.last_run={status:"running",started_at:new Date().toISOString(),leads:n.leads}),a.leads=n.leads,c("success",n.leads>0?`Enrolling ${n.leads} lead${n.leads===1?"":"s"} in the background, about two a second.`:"This account has no imported leads to enrol.")}catch(n){c("error",((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.message)||"Couldn't start the enrolment.")}finally{i.value=null}}const p=y(null);async function se(){var a,s;i.value="reveal";try{const{data:e}=await _.post(route("admin.idx-migrations.access-key"),{migration:m.value});p.value=e}catch(e){c("error",((s=(a=e.response)==null?void 0:a.data)==null?void 0:s.message)||"Couldn't reveal the key.")}finally{i.value=null}}async function ae(){try{await navigator.clipboard.writeText(p.value.access_key),c("success","Key copied to the clipboard.")}catch{c("error","Couldn't copy automatically â select the key and copy it manually.")}}const K=g(()=>{var a;return(((a=p.value)==null?void 0:a.age_days)??0)>30}),D=y(null);async function re(){var a,s;i.value="recheck";try{const{data:e}=await _.get(route("admin.idx-migrations.recheck"),{params:T()});D.value=e;const n=S.value.filter(h=>w(h).state==="resolved").length;c("success",n>0?`${n} filter${n===1?"":"s"} no longer missing.`:"No filter has been resolved yet.")}catch(e){c("error",((s=(a=e.response)==null?void 0:a.data)==null?void 0:s.message)||"Couldn't re-check the archive.")}finally{i.value=null}}function w(a){var e;if(!D.value)return{state:"unknown"};if((D.value.unreplayable??[]).includes(a.param))return{state:"unreplayable"};const s=((e=D.value.params)==null?void 0:e[a.param])??0;return s===0?{state:"resolved",now:s}:s<a.records?{state:"improved",now:s}:{state:"open",now:s}}async function M(){var a,s;B.value=!0;try{const{data:e}=await _.get(route("admin.idx-migrations.gaps"),{params:T()});I.value=e.report}catch(e){c("error",((s=(a=e.response)==null?void 0:a.data)==null?void 0:s.message)||"Couldn't load the gap report.")}finally{B.value=!1}}async function O(a){var s,e;b.value=a,v.value=[],k.value=[];try{const{data:n}=await _.get(route("admin.idx-migrations.records"),{params:{param:a,...T()}});v.value=n.records}catch(n){c("error",((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.message)||"Couldn't load the records.")}}async function W(a){var s,e;i.value=a?"apply":"preview";try{const{data:n}=await _.post(route("admin.idx-migrations.remap"),{...T(),param:b.value,apply:a});k.value=n.rows;const h=(n.counts.activated??0)+(n.counts.created??0);if(a)c("success",h>0?`${h} search${h===1?"":"es"} switched on.`:"Nothing was eligible to switch on."),await O(b.value),await M();else{const E=n.counts.would_activate??0;c("success",E>0?`${E} search${E===1?"":"es"} would be switched on.`:"No search maps cleanly yet.")}}catch(n){c("error",((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.message)||"The remap could not be run.")}finally{i.value=null}}const F=g(()=>k.value.filter(a=>a.outcome==="would_activate").length),G=g(()=>k.value.filter(a=>a.outcome==="no_dictionary").length),oe=a=>a==="would_activate"||a==="activated"||a==="created"?"text-green-600 dark:text-green-400":a==="lead_opted_out"?"text-amber-600 dark:text-amber-400":a==="error"||a==="no_dictionary"?"text-red-600 dark:text-red-400":"text-gray-500 dark:text-gray-400";return le(m,()=>{D.value=null,b.value=null,v.value=[],k.value=[],p.value=null,M()}),ne(M),(a,s)=>(o(),l(x,null,[j(ie(he),{title:"IDX migration gaps"}),j(pe,null,{default:de(()=>[j(ge),t("div",ve,[t("div",xe,[s[23]||(s[23]=t("div",{class:"mb-6"},[t("h1",{class:"text-2xl font-bold font-clash text-[#111827] dark:text-white"}," IDX migration gaps "),t("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Filters real client searches asked for that we could not carry, ranked by how many re
1cords wanted each one â then the searches waiting on them. Reads the source archive, so it keeps working after the client's IDX key is cancelled. ")],-1)),X.value.length?(o(),l("div",_e,[s[4]||(s[4]=t("h2",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," Accounts with muted searches ",-1)),s[5]||(s[5]=t("p",{class:"mt-1 text-xs text-gray-600 dark:text-gray-400"}," Imported searches send nothing until the mute is lifted â they were silenced so the lead is not alerted by two platforms at once. Lift it once the client has cancelled the platform they came from. Searches the lead had switched off, and every held search, stay off. ",-1)),t("ul",be,[(o(!0),l(x,null,$(X.value,e=>(o(),l("li",{key:e.owner_id,class:"flex items-start justify-between gap-4 py-3 first:pt-0 last:pb-0"},[t("div",ke,[t("div",fe,[u(r(e.label)+" ",1),e.brokerage_name?(o(),l("span",we," · "+r(e.brokerage_name),1)):d("",!0)]),t("div",$e,[e.email?(o(),l("span",Ce,r(e.email)+" · ",1)):d("",!0),u(" account "+r(e.owner_id)+" · "+r(e.paused_searches)+" search"+r(e.paused_searches===1?"":"es")+" muted ",1),e.muted_since?(o(),l("span",Re," since "+r(e.muted_since),1)):d("",!0)])]),t("button",{type:"button",class:"shrink-0 text-xs text-purple-600 dark:text-purple-400 hover:underline disabled:opacity-50",disabled:f.value,onClick:n=>Z(e)},r(i.value===`account:${e.owner_id}`?"Resumingâ¦":"Resume notifications"),9,Ae)]))),128))])])):d("",!0),P.value.length?(o(),l("div",De,[s[6]||(s[6]=t("h2",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," Imported leads and the HighLevel workflow ",-1)),s[7]||(s[7]=t("p",{class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},' The saved-search workflow only picks up a lead when a "Saved Property Search" note lands on their contact, and an import writes none. Enrolling writes that note to every imported lead, about two a second, so their daily digest can start. Running it again notes them again; HighLevel skips contacts already in the workflow. Leads with muted searches are not counted until the mute is lifted. ',-1)),t("ul",Ie,[(o(!0),l(x,null,$(P.value,e=>{var n;return o(),l("li",{key:e.owner_id,class:"flex items-start justify-between gap-4 py-3 first:pt-0 last:pb-0"},[t("div",Se,[t("div",Ne,[u(r(e.label)+" ",1),e.brokerage_name?(o(),l("span",Te," · "+r(e.brokerage_name),1)):d("",!0)]),t("div",Xe,[e.email?(o(),l("span",Me,r(e.email)+" · ",1)):d("",!0),u(" account "+r(e.owner_id)+" · "+r(e.leads)+" imported lead"+r(e.leads===1?"":"s")+" · "+r(ee(e)),1)])]),t("button",{type:"button",class:"shrink-0 text-xs text-purple-600 dark:text-purple-400 hover:underline disabled:opacity-50",disabled:f.value||e.running,onClick:h=>te(e)},r(i.value===`enroll:${e.owner_id}`?"Startingâ¦":e.running?"Enrollingâ¦":((n=e.last_run)==null?void 0:n.status)==="finished"?"Enroll again":"Enroll in HighLevel"),9,je)])}),128))])])):d("",!0),t("div",Le,[j(me,{for:"migration",value:"Migration"}),ce(t("select",{id:"migration","onUpdate:modelValue":s[0]||(s[0]=e=>m.value=e),class:"mt-1 block w-full rounded-md border-gray-300 dark:border-gray-600 dark:bg-gray-900 dark:text-gray-200 text-sm focus:border-purple-500 focus:ring-purple-500"},[s[8]||(s[8]=t("option",{value:""},"All migrations",-1)),(o(!0),l(x,null,$(R.migrations,e=>(o(),l("option",{key:e.id,value:e.id}," #"+r(e.id)+" · "+r(e.created_at)+" · "+r(e.status)+" · "+r(e.imported_searches)+" searches ("+r(e.lossy_searches)+" held) ",9,Be))),128))],512),[[ue,m.value]]),s[10]||(s[10]=t("p",{class:"mt-3 text-xs text-gray-500"}," A held search imported but sends nothing until it is switched on here. ",-1)),C.value&&C.value.paused_searches>0?(o(),l("div",Ee,[t("div",Ve,[t("p",Pe,r(C.value.paused_searches)+" imported search"+r(C.value.paused_searches===1?" is":"es are")+" muted â the client was still on IDX Broker at migration time. Resume once they cancel it. Searches the lead had switched off, and every held search, stay off. ",1),t("button",{type:"button",class:"shrink-0 text-xs text-purple-600 dark:text-purple-400 hover:underline disabled:opacity-50",disabled:f.value,onClick:Y},r(i.value==="resume"?"Resumingâ¦":"Resume notifications"),9,He)])])):d("",!0),m.value!==""?(o(),l("div",Ke,[t("div",Oe,[s[9]||(s[9]=t("p",{class:"text-xs text-gray-500"}," The access key this client gave us at migration time, for calling IDX Broker directly when the archive cannot explain a search. Revealing it is logged. ",-1)),p.value?d("",!0):(o(),l("button",{key:0,t
1ype:"button",class:"shrink-0 text-xs text-purple-600 dark:text-purple-400 hover:underline disabled:opacity-50",disabled:f.value,onClick:se},r(i.value==="reveal"?"Revealingâ¦":"Reveal API key"),9,We))]),p.value?(o(),l("div",Fe,[t("div",Ge,[t("code",qe,r(p.value.access_key),1),t("button",{type:"button",class:"text-xs text-purple-600 dark:text-purple-400 hover:underline",onClick:ae}," Copy "),t("button",{type:"button",class:"text-xs text-gray-500 hover:underline",onClick:s[1]||(s[1]=e=>p.value=null)}," Hide ")]),t("p",{class:L(["mt-2 text-xs",K.value?"text-amber-600 dark:text-amber-400":"text-gray-500"])},[u(" Captured "+r(p.value.captured_at)+" ",1),p.value.age_days!==null?(o(),l("span",ze," · "+r(p.value.age_days)+" day"+r(p.value.age_days===1?"":"s")+" old ",1)):d("",!0),K.value?(o(),l("span",Ue," â IDX cancels keys on a rolling schedule, so check this one still authenticates before reading an empty result as a broken filter. ")):d("",!0)],2)])):d("",!0)])):d("",!0)]),N.value?(o(),l("div",Je,[t("div",Qe,[s[11]||(s[11]=t("div",{class:"text-xs uppercase tracking-wide text-gray-400"},"What to build next",-1)),t("div",Ye,[t("button",{type:"button",class:"text-xs text-purple-600 dark:text-purple-400 hover:underline disabled:opacity-50",disabled:f.value||!S.value.length,onClick:re},r(i.value==="recheck"?"Re-checkingâ¦":"Re-check against today's filters"),9,Ze),t("button",{type:"button",class:"text-xs text-purple-600 dark:text-purple-400 hover:underline",disabled:B.value,onClick:M}," Refresh ",8,et)])]),t("div",tt,[t("div",null,[s[12]||(s[12]=t("div",{class:"text-xs text-gray-400"},"Migrations",-1)),t("div",st,r(N.value.migrations),1)]),t("div",null,[s[13]||(s[13]=t("div",{class:"text-xs text-gray-400"},"Archived records",-1)),t("div",at,r(N.value.records),1)]),t("div",null,[s[14]||(s[14]=t("div",{class:"text-xs text-gray-400"},"Carrying a gap",-1)),t("div",rt,r(N.value.affected),1)])]),S.value.length?(o(),l("div",ot,[t("table",lt,[s[15]||(s[15]=t("thead",null,[t("tr",{class:"text-left text-xs uppercase tracking-wide text-gray-400 border-b border-gray-200 dark:border-[hsla(220,20%,40%,.2)]"},[t("th",{class:"py-2"},"IDX param"),t("th",{class:"py-2"},"Records"),t("th",{class:"py-2"},"Why"),t("th",{class:"py-2"},"Values seen"),t("th",{class:"py-2"},"Today"),t("th",{class:"py-2"})])],-1)),t("tbody",null,[(o(!0),l(x,null,$(S.value,e=>(o(),l("tr",{key:e.param,class:L(["border-b border-gray-100 dark:border-[hsla(220,20%,40%,.12)]",b.value===e.param?"bg-purple-50 dark:bg-[hsla(270,60%,40%,.12)]":""])},[t("td",nt,r(e.param),1),t("td",it,r(e.records),1),t("td",dt,[t("span",{class:L(J(e)?"text-purple-600 dark:text-purple-400":"text-gray-400")},r(e.param===q?"idx_warning":e.reasons.join(", ")),3)]),t("td",ct,r(e.values.join(", ")||"â"),1),t("td",ut,[w(e).state==="unknown"?(o(),l("span",pt,"â")):w(e).state==="resolved"?(o(),l("span",ht," resolved ")):w(e).state==="improved"?(o(),l("span",yt,r(w(e).now)+" left ",1)):w(e).state==="unreplayable"?(o(),l("span",gt," can't re-check ")):(o(),l("span",mt,r(w(e).now)+" still",1))]),t("td",vt,[t("button",{type:"button",class:"text-xs text-purple-600 dark:text-purple-400 hover:underline",onClick:n=>O(e.param)}," View records ",8,xt)])],2))),128))])]),s[16]||(s[16]=t("p",{class:"mt-3 text-xs text-gray-500"},[u(" Highlighted reasons are ours to build. "),t("span",{class:"font-mono"},"unsupported_on_board"),u(" means we already ship the filter and this board has no data for it; "),t("span",{class:"font-mono"},"unknown_value"),u(" means the board lacks that value; "),t("span",{class:"font-mono"},"idx_warning"),u(" is IDX's own note about the search (not a filter, so nothing to build â read the values to see what it said). "),t("span",{class:"block mt-1"},[t("strong",null,"Today"),u(" is blank until you re-check: the table itself is what the archive recorded on the day the migration ran, so it cannot know what we have shipped since. Re-checking replays every archived record against current coverage. "),t("span",{class:"font-mono"},"can't re-check"),u(" means the archive does not carry what produced that gap, so a replay can never reproduce it. ")])],-1))])):(o(),l("p",_t," No gaps recorded. Every archived record carried all of its filters. ")),V.value.length?(o(),l("div",bt,[s[17]||(s[17]=t("div",{class:"text-xs uppercase tracking-wide text-gray-400"}," Records skipped entirely ",-1)),t("div",kt,[(o(!0),l(x,null,$(V.value,([e,n])=>(o(),l("div",{key:e},[t("span",ft,r(e),1),t("span",wt,r(n),1)]))),128))])])):d("",!0)])):d("",!0),b.value?(o(),l("div",$t,[t("div",Ct,[s[18]||(s[18]=u(" Waiting on ",-1)),t("span",Rt,r(b.value),1)]),t("p",At,[u(r(v.value.length)+" record(s) â up to "+r(Q.value)+" could be switched on by building this one alone; the check below is what actually decides. ",1),A.value?(o(),l("span",Dt,r(A.value)+" "+r(A.value===1?"was":"were")+" rejected for "+r(A.value===1?"its":"their")+" shape (geography, a single listing, a lease) and no filter can rescue "+r(A.value===1?"it":"them")+". ",1)):d("",!0)]),t("div",It,[t("button",{type:"button",class:"px-4 py-2 rounded-md text-sm font-medium bg-gray-900 text-white hover:bg-gray-700 disabled:opacity-50",disabled:f.value,onClick:s[2]||(s[2]=e=>W(!1))},r(i.value==="preview"?"Checkingâ¦":"Check what would switch on"),9,St),t("button",{type:"button",class:"px-4 py-2 rounded-md text-sm font-medium bg-purple-600 text-white hover:bg-purple-700 disabled:opacity-50",disabled:f.value||F.value===0,onClick:s[3]||(s[3]=e=>W(!0))},r(i.value==="apply"?"Switching onâ¦":`Switch on ${F.value||""}`.trim()),9,Nt)]),s[20]||(s[20]=t("p",{class:"mt-2 text-xs text-gray-500"}
1," Only searches that replay with no gap left are switched on, and a lead who turned the search off in IDX stays off. Run the check first â the button above stays disabled until it finds something eligible. ",-1)),v.value.length?(o(),l("div",Tt,[t("table",Xt,[s[19]||(s[19]=t("thead",null,[t("tr",{class:"text-left text-xs uppercase tracking-wide text-gray-400 border-b border-gray-200 dark:border-[hsla(220,20%,40%,.2)]"},[t("th",{class:"py-2"},"Migration"),t("th",{class:"py-2"},"Kind"),t("th",{class:"py-2"},"IDX id"),t("th",{class:"py-2"},"Lead"),t("th",{class:"py-2"},"Name"),t("th",{class:"py-2"},"Outcome"),t("th",{class:"py-2"},"Still stuck on")])],-1)),t("tbody",null,[(o(!0),l(x,null,$(v.value,e=>(o(),l("tr",{key:`${e.migration_id}-${e.kind}-${e.idx_source_id}`,class:"border-b border-gray-100 dark:border-[hsla(220,20%,40%,.12)]"},[t("td",Mt,r(e.migration_id),1),t("td",jt,r(e.kind),1),t("td",Lt,r(e.idx_source_id),1),t("td",Bt,r(e.external_user_id??"â"),1),t("td",Et,r(e.name||"â"),1),t("td",Vt,[e.result==="skipped"?(o(),l("span",Pt," skipped ")):e.lossy?(o(),l("span",Ht," held (inactive) ")):(o(),l("span",Kt,"imported"))]),t("td",Ot,[e.blocked_by_shape?(o(),l("span",Wt,r(e.skip_reason),1)):e.other_gaps.length?(o(),l("span",Ft,r(e.other_gaps.join(", ")),1)):(o(),l("span",Gt,"â"))])]))),128))])])])):d("",!0)])):d("",!0),k.value.length?(o(),l("div",qt,[s[22]||(s[22]=t("div",{class:"text-xs uppercase tracking-wide text-gray-400"},"Remap result",-1)),G.value?(o(),l("p",zt,r(G.value)+" record(s) could not be replayed at all: this migration archived no feed dictionaries, so a city id decodes to nothing. Migrations that ran before dictionary archiving cannot be remapped â this says nothing about the searches themselves. ",1)):d("",!0),t("div",Ut,[t("table",Jt,[s[21]||(s[21]=t("thead",null,[t("tr",{class:"text-left text-xs uppercase tracking-wide text-gray-400 border-b border-gray-200 dark:border-[hsla(220,20%,40%,.2)]"},[t("th",{class:"py-2"},"IDX id"),t("th",{class:"py-2"},"Lead"),t("th",{class:"py-2"},"Name"),t("th",{class:"py-2"},"Was"),t("th",{class:"py-2"},"Outcome"),t("th",{class:"py-2"},"Detail")])],-1)),t("tbody",null,[(o(!0),l(x,null,$(k.value,e=>(o(),l("tr",{key:`${e.migration_id}-${e.idx_source_id}`,class:"border-b border-gray-100 dark:border-[hsla(220,20%,40%,.12)]"},[t("td",Qt,r(e.idx_source_id),1),t("td",Yt,r(e.external_user_id??"â"),1),t("td",Zt,r(e.name||"â"),1),t("td",es,r(e.was),1),t("td",{class:L(["py-2",oe(e.outcome)])},r(e.outcome),3),t("td",ts,r(e.detail),1)]))),128))])])])])):d("",!0)])])]),_:1})],64))}};export{ys 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.