// If you want to use Phoenix channels, run `mix help phx.gen.channel` // to get started and then uncomment the line below. // import "./user_socket.js" // You can include dependencies in two ways. // // The simplest option is to put them in assets/vendor and // import them using relative paths: // // import "../vendor/some-package.js" // // Alternatively, you can `npm install some-package --prefix assets` and import // them using a path starting with the package name: // // import "some-package" // // If you have dependencies that try to import CSS, esbuild will generate a separate `app.css` file. // To load it, simply add a second `` to your `root.html.heex` file. // Include phoenix_html to handle method=PUT/DELETE in forms and buttons. import "phoenix_html" // Establish Phoenix Socket and LiveView configuration. import {Socket} from "phoenix" import {LiveSocket} from "phoenix_live_view" import {hooks as colocatedHooks} from "phoenix-colocated/localspot" import topbar from "../vendor/topbar" // Custom hooks const Geolocation = { mounted() { this.el.addEventListener("click", () => { if ("geolocation" in navigator) { this.el.disabled = true this.el.textContent = "Getting location..." navigator.geolocation.getCurrentPosition( (position) => { this.pushEvent("set_location", { latitude: position.coords.latitude.toString(), longitude: position.coords.longitude.toString() }) }, (error) => { console.error("Geolocation error:", error) this.el.disabled = false this.el.textContent = "Use My Location" alert("Could not get your location. Please check your browser permissions.") } ) } else { alert("Geolocation is not supported by your browser.") } }) } } const LeafletMap = { mounted() { // Load Leaflet CSS dynamically if (!document.querySelector('link[href*="leaflet"]')) { const link = document.createElement('link') link.rel = 'stylesheet' link.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css' document.head.appendChild(link) } // Load Leaflet JS dynamically if (!window.L) { const script = document.createElement('script') script.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js' script.onload = () => this.initMap() document.head.appendChild(script) } else { this.initMap() } }, initMap() { const businesses = JSON.parse(this.el.dataset.businesses) const center = JSON.parse(this.el.dataset.center) const zoom = parseInt(this.el.dataset.zoom) // Clear the loading indicator this.el.innerHTML = '' // Initialize map this.map = L.map(this.el).setView([center.lat, center.lng], zoom) // Add OpenStreetMap tiles L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(this.map) // Add markers for each business this.markers = businesses.map(business => { const marker = L.marker([business.lat, business.lng]) .addTo(this.map) .bindPopup(`