From 1521a0ea2f3df9d4c26987689cc88c690f152c56 Mon Sep 17 00:00:00 2001 From: shatfield4 Date: Mon, 17 Jun 2024 12:44:43 -0700 Subject: [PATCH 1/2] rework document picker ui --- .../Documents/Directory/FileRow/index.jsx | 60 ++++++++-------- .../Documents/Directory/index.jsx | 2 - .../WorkspaceFileRow/index.jsx | 68 ++++++++++--------- .../Documents/WorkspaceDirectory/index.jsx | 4 -- 4 files changed, 64 insertions(+), 70 deletions(-) diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx index e679896fa64..b21228b06cf 100644 --- a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx +++ b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx @@ -1,34 +1,36 @@ -import { useState } from "react"; +import { useRef, useState } from "react"; import { formatDate, getFileExtension, middleTruncate, } from "@/utils/directories"; import { File } from "@phosphor-icons/react"; -import debounce from "lodash.debounce"; export default function FileRow({ item, selected, toggleSelection }) { const [showTooltip, setShowTooltip] = useState(false); + const timeoutRef = useRef(null); - const handleShowTooltip = () => { - setShowTooltip(true); + const handleMouseEnter = () => { + clearTimeout(timeoutRef.current); + timeoutRef.current = setTimeout(() => { + setShowTooltip(true); + }, 800); }; - const handleHideTooltip = () => { + const handleMouseLeave = () => { + clearTimeout(timeoutRef.current); setShowTooltip(false); }; - - const handleMouseEnter = debounce(handleShowTooltip, 500); - const handleMouseLeave = debounce(handleHideTooltip, 500); - return ( toggleSelection(item)} className={`text-white/80 text-xs grid grid-cols-12 py-2 pl-3.5 pr-8 hover:bg-sky-500/20 cursor-pointer file-row ${ selected ? "selected" : "" }`} + onMouseEnter={handleMouseEnter} + onMouseLeave={handleMouseLeave} > -
+
-
-

- {middleTruncate(item.title, 17)} -

- {showTooltip && ( -
- {item.title} +

+ {middleTruncate(item.title, 60)} +

+ {showTooltip && ( +
+

{item.title}

+
+

+ Date: {formatDate(item?.published)} +

+

+ Type: {getFileExtension(item.url)} +

- )} -
+
+ )}
-

- {formatDate(item?.published)} -

-

- {getFileExtension(item.url)} -

-
+
{item?.cached && (

Cached

@@ -71,4 +69,4 @@ export default function FileRow({ item, selected, toggleSelection }) {
); -} +} \ No newline at end of file diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx index 10d3ca87b82..c8d942d043c 100644 --- a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx +++ b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/index.jsx @@ -203,8 +203,6 @@ function Directory({

Name

-

Date

-

Kind

diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx index f473254273f..d12c6eccc8b 100644 --- a/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx +++ b/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx @@ -1,4 +1,4 @@ -import { memo, useState } from "react"; +import { memo, useState, useRef } from "react"; import { formatDate, getFileExtension, @@ -6,9 +6,8 @@ import { } from "@/utils/directories"; import { ArrowUUpLeft, File, PushPin } from "@phosphor-icons/react"; import Workspace from "@/models/workspace"; -import debounce from "lodash.debounce"; -import { Tooltip } from "react-tooltip"; import showToast from "@/utils/toast"; +import { Tooltip } from "react-tooltip"; export default function WorkspaceFileRow({ item, @@ -21,6 +20,7 @@ export default function WorkspaceFileRow({ movedItems, }) { const [showTooltip, setShowTooltip] = useState(false); + const timeoutRef = useRef(null); const onRemoveClick = async () => { setLoading(true); @@ -40,56 +40,58 @@ export default function WorkspaceFileRow({ setLoading(false); }; - const handleShowTooltip = () => { - setShowTooltip(true); + const handleMouseEnter = () => { + clearTimeout(timeoutRef.current); + timeoutRef.current = setTimeout(() => { + setShowTooltip(true); + }, 500); }; - const handleHideTooltip = () => { + const handleMouseLeave = () => { + clearTimeout(timeoutRef.current); setShowTooltip(false); }; const isMovedItem = movedItems?.some((movedItem) => movedItem.id === item.id); - const handleMouseEnter = debounce(handleShowTooltip, 500); - const handleMouseLeave = debounce(handleHideTooltip, 500); + return (
-
+
-
-

- {middleTruncate(item.title, 17)} -

- {showTooltip && ( -
- {item.title} +

+ {middleTruncate(item.title, 60)} +

+ {showTooltip && ( +
+

{item.title}

+
+

+ Date: {formatDate(item?.published)} +

+

+ Type: {getFileExtension(item.url)} +

- )} -
+
+ )}
-

- {formatDate(item?.published)} -

-

- {getFileExtension(item.url)} -

-
+
{hasChanges ? (
) : (
diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/index.jsx index 5617a020427..fa32bf9fc9e 100644 --- a/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/index.jsx +++ b/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/index.jsx @@ -31,8 +31,6 @@ function WorkspaceDirectory({

Name

-

Date

-

Kind

@@ -61,8 +59,6 @@ function WorkspaceDirectory({ >

Name

-

Date

-

Kind

From b95c12686835f3d988b323ae922a925febbcfb18 Mon Sep 17 00:00:00 2001 From: timothycarambat Date: Mon, 17 Jun 2024 14:23:29 -0700 Subject: [PATCH 2/2] refactor tooltips to use react-tooltip lib with custom elements --- .../Documents/Directory/FileRow/index.jsx | 57 ++++++++----------- .../WorkspaceFileRow/index.jsx | 56 ++++++++---------- 2 files changed, 48 insertions(+), 65 deletions(-) diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx index b21228b06cf..1b8cb81ed0a 100644 --- a/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx +++ b/frontend/src/components/Modals/ManageWorkspace/Documents/Directory/FileRow/index.jsx @@ -1,36 +1,24 @@ -import { useRef, useState } from "react"; +import React from "react"; import { formatDate, getFileExtension, middleTruncate, } from "@/utils/directories"; import { File } from "@phosphor-icons/react"; +import { Tooltip } from "react-tooltip"; export default function FileRow({ item, selected, toggleSelection }) { - const [showTooltip, setShowTooltip] = useState(false); - const timeoutRef = useRef(null); - - const handleMouseEnter = () => { - clearTimeout(timeoutRef.current); - timeoutRef.current = setTimeout(() => { - setShowTooltip(true); - }, 800); - }; - - const handleMouseLeave = () => { - clearTimeout(timeoutRef.current); - setShowTooltip(false); - }; return ( toggleSelection(item)} className={`text-white/80 text-xs grid grid-cols-12 py-2 pl-3.5 pr-8 hover:bg-sky-500/20 cursor-pointer file-row ${ selected ? "selected" : "" }`} - onMouseEnter={handleMouseEnter} - onMouseLeave={handleMouseLeave} > -
+
{middleTruncate(item.title, 60)}

- {showTooltip && ( -
-

{item.title}

-
-

- Date: {formatDate(item?.published)} -

-

- Type: {getFileExtension(item.url)} -

-
-
- )}
{item?.cached && ( @@ -67,6 +42,24 @@ export default function FileRow({ item, selected, toggleSelection }) {
)}
+ +
+

{item.title}

+
+

+ Date: {formatDate(item?.published)} +

+

+ Type: {getFileExtension(item.url).toUpperCase()} +

+
+
+
); -} \ No newline at end of file +} diff --git a/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx b/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx index d12c6eccc8b..727331adbf0 100644 --- a/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx +++ b/frontend/src/components/Modals/ManageWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx @@ -1,4 +1,4 @@ -import { memo, useState, useRef } from "react"; +import { memo, useState } from "react"; import { formatDate, getFileExtension, @@ -19,9 +19,6 @@ export default function WorkspaceFileRow({ hasChanges, movedItems, }) { - const [showTooltip, setShowTooltip] = useState(false); - const timeoutRef = useRef(null); - const onRemoveClick = async () => { setLoading(true); @@ -40,29 +37,17 @@ export default function WorkspaceFileRow({ setLoading(false); }; - const handleMouseEnter = () => { - clearTimeout(timeoutRef.current); - timeoutRef.current = setTimeout(() => { - setShowTooltip(true); - }, 500); - }; - - const handleMouseLeave = () => { - clearTimeout(timeoutRef.current); - setShowTooltip(false); - }; - const isMovedItem = movedItems?.some((movedItem) => movedItem.id === item.id); - return (
-
+
{middleTruncate(item.title, 60)}

- {showTooltip && ( -
-

{item.title}

-
-

- Date: {formatDate(item?.published)} -

-

- Type: {getFileExtension(item.url)} -

-
-
- )}
{hasChanges ? ( @@ -98,6 +70,24 @@ export default function WorkspaceFileRow({
)}
+ +
+

{item.title}

+
+

+ Date: {formatDate(item?.published)} +

+

+ Type: {getFileExtension(item.url).toUpperCase()} +

+
+
+
); }