Skip to content

Commit 9fe18f0

Browse files
committed
refactor(message-composer): rewrite composer from scratch
1 parent 1526ac0 commit 9fe18f0

61 files changed

Lines changed: 1143 additions & 546 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import { supabaseClient } from '@utils/supabase'
2-
import { Database } from '@types'
3-
4-
type TMessage = Database['public']['Tables']['messages']['Row']
2+
import { Database, TMsgRow, TSendMsgeArgs } from '@types'
53

64
export const sendMessage = async (
7-
content: TMessage['content'],
8-
channel_id: TMessage['channel_id'],
9-
user_id: TMessage['user_id'],
10-
html: TMessage['html'],
11-
reply_to_message_id: TMessage['reply_to_message_id']
5+
content: TMsgRow['content'],
6+
channel_id: TMsgRow['channel_id'],
7+
user_id: TMsgRow['user_id'],
8+
html: TMsgRow['html'],
9+
reply_to_message_id: TMsgRow['reply_to_message_id']
1210
) =>
1311
await supabaseClient
1412
.from('messages')
@@ -20,15 +18,15 @@ export const sendMessage = async (
2018
reply_to_message_id
2119
})
2220
.select()
23-
.returns<TMessage[]>()
21+
.returns<TMsgRow[]>()
2422
.throwOnError()
2523

2624
export const sendThreadMessage = async (
27-
content: TMessage['content'],
28-
channel_id: TMessage['channel_id'],
29-
user_id: TMessage['user_id'],
30-
html: TMessage['html'],
31-
thread_id: TMessage['thread_id']
25+
content: TMsgRow['content'],
26+
channel_id: TMsgRow['channel_id'],
27+
user_id: TMsgRow['user_id'],
28+
html: TMsgRow['html'],
29+
thread_id: TMsgRow['thread_id']
3230
) =>
3331
await supabaseClient
3432
.from('messages')
@@ -40,5 +38,5 @@ export const sendThreadMessage = async (
4038
thread_id
4139
})
4240
.select()
43-
.returns<TMessage[]>()
41+
.returns<TMsgRow[]>()
4442
.throwOnError()

packages/webapp/api/rpc/createThreadMessage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Database } from '@types'
33

44
type TCreateDirectMsgArg = Database['public']['Functions']['create_thread_message']['Args']
55

6-
export const create_thread_message = async (arg: TCreateDirectMsgArg) =>
6+
export const createThreadMessage = async (arg: TCreateDirectMsgArg) =>
77
await supabaseClient.rpc('create_thread_message', {
88
p_content: arg.p_content,
99
p_html: arg.p_html,

packages/webapp/components/TipTap/toolbar/Icon.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import React from 'react'
2+
import { MdCode, MdFormatColorText, MdOutlineEmojiEmotions } from 'react-icons/md'
3+
import { RiAtLine, RiCodeBlock } from 'react-icons/ri'
4+
import { IoSend } from 'react-icons/io5'
25
import {
36
Bold,
47
Italic,
@@ -17,6 +20,7 @@ import {
1720
Printer,
1821
Filter
1922
} from '@icons'
23+
import { TbBlockquote } from 'react-icons/tb'
2024

2125
const icons: { [key: string]: React.ComponentType<{ size?: number; fill?: string }> } = {
2226
Bold,
@@ -34,7 +38,14 @@ const icons: { [key: string]: React.ComponentType<{ size?: number; fill?: string
3438
Undo,
3539
Redo,
3640
Printer,
37-
Filter
41+
Filter,
42+
MdCode,
43+
RiCodeBlock,
44+
MdFormatColorText,
45+
MdOutlineEmojiEmotions,
46+
RiAtLine,
47+
IoSend,
48+
TbBlockquote
3849
}
3950

4051
type TIcon = {

packages/webapp/components/chat/components/ChannelActionBar.tsx

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useMemo } from 'react'
2-
import SendMessage from './send-message/SendMessage'
32
import JoinBroadcastChannel from './JoinBroadcastChannel'
43
import JoinGroupChannel from './JoinGroupChannel'
54
import JoinPrivateChannel from './JoinDirectChannel'
@@ -8,6 +7,43 @@ import { useAuthStore, useChatStore } from '@stores'
87
import { useChannel } from '../context/ChannelProvider'
98
import SignInToJoinChannel from './SignInToJoinChannel'
109
import { TChannelSettings } from '@types'
10+
import MessageComposer from './MessageComposer/MessageComposer'
11+
12+
const SendMessage = () => {
13+
return (
14+
<MessageComposer className="chat_editor_container mb-2 flex w-full flex-col">
15+
<MessageComposer.Context>
16+
<MessageComposer.ReplyContext />
17+
<MessageComposer.EditContext />
18+
<MessageComposer.CommentContext />
19+
</MessageComposer.Context>
20+
<div className="rounded-md border border-gray-300 bg-transparent shadow-md">
21+
<MessageComposer.Toolbar className="bg-base-300/60 h-10 rounded-t-md border-b p-2 px-1">
22+
<MessageComposer.BoldButton size={10} />
23+
<MessageComposer.ItalicButton size={10} />
24+
<MessageComposer.StrikethroughButton size={14} />
25+
<div className="divided" />
26+
<MessageComposer.HyperlinkButton size={18} />
27+
<MessageComposer.BulletListButton size={16} />
28+
<MessageComposer.OrderedListButton size={16} />
29+
<div className="divided" />
30+
<MessageComposer.BlockquoteButton size={20} />
31+
<MessageComposer.CodeButton size={20} />
32+
<MessageComposer.CodeBlockButton size={20} />
33+
</MessageComposer.Toolbar>
34+
35+
<MessageComposer.Input />
36+
37+
<MessageComposer.Actions>
38+
<MessageComposer.ToggleToolbarButton />
39+
<MessageComposer.EmojiButton />
40+
<MessageComposer.MentionButton />
41+
<MessageComposer.SendButton />
42+
</MessageComposer.Actions>
43+
</div>
44+
</MessageComposer>
45+
)
46+
}
1147

1248
export const ChannelActionBar = () => {
1349
const { channelId } = useChannel()

0 commit comments

Comments
 (0)