forked from coracle/flotilla
rename conversations to rooms
This commit is contained in:
@@ -1 +1,2 @@
|
|||||||
--ignore-dir=.svelte-kit
|
--ignore-dir=.svelte-kit
|
||||||
|
--ignore-dir=build
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
# Flotilla
|
# Flotilla
|
||||||
|
|
||||||
A discord-like nostr client. WIP.
|
A discord-like nostr client. WIP.
|
||||||
|
|
||||||
Figure out state management. Add fetched_at to all events. `fetch` batches and loads, `get` gets the value, `derive` returns a store. For optimization, create getters for everything that uses `get` a lot.
|
|
||||||
|
|||||||
+13
-13
@@ -669,36 +669,36 @@ export const groupMessages = deriveEventsMapped<GroupMessage>(repository, {
|
|||||||
itemToEvent: item => item.event,
|
itemToEvent: item => item.event,
|
||||||
})
|
})
|
||||||
|
|
||||||
// Group Conversations
|
// Group Chats
|
||||||
|
|
||||||
export type GroupConversation = {
|
export type GroupChat = {
|
||||||
nom: string
|
nom: string
|
||||||
messages: GroupMessage[]
|
messages: GroupMessage[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const groupConversations = derived(groupMessages, $groupMessages => {
|
export const groupChats = derived(groupMessages, $groupMessages => {
|
||||||
const groupMessagesByNom = groupBy($groupMessage => $groupMessage.nom, $groupMessages)
|
const groupMessagesByNom = groupBy($groupMessage => $groupMessage.nom, $groupMessages)
|
||||||
|
|
||||||
return Array.from(groupMessagesByNom.entries()).map(([nom, messages]) => ({nom, messages}))
|
return Array.from(groupMessagesByNom.entries()).map(([nom, messages]) => ({nom, messages}))
|
||||||
})
|
})
|
||||||
|
|
||||||
export const {
|
export const {
|
||||||
indexStore: groupConversationByNom,
|
indexStore: groupChatByNom,
|
||||||
getIndex: getGroupConversationsByNom,
|
getIndex: getGroupChatsByNom,
|
||||||
deriveItem: deriveGroupConversation,
|
deriveItem: deriveGroupChat,
|
||||||
loadItem: loadGroupConversation,
|
loadItem: loadGroupChat,
|
||||||
} = createCollection({
|
} = createCollection({
|
||||||
name: "groupConversations",
|
name: "groupChats",
|
||||||
store: groupConversations,
|
store: groupChats,
|
||||||
getKey: groupConversation => groupConversation.nom,
|
getKey: groupChat => groupChat.nom,
|
||||||
load: (nom: string, hints = [], request: Partial<SubscribeRequest> = {}) => {
|
load: (nom: string, hints = [], request: Partial<SubscribeRequest> = {}) => {
|
||||||
const relays = [...hints, ...(get(relayUrlsByNom).get(nom) || [])]
|
const relays = [...hints, ...(get(relayUrlsByNom).get(nom) || [])]
|
||||||
const conversation = get(groupConversations).find(c => c.nom === nom)
|
const chat = get(groupChats).find(c => c.nom === nom)
|
||||||
const timestamps = conversation?.messages.map(m => m.event.created_at) || []
|
const timestamps = chat?.messages.map(m => m.event.created_at) || []
|
||||||
const since = Math.max(0, max(timestamps) - 3600)
|
const since = Math.max(0, max(timestamps) - 3600)
|
||||||
|
|
||||||
if (relays.length === 0) {
|
if (relays.length === 0) {
|
||||||
console.warn(`Attempted to load conversation for ${nom} with no qualified groups`)
|
console.warn(`Attempted to load chat for ${nom} with no qualified groups`)
|
||||||
}
|
}
|
||||||
|
|
||||||
return load({...request, relays, filters: [{"#h": [nom], since}]})
|
return load({...request, relays, filters: [{"#h": [nom], since}]})
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div in:fly={{delay: 150}}>
|
<div in:fly={{delay: 150}}>
|
||||||
<SecondaryNavHeader>
|
<SecondaryNavHeader>
|
||||||
Conversations
|
Chats
|
||||||
<div class="cursor-pointer">
|
<div class="cursor-pointer">
|
||||||
<Icon icon="add-circle" />
|
<Icon icon="add-circle" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,10 +16,10 @@
|
|||||||
import Spinner from "@lib/components/Spinner.svelte"
|
import Spinner from "@lib/components/Spinner.svelte"
|
||||||
import GroupNote from "@app/components/GroupNote.svelte"
|
import GroupNote from "@app/components/GroupNote.svelte"
|
||||||
import GroupCompose from "@app/components/GroupCompose.svelte"
|
import GroupCompose from "@app/components/GroupCompose.svelte"
|
||||||
import {deriveGroupConversation} from "@app/state"
|
import {deriveGroupChat} from "@app/state"
|
||||||
|
|
||||||
const {nom} = $page.params
|
const {nom} = $page.params
|
||||||
const conversation = deriveGroupConversation(nom)
|
const chat = deriveGroupChat(nom)
|
||||||
|
|
||||||
const assertEvent = (e: any) => e as TrustedEvent
|
const assertEvent = (e: any) => e as TrustedEvent
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
let previousDate
|
let previousDate
|
||||||
let previousPubkey
|
let previousPubkey
|
||||||
|
|
||||||
for (const {event} of sortBy(m => m.event.created_at, $conversation?.messages || [])) {
|
for (const {event} of sortBy(m => m.event.created_at, $chat?.messages || [])) {
|
||||||
const {id, pubkey, created_at} = event
|
const {id, pubkey, created_at} = event
|
||||||
const date = formatTimestampAsDate(created_at)
|
const date = formatTimestampAsDate(created_at)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user