diff --git a/packages/frontend/src/api/services/superfeed/superfeedEndpoints.ts b/packages/frontend/src/api/services/superfeed/superfeedEndpoints.ts index f0a3214a..954a50c4 100644 --- a/packages/frontend/src/api/services/superfeed/superfeedEndpoints.ts +++ b/packages/frontend/src/api/services/superfeed/superfeedEndpoints.ts @@ -65,6 +65,11 @@ export const superfeedApi = alphadayApi.injectEndpoints({ itemType: i.data?.item_type, projects: i.data?.projects, projectType: i.data?.project_type, + gasFast: i.data?.GAS_FAST, + gasSlow: i.data?.GAS_SLOW, + gasStandard: i.data?.GAS_STANDARD, + gasPercentChange: i.data?.PERCENT_CHANGE, + gasPrevGasStandard: i.data?.PREV_GAS_STANDARD, }, })), }), diff --git a/packages/frontend/src/api/services/superfeed/types.ts b/packages/frontend/src/api/services/superfeed/types.ts index 76b24df4..f35a1ee1 100644 --- a/packages/frontend/src/api/services/superfeed/types.ts +++ b/packages/frontend/src/api/services/superfeed/types.ts @@ -7,6 +7,11 @@ export type TRemoteFeedItemData = Omit< > & { item_type?: string | null; project_type?: "protocol" | "chain"; + GAS_FAST?: number; + GAS_SLOW?: number; + GAS_STANDARD?: number; + PERCENT_CHANGE?: number; + PREV_GAS_STANDARD?: number; }; export type TRemoteSuperfeedItem = { diff --git a/packages/frontend/src/api/types/superfeed.ts b/packages/frontend/src/api/types/superfeed.ts index 82bf2994..dc567d3b 100644 --- a/packages/frontend/src/api/types/superfeed.ts +++ b/packages/frontend/src/api/types/superfeed.ts @@ -14,6 +14,7 @@ export enum EFeedItemType { DISCORD = "discorditem", MARKET = "marketitem", TVL = "tvlitem", + GAS = "gasitem", } /** @@ -75,6 +76,11 @@ export type TFeedItemData = { itemType?: string | null; projects?: TTVLFeedDataItem[]; projectType?: "protocol" | "chain"; + gasFast?: number; + gasSlow?: number; + gasStandard?: number; + gasPercentChange?: number; + gasPrevGasStandard?: number; }; export type TSuperfeedItem = Omit & { diff --git a/packages/frontend/src/components/gas/GasPriceBox.tsx b/packages/frontend/src/components/gas/GasPriceBox.tsx index 55dcd8a5..22e36ea3 100644 --- a/packages/frontend/src/components/gas/GasPriceBox.tsx +++ b/packages/frontend/src/components/gas/GasPriceBox.tsx @@ -28,11 +28,22 @@ interface IGasPriceBox { type: "fast" | "standard" | "slow"; gweiPrice: number | undefined; usdPrice: number | undefined; + isCard?: boolean; // if true, the element will be displayed in a feed card } -const GasPriceBox: FC = ({ type, gweiPrice, usdPrice }) => { +const GasPriceBox: FC = ({ + type, + gweiPrice, + usdPrice, + isCard, +}) => { return ( -
+
{type === "fast" && ( {type} )} @@ -47,13 +58,15 @@ const GasPriceBox: FC = ({ type, gweiPrice, usdPrice }) => { )}
- {gweiPrice && usdPrice ? ( + {gweiPrice ? (

{gweiPrice}

- ${usdPrice.toFixed(2)} + {isCard + ? "(gwei)" + : usdPrice && `$${usdPrice?.toFixed(2)}`}

) : ( diff --git a/packages/frontend/src/mobile-components/feed/FeedCard.tsx b/packages/frontend/src/mobile-components/feed/FeedCard.tsx index 83b7eaf4..9ffee3da 100644 --- a/packages/frontend/src/mobile-components/feed/FeedCard.tsx +++ b/packages/frontend/src/mobile-components/feed/FeedCard.tsx @@ -2,6 +2,7 @@ import { FC } from "react"; import { EFeedItemType, TSuperfeedItem } from "src/api/types"; import { BlogCard } from "./BlogCard"; import { EventCard } from "./EventCard"; +import { GasCard } from "./GasCard"; import { ImageCard } from "./ImageCard"; import { MarketCard } from "./MarketCard"; import { NewsCard } from "./NewsCard"; @@ -140,6 +141,15 @@ export const FeedCard: FC = ({ isAuthenticated={isAuthenticated} /> ); + case EFeedItemType.GAS: + return ( + + ); case EFeedItemType.TVL: return ( MaybeAsync; + onShare: () => MaybeAsync; +}> = ({ item, onLike, onShare, isAuthenticated }) => { + const { + tags, + likes, + comments, + title, + type, + date, + sourceIcon, + data: gasData, + } = item; + + const isDown = gasData?.gasPercentChange && gasData.gasPercentChange < 0; + + return ( + + {({ open }) => ( + <> + +
+
+
+
+ +

+ {computeDuration(date)} + + • + {" "} + + + +

+
+ +

+ Gas Fees are {isDown ? "down" : "up"}{" "} + {isDown ? ( + + ) : ( + + )}{" "} + {gasData?.gasPercentChange}% +

+
+
+
+
+
+
+
+ {!open && ( + {}} + /> + )} +
+
+ {!open && ( + + )} +
+
+
+ + +
+ + + +
+
+ {}} /> +
+ +
+
+
+ + )} + + ); +}; diff --git a/packages/frontend/src/mobile-components/feed/iconMap.ts b/packages/frontend/src/mobile-components/feed/iconMap.ts index fd3f393d..45b7e1c5 100644 --- a/packages/frontend/src/mobile-components/feed/iconMap.ts +++ b/packages/frontend/src/mobile-components/feed/iconMap.ts @@ -2,6 +2,7 @@ import { EFeedItemType } from "src/api/types"; import blogIcon from "src/assets/feedIcons/blog.png"; import eventIcon from "src/assets/feedIcons/event.png"; import forumIcon from "src/assets/feedIcons/forum.png"; +import gasIcon from "src/assets/feedIcons/gas.png"; import imageIcon from "src/assets/feedIcons/image.png"; import newsIcon from "src/assets/feedIcons/news.png"; import personIcon from "src/assets/feedIcons/person.png"; @@ -27,4 +28,5 @@ export const feedItemIconMap = { [EFeedItemType.MARKET]: (down: boolean) => down ? trendDownIcon : trendUpIcon, [EFeedItemType.TVL]: tvlIcon, + [EFeedItemType.GAS]: gasIcon, }; diff --git a/packages/frontend/src/mobile-components/user-filters/filterOptions.ts b/packages/frontend/src/mobile-components/user-filters/filterOptions.ts index 6584dde7..b447c5ed 100644 --- a/packages/frontend/src/mobile-components/user-filters/filterOptions.ts +++ b/packages/frontend/src/mobile-components/user-filters/filterOptions.ts @@ -174,6 +174,14 @@ export const STATIC_FILTER_OPTIONS: TLocalFilterOptions = { color: themeColors.categoryTwelve, contentType: EFeedItemType.DISCORD, }, + { + id: 14, + slug: EFeedItemType.GAS, + name: "Gas Prices", + selected: false, + color: themeColors.categoryEleven, + contentType: EFeedItemType.GAS, + }, ], }, timeRange: { diff --git a/packages/ui-kit/src/assets/feedIcons/gas.png b/packages/ui-kit/src/assets/feedIcons/gas.png new file mode 100644 index 00000000..de1fabfe Binary files /dev/null and b/packages/ui-kit/src/assets/feedIcons/gas.png differ diff --git a/packages/ui-kit/src/components/arrow/Arrow.tsx b/packages/ui-kit/src/components/arrow/Arrow.tsx index 26635efb..74acb8de 100644 --- a/packages/ui-kit/src/components/arrow/Arrow.tsx +++ b/packages/ui-kit/src/components/arrow/Arrow.tsx @@ -1,11 +1,15 @@ import { FC } from "react"; import ArrowDown from "src/assets/svg/arrow-down.svg"; import ArrowUp from "src/assets/svg/arrow-up.svg"; +import { twMerge } from "tailwind-merge"; -export const Arrow: FC<{ direction: "up" | "down" }> = ({ direction }) => { +export const Arrow: FC<{ direction: "up" | "down"; className?: string }> = ({ + direction, + className, +}) => { return ( arrow