diff --git a/packages/web/lib/networking/queries/useGetHome.tsx b/packages/web/lib/networking/queries/useGetHome.tsx index 6e21fdcc4..495ea73da 100644 --- a/packages/web/lib/networking/queries/useGetHome.tsx +++ b/packages/web/lib/networking/queries/useGetHome.tsx @@ -41,7 +41,11 @@ export type HomeItem = { thumbnail?: string } -type HomeItemSourceType = 'LIBRARY' | 'NEWSLETTER' | 'RECOMMENDATION' | 'RSS' +export type HomeItemSourceType = + | 'LIBRARY' + | 'NEWSLETTER' + | 'RECOMMENDATION' + | 'RSS' export type HomeItemSource = { name: string diff --git a/packages/web/pages/justread/index.tsx b/packages/web/pages/justread/index.tsx index a295874ac..e58613a33 100644 --- a/packages/web/pages/justread/index.tsx +++ b/packages/web/pages/justread/index.tsx @@ -15,12 +15,17 @@ import * as HoverCard from '@radix-ui/react-hover-card' import { Button } from '../../components/elements/Button' import { HomeItem, + HomeItemSource, + HomeItemSourceType, HomeSection, stubHomeItems, useGetHomeItems, } from '../../lib/networking/queries/useGetHome' import { timeAgo } from '../../components/patterns/LibraryCards/LibraryCardStyles' import { theme } from '../../components/tokens/stitches.config' +import { useRouter } from 'next/router' +import { useGetSubscriptionsQuery } from '../../lib/networking/queries/useGetSubscriptionsQuery' +import { useMemo } from 'react' export default function Home(): JSX.Element { const homeData = useGetHomeItems() @@ -123,6 +128,8 @@ const Title = (props: HomeItemViewProps): JSX.Element => { } const HomeItemView = (props: HomeItemViewProps): JSX.Element => { + const router = useRouter() + return ( { bg: '$thBackground', }, }} + onClick={(event) => { + if (event.metaKey || event.ctrlKey) { + window.open(props.homeItem.url, '_blank') + } else { + router.push(props.homeItem.url) + } + }} > @@ -206,11 +220,12 @@ const SourceInfo = (props: HomeItemViewProps) => ( alignment="center" css={{ gap: '5px', cursor: 'pointer' }} > - + {props.homeItem.source.icon && ( + + )} ( - - - - - {props.homeItem.source.name} - - - - - - - The description of the newsletter or RSS feed, this would lazy load. - - + ) + +type SourceHoverContentProps = { + source: HomeItemSource +} + +const SubscriptionSourceHoverContent = ( + props: SourceHoverContentProps +): JSX.Element => { + const mapSourceType = ( + sourceType: HomeItemSourceType + ): SubscriptionType | undefined => { + switch (sourceType) { + case 'RSS': + case 'NEWSLETTER': + return sourceType + default: + return undefined + } + } + const { subscriptions, isValidating } = useGetSubscriptionsQuery( + mapSourceType(props.source.type) + ) + const subscription = useMemo(() => { + if (props.source.id && subscriptions) { + return subscriptions.find((sub) => sub.id == props.source.id) + } + return undefined + }, [subscriptions]) + + return ( + + + {props.source.icon && ( + + )} + + {props.source.name} + + + + + + + {subscription ? <>{subscription.description} : <>} + + + ) +}