diff --git a/packages/design-system/molecules/guild-nav/GuildNav.tsx b/packages/design-system/molecules/guild-nav/GuildNav.tsx index 079812e..0e18460 100644 --- a/packages/design-system/molecules/guild-nav/GuildNav.tsx +++ b/packages/design-system/molecules/guild-nav/GuildNav.tsx @@ -1,5 +1,5 @@ import { NavSlug } from '@roleypoly/design-system/molecules/nav-slug'; -import { sortBy } from '@roleypoly/misc-utils/sortBy'; +import { getRecentAndSortedGuilds } from '@roleypoly/misc-utils/guildListing'; import { GuildSlug, UserGuildPermissions } from '@roleypoly/types'; import * as React from 'react'; import Scrollbars from 'react-custom-scrollbars'; @@ -40,21 +40,9 @@ const NavList = (props: { guilds: Props['guilds'] }) => ( ); export const GuildNav = (props: Props) => { - const recentGuildSlugs: GuildSlug[] = props.recentGuilds - .reduce<(GuildSlug | undefined)[]>( - (acc, id) => [...acc, props.guilds.find((guild) => guild.id === id)], - [] - ) - .filter((slug) => slug !== undefined); - - console.log({ - recentGuilds: props.recentGuilds, - slugs: props.guilds, - recentSlugs: recentGuildSlugs, - }); - - const sortedSlugs = sortBy(props.guilds, 'name', (a: string, b: string) => - a.toLowerCase() > b.toLowerCase() ? 1 : -1 + const { sortedGuildSlugs, recentGuildSlugs } = getRecentAndSortedGuilds( + props.guilds, + props.recentGuilds ); return ( @@ -72,7 +60,7 @@ export const GuildNav = (props: Props) => {
All Guilds
)} - + diff --git a/packages/design-system/organisms/servers-listing/ServersListing.tsx b/packages/design-system/organisms/servers-listing/ServersListing.tsx index 62c9bc1..cc2c677 100644 --- a/packages/design-system/organisms/servers-listing/ServersListing.tsx +++ b/packages/design-system/organisms/servers-listing/ServersListing.tsx @@ -1,27 +1,45 @@ import { CompletelyStylelessLink } from '@roleypoly/design-system/atoms/typography'; import { ServerListingCard } from '@roleypoly/design-system/molecules/server-listing-card'; -import { sortBy } from '@roleypoly/misc-utils/sortBy'; +import { getRecentAndSortedGuilds } from '@roleypoly/misc-utils/guildListing'; import { GuildSlug } from '@roleypoly/types'; import * as React from 'react'; import { CardContainer, ContentContainer } from './ServersListing.styled'; type ServersListingProps = { guilds: GuildSlug[]; + recentGuilds: string[]; }; -export const ServersListing = (props: ServersListingProps) => ( - - {props.guilds && - sortBy(props.guilds, 'name', (a: string, b: string) => - a.toLowerCase() > b.toLowerCase() ? 1 : -1 - ).map((guild, idx) => ( - - - - - - - - ))} - +const CardList = (props: { guilds: GuildSlug[] }) => ( + <> + {props.guilds.map((guild, idx) => ( + + + + + + + + ))} + ); + +export const ServersListing = (props: ServersListingProps) => { + const { recentGuildSlugs, sortedGuildSlugs } = getRecentAndSortedGuilds( + props.guilds, + props.recentGuilds + ); + + return ( + + {recentGuildSlugs && ( + <> +
Recent Guilds
+ +
All Guilds
+ + )} + +
+ ); +}; diff --git a/packages/design-system/templates/servers/Servers.tsx b/packages/design-system/templates/servers/Servers.tsx index 98d42d5..6fd476b 100644 --- a/packages/design-system/templates/servers/Servers.tsx +++ b/packages/design-system/templates/servers/Servers.tsx @@ -6,6 +6,9 @@ type ServerTemplateProps = Omit; export const ServersTemplate = (props: ServerTemplateProps) => ( - + ); diff --git a/packages/misc-utils/guildListing.ts b/packages/misc-utils/guildListing.ts new file mode 100644 index 0000000..e838472 --- /dev/null +++ b/packages/misc-utils/guildListing.ts @@ -0,0 +1,26 @@ +import { sortBy } from '@roleypoly/misc-utils/sortBy'; +import { GuildSlug } from '@roleypoly/types'; + +type RecentAndSortedT = { + recentGuildSlugs: GuildSlug[]; + sortedGuildSlugs: GuildSlug[]; +}; + +export const getRecentAndSortedGuilds = ( + guilds: GuildSlug[], + recentGuilds: string[] +): RecentAndSortedT => { + return { + recentGuildSlugs: recentGuilds.reduce((acc, id) => { + const guild = guilds.find((guild) => guild.id === id); + if (guild) { + acc.push(guild); + } + + return acc; + }, []), + sortedGuildSlugs: sortBy(guilds, 'name', (a: string, b: string) => + a.toLowerCase() > b.toLowerCase() ? 1 : -1 + ), + }; +};