-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Handle URL params * Add resources * Add other params * refactor for scope * modify the pr to support intents rather than utm remove linebreak remove linebreak handle web adjust path check to work on web add a short delay for opening the composer setup compose intent, move to `intents` directory fix intent logic ignore incoming intents in the navigation router * refactor --------- Co-authored-by: Eric Bailey <[email protected]>
- Loading branch information
1 parent
c8d02a7
commit 2a04546
Showing
7 changed files
with
88 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import React from 'react' | ||
import * as Linking from 'expo-linking' | ||
import {isNative} from 'platform/detection' | ||
import {useComposerControls} from 'state/shell' | ||
import {useSession} from 'state/session' | ||
|
||
type IntentType = 'compose' | ||
|
||
export function useIntentHandler() { | ||
const incomingUrl = Linking.useURL() | ||
const composeIntent = useComposeIntent() | ||
|
||
React.useEffect(() => { | ||
const handleIncomingURL = (url: string) => { | ||
const urlp = new URL(url) | ||
const [_, intentTypeNative, intentTypeWeb] = urlp.pathname.split('/') | ||
|
||
// On native, our links look like bluesky://intent/SomeIntent, so we have to check the hostname for the | ||
// intent check. On web, we have to check the first part of the path since we have an actual hostname | ||
const intentType = isNative ? intentTypeNative : intentTypeWeb | ||
const isIntent = isNative | ||
? urlp.hostname === 'intent' | ||
: intentTypeNative === 'intent' | ||
const params = urlp.searchParams | ||
|
||
if (!isIntent) return | ||
|
||
switch (intentType as IntentType) { | ||
case 'compose': { | ||
composeIntent({ | ||
text: params.get('text'), | ||
imageUris: params.get('imageUris'), | ||
}) | ||
} | ||
} | ||
} | ||
|
||
if (incomingUrl) handleIncomingURL(incomingUrl) | ||
}, [incomingUrl, composeIntent]) | ||
} | ||
|
||
function useComposeIntent() { | ||
const {openComposer} = useComposerControls() | ||
const {hasSession} = useSession() | ||
|
||
return React.useCallback( | ||
({ | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
text, | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
imageUris, | ||
}: { | ||
text: string | null | ||
imageUris: string | null // unused for right now, will be used later with intents | ||
}) => { | ||
if (!hasSession) return | ||
|
||
setTimeout(() => { | ||
openComposer({}) // will pass in values to the composer here in the share extension | ||
}, 500) | ||
}, | ||
[openComposer, hasSession], | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters