Special-case bsky.app/download to open share sheet or copy to clipboard (#3710)
* special-case bsky.app/download to share * Address feedback * Improve detection --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>zio/stable
parent
b10c96f28d
commit
1af59ca8a7
|
@ -1,10 +1,10 @@
|
||||||
import {it, describe, expect} from '@jest/globals'
|
import {describe, expect, it} from '@jest/globals'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
linkRequiresWarning,
|
|
||||||
isPossiblyAUrl,
|
isPossiblyAUrl,
|
||||||
splitApexDomain,
|
|
||||||
isTrustedUrl,
|
isTrustedUrl,
|
||||||
|
linkRequiresWarning,
|
||||||
|
splitApexDomain,
|
||||||
} from '../../../src/lib/strings/url-helpers'
|
} from '../../../src/lib/strings/url-helpers'
|
||||||
|
|
||||||
describe('linkRequiresWarning', () => {
|
describe('linkRequiresWarning', () => {
|
||||||
|
@ -170,6 +170,7 @@ describe('isTrustedUrl', () => {
|
||||||
['https://google.com', false],
|
['https://google.com', false],
|
||||||
['https://docs.google.com', false],
|
['https://docs.google.com', false],
|
||||||
['https://google.com/#', false],
|
['https://google.com/#', false],
|
||||||
|
['https://blueskywebxzendesk.com', false],
|
||||||
]
|
]
|
||||||
|
|
||||||
it.each(cases)('given input uri %p, returns %p', (str, expected) => {
|
it.each(cases)('given input uri %p, returns %p', (str, expected) => {
|
||||||
|
|
|
@ -3,10 +3,12 @@ import {GestureResponderEvent} from 'react-native'
|
||||||
import {sanitizeUrl} from '@braintree/sanitize-url'
|
import {sanitizeUrl} from '@braintree/sanitize-url'
|
||||||
import {StackActions, useLinkProps} from '@react-navigation/native'
|
import {StackActions, useLinkProps} from '@react-navigation/native'
|
||||||
|
|
||||||
|
import {BSKY_DOWNLOAD_URL} from '#/lib/constants'
|
||||||
import {AllNavigatorParams} from '#/lib/routes/types'
|
import {AllNavigatorParams} from '#/lib/routes/types'
|
||||||
import {shareUrl} from '#/lib/sharing'
|
import {shareUrl} from '#/lib/sharing'
|
||||||
import {
|
import {
|
||||||
convertBskyAppUrlIfNeeded,
|
convertBskyAppUrlIfNeeded,
|
||||||
|
isBskyDownloadUrl,
|
||||||
isExternalUrl,
|
isExternalUrl,
|
||||||
linkRequiresWarning,
|
linkRequiresWarning,
|
||||||
} from '#/lib/strings/url-helpers'
|
} from '#/lib/strings/url-helpers'
|
||||||
|
@ -125,7 +127,9 @@ export function useLink({
|
||||||
(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey)
|
(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey)
|
||||||
const shouldOpenInNewTab = isMetaKey || isMiddleClick
|
const shouldOpenInNewTab = isMetaKey || isMiddleClick
|
||||||
|
|
||||||
if (
|
if (isBskyDownloadUrl(href)) {
|
||||||
|
shareUrl(BSKY_DOWNLOAD_URL)
|
||||||
|
} else if (
|
||||||
shouldOpenInNewTab ||
|
shouldOpenInNewTab ||
|
||||||
href.startsWith('http') ||
|
href.startsWith('http') ||
|
||||||
href.startsWith('mailto')
|
href.startsWith('mailto')
|
||||||
|
|
|
@ -10,6 +10,7 @@ const HELP_DESK_LANG = 'en-us'
|
||||||
export const HELP_DESK_URL = `https://blueskyweb.zendesk.com/hc/${HELP_DESK_LANG}`
|
export const HELP_DESK_URL = `https://blueskyweb.zendesk.com/hc/${HELP_DESK_LANG}`
|
||||||
export const EMBED_SERVICE = 'https://embed.bsky.app'
|
export const EMBED_SERVICE = 'https://embed.bsky.app'
|
||||||
export const EMBED_SCRIPT = `${EMBED_SERVICE}/static/embed.js`
|
export const EMBED_SCRIPT = `${EMBED_SERVICE}/static/embed.js`
|
||||||
|
export const BSKY_DOWNLOAD_URL = 'https://bsky.app/download'
|
||||||
|
|
||||||
const BASE_FEEDBACK_FORM_URL = `${HELP_DESK_URL}/requests/new`
|
const BASE_FEEDBACK_FORM_URL = `${HELP_DESK_URL}/requests/new`
|
||||||
export function FEEDBACK_FORM_URL({
|
export function FEEDBACK_FORM_URL({
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
import {AtUri} from '@atproto/api'
|
import {AtUri} from '@atproto/api'
|
||||||
import {BSKY_SERVICE} from 'lib/constants'
|
|
||||||
import TLDs from 'tlds'
|
|
||||||
import psl from 'psl'
|
import psl from 'psl'
|
||||||
|
import TLDs from 'tlds'
|
||||||
|
|
||||||
|
import {BSKY_SERVICE} from 'lib/constants'
|
||||||
|
|
||||||
export const BSKY_APP_HOST = 'https://bsky.app'
|
export const BSKY_APP_HOST = 'https://bsky.app'
|
||||||
const BSKY_TRUSTED_HOSTS = [
|
const BSKY_TRUSTED_HOSTS = [
|
||||||
'bsky.app',
|
'bsky\\.app',
|
||||||
'bsky.social',
|
'bsky\\.social',
|
||||||
'blueskyweb.xyz',
|
'blueskyweb\\.xyz',
|
||||||
'blueskyweb.zendesk.com',
|
'blueskyweb\\.zendesk\\.com',
|
||||||
...(__DEV__ ? ['localhost:19006', 'localhost:8100'] : []),
|
...(__DEV__ ? ['localhost:19006', 'localhost:8100'] : []),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -145,6 +146,13 @@ export function isBskyListUrl(url: string): boolean {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isBskyDownloadUrl(url: string): boolean {
|
||||||
|
if (isExternalUrl(url)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return url === '/download' || url.startsWith('/download?')
|
||||||
|
}
|
||||||
|
|
||||||
export function convertBskyAppUrlIfNeeded(url: string): string {
|
export function convertBskyAppUrlIfNeeded(url: string): string {
|
||||||
if (isBskyAppUrl(url)) {
|
if (isBskyAppUrl(url)) {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue