Path: blob/master/src/packages/next/components/landing/footer.tsx
1450 views
/*1* This file is part of CoCalc: Copyright © 2021 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45import { Col, Flex, Layout, Row, Space, Typography } from "antd";67import { COLORS } from "@cocalc/util/theme";89import { is_valid_email_address as isValidEmailAddress } from "@cocalc/util/misc";10import Logo from "components/logo";11import { CSS } from "components/misc";12import A from "components/misc/A";13import { MAX_WIDTH } from "lib/config";14import { useCustomize } from "lib/customize";1516import { liveDemoUrl } from "components/landing/live-demo";17import SocialMediaIconList from "./social-media-icon-list";1819const FOOTER_STYLE: CSS = {20borderTop: "1px solid lightgrey",21backgroundColor: "white",22};2324const FOOTER_COLUMNS_STYLE: CSS = {25minWidth: "200px",26flexGrow: 1,27} as const;2829const FOOTER_COLUMN_STYLE = {30marginTop: "32px",31minWidth: "128px",32} as const;3334const FOOTER_TABLE_STYLE: CSS = {35maxWidth: MAX_WIDTH,36marginBottom: "36px",37width: "100%",38} as const;3940const LOGO_COLUMN_STYLE = {41paddingBottom: "24px",42marginTop: "32px",43} as const;4445interface FooterLink {46text: string;47url: string;48hide?: boolean;49}5051interface FooterColumn {52header: string;53links: Array<FooterLink>;54}5556export default function Footer() {57const {58contactEmail,59onCoCalcCom,60organizationName,61organizationURL,62enabledPages,63termsOfServiceURL,64supportVideoCall,65} = useCustomize();6667const footerColumns: Array<FooterColumn> = [68{69header: "Product",70links: [71{72text: "Store",73url: "/store",74hide: !enabledPages?.store,75},76{77text: "Features",78url: "/features",79hide: !enabledPages?.features,80},81{82text: "Licenses",83url: "/licenses",84hide: !enabledPages?.licenses,85},86{87text: "Pricing",88url: "/pricing",89hide: !enabledPages?.pricing,90},91{92text: "On-Premises",93url: "/pricing/onprem",94hide: !enabledPages?.onPrem,95},96{97text: "Translations",98url: "/lang",99},100{101text: "System Activity",102url: "/info/status",103hide: !enabledPages?.systemActivity,104},105{106text: "Status",107url: "https://status.cocalc.com/",108hide: !enabledPages?.status,109},110],111},112{113header: "Resources",114links: [115{116text: "Documentation",117url: "/info/doc",118hide: !enabledPages?.info,119},120{121text: "Compute Servers",122url: "https://doc.cocalc.com/compute_server.html",123hide: !enabledPages?.compute,124},125{126text: "Public Share",127url: "/share/public_paths/page/1",128hide: !enabledPages?.share,129},130{131text: "Software",132url: "/software",133hide: !enabledPages?.software,134},135{136text: "Support",137url: "/support",138hide: !enabledPages?.support,139},140{141text: "Get a Live Demo",142url: supportVideoCall ?? "",143hide: !enabledPages?.liveDemo || !supportVideoCall,144},145{146text: "Contact Us",147url: liveDemoUrl("footer"),148hide: !enabledPages?.support,149},150],151},152{153header: "Company",154links: [155{156text: "About",157url: "/about",158hide: !enabledPages?.about.index,159},160{161text: "Contact",162url: contactEmail || "",163hide: !enabledPages?.contact,164},165{166text: "Events",167url: "/about/events",168hide: !enabledPages?.about.events,169},170{171text: "Team",172url: "/about/team",173hide: !enabledPages?.about.team,174},175{176text: "Imprint",177url: "/policies/imprint",178hide: !enabledPages?.policies.imprint,179},180{181text: "News",182url: "/news",183hide: !enabledPages?.news,184},185{186text: "Policies",187url: "/policies",188hide: !enabledPages?.policies.index,189},190{191text: "Terms of Service",192url: termsOfServiceURL || "",193hide: !enabledPages?.termsOfService,194},195{196text: organizationName || "Company",197url: organizationURL || "",198hide: !enabledPages?.organization,199},200],201},202];203204function renderFooterColumns() {205return footerColumns.map((column) => (206<Space207key={`footer-column-${column.header}`}208direction="vertical"209size="small"210style={FOOTER_COLUMN_STYLE}211>212<Typography.Title level={5}>{column.header}</Typography.Title>213{column.links214.filter((footerLink) => !footerLink.hide)215.map((footerLink) => (216<A217key={footerLink.url}218href={219isValidEmailAddress(footerLink.url)220? `mailto:${footerLink.url}`221: footerLink.url222}223style={{ color: COLORS.GRAY_D }}224>225{footerLink.text}226</A>227))}228</Space>229));230}231232return (233<Layout.Footer style={FOOTER_STYLE}>234<Flex justify="center">235<Row justify="space-between" style={FOOTER_TABLE_STYLE}>236<Col xs={24} md={8}>237<Flex238justify="space-between"239align="center"240wrap="wrap"241style={LOGO_COLUMN_STYLE}242>243<Logo type="rectangular" width={150} />244{onCoCalcCom && (245<SocialMediaIconList246links={{247facebook: "https://www.facebook.com/CoCalcOnline",248github: "https://github.com/sagemathinc/cocalc",249linkedin: "https://www.linkedin.com/company/sagemath-inc./",250twitter: "https://twitter.com/cocalc_com",251youtube: "https://www.youtube.com/c/SagemathCloud",252}}253iconFontSize={20}254/>255)}256</Flex>257</Col>258<Col xs={24} md={16}>259<Flex260justify="space-between"261style={FOOTER_COLUMNS_STYLE}262wrap="wrap"263>264{renderFooterColumns()}265</Flex>266</Col>267</Row>268</Flex>269</Layout.Footer>270);271}272273274