From 8cd00a053cad8c1bbee26d9e86f1408e7ca6c096 Mon Sep 17 00:00:00 2001
From: Lim Chee Aun <cheeaun@gmail.com>
Date: Tue, 1 Aug 2023 00:15:07 +0800
Subject: [PATCH] Experiment: make replies container not whole-clickable

Except for "thread" statuses
---
 src/components/status.jsx |  7 ++++++-
 src/pages/status.jsx      | 41 ++++++++++++++++++++++++++-------------
 2 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/src/components/status.jsx b/src/components/status.jsx
index 981c4211..d57050f2 100644
--- a/src/components/status.jsx
+++ b/src/components/status.jsx
@@ -94,6 +94,7 @@ function Status({
   allowFilters,
   onMediaClick,
   quoted,
+  onStatusLinkClick = () => {},
 }) {
   if (skeleton) {
     return (
@@ -526,7 +527,10 @@ function Status({
             <br />
             {createdDateText}
           </MenuHeader>
-          <MenuLink to={instance ? `/${instance}/s/${id}` : `/s/${id}`}>
+          <MenuLink
+            to={instance ? `/${instance}/s/${id}` : `/s/${id}`}
+            onClick={onStatusLinkClick}
+          >
             <Icon icon="arrow-right" />
             <span>View post by @{username || acct}</span>
           </MenuLink>
@@ -944,6 +948,7 @@ function Status({
                     onClick={(e) => {
                       e.preventDefault();
                       e.stopPropagation();
+                      onStatusLinkClick?.();
                     }}
                     class={`time ${open ? 'is-open' : ''}`}
                   >
diff --git a/src/pages/status.jsx b/src/pages/status.jsx
index 0ceaf363..09f298ce 100644
--- a/src/pages/status.jsx
+++ b/src/pages/status.jsx
@@ -843,6 +843,24 @@ function StatusThread({ id, closeLink = '/', instance: propInstance }) {
               weight,
             } = status;
             const isHero = statusID === id;
+            const StatusParent = useCallback(
+              (props) =>
+                isThread || thread ? (
+                  <Link
+                    class="status-link"
+                    to={
+                      instance ? `/${instance}/s/${statusID}` : `/s/${statusID}`
+                    }
+                    onClick={() => {
+                      resetScrollPosition(statusID);
+                    }}
+                    {...props}
+                  />
+                ) : (
+                  <div class="status-focus" tabIndex={0} {...props} />
+                ),
+              [isThread, thread],
+            );
             return (
               <li
                 key={statusID}
@@ -923,15 +941,7 @@ function StatusThread({ id, closeLink = '/', instance: propInstance }) {
                     )}
                   </>
                 ) : (
-                  <Link
-                    class="status-link"
-                    to={
-                      instance ? `/${instance}/s/${statusID}` : `/s/${statusID}`
-                    }
-                    onClick={() => {
-                      resetScrollPosition(statusID);
-                    }}
-                  >
+                  <StatusParent>
                     <Status
                       statusID={statusID}
                       instance={instance}
@@ -939,6 +949,9 @@ function StatusThread({ id, closeLink = '/', instance: propInstance }) {
                       size={thread || ancestor ? 'm' : 's'}
                       enableTranslate
                       onMediaClick={handleMediaClick}
+                      onStatusLinkClick={() => {
+                        resetScrollPosition(statusID);
+                      }}
                     />
                     {ancestor && isThread && repliesCount > 1 && (
                       <div class="replies-link">
@@ -956,7 +969,7 @@ function StatusThread({ id, closeLink = '/', instance: propInstance }) {
                           </span>
                         </div>
                       )} */}
-                  </Link>
+                  </StatusParent>
                 )}
                 {descendant && replies?.length > 0 && (
                   <SubComments
@@ -1171,13 +1184,14 @@ function SubComments({
       <ul>
         {replies.map((r) => (
           <li key={r.id}>
-            <Link
+            {/* <Link
               class="status-link"
               to={instance ? `/${instance}/s/${r.id}` : `/s/${r.id}`}
               onClick={() => {
                 resetScrollPosition(r.id);
               }}
-            >
+            > */}
+            <div class="status-focus" tabIndex={0}>
               <Status
                 statusID={r.id}
                 instance={instance}
@@ -1194,7 +1208,8 @@ function SubComments({
                   </span>
                 </div>
               )}
-            </Link>
+            </div>
+            {/* </Link> */}
             {r.replies?.length && (
               <SubComments
                 instance={instance}