2024-04-17 10:57:08 +00:00
|
|
|
import { createContext, useContext, useEffect } from 'react'
|
2023-06-02 21:16:09 +00:00
|
|
|
import { TLUiAssetUrls } from '../assetUrls'
|
2023-04-25 11:01:25 +00:00
|
|
|
|
2023-06-02 21:16:09 +00:00
|
|
|
/** @internal */
|
|
|
|
type UiAssetUrlsContextType = TLUiAssetUrls | null
|
2023-04-25 11:01:25 +00:00
|
|
|
|
2023-06-02 21:16:09 +00:00
|
|
|
const AssetUrlsContext = createContext<UiAssetUrlsContextType>(null)
|
|
|
|
|
|
|
|
/** @internal */
|
2023-04-25 11:01:25 +00:00
|
|
|
export function AssetUrlsProvider({
|
|
|
|
assetUrls,
|
|
|
|
children,
|
|
|
|
}: {
|
2023-06-02 21:16:09 +00:00
|
|
|
assetUrls: TLUiAssetUrls
|
2023-04-25 11:01:25 +00:00
|
|
|
children: React.ReactNode
|
|
|
|
}) {
|
2024-04-17 10:57:08 +00:00
|
|
|
useEffect(() => {
|
|
|
|
for (const src of Object.values(assetUrls.icons)) {
|
|
|
|
const image = new Image()
|
|
|
|
image.src = src
|
|
|
|
image.decode()
|
|
|
|
}
|
|
|
|
for (const src of Object.values(assetUrls.embedIcons)) {
|
|
|
|
const image = new Image()
|
|
|
|
image.src = src
|
|
|
|
image.decode()
|
|
|
|
}
|
|
|
|
}, [assetUrls])
|
|
|
|
|
2023-04-25 11:01:25 +00:00
|
|
|
return <AssetUrlsContext.Provider value={assetUrls}>{children}</AssetUrlsContext.Provider>
|
|
|
|
}
|
|
|
|
|
2023-06-02 21:16:09 +00:00
|
|
|
/** @internal */
|
2023-04-25 11:01:25 +00:00
|
|
|
export function useAssetUrls() {
|
|
|
|
const assetUrls = useContext(AssetUrlsContext)
|
|
|
|
if (!assetUrls) {
|
|
|
|
throw new Error('useAssetUrls must be used within an AssetUrlsProvider')
|
|
|
|
}
|
|
|
|
|
|
|
|
return assetUrls
|
|
|
|
}
|