@@ -3,22 +3,57 @@ const store = useStore()
33
44// Load all messages
55const [
6- { data : messages },
7- { data : users },
8- { data : bots },
6+ { data : messages, refresh : refreshMessages },
7+ { data : users, refresh : refreshUsers },
8+ { data : bots, refresh : refreshBots },
99] = await Promise .all ([
1010 store .Message .queryMany (),
1111 store .User .queryMany (),
1212 store .Bot .queryMany (),
1313])
1414
15+ async function refresh() {
16+ await Promise .all ([
17+ refreshMessages (),
18+ refreshUsers (),
19+ refreshBots (),
20+ ])
21+ }
22+
1523const selectedUser = shallowRef <typeof users .value [number ] | null >(users .value ?.[0 ] ?? null )
24+
25+ const receivedMessages = computed (() => selectedUser .value ?.receivedMessages ?? [])
26+ const sentMessages = computed (() => selectedUser .value ?.sentMessages ?? [])
27+
28+ async function sendMessage(receive = false ) {
29+ if (! selectedUser .value ) {
30+ return
31+ }
32+
33+ const { faker } = await import (' @faker-js/faker' )
34+
35+ const selectedUserId = selectedUser .value .id
36+ const recipientIds = users .value .map (user => user .id ).filter (id => id !== selectedUserId )
37+ const recipientId = recipientIds [Math .floor (Math .random () * recipientIds .length )]
38+
39+ await store .Message .create ({
40+ authorId: receive ? recipientId : selectedUserId ,
41+ recipientId: receive ? selectedUserId : recipientId ,
42+ text: faker .lorem .paragraph (),
43+ })
44+ }
1645 </script >
1746
1847<template >
1948 <div class =" p-4 space-y-4" >
2049 <h1 >Read related items from cache</h1 >
2150
51+ <UButton
52+ icon =" lucide:refresh-cw"
53+ label =" Refresh"
54+ @click =" refresh()"
55+ />
56+
2257 <div class =" flex overflow-x-auto" >
2358 <UButtonGroup >
2459 <UButton
@@ -37,6 +72,19 @@ const selectedUser = shallowRef<typeof users.value[number] | null>(users.value?.
3772 </div >
3873
3974 <div v-if =" selectedUser" >
75+ <div class =" flex gap-2" >
76+ <UButton
77+ icon =" lucide:arrow-up"
78+ label =" Send message"
79+ @click =" sendMessage()"
80+ />
81+ <UButton
82+ icon =" lucide:arrow-down"
83+ label =" Receive message"
84+ @click =" sendMessage(true)"
85+ />
86+ </div >
87+
4088 <UTabs
4189 :items =" [
4290 {
@@ -55,14 +103,14 @@ const selectedUser = shallowRef<typeof users.value[number] | null>(users.value?.
55103 <template #received >
56104 <div >
57105 <MessageItem
58- v-for =" { id } in selectedUser. receivedMessages"
106+ v-for =" { id } in receivedMessages"
59107 :id
60108 :key =" id"
61109 skip-nested-fetch
62110 />
63111
64112 <div
65- v-if =" !selectedUser. receivedMessages.length"
113+ v-if =" !receivedMessages.length"
66114 class =" text-center text-gray-500 p-4"
67115 >
68116 No messages
@@ -73,14 +121,14 @@ const selectedUser = shallowRef<typeof users.value[number] | null>(users.value?.
73121 <template #sent >
74122 <div >
75123 <MessageItem
76- v-for =" { id } in selectedUser. sentMessages"
124+ v-for =" { id } in sentMessages"
77125 :id
78126 :key =" id"
79127 skip-nested-fetch
80128 />
81129
82130 <div
83- v-if =" !selectedUser. sentMessages.length"
131+ v-if =" !sentMessages.length"
84132 class =" text-center text-gray-500 p-4"
85133 >
86134 No messages
0 commit comments