Skip to content

Commit b0481e7

Browse files
committed
fix: make message input tests run
1 parent 0bea2d4 commit b0481e7

24 files changed

+2397
-1644
lines changed

src/components/MediaRecorder/hooks/useMediaRecorder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useCallback, useEffect, useMemo, useState } from 'react';
22
import { MediaRecorderController } from '../classes';
33
import { useTranslationContext } from '../../../context';
4-
import { useMessageComposer } from '../../MessageInput/hooks/messageComposer/useMessageComposer';
4+
import { useMessageComposer } from '../../MessageInput';
55

66
import type { LocalVoiceRecordingAttachment } from 'stream-chat';
77
import type { CustomAudioRecordingConfig, MediaRecordingState } from '../classes';

src/components/Message/MessageSimple.tsx

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback, useMemo, useState } from 'react';
1+
import React, { useMemo, useState } from 'react';
22
import clsx from 'clsx';
33

44
import { MessageErrorIcon } from './icons';
@@ -19,13 +19,8 @@ import {
1919

2020
import { Avatar as DefaultAvatar } from '../Avatar';
2121
import { Attachment as DefaultAttachment } from '../Attachment';
22-
import {
23-
EditMessageForm as DefaultEditMessageForm,
24-
MessageInput,
25-
useMessageComposer,
26-
} from '../MessageInput';
22+
import { EditMessageModal } from '../MessageInput';
2723
import { MML } from '../MML';
28-
import { Modal } from '../Modal';
2924
import { Poll } from '../Poll';
3025
import { ReactionsList as DefaultReactionList } from '../Reactions';
3126
import { MessageBounceModal } from '../MessageBounce/MessageBounceModal';
@@ -41,34 +36,6 @@ import type { MessageUIComponentProps } from './types';
4136
import { StreamedMessageText as DefaultStreamedMessageText } from './StreamedMessageText';
4237
import { isDateSeparatorMessage } from '../MessageList';
4338

44-
const EditMessageModal = ({
45-
additionalMessageInputProps,
46-
}: Pick<MessageUIComponentProps, 'additionalMessageInputProps'>) => {
47-
const { EditMessageInput = DefaultEditMessageForm } = useComponentContext();
48-
const { clearEditingState } = useMessageContext();
49-
const messageComposer = useMessageComposer();
50-
const onEditModalClose = useCallback(() => {
51-
clearEditingState();
52-
messageComposer.restore();
53-
}, [clearEditingState, messageComposer]);
54-
55-
return (
56-
<Modal
57-
className='str-chat__edit-message-modal'
58-
onClose={onEditModalClose}
59-
open={true}
60-
>
61-
<MessageInput
62-
clearEditingState={clearEditingState}
63-
grow
64-
hideSendButton
65-
Input={EditMessageInput}
66-
{...additionalMessageInputProps}
67-
/>
68-
</Modal>
69-
);
70-
};
71-
7239
type MessageSimpleWithContextProps = MessageContextValue;
7340

7441
const MessageSimpleWithContext = (props: MessageSimpleWithContextProps) => {

src/components/MessageActions/MessageActionsBox.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
} from '../../context';
1313

1414
import { CustomMessageActionsList as DefaultCustomMessageActionsList } from './CustomMessageActionsList';
15-
import { useMessageComposer } from '../MessageInput/hooks/messageComposer/useMessageComposer';
15+
import { useMessageComposer } from '../MessageInput';
1616

1717
type PropsDrilledToMessageActionsBox =
1818
| 'getMessageActions'

src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { UnsupportedAttachmentPreview as DefaultUnknownAttachmentPreview } from
1414
import { VoiceRecordingPreview as DefaultVoiceRecordingPreview } from './VoiceRecordingPreview';
1515
import { FileAttachmentPreview as DefaultFilePreview } from './FileAttachmentPreview';
1616
import { ImageAttachmentPreview as DefaultImagePreview } from './ImageAttachmentPreview';
17-
import { useMessageComposer } from '../hooks/messageComposer/useMessageComposer';
17+
import { useMessageComposer } from '../hooks';
1818
import { useAttachmentManagerState } from '../hooks/messageComposer/useAttachmentManagerState';
1919
import type { VoiceRecordingPreviewProps } from './VoiceRecordingPreview';
2020
import type { FileAttachmentPreviewProps } from './FileAttachmentPreview';

src/components/MessageInput/DropzoneProvider.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,24 @@ import {
1515
import type { MessageInputProps } from './MessageInput';
1616

1717
import type { UnknownType } from '../../types/types';
18-
import { useMessageComposer } from './hooks/messageComposer/useMessageComposer';
19-
import { useAttachmentManagerState } from './hooks/messageComposer/useAttachmentManagerState';
18+
import { useMessageComposer } from './hooks';
19+
import { useAttachmentManagerState } from './hooks';
20+
import { useStateStore } from '../../store';
21+
import type { MessageComposerConfig } from 'stream-chat';
2022

21-
// const attachmentManagerStateSelector = <
22-
//
23-
// >(
24-
// state: AttachmentManagerState,
25-
// ) => ({ isUploadEnabled: state.isUploadEnabled });
23+
const attachmentManagerConfigStateSelector = (state: MessageComposerConfig) => ({
24+
maxNumberOfFilesPerMessage: state.attachments.maxNumberOfFilesPerMessage,
25+
});
2626

2727
const DropzoneInner = ({ children }: PropsWithChildren<UnknownType>) => {
2828
const { acceptedFiles } = useChannelStateContext('DropzoneProvider');
2929

3030
const { cooldownRemaining } = useMessageInputContext('DropzoneProvider');
3131
const messageComposer = useMessageComposer();
32+
const { maxNumberOfFilesPerMessage } = useStateStore(
33+
messageComposer.configState,
34+
attachmentManagerConfigStateSelector,
35+
);
3236
const { availableUploadSlots, isUploadEnabled } = useAttachmentManagerState();
3337

3438
return (
@@ -37,7 +41,7 @@ const DropzoneInner = ({ children }: PropsWithChildren<UnknownType>) => {
3741
disabled={!isUploadEnabled || !!cooldownRemaining}
3842
handleFiles={messageComposer.attachmentManager.uploadFiles}
3943
maxNumberOfFiles={availableUploadSlots}
40-
multiple={messageComposer.attachmentManager.maxNumberOfFilesPerMessage > 1}
44+
multiple={maxNumberOfFilesPerMessage > 1}
4145
>
4246
{children}
4347
</ImageDropzone>

src/components/MessageInput/EditMessageForm.tsx

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
import React, { useCallback, useEffect } from 'react';
2+
import { MessageInput } from './MessageInput';
23
import { MessageInputFlat } from './MessageInputFlat';
3-
4-
import { useMessageInputContext, useTranslationContext } from '../../context';
4+
import { Modal } from '../Modal';
5+
import {
6+
useComponentContext,
7+
useMessageContext,
8+
useMessageInputContext,
9+
useTranslationContext,
10+
} from '../../context';
511
import { useMessageComposer, useMessageComposerHasSendableData } from './hooks';
612

13+
import type { MessageUIComponentProps } from '../Message';
14+
715
const EditMessageFormSendButton = () => {
816
const { t } = useTranslationContext();
917
const hasSendableData = useMessageComposerHasSendableData();
@@ -58,3 +66,31 @@ export const EditMessageForm = () => {
5866
</form>
5967
);
6068
};
69+
70+
export const EditMessageModal = ({
71+
additionalMessageInputProps,
72+
}: Pick<MessageUIComponentProps, 'additionalMessageInputProps'>) => {
73+
const { EditMessageInput = EditMessageForm } = useComponentContext();
74+
const { clearEditingState } = useMessageContext();
75+
const messageComposer = useMessageComposer();
76+
const onEditModalClose = useCallback(() => {
77+
clearEditingState();
78+
messageComposer.restore();
79+
}, [clearEditingState, messageComposer]);
80+
81+
return (
82+
<Modal
83+
className='str-chat__edit-message-modal'
84+
onClose={onEditModalClose}
85+
open={true}
86+
>
87+
<MessageInput
88+
clearEditingState={clearEditingState}
89+
grow
90+
hideSendButton
91+
Input={EditMessageInput}
92+
{...additionalMessageInputProps}
93+
/>
94+
</Modal>
95+
);
96+
};

src/components/MessageInput/LinkPreviewList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { LinkPreviewsManager } from 'stream-chat';
99
import { useStateStore } from '../../store';
1010
import { PopperTooltip } from '../Tooltip';
1111
import { useEnterLeaveHandlers } from '../Tooltip/hooks';
12-
import { useMessageComposer } from './hooks/messageComposer/useMessageComposer';
12+
import { useMessageComposer } from './hooks';
1313
import { CloseIcon, LinkIcon } from './icons';
1414

1515
const linkPreviewsManagerStateSelector = (state: LinkPreviewsManagerState) => ({

src/components/MessageInput/MessageInput.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { PropsWithChildren } from 'react';
22
import React, { useEffect } from 'react';
33

44
import { MessageInputFlat } from './MessageInputFlat';
5-
import { useMessageComposer } from './hooks/messageComposer/useMessageComposer';
5+
import { useMessageComposer } from './hooks';
66
import { useCooldownTimer } from './hooks/useCooldownTimer';
77
import { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';
88
import { useMessageInputState } from './hooks/useMessageInputState';
@@ -40,8 +40,15 @@ export interface EmojiSearchIndex {
4040
}
4141

4242
export type MessageInputProps = {
43-
/** Additional props to be passed to the underlying `AutoCompleteTextarea` component, [available props](https://www.npmjs.com/package/react-textarea-autosize) */
44-
additionalTextareaProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;
43+
/**
44+
* Additional props to be passed to the underlying `AutoCompleteTextarea` component.
45+
* Default value is handled via MessageComposer.
46+
* [Available props](https://www.npmjs.com/package/react-textarea-autosize)
47+
*/
48+
additionalTextareaProps?: Omit<
49+
React.TextareaHTMLAttributes<HTMLTextAreaElement>,
50+
'defaultValue'
51+
>;
4552
/**
4653
* When enabled, recorded messages won’t be sent immediately.
4754
* Instead, they will “stack up” with other attachments in the message composer allowing the user to send multiple attachments as part of the same message.
@@ -71,8 +78,6 @@ export type MessageInputProps = {
7178
emojiSearchIndex?: ComponentContextValue['emojiSearchIndex'];
7279
/** If true, focuses the text input on component mount */
7380
focus?: boolean;
74-
/** Generates the default value for the underlying textarea element. The function's return value takes precedence before additionalTextareaProps.defaultValue. */
75-
getDefaultValue?: () => string | string[];
7681
/** If true, expands the text input vertically for new lines */
7782
grow?: boolean;
7883
/** Allows to hide MessageInput's send button. */

src/components/MessageInput/MessageInputFlat.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
QuotedMessagePreviewHeader,
2121
} from './QuotedMessagePreview';
2222
import { LinkPreviewList as DefaultLinkPreviewList } from './LinkPreviewList';
23-
import { useMessageComposer } from './hooks/messageComposer/useMessageComposer';
23+
import { useMessageComposer } from './hooks';
2424
import { TextAreaComposer } from '../TextAreaComposer';
2525
import { AIStates, useAIState } from '../AIStateIndicator';
2626
import { RecordingAttachmentType } from '../MediaRecorder/classes';

src/components/MessageInput/QuotedMessagePreview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { useComponentContext } from '../../context/ComponentContext';
1010
import { useTranslationContext } from '../../context/TranslationContext';
1111

1212
import { useStateStore } from '../../store';
13-
import { useMessageComposer } from './hooks/messageComposer/useMessageComposer';
13+
import { useMessageComposer } from './hooks';
1414
import { renderText as defaultRenderText } from '../Message/renderText';
1515
import type { MessageComposerState, TranslationLanguages } from 'stream-chat';
1616
import type { MessageContextValue } from '../../context';

0 commit comments

Comments
 (0)