0dae24e78f
* add apple music embed * add vimeo embed * add logic for tenor and giphy embeds * keep it simple, use playerUri for images too * add gif embed player * lint, fix tests * remove links that can't produce a thumb * Revert "remove links that can't produce a thumb" This reverts commit985b92b4e6. * Revert "Revert "remove links that can't produce a thumb"" This reverts commit4895ded8b5. * Revert "Revert "Revert "remove links that can't produce a thumb""" This reverts commit36d04b517b. * properly obtain giphy metadata regardless of used url * test fixes * adjust gif player * add all twitch embed types * support m.youtube links * few logic adjustments * adjust spotify player height * prefetch gif before showing * use memory-disk cache policy on gifs * use `disk` cachePolicy on ios - can't start/stop animation * support pause/play on web * onLoad fix * remove extra pressable, add accessibility, fix scale issues * improve size of embed * add settings * fix(?) settings * add source to embed player params * update tests * better naming and settings options * consent modal * fix test id * why is webstorm adding .tsx * web modal * simplify types * adjust snap points * remove unnecessary yt embed library. just use the webview always * remove now useless WebGifStill 😭 * more type cleanup * more type cleanup * combine parse and prefs check in one memo * improve dimensions of youtube shorts * oops didn't commit the test 🫥 * add shorts as separate embed type * fix up schema * shorts modal * hide gif details * support localized spotify embeds * more cleanup * improve look and accessibility of gif embeds * Update routing for the external embeds settings page * Update and simplify the external embed preferences screen * Update copy in embedconsent modal and add 'allow all' button --------- Co-authored-by: Hailey <me@haileyok.com>
55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import React from 'react'
|
|
import * as persisted from '#/state/persisted'
|
|
import {EmbedPlayerSource} from 'lib/strings/embed-player'
|
|
|
|
type StateContext = persisted.Schema['externalEmbeds']
|
|
type SetContext = (source: EmbedPlayerSource, value: 'show' | 'hide') => void
|
|
|
|
const stateContext = React.createContext<StateContext>(
|
|
persisted.defaults.externalEmbeds,
|
|
)
|
|
const setContext = React.createContext<SetContext>({} as SetContext)
|
|
|
|
export function Provider({children}: React.PropsWithChildren<{}>) {
|
|
const [state, setState] = React.useState(persisted.get('externalEmbeds'))
|
|
|
|
const setStateWrapped = React.useCallback(
|
|
(source: EmbedPlayerSource, value: 'show' | 'hide') => {
|
|
setState(prev => {
|
|
persisted.write('externalEmbeds', {
|
|
...prev,
|
|
[source]: value,
|
|
})
|
|
|
|
return {
|
|
...prev,
|
|
[source]: value,
|
|
}
|
|
})
|
|
},
|
|
[setState],
|
|
)
|
|
|
|
React.useEffect(() => {
|
|
return persisted.onUpdate(() => {
|
|
setState(persisted.get('externalEmbeds'))
|
|
})
|
|
}, [setStateWrapped])
|
|
|
|
return (
|
|
<stateContext.Provider value={state}>
|
|
<setContext.Provider value={setStateWrapped}>
|
|
{children}
|
|
</setContext.Provider>
|
|
</stateContext.Provider>
|
|
)
|
|
}
|
|
|
|
export function useExternalEmbedsPrefs() {
|
|
return React.useContext(stateContext)
|
|
}
|
|
|
|
export function useSetExternalEmbedPref() {
|
|
return React.useContext(setContext)
|
|
}
|