import { observer } from "mobx-react-lite"; import { useHistory } from "react-router-dom"; import { Channel } from "revolt.js"; import styled from "styled-components/macro"; import { Text } from "preact-i18n"; import { useEffect, useState } from "preact/hooks"; import { Button, Checkbox, Preloader } from "@revoltchat/ui"; import { useApplicationState } from "../../mobx/State"; import { SECTION_NSFW } from "../../mobx/stores/Layout"; const Base = styled.div` display: flex; flex-grow: 1; flex-direction: column; align-items: center; justify-content: center; user-select: none; padding: 12px; img { height: 150px; } .subtext { color: var(--secondary-foreground); margin-bottom: 12px; font-size: 14px; } .actions { margin-top: 20px; display: flex; gap: 12px; } `; type Props = { gated: boolean; children: Children; } & { type: "channel"; channel: Channel; }; let geoBlock: | undefined | { countryCode: string; isAgeRestrictedGeo: true; }; export default observer((props: Props) => { const history = useHistory(); const layout = useApplicationState().layout; const [geoLoaded, setGeoLoaded] = useState(typeof geoBlock !== "undefined"); const [ageGate, setAgeGate] = useState(false); useEffect(() => { if (!geoLoaded) { fetch("https://geo.revolt.chat") .then((res) => res.json()) .then((data) => { geoBlock = data; setGeoLoaded(true); }); } }, []); if (!geoBlock) return ; if ((ageGate && !geoBlock.isAgeRestrictedGeo) || !props.gated) { return <>{props.children}; } if ( !( props.channel.channel_type === "Group" || props.channel.channel_type === "TextChannel" ) ) return <>{props.children}; return (

{props.channel.name}

{" "} {geoBlock.isAgeRestrictedGeo ? (
{geoBlock.countryCode === "GB" ? "This channel is not available in your region while we review options on legal compliance." : "This content is not available in your region."}
) : ( <> } value={layout.getSectionState(SECTION_NSFW, false)} onChange={() => layout.toggleSectionState(SECTION_NSFW, false) } />
)} ); });