Skip to content

Commit

Permalink
chore: Superfeed Podcasts & Video (#239)
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavier-Charles authored Feb 15, 2024
1 parent df037eb commit 9c660ad
Show file tree
Hide file tree
Showing 22 changed files with 455 additions and 344 deletions.
2 changes: 1 addition & 1 deletion packages/frontend/src/api/services/superfeed/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export type TRemoteSuperfeedItem = {
image: string;
short_description: string;
file_url: string | null;
duration: number | null;
duration: string | null;
starts_at: string | null;
ends_at: string | null;
source: {
Expand Down
2 changes: 2 additions & 0 deletions packages/frontend/src/api/types/superfeed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,6 @@ export type TSuperfeedItem = Omit<TBaseItem, "bookmarked"> & {
tags: { name: string; slug: string }[];
likes: number;
comments: number;
fileUrl: string | null;
duration: string | null;
};
17 changes: 17 additions & 0 deletions packages/frontend/src/assets/icons/spinners.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 19 additions & 4 deletions packages/frontend/src/mobile-components/Superfeed.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
import { useRef, FC, FormEvent, useCallback } from "react";
import { twMerge, FeedCard, ModuleLoader, ScrollBar } from "@alphaday/ui-kit";
import { twMerge, ModuleLoader, ScrollBar } from "@alphaday/ui-kit";
import { AudioPlayerProvider } from "react-use-audio-player";
import { useOnScreen } from "src/api/hooks";
import { TSuperfeedItem } from "src/api/types";
import { shouldFetchMoreItems } from "src/api/utils/itemUtils";
import { ReactComponent as SettingsSVG } from "src/assets/icons/settings.svg";
import { ReactComponent as Settings2SVG } from "src/assets/icons/settings3.svg";
import { FeedCard } from "./feed/FeedCard";

interface ISuperfeedModule {
isLoading: boolean;
feed: TSuperfeedItem[] | undefined;
handlePaginate: (type: "next" | "previous") => void;
toggleShowFeedFilters: () => void;
selectedPodcast: TSuperfeedItem | null;
setSelectedPodcast: React.Dispatch<
React.SetStateAction<TSuperfeedItem | null>
>;
}

const FiltersButton: FC<{ toggleShowFeedFilters: () => void }> = ({
Expand Down Expand Up @@ -56,6 +62,8 @@ const SuperfeedModule: FC<ISuperfeedModule> = ({
feed,
handlePaginate,
toggleShowFeedFilters,
selectedPodcast,
setSelectedPodcast,
}) => {
const handleScrollEvent = useCallback(
({ currentTarget }: FormEvent<HTMLElement>) => {
Expand All @@ -72,9 +80,16 @@ const SuperfeedModule: FC<ISuperfeedModule> = ({
return (
<ScrollBar onScroll={handleScrollEvent} className="w-full px-5 pt-4">
<FiltersButton toggleShowFeedFilters={toggleShowFeedFilters} />
{feed.map((item) => (
<FeedCard key={item.id} item={item} />
))}
<AudioPlayerProvider>
{feed.map((item) => (
<FeedCard
key={item.id}
item={item}
selectedPodcast={selectedPodcast}
setSelectedPodcast={setSelectedPodcast}
/>
))}
</AudioPlayerProvider>
</ScrollBar>
);
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { FC } from "react";
import { TSuperfeedItem } from "src/api/types";
import { computeDuration } from "src/utils/dateUtils";
import {
ActionButtons,
Expand All @@ -9,10 +10,10 @@ import {
FeedSourceInfo,
TagButtons,
} from "./FeedElements";
import { IFeedItem, feedItemIconMap } from "./types";
import { feedItemIconMap } from "./types";

export const BlogCard: FC<{
item: IFeedItem;
item: TSuperfeedItem;
}> = ({ item }) => {
const {
title,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { FC } from "react";
import { twMerge } from "@alphaday/ui-kit";
import moment from "moment";
import { TSuperfeedItem } from "src/api/types";
import { TagButton } from "src/mobile-components/button/buttons";
import { imgOnError } from "src/utils/errorHandling";
import { twMerge } from "tailwind-merge";
import { TagButton } from "../button/buttons";
import {
ActionButtons,
CardTitle,
Expand All @@ -12,7 +13,7 @@ import {
FeedItemDisclosurePanel,
TagButtons,
} from "./FeedElements";
import { IFeedItem, feedItemIconMap } from "./types";
import { feedItemIconMap } from "./types";

const eventDateFormatter = (date: string) => {
const d = new Date(); // or whatever date you have
Expand All @@ -35,7 +36,7 @@ const eventDateFormatter = (date: string) => {
);
};

export const EventCard: FC<{ item: IFeedItem }> = ({ item }) => {
export const EventCard: FC<{ item: TSuperfeedItem }> = ({ item }) => {
const {
title,
tags,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
import { FC } from "react";
import { EFeedItemType, TSuperfeedItem } from "src/api/types";
import { BlogCard } from "./BlogCard";
import { EventCard } from "./EventCard";
import { ImageCard } from "./ImageCard";
import { NewsCard } from "./NewsCard";
import { PodcastCard } from "./PodcastCard";
import { PriceCard } from "./PriceCard";
import { SocialCard } from "./SocialCard";
import { EFeedItemType, IFeedItem } from "./types";
import { VideoCard } from "./VideoCard";

// TODO move to frontend package
interface IFeedCard {
item: TSuperfeedItem;
selectedPodcast: TSuperfeedItem | null;
setSelectedPodcast: React.Dispatch<
React.SetStateAction<TSuperfeedItem | null>
>;
}

export const FeedCard: FC<{ item: IFeedItem }> = ({ item }) => {
export const FeedCard: FC<IFeedCard> = ({
item,
selectedPodcast,
setSelectedPodcast,
}) => {
switch (item.type) {
case EFeedItemType.NEWS:
return <NewsCard item={item} />;
Expand All @@ -24,7 +34,13 @@ export const FeedCard: FC<{ item: IFeedItem }> = ({ item }) => {
case EFeedItemType.VIDEO:
return <VideoCard item={item} />;
case EFeedItemType.PODCAST:
return <PodcastCard item={item} />;
return (
<PodcastCard
item={item}
selectedPodcast={selectedPodcast}
setSelectedPodcast={setSelectedPodcast}
/>
);
case EFeedItemType.EVENT:
return <EventCard item={item} />;
case EFeedItemType.MEME:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { FC, ReactNode } from "react";
import { Disclosure, Transition } from "@headlessui/react";
import { Disclosure, Transition, twMerge } from "@alphaday/ui-kit";
import { ReactComponent as CommentSVG } from "src/assets/svg/comment.svg";
import { ReactComponent as LikeSVG } from "src/assets/svg/like.svg";
import { ReactComponent as LikedSVG } from "src/assets/svg/liked.svg";
import { ReactComponent as ShareSVG } from "src/assets/svg/share.svg";
import { ActionButton, TagButton } from "src/mobile-components/button/buttons";
import { imgOnError } from "src/utils/errorHandling";
import { twMerge } from "tailwind-merge";
import { ActionButton, TagButton } from "../button/buttons";

export const ActionButtons: FC<{
onLike: () => void;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { FC } from "react";
import { twMerge } from "@alphaday/ui-kit";
import { TSuperfeedItem } from "src/api/types";
import { imgOnError } from "src/utils/errorHandling";
import { twMerge } from "tailwind-merge";
import {
ActionButtons,
CardTitle,
Expand All @@ -10,9 +11,9 @@ import {
FeedItemDisclosurePanel,
TagButtons,
} from "./FeedElements";
import { IFeedItem, feedItemIconMap } from "./types";
import { feedItemIconMap } from "./types";

export const ImageCard: FC<{ item: IFeedItem }> = ({ item }) => {
export const ImageCard: FC<{ item: TSuperfeedItem }> = ({ item }) => {
const {
title,
tags,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { FC, memo } from "react";
import { twMerge } from "@alphaday/ui-kit";
import moment from "moment";
import { ApexAreaChart } from "src/components/charts/apexchart";
import { Spinner } from "src/components/spinner/Spinner";
import { darkColors } from "src/globalStyles/colors";
import { renderToString } from "src/utils/textUtils";
import { twMerge } from "tailwind-merge";

type IProps = {
data: number[][];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { FC } from "react";
import { TSuperfeedItem } from "src/api/types";
import { computeDuration } from "src/utils/dateUtils";
import {
ActionButtons,
Expand All @@ -11,9 +12,9 @@ import {
FeedSourceInfo,
TagButtons,
} from "./FeedElements";
import { IFeedItem, feedItemIconMap } from "./types";
import { feedItemIconMap } from "./types";

export const NewsCard: FC<{ item: IFeedItem }> = ({ item }) => {
export const NewsCard: FC<{ item: TSuperfeedItem }> = ({ item }) => {
const {
title,
tags,
Expand Down
Loading

0 comments on commit 9c660ad

Please sign in to comment.