From 6a542517be982942f23cd383d3e573e6eed6dec5 Mon Sep 17 00:00:00 2001 From: nazeh Date: Wed, 22 Feb 2023 13:30:31 +0300 Subject: [PATCH] fix: disable resolving profiles by default in useProfile hook Resolving profiles seem to block UI, which is most impactful in the Contacts List screen, disabling it by default, and enabling while adding new contacts reduces that lag significantly --- package.json | 2 +- src/hooks/slashtags.ts | 15 ++++++++++- src/screens/Contacts/ContactEdit.tsx | 2 +- src/utils/slashtags/index.ts | 3 +++ yarn.lock | 39 +++------------------------- 5 files changed, 23 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index d6bf18f08..e87b46752 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@synonymdev/react-native-lnurl": "0.0.3", "@synonymdev/result": "0.0.2", "@synonymdev/slashtags-auth": "^1.0.0-alpha.5", - "@synonymdev/slashtags-sdk": "1.0.0-alpha.35", + "@synonymdev/slashtags-sdk": "^1.0.0-alpha.36", "assert": "^2.0.0", "backpack-client": "github:synonymdev/bitkit-backup-client#f08fdb28529d8a3f8bfecc789443c43b966a7581", "bip21": "^2.0.3", diff --git a/src/hooks/slashtags.ts b/src/hooks/slashtags.ts index 6219637b3..d5e8bc045 100644 --- a/src/hooks/slashtags.ts +++ b/src/hooks/slashtags.ts @@ -26,9 +26,15 @@ export const useSelectedSlashtag = (): { /** * Watches the public profile of a local or remote slashtag by its url. * Overrides name property if it is saved as a contact record! + * + * Note: by default it will _NOT_ resolve profile from remote peers (or seeder) + * to avoid unnecessary UI blocking. Use `opts.resolve = true` if needed. */ export const useProfile = ( url: string, + opts?: { + resolve?: boolean; + }, ): { resolving: boolean; profile: BasicProfile } => { const sdk = useSlashtagsSDK(); const contactRecord = useSlashtags().contacts[url]; @@ -43,7 +49,14 @@ export const useProfile = ( : profile; }, [profile, contactRecord]); + const shouldResolve = opts?.resolve ? true : false; + useEffect(() => { + // Skip resolving profile from peers to avoid blocking UI + if (!shouldResolve) { + return; + } + let unmounted = false; if (sdk.closed) { console.debug('useProfile: SKIP sdk is closed'); @@ -82,7 +95,7 @@ export const useProfile = ( drive.core.removeAllListeners(); drive.close(); }; - }, [url, sdk]); + }, [url, sdk, shouldResolve]); return { resolving, diff --git a/src/screens/Contacts/ContactEdit.tsx b/src/screens/Contacts/ContactEdit.tsx index ab9251b8f..2eae02ede 100644 --- a/src/screens/Contacts/ContactEdit.tsx +++ b/src/screens/Contacts/ContactEdit.tsx @@ -22,7 +22,7 @@ export const ContactEdit = ({ const url = route.params.url; const saved = useSlashtags().contacts[url]; const { slashtag } = useSelectedSlashtag(); - const contact = useProfile(url); + const contact = useProfile(url, { resolve: !saved }); const { keyboardShown } = useKeyboard(); const [form, setForm] = useState(saved || {}); diff --git a/src/utils/slashtags/index.ts b/src/utils/slashtags/index.ts index c8a687799..4228aa06a 100644 --- a/src/utils/slashtags/index.ts +++ b/src/utils/slashtags/index.ts @@ -19,6 +19,7 @@ import { createLightningInvoice } from '../../store/actions/lightning'; import { getSettingsStore } from '../../store/helpers'; import { TAvailableNetworks } from '../networks'; import { TWalletName } from '../../store/types/wallet'; +import { cacheProfile } from '../../store/actions/slashtags'; /** * Handles pasting or scanning a slash:// url @@ -92,6 +93,8 @@ export const saveProfile = async ( }), ); + cacheProfile(slashtag.url, drive.files.feed.fork, drive.version, profile); + drive.close(); }; diff --git a/yarn.lock b/yarn.lock index ac0cf103f..86662996b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2095,10 +2095,10 @@ b4a "^1.6.0" protomux-rpc "^1.3.0" -"@synonymdev/slashtags-sdk@1.0.0-alpha.35": - version "1.0.0-alpha.35" - resolved "https://registry.yarnpkg.com/@synonymdev/slashtags-sdk/-/slashtags-sdk-1.0.0-alpha.35.tgz#5ad4f627e226e01d886736e330c6606d13e247f2" - integrity sha512-hl9TOjT8SOPlrAcvLTCmxH4Mu1EMuAx48xw1khMVlLiDiCxR/nLpLpmG6aFrUXZEBAjSf1dHWtRqanr8XwOdMg== +"@synonymdev/slashtags-sdk@^1.0.0-alpha.19", "@synonymdev/slashtags-sdk@^1.0.0-alpha.35": + version "1.0.0-alpha.36" + resolved "https://registry.yarnpkg.com/@synonymdev/slashtags-sdk/-/slashtags-sdk-1.0.0-alpha.36.tgz#d47b60bbaf8b55259034d4aa36be6af062c9cdc2" + integrity sha512-7G6cLINKjaJ/28n7zj8F7RFkusGkIJ3XzUWZtIopomjwTvLYdYrFyFjwL/mIyiuNtK/9OeLNp1NIVw7KpX+ULQ== dependencies: "@hyperswarm/dht" "^6.2.1" "@hyperswarm/dht-relay" "^0.3.0" @@ -2115,26 +2115,6 @@ turbo-hash-map "^1.0.3" ws "^8.8.1" -"@synonymdev/slashtags-sdk@^1.0.0-alpha.19": - version "1.0.0-alpha.34" - resolved "https://registry.yarnpkg.com/@synonymdev/slashtags-sdk/-/slashtags-sdk-1.0.0-alpha.34.tgz#34eeb2de839965d6d0b6ad516637e49d86c04401" - integrity sha512-YKgQcgq8UWLXUNfNLbnJ9iQiwDYfdOBbzv4QjG2VRhNVk3riWMBzDRjmSXAJMJRAfgtrYDcUoLdm/lk5QUYHFA== - dependencies: - "@hyperswarm/dht" "^6.2.1" - "@hyperswarm/dht-relay" "^0.3.0" - "@synonymdev/slashtag" "^1.0.0-alpha.24" - "@synonymdev/slashtags-url" "^1.0.0-alpha.0" - b4a "^1.6.0" - corestore "^6.2.1" - graceful-goodbye "^1.1.0" - hypercore-crypto "^3.3.0" - hyperdrive "^11.0.0-alpha.3" - hyperswarm "=4.3.3" - random-access-memory "^5.0.1" - sodium-universal "^3.1.0" - turbo-hash-map "^1.0.3" - ws "^8.8.1" - "@synonymdev/slashtags-url@^1.0.0-alpha.0", "@synonymdev/slashtags-url@^1.0.0-alpha.1": version "1.0.0-alpha.2" resolved "https://registry.yarnpkg.com/@synonymdev/slashtags-url/-/slashtags-url-1.0.0-alpha.2.tgz#f8ce54e6fa9738a044083e313781697a4aee510a" @@ -6255,17 +6235,6 @@ hyperdrive@^11.0.0-alpha.3, hyperdrive@^11.0.0-alpha.5: streamx "^2.12.4" unix-path-resolve "^1.0.2" -hyperswarm@=4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/hyperswarm/-/hyperswarm-4.3.3.tgz#95e92a0ddc1858af94e002d656e8222171178451" - integrity sha512-pTckch/1lLU0LsjoFgJT4bqTK4GOcxMXyeVAFJZHbR68jk52Y9Fo9yaSuDPdzuv2pbknUwk6MfCqsokgCBxehQ== - dependencies: - "@hyperswarm/dht" "^6.0.1" - b4a "^1.3.1" - events "^3.3.0" - safety-catch "^1.0.2" - shuffled-priority-queue "^2.1.0" - hyperswarm@^4.3.5: version "4.3.5" resolved "https://registry.yarnpkg.com/hyperswarm/-/hyperswarm-4.3.5.tgz#3818bdf754ad68c345ed7f666938dea6458e977c"