import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { Image } from "expo-image"; import { useRouter } from "expo-router"; import { useAtom } from "jotai"; import React, { useCallback, useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; import { Text } from "@/components/common/Text"; import { apiAtom } from "@/providers/JellyfinProvider"; import { getPrimaryImageUrl } from "@/utils/jellyfin/image/getPrimaryImageUrl"; interface Props { playlist: BaseItemDto; width?: number; } export const MusicPlaylistCard: React.FC = ({ playlist, width = 150, }) => { const [api] = useAtom(apiAtom); const router = useRouter(); const imageUrl = useMemo( () => getPrimaryImageUrl({ api, item: playlist }), [api, playlist], ); const handlePress = useCallback(() => { router.push({ pathname: "/music/playlist/[playlistId]", params: { playlistId: playlist.Id! }, }); }, [router, playlist.Id]); return ( {imageUrl ? ( ) : ( 🎶 )} {playlist.Name} {playlist.ChildCount} tracks ); };