Skip to content

Commit a2e4155

Browse files
Post-merge fixes
1 parent 991b070 commit a2e4155

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+489
-682
lines changed

src/components/AutoCompleteTextarea/Item.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
import React, { MouseEventHandler, Ref, useCallback } from 'react';
1+
import type { MouseEventHandler, Ref } from 'react';
2+
import React, { useCallback } from 'react';
23
import clsx from 'clsx';
3-
import { SuggestionItemProps } from '../ChatAutoComplete';
4-
import type { DefaultStreamChatGenerics } from '../../types';
4+
import type { SuggestionItemProps } from '../ChatAutoComplete';
5+
56
import type { UnknownType } from '../../types/types';
67

78
export const Item = React.forwardRef<HTMLAnchorElement, SuggestionItemProps>(
8-
function Item<
9-
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
10-
T extends UnknownType = UnknownType,
11-
>(props: SuggestionItemProps<StreamChatGenerics, T>, innerRef: Ref<HTMLAnchorElement>) {
9+
function Item<T extends UnknownType = UnknownType>(
10+
props: SuggestionItemProps<T>,
11+
innerRef: Ref<HTMLAnchorElement>,
12+
) {
1213
const {
1314
className,
1415
component: Component,

src/components/AutoCompleteTextarea/List.tsx

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
1-
import React, {
2-
CSSProperties,
3-
MouseEventHandler,
4-
useCallback,
5-
useEffect,
6-
useMemo,
7-
useState,
8-
} from 'react';
1+
/* eslint-disable react-hooks/exhaustive-deps */
2+
import type { CSSProperties } from 'react';
3+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
94
import clsx from 'clsx';
105

116
import { useComponentContext } from '../../context/ComponentContext';
127

138
import { Item } from './Item';
149
import { escapeRegExp } from '../Message/renderText';
15-
import type { DefaultStreamChatGenerics } from '../../types';
10+
1611
import type { CustomTrigger, UnknownType } from '../../types/types';
17-
import {
12+
import type {
1813
SuggestionEmoji,
1914
SuggestionItem,
2015
SuggestionListProps,
2116
SuggestionUser,
2217
} from '../ChatAutoComplete';
2318

2419
export const List = <
25-
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
2620
V extends CustomTrigger = CustomTrigger,
2721
EmojiData extends UnknownType = UnknownType,
2822
>({
@@ -40,9 +34,8 @@ export const List = <
4034
SuggestionItem: PropSuggestionItem,
4135
value: propValue,
4236
values,
43-
}: SuggestionListProps<StreamChatGenerics, V>) => {
44-
const { AutocompleteSuggestionItem } =
45-
useComponentContext<StreamChatGenerics>('SuggestionList');
37+
}: SuggestionListProps<V>) => {
38+
const { AutocompleteSuggestionItem } = useComponentContext('SuggestionList');
4639
const SuggestionItem = PropSuggestionItem || AutocompleteSuggestionItem || Item;
4740

4841
const [selectedItemIndex, setSelectedItemIndex] = useState<number | undefined>(
@@ -51,10 +44,12 @@ export const List = <
5144

5245
const itemsRef: HTMLElement[] = [];
5346

54-
const isSelected = (item: SuggestionItem<StreamChatGenerics, EmojiData>) =>
47+
const isSelected = (item: SuggestionItem<EmojiData>) =>
48+
// @ts-expect-error tmp
5549
selectedItemIndex === values.findIndex((value) => getId(value) === getId(item));
5650

57-
const getId = (item: SuggestionItem<StreamChatGenerics, EmojiData>) => {
51+
const getId = (item: SuggestionItem<EmojiData>) => {
52+
// @ts-expect-error tmp
5853
const textToReplace = getTextToReplace(item);
5954
if (textToReplace.key) {
6055
return textToReplace.key;
@@ -68,29 +63,23 @@ export const List = <
6863
};
6964

7065
const findItemIndex = useCallback(
71-
(item: SuggestionItem<StreamChatGenerics, V>) =>
66+
(item: SuggestionItem<V>) =>
7267
values.findIndex((value) =>
73-
value.id
74-
? value.id === (item as SuggestionUser<StreamChatGenerics>).id
75-
: value.name === item.name,
68+
value.id ? value.id === (item as SuggestionUser).id : value.name === item.name,
7669
),
7770
[values],
7871
);
7972

80-
const modifyText = (
81-
value: SuggestionListProps<StreamChatGenerics, V>['values'][number],
82-
) => {
73+
const modifyText = (value: SuggestionListProps<V>['values'][number]) => {
8374
if (!value) return;
84-
75+
// @ts-expect-error tmp
8576
onSelect(getTextToReplace(value));
77+
// @ts-expect-error tmp
8678
if (getSelectedItem) getSelectedItem(value);
8779
};
8880

8981
const handleClick = useCallback(
90-
(
91-
e: React.MouseEvent<Element, MouseEvent>,
92-
item: SuggestionItem<StreamChatGenerics, V>,
93-
) => {
82+
(e: React.MouseEvent<Element, MouseEvent>, item: SuggestionItem<V>) => {
9483
e?.preventDefault();
9584

9685
const index = findItemIndex(item);
@@ -101,7 +90,7 @@ export const List = <
10190
);
10291

10392
const selectItem = useCallback(
104-
(item: SuggestionItem<StreamChatGenerics, V>) => {
93+
(item: SuggestionItem<V>) => {
10594
const index = findItemIndex(item);
10695
setSelectedItemIndex(index);
10796
},
@@ -137,7 +126,6 @@ export const List = <
137126

138127
return null;
139128
},
140-
// eslint-disable-next-line react-hooks/exhaustive-deps
141129
[selectedItemIndex, values],
142130
);
143131

@@ -147,12 +135,13 @@ export const List = <
147135
}, [handleKeyDown]);
148136

149137
useEffect(() => {
138+
// @ts-expect-error tmp
150139
if (values?.length) selectItem(values[0]);
151140
}, [selectItem, values]);
152141

153142
const restructureItem = useCallback(
154-
(item: SuggestionItem<StreamChatGenerics, V>) => {
155-
const matched = item.name || (item as SuggestionUser<StreamChatGenerics>).id;
143+
(item: SuggestionItem<V>) => {
144+
const matched = item.name || (item as SuggestionUser).id;
156145

157146
const textBeforeCursor = (propValue || '').slice(0, selectionEnd);
158147
const triggerIndex = textBeforeCursor.lastIndexOf(currentTrigger);
@@ -168,6 +157,7 @@ export const List = <
168157
);
169158

170159
const restructuredValues = useMemo(
160+
// @ts-expect-error tmp
171161
() => values.map(restructureItem),
172162
[values, restructureItem],
173163
);
@@ -177,7 +167,7 @@ export const List = <
177167
{restructuredValues.map((item, i) => (
178168
<SuggestionItem
179169
className={itemClassName}
180-
// @ts-ignore
170+
// @ts-expect-error tmp
181171
component={component}
182172
item={item}
183173
key={getId(item).toString()}

src/components/AutoCompleteTextarea/TextareaX.tsx

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
1-
import React, { CSSProperties, useCallback, useEffect, useRef, useState } from 'react';
1+
/* eslint-disable @typescript-eslint/no-unused-vars */
2+
/* eslint-disable @typescript-eslint/no-explicit-any */
3+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
4+
/* eslint-disable react-hooks/exhaustive-deps */
5+
/* eslint-disable no-underscore-dangle */
6+
7+
import type { CSSProperties } from 'react';
8+
import React, { useCallback, useEffect, useRef, useState } from 'react';
29
import Textarea from 'react-textarea-autosize';
310
import getCaretCoordinates from 'textarea-caret';
411
import clsx from 'clsx';
512
import { List as DefaultSuggestionList } from './List';
6-
import {
7-
DEFAULT_CARET_POSITION,
8-
defaultScrollToItem,
9-
errorMessage,
10-
triggerPropsCheck,
11-
} from './utils';
13+
import { DEFAULT_CARET_POSITION, defaultScrollToItem, errorMessage } from './utils';
1214
import { isSafari } from '../../utils/browsers';
1315
import { CommandItem } from '../CommandItem';
1416
import { UserItem } from '../UserItem';
15-
import { SuggestionItemProps, SuggestionListProps } from '../ChatAutoComplete';
16-
import type { DefaultStreamChatGenerics } from '../../types';
17+
import type { SuggestionItemProps, SuggestionListProps } from '../ChatAutoComplete';
18+
1719
import type { CustomTrigger, UnknownType } from '../../types/types';
1820

1921
type TextareaState = {
@@ -32,7 +34,6 @@ type TextareaState = {
3234
};
3335

3436
type TextareaProps<
35-
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
3637
V extends CustomTrigger = CustomTrigger,
3738
EmojiData extends UnknownType = UnknownType,
3839
> = {
@@ -72,11 +73,9 @@ type TextareaProps<
7273
showMentionsList?: boolean;
7374
style?: Omit<CSSProperties, 'height'>;
7475
SuggestionItem?: React.ComponentType<
75-
React.ComponentType<SuggestionItemProps<StreamChatGenerics, EmojiData>>
76-
>;
77-
SuggestionList?: React.ComponentType<
78-
SuggestionListProps<StreamChatGenerics, V, EmojiData>
76+
React.ComponentType<SuggestionItemProps<EmojiData>>
7977
>;
78+
SuggestionList?: React.ComponentType<SuggestionListProps<V, EmojiData>>;
8079
trigger: Record<
8180
string,
8281
{
@@ -102,11 +101,10 @@ type TextareaProps<
102101
const _isCommand = (value: string) => value.startsWith('/');
103102

104103
export const TextareaX = <
105-
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
106104
V extends CustomTrigger = CustomTrigger,
107105
EmojiData extends UnknownType = UnknownType,
108106
>(
109-
props: TextareaProps<StreamChatGenerics, V, EmojiData>,
107+
props: TextareaProps<V, EmojiData>,
110108
) => {
111109
const {
112110
closeCommandsList,
@@ -129,7 +127,6 @@ export const TextareaX = <
129127
shouldSubmit,
130128
showCommandsList,
131129
showMentionsList,
132-
// @ts-ignore
133130
SuggestionItem,
134131
SuggestionList = DefaultSuggestionList,
135132
trigger,
@@ -153,11 +150,11 @@ export const TextareaX = <
153150
dataLoading: false,
154151
isComposing: false,
155152
left: null,
153+
propsValue: initialValue,
156154
selectionEnd: 0,
157155
selectionStart: 0,
158156
top: null,
159157
value: initialValue,
160-
propsValue: initialValue,
161158
});
162159

163160
const textareaRef = useRef<HTMLTextAreaElement>(null);
@@ -655,7 +652,7 @@ export const TextareaX = <
655652
triggerProps.values = data;
656653
});
657654

658-
// @ts-ignore
655+
// @ts-expect-error tmp
659656
triggerProps.component = showCommandsList ? CommandItem : UserItem;
660657
triggerProps.currentTrigger = showCommandsList ? '/' : '@';
661658
triggerProps.getTextToReplace = _getTextToReplace(showCommandsList ? '/' : '@');
@@ -711,9 +708,9 @@ export const TextareaX = <
711708

712709
setState((prev) => ({
713710
...prev,
711+
component: triggerSettings.component,
714712
data,
715713
dataLoading: false,
716-
component: triggerSettings.component,
717714
}));
718715
});
719716
}
@@ -801,7 +798,7 @@ export const TextareaX = <
801798
ref={setDropdownRef}
802799
style={restProps.dropdownStyle}
803800
>
804-
{/*// @ts-ignore*/}
801+
{/* @ts-expect-error tmp */}
805802
<SuggestionList
806803
className={restProps.listClassName}
807804
dropdownScroll={_dropdownScroll}

0 commit comments

Comments
 (0)