aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-03-13 16:51:42 +0000
committerMohamedBassem <me@mbassem.com>2024-03-13 16:51:42 +0000
commit61e852d963fb04b13b7bda39830e208a648b3545 (patch)
treeb24462270a245ea2cef3ee15ede56c7b22aec927 /packages
parenta80869cee9e841c319e603a51daa9cd34d1e83e8 (diff)
downloadkarakeep-61e852d963fb04b13b7bda39830e208a648b3545.tar.zst
fix(mobile): Multiple attempts to stop the duplication sharing
Diffstat (limited to 'packages')
-rw-r--r--packages/mobile/app/_layout.tsx10
-rw-r--r--packages/mobile/app/sharing.tsx8
-rw-r--r--packages/mobile/lib/last-shared-intent.ts15
-rw-r--r--packages/mobile/package.json3
4 files changed, 32 insertions, 4 deletions
diff --git a/packages/mobile/app/_layout.tsx b/packages/mobile/app/_layout.tsx
index 561e911e..c4298ec4 100644
--- a/packages/mobile/app/_layout.tsx
+++ b/packages/mobile/app/_layout.tsx
@@ -9,16 +9,22 @@ import { useEffect } from "react";
import { View } from "react-native";
import { Providers } from "@/lib/providers";
+import { useLastSharedIntent } from "@/lib/last-shared-intent";
export default function RootLayout() {
const router = useRouter();
const { hasShareIntent, shareIntent, resetShareIntent } = useShareIntent();
+ const lastSharedIntent = useLastSharedIntent();
+
useEffect(() => {
- if (hasShareIntent) {
+ const intentJson = JSON.stringify(shareIntent);
+ if (hasShareIntent && !lastSharedIntent.isPreviouslyShared(intentJson)) {
+ // TODO: Remove once https://github.com/achorein/expo-share-intent/issues/14 is fixed
+ lastSharedIntent.setIntent(intentJson);
router.replace({
pathname: "sharing",
- params: { shareIntent: JSON.stringify(shareIntent) },
+ params: { shareIntent: intentJson },
});
resetShareIntent();
}
diff --git a/packages/mobile/app/sharing.tsx b/packages/mobile/app/sharing.tsx
index 59c6fc25..64bbd933 100644
--- a/packages/mobile/app/sharing.tsx
+++ b/packages/mobile/app/sharing.tsx
@@ -1,5 +1,5 @@
import { Link, useLocalSearchParams, useRouter } from "expo-router";
-import { ShareIntent } from "expo-share-intent";
+import { ShareIntent, useShareIntent } from "expo-share-intent";
import { useEffect, useMemo, useState } from "react";
import { View, Text } from "react-native";
import { z } from "zod";
@@ -12,6 +12,9 @@ type Mode =
| { type: "error" };
function SaveBookmark({ setMode }: { setMode: (mode: Mode) => void }) {
+ // Desperate attempt to fix sharing duplication
+ const { hasShareIntent, resetShareIntent } = useShareIntent();
+
const params = useLocalSearchParams();
const shareIntent = useMemo(() => {
@@ -36,6 +39,9 @@ function SaveBookmark({ setMode }: { setMode: (mode: Mode) => void }) {
mutate({ type: "text", text: shareIntent.text });
}
}
+ if (hasShareIntent) {
+ resetShareIntent();
+ }
}, []);
const { mutate, isPending } = api.bookmarks.createBookmark.useMutation({
diff --git a/packages/mobile/lib/last-shared-intent.ts b/packages/mobile/lib/last-shared-intent.ts
new file mode 100644
index 00000000..951bcf74
--- /dev/null
+++ b/packages/mobile/lib/last-shared-intent.ts
@@ -0,0 +1,15 @@
+import { create } from "zustand";
+
+interface LastSharedIntent {
+ lastIntent: string;
+ setIntent: (intent: string) => void;
+ isPreviouslyShared: (intent: string) => boolean;
+}
+
+export const useLastSharedIntent = create<LastSharedIntent>((set, get) => ({
+ lastIntent: "",
+ setIntent: (intent: string) => set({ lastIntent: intent }),
+ isPreviouslyShared: (intent: string) => {
+ return get().lastIntent === intent;
+ },
+}));
diff --git a/packages/mobile/package.json b/packages/mobile/package.json
index 9a9198c7..1298b8db 100644
--- a/packages/mobile/package.json
+++ b/packages/mobile/package.json
@@ -36,7 +36,8 @@
"react-native-svg": "^15.1.0",
"tailwind-merge": "^2.2.1",
"use-debounce": "^10.0.0",
- "zod": "^3.22.4"
+ "zod": "^3.22.4",
+ "zustand": "^4.5.1"
},
"devDependencies": {
"@babel/core": "^7.20.0",