Add checked store and set data

This commit is contained in:
Jon Staab
2024-11-14 08:33:11 -08:00
parent 2d89c152b1
commit b296067e55
6 changed files with 35 additions and 4 deletions

View File

@@ -1,9 +1,10 @@
import twColors from "tailwindcss/colors"
import {get, derived} from "svelte/store"
import {get, derived, writable} from "svelte/store"
import {nip19} from "nostr-tools"
import type {Maybe} from "@welshman/lib"
import {
ctx,
now,
setContext,
remove,
assoc,
@@ -16,6 +17,7 @@ import {
nthEq,
shuffle,
parseJson,
prop,
} from "@welshman/lib"
import {
getIdFilters,
@@ -259,6 +261,14 @@ export const deriveEventsForUrl = (url: string, filters: Filter[]) =>
),
)
// Last checked timestamps, notifications
export const checked = writable<Record<string, number>>({})
export const deriveChecked = (key: string) => derived(checked, prop(key))
export const setChecked = (key: string, ts = now()) => checked.update(assoc(key, ts))
// Settings
export const SETTINGS = 38489

View File

@@ -1,6 +1,12 @@
<script lang="ts">
import {onMount} from "svelte"
import {page} from "$app/stores"
import Chat from "@app/components/Chat.svelte"
import {setChecked} from "@app/state"
onMount(() => {
setChecked($page.url.pathname)
})
</script>
<Chat id={$page.params.chat} />

View File

@@ -1,4 +1,5 @@
<script lang="ts">
import {onMount} from "svelte"
import {page} from "$app/stores"
import {deriveRelay} from "@welshman/app"
import Icon from "@lib/components/Icon.svelte"
@@ -10,7 +11,7 @@
import ProfileFeed from "@app/components/ProfileFeed.svelte"
import RelayName from "@app/components/RelayName.svelte"
import RelayDescription from "@app/components/RelayDescription.svelte"
import {decodeRelay} from "@app/state"
import {decodeRelay, setChecked} from "@app/state"
import {pushDrawer} from "@app/modal"
import {makeChatPath} from "@app/routes"
@@ -20,6 +21,10 @@
const openMenu = () => pushDrawer(MenuSpace, {url})
$: pubkey = $relay?.profile?.pubkey
onMount(() => {
setChecked($page.url.pathname)
})
</script>
<div class="relative flex flex-col">

View File

@@ -8,6 +8,7 @@
</script>
<script lang="ts">
import {onMount} from "svelte"
import {page} from "$app/stores"
import {sortBy, append} from "@welshman/lib"
import type {TrustedEvent, EventContent} from "@welshman/util"
@@ -33,6 +34,7 @@
MESSAGE,
COMMENT,
getMembershipRoomsByUrl,
setChecked,
} from "@app/state"
import {addRoomMembership, removeRoomMembership} from "@app/commands"
import {pushDrawer} from "@app/modal"
@@ -89,6 +91,10 @@
elements.reverse()
}
onMount(() => {
setChecked($page.url.pathname)
})
setTimeout(() => {
loading = false
}, 5000)

View File

@@ -14,7 +14,7 @@
import EventItem from "@app/components/EventItem.svelte"
import EventCreate from "@app/components/EventCreate.svelte"
import {pushModal, pushDrawer} from "@app/modal"
import {deriveEventsForUrl, pullConservatively, decodeRelay} from "@app/state"
import {deriveEventsForUrl, pullConservatively, decodeRelay, setChecked} from "@app/state"
const url = decodeRelay($page.params.relay)
const kinds = [EVENT_DATE, EVENT_TIME]
@@ -54,6 +54,8 @@
.slice(0, limit)
onMount(() => {
setChecked($page.url.pathname)
const sub = subscribe({filters: [{kinds, since: ago(30)}]})
pullConservatively({filters: [{kinds}], relays: [url]})

View File

@@ -15,7 +15,7 @@
import MenuSpace from "@app/components/MenuSpace.svelte"
import ThreadItem from "@app/components/ThreadItem.svelte"
import ThreadCreate from "@app/components/ThreadCreate.svelte"
import {THREAD, COMMENT, decodeRelay} from "@app/state"
import {THREAD, COMMENT, decodeRelay, setChecked} from "@app/state"
import {pushModal, pushDrawer} from "@app/modal"
const url = decodeRelay($page.params.relay)
@@ -33,6 +33,8 @@
let events: TrustedEvent[] = []
onMount(() => {
setChecked($page.url.pathname)
let unmounted = false
const ctrl = createFeedController({