chat 1.0.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -96
- package/readme.md +1 -201
- package/lib/module/ChatContext/index.js +0 -2
- package/lib/module/ChatContext/index.js.map +0 -1
- package/lib/module/ChatContext/types.js +0 -2
- package/lib/module/ChatContext/types.js.map +0 -1
- package/lib/module/classes/Chat/index.js +0 -2
- package/lib/module/classes/Chat/index.js.map +0 -1
- package/lib/module/classes/Chat/types.js +0 -2
- package/lib/module/classes/Chat/types.js.map +0 -1
- package/lib/module/classes/Inbox/index.js +0 -2
- package/lib/module/classes/Inbox/index.js.map +0 -1
- package/lib/module/classes/Inbox/types.js +0 -2
- package/lib/module/classes/Inbox/types.js.map +0 -1
- package/lib/module/classes/Message/index.js +0 -2
- package/lib/module/classes/Message/index.js.map +0 -1
- package/lib/module/classes/Message/types.js +0 -2
- package/lib/module/classes/Message/types.js.map +0 -1
- package/lib/module/classes/Reaction/index.js +0 -2
- package/lib/module/classes/Reaction/index.js.map +0 -1
- package/lib/module/classes/Reaction/types.js +0 -2
- package/lib/module/classes/Reaction/types.js.map +0 -1
- package/lib/module/classes/Room/index.js +0 -2
- package/lib/module/classes/Room/index.js.map +0 -1
- package/lib/module/classes/Room/types.js +0 -2
- package/lib/module/classes/Room/types.js.map +0 -1
- package/lib/module/classes/index.js +0 -2
- package/lib/module/classes/index.js.map +0 -1
- package/lib/module/components/Avatar/index.js +0 -2
- package/lib/module/components/Avatar/index.js.map +0 -1
- package/lib/module/components/Chat/Bubble/index.js +0 -2
- package/lib/module/components/Chat/Bubble/index.js.map +0 -1
- package/lib/module/components/Chat/Composer/Input/index.js +0 -2
- package/lib/module/components/Chat/Composer/Input/index.js.map +0 -1
- package/lib/module/components/Chat/Composer/Send/index.js +0 -2
- package/lib/module/components/Chat/Composer/Send/index.js.map +0 -1
- package/lib/module/components/Chat/Composer/index.js +0 -2
- package/lib/module/components/Chat/Composer/index.js.map +0 -1
- package/lib/module/components/Chat/Media/Image/index.js +0 -2
- package/lib/module/components/Chat/Media/Image/index.js.map +0 -1
- package/lib/module/components/Chat/Media/index.js +0 -2
- package/lib/module/components/Chat/Media/index.js.map +0 -1
- package/lib/module/components/Chat/Message/Swiper/Action/index.js +0 -2
- package/lib/module/components/Chat/Message/Swiper/Action/index.js.map +0 -1
- package/lib/module/components/Chat/Message/Swiper/index.js +0 -2
- package/lib/module/components/Chat/Message/Swiper/index.js.map +0 -1
- package/lib/module/components/Chat/Message/Touchable/index.js +0 -2
- package/lib/module/components/Chat/Message/Touchable/index.js.map +0 -1
- package/lib/module/components/Chat/Message/index.js +0 -2
- package/lib/module/components/Chat/Message/index.js.map +0 -1
- package/lib/module/components/Chat/SystemMessage/index.js +0 -2
- package/lib/module/components/Chat/SystemMessage/index.js.map +0 -1
- package/lib/module/components/Chat/TypingFooter/index.js +0 -2
- package/lib/module/components/Chat/TypingFooter/index.js.map +0 -1
- package/lib/module/components/Chat/index.js +0 -2
- package/lib/module/components/Chat/index.js.map +0 -1
- package/lib/module/components/Chat/types.js +0 -2
- package/lib/module/components/Chat/types.js.map +0 -1
- package/lib/module/components/Chat-Old/Bubble/index.js +0 -2
- package/lib/module/components/Chat-Old/Bubble/index.js.map +0 -1
- package/lib/module/components/Chat-Old/Composer/Input/index.js +0 -2
- package/lib/module/components/Chat-Old/Composer/Input/index.js.map +0 -1
- package/lib/module/components/Chat-Old/Composer/Send/index.js +0 -2
- package/lib/module/components/Chat-Old/Composer/Send/index.js.map +0 -1
- package/lib/module/components/Chat-Old/Composer/index.js +0 -2
- package/lib/module/components/Chat-Old/Composer/index.js.map +0 -1
- package/lib/module/components/Chat-Old/Message/index.js +0 -2
- package/lib/module/components/Chat-Old/Message/index.js.map +0 -1
- package/lib/module/components/Chat-Old/Swiper/Action/index.js +0 -2
- package/lib/module/components/Chat-Old/Swiper/Action/index.js.map +0 -1
- package/lib/module/components/Chat-Old/Swiper/index.js +0 -2
- package/lib/module/components/Chat-Old/Swiper/index.js.map +0 -1
- package/lib/module/components/Chat-Old/SystemMessage/index.js +0 -2
- package/lib/module/components/Chat-Old/SystemMessage/index.js.map +0 -1
- package/lib/module/components/Chat-Old/index.js +0 -2
- package/lib/module/components/Chat-Old/index.js.map +0 -1
- package/lib/module/components/Chat-Old/types.js +0 -2
- package/lib/module/components/Chat-Old/types.js.map +0 -1
- package/lib/module/components/ChatProvider/index.js +0 -2
- package/lib/module/components/ChatProvider/index.js.map +0 -1
- package/lib/module/components/ChatProvider/types.js +0 -2
- package/lib/module/components/ChatProvider/types.js.map +0 -1
- package/lib/module/components/Inbox/Item/Circle/index.js +0 -2
- package/lib/module/components/Inbox/Item/Circle/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/Circle/types.js +0 -2
- package/lib/module/components/Inbox/Item/Circle/types.js.map +0 -1
- package/lib/module/components/Inbox/Item/Initials/index.js +0 -2
- package/lib/module/components/Inbox/Item/Initials/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/ItemDate/index.js +0 -2
- package/lib/module/components/Inbox/Item/ItemDate/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/Separator/index.js +0 -2
- package/lib/module/components/Inbox/Item/Separator/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/Subtitle/index.js +0 -2
- package/lib/module/components/Inbox/Item/Subtitle/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/Swipeable/index.js +0 -2
- package/lib/module/components/Inbox/Item/Swipeable/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/Title/index.js +0 -2
- package/lib/module/components/Inbox/Item/Title/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/UnreadIndicator/index.js +0 -2
- package/lib/module/components/Inbox/Item/UnreadIndicator/index.js.map +0 -1
- package/lib/module/components/Inbox/Item/index.js +0 -2
- package/lib/module/components/Inbox/Item/index.js.map +0 -1
- package/lib/module/components/Inbox/index.js +0 -2
- package/lib/module/components/Inbox/index.js.map +0 -1
- package/lib/module/components/Inbox/question.md +0 -21
- package/lib/module/components/Inbox/readme.md +0 -21
- package/lib/module/components/Inbox/types.js +0 -2
- package/lib/module/components/Inbox/types.js.map +0 -1
- package/lib/module/components/RoomCreator/Content/Footer/Button/index.js +0 -2
- package/lib/module/components/RoomCreator/Content/Footer/Button/index.js.map +0 -1
- package/lib/module/components/RoomCreator/Content/Footer/Input/index.js +0 -2
- package/lib/module/components/RoomCreator/Content/Footer/Input/index.js.map +0 -1
- package/lib/module/components/RoomCreator/Content/Footer/index.js +0 -2
- package/lib/module/components/RoomCreator/Content/Footer/index.js.map +0 -1
- package/lib/module/components/RoomCreator/Content/Item/Icon/index.js +0 -2
- package/lib/module/components/RoomCreator/Content/Item/Icon/index.js.map +0 -1
- package/lib/module/components/RoomCreator/Content/Item/index.js +0 -2
- package/lib/module/components/RoomCreator/Content/Item/index.js.map +0 -1
- package/lib/module/components/RoomCreator/Content/index.js +0 -2
- package/lib/module/components/RoomCreator/Content/index.js.map +0 -1
- package/lib/module/components/RoomCreator/Header/index.js +0 -2
- package/lib/module/components/RoomCreator/Header/index.js.map +0 -1
- package/lib/module/components/RoomCreator/index.js +0 -2
- package/lib/module/components/RoomCreator/index.js.map +0 -1
- package/lib/module/components/RoomCreator/types.js +0 -2
- package/lib/module/components/RoomCreator/types.js.map +0 -1
- package/lib/module/components/TypingIndicator/index.js +0 -2
- package/lib/module/components/TypingIndicator/index.js.map +0 -1
- package/lib/module/components/index.js +0 -2
- package/lib/module/components/index.js.map +0 -1
- package/lib/module/helpers/getInitials.js +0 -2
- package/lib/module/helpers/getInitials.js.map +0 -1
- package/lib/module/helpers/sortByAvatar.js +0 -2
- package/lib/module/helpers/sortByAvatar.js.map +0 -1
- package/lib/module/hooks/index.js +0 -2
- package/lib/module/hooks/index.js.map +0 -1
- package/lib/module/hooks/useCreateRoom/index.js +0 -2
- package/lib/module/hooks/useCreateRoom/index.js.map +0 -1
- package/lib/module/hooks/useCreator/index.js +0 -2
- package/lib/module/hooks/useCreator/index.js.map +0 -1
- package/lib/module/hooks/useInbox/index.js +0 -2
- package/lib/module/hooks/useInbox/index.js.map +0 -1
- package/lib/module/hooks/useInbox/types.js +0 -2
- package/lib/module/hooks/useInbox/types.js.map +0 -1
- package/lib/module/hooks/useMessages/index.js +0 -2
- package/lib/module/hooks/useMessages/index.js.map +0 -1
- package/lib/module/hooks/useMessages/types.js +0 -2
- package/lib/module/hooks/useMessages/types.js.map +0 -1
- package/lib/module/hooks/useRoom/index.js +0 -2
- package/lib/module/hooks/useRoom/index.js.map +0 -1
- package/lib/module/hooks/useRoom/types.js +0 -2
- package/lib/module/hooks/useRoom/types.js.map +0 -1
- package/lib/module/hooks/useSend/useSendToGroup/index.js +0 -2
- package/lib/module/hooks/useSend/useSendToGroup/index.js.map +0 -1
- package/lib/module/hooks/useSend/useSendToPeople/index.js +0 -2
- package/lib/module/hooks/useSend/useSendToPeople/index.js.map +0 -1
- package/lib/module/hooks/useTyping/index.js +0 -2
- package/lib/module/hooks/useTyping/index.js.map +0 -1
- package/lib/module/hooks/useTypingOLD/index.js +0 -2
- package/lib/module/hooks/useTypingOLD/index.js.map +0 -1
- package/lib/module/hooks/useTypingOLD/types.js +0 -2
- package/lib/module/hooks/useTypingOLD/types.js.map +0 -1
- package/lib/module/hooks/useViewMessages/index.js +0 -2
- package/lib/module/hooks/useViewMessages/index.js.map +0 -1
- package/lib/module/hooks/useViewMessages/types.js +0 -2
- package/lib/module/hooks/useViewMessages/types.js.map +0 -1
- package/lib/module/hooks/useViewMessagesOld/index.js +0 -2
- package/lib/module/hooks/useViewMessagesOld/index.js.map +0 -1
- package/lib/module/index.js +0 -2
- package/lib/module/index.js.map +0 -1
- package/lib/typescript/ChatContext/index.d.ts +0 -2
- package/lib/typescript/ChatContext/types.d.ts +0 -4
- package/lib/typescript/classes/Chat/index.d.ts +0 -14
- package/lib/typescript/classes/Chat/types.d.ts +0 -21
- package/lib/typescript/classes/Inbox/types.d.ts +0 -2
- package/lib/typescript/classes/Message/index.d.ts +0 -47
- package/lib/typescript/classes/Message/types.d.ts +0 -66
- package/lib/typescript/classes/Reaction/index.d.ts +0 -17
- package/lib/typescript/classes/Reaction/types.d.ts +0 -33
- package/lib/typescript/classes/Room/index.d.ts +0 -42
- package/lib/typescript/classes/Room/types.d.ts +0 -112
- package/lib/typescript/classes/index.d.ts +0 -4
- package/lib/typescript/components/Avatar/index.d.ts +0 -4
- package/lib/typescript/components/Chat/Bubble/index.d.ts +0 -4
- package/lib/typescript/components/Chat/Composer/Input/index.d.ts +0 -7
- package/lib/typescript/components/Chat/Composer/Send/index.d.ts +0 -4
- package/lib/typescript/components/Chat/Composer/index.d.ts +0 -8
- package/lib/typescript/components/Chat/Media/Image/index.d.ts +0 -7
- package/lib/typescript/components/Chat/Media/index.d.ts +0 -4
- package/lib/typescript/components/Chat/Message/Touchable/index.d.ts +0 -4
- package/lib/typescript/components/Chat/Message/index.d.ts +0 -8
- package/lib/typescript/components/Chat/SystemMessage/index.d.ts +0 -4
- package/lib/typescript/components/Chat/TypingFooter/index.d.ts +0 -4
- package/lib/typescript/components/Chat/index.d.ts +0 -8
- package/lib/typescript/components/Chat/types.d.ts +0 -844
- package/lib/typescript/components/ChatProvider/index.d.ts +0 -10
- package/lib/typescript/components/ChatProvider/types.d.ts +0 -7
- package/lib/typescript/components/Inbox/Item/Initials/index.d.ts +0 -4
- package/lib/typescript/components/Inbox/Item/ItemDate/index.d.ts +0 -4
- package/lib/typescript/components/Inbox/Item/Separator/index.d.ts +0 -6
- package/lib/typescript/components/Inbox/Item/Subtitle/index.d.ts +0 -3
- package/lib/typescript/components/Inbox/Item/Swipeable/index.d.ts +0 -4
- package/lib/typescript/components/Inbox/Item/Title/index.d.ts +0 -3
- package/lib/typescript/components/Inbox/Item/UnreadIndicator/index.d.ts +0 -4
- package/lib/typescript/components/Inbox/Item/index.d.ts +0 -6
- package/lib/typescript/components/Inbox/index.d.ts +0 -4
- package/lib/typescript/components/Inbox/types.d.ts +0 -304
- package/lib/typescript/components/RoomCreator/Content/Footer/Button/index.d.ts +0 -4
- package/lib/typescript/components/RoomCreator/Content/Footer/Input/index.d.ts +0 -4
- package/lib/typescript/components/RoomCreator/Content/Footer/index.d.ts +0 -3
- package/lib/typescript/components/RoomCreator/Content/Item/Icon/index.d.ts +0 -4
- package/lib/typescript/components/RoomCreator/Content/Item/index.d.ts +0 -4
- package/lib/typescript/components/RoomCreator/Content/index.d.ts +0 -4
- package/lib/typescript/components/RoomCreator/Header/index.d.ts +0 -4
- package/lib/typescript/components/RoomCreator/index.d.ts +0 -4
- package/lib/typescript/components/RoomCreator/types.d.ts +0 -208
- package/lib/typescript/components/TypingIndicator/index.d.ts +0 -9
- package/lib/typescript/components/index.d.ts +0 -12
- package/lib/typescript/helpers/getInitials.d.ts +0 -1
- package/lib/typescript/hooks/index.d.ts +0 -8
- package/lib/typescript/hooks/useCreator/index.d.ts +0 -27
- package/lib/typescript/hooks/useInbox/index.d.ts +0 -29
- package/lib/typescript/hooks/useInbox/types.d.ts +0 -5
- package/lib/typescript/hooks/useMessages/index.d.ts +0 -24
- package/lib/typescript/hooks/useMessages/types.d.ts +0 -5
- package/lib/typescript/hooks/useRoom/index.d.ts +0 -26
- package/lib/typescript/hooks/useRoom/types.d.ts +0 -5
- package/lib/typescript/hooks/useSend/useSendToGroup/index.d.ts +0 -6
- package/lib/typescript/hooks/useSend/useSendToPeople/index.d.ts +0 -6
- package/lib/typescript/hooks/useTyping/index.d.ts +0 -36
- package/lib/typescript/hooks/useViewMessages/index.d.ts +0 -18
- package/lib/typescript/hooks/useViewMessages/types.d.ts +0 -20
- package/lib/typescript/index.d.ts +0 -11
- package/src/ChatContext/index.tsx +0 -9
- package/src/ChatContext/types.ts +0 -4
- package/src/classes/Chat/index.ts +0 -46
- package/src/classes/Chat/types.ts +0 -23
- package/src/classes/Inbox/index.ts +0 -12
- package/src/classes/Inbox/types.ts +0 -3
- package/src/classes/Message/index.ts +0 -310
- package/src/classes/Message/types.ts +0 -118
- package/src/classes/Reaction/index.ts +0 -108
- package/src/classes/Reaction/types.ts +0 -37
- package/src/classes/Room/index.ts +0 -323
- package/src/classes/Room/types.ts +0 -161
- package/src/classes/index.ts +0 -4
- package/src/components/Avatar/index.tsx +0 -25
- package/src/components/Chat/Bubble/index.tsx +0 -139
- package/src/components/Chat/Composer/Input/index.tsx +0 -45
- package/src/components/Chat/Composer/Send/index.tsx +0 -51
- package/src/components/Chat/Composer/index.tsx +0 -184
- package/src/components/Chat/Media/Image/index.tsx +0 -26
- package/src/components/Chat/Media/index.tsx +0 -11
- package/src/components/Chat/Message/Swiper/Action/index.tsx +0 -7
- package/src/components/Chat/Message/Swiper/index.tsx +0 -32
- package/src/components/Chat/Message/Touchable/index.tsx +0 -60
- package/src/components/Chat/Message/index.tsx +0 -328
- package/src/components/Chat/SystemMessage/index.tsx +0 -44
- package/src/components/Chat/TypingFooter/index.tsx +0 -48
- package/src/components/Chat/index.tsx +0 -592
- package/src/components/Chat/types.ts +0 -911
- package/src/components/Chat-Old/Bubble/index.tsx +0 -58
- package/src/components/Chat-Old/Composer/Input/index.tsx +0 -34
- package/src/components/Chat-Old/Composer/Send/index.tsx +0 -37
- package/src/components/Chat-Old/Composer/index.tsx +0 -131
- package/src/components/Chat-Old/Message/index.tsx +0 -160
- package/src/components/Chat-Old/Swiper/Action/index.tsx +0 -7
- package/src/components/Chat-Old/Swiper/index.tsx +0 -30
- package/src/components/Chat-Old/SystemMessage/index.tsx +0 -44
- package/src/components/Chat-Old/index.tsx +0 -356
- package/src/components/Chat-Old/types.ts +0 -752
- package/src/components/ChatProvider/index.tsx +0 -31
- package/src/components/ChatProvider/types.ts +0 -8
- package/src/components/Inbox/Item/Circle/index.tsx +0 -47
- package/src/components/Inbox/Item/Circle/types.ts +0 -8
- package/src/components/Inbox/Item/Initials/index.tsx +0 -41
- package/src/components/Inbox/Item/ItemDate/index.tsx +0 -26
- package/src/components/Inbox/Item/Separator/index.tsx +0 -13
- package/src/components/Inbox/Item/Subtitle/index.tsx +0 -23
- package/src/components/Inbox/Item/Swipeable/index.tsx +0 -143
- package/src/components/Inbox/Item/Title/index.tsx +0 -23
- package/src/components/Inbox/Item/UnreadIndicator/index.tsx +0 -84
- package/src/components/Inbox/Item/index.tsx +0 -307
- package/src/components/Inbox/index.tsx +0 -315
- package/src/components/Inbox/question.md +0 -21
- package/src/components/Inbox/readme.md +0 -21
- package/src/components/Inbox/types.ts +0 -371
- package/src/components/RoomCreator/Content/Footer/Button/index.tsx +0 -55
- package/src/components/RoomCreator/Content/Footer/Input/index.tsx +0 -27
- package/src/components/RoomCreator/Content/Footer/index.tsx +0 -72
- package/src/components/RoomCreator/Content/Item/Icon/index.tsx +0 -16
- package/src/components/RoomCreator/Content/Item/index.tsx +0 -87
- package/src/components/RoomCreator/Content/index.tsx +0 -75
- package/src/components/RoomCreator/Header/index.tsx +0 -74
- package/src/components/RoomCreator/index.tsx +0 -177
- package/src/components/RoomCreator/types.ts +0 -233
- package/src/components/TypingIndicator/index.tsx +0 -169
- package/src/components/index.ts +0 -18
- package/src/helpers/getInitials.ts +0 -11
- package/src/helpers/sortByAvatar.ts +0 -1
- package/src/hooks/index.ts +0 -8
- package/src/hooks/useCreateRoom/index.ts +0 -34
- package/src/hooks/useCreator/index.ts +0 -33
- package/src/hooks/useInbox/index.ts +0 -76
- package/src/hooks/useInbox/types.ts +0 -6
- package/src/hooks/useMessages/index.ts +0 -109
- package/src/hooks/useMessages/types.ts +0 -6
- package/src/hooks/useRoom/index.ts +0 -82
- package/src/hooks/useRoom/types.ts +0 -6
- package/src/hooks/useSend/useSendToGroup/index.ts +0 -38
- package/src/hooks/useSend/useSendToPeople/index.ts +0 -38
- package/src/hooks/useTyping/index.ts +0 -154
- package/src/hooks/useTypingOLD/index.ts +0 -67
- package/src/hooks/useTypingOLD/types.ts +0 -7
- package/src/hooks/useViewMessages/index.ts +0 -61
- package/src/hooks/useViewMessages/types.ts +0 -22
- package/src/hooks/useViewMessagesOld/index.ts +0 -39
- package/src/index.ts +0 -13
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { FieldValue } from '@firebase/firestore-types'
|
|
2
|
-
import { ReactionOption } from '../Reaction/types'
|
|
3
|
-
|
|
4
|
-
export interface Message {
|
|
5
|
-
id: string
|
|
6
|
-
// roomId: string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface NewMessageModel extends Omit<Message, 'roomId'> {
|
|
10
|
-
text: string
|
|
11
|
-
createdAt: Date
|
|
12
|
-
user: {
|
|
13
|
-
id: string
|
|
14
|
-
name: string
|
|
15
|
-
avatar: string
|
|
16
|
-
}
|
|
17
|
-
// image?: string
|
|
18
|
-
// // You can also add a video prop:
|
|
19
|
-
// video?: string
|
|
20
|
-
system?: boolean
|
|
21
|
-
media?: MessageMedia
|
|
22
|
-
reactions?: {
|
|
23
|
-
[option in ReactionOption]: string[]
|
|
24
|
-
}
|
|
25
|
-
// Any additional custom parameters are passed through
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface MessageMediaWithUrl {
|
|
29
|
-
url: string
|
|
30
|
-
uri?: string
|
|
31
|
-
height: number
|
|
32
|
-
width: number
|
|
33
|
-
contentType: 'video' | 'image'
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface MessageMediaWithUri {
|
|
37
|
-
url: string
|
|
38
|
-
uri?: string
|
|
39
|
-
height: number
|
|
40
|
-
width: number
|
|
41
|
-
contentType: 'video' | 'image'
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export type MessageMedia = MessageMediaWithUrl | MessageMediaWithUri
|
|
45
|
-
|
|
46
|
-
// export interface MessageMedia {
|
|
47
|
-
// url?: string
|
|
48
|
-
// uri: string
|
|
49
|
-
// height: number
|
|
50
|
-
// width: number
|
|
51
|
-
// contentType: 'video' | 'image'
|
|
52
|
-
// }
|
|
53
|
-
|
|
54
|
-
export interface NewMessageFormattedForServer
|
|
55
|
-
extends Omit<NewMessageModel, 'createdAt'> {
|
|
56
|
-
createdAt: FieldValue
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function isNewMessageModel(
|
|
60
|
-
message: MessageModel
|
|
61
|
-
): message is NewMessageModel {
|
|
62
|
-
return !!(message as NewMessageModel)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function isNewMessageFormattedForServer(
|
|
66
|
-
message: MessageModel
|
|
67
|
-
): message is NewMessageFormattedForServer {
|
|
68
|
-
return !!(message as NewMessageFormattedForServer)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface EditMessageModel extends Message {
|
|
72
|
-
text?: string
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export type SendToRecipients = string[]
|
|
76
|
-
|
|
77
|
-
// you might send a message to multiple rooms
|
|
78
|
-
export type RoomId = string | string[]
|
|
79
|
-
|
|
80
|
-
// the message model can be one of them
|
|
81
|
-
export type MessageModel =
|
|
82
|
-
| Message
|
|
83
|
-
| NewMessageModel[]
|
|
84
|
-
| EditMessageModel
|
|
85
|
-
| MessageModelDocument[]
|
|
86
|
-
| NewMessageFormattedForServer[]
|
|
87
|
-
| NewMessageFormattedForServer
|
|
88
|
-
|
|
89
|
-
export interface MessageModelDocument
|
|
90
|
-
extends Omit<NewMessageModel, 'createdAt'> {
|
|
91
|
-
id: string
|
|
92
|
-
createdAt: firebase.firestore.Timestamp
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export type SendFromFeedRecipient =
|
|
96
|
-
| {
|
|
97
|
-
id: string // roomId
|
|
98
|
-
}
|
|
99
|
-
| SendFromFeedRecipientArray
|
|
100
|
-
|
|
101
|
-
export interface SendFromFeedRecipientArray {
|
|
102
|
-
recipients: { id: string; name: string }[]
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export const recipientHasId = (
|
|
106
|
-
recipient: SendFromFeedRecipient
|
|
107
|
-
): recipient is { id: string } => !!(recipient as { id: string })
|
|
108
|
-
|
|
109
|
-
export const recipientHasMembers = (
|
|
110
|
-
recipient: SendFromFeedRecipient
|
|
111
|
-
): recipient is SendFromFeedRecipientArray =>
|
|
112
|
-
!!(recipient as SendFromFeedRecipientArray)
|
|
113
|
-
|
|
114
|
-
export type SendFromFeedRecipients = SendFromFeedRecipient[]
|
|
115
|
-
|
|
116
|
-
export interface SendFromFeedModel extends Omit<NewMessageModel, 'id'> {
|
|
117
|
-
recipients: SendFromFeedRecipientArray['recipients']
|
|
118
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { ReactionConfig } from './types'
|
|
2
|
-
import Room from '../Room'
|
|
3
|
-
import { fuego } from '../../components/ChatProvider'
|
|
4
|
-
import { LastMessageServer } from '../Room/types'
|
|
5
|
-
|
|
6
|
-
export default class {
|
|
7
|
-
private config: ReactionConfig
|
|
8
|
-
constructor(config: ReactionConfig) {
|
|
9
|
-
this.config = config
|
|
10
|
-
}
|
|
11
|
-
get path() {
|
|
12
|
-
const { messagesPath } = new Room({ id: this.config.roomId })
|
|
13
|
-
return `${messagesPath}/${this.config.messageId}`
|
|
14
|
-
}
|
|
15
|
-
verb(): { add: string; remove: string } {
|
|
16
|
-
switch (this.config.reaction) {
|
|
17
|
-
case 'like':
|
|
18
|
-
return { add: 'liked', remove: 'unliked' }
|
|
19
|
-
case 'love':
|
|
20
|
-
return { add: 'loved', remove: 'unloved' }
|
|
21
|
-
default: {
|
|
22
|
-
console.warn(
|
|
23
|
-
'reaction type is not valid. see reaction class:',
|
|
24
|
-
this.config.reaction
|
|
25
|
-
)
|
|
26
|
-
return { add: '', remove: '' }
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async add() {
|
|
31
|
-
const { uid } = fuego.auth().currentUser as firebase.User
|
|
32
|
-
const batch = fuego.db.batch()
|
|
33
|
-
const messageRef = fuego.db.doc(this.path)
|
|
34
|
-
batch.update(messageRef, {
|
|
35
|
-
[`reactions.${this.config.reaction}`]: fuego.firebase.firestore.FieldValue.arrayUnion(
|
|
36
|
-
uid
|
|
37
|
-
)
|
|
38
|
-
})
|
|
39
|
-
const { path: roomPath } = new Room({ id: this.config.roomId })
|
|
40
|
-
const roomRef = fuego.db.doc(roomPath)
|
|
41
|
-
|
|
42
|
-
batch.update(roomRef, {
|
|
43
|
-
lastMessage: this.makeLastMessage({ remove: false })
|
|
44
|
-
})
|
|
45
|
-
return batch.commit()
|
|
46
|
-
}
|
|
47
|
-
async remove() {
|
|
48
|
-
const { uid } = fuego.auth().currentUser as firebase.User
|
|
49
|
-
const batch = fuego.db.batch()
|
|
50
|
-
const messageRef = fuego.db.doc(this.path)
|
|
51
|
-
batch.update(messageRef, {
|
|
52
|
-
[`reactions.${this.config.reaction}`]: fuego.firebase.firestore.FieldValue.arrayRemove(
|
|
53
|
-
uid
|
|
54
|
-
)
|
|
55
|
-
})
|
|
56
|
-
const { path: roomPath } = new Room({ id: this.config.roomId })
|
|
57
|
-
const roomRef = fuego.db.doc(roomPath)
|
|
58
|
-
|
|
59
|
-
batch.update(roomRef, {
|
|
60
|
-
lastMessage: this.makeLastMessage({ remove: true })
|
|
61
|
-
})
|
|
62
|
-
return batch.commit()
|
|
63
|
-
}
|
|
64
|
-
makeReactionDescriptionText(remove?: boolean): string {
|
|
65
|
-
if (this.config.descriptionText === null) return ''
|
|
66
|
-
const { displayName } = fuego.auth().currentUser as firebase.User
|
|
67
|
-
const { myName } = this.config
|
|
68
|
-
const name = myName || displayName || ''
|
|
69
|
-
const verb = remove ? this.verb().remove : this.verb().add
|
|
70
|
-
if (this.config.descriptionText) {
|
|
71
|
-
if (typeof this.config.descriptionText === 'string')
|
|
72
|
-
return this.config.descriptionText
|
|
73
|
-
if (typeof this.config.descriptionText !== 'function') {
|
|
74
|
-
console.error(
|
|
75
|
-
'🍇 Juice Reaction error. The descriptionText property should be either 1) a string or 2) a function that returns a string. Instead, you passed',
|
|
76
|
-
this.config.descriptionText,
|
|
77
|
-
' of type ',
|
|
78
|
-
typeof this.config.descriptionText,
|
|
79
|
-
'. See the docs or command+hover over the descriptionText property in VS Code to details.'
|
|
80
|
-
)
|
|
81
|
-
} else {
|
|
82
|
-
return this.config.descriptionText({
|
|
83
|
-
reaction: this.config.reaction,
|
|
84
|
-
name: name || '',
|
|
85
|
-
text: this.config.text,
|
|
86
|
-
verb,
|
|
87
|
-
remove: !!remove
|
|
88
|
-
})
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const firstName = name && name.split(' ')[0]
|
|
92
|
-
let text = `${firstName} ${verb} a message`
|
|
93
|
-
if (this.config.text) {
|
|
94
|
-
text = `${firstName} ${verb} "${this.config.text}"`
|
|
95
|
-
}
|
|
96
|
-
return text
|
|
97
|
-
}
|
|
98
|
-
makeLastMessage(options: { remove?: boolean }): LastMessageServer {
|
|
99
|
-
const { displayName: name = '' } = fuego.auth().currentUser as firebase.User
|
|
100
|
-
return {
|
|
101
|
-
id: '',
|
|
102
|
-
createdAt: fuego.firebase.firestore.FieldValue.serverTimestamp(),
|
|
103
|
-
name: name || '',
|
|
104
|
-
system: true,
|
|
105
|
-
text: this.makeReactionDescriptionText(options.remove)
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export interface ReactionConfig {
|
|
2
|
-
myName?: string
|
|
3
|
-
messageId: string
|
|
4
|
-
roomId: string
|
|
5
|
-
text: string
|
|
6
|
-
reaction: ReactionOption
|
|
7
|
-
/**
|
|
8
|
-
* An **optional** string or pure function to override the default description text.
|
|
9
|
-
* The description text is used to create the last message that shows up in the inbox.
|
|
10
|
-
*
|
|
11
|
-
* By default, this will look something like: <name> <reaction>d "<message text>". For instance: Fernando liked "I want a pair of PATOS Shoes."
|
|
12
|
-
*
|
|
13
|
-
* If `null`, text will be an empty string.
|
|
14
|
-
*
|
|
15
|
-
* A verb for like will be 'liked', and if it's a removal, then it's 'unlike'. This pattern follows for other reactions too.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```js
|
|
19
|
-
* const reaction = new Reaction({
|
|
20
|
-
* descriptionText: ({ reaction, name, text, verb, remove }) => remove ? \`${name} happily ${verb} ${text}\` : \`${name} sadly ${verb} ${text}\`,
|
|
21
|
-
* text: message.text, roomId: room.id, messageId: message.id, text: message.text
|
|
22
|
-
* })
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
descriptionText?:
|
|
26
|
-
| null
|
|
27
|
-
| string
|
|
28
|
-
| ((info: {
|
|
29
|
-
reaction: ReactionOption
|
|
30
|
-
name: string
|
|
31
|
-
text: string
|
|
32
|
-
verb: string
|
|
33
|
-
remove: boolean
|
|
34
|
-
}) => string)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export type ReactionOption = 'like' | 'love'
|
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
NewRoomModel,
|
|
3
|
-
RoomModel,
|
|
4
|
-
EditRoomModel,
|
|
5
|
-
NewRoomMember,
|
|
6
|
-
currentUserExists,
|
|
7
|
-
roomIsEditModel,
|
|
8
|
-
ExistingRoomModel,
|
|
9
|
-
RoomMembers,
|
|
10
|
-
CreateRoomModel,
|
|
11
|
-
RoomPropertiesModel,
|
|
12
|
-
roomIsNewModel,
|
|
13
|
-
roomIsCreateCallable
|
|
14
|
-
} from './types'
|
|
15
|
-
import { fuego, chat } from '../../components/ChatProvider'
|
|
16
|
-
import { getInitials } from '../../helpers/getInitials'
|
|
17
|
-
import { firestore } from 'firebase'
|
|
18
|
-
import uuid from 'uuid'
|
|
19
|
-
|
|
20
|
-
export default class {
|
|
21
|
-
private room: RoomModel
|
|
22
|
-
constructor(room: RoomModel) {
|
|
23
|
-
this.room = room
|
|
24
|
-
}
|
|
25
|
-
get path() {
|
|
26
|
-
return `${chat.roomsCollection}/${(this.room as RoomPropertiesModel).id}`
|
|
27
|
-
}
|
|
28
|
-
get messagesPath() {
|
|
29
|
-
return `${this.path}/${chat.messagesCollection}`
|
|
30
|
-
}
|
|
31
|
-
getUnreadCount(): number {
|
|
32
|
-
const { uid } = fuego.firebase.auth().currentUser as firebase.User
|
|
33
|
-
try {
|
|
34
|
-
const member = (this.room as ExistingRoomModel | NewRoomModel).members[
|
|
35
|
-
uid
|
|
36
|
-
]
|
|
37
|
-
|
|
38
|
-
return (member && member.unreadCount && member.unreadCount.count) || 0
|
|
39
|
-
} catch (e) {
|
|
40
|
-
console.error(
|
|
41
|
-
`Room getUnreadCount error. Are you sure you initialized the room with the proper members schema?`
|
|
42
|
-
)
|
|
43
|
-
return 0
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Views message function for a room.
|
|
48
|
-
*
|
|
49
|
-
* To use this in a react component out-of-the-box, I recommend using the [[useViewMessage]] hook. It will handle all this for you.
|
|
50
|
-
*
|
|
51
|
-
* @param messageId ID of the message you're viewing
|
|
52
|
-
* @param messageCreatedAt Timestamp of the message which you're viewing, found in message.createdAt
|
|
53
|
-
*
|
|
54
|
-
* @remarks
|
|
55
|
-
* If you aren't using the useViewMessage hook:
|
|
56
|
-
* This function should be used with care. You don't want to send 500 writes if someone views 500 messages.
|
|
57
|
-
* You only want to send a read for the most recent message being viewed, assuming it's someone else's message.
|
|
58
|
-
* Also, you should be memoizing the last message you sent that you viewed to avoid repeats. Again, this is all handled by useViewMessages.
|
|
59
|
-
*
|
|
60
|
-
* @returns Promise that only resolves while you're online.
|
|
61
|
-
*/
|
|
62
|
-
async viewMessage(messageId: string, messageCreatedAt: Date) {
|
|
63
|
-
try {
|
|
64
|
-
const ref = fuego.db.doc(this.path)
|
|
65
|
-
const { uid } = fuego.auth().currentUser as firebase.User
|
|
66
|
-
|
|
67
|
-
return ref.update({
|
|
68
|
-
[`members.${uid}.unreadCount.count`]: 0,
|
|
69
|
-
[`members.${uid}.unreadCount.lastCleared`]: fuego.firebase.firestore.FieldValue.serverTimestamp(),
|
|
70
|
-
[`members.${uid}.unreadCount.lastSeen`]: {
|
|
71
|
-
id: messageId,
|
|
72
|
-
createdAt: messageCreatedAt
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
} catch (e) {
|
|
76
|
-
console.error('Room class: viewMessage() error:', e)
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
getArrayOfMembersOtherThanMe() {
|
|
80
|
-
const { members } = this.room as ExistingRoomModel
|
|
81
|
-
const { uid } = fuego.auth().currentUser as firebase.User
|
|
82
|
-
return Object.keys(members)
|
|
83
|
-
.filter(id => id !== uid)
|
|
84
|
-
.map(id => members[id])
|
|
85
|
-
}
|
|
86
|
-
getName(): string {
|
|
87
|
-
const { members, name } = this.room as ExistingRoomModel
|
|
88
|
-
if (name) return name
|
|
89
|
-
|
|
90
|
-
const { uid } = fuego.auth().currentUser as firebase.User
|
|
91
|
-
|
|
92
|
-
const otherPeopleInRoom = Object.keys(members).filter(
|
|
93
|
-
(id: string) => id !== uid
|
|
94
|
-
)
|
|
95
|
-
const namesOfOtherPeopleInRoom = otherPeopleInRoom.map(
|
|
96
|
-
id =>
|
|
97
|
-
(members[id] &&
|
|
98
|
-
members[id].name &&
|
|
99
|
-
members[id].name.split(' ') &&
|
|
100
|
-
members[id].name.split(' ')[0]) ||
|
|
101
|
-
''
|
|
102
|
-
)
|
|
103
|
-
if (!namesOfOtherPeopleInRoom.length) {
|
|
104
|
-
console.error('no other members in room', this.room)
|
|
105
|
-
return ''
|
|
106
|
-
}
|
|
107
|
-
if (namesOfOtherPeopleInRoom.length === 1)
|
|
108
|
-
return members[otherPeopleInRoom[0]].name
|
|
109
|
-
if (namesOfOtherPeopleInRoom.length === 2)
|
|
110
|
-
return namesOfOtherPeopleInRoom.join(' & ')
|
|
111
|
-
|
|
112
|
-
const commaNames = namesOfOtherPeopleInRoom
|
|
113
|
-
.slice(0, namesOfOtherPeopleInRoom.length - 1)
|
|
114
|
-
.join(', ')
|
|
115
|
-
const finalName =
|
|
116
|
-
namesOfOtherPeopleInRoom[namesOfOtherPeopleInRoom.length - 1]
|
|
117
|
-
|
|
118
|
-
return `${commaNames} & ${finalName}`
|
|
119
|
-
}
|
|
120
|
-
getInitials(maxNumberOfInitials = 2): string {
|
|
121
|
-
const { name } = this.room
|
|
122
|
-
if (name) return getInitials(name)
|
|
123
|
-
|
|
124
|
-
const members = this.getArrayOfMembersOtherThanMe()
|
|
125
|
-
|
|
126
|
-
if (!members.length) {
|
|
127
|
-
console.error(
|
|
128
|
-
'get room initials error: no other members in this room',
|
|
129
|
-
this.room
|
|
130
|
-
)
|
|
131
|
-
return ''
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (members.length === 1) {
|
|
135
|
-
return getInitials(members[0].name, maxNumberOfInitials)
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return (
|
|
139
|
-
members
|
|
140
|
-
// first letter of each person's name
|
|
141
|
-
.map(member => (member.name && member.name.slice(0, 1)) || '')
|
|
142
|
-
.join('')
|
|
143
|
-
// up to two initials
|
|
144
|
-
.slice(0, maxNumberOfInitials)
|
|
145
|
-
)
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* @returns
|
|
149
|
-
* A promise.all array of responses. The first array is for adding a system message; the second is for updating the room object.
|
|
150
|
-
*/
|
|
151
|
-
async leave() {
|
|
152
|
-
try {
|
|
153
|
-
if (!currentUserExists(fuego.auth().currentUser)) {
|
|
154
|
-
throw new Error(
|
|
155
|
-
"🚨 Fuego auth error: Tried to leave a room, but there is no valid firebase auth object for this user. \n In order to join a room, the user must exist. If you're just testing around and don't want to have valid users, try await firebase.auth().signInAnonymously()."
|
|
156
|
-
)
|
|
157
|
-
}
|
|
158
|
-
const { uid } = fuego.auth().currentUser as firebase.User
|
|
159
|
-
// is this even necessary? maybe if people want the option to join or not...
|
|
160
|
-
return fuego.db.doc(this.path).update({
|
|
161
|
-
currentMembers: fuego.firebase.firestore.FieldValue.arrayRemove(uid),
|
|
162
|
-
[`members.${uid}`]: fuego.firebase.firestore.FieldValue.delete()
|
|
163
|
-
})
|
|
164
|
-
} catch (e) {
|
|
165
|
-
console.error(e)
|
|
166
|
-
return null
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
join() {
|
|
170
|
-
try {
|
|
171
|
-
if (!currentUserExists(fuego.auth().currentUser)) {
|
|
172
|
-
throw new Error(
|
|
173
|
-
"🚨 Fuego auth error: Tried to join a room, but there is no valid firebase auth object for this user. \n In order to join a room, the user must exist. If you're just testing around and don't want to have valid users, try await firebase.auth().signInAnonymously()."
|
|
174
|
-
)
|
|
175
|
-
}
|
|
176
|
-
const { uid, displayName } = fuego.auth().currentUser as firebase.User
|
|
177
|
-
const newMember: NewRoomMember = {
|
|
178
|
-
name: displayName || 'Fredrick Failuretest',
|
|
179
|
-
exists: true,
|
|
180
|
-
joinedAt: fuego.firebase.firestore.FieldValue.serverTimestamp()
|
|
181
|
-
}
|
|
182
|
-
// is this even necessary?
|
|
183
|
-
// maybe if people want the option to choose whether they join a room or not...
|
|
184
|
-
return fuego.db.doc(this.path).update({
|
|
185
|
-
[`members.${uid}`]: newMember,
|
|
186
|
-
currentMembers: fuego.firebase.firestore.FieldValue.arrayUnion(uid)
|
|
187
|
-
})
|
|
188
|
-
} catch (e) {
|
|
189
|
-
console.error(e)
|
|
190
|
-
return null
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
addMembers(members: RoomMembers) {
|
|
194
|
-
const batch = fuego.db.batch()
|
|
195
|
-
const ref = fuego.db.doc(this.path)
|
|
196
|
-
Object.keys(members).forEach((uid: string) =>
|
|
197
|
-
batch.update(ref, {
|
|
198
|
-
[`members.${uid}`]: members[uid]
|
|
199
|
-
})
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
batch.update(ref, {
|
|
203
|
-
currentMembers: firestore.FieldValue.arrayUnion(...Object.keys(members))
|
|
204
|
-
})
|
|
205
|
-
|
|
206
|
-
return batch.commit()
|
|
207
|
-
}
|
|
208
|
-
removeMembers(members: RoomMembers) {
|
|
209
|
-
const batch = fuego.db.batch()
|
|
210
|
-
const ref = fuego.db.doc(this.path)
|
|
211
|
-
|
|
212
|
-
Object.keys(members).forEach((uid: string) =>
|
|
213
|
-
batch.update(ref, {
|
|
214
|
-
[`members.${uid}.exists`]: false
|
|
215
|
-
})
|
|
216
|
-
)
|
|
217
|
-
|
|
218
|
-
batch.update(ref, {
|
|
219
|
-
currentMembers: firestore.FieldValue.arrayRemove(...Object.keys(members))
|
|
220
|
-
})
|
|
221
|
-
|
|
222
|
-
return batch.commit()
|
|
223
|
-
}
|
|
224
|
-
async create() {
|
|
225
|
-
try {
|
|
226
|
-
if (roomIsNewModel(this.room)) return this.addToFirebase()
|
|
227
|
-
throw new Error(
|
|
228
|
-
'Tried to create room without the proper schema. See NewRoomModel typescript type.'
|
|
229
|
-
)
|
|
230
|
-
} catch (e) {
|
|
231
|
-
console.error(e)
|
|
232
|
-
return null
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
async createViaCallable(): Promise<firebase.functions.HttpsCallableResult> {
|
|
236
|
-
try {
|
|
237
|
-
if (roomIsCreateCallable(this.room)) {
|
|
238
|
-
const create = fuego.firebase
|
|
239
|
-
.functions()
|
|
240
|
-
.httpsCallable(chat.httpCallables.createRoom)
|
|
241
|
-
return create({
|
|
242
|
-
recipients: this.room.recipients,
|
|
243
|
-
name: this.room.name || '',
|
|
244
|
-
avatar: this.room.avatar || ''
|
|
245
|
-
})
|
|
246
|
-
}
|
|
247
|
-
throw new Error(
|
|
248
|
-
'Error: improper room model for Room.createCallable(). The error comes from config for new Room(config). Make sure schema for config is correct'
|
|
249
|
-
)
|
|
250
|
-
} catch (e) {
|
|
251
|
-
console.error(e)
|
|
252
|
-
return {
|
|
253
|
-
data: null
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
edit() {
|
|
258
|
-
try {
|
|
259
|
-
// typeguard
|
|
260
|
-
if (roomIsEditModel(this.room)) return this.updateOnFirebase()
|
|
261
|
-
throw new Error(
|
|
262
|
-
'Tried to edit room without the proper schema. See EditRoomModel typescript type.'
|
|
263
|
-
)
|
|
264
|
-
} catch (e) {
|
|
265
|
-
console.error(e)
|
|
266
|
-
return null
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
getUsersTyping() {
|
|
270
|
-
return this.getArrayOfMembersOtherThanMe().filter(
|
|
271
|
-
member => member.typing && member.typing.state === 'typing'
|
|
272
|
-
)
|
|
273
|
-
|
|
274
|
-
// return Object.keys((this.room as ExistingRoomModel).members || {})
|
|
275
|
-
// .filter(
|
|
276
|
-
// (uid: string) =>
|
|
277
|
-
// this.room &&
|
|
278
|
-
// this.room.members &&
|
|
279
|
-
// this.room.members[uid] &&
|
|
280
|
-
// this.room.members[uid].typing
|
|
281
|
-
// )
|
|
282
|
-
// .map(
|
|
283
|
-
// (uid: string) =>
|
|
284
|
-
// (this.room as ExistingRoomModel) &&
|
|
285
|
-
// this.room.members &&
|
|
286
|
-
// this.room.members[uid]
|
|
287
|
-
// )
|
|
288
|
-
}
|
|
289
|
-
updateOnFirebase() {
|
|
290
|
-
const { id, ...room } = this.room as EditRoomModel
|
|
291
|
-
return fuego.db.doc(this.path).update(room)
|
|
292
|
-
}
|
|
293
|
-
addToFirebase() {
|
|
294
|
-
const { uid, displayName, photoURL } = fuego.auth()
|
|
295
|
-
.currentUser as firebase.User
|
|
296
|
-
const date = fuego.firebase.firestore.FieldValue.serverTimestamp()
|
|
297
|
-
const me: NewRoomMember = {
|
|
298
|
-
name: displayName || 'Inexistent Poopnugget',
|
|
299
|
-
exists: true,
|
|
300
|
-
avatar: photoURL || '',
|
|
301
|
-
joinedAt: date
|
|
302
|
-
}
|
|
303
|
-
const members: RoomMembers = {
|
|
304
|
-
...(this.room as NewRoomModel).members,
|
|
305
|
-
[uid]: me
|
|
306
|
-
}
|
|
307
|
-
const room: CreateRoomModel = {
|
|
308
|
-
members,
|
|
309
|
-
currentMembers: [...Object.keys(members)].sort(),
|
|
310
|
-
createdAt: date,
|
|
311
|
-
lastEdited: date,
|
|
312
|
-
lastMessage: {
|
|
313
|
-
system: true,
|
|
314
|
-
text: `${me.name} started a chat`,
|
|
315
|
-
createdAt: date,
|
|
316
|
-
id: uuid.v4(),
|
|
317
|
-
name: me.name
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
const ref = fuego.db.collection(chat.roomsCollection).doc()
|
|
321
|
-
return ref.set(room)
|
|
322
|
-
}
|
|
323
|
-
}
|