@webinex/chatify 2.0.1-alpha1 → 2.0.2-alpha2

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.
Files changed (232) hide show
  1. package/dist/css/chatify.css +111 -12
  2. package/dist/esm/index.js +2 -2
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/types/core/api/api.d.ts +10784 -232
  5. package/dist/esm/types/core/api/baseApi.d.ts +1 -1
  6. package/dist/esm/types/ui/Conversation/Conversation.d.ts +2 -0
  7. package/dist/esm/types/ui/Conversation/ConversationContext.d.ts +2 -0
  8. package/dist/esm/types/ui/Conversation/InputBox/InputBoxFile.d.ts +8 -0
  9. package/dist/esm/types/ui/Conversation/InputBox/InputBoxFileList.d.ts +8 -0
  10. package/dist/esm/types/ui/Conversation/InputBox/InputFilesBox.d.ts +11 -1
  11. package/dist/esm/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +2 -0
  12. package/dist/esm/types/ui/Conversation/InputBox/InputTextBox.d.ts +1 -0
  13. package/dist/esm/types/ui/Conversation/InputBox/index.d.ts +8 -1
  14. package/dist/esm/types/ui/Conversation/Message/MessageFile.d.ts +6 -0
  15. package/dist/esm/types/ui/Conversation/Message/MessageFileList.d.ts +3 -0
  16. package/dist/esm/types/ui/Conversation/Message/index.d.ts +6 -0
  17. package/dist/esm/types/ui/common/Icon.d.ts +2 -0
  18. package/dist/esm/types/ui/customize.d.ts +2 -2
  19. package/dist/esm/types/ui/localizer.d.ts +5 -0
  20. package/dist/esm/types/ui/useFormatter.d.ts +3 -0
  21. package/dist/index.d.ts +10835 -239
  22. package/package.json +94 -93
  23. package/src/core/api/api.ts +643 -642
  24. package/src/core/api/baseApi.ts +38 -38
  25. package/src/core/api/index.ts +1 -1
  26. package/src/core/client.ts +280 -280
  27. package/src/core/constants.ts +1 -1
  28. package/src/core/debounce.ts +90 -90
  29. package/src/core/index.ts +4 -4
  30. package/src/core/types.tsx +152 -152
  31. package/src/index.ts +2 -2
  32. package/src/styles/aside.scss +162 -161
  33. package/src/styles/chat.scss +209 -208
  34. package/src/styles/index.scss +153 -110
  35. package/src/styles/input.scss +147 -74
  36. package/src/styles/keyframes.scss +14 -14
  37. package/src/styles/members.scss +13 -13
  38. package/src/styles/mixins.scss +25 -20
  39. package/src/styles/variables.scss +13 -10
  40. package/src/ui/Chat/ChatContext.tsx +30 -30
  41. package/src/ui/Chat/ChatEditableHeaderName.tsx +63 -63
  42. package/src/ui/Chat/ChatHeaderActions.tsx +19 -19
  43. package/src/ui/Chat/ChatPanel.tsx +30 -30
  44. package/src/ui/Chat/ChatView.tsx +115 -115
  45. package/src/ui/Chat/Members/ChatMembersButton.tsx +9 -9
  46. package/src/ui/Chat/Members/ChatMembersPanel.tsx +112 -112
  47. package/src/ui/Chat/Members/ChatMembersPreview.tsx +25 -25
  48. package/src/ui/Chat/Members/index.ts +13 -13
  49. package/src/ui/Chat/index.ts +6 -6
  50. package/src/ui/ChatGroup/ChatGroupContext.tsx +50 -50
  51. package/src/ui/ChatGroup/ChatGroupPanel.tsx +73 -73
  52. package/src/ui/ChatGroup/Create/CreateChatButton.tsx +15 -15
  53. package/src/ui/ChatGroup/Create/CreateChatForm.tsx +36 -36
  54. package/src/ui/ChatGroup/Create/CreateChatMemberInput.tsx +65 -65
  55. package/src/ui/ChatGroup/Create/CreateChatNameInput.tsx +25 -25
  56. package/src/ui/ChatGroup/Create/CreateChatPanel.tsx +45 -45
  57. package/src/ui/ChatGroup/Create/index.ts +19 -19
  58. package/src/ui/ChatGroup/Layout/ChatGroupAside.tsx +12 -12
  59. package/src/ui/ChatGroup/Layout/ChatGroupBody.tsx +10 -10
  60. package/src/ui/ChatGroup/Layout/ChatGroupFooter.tsx +3 -3
  61. package/src/ui/ChatGroup/Layout/ChatGroupHeader.tsx +5 -5
  62. package/src/ui/ChatGroup/Layout/ChatGroupMain.tsx +17 -17
  63. package/src/ui/ChatGroup/Layout/index.ts +19 -19
  64. package/src/ui/ChatGroup/List/ChatList.tsx +41 -41
  65. package/src/ui/ChatGroup/List/ChatListItemAvatar.tsx +22 -22
  66. package/src/ui/ChatGroup/List/ChatListItemBox.tsx +26 -26
  67. package/src/ui/ChatGroup/List/ChatListItemLastMessage.tsx +15 -15
  68. package/src/ui/ChatGroup/List/ChatListItemLastMessageAuthor.tsx +15 -15
  69. package/src/ui/ChatGroup/List/ChatListItemLastMessageContent.tsx +21 -21
  70. package/src/ui/ChatGroup/List/ChatListItemLastMessageSentAt.tsx +22 -22
  71. package/src/ui/ChatGroup/List/ChatListItemName.tsx +8 -8
  72. package/src/ui/ChatGroup/List/ChatListItemUnreadCount.tsx +12 -12
  73. package/src/ui/ChatGroup/List/index.ts +31 -31
  74. package/src/ui/ChatGroup/index.ts +5 -5
  75. package/src/ui/Chatify.tsx +9 -9
  76. package/src/ui/Conversation/Conversation.tsx +78 -76
  77. package/src/ui/Conversation/ConversationActions.tsx +5 -5
  78. package/src/ui/Conversation/ConversationBody.tsx +28 -28
  79. package/src/ui/Conversation/ConversationContext.ts +29 -27
  80. package/src/ui/Conversation/ConversationHeader.tsx +23 -23
  81. package/src/ui/Conversation/ConversationName.tsx +7 -7
  82. package/src/ui/Conversation/InputBox/InputBox.tsx +113 -40
  83. package/src/ui/Conversation/InputBox/InputBoxFile.tsx +38 -0
  84. package/src/ui/Conversation/InputBox/InputBoxFileList.tsx +21 -0
  85. package/src/ui/Conversation/InputBox/InputFilesBox.tsx +78 -9
  86. package/src/ui/Conversation/InputBox/InputSubmitButtonBox.tsx +26 -17
  87. package/src/ui/Conversation/InputBox/InputTextBox.tsx +55 -53
  88. package/src/ui/Conversation/InputBox/index.ts +23 -16
  89. package/src/ui/Conversation/Message/MessageAuthor.tsx +13 -13
  90. package/src/ui/Conversation/Message/MessageBox.tsx +20 -20
  91. package/src/ui/Conversation/Message/MessageContent.tsx +15 -11
  92. package/src/ui/Conversation/Message/MessageFile.tsx +52 -0
  93. package/src/ui/Conversation/Message/MessageFileList.tsx +14 -0
  94. package/src/ui/Conversation/Message/MessageInfoBox.tsx +28 -28
  95. package/src/ui/Conversation/Message/MessageRow.tsx +28 -28
  96. package/src/ui/Conversation/Message/MessageText.tsx +7 -7
  97. package/src/ui/Conversation/Message/index.ts +28 -22
  98. package/src/ui/Conversation/NextObserver/NextMessagesObserver.tsx +47 -47
  99. package/src/ui/Conversation/NextObserver/index.ts +1 -1
  100. package/src/ui/Conversation/ReadObserver/MessageReadObserver.tsx +49 -49
  101. package/src/ui/Conversation/ReadObserver/index.ts +1 -1
  102. package/src/ui/Conversation/SendingMessage/SendingMessageBox.tsx +16 -16
  103. package/src/ui/Conversation/SendingMessage/SendingMessageContent.tsx +13 -13
  104. package/src/ui/Conversation/SendingMessage/SendingMessageInfoBox.tsx +13 -13
  105. package/src/ui/Conversation/SendingMessage/SendingMessageText.tsx +7 -7
  106. package/src/ui/Conversation/SendingMessage/index.ts +16 -16
  107. package/src/ui/Conversation/SystemMessage/SystemMessageBox.tsx +20 -20
  108. package/src/ui/Conversation/SystemMessage/SystemMessageRow.tsx +28 -28
  109. package/src/ui/Conversation/SystemMessage/index.ts +10 -10
  110. package/src/ui/Conversation/index.ts +13 -13
  111. package/src/ui/Thread/ThreadActions.tsx +22 -22
  112. package/src/ui/Thread/ThreadContext.ts +13 -13
  113. package/src/ui/Thread/ThreadPanel.tsx +127 -127
  114. package/src/ui/Thread/index.tsx +3 -3
  115. package/src/ui/color.ts +20 -20
  116. package/src/ui/common/Avatar.tsx +20 -20
  117. package/src/ui/common/Icon.tsx +44 -40
  118. package/src/ui/common/MessageSkeleton.tsx +20 -20
  119. package/src/ui/common/index.ts +13 -13
  120. package/src/ui/customize.tsx +51 -53
  121. package/src/ui/index.ts +11 -11
  122. package/src/ui/localizer.tsx +96 -81
  123. package/src/ui/useFormatter.tsx +17 -0
  124. package/dist/esm/types/core/api/accountApi.d.ts +0 -5
  125. package/dist/esm/types/core/api/chatApi.d.ts +0 -16
  126. package/dist/esm/types/core/api/chatListApi.d.ts +0 -5
  127. package/dist/esm/types/core/api/chatMemberApi.d.ts +0 -6
  128. package/dist/esm/types/core/api/chatMessageApi.d.ts +0 -3
  129. package/dist/esm/types/core/api/threadApi.d.ts +0 -1
  130. package/dist/esm/types/core/api/threadMessageApi.d.ts +0 -6
  131. package/src/core/api/accountApi.ts +0 -11
  132. package/src/core/api/chatApi.ts +0 -87
  133. package/src/core/api/chatListApi.ts +0 -134
  134. package/src/core/api/chatMemberApi.ts +0 -20
  135. package/src/core/api/chatMessageApi.ts +0 -12
  136. package/src/core/api/threadApi.ts +0 -8
  137. package/src/core/api/threadMessageApi.ts +0 -20
  138. package/src/types/core/api/accountApi.d.ts +0 -5
  139. package/src/types/core/api/api.d.ts +0 -2380
  140. package/src/types/core/api/baseApi.d.ts +0 -15
  141. package/src/types/core/api/chatApi.d.ts +0 -16
  142. package/src/types/core/api/chatListApi.d.ts +0 -5
  143. package/src/types/core/api/chatMemberApi.d.ts +0 -6
  144. package/src/types/core/api/chatMessageApi.d.ts +0 -3
  145. package/src/types/core/api/index.d.ts +0 -1
  146. package/src/types/core/api/threadApi.d.ts +0 -1
  147. package/src/types/core/api/threadMessageApi.d.ts +0 -6
  148. package/src/types/core/client.d.ts +0 -83
  149. package/src/types/core/constants.d.ts +0 -1
  150. package/src/types/core/debounce.d.ts +0 -27
  151. package/src/types/core/index.d.ts +0 -4
  152. package/src/types/core/types.d.ts +0 -105
  153. package/src/types/index.d.ts +0 -2
  154. package/src/types/ui/Chat/ChatContext.d.ts +0 -10
  155. package/src/types/ui/Chat/ChatEditableHeaderName.d.ts +0 -2
  156. package/src/types/ui/Chat/ChatHeaderActions.d.ts +0 -2
  157. package/src/types/ui/Chat/ChatPanel.d.ts +0 -13
  158. package/src/types/ui/Chat/ChatView.d.ts +0 -17
  159. package/src/types/ui/Chat/Members/ChatMembersButton.d.ts +0 -2
  160. package/src/types/ui/Chat/Members/ChatMembersPanel.d.ts +0 -2
  161. package/src/types/ui/Chat/Members/ChatMembersPreview.d.ts +0 -2
  162. package/src/types/ui/Chat/Members/index.d.ts +0 -11
  163. package/src/types/ui/Chat/index.d.ts +0 -6
  164. package/src/types/ui/ChatGroup/ChatGroupContext.d.ts +0 -12
  165. package/src/types/ui/ChatGroup/ChatGroupPanel.d.ts +0 -15
  166. package/src/types/ui/ChatGroup/Create/CreateChatButton.d.ts +0 -2
  167. package/src/types/ui/ChatGroup/Create/CreateChatForm.d.ts +0 -11
  168. package/src/types/ui/ChatGroup/Create/CreateChatMemberInput.d.ts +0 -5
  169. package/src/types/ui/ChatGroup/Create/CreateChatNameInput.d.ts +0 -5
  170. package/src/types/ui/ChatGroup/Create/CreateChatPanel.d.ts +0 -2
  171. package/src/types/ui/ChatGroup/Create/index.d.ts +0 -17
  172. package/src/types/ui/ChatGroup/Layout/ChatGroupAside.d.ts +0 -2
  173. package/src/types/ui/ChatGroup/Layout/ChatGroupBody.d.ts +0 -2
  174. package/src/types/ui/ChatGroup/Layout/ChatGroupFooter.d.ts +0 -2
  175. package/src/types/ui/ChatGroup/Layout/ChatGroupHeader.d.ts +0 -2
  176. package/src/types/ui/ChatGroup/Layout/ChatGroupMain.d.ts +0 -2
  177. package/src/types/ui/ChatGroup/Layout/index.d.ts +0 -17
  178. package/src/types/ui/ChatGroup/List/ChatList.d.ts +0 -2
  179. package/src/types/ui/ChatGroup/List/ChatListItemAvatar.d.ts +0 -3
  180. package/src/types/ui/ChatGroup/List/ChatListItemBox.d.ts +0 -6
  181. package/src/types/ui/ChatGroup/List/ChatListItemLastMessage.d.ts +0 -3
  182. package/src/types/ui/ChatGroup/List/ChatListItemLastMessageAuthor.d.ts +0 -3
  183. package/src/types/ui/ChatGroup/List/ChatListItemLastMessageContent.d.ts +0 -3
  184. package/src/types/ui/ChatGroup/List/ChatListItemLastMessageSentAt.d.ts +0 -3
  185. package/src/types/ui/ChatGroup/List/ChatListItemName.d.ts +0 -3
  186. package/src/types/ui/ChatGroup/List/ChatListItemUnreadCount.d.ts +0 -3
  187. package/src/types/ui/ChatGroup/List/index.d.ts +0 -29
  188. package/src/types/ui/ChatGroup/index.d.ts +0 -5
  189. package/src/types/ui/Chatify.d.ts +0 -8
  190. package/src/types/ui/Conversation/Conversation.d.ts +0 -21
  191. package/src/types/ui/Conversation/ConversationActions.d.ts +0 -2
  192. package/src/types/ui/Conversation/ConversationBody.d.ts +0 -2
  193. package/src/types/ui/Conversation/ConversationContext.d.ts +0 -20
  194. package/src/types/ui/Conversation/ConversationHeader.d.ts +0 -2
  195. package/src/types/ui/Conversation/ConversationName.d.ts +0 -2
  196. package/src/types/ui/Conversation/InputBox/InputBox.d.ts +0 -2
  197. package/src/types/ui/Conversation/InputBox/InputFilesBox.d.ts +0 -2
  198. package/src/types/ui/Conversation/InputBox/InputSubmitButtonBox.d.ts +0 -5
  199. package/src/types/ui/Conversation/InputBox/InputTextBox.d.ts +0 -8
  200. package/src/types/ui/Conversation/InputBox/index.d.ts +0 -14
  201. package/src/types/ui/Conversation/Message/MessageAuthor.d.ts +0 -3
  202. package/src/types/ui/Conversation/Message/MessageBox.d.ts +0 -6
  203. package/src/types/ui/Conversation/Message/MessageContent.d.ts +0 -3
  204. package/src/types/ui/Conversation/Message/MessageInfoBox.d.ts +0 -3
  205. package/src/types/ui/Conversation/Message/MessageRow.d.ts +0 -6
  206. package/src/types/ui/Conversation/Message/MessageText.d.ts +0 -3
  207. package/src/types/ui/Conversation/Message/index.d.ts +0 -20
  208. package/src/types/ui/Conversation/NextObserver/NextMessagesObserver.d.ts +0 -5
  209. package/src/types/ui/Conversation/NextObserver/index.d.ts +0 -1
  210. package/src/types/ui/Conversation/ReadObserver/MessageReadObserver.d.ts +0 -6
  211. package/src/types/ui/Conversation/ReadObserver/index.d.ts +0 -1
  212. package/src/types/ui/Conversation/SendingMessage/SendingMessageBox.d.ts +0 -7
  213. package/src/types/ui/Conversation/SendingMessage/SendingMessageContent.d.ts +0 -3
  214. package/src/types/ui/Conversation/SendingMessage/SendingMessageInfoBox.d.ts +0 -3
  215. package/src/types/ui/Conversation/SendingMessage/SendingMessageText.d.ts +0 -3
  216. package/src/types/ui/Conversation/SendingMessage/index.d.ts +0 -14
  217. package/src/types/ui/Conversation/SystemMessage/SystemMessageBox.d.ts +0 -6
  218. package/src/types/ui/Conversation/SystemMessage/SystemMessageRow.d.ts +0 -9
  219. package/src/types/ui/Conversation/SystemMessage/index.d.ts +0 -8
  220. package/src/types/ui/Conversation/index.d.ts +0 -12
  221. package/src/types/ui/Thread/ThreadActions.d.ts +0 -2
  222. package/src/types/ui/Thread/ThreadContext.d.ts +0 -8
  223. package/src/types/ui/Thread/ThreadPanel.d.ts +0 -14
  224. package/src/types/ui/Thread/index.d.ts +0 -3
  225. package/src/types/ui/color.d.ts +0 -6
  226. package/src/types/ui/common/Avatar.d.ts +0 -6
  227. package/src/types/ui/common/Icon.d.ts +0 -20
  228. package/src/types/ui/common/MessageSkeleton.d.ts +0 -5
  229. package/src/types/ui/common/index.d.ts +0 -11
  230. package/src/types/ui/customize.d.ts +0 -9
  231. package/src/types/ui/index.d.ts +0 -11
  232. package/src/types/ui/localizer.d.ts +0 -35
@@ -1,36 +1,36 @@
1
- import { Button, Form } from 'antd';
2
- import { customize } from '../../customize';
3
- import { CreateChatNameInput } from './CreateChatNameInput';
4
- import { CreateChatMemberInput } from './CreateChatMemberInput';
5
- import { useLocalizer } from '../../localizer';
6
-
7
- export interface CreateChatFormValue {
8
- name: string;
9
- members: string[];
10
- }
11
-
12
- export interface CreateChatFormProps {
13
- value?: CreateChatFormValue;
14
- onSubmit: (value: CreateChatFormValue) => void;
15
- busy?: boolean;
16
- }
17
-
18
- const INITIAL_VALUE: CreateChatFormValue = {
19
- name: '',
20
- members: [],
21
- };
22
-
23
- export const CreateChatForm = customize('CreateChatForm', (props: CreateChatFormProps) => {
24
- const { value = INITIAL_VALUE, onSubmit, busy = false } = props;
25
- const localizer = useLocalizer();
26
-
27
- return (
28
- <Form onFinish={onSubmit} layout="vertical" disabled={busy} initialValues={value}>
29
- <CreateChatNameInput name="name" />
30
- <CreateChatMemberInput name="members" />
31
- <Button loading={busy} type="primary" block htmlType="submit">
32
- {localizer.addChat.submitBtn()}
33
- </Button>
34
- </Form>
35
- );
36
- });
1
+ import { Button, Form } from 'antd';
2
+ import { customize } from '../../customize';
3
+ import { CreateChatNameInput } from './CreateChatNameInput';
4
+ import { CreateChatMemberInput } from './CreateChatMemberInput';
5
+ import { useLocalizer } from '../../localizer';
6
+
7
+ export interface CreateChatFormValue {
8
+ name: string;
9
+ members: string[];
10
+ }
11
+
12
+ export interface CreateChatFormProps {
13
+ value?: CreateChatFormValue;
14
+ onSubmit: (value: CreateChatFormValue) => void;
15
+ busy?: boolean;
16
+ }
17
+
18
+ const INITIAL_VALUE: CreateChatFormValue = {
19
+ name: '',
20
+ members: [],
21
+ };
22
+
23
+ export const CreateChatForm = customize('CreateChatForm', (props: CreateChatFormProps) => {
24
+ const { value = INITIAL_VALUE, onSubmit, busy = false } = props;
25
+ const localizer = useLocalizer();
26
+
27
+ return (
28
+ <Form onFinish={onSubmit} layout="vertical" disabled={busy} initialValues={value}>
29
+ <CreateChatNameInput name="name" />
30
+ <CreateChatMemberInput name="members" />
31
+ <Button loading={busy} type="primary" block htmlType="submit">
32
+ {localizer.addChat.submitBtn()}
33
+ </Button>
34
+ </Form>
35
+ );
36
+ });
@@ -1,65 +1,65 @@
1
- import { useMemo } from 'react';
2
- import { chatifyApi } from '../../../core';
3
- import { customize } from '../../customize';
4
- import { Checkbox, Form, List } from 'antd';
5
- import { useLocalizer } from '../../localizer';
6
- import { Avatar } from '../../common/Avatar';
7
-
8
- export interface CreateChatMemberInputProps {
9
- name: string;
10
- }
11
-
12
- interface CheckboxListProps {
13
- value?: string[];
14
- onChange?: (value: string[]) => void;
15
- }
16
-
17
- function CheckboxList(props: CheckboxListProps) {
18
- const { value, onChange } = props;
19
- const { data: accounts, isFetching } = chatifyApi.useGetAccountListQuery();
20
- const me = chatifyApi.settings.me();
21
- const dataSource = useMemo(() => accounts?.filter((x) => x.id !== me) ?? [], [accounts, me]);
22
-
23
- return (
24
- <List
25
- rowKey="id"
26
- className="wxchtf-create-chat-member-input-list"
27
- loading={isFetching}
28
- dataSource={dataSource}
29
- renderItem={(x) => {
30
- const checked = value!.includes(x.id);
31
-
32
- return (
33
- <List.Item className={checked ? '--selected' : ''}>
34
- <Checkbox
35
- checked={checked}
36
- onChange={() =>
37
- onChange!(value!.includes(x.id) ? value!.filter((y) => y !== x.id) : [...value!, x.id])
38
- }
39
- >
40
- <List.Item.Meta avatar={<Avatar account={x} />} title={x.name} />
41
- </Checkbox>
42
- </List.Item>
43
- );
44
- }}
45
- />
46
- );
47
- }
48
-
49
- export const CreateChatMemberInput = customize(
50
- 'CreateChatMemberInput',
51
- (props: CreateChatMemberInputProps) => {
52
- const { name } = props;
53
- const localizer = useLocalizer();
54
-
55
- return (
56
- <Form.Item
57
- label={localizer.addChat.members.label()}
58
- rules={[{ required: true, message: localizer.addChat.members.required() }]}
59
- name={name}
60
- >
61
- <CheckboxList />
62
- </Form.Item>
63
- );
64
- },
65
- );
1
+ import { useMemo } from 'react';
2
+ import { chatifyApi } from '../../../core';
3
+ import { customize } from '../../customize';
4
+ import { Checkbox, Form, List } from 'antd';
5
+ import { useLocalizer } from '../../localizer';
6
+ import { Avatar } from '../../common/Avatar';
7
+
8
+ export interface CreateChatMemberInputProps {
9
+ name: string;
10
+ }
11
+
12
+ interface CheckboxListProps {
13
+ value?: string[];
14
+ onChange?: (value: string[]) => void;
15
+ }
16
+
17
+ function CheckboxList(props: CheckboxListProps) {
18
+ const { value, onChange } = props;
19
+ const { data: accounts, isFetching } = chatifyApi.useGetAccountListQuery();
20
+ const me = chatifyApi.settings.me();
21
+ const dataSource = useMemo(() => accounts?.filter((x) => x.id !== me) ?? [], [accounts, me]);
22
+
23
+ return (
24
+ <List
25
+ rowKey="id"
26
+ className="wxchtf-create-chat-member-input-list"
27
+ loading={isFetching}
28
+ dataSource={dataSource}
29
+ renderItem={(x) => {
30
+ const checked = value!.includes(x.id);
31
+
32
+ return (
33
+ <List.Item className={checked ? '--selected' : ''}>
34
+ <Checkbox
35
+ checked={checked}
36
+ onChange={() =>
37
+ onChange!(value!.includes(x.id) ? value!.filter((y) => y !== x.id) : [...value!, x.id])
38
+ }
39
+ >
40
+ <List.Item.Meta avatar={<Avatar account={x} />} title={x.name} />
41
+ </Checkbox>
42
+ </List.Item>
43
+ );
44
+ }}
45
+ />
46
+ );
47
+ }
48
+
49
+ export const CreateChatMemberInput = customize(
50
+ 'CreateChatMemberInput',
51
+ (props: CreateChatMemberInputProps) => {
52
+ const { name } = props;
53
+ const localizer = useLocalizer();
54
+
55
+ return (
56
+ <Form.Item
57
+ label={localizer.addChat.members.label()}
58
+ rules={[{ required: true, message: localizer.addChat.members.required() }]}
59
+ name={name}
60
+ >
61
+ <CheckboxList />
62
+ </Form.Item>
63
+ );
64
+ },
65
+ );
@@ -1,25 +1,25 @@
1
- import { Form, Input } from 'antd';
2
- import { customize } from '../../customize';
3
- import { useLocalizer } from '../../localizer';
4
-
5
- export interface CreateChatNameInputProps {
6
- name: string;
7
- }
8
-
9
- export const CreateChatNameInput = customize('CreateChatNameInput', (props: CreateChatNameInputProps) => {
10
- const { name } = props;
11
- const localizer = useLocalizer();
12
-
13
- return (
14
- <Form.Item
15
- name={name}
16
- label={localizer.addChat.name.label()}
17
- rules={[
18
- { required: true, message: localizer.addChat.name.required() },
19
- { max: 250, message: localizer.addChat.name.max250() },
20
- ]}
21
- >
22
- <Input />
23
- </Form.Item>
24
- );
25
- });
1
+ import { Form, Input } from 'antd';
2
+ import { customize } from '../../customize';
3
+ import { useLocalizer } from '../../localizer';
4
+
5
+ export interface CreateChatNameInputProps {
6
+ name: string;
7
+ }
8
+
9
+ export const CreateChatNameInput = customize('CreateChatNameInput', (props: CreateChatNameInputProps) => {
10
+ const { name } = props;
11
+ const localizer = useLocalizer();
12
+
13
+ return (
14
+ <Form.Item
15
+ name={name}
16
+ label={localizer.addChat.name.label()}
17
+ rules={[
18
+ { required: true, message: localizer.addChat.name.required() },
19
+ { max: 250, message: localizer.addChat.name.max250() },
20
+ ]}
21
+ >
22
+ <Input />
23
+ </Form.Item>
24
+ );
25
+ });
@@ -1,45 +1,45 @@
1
- import { chatifyApi } from '../../../core';
2
- import { useCallback } from 'react';
3
- import { useLocalizer } from '../../localizer';
4
- import { CreateChatForm, CreateChatFormValue } from './CreateChatForm';
5
- import { customize } from '../../customize';
6
- import { Button } from 'antd';
7
- import { Icon } from '../../common/Icon';
8
- import { useChatGroupContext } from '../ChatGroupContext';
9
-
10
- function useSubmit() {
11
- const [add, { isLoading }] = chatifyApi.useAddChatMutation();
12
- const { openChat } = useChatGroupContext();
13
-
14
- const onSubmit = useCallback(
15
- (value: CreateChatFormValue) =>
16
- add({
17
- name: value.name,
18
- members: value.members,
19
- })
20
- .unwrap()
21
- .then((id) => openChat(id)),
22
- [add, openChat],
23
- );
24
-
25
- return [onSubmit, isLoading] as const;
26
- }
27
-
28
- export const CreateChatPanel = customize('CreateChatPanel', () => {
29
- const localizer = useLocalizer();
30
- const [onSubmit, submitting] = useSubmit();
31
- const { toggleNewChat } = useChatGroupContext();
32
-
33
- return (
34
- <div className="wxchtf-create-chat-panel">
35
- <Button
36
- onClick={() => toggleNewChat()}
37
- className="wxchtf-create-chat-panel-close"
38
- type="link"
39
- icon={<Icon type="close" />}
40
- />
41
- <h3>{localizer.addChat.title()}</h3>
42
- <CreateChatForm busy={submitting ?? false} onSubmit={onSubmit} />
43
- </div>
44
- );
45
- });
1
+ import { chatifyApi } from '../../../core';
2
+ import { useCallback } from 'react';
3
+ import { useLocalizer } from '../../localizer';
4
+ import { CreateChatForm, CreateChatFormValue } from './CreateChatForm';
5
+ import { customize } from '../../customize';
6
+ import { Button } from 'antd';
7
+ import { Icon } from '../../common/Icon';
8
+ import { useChatGroupContext } from '../ChatGroupContext';
9
+
10
+ function useSubmit() {
11
+ const [add, { isLoading }] = chatifyApi.useAddChatMutation();
12
+ const { openChat } = useChatGroupContext();
13
+
14
+ const onSubmit = useCallback(
15
+ (value: CreateChatFormValue) =>
16
+ add({
17
+ name: value.name,
18
+ members: value.members,
19
+ })
20
+ .unwrap()
21
+ .then((id) => openChat(id)),
22
+ [add, openChat],
23
+ );
24
+
25
+ return [onSubmit, isLoading] as const;
26
+ }
27
+
28
+ export const CreateChatPanel = customize('CreateChatPanel', () => {
29
+ const localizer = useLocalizer();
30
+ const [onSubmit, submitting] = useSubmit();
31
+ const { toggleNewChat } = useChatGroupContext();
32
+
33
+ return (
34
+ <div className="wxchtf-create-chat-panel">
35
+ <Button
36
+ onClick={() => toggleNewChat()}
37
+ className="wxchtf-create-chat-panel-close"
38
+ type="link"
39
+ icon={<Icon type="close" />}
40
+ />
41
+ <h3>{localizer.addChat.title()}</h3>
42
+ <CreateChatForm busy={submitting ?? false} onSubmit={onSubmit} />
43
+ </div>
44
+ );
45
+ });
@@ -1,19 +1,19 @@
1
- import { CreateChatForm } from './CreateChatForm';
2
- import { CreateChatMemberInput } from './CreateChatMemberInput';
3
- import { CreateChatNameInput } from './CreateChatNameInput';
4
- import { CreateChatPanel } from './CreateChatPanel';
5
- import { CreateChatButton } from './CreateChatButton';
6
-
7
- export * from './CreateChatForm';
8
- export * from './CreateChatMemberInput';
9
- export * from './CreateChatNameInput';
10
- export * from './CreateChatPanel';
11
- export * from './CreateChatButton';
12
-
13
- export interface CreateChatPanelCustomizeValue {
14
- CreateChatForm?: typeof CreateChatForm.Component | null;
15
- CreateChatMemberInput?: typeof CreateChatMemberInput.Component | null;
16
- CreateChatNameInput?: typeof CreateChatNameInput.Component | null;
17
- CreateChatPanel?: typeof CreateChatPanel.Component | null;
18
- CreateChatButton?: typeof CreateChatButton.Component | null;
19
- }
1
+ import { CreateChatForm } from './CreateChatForm';
2
+ import { CreateChatMemberInput } from './CreateChatMemberInput';
3
+ import { CreateChatNameInput } from './CreateChatNameInput';
4
+ import { CreateChatPanel } from './CreateChatPanel';
5
+ import { CreateChatButton } from './CreateChatButton';
6
+
7
+ export * from './CreateChatForm';
8
+ export * from './CreateChatMemberInput';
9
+ export * from './CreateChatNameInput';
10
+ export * from './CreateChatPanel';
11
+ export * from './CreateChatButton';
12
+
13
+ export interface CreateChatPanelCustomizeValue {
14
+ CreateChatForm?: typeof CreateChatForm.Component | null;
15
+ CreateChatMemberInput?: typeof CreateChatMemberInput.Component | null;
16
+ CreateChatNameInput?: typeof CreateChatNameInput.Component | null;
17
+ CreateChatPanel?: typeof CreateChatPanel.Component | null;
18
+ CreateChatButton?: typeof CreateChatButton.Component | null;
19
+ }
@@ -1,12 +1,12 @@
1
- import { customize } from '../../customize';
2
- import { ChatList } from '../List';
3
- import { CreateChatButton } from '../Create/CreateChatButton';
4
-
5
- export const ChatGroupAside = customize('ChatGroupAside', () => {
6
- return (
7
- <div className="wxchtf-aside">
8
- <CreateChatButton />
9
- <ChatList />
10
- </div>
11
- );
12
- });
1
+ import { customize } from '../../customize';
2
+ import { ChatList } from '../List';
3
+ import { CreateChatButton } from '../Create/CreateChatButton';
4
+
5
+ export const ChatGroupAside = customize('ChatGroupAside', () => {
6
+ return (
7
+ <div className="wxchtf-aside">
8
+ <CreateChatButton />
9
+ <ChatList />
10
+ </div>
11
+ );
12
+ });
@@ -1,10 +1,10 @@
1
- import { customize } from '../../customize';
2
- import { ChatGroupAside } from './ChatGroupAside';
3
- import { ChatGroupMain } from './ChatGroupMain';
4
-
5
- export const ChatGroupBody = customize('ChatGroupBody', () => (
6
- <div className="wxchtf-body">
7
- <ChatGroupAside />
8
- <ChatGroupMain />
9
- </div>
10
- ));
1
+ import { customize } from '../../customize';
2
+ import { ChatGroupAside } from './ChatGroupAside';
3
+ import { ChatGroupMain } from './ChatGroupMain';
4
+
5
+ export const ChatGroupBody = customize('ChatGroupBody', () => (
6
+ <div className="wxchtf-body">
7
+ <ChatGroupAside />
8
+ <ChatGroupMain />
9
+ </div>
10
+ ));
@@ -1,3 +1,3 @@
1
- import { customize } from '../../customize';
2
-
3
- export const ChatGroupFooter = customize('ChatGroupFooter', () => <div className="wxchtf-footer"></div>);
1
+ import { customize } from '../../customize';
2
+
3
+ export const ChatGroupFooter = customize('ChatGroupFooter', () => <div className="wxchtf-footer"></div>);
@@ -1,5 +1,5 @@
1
- import { customize } from '../../customize';
2
-
3
- export const ChatGroupHeader = customize('ChatGroupHeader', () => {
4
- return <div className="wxchtf-header"></div>;
5
- });
1
+ import { customize } from '../../customize';
2
+
3
+ export const ChatGroupHeader = customize('ChatGroupHeader', () => {
4
+ return <div className="wxchtf-header"></div>;
5
+ });
@@ -1,17 +1,17 @@
1
- import { customize } from '../../customize';
2
- import { CreateChatPanel } from '../Create';
3
- import { ChatView } from '../../Chat';
4
- import { useChatGroupContext } from '../ChatGroupContext';
5
- import { chatifyApi } from '../../../core';
6
-
7
- export const ChatGroupMain = customize('ChatGroupMain', () => {
8
- const { chatId, view } = useChatGroupContext();
9
- const chat = chatifyApi.useChatListItem(chatId);
10
-
11
- return (
12
- <div className="wxchtf-main">
13
- {view === 'chat' && chat && <ChatView value={chat} key={chatId} />}
14
- {view === 'new-chat' && <CreateChatPanel />}
15
- </div>
16
- );
17
- });
1
+ import { customize } from '../../customize';
2
+ import { CreateChatPanel } from '../Create';
3
+ import { ChatView } from '../../Chat';
4
+ import { useChatGroupContext } from '../ChatGroupContext';
5
+ import { chatifyApi } from '../../../core';
6
+
7
+ export const ChatGroupMain = customize('ChatGroupMain', () => {
8
+ const { chatId, view } = useChatGroupContext();
9
+ const chat = chatifyApi.useChatListItem(chatId);
10
+
11
+ return (
12
+ <div className="wxchtf-main">
13
+ {view === 'chat' && chat && <ChatView value={chat} key={chatId} />}
14
+ {view === 'new-chat' && <CreateChatPanel />}
15
+ </div>
16
+ );
17
+ });
@@ -1,19 +1,19 @@
1
- import { ChatGroupAside } from './ChatGroupAside';
2
- import { ChatGroupHeader } from './ChatGroupHeader';
3
- import { ChatGroupFooter } from './ChatGroupFooter';
4
- import { ChatGroupMain } from './ChatGroupMain';
5
- import { ChatGroupBody } from './ChatGroupBody';
6
-
7
- export * from './ChatGroupAside';
8
- export * from './ChatGroupHeader';
9
- export * from './ChatGroupFooter';
10
- export * from './ChatGroupMain';
11
- export * from './ChatGroupBody';
12
-
13
- export interface ChatGroupLayoutCustomizeValue {
14
- ChatGroupAside?: typeof ChatGroupAside.Component | null;
15
- ChatGroupHeader?: typeof ChatGroupHeader.Component | null;
16
- ChatGroupFooter?: typeof ChatGroupFooter.Component | null;
17
- ChatGroupMain?: typeof ChatGroupMain.Component | null;
18
- ChatGroupBody?: typeof ChatGroupBody.Component | null;
19
- }
1
+ import { ChatGroupAside } from './ChatGroupAside';
2
+ import { ChatGroupHeader } from './ChatGroupHeader';
3
+ import { ChatGroupFooter } from './ChatGroupFooter';
4
+ import { ChatGroupMain } from './ChatGroupMain';
5
+ import { ChatGroupBody } from './ChatGroupBody';
6
+
7
+ export * from './ChatGroupAside';
8
+ export * from './ChatGroupHeader';
9
+ export * from './ChatGroupFooter';
10
+ export * from './ChatGroupMain';
11
+ export * from './ChatGroupBody';
12
+
13
+ export interface ChatGroupLayoutCustomizeValue {
14
+ ChatGroupAside?: typeof ChatGroupAside.Component | null;
15
+ ChatGroupHeader?: typeof ChatGroupHeader.Component | null;
16
+ ChatGroupFooter?: typeof ChatGroupFooter.Component | null;
17
+ ChatGroupMain?: typeof ChatGroupMain.Component | null;
18
+ ChatGroupBody?: typeof ChatGroupBody.Component | null;
19
+ }
@@ -1,41 +1,41 @@
1
- import { Menu, MenuProps } from 'antd';
2
- import { useCallback, useMemo } from 'react';
3
- import { chatifyApi } from '../../../core';
4
- import { ChatListItemBox } from './ChatListItemBox';
5
- import { customize } from '../../customize';
6
- import { useChatGroupContext } from '../ChatGroupContext';
7
-
8
- function useOnSelect() {
9
- const { openChat } = useChatGroupContext();
10
-
11
- return useCallback(
12
- (info: Parameters<NonNullable<MenuProps['onSelect']>>[0]) => openChat(info.key as string),
13
- [openChat],
14
- );
15
- }
16
-
17
- function useMenuItems() {
18
- const { data: chats } = chatifyApi.useGetChatListQuery();
19
-
20
- return useMemo<MenuProps['items']>(() => {
21
- return chats
22
- ?.slice()
23
- .sort((a, b) => -a.message.id.substring(47).localeCompare(b.message.id.substring(47)))
24
- .map((x) => ({ key: x.id, label: <ChatListItemBox chat={x} /> }));
25
- }, [chats]);
26
- }
27
-
28
- export const ChatList = customize('ChatList', () => {
29
- const { chatId } = useChatGroupContext();
30
- const selected = useMemo(() => (chatId ? [chatId] : []), [chatId]);
31
- const onSelect = useOnSelect();
32
- const items = useMenuItems();
33
-
34
- return (
35
- <>
36
- {items && (
37
- <Menu className="wxchtf-chat-list" selectedKeys={selected} onSelect={onSelect} items={items} />
38
- )}
39
- </>
40
- );
41
- });
1
+ import { Menu, MenuProps } from 'antd';
2
+ import { useCallback, useMemo } from 'react';
3
+ import { chatifyApi } from '../../../core';
4
+ import { ChatListItemBox } from './ChatListItemBox';
5
+ import { customize } from '../../customize';
6
+ import { useChatGroupContext } from '../ChatGroupContext';
7
+
8
+ function useOnSelect() {
9
+ const { openChat } = useChatGroupContext();
10
+
11
+ return useCallback(
12
+ (info: Parameters<NonNullable<MenuProps['onSelect']>>[0]) => openChat(info.key as string),
13
+ [openChat],
14
+ );
15
+ }
16
+
17
+ function useMenuItems() {
18
+ const { data: chats } = chatifyApi.useGetChatListQuery();
19
+
20
+ return useMemo<MenuProps['items']>(() => {
21
+ return chats
22
+ ?.slice()
23
+ .sort((a, b) => -a.message.id.substring(47).localeCompare(b.message.id.substring(47)))
24
+ .map((x) => ({ key: x.id, label: <ChatListItemBox chat={x} /> }));
25
+ }, [chats]);
26
+ }
27
+
28
+ export const ChatList = customize('ChatList', () => {
29
+ const { chatId } = useChatGroupContext();
30
+ const selected = useMemo(() => (chatId ? [chatId] : []), [chatId]);
31
+ const onSelect = useOnSelect();
32
+ const items = useMenuItems();
33
+
34
+ return (
35
+ <>
36
+ {items && (
37
+ <Menu className="wxchtf-chat-list" selectedKeys={selected} onSelect={onSelect} items={items} />
38
+ )}
39
+ </>
40
+ );
41
+ });
@@ -1,22 +1,22 @@
1
- import { color } from '../../color';
2
- import { Icon } from '../../common/Icon';
3
- import { customize } from '../../customize';
4
- import type { ChatListItemBoxProps } from './ChatListItemBox';
5
-
6
- export const ChatListItemAvatar = customize('ChatListItemAvatar', (props: ChatListItemBoxProps) => {
7
- const { id } = props.chat;
8
-
9
- return (
10
- <div
11
- className="wxchtf-chat-avatar"
12
- style={
13
- {
14
- '--background-color': color(id, { lightness: 90 }),
15
- '--color': color(id, { saturation: 60, lightness: 65 }),
16
- } as any
17
- }
18
- >
19
- <Icon type="chat" />
20
- </div>
21
- );
22
- });
1
+ import { color } from '../../color';
2
+ import { Icon } from '../../common/Icon';
3
+ import { customize } from '../../customize';
4
+ import type { ChatListItemBoxProps } from './ChatListItemBox';
5
+
6
+ export const ChatListItemAvatar = customize('ChatListItemAvatar', (props: ChatListItemBoxProps) => {
7
+ const { id } = props.chat;
8
+
9
+ return (
10
+ <div
11
+ className="wxchtf-chat-avatar"
12
+ style={
13
+ {
14
+ '--background-color': color(id, { lightness: 90 }),
15
+ '--color': color(id, { saturation: 60, lightness: 65 }),
16
+ } as any
17
+ }
18
+ >
19
+ <Icon type="chat" />
20
+ </div>
21
+ );
22
+ });