diff --git a/app.js b/app.js new file mode 100644 index 0000000..5ce35d7 --- /dev/null +++ b/app.js @@ -0,0 +1,93 @@ +// app.js +import { + commentsCollection, addDoc, query, orderBy, onSnapshot +} from "./firebase.js"; + +// Leafletマップ初期化 +const map = L.map("map").setView([35.681236, 139.767125], 13); +L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { + maxZoom: 19, +}).addTo(map); + +const markers = []; + +// コメント履歴表示関数 +function addCommentToHistory({ comment, timestamp, docId }) { + const list = document.getElementById("comments-list"); + if (!list) return; + + // 既に表示済みならスキップ(重複防止) + if (list.querySelector(`[data-doc-id="${docId}"]`)) return; + + const entry = document.createElement("div"); + entry.className = "history-entry"; + entry.dataset.docId = docId; + entry.innerHTML = ` +
日時: ${timestamp?.toDate().toLocaleString() || "読み込み中..."}
+${comment}
+ `; + list.appendChild(entry); +} + +// Firestoreのコメントをリアルタイム取得して地図・履歴に表示 +function loadComments() { + const commentsList = document.getElementById("comments-list"); + if (commentsList) commentsList.innerHTML = ""; + + markers.forEach(m => map.removeLayer(m)); + markers.length = 0; + + const q = query(commentsCollection, orderBy("timestamp", "asc")); + + onSnapshot(q, (snapshot) => { + snapshot.docChanges().forEach(change => { + const data = change.doc.data(); + const docId = change.doc.id; + + if (change.type === "added") { + addCommentToHistory({ ...data, docId }); + + const marker = L.marker([data.lat, data.lng]).addTo(map); + marker.docId = docId; + markers.push(marker); + + marker.bindPopup(` +日時: ${data.timestamp?.toDate().toLocaleString()}
+コメント: ${data.comment}
+