2019-10-21 15:12:45 +00:00
|
|
|
import React from "react";
|
2019-12-11 10:35:07 +00:00
|
|
|
import { Tab, Tabs, TabList, TabPanel } from "react-tabs";
|
|
|
|
|
import "react-tabs/style/react-tabs.css";
|
2019-10-21 15:12:45 +00:00
|
|
|
import styled from "styled-components";
|
|
|
|
|
|
2020-07-01 10:01:07 +00:00
|
|
|
const TabsWrapper = styled.div<{ shouldOverflow?: boolean }>`
|
2020-03-03 06:51:59 +00:00
|
|
|
height: 100%;
|
|
|
|
|
.react-tabs {
|
|
|
|
|
height: 100%;
|
|
|
|
|
}
|
|
|
|
|
.react-tabs__tab-panel {
|
2020-06-12 03:54:12 +00:00
|
|
|
height: calc(100% - 46px);
|
2020-10-16 06:58:34 +00:00
|
|
|
scrollbar-width: none;
|
2020-03-03 06:51:59 +00:00
|
|
|
}
|
2019-12-11 10:35:07 +00:00
|
|
|
.react-tabs__tab-list {
|
|
|
|
|
border-bottom-color: #d0d7dd;
|
|
|
|
|
color: #a3b3bf;
|
2020-12-24 04:32:25 +00:00
|
|
|
${(props) =>
|
2020-07-01 10:01:07 +00:00
|
|
|
props.shouldOverflow &&
|
2020-05-22 03:43:01 +00:00
|
|
|
`
|
|
|
|
|
overflow-y: hidden;
|
|
|
|
|
overflow-x: auto;
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
`}
|
|
|
|
|
}
|
|
|
|
|
.react-tabs__tab {
|
|
|
|
|
padding: 6px 9px;
|
2019-10-25 05:35:20 +00:00
|
|
|
}
|
2019-12-11 10:35:07 +00:00
|
|
|
.react-tabs__tab:focus {
|
|
|
|
|
box-shadow: none;
|
2020-12-24 04:32:25 +00:00
|
|
|
border-color: ${(props) => props.theme.colors.primaryOld};
|
2019-12-11 10:35:07 +00:00
|
|
|
}
|
|
|
|
|
.react-tabs__tab--selected {
|
2020-12-24 04:32:25 +00:00
|
|
|
color: ${(props) => props.theme.colors.primaryOld};
|
2019-12-11 10:35:07 +00:00
|
|
|
border-color: #d0d7dd;
|
2020-12-24 04:32:25 +00:00
|
|
|
border-top: ${(props) => props.theme.colors.primaryOld} 5px solid;
|
2019-12-11 10:35:07 +00:00
|
|
|
border-radius: 0;
|
2019-10-21 15:12:45 +00:00
|
|
|
}
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
type TabbedViewComponentType = {
|
|
|
|
|
tabs: Array<{
|
|
|
|
|
key: string;
|
|
|
|
|
title: string;
|
2019-10-25 05:35:20 +00:00
|
|
|
panelComponent: JSX.Element;
|
2019-10-21 15:12:45 +00:00
|
|
|
}>;
|
2020-05-30 02:39:18 +00:00
|
|
|
selectedIndex?: number;
|
2020-11-03 13:05:40 +00:00
|
|
|
setSelectedIndex?: (selectedIndex: number) => void;
|
2020-05-22 03:43:01 +00:00
|
|
|
overflow?: boolean;
|
2019-10-21 15:12:45 +00:00
|
|
|
};
|
|
|
|
|
|
2021-04-28 10:28:39 +00:00
|
|
|
export function BaseTabbedView(props: TabbedViewComponentType) {
|
2019-10-21 15:12:45 +00:00
|
|
|
return (
|
2020-07-01 10:01:07 +00:00
|
|
|
<TabsWrapper shouldOverflow={props.overflow}>
|
2020-05-30 02:39:18 +00:00
|
|
|
<Tabs
|
|
|
|
|
onSelect={(index: number) => {
|
|
|
|
|
props.setSelectedIndex && props.setSelectedIndex(index);
|
|
|
|
|
}}
|
2021-04-28 10:28:39 +00:00
|
|
|
selectedIndex={props.selectedIndex}
|
2020-05-30 02:39:18 +00:00
|
|
|
>
|
2019-12-11 10:35:07 +00:00
|
|
|
<TabList>
|
2020-12-24 04:32:25 +00:00
|
|
|
{props.tabs.map((tab) => (
|
2019-12-11 10:35:07 +00:00
|
|
|
<Tab key={tab.key}>{tab.title}</Tab>
|
|
|
|
|
))}
|
|
|
|
|
</TabList>
|
2020-12-24 04:32:25 +00:00
|
|
|
{props.tabs.map((tab) => (
|
2019-12-11 10:35:07 +00:00
|
|
|
<TabPanel key={tab.key}>{tab.panelComponent}</TabPanel>
|
2019-10-21 15:12:45 +00:00
|
|
|
))}
|
2019-10-25 05:35:20 +00:00
|
|
|
</Tabs>
|
2019-10-21 15:12:45 +00:00
|
|
|
</TabsWrapper>
|
|
|
|
|
);
|
2021-04-28 10:28:39 +00:00
|
|
|
}
|