Browse Source

fix(web): keep /share available to copy existing link (#12533)

Kit Langton 2 weeks ago
parent
commit
0e1f543646
1 changed files with 26 additions and 15 deletions
  1. 26 15
      packages/app/src/pages/session/use-session-commands.tsx

+ 26 - 15
packages/app/src/pages/session/use-session-commands.tsx

@@ -357,30 +357,41 @@ export const useSessionCommands = (input: {
     return [
       {
         id: "session.share",
-        title: input.language.t("command.session.share"),
-        description: input.language.t("command.session.share.description"),
+        title: input.info()?.share?.url ? "Copy share link" : input.language.t("command.session.share"),
+        description: input.info()?.share?.url
+          ? "Copy share URL to clipboard"
+          : input.language.t("command.session.share.description"),
         category: input.language.t("command.category.session"),
         slash: "share",
-        disabled: !input.params.id || !!input.info()?.share?.url,
+        disabled: !input.params.id,
         onSelect: async () => {
           if (!input.params.id) return
-          await input.sdk.client.session
-            .share({ sessionID: input.params.id })
-            .then((res) => {
-              navigator.clipboard.writeText(res.data!.share!.url).catch(() =>
+          const copy = (url: string, existing: boolean) =>
+            navigator.clipboard
+              .writeText(url)
+              .then(() =>
+                showToast({
+                  title: existing
+                    ? input.language.t("session.share.copy.copied")
+                    : input.language.t("toast.session.share.success.title"),
+                  description: input.language.t("toast.session.share.success.description"),
+                  variant: "success",
+                }),
+              )
+              .catch(() =>
                 showToast({
                   title: input.language.t("toast.session.share.copyFailed.title"),
                   variant: "error",
                 }),
               )
-            })
-            .then(() =>
-              showToast({
-                title: input.language.t("toast.session.share.success.title"),
-                description: input.language.t("toast.session.share.success.description"),
-                variant: "success",
-              }),
-            )
+          const url = input.info()?.share?.url
+          if (url) {
+            await copy(url, true)
+            return
+          }
+          await input.sdk.client.session
+            .share({ sessionID: input.params.id })
+            .then((res) => copy(res.data!.share!.url, false))
             .catch(() =>
               showToast({
                 title: input.language.t("toast.session.share.failed.title"),