From fb778f56eda7109a32062f725c28aaa479e4cee3 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Mon, 27 Oct 2025 12:47:41 +0500 Subject: [PATCH 1/2] editor: use default scroll container on mobile to fix selection bugs --- .../editor/src/extensions/table/component.tsx | 41 ++++++++++++------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/packages/editor/src/extensions/table/component.tsx b/packages/editor/src/extensions/table/component.tsx index dec310723..7852f395a 100644 --- a/packages/editor/src/extensions/table/component.tsx +++ b/packages/editor/src/extensions/table/component.tsx @@ -22,7 +22,7 @@ import { ReactNodeView, ReactNodeViewProps } from "../react/index.js"; import { Node as ProsemirrorNode } from "prosemirror-model"; import { Editor } from "../../types.js"; import { Editor as TiptapEditor } from "@tiptap/core"; -import { useEffect, useRef } from "react"; +import { useCallback, useEffect, useRef } from "react"; import { updateColumnsOnResize } from "@tiptap/pm/tables"; import { EditorView, NodeView } from "prosemirror-view"; import { @@ -32,7 +32,7 @@ import { TableProperties } from "../../toolbar/tools/table.js"; import { getToolDefinition } from "../../toolbar/tool-definitions.js"; -import { getPosition } from "@notesnook/ui"; +import { getPosition, ScrollContainer } from "@notesnook/ui"; import { findSelectedDOMNode, hasSameAttributes @@ -41,12 +41,14 @@ import { DesktopOnly } from "../../components/responsive/index.js"; import { TextDirections } from "../text-direction/index.js"; import { strings } from "@notesnook/intl"; import SimpleBar from "simplebar-react"; +import { useIsMobile } from "../../toolbar/stores/toolbar-store.js"; export function TableComponent(props: ReactNodeViewProps) { const { editor, node, forwardRef } = props; const colgroupRef = useRef(null); const tableRef = useRef(); const { textDirection } = node.attrs; + const isMobile = useIsMobile(); useEffect(() => { if (!colgroupRef.current || !tableRef.current) return; @@ -54,6 +56,22 @@ export function TableComponent(props: ReactNodeViewProps) { updateColumnsOnResize(node, colgroupRef.current, tableRef.current, 50); }, [node]); + const renderScrollContent = useCallback(() => { + return ( +
+ { + forwardRef?.(ref); + tableRef.current = ref || undefined; + }} + > + + {/* */} +
+
+ ); + }, [forwardRef, textDirection]); + return ( <> @@ -68,19 +86,12 @@ export function TableComponent(props: ReactNodeViewProps) { textDirection={textDirection} /> - - - { - forwardRef?.(ref); - tableRef.current = ref || undefined; - }} - > - - {/* */} -
-
-
+ + {isMobile ? ( + {renderScrollContent()} + ) : ( + {renderScrollContent()} + )} ); } From 14c1567c079fa6dbae583b0526113dc10918c4f8 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Mon, 27 Oct 2025 12:50:16 +0500 Subject: [PATCH 2/2] editor: fix scrollLeft value on mobile when using scroll container --- packages/editor/src/extensions/table/component.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/editor/src/extensions/table/component.tsx b/packages/editor/src/extensions/table/component.tsx index 7852f395a..58df8987d 100644 --- a/packages/editor/src/extensions/table/component.tsx +++ b/packages/editor/src/extensions/table/component.tsx @@ -219,6 +219,7 @@ function TableRowToolbar(props: TableToolbarProps) { function TableColumnToolbar(props: TableToolbarProps) { const { editor, table } = props; const columnToolsRef = useRef(null); + const isMobile = useIsMobile(); useEffect(() => { function onSelectionUpdate() { @@ -245,8 +246,9 @@ function TableColumnToolbar(props: TableToolbarProps) { yOffset: 2 }); - const scrollLeft = - table.current?.closest(".simplebar-content-wrapper")?.scrollLeft || 0; + const scrollLeft = isMobile + ? table.current.parentElement?.parentElement?.scrollLeft || 0 + : table.current?.closest(".simplebar-content-wrapper")?.scrollLeft || 0; columnToolsRef.current.style.left = `${pos.left - scrollLeft}px`; columnToolsRef.current.style.top = `${pos.top}px`; @@ -256,7 +258,7 @@ function TableColumnToolbar(props: TableToolbarProps) { return () => { editor.off("selectionUpdate", onSelectionUpdate); }; - }, []); + }, [isMobile]); return (