material-ui-arabic-datepicker
Version:
React components, that implements material design date and time pickers for material-ui v1 including a customized Datepicker with arabic header, months and weekdays and English numbers, modfied implementation from materail-ui-pickers
146 lines (132 loc) • 3.98 kB
JSX
import React from 'react';
import PropTypes from 'prop-types';
import withStyles from '@material-ui/core/styles/withStyles';
import PickerToolbar from '../_shared/PickerToolbar';
import ToolbarButton from '../_shared/ToolbarButton';
import withUtils from '../_shared/WithUtils';
import * as viewType from '../constants/date-picker-view';
export const DateTimePickerHeader = (props) => {
const {
date, classes, openView, meridiemMode, onOpenViewChange, setMeridiemMode,
theme, utils, ampm,
} = props;
const changeOpenView = view => () => onOpenViewChange(view);
const rtl = theme.direction === 'rtl';
const hourMinuteClassName = rtl
? classes.hourMinuteLabelReverse
: classes.hourMinuteLabel;
return (
<PickerToolbar className={classes.toolbar}>
<div className={classes.dateHeader}>
<ToolbarButton
variant="subheading"
onClick={changeOpenView(viewType.YEAR)}
selected={openView === viewType.YEAR}
label={utils.getYearText(date)}
/>
<ToolbarButton
variant="display1"
onClick={changeOpenView(viewType.DATE)}
selected={openView === viewType.DATE}
label={utils.getDateTimePickerHeaderText(date)}
/>
</div>
<div className={classes.timeHeader}>
<div className={hourMinuteClassName}>
<ToolbarButton
variant="display2"
onClick={changeOpenView(viewType.HOUR)}
selected={openView === viewType.HOUR}
label={utils.getHourText(date, ampm)}
/>
<ToolbarButton
variant="display2"
label=":"
selected={false}
className={classes.separator}
/>
<ToolbarButton
variant="display2"
onClick={changeOpenView(viewType.MINUTES)}
selected={openView === viewType.MINUTES}
label={utils.getMinuteText(date)}
/>
</div>
{
ampm &&
<div className={classes.ampmSelection}>
<ToolbarButton
className={classes.ampmLabel}
selected={meridiemMode === 'am'}
type="subheading"
label={utils.getMeridiemText('am')}
onClick={setMeridiemMode('am')}
/>
<ToolbarButton
className={classes.ampmLabel}
selected={meridiemMode === 'pm'}
type="subheading"
label={utils.getMeridiemText('pm')}
onClick={setMeridiemMode('pm')}
/>
</div>
}
</div>
</PickerToolbar>
);
};
DateTimePickerHeader.propTypes = {
date: PropTypes.object.isRequired,
classes: PropTypes.object.isRequired,
theme: PropTypes.object.isRequired,
meridiemMode: PropTypes.string.isRequired,
openView: PropTypes.string.isRequired,
onOpenViewChange: PropTypes.func.isRequired,
setMeridiemMode: PropTypes.func.isRequired,
utils: PropTypes.object.isRequired,
ampm: PropTypes.bool,
};
DateTimePickerHeader.defaultProps = {
ampm: true,
};
const styles = () => ({
toolbar: {
flexDirection: 'row',
alignItems: 'center',
paddingLeft: 16,
paddingRight: 16,
justifyContent: 'space-around',
},
separator: {
margin: '0 4px 0 2px',
cursor: 'default',
},
ampmSelection: {
marginLeft: 10,
marginRight: -10,
},
ampmLabel: {
fontSize: 18,
},
hourMinuteLabel: {
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
},
hourMinuteLabelReverse: {
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
flexDirection: 'row-reverse',
},
dateHeader: {
height: 65,
},
timeHeader: {
height: 65,
display: 'flex',
justifyContent: 'flex-end',
alignItems: 'flex-end',
},
});
export default withStyles(styles, { withTheme: true })(withUtils()(DateTimePickerHeader));