v3/packages/design-system/organisms/server-setup/ServerSetup.tsx
Katalina 2ff6588030
Refactor node packages to yarn workspaces & ditch next.js for CRA. (#161)
* chore: restructure project into yarn workspaces, remove next

* fix tests, remove webapp from terraform

* remove more ui deployment bits

* remove pages, fix FUNDING.yml

* remove isomorphism

* remove next providers

* fix linting issues

* feat: start basis of new web ui system on CRA

* chore: move types to @roleypoly/types package

* chore: move src/common/utils to @roleypoly/misc-utils

* chore: remove roleypoly/ path remappers

* chore: renmove vercel config

* chore: re-add worker-types to api package

* chore: fix type linting scope for api

* fix(web): craco should include all of packages dir

* fix(ci): change api webpack path for wrangler

* chore: remove GAR actions from CI

* chore: update codeql job

* chore: test better github dar matcher in lint-staged
2021-03-12 18:04:49 -05:00

117 lines
3.7 KiB
TypeScript

import { Avatar, utils } from '@roleypoly/design-system/atoms/avatar';
import { Button } from '@roleypoly/design-system/atoms/button';
import { DotOverlay } from '@roleypoly/design-system/atoms/dot-overlay';
import { Hero } from '@roleypoly/design-system/atoms/hero';
import { AccentTitle, SmallTitle } from '@roleypoly/design-system/atoms/typography';
import { evaluatePermission } from '@roleypoly/misc-utils/hasPermission';
import { GuildSlug, UserGuildPermissions } from '@roleypoly/types';
import * as React from 'react';
import { FaDiscord } from 'react-icons/fa';
import { GoArrowLeft } from 'react-icons/go';
import { FlexLine, FlexWrap } from './ServerSetup.styled';
export type ServerSetupProps = {
guildSlug: GuildSlug;
};
export const ServerSetup = (props: ServerSetupProps) => (
<>
<DotOverlay />
<Hero>
<FlexWrap>
<FlexLine>
<div>
<Avatar
hash={props.guildSlug.icon}
src={utils.avatarHash(
props.guildSlug.id,
props.guildSlug.icon,
'icons'
)}
>
{utils.initialsFromName(props.guildSlug.name)}
</Avatar>
</div>
<div>
<SmallTitle>
&nbsp;&nbsp;Roleypoly isn't in {props.guildSlug.name}
</SmallTitle>
</div>
</FlexLine>
{renderMessage(props.guildSlug)}
</FlexWrap>
</Hero>
</>
);
const renderMessage = ({ id, permissionLevel, name }: GuildSlug) => {
if (evaluatePermission(permissionLevel, UserGuildPermissions.Admin)) {
return adminMessage(id);
} else if (evaluatePermission(permissionLevel, UserGuildPermissions.Manager)) {
return managerMessage(id);
} else {
return userMessage(name);
}
};
const adminMessage = (id: string) => (
<>
<FlexLine>
<AccentTitle>
You're an admin of this server, click the button to get started!
</AccentTitle>
</FlexLine>
<FlexLine>
<div>
<a href={`/machinery/bot-join?id=${id}`}>
<Button color="discord" icon={<FaDiscord />}>
Add Roleypoly
</Button>
</a>
</div>
</FlexLine>
</>
);
const managerMessage = (id: string) => (
<>
<FlexLine>
<AccentTitle>
You might have the permissions to add it to the server.
</AccentTitle>
</FlexLine>
<FlexLine>
<div>
<a href={`/machinery/bot-join?id=${id}`}>
<Button color="discord" icon={<FaDiscord />}>
Add Roleypoly
</Button>
</a>
</div>
</FlexLine>
</>
);
const userMessage = (name: string) => {
return (
<>
<FlexLine>
<AccentTitle>
If you think this is a mistake, please contact staff for {name}.
</AccentTitle>
</FlexLine>
<FlexLine>
<Button
onClick={() => {
// void router.push('/');
}}
color="muted"
size="small"
icon={<GoArrowLeft />}
>
Go back
</Button>
</FlexLine>
</>
);
};