PromucFlow_constructor/app/client/src/components/designSystems/appsmith/TabbedView.tsx

73 lines
1.7 KiB
TypeScript
Raw Normal View History

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";
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);
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;
${props =>
props.shouldOverflow &&
`
overflow-y: hidden;
overflow-x: auto;
white-space: nowrap;
`}
}
.react-tabs__tab {
padding: 6px 9px;
}
2019-12-11 10:35:07 +00:00
.react-tabs__tab:focus {
box-shadow: none;
border-color: ${props => props.theme.colors.primaryOld};
2019-12-11 10:35:07 +00:00
}
.react-tabs__tab--selected {
color: ${props => props.theme.colors.primaryOld};
2019-12-11 10:35:07 +00:00
border-color: #d0d7dd;
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;
panelComponent: JSX.Element;
2019-10-21 15:12:45 +00:00
}>;
selectedIndex?: number;
setSelectedIndex?: Function;
overflow?: boolean;
2019-10-21 15:12:45 +00:00
};
export const BaseTabbedView = (props: TabbedViewComponentType) => {
return (
<TabsWrapper shouldOverflow={props.overflow}>
<Tabs
selectedIndex={props.selectedIndex}
onSelect={(index: number) => {
props.setSelectedIndex && props.setSelectedIndex(index);
}}
>
2019-12-11 10:35:07 +00:00
<TabList>
{props.tabs.map(tab => (
<Tab key={tab.key}>{tab.title}</Tab>
))}
</TabList>
2019-10-21 15:12:45 +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
))}
</Tabs>
2019-10-21 15:12:45 +00:00
</TabsWrapper>
);
};