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"