Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit e06139c

Browse files
committed
Fix emoji in RTE edition
1 parent 3214085 commit e06139c

File tree

4 files changed

+42
-21
lines changed

4 files changed

+42
-21
lines changed

src/components/views/rooms/wysiwyg_composer/EditWysiwygComposer.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
import React, { forwardRef, RefObject, useRef } from "react";
17+
import React, { ForwardedRef, forwardRef, MutableRefObject, useRef } from "react";
1818
import classNames from "classnames";
1919

2020
import EditorStateTransfer from "../../../../utils/EditorStateTransfer";
@@ -24,16 +24,18 @@ import { useWysiwygEditActionHandler } from "./hooks/useWysiwygEditActionHandler
2424
import { useEditing } from "./hooks/useEditing";
2525
import { useInitialContent } from "./hooks/useInitialContent";
2626
import { ComposerContext, getDefaultContextValue } from "./ComposerContext";
27+
import { ComposerFunctions } from "./types";
2728

2829
interface ContentProps {
29-
disabled: boolean;
30+
disabled?: boolean;
31+
composerFunctions: ComposerFunctions;
3032
}
3133

3234
const Content = forwardRef<HTMLElement, ContentProps>(function Content(
33-
{ disabled }: ContentProps,
34-
forwardRef: RefObject<HTMLElement>,
35+
{ disabled = false, composerFunctions }: ContentProps,
36+
forwardRef: ForwardedRef<HTMLElement>,
3537
) {
36-
useWysiwygEditActionHandler(disabled, forwardRef);
38+
useWysiwygEditActionHandler(disabled, forwardRef as MutableRefObject<HTMLElement>, composerFunctions);
3739
return null;
3840
});
3941

@@ -65,9 +67,9 @@ export default function EditWysiwygComposer({ editorStateTransfer, className, ..
6567
onSend={editMessage}
6668
{...props}
6769
>
68-
{(ref) => (
70+
{(ref, composerFunctions) => (
6971
<>
70-
<Content disabled={props.disabled} ref={ref} />
72+
<Content disabled={props.disabled} ref={ref} composerFunctions={composerFunctions} />
7173
<EditionButtons
7274
onCancelClick={endEditing}
7375
onSaveClick={editMessage}

src/components/views/rooms/wysiwyg_composer/components/Emoji.tsx

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,23 @@ import dis from "../../../../../dispatcher/dispatcher";
2222
import { ComposerInsertPayload } from "../../../../../dispatcher/payloads/ComposerInsertPayload";
2323
import { Action } from "../../../../../dispatcher/actions";
2424
import { useRoomContext } from "../../../../../contexts/RoomContext";
25-
import { useComposerContext } from "../ComposerContext";
26-
import { setSelection } from "../utils/selection";
2725

2826
interface EmojiProps {
2927
menuPosition: AboveLeftOf;
3028
}
3129

3230
export function Emoji({ menuPosition }: EmojiProps) {
3331
const roomContext = useRoomContext();
34-
const composerContext = useComposerContext();
3532

3633
return (
3734
<EmojiButton
3835
menuPosition={menuPosition}
3936
addEmoji={(emoji) => {
40-
setSelection(composerContext.selection).then(() =>
41-
dis.dispatch<ComposerInsertPayload>({
42-
action: Action.ComposerInsert,
43-
text: emoji,
44-
timelineRenderingType: roomContext.timelineRenderingType,
45-
}),
46-
);
37+
dis.dispatch<ComposerInsertPayload>({
38+
action: Action.ComposerInsert,
39+
text: emoji,
40+
timelineRenderingType: roomContext.timelineRenderingType,
41+
});
4742
return true;
4843
}}
4944
/>

src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygEditActionHandler.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,18 @@ import { ActionPayload } from "../../../../../dispatcher/payloads";
2222
import { TimelineRenderingType, useRoomContext } from "../../../../../contexts/RoomContext";
2323
import { useDispatcher } from "../../../../../hooks/useDispatcher";
2424
import { focusComposer } from "./utils";
25+
import { ComposerType } from "../../../../../dispatcher/payloads/ComposerInsertPayload";
26+
import { ComposerFunctions } from "../types";
27+
import { setSelection } from "../utils/selection";
28+
import { useComposerContext } from "../ComposerContext";
2529

26-
export function useWysiwygEditActionHandler(disabled: boolean, composerElement: RefObject<HTMLElement>) {
30+
export function useWysiwygEditActionHandler(
31+
disabled: boolean,
32+
composerElement: RefObject<HTMLElement>,
33+
composerFunctions: ComposerFunctions,
34+
) {
2735
const roomContext = useRoomContext();
36+
const composerContext = useComposerContext();
2837
const timeoutId = useRef<number | null>(null);
2938

3039
const handler = useCallback(
@@ -39,9 +48,21 @@ export function useWysiwygEditActionHandler(disabled: boolean, composerElement:
3948
case Action.FocusEditMessageComposer:
4049
focusComposer(composerElement, context, roomContext, timeoutId);
4150
break;
51+
case Action.ComposerInsert:
52+
if (payload.timelineRenderingType !== roomContext.timelineRenderingType) break;
53+
if (payload.composerType !== ComposerType.Edit) break;
54+
55+
if (payload.userId) {
56+
// TODO insert mention - see SendMessageComposer
57+
} else if (payload.event) {
58+
// TODO insert quote message - see SendMessageComposer
59+
} else if (payload.text) {
60+
setSelection(composerContext.selection).then(() => composerFunctions.insertText(payload.text));
61+
}
62+
break;
4263
}
4364
},
44-
[disabled, composerElement, timeoutId, roomContext],
65+
[disabled, composerElement, composerFunctions, timeoutId, roomContext, composerContext],
4566
);
4667

4768
useDispatcher(defaultDispatcher, handler);

src/components/views/rooms/wysiwyg_composer/hooks/useWysiwygSendActionHandler.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,16 @@ import { useDispatcher } from "../../../../../hooks/useDispatcher";
2424
import { focusComposer } from "./utils";
2525
import { ComposerFunctions } from "../types";
2626
import { ComposerType } from "../../../../../dispatcher/payloads/ComposerInsertPayload";
27+
import { useComposerContext } from "../ComposerContext";
28+
import { setSelection } from "../utils/selection";
2729

2830
export function useWysiwygSendActionHandler(
2931
disabled: boolean,
3032
composerElement: MutableRefObject<HTMLElement>,
3133
composerFunctions: ComposerFunctions,
3234
) {
3335
const roomContext = useRoomContext();
36+
const composerContext = useComposerContext();
3437
const timeoutId = useRef<number | null>(null);
3538

3639
const handler = useCallback(
@@ -59,12 +62,12 @@ export function useWysiwygSendActionHandler(
5962
} else if (payload.event) {
6063
// TODO insert quote message - see SendMessageComposer
6164
} else if (payload.text) {
62-
composerFunctions.insertText(payload.text);
65+
setSelection(composerContext.selection).then(() => composerFunctions.insertText(payload.text));
6366
}
6467
break;
6568
}
6669
},
67-
[disabled, composerElement, composerFunctions, timeoutId, roomContext],
70+
[disabled, composerElement, roomContext, composerFunctions, composerContext],
6871
);
6972

7073
useDispatcher(defaultDispatcher, handler);

0 commit comments

Comments
 (0)