36 lines
867 B
TypeScript
36 lines
867 B
TypeScript
import { useQuery } from '@tanstack/react-query';
|
|
|
|
import { useClient } from '@/hooks/use-client';
|
|
|
|
type Embed = {
|
|
type: string;
|
|
version: string;
|
|
author_name: string;
|
|
author_url: string;
|
|
provider_name: string;
|
|
provider_url: string;
|
|
cache_age: number;
|
|
html: string;
|
|
width: number | null;
|
|
height: number | null;
|
|
};
|
|
|
|
/** Fetch OEmbed information for a status by its URL. */
|
|
// https://github.com/mastodon/mastodon/blob/main/app/controllers/api/oembed_controller.rb
|
|
// https://github.com/mastodon/mastodon/blob/main/app/serializers/oembed_serializer.rb
|
|
const useEmbed = (url: string) => {
|
|
const client = useClient();
|
|
|
|
const getEmbed = async () => {
|
|
const data = await client.oembed.getOembed(url);
|
|
return data;
|
|
};
|
|
|
|
return useQuery<Embed>({
|
|
queryKey: ['embed', url],
|
|
queryFn: getEmbed,
|
|
});
|
|
};
|
|
|
|
export { useEmbed as default };
|