From 69813b0fd0ad1ea7049944459fd499149b425554 Mon Sep 17 00:00:00 2001 From: Kirill Date: Mon, 25 May 2026 19:15:32 +0500 Subject: [PATCH] fix: guard against destroyed editor in RichTextMessageEditor --- .../src/shared/ui/RichTextMessageEditor.tsx | 17 +++++++++-------- server/prisma/prisma/dev.db | Bin 352256 -> 352256 bytes 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/client/src/shared/ui/RichTextMessageEditor.tsx b/client/src/shared/ui/RichTextMessageEditor.tsx index 00f6a48..28e1526 100644 --- a/client/src/shared/ui/RichTextMessageEditor.tsx +++ b/client/src/shared/ui/RichTextMessageEditor.tsx @@ -30,18 +30,19 @@ export function RichTextMessageEditor({ content: initialContent, editable: !disabled, onUpdate: ({ editor: tiptap }) => { + if (tiptap.isDestroyed) return const plainText = tiptap.getText().trim() onChange(plainText ? tiptap.getHTML() : '') }, }) useEffect(() => { - if (!editor) return + if (!editor || editor.isDestroyed) return editor.setEditable(!disabled) }, [disabled, editor]) useEffect(() => { - if (!editor) return + if (!editor || editor.isDestroyed) return const normalizedValue = value.trim() ? value : '

' if (editor.getHTML() === normalizedValue) return editor.commands.setContent(normalizedValue, { emitUpdate: false }) @@ -52,8 +53,8 @@ export function RichTextMessageEditor({ editor?.chain().focus().toggleBold().run()} - color={editor?.isActive('bold') ? 'primary' : 'default'} + onClick={() => editor?.chain()?.focus().toggleBold().run()} + color={editor && !editor.isDestroyed && editor.isActive('bold') ? 'primary' : 'default'} disabled={disabled} aria-label="Жирный" > @@ -61,8 +62,8 @@ export function RichTextMessageEditor({ editor?.chain().focus().toggleItalic().run()} - color={editor?.isActive('italic') ? 'primary' : 'default'} + onClick={() => editor?.chain()?.focus().toggleItalic().run()} + color={editor && !editor.isDestroyed && editor.isActive('italic') ? 'primary' : 'default'} disabled={disabled} aria-label="Курсив" > @@ -70,8 +71,8 @@ export function RichTextMessageEditor({ editor?.chain().focus().toggleBulletList().run()} - color={editor?.isActive('bulletList') ? 'primary' : 'default'} + onClick={() => editor?.chain()?.focus().toggleBulletList().run()} + color={editor && !editor.isDestroyed && editor.isActive('bulletList') ? 'primary' : 'default'} disabled={disabled} aria-label="Список" > diff --git a/server/prisma/prisma/dev.db b/server/prisma/prisma/dev.db index e15f8f2fab9e736712d5bbe1e0f73af79f351139..1d6c4fbda1a3540f2bbe8b0855712a7acb129961 100644 GIT binary patch delta 3930 zcmd5`$MavN@=gTYnwF5U6Z@C zNs$`=+WynY46LwB6qO0CGc$2xuns0{IHWQM&dD5eR7ct7{u+b*vG2RY_Rd5R>R=Ea zm-l_|eZQa2_t$%erz#FlRUBQ7&K;|4LFYc|J)N{5Y^Sh2RnD%&;|zsw<4mf&`8+mnWH>WQTuY)=CFF=xcjyf;W7B4qz|2_ZnPQ5fXnc#p zxA32-^7hYh;%Xbh&o5^-n9;7*p7uR$JNN9^yEnJJl&LV=+PCd`RkP?sx*ajiR;rAm z@LAjnPS}nUtx44X+<@R$S=PZ4*26+98jgcn@8~+18slPV?kIU@!#A8i=w1MQv1E&id)krY~QA zbNbWiNpO>XRUKK?Cq@FXAvOjApQ_YFN5RRFkUHXW3JpUZHR9?)dIh;qkw~aCIO>(n z4Zfg~uc1&xW$q=>6h7Wtwf5yTCJyN>G1yC2nmC&#eN-9IwK#)hWU9(AGWuuTi85q0 zVIz4Q-JNyA*Z3Gvv>PY7+UWDZ+I9+`#M@!YiL1M53uiXZkrs#nX?=tawLjvkk4kmK zL#N->#tGu5$`(JLBiBG%H_{y>2uc{}Qwce$Pib&_M?G3}+}FlmwS(+_z7RXv;JZQr znk$)-UiuUKl8&W(1NAKBYrWX~4X!V2v3_HI+Mkh8Rr)Yu$}-F(eVwxu9qfjvNp$={ zSK2zhJwR}r`Z4{0W~x$5^H(@=fuomae&*;A;#fDKdVS?%^g0=i)AFryd0`6Dtchud zDt42?H&f;EHT=RR(>~kNl!o+C6Vq#@OCM19Q0W73@h_$0@nX7++hAKotut9oOF1Zl zh7>V)QJ3Aa*E6KbQm`lc0pQ^W#cj+kh<?w&A6v+~S=jkwsq=-zcVR=2S=3Z`SensI`Qn>Q=0#j&xgd zT?Vow3fbf)*%T7%qV*x6Rx9&Oo{-2ZqR_+(0e~0ay?$8?3f|zrm_64AfL483Fj#8e zVpqeYS>zT0&x!AnXvug^u!9^3vVhDFxf@tVbCeGX;wbbWSfEG>?{6XP$KK?qZG3EqIyHR9{@_zid$gj91Y zfw({fvl@cgxX%LDf=3W!9p)kcMq{JF(NMsl3uLy|pSYbwi(dQxfqLkcS~IxCwW5NG z@11jtODl>a1eD|xVlIbI&D}tn!V0gb;cYF0d~g76FC=cl5E^+=SSU&LQK#cq^_0e2 zX)TojY-^H>9mL&QQLjUg_0uo` z5L2V04%sj1Qd#RsJD(*Y0erZi%Jk47i{XP@fvmWkT!GHwEBGxugm>d|Tm$|5@6vJI zZ79FNSas6;a$Ka7YI_Z}&N448P&CXr={VeKTuNTTGIN^?<%mfy%?m9F)d-&%+{@g+YaYED8{TYbnPJM7S+Qip?_dcZ!N23H_y>F$p92ctz~f7p)n=6I zxg_6D%~Tv^+XwG#_Ej;OXe?UX&lpm6`z+nSm5# z7n)V(79^E}72V=u00NNF&-hPo77W;V=Jo#tF>K36Lo0 z<(C3_l#jo@kV(K^n^TrSl7oX;n1O+n)gBff=|HcWf`U4uD5D~=BH0Kn@KRE9GRsnn zD)aMlGV@Xy+ZF_cIzhr3Lc+|!h}S|!gq8Iuc9v!W?X&>dnQl^$o@J3@NUWW=z;@ok znM~jb