Skip to content

[docs] Add Tabs TypeScript demo #15053

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 28, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions docs/src/pages/demos/tabs/CenteredTabs.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';

const useStyles = makeStyles({
root: {
flexGrow: 1,
},
});

function CenteredTabs() {
const classes = useStyles();
const [value, setValue] = React.useState(0);

function handleChange(event: React.ChangeEvent<{}>, newValue: number) {
setValue(newValue);
}

return (
<Paper className={classes.root}>
<Tabs
value={value}
onChange={handleChange}
indicatorColor="primary"
textColor="primary"
centered
>
<Tab label="Item One" />
<Tab label="Item Two" />
<Tab label="Item Three" />
</Tabs>
</Paper>
);
}

export default CenteredTabs;
133 changes: 133 additions & 0 deletions docs/src/pages/demos/tabs/CustomizedTabs.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import React from 'react';
import { makeStyles, withStyles } from '@material-ui/styles';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
import Typography from '@material-ui/core/Typography';
import { Theme } from '@material-ui/core/styles';

interface StyledTabsProps {
value: number;
onChange: (event: React.ChangeEvent<{}>, newValue: number) => void;
}

const StyledTabs = withStyles({
indicator: {
display: 'flex',
justifyContent: 'center',
backgroundColor: 'transparent',
'& > div': {
maxWidth: 40,
width: '100%',
backgroundColor: '#635ee7',
},
},
})((props: StyledTabsProps) => <Tabs {...props} TabIndicatorProps={{ children: <div /> }} />);

interface StyledTabProps {
label: string;
}

const StyledTab = withStyles((theme: Theme) => ({
root: {
textTransform: 'initial',
color: '#fff',
fontWeight: theme.typography.fontWeightRegular,
fontSize: theme.typography.pxToRem(15),
marginRight: theme.spacing(1),
},
}))((props: StyledTabProps) => <Tab disableRipple {...props} />);

const useStyles = makeStyles((theme: Theme) => ({
root: {
flexGrow: 1,
backgroundColor: theme.palette.background.paper,
},
tabsRoot: {
borderBottom: '1px solid #e8e8e8',
},
tabsIndicator: {
backgroundColor: '#1890ff',
},
tabRoot: {
textTransform: 'initial',
minWidth: 72,
fontWeight: theme.typography.fontWeightRegular,
marginRight: theme.spacing(4),
fontFamily: [
'-apple-system',
'BlinkMacSystemFont',
'"Segoe UI"',
'Roboto',
'"Helvetica Neue"',
'Arial',
'sans-serif',
'"Apple Color Emoji"',
'"Segoe UI Emoji"',
'"Segoe UI Symbol"',
].join(','),
'&:hover': {
color: '#40a9ff',
opacity: 1,
},
'&$tabSelected': {
color: '#1890ff',
fontWeight: theme.typography.fontWeightMedium,
},
'&:focus': {
color: '#40a9ff',
},
},
tabSelected: {},
typography: {
padding: theme.spacing(3),
},
demo2: {
backgroundColor: '#2e1534',
},
}));

function CustomizedTabs() {
const classes = useStyles();
const [value, setValue] = React.useState(0);

function handleChange(event: React.ChangeEvent<{}>, newValue: number) {
setValue(newValue);
}

return (
<div className={classes.root}>
<Tabs
value={value}
onChange={handleChange}
classes={{ root: classes.tabsRoot, indicator: classes.tabsIndicator }}
>
<Tab
disableRipple
classes={{ root: classes.tabRoot, selected: classes.tabSelected }}
label="Tab 1"
/>
<Tab
disableRipple
classes={{ root: classes.tabRoot, selected: classes.tabSelected }}
label="Tab 2"
/>
<Tab
disableRipple
classes={{ root: classes.tabRoot, selected: classes.tabSelected }}
label="Tab 3"
/>
</Tabs>
<Typography className={classes.typography}>Ant Design UI powered by Material-UI</Typography>
<div className={classes.demo2}>
<StyledTabs value={value} onChange={handleChange}>
<StyledTab label="Workflows" />
<StyledTab label="Datasets" />
<StyledTab label="Connections" />
</StyledTabs>
<Typography className={classes.typography} />
</div>
</div>
);
}

export default CustomizedTabs;
24 changes: 24 additions & 0 deletions docs/src/pages/demos/tabs/DisabledTabs.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import React from 'react';
import Paper from '@material-ui/core/Paper';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';

function DisabledTabs() {
const [value, setValue] = React.useState(2);

function handleChange(event: React.ChangeEvent<{}>, newValue: number) {
setValue(newValue);
}

return (
<Paper square>
<Tabs value={value} indicatorColor="primary" textColor="primary" onChange={handleChange}>
<Tab label="Active" />
<Tab label="Disabled" disabled />
<Tab label="Active" />
</Tabs>
</Paper>
);
}

export default DisabledTabs;
76 changes: 76 additions & 0 deletions docs/src/pages/demos/tabs/FullWidthTabs.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import React from 'react';
import PropTypes from 'prop-types';
import SwipeableViews from 'react-swipeable-views';
import { makeStyles, Theme, useTheme } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
import Typography from '@material-ui/core/Typography';

interface TabContainerProps {
children?: React.ReactNode;
dir?: string;
}

function TabContainer({ children, dir }: TabContainerProps) {
return (
<Typography component="div" dir={dir} style={{ padding: 8 * 3 }}>
{children}
</Typography>
);
}

TabContainer.propTypes = {
children: PropTypes.node.isRequired,
dir: PropTypes.string.isRequired,
};

const useStyles = makeStyles((theme: Theme) => ({
root: {
backgroundColor: theme.palette.background.paper,
width: 500,
},
}));

function FullWidthTabs() {
const classes = useStyles();
const theme = useTheme();
const [value, setValue] = React.useState(0);

function handleChange(event: React.ChangeEvent<{}>, newValue: number) {
setValue(newValue);
}

function handleChangeIndex(index: number) {
setValue(index);
}

return (
<div className={classes.root}>
<AppBar position="static" color="default">
<Tabs
value={value}
onChange={handleChange}
indicatorColor="primary"
textColor="primary"
variant="fullWidth"
>
<Tab label="Item One" />
<Tab label="Item Two" />
<Tab label="Item Three" />
</Tabs>
</AppBar>
<SwipeableViews
axis={theme.direction === 'rtl' ? 'x-reverse' : 'x'}
index={value}
onChangeIndex={handleChangeIndex}
>
<TabContainer dir={theme.direction}>Item One</TabContainer>
<TabContainer dir={theme.direction}>Item Two</TabContainer>
<TabContainer dir={theme.direction}>Item Three</TabContainer>
</SwipeableViews>
</div>
);
}

export default FullWidthTabs;
42 changes: 42 additions & 0 deletions docs/src/pages/demos/tabs/IconLabelTabs.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import React from 'react';
import Paper from '@material-ui/core/Paper';
import { makeStyles } from '@material-ui/core/styles';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
import PhoneIcon from '@material-ui/icons/Phone';
import FavoriteIcon from '@material-ui/icons/Favorite';
import PersonPinIcon from '@material-ui/icons/PersonPin';

const useStyles = makeStyles({
root: {
flexGrow: 1,
maxWidth: 500,
},
});

function IconLabelTabs() {
const classes = useStyles();
const [value, setValue] = React.useState(0);

function handleChange(event: React.ChangeEvent<{}>, newValue: number) {
setValue(newValue);
}

return (
<Paper square className={classes.root}>
<Tabs
value={value}
onChange={handleChange}
variant="fullWidth"
indicatorColor="secondary"
textColor="secondary"
>
<Tab icon={<PhoneIcon />} label="RECENTS" />
<Tab icon={<FavoriteIcon />} label="FAVORITES" />
<Tab icon={<PersonPinIcon />} label="NEARBY" />
</Tabs>
</Paper>
);
}

export default IconLabelTabs;
42 changes: 42 additions & 0 deletions docs/src/pages/demos/tabs/IconTabs.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Paper from '@material-ui/core/Paper';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
import PhoneIcon from '@material-ui/icons/Phone';
import FavoriteIcon from '@material-ui/icons/Favorite';
import PersonPinIcon from '@material-ui/icons/PersonPin';

const useStyles = makeStyles({
root: {
flexGrow: 1,
maxWidth: 500,
},
});

function IconTabs() {
const classes = useStyles();
const [value, setValue] = React.useState(0);

function handleChange(event: React.ChangeEvent<{}>, newValue: number) {
setValue(newValue);
}

return (
<Paper square className={classes.root}>
<Tabs
value={value}
onChange={handleChange}
variant="fullWidth"
indicatorColor="primary"
textColor="primary"
>
<Tab icon={<PhoneIcon />} />
<Tab icon={<FavoriteIcon />} />
<Tab icon={<PersonPinIcon />} />
</Tabs>
</Paper>
);
}

export default IconTabs;
Loading