2021-09-14 12:18:44 -04:00
|
|
|
import { Check } from "@styled-icons/boxicons-regular";
|
2021-06-27 06:17:59 -04:00
|
|
|
import { Cog } from "@styled-icons/boxicons-solid";
|
2021-07-29 14:01:40 -04:00
|
|
|
import { observer } from "mobx-react-lite";
|
2021-07-05 06:23:23 -04:00
|
|
|
import { Link } from "react-router-dom";
|
2021-06-21 16:35:21 -04:00
|
|
|
import { ServerPermission } from "revolt.js/dist/api/permissions";
|
2021-07-30 17:40:49 -04:00
|
|
|
import { Server } from "revolt.js/dist/maps/Servers";
|
2021-12-27 09:38:49 -05:00
|
|
|
import styled, { css } from "styled-components";
|
2021-07-05 06:23:23 -04:00
|
|
|
|
2021-10-31 18:42:40 -04:00
|
|
|
import { Text } from "preact-i18n";
|
|
|
|
|
2021-12-27 09:48:31 -05:00
|
|
|
import { isTouchscreenDevice } from "../../lib/isTouchscreenDevice";
|
|
|
|
|
2021-07-05 06:23:23 -04:00
|
|
|
import Header from "../ui/Header";
|
|
|
|
import IconButton from "../ui/IconButton";
|
|
|
|
|
2021-08-17 18:54:55 -04:00
|
|
|
import Tooltip from "./Tooltip";
|
|
|
|
|
2021-06-21 16:35:21 -04:00
|
|
|
interface Props {
|
2021-07-05 06:25:20 -04:00
|
|
|
server: Server;
|
2021-12-27 09:38:49 -05:00
|
|
|
background?: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
const ServerBanner = styled.div<Props>`
|
2021-12-27 09:11:37 -05:00
|
|
|
background-color: var(--secondary-header);
|
2021-12-27 09:10:02 -05:00
|
|
|
flex-shrink: 0;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
justify-content: end;
|
2021-12-28 14:38:57 -05:00
|
|
|
/*background-position: center;
|
2021-12-27 09:47:06 -05:00
|
|
|
background-repeat: no-repeat;
|
2021-12-28 14:38:57 -05:00
|
|
|
background-size: cover;*/
|
|
|
|
|
|
|
|
background-size: cover !important;
|
|
|
|
background-position: center center !important;
|
2021-12-27 09:10:02 -05:00
|
|
|
|
2021-12-27 09:38:49 -05:00
|
|
|
${(props) =>
|
|
|
|
props.background &&
|
|
|
|
css`
|
|
|
|
height: 120px;
|
|
|
|
.container {
|
|
|
|
background: linear-gradient(
|
|
|
|
0deg,
|
|
|
|
var(--secondary-background),
|
|
|
|
transparent
|
|
|
|
);
|
|
|
|
}
|
|
|
|
`}
|
|
|
|
|
2021-12-27 09:15:37 -05:00
|
|
|
.container {
|
2021-12-27 09:10:02 -05:00
|
|
|
height: 48px;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
2021-12-28 15:04:18 -05:00
|
|
|
padding: 0 14px;
|
2021-12-27 09:10:02 -05:00
|
|
|
font-weight: 600;
|
|
|
|
white-space: nowrap;
|
|
|
|
overflow: hidden;
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
gap: 8px;
|
|
|
|
|
2021-12-27 09:48:31 -05:00
|
|
|
${() =>
|
|
|
|
isTouchscreenDevice &&
|
|
|
|
css`
|
|
|
|
height: 56px;
|
|
|
|
`}
|
|
|
|
|
2021-12-27 09:15:37 -05:00
|
|
|
.title {
|
2021-12-27 09:10:02 -05:00
|
|
|
white-space: nowrap;
|
|
|
|
overflow: hidden;
|
|
|
|
text-overflow: ellipsis;
|
2021-12-27 09:13:36 -05:00
|
|
|
flex-grow: 1;
|
2021-12-27 09:10:02 -05:00
|
|
|
}
|
|
|
|
}
|
2021-06-21 16:35:21 -04:00
|
|
|
`;
|
|
|
|
|
2021-07-29 14:01:40 -04:00
|
|
|
export default observer(({ server }: Props) => {
|
2021-07-30 17:40:49 -04:00
|
|
|
const bannerURL = server.generateBannerURL({ width: 480 });
|
2021-06-21 16:35:21 -04:00
|
|
|
|
2021-07-05 06:25:20 -04:00
|
|
|
return (
|
2021-12-27 09:38:49 -05:00
|
|
|
<ServerBanner
|
|
|
|
background={typeof bannerURL !== "undefined"}
|
|
|
|
style={{
|
|
|
|
backgroundSize: "cover",
|
|
|
|
backgroundPosition: "center",
|
|
|
|
backgroundRepeat: "no-repeat",
|
|
|
|
background: bannerURL ? `url('${bannerURL}')` : undefined,
|
|
|
|
}}>
|
|
|
|
<div className="container">
|
2021-12-28 14:43:42 -05:00
|
|
|
{server.flags && server.flags & 1 ? (
|
|
|
|
<Tooltip
|
|
|
|
content={
|
|
|
|
<Text id="app.special.server-badges.official" />
|
|
|
|
}
|
|
|
|
placement={"bottom-start"}>
|
|
|
|
<svg width="20" height="20">
|
|
|
|
<image
|
|
|
|
xlinkHref="/assets/badges/verified.svg"
|
|
|
|
height="20"
|
|
|
|
width="20"
|
|
|
|
/>
|
|
|
|
<image
|
|
|
|
xlinkHref="/assets/badges/revolt_r.svg"
|
|
|
|
height="15"
|
|
|
|
width="15"
|
|
|
|
x="2"
|
|
|
|
y="3"
|
|
|
|
style={
|
|
|
|
"justify-content: center; align-items: center; filter: brightness(0);"
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
</svg>
|
|
|
|
</Tooltip>
|
|
|
|
) : undefined}
|
|
|
|
{server.flags && server.flags & 2 ? (
|
|
|
|
<Tooltip
|
|
|
|
content={
|
|
|
|
<Text id="app.special.server-badges.verified" />
|
|
|
|
}
|
|
|
|
placement={"bottom-start"}>
|
|
|
|
<svg width="20" height="20">
|
|
|
|
<image
|
|
|
|
xlinkHref="/assets/badges/verified.svg"
|
|
|
|
height="20"
|
|
|
|
width="20"
|
|
|
|
/>
|
|
|
|
<foreignObject x="2" y="2" width="15" height="15">
|
|
|
|
<Check
|
|
|
|
size={15}
|
|
|
|
color="black"
|
|
|
|
strokeWidth={8}
|
2021-12-27 09:38:49 -05:00
|
|
|
/>
|
2021-12-28 14:43:42 -05:00
|
|
|
</foreignObject>
|
|
|
|
</svg>
|
|
|
|
</Tooltip>
|
|
|
|
) : undefined}
|
2021-12-27 09:38:49 -05:00
|
|
|
<div className="title">{server.name}</div>
|
|
|
|
{(server.permission & ServerPermission.ManageServer) > 0 && (
|
2021-12-28 15:04:18 -05:00
|
|
|
<Link to={`/server/${server._id}/settings`}>
|
|
|
|
<IconButton>
|
|
|
|
<Cog size={20} />
|
|
|
|
</IconButton>
|
|
|
|
</Link>
|
2021-12-27 09:38:49 -05:00
|
|
|
)}
|
|
|
|
</div>
|
|
|
|
</ServerBanner>
|
2021-07-05 06:25:20 -04:00
|
|
|
);
|
2021-07-29 14:01:40 -04:00
|
|
|
});
|