Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/next/components/landing/social-media-icon-list.tsx
6150 views
1
import React from "react";
2
import { Flex } from "antd";
3
4
import { Icon, IconName } from "@cocalc/frontend/components/icon";
5
import { COLORS } from "@cocalc/util/theme";
6
7
enum SocialMediaType {
8
FACEBOOK = "facebook",
9
GITHUB = "github",
10
INSTAGRAM = "instagram",
11
LINKEDIN = "linkedin",
12
TWITTER = "twitter",
13
YOUTUBE = "youtube",
14
DISCORD = "discord",
15
}
16
17
const ICON_MAP: Record<SocialMediaType, IconName> = {
18
[SocialMediaType.FACEBOOK]: "facebook-filled",
19
[SocialMediaType.GITHUB]: "github",
20
[SocialMediaType.INSTAGRAM]: "instagram",
21
[SocialMediaType.LINKEDIN]: "linkedin-filled",
22
[SocialMediaType.TWITTER]: "twitter",
23
[SocialMediaType.YOUTUBE]: "youtube-filled",
24
[SocialMediaType.DISCORD]: "discord",
25
};
26
27
export interface SocialMediaIconListProps {
28
links: Partial<Record<SocialMediaType, string>>;
29
iconFontSize?: number;
30
style?: React.CSSProperties;
31
}
32
33
export default function SocialMediaIconList(props: SocialMediaIconListProps) {
34
const { links, iconFontSize = 12, style = {} } = props;
35
36
return (
37
<Flex
38
align="center"
39
wrap="wrap"
40
style={{
41
fontSize: `${iconFontSize}px`,
42
...style,
43
}}
44
>
45
{Object.keys(links)
46
.sort()
47
.map((mediaType: SocialMediaType) => (
48
<a
49
key={mediaType}
50
href={links[mediaType]}
51
target="_blank"
52
style={{
53
color: COLORS.GRAY,
54
}}
55
>
56
<Icon
57
name={ICON_MAP[mediaType]}
58
style={{ margin: `0 ${iconFontSize / 2}px` }}
59
/>
60
</a>
61
))}
62
</Flex>
63
);
64
}
65
66