diff --git a/src/lib/Firebase/messages.js b/src/lib/Firebase/messages.js index b216022..d834fb8 100644 --- a/src/lib/Firebase/messages.js +++ b/src/lib/Firebase/messages.js @@ -1,6 +1,8 @@ -import { collection, query, where, getDocs } from 'firebase/firestore'; // tools for building and running db queries +import { collection, query, where, getDocs, addDoc } from 'firebase/firestore'; // tools for building and running db queries import { db } from './config'; // database connection import { getQueryPrefix } from '$lib/utils/geohash'; // convert coordinates into geohash string +import { doc, updateDoc, increment, serverTimestamp } from 'firebase/firestore'; +import ngeohash from 'ngeohash'; export async function getNearbyMessages(lat, lng) { const prefix = getQueryPrefix(lat, lng); @@ -13,4 +15,37 @@ export async function getNearbyMessages(lat, lng) { const snapshot = await getDocs(q); return snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); +} + +export async function echoMessage(messageId) { + const ref = doc(db, 'messages', messageId); + await updateDoc(ref, { + echoCount: increment(1), + lastEchoAt: serverTimestamp() + }); +} + +export async function addMessage(lat, lng, text, imageUrl = ''){ + const geohash = ngeohash.encode(lat, lng, 6); + + await addDoc(collection(db, 'messages'), { + text, + imageUrl, + lat, + lng, + geohash, + createdAt: serverTimestamp(), + lastEchoAt: serverTimestamp(), + echoCount: 0, + sessionId: getSessionId() + }); +} + +function getSessionId() { + let id = localStorage.getItem('overheard_session'); + if (!id) { + id = crypto.randomUUID(); // created random useer id + localStorage.setItem('oveheard_session', id); + } + return id; } \ No newline at end of file diff --git a/src/lib/components/BottomSheet.svelte b/src/lib/components/BottomSheet.svelte index df45f62..9b4e001 100644 --- a/src/lib/components/BottomSheet.svelte +++ b/src/lib/components/BottomSheet.svelte @@ -1,7 +1,20 @@ @@ -10,11 +23,16 @@

{message.text}

-

- left {message.lat.toFixed(4)}, {message.lng.toFixed(4)} -

+ {#if decay} +

left {decay.daysAgo} days ago. fading in {decay.daysLeft} days.

+ {/if}
- + + Leave a message + {remaining} +
+ + + + + +
+ + + diff --git a/src/lib/components/SidePanel.svelte b/src/lib/components/SidePanel.svelte index e432286..324655d 100644 --- a/src/lib/components/SidePanel.svelte +++ b/src/lib/components/SidePanel.svelte @@ -1,18 +1,36 @@
{#if message}

{message.text}

-

- left {message.lat.toFixed(4)}, {message.lng.toFixed(4)} -

+ {#if decay} +

left {decay.daysAgo} days ago. fading in {decay.daysLeft} days.

+ {/if}
- + +{/if} + + +{#if $mapStore.composing} + +{/if} + + \ No newline at end of file