Use sentCounter in CompositionInput to drop old draft updates

This commit is contained in:
Scott Nonnenberg 2023-04-05 15:06:16 -07:00 committed by GitHub
parent 0e606c45b0
commit 4a18667ddf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 121 additions and 63 deletions

View file

@ -35,6 +35,7 @@ const useProps = (overrideProps: Partial<Props> = {}): Props => ({
addAttachment: action('addAttachment'),
conversationId: '123',
focusCounter: 0,
sendCounter: 0,
i18n,
isDisabled: false,
messageCompositionId: '456',

View file

@ -162,14 +162,15 @@ export type OwnProps = Readonly<{
export type Props = Pick<
CompositionInputProps,
| 'sortedGroupMembers'
| 'onEditorStateChange'
| 'onTextTooLong'
| 'clearQuotedMessage'
| 'draftText'
| 'draftBodyRanges'
| 'clearQuotedMessage'
| 'getPreferredBadge'
| 'getQuotedMessage'
| 'onEditorStateChange'
| 'onTextTooLong'
| 'sendCounter'
| 'sortedGroupMembers'
> &
Pick<
EmojiButtonProps,
@ -231,13 +232,14 @@ export function CompositionArea({
setMediaQualitySetting,
shouldSendHighQualityAttachments,
// CompositionInput
onEditorStateChange,
onTextTooLong,
clearQuotedMessage,
draftText,
draftBodyRanges,
clearQuotedMessage,
getPreferredBadge,
getQuotedMessage,
onEditorStateChange,
onTextTooLong,
sendCounter,
sortedGroupMembers,
// EmojiButton
onPickEmoji,
@ -805,6 +807,7 @@ export function CompositionArea({
onPickEmoji={onPickEmoji}
onSubmit={handleSubmit}
onTextTooLong={onTextTooLong}
sendCounter={sendCounter}
skinTone={skinTone}
sortedGroupMembers={sortedGroupMembers}
theme={theme}

View file

@ -33,6 +33,7 @@ const useProps = (overrideProps: Partial<Props> = {}): Props => ({
getQuotedMessage: action('getQuotedMessage'),
onPickEmoji: action('onPickEmoji'),
large: boolean('large', overrideProps.large || false),
sendCounter: 0,
sortedGroupMembers: overrideProps.sortedGroupMembers || [],
skinTone: select(
'skinTone',

View file

@ -79,6 +79,7 @@ export type Props = Readonly<{
getPreferredBadge: PreferredBadgeSelectorType;
large?: boolean;
inputApi?: React.MutableRefObject<InputApi | undefined>;
sendCounter: number;
skinTone?: EmojiPickDataType['skinTone'];
draftText?: string;
draftBodyRanges?: DraftBodyRangesType;
@ -88,12 +89,13 @@ export type Props = Readonly<{
sortedGroupMembers?: ReadonlyArray<ConversationType>;
scrollerRef?: React.RefObject<HTMLDivElement>;
onDirtyChange?(dirty: boolean): unknown;
onEditorStateChange?(
conversationId: string | undefined,
messageText: string,
bodyRanges: DraftBodyRangesType,
caretLocation?: number
): unknown;
onEditorStateChange?(options: {
bodyRanges: DraftBodyRangesType;
caretLocation?: number;
conversationId: string | undefined;
messageText: string;
sendCounter: number;
}): unknown;
onTextTooLong(): unknown;
onPickEmoji(o: EmojiPickDataType): unknown;
onSubmit(
@ -134,6 +136,7 @@ export function CompositionInput(props: Props): React.ReactElement {
onSubmit,
placeholder,
skinTone,
sendCounter,
sortedGroupMembers,
theme,
} = props;
@ -458,12 +461,13 @@ export function CompositionInput(props: Props): React.ReactElement {
setTimeout(() => {
const selection = quill.getSelection();
onEditorStateChange(
onEditorStateChange({
bodyRanges: mentions,
caretLocation: selection ? selection.index : undefined,
conversationId,
text,
mentions,
selection ? selection.index : undefined
);
messageText: text,
sendCounter,
});
}, 0);
}
}

View file

@ -86,12 +86,7 @@ export function CompositionTextArea({
}, [inputApiRef]);
const handleChange = React.useCallback(
(
_conversationId: string | undefined,
newValue: string,
bodyRanges: DraftBodyRangesType,
caretLocation?: number | undefined
) => {
({ bodyRanges, caretLocation, messageText: newValue }) => {
const inputEl = inputApiRef.current;
if (!inputEl) {
return;
@ -124,21 +119,22 @@ export function CompositionTextArea({
return (
<div className="CompositionTextArea">
<CompositionInput
placeholder={placeholder}
clearQuotedMessage={shouldNeverBeCalled}
scrollerRef={scrollerRef}
draftText={draftText}
getPreferredBadge={getPreferredBadge}
getQuotedMessage={noop}
i18n={i18n}
inputApi={inputApiRef}
large
moduleClassName="CompositionTextArea__input"
onScroll={onScroll}
onEditorStateChange={handleChange}
onPickEmoji={onPickEmoji}
onScroll={onScroll}
onSubmit={onSubmit}
onTextTooLong={onTextTooLong}
draftText={draftText}
placeholder={placeholder}
scrollerRef={scrollerRef}
sendCounter={0}
theme={theme}
/>
<div className="CompositionTextArea__emoji">

View file

@ -225,7 +225,7 @@ export function StoryViewsNRepliesModal({
i18n={i18n}
inputApi={inputApiRef}
moduleClassName="StoryViewsNRepliesModal__input"
onEditorStateChange={(_conversationId, messageText) => {
onEditorStateChange={({ messageText }) => {
setMessageBodyText(messageText);
}}
onPickEmoji={onUseEmoji}
@ -242,6 +242,7 @@ export function StoryViewsNRepliesModal({
firstName: authorTitle,
})
}
sendCounter={0}
sortedGroupMembers={sortedGroupMembers}
theme={ThemeType.dark}
>