PageSourceSearch

https://home.co.uk/build/assets/MapPinModal-wChd9LX2.js

js home.co.uk collected 2026-10-02 04:56:11 UTC 6,264 bytes, 11 lines download raw bytes

1import{u as T}from"./index.esm-C8-Okse2.js";import{S as P}from"./app-Dvzl3QXw.js";import{r as p,s as z,B as _,G as $,o as u,a as h,w as E,b as l,f as C,t as b,g as M,d as I,u as y,h as F,y as D}from"./runtime-dom.esm-bundler-BFbfmLfl.js";import{M as V}from"./map-pin-7NBWNz8E.js";import{L as O}from"./loader-circle-BOF4Rcg5.js";import"./_commonjsHelpers-D6-XlEtG.js";/* empty css            */import"./echo-Cx0reEeH.js";import"./listingImageRemint-DdzXd0Qc.js";import"./chevron-left-BqH44XVe.js";import"./createLucideIcon-H8VPBXjN.js";import"./_plugin-vue_export-helper-DlAUqK2U.js";import"./search-DRuNnyPk.js";import"./x-gRRgfAF8.js";import"./piggy-bank-C2v63urG.js";import"./chevron-down-CV0HnoXa.js";import"./check-CYOYuDcY.js";import"./sparkles-B9lXBQmj.js";import"./circle-alert-ByG7DPjo.js";import"./house-BnH-U5r3.js";import"./LoginModal-BMeMPme8.js";import"./lock-BQyHxR7C.js";import"./shield-xlcuWJAH.js";import"./file-text-CxktRaAP.js";import"./key-round-CDOVxIO1.js";import"./SavePropertyModal-C2h6jxhG.js";const U={class:"flex flex-col h-full"},q={class:"flex-1 overflow-hidden flex flex-col"},G={key:0,class:"mx-4 mt-3 rounded-xl bg-red-50 border border-red-200 p-3 text-sm text-red-700"},H={class:"flex-1 min-h-0"},R={key:1,class:"px-4 py-3 bg-white border-t border-gray-100"},A={class:"flex items-center justify-between"},J={class:"flex items-center gap-2"},K={class:"flex size-6 items-center justify-center rounded-full bg-gray-900"},Q={class:"text-xs text-gray-600"},W={class:"font-mono"},X={class:"flex-shrink-0 border-t border-gray-200 px-6 py-4"},Y={class:"flex items-center justify-end gap-3"},Z=["disabled"],Be={__name:"MapPinModal",props:{modelValue:{type:Boolean,default:!1},branchId:{type:[Number,String],default:null},initialLat:{type:Number,default:null},initialLng:{type:Number,default:null},branchName:{type:String,default:""},apiPrefix:{type:String,default:"/admin/crm/branches"},localOnly:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(f,{emit:B}){const w=T().props.mapboxToken||"",o=f,m=B,v=p(null),g=p(!1),c=p(""),n=p(null),r=p(null);let d=null,i=null;const x=p(!1),N=()=>new Promise(t=>{if(window.mapboxgl){t();return}if(!document.querySelector('link[href*="mapbox-gl"]')){const a=document.createElement("link");a.rel="stylesheet",a.href="https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.css",document.head.appendChild(a)}const e=document.createElement("script");e.src="https://api.mapbox.com/mapbox-gl-js/v3.0.1/mapbox-gl.js",e.onload=()=>t(),document.head.appendChild(e)}),j=async()=>{if(await N(),await _(),!v.value||!w)return;mapboxgl.accessToken=w;const t=o.initialLat&&o.initialLng,e=t?[o.initialLng,o.initialLat]:[-1.5,54],a=t?14:5.5;d=new mapboxgl.Map({container:v.value,style:"mapbox://styles/mapbox/streets-v12",center:e,zoom:a,maxBounds:[[-12,48],[4,62]]}),d.addControl(new mapboxgl.NavigationControl({showCompass:!1}),"top-right"),t&&k(o.initialLat,o.initialLng),d.on("click",s=>{k(s.lngLat.lat,s.lngLat.lng)})},k=(t,e)=>{n.value=t,r.value=e,x.value=!0,i&&i.remove();const a=document.createElement("div");a.innerHTML=`
2        <div style="display: flex; flex-direction: column; align-items: center; cursor: grab;">
3            <div style="width: 32px; height: 32px; background: #111827; border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 8px rgba(0,0,0,0.3); display: flex; align-items: center; justify-content: center;">
4                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
5                    <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/>
6                    <circle cx="12" cy="10" r="3"/>
7                </svg>
8            </div>
9            <div style="width: 2px; height: 6px; background: #111827;"></div>
10        </div>
11    `,i=new mapboxgl.Marker({element:a,draggable:!0,anchor:"bottom"}).setLngLat([e,t]).addTo(d),i.on("dragend",()=>{const s=i.getLngLat();n.value=s.lat,r.value=s.lng})},S=async()=>{var t,e;if(!(!n.value||!r.value)){if(o.localOnly){m("saved",{lat:n.value,lng:r.value}),m("update:modelValue",!1);return}if(o.branchId){g.value=!0,c.value="";try{const a=await D.post(`${o.apiPrefix}/${o.branchId}/coordinates`,{latitude:n.value,longitude:r.value});m("saved",a.data.coordinates),m("update:modelValue",!1)}catch(a){c.value=((e=(t=a.response)==null?void 0:t.data)==null?void 0:e.message)||"Failed to save coordinates"}finally{g.value=!1}}}},L=()=>
11{i&&(i.remove(),i=null),d&&(d.remove(),d=null)};return z(()=>o.modelValue,async t=>{t?(c.value="",n.value=o.initialLat,r.value=o.initialLng,x.value=!!(o.initialLat&&o.initialLng),await _(),setTimeout(j,100)):L()}),$(L),(t,e)=>(u(),h(P,{"model-value":f.modelValue,"onUpdate:modelValue":e[1]||(e[1]=a=>t.$emit("update:modelValue",a)),title:"Set Map Location",subtitle:f.branchName||"Click the map to drop a pin",width:"560px"},{default:E(()=>{var a,s;return[l("div",U,[l("div",q,[e[2]||(e[2]=l("div",{class:"px-4 py-3 bg-gray-50 border-b border-gray-100"},[l("p",{class:"text-xs text-gray-600"}," Click anywhere on the map to place a pin. Drag the pin to adjust. This sets the exact coordinates used for map searches. ")],-1)),c.value?(u(),C("div",G,b(c.value),1)):M("",!0),l("div",H,[l("div",{ref_key:"mapContainer",ref:v,class:"w-full h-full",style:{"min-height":"400px"}},null,512)]),x.value?(u(),C("div",R,[l("div",A,[l("div",J,[l("div",K,[I(y(V),{class:"size-3 text-white"})]),l("div",Q,[l("span",W,b((a=n.value)==null?void 0:a.toFixed(6))+", "+b((s=r.value)==null?void 0:s.toFixed(6)),1)])])])])):M("",!0)]),l("div",X,[l("div",Y,[l("button",{type:"button",onClick:e[0]||(e[0]=te=>t.$emit("update:modelValue",!1)),class:"rounded-xl px-4 py-2.5 text-sm font-medium text-gray-600 hover:bg-gray-100 transition-colors"}," Cancel "),l("button",{type:"button",onClick:S,disabled:g.value||!x.value,class:"flex items-center gap-2 rounded-xl bg-gray-900 px-5 py-2.5 text-sm font-medium text-white shadow-sm transition-all hover:bg-gray-800 disabled:cursor-not-allowed disabled:opacity-50"},[g.value?(u(),h(y(O),{key:0,class:"size-4 animate-spin"})):(u(),h(y(V),{key:1,class:"size-4"})),e[3]||(e[3]=F(" Save Location ",-1))],8,Z)])])])]}),_:1},8,["model-value","subtitle"]))}};export{Be 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.