Files
protocol/packages/website/ts/components/tabbed_code_demo.tsx
2019-08-20 16:51:06 -07:00

62 lines
1.5 KiB
TypeScript

import * as React from 'react';
import styled from 'styled-components';
import { CodeDemo } from 'ts/components/code_demo';
export interface CodeTab {
code: string;
label: string;
language: string;
}
export interface TabbedCodeDemoProps {
tabs: CodeTab[];
activeIndex: number;
onTabClick: (index: number) => void;
}
interface TabProps {
isActive: boolean;
}
export const TabbedWrapper = styled.div`
background-color: #0c2320;
width: 100%;
min-width: 605px;
height: 645px;
margin-left: 50px;
overflow: hidden;
@media (max-width: 1216px) {
display: none;
}
`;
const Tab = styled.div<TabProps>`
background-color: ${props => props.theme.lightBgColor};
opacity: ${props => (props.isActive ? '1' : '0.5')};
display: inline-block;
padding: 20px 40px;
font-size: 16px;
cursor: pointer;
&:hover {
opacity: ${props => (props.isActive ? '1' : '0.75')};
}
`;
export const TabbedCodeDemo: React.FC<TabbedCodeDemoProps> = props => {
const { activeIndex, tabs, onTabClick } = props;
const { code, language } = tabs[activeIndex];
return (
<TabbedWrapper>
{tabs.map((tab, index) => (
<Tab key={tab.label} isActive={activeIndex === index} onClick={onTabClick.bind(null, index)}>
{tab.label}
</Tab>
))}
<CodeDemo language={language} fontSize="14px" shouldHideCopy={true}>
{code}
</CodeDemo>
</TabbedWrapper>
);
};