diff --git a/packages/design-system/molecules/guild-nav/GuildNav.tsx b/packages/design-system/molecules/guild-nav/GuildNav.tsx
index c6b36a4..079812e 100644
--- a/packages/design-system/molecules/guild-nav/GuildNav.tsx
+++ b/packages/design-system/molecules/guild-nav/GuildNav.tsx
@@ -9,6 +9,7 @@ import { GuildNavItem } from './GuildNav.styled';
type Props = {
guilds: GuildSlug[];
+ recentGuilds: string[];
};
const tooltipId = 'guildnav';
@@ -27,23 +28,53 @@ const Badges = (props: { guild: GuildSlug }) => {
}, [props.guild.permissionLevel]);
};
-export const GuildNav = (props: Props) => (
-
-
- {sortBy(props.guilds, 'name', (a: string, b: string) =>
- a.toLowerCase() > b.toLowerCase() ? 1 : -1
- ).map((guild) => (
-
-
-
-
- ))}
-
-
-
+const NavList = (props: { guilds: Props['guilds'] }) => (
+ <>
+ {props.guilds.map((guild) => (
+
+
+
+
+ ))}
+ >
);
+
+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
+ );
+
+ return (
+
+
+ {recentGuildSlugs && (
+ <>
+ Recents
+
+ All Guilds
+ >
+ )}
+
+
+
+
+ );
+};
diff --git a/packages/design-system/organisms/masthead/Authed.tsx b/packages/design-system/organisms/masthead/Authed.tsx
index d25500e..857d340 100644
--- a/packages/design-system/organisms/masthead/Authed.tsx
+++ b/packages/design-system/organisms/masthead/Authed.tsx
@@ -69,7 +69,7 @@ export const Authed = (props: Props) => {
{() => (
)}
diff --git a/packages/design-system/templates/role-picker/RolePicker.tsx b/packages/design-system/templates/role-picker/RolePicker.tsx
index cec5674..ebf3012 100644
--- a/packages/design-system/templates/role-picker/RolePicker.tsx
+++ b/packages/design-system/templates/role-picker/RolePicker.tsx
@@ -8,9 +8,15 @@ import * as React from 'react';
export type RolePickerTemplateProps = RolePickerProps & Omit;
export const RolePickerTemplate = (props: RolePickerTemplateProps) => {
- const { user, guilds, activeGuildId, ...pickerProps } = props;
+ const { user, guilds, activeGuildId, recentGuilds, ...pickerProps } = props;
return (
-
+
);
diff --git a/packages/design-system/templates/servers/Servers.tsx b/packages/design-system/templates/servers/Servers.tsx
index 5f8f7e7..98d42d5 100644
--- a/packages/design-system/templates/servers/Servers.tsx
+++ b/packages/design-system/templates/servers/Servers.tsx
@@ -1,11 +1,8 @@
import { AppShell, AppShellProps } from '@roleypoly/design-system/organisms/app-shell';
import { ServersListing } from '@roleypoly/design-system/organisms/servers-listing/ServersListing';
-import { GuildSlug } from '@roleypoly/types';
import * as React from 'react';
-type ServerTemplateProps = Omit & {
- guilds: GuildSlug[];
-};
+type ServerTemplateProps = Omit;
export const ServersTemplate = (props: ServerTemplateProps) => (
diff --git a/packages/web/src/contexts/app-shell/AppShellContext.tsx b/packages/web/src/contexts/app-shell/AppShellContext.tsx
index 13432af..9a18ed0 100644
--- a/packages/web/src/contexts/app-shell/AppShellContext.tsx
+++ b/packages/web/src/contexts/app-shell/AppShellContext.tsx
@@ -3,11 +3,17 @@ import * as React from 'react';
import { useRecentGuilds } from '../recent-guilds/RecentGuildsContext';
import { useSessionContext } from '../session/SessionContext';
-type AppShellPropsT = {
- user: AppShellProps['user'];
- guilds: AppShellProps['guilds'];
- recentGuilds: AppShellProps['recentGuilds'];
-};
+type AppShellPropsT =
+ | {
+ user: Required;
+ guilds: Required;
+ recentGuilds: Required;
+ }
+ | {
+ user: undefined;
+ guilds: undefined;
+ recentGuilds: [];
+ };
export const AppShellPropsContext = React.createContext({
user: undefined,
diff --git a/packages/web/src/pages/landing.tsx b/packages/web/src/pages/landing.tsx
index 4501321..eb8603d 100644
--- a/packages/web/src/pages/landing.tsx
+++ b/packages/web/src/pages/landing.tsx
@@ -1,16 +1,18 @@
import { Redirect } from '@reach/router';
import { LandingTemplate } from '@roleypoly/design-system/templates/landing';
import * as React from 'react';
+import { useAppShellProps } from '../contexts/app-shell/AppShellContext';
import { useSessionContext } from '../contexts/session/SessionContext';
const Landing = () => {
const { isAuthenticated } = useSessionContext();
+ const appShellProps = useAppShellProps();
if (isAuthenticated) {
return ;
}
- return ;
+ return ;
};
export default Landing;
diff --git a/packages/web/src/pages/picker.tsx b/packages/web/src/pages/picker.tsx
index d64b207..680a0e9 100644
--- a/packages/web/src/pages/picker.tsx
+++ b/packages/web/src/pages/picker.tsx
@@ -3,6 +3,7 @@ import { RolePickerTemplate } from '@roleypoly/design-system/templates/role-pick
import { ServerSetupTemplate } from '@roleypoly/design-system/templates/server-setup';
import { PresentableGuild, RoleUpdate, UserGuildPermissions } from '@roleypoly/types';
import * as React from 'react';
+import { useAppShellProps } from '../contexts/app-shell/AppShellContext';
import { useRecentGuilds } from '../contexts/recent-guilds/RecentGuildsContext';
import { useSessionContext } from '../contexts/session/SessionContext';
import { makeRoleTransactions } from '../utils/roleTransactions';
@@ -14,6 +15,7 @@ type PickerProps = {
const Picker = (props: PickerProps) => {
const { session, authedFetch, isAuthenticated } = useSessionContext();
const { pushRecentGuild } = useRecentGuilds();
+ const appShellProps = useAppShellProps();
const [pickerData, setPickerData] = React.useState(
null
@@ -58,9 +60,8 @@ const Picker = (props: PickerProps) => {
return (
);
}
@@ -96,8 +97,7 @@ const Picker = (props: PickerProps) => {
return (
{
const { isAuthenticated, session } = useSessionContext();
+ const appShellProps = useAppShellProps();
if (!isAuthenticated || !session) {
return ;
}
- return ;
+ return ;
};
export default ServersPage;