Skip to content
Snippets Groups Projects
ServerHeader.tsx 1.39 KiB
Newer Older
insert's avatar
insert committed
import Header from "../ui/Header";
import styled from "styled-components";
import { Link } from "react-router-dom";
import IconButton from "../ui/IconButton";
import { Cog } from "@styled-icons/boxicons-solid";
insert's avatar
insert committed
import { Server } from "revolt.js/dist/api/objects";
import { ServerPermission } from "revolt.js/dist/api/permissions";
import { HookContext, useServerPermission } from "../../context/revoltjs/hooks";

interface Props {
    server: Server,
    ctx: HookContext
}

const ServerName = styled.div`
    flex-grow: 1;
`;

export default function ServerHeader({ server, ctx }: Props) {
    const permissions = useServerPermission(server._id, ctx);
    const bannerURL = ctx.client.servers.getBannerURL(server._id, { width: 480 }, true);

    return (
insert's avatar
insert committed
        <Header borders
            placement="secondary"
insert's avatar
insert committed
            background={typeof bannerURL !== 'undefined'}
            style={{ background: bannerURL ? `linear-gradient(to bottom, transparent 50%, #000e), url('${bannerURL}')` : undefined }}>
            <ServerName>
                { server.name }
            </ServerName>
            { (permissions & ServerPermission.ManageServer) > 0 && <div className="actions">
                <Link to={`/server/${server._id}/settings`}>
                    <IconButton>
                        <Cog size={24} />
insert's avatar
insert committed
                    </IconButton>
                </Link>
            </div> }
        </Header>
    )
}