Message: Fix editing while receiving message update (#1755)

This commit is contained in:
Alexander Zinchuk 2022-03-09 01:03:03 +01:00
parent 73432c957b
commit 30c2d3835b
2 changed files with 8 additions and 7 deletions

View File

@ -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!);

View File

@ -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 || []);