Message: Fix editing while receiving message update (#1755)
This commit is contained in:
parent
73432c957b
commit
30c2d3835b
@ -1,4 +1,4 @@
|
|||||||
import { useCallback, useEffect } from '../../../../lib/teact/teact';
|
import { useCallback } from '../../../../lib/teact/teact';
|
||||||
import { getDispatch } from '../../../../lib/teact/teactn';
|
import { getDispatch } from '../../../../lib/teact/teactn';
|
||||||
|
|
||||||
import { ApiMessage } from '../../../../api/types';
|
import { ApiMessage } from '../../../../api/types';
|
||||||
@ -8,6 +8,7 @@ import parseMessageInput from '../../../../util/parseMessageInput';
|
|||||||
import focusEditableElement from '../../../../util/focusEditableElement';
|
import focusEditableElement from '../../../../util/focusEditableElement';
|
||||||
import { hasMessageMedia } from '../../../../modules/helpers';
|
import { hasMessageMedia } from '../../../../modules/helpers';
|
||||||
import { getTextWithEntitiesAsHtml } from '../../../common/helpers/renderTextWithEntities';
|
import { getTextWithEntitiesAsHtml } from '../../../common/helpers/renderTextWithEntities';
|
||||||
|
import useOnChange from '../../../../hooks/useOnChange';
|
||||||
|
|
||||||
const useEditing = (
|
const useEditing = (
|
||||||
htmlRef: { current: string },
|
htmlRef: { current: string },
|
||||||
@ -18,21 +19,21 @@ const useEditing = (
|
|||||||
) => {
|
) => {
|
||||||
const { editMessage } = getDispatch();
|
const { editMessage } = getDispatch();
|
||||||
|
|
||||||
// TODO useOnChange
|
useOnChange(([prevEditedMessage]) => {
|
||||||
// Handle editing message
|
|
||||||
useEffect(() => {
|
|
||||||
if (!editedMessage) {
|
if (!editedMessage) {
|
||||||
setHtml('');
|
setHtml('');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (prevEditedMessage?.id === editedMessage.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
setHtml(getTextWithEntitiesAsHtml(editedMessage.content.text));
|
setHtml(getTextWithEntitiesAsHtml(editedMessage.content.text));
|
||||||
|
|
||||||
requestAnimationFrame(() => {
|
requestAnimationFrame(() => {
|
||||||
const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;
|
const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;
|
||||||
focusEditableElement(messageInput, true);
|
focusEditableElement(messageInput, true);
|
||||||
});
|
});
|
||||||
}, [editedMessage, setHtml]);
|
}, [editedMessage, setHtml] as const);
|
||||||
|
|
||||||
const handleEditComplete = useCallback(() => {
|
const handleEditComplete = useCallback(() => {
|
||||||
const { text, entities } = parseMessageInput(htmlRef.current!);
|
const { text, entities } = parseMessageInput(htmlRef.current!);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import usePrevious from './usePrevious';
|
import usePrevious from './usePrevious';
|
||||||
|
|
||||||
const useOnChange = <T extends any[]>(cb: (args: T | []) => void, dependencies: T) => {
|
const useOnChange = <T extends readonly any[]>(cb: (args: T | readonly []) => void, dependencies: T) => {
|
||||||
const prevDeps = usePrevious<T>(dependencies);
|
const prevDeps = usePrevious<T>(dependencies);
|
||||||
if (!prevDeps || dependencies.some((d, i) => d !== prevDeps[i])) {
|
if (!prevDeps || dependencies.some((d, i) => d !== prevDeps[i])) {
|
||||||
cb(prevDeps || []);
|
cb(prevDeps || []);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user