Skip to content
Snippets Groups Projects
cycle-day-label.js 1.62 KiB
Newer Older
import React from 'react'
import PropTypes from 'prop-types'
Maria Zadnepryanets's avatar
Maria Zadnepryanets committed
import { StyleSheet, View } from 'react-native'
import moment from 'moment'

import AppText from '../common/app-text'

import cycleModule from '../../lib/cycle'
import { getOrdinalSuffix } from '../helpers/home'
Maria Zadnepryanets's avatar
Maria Zadnepryanets committed
import { Containers, Typography } from '../../styles'

const CycleDayLabel = ({ height, date }) => {
  const cycleDayNumber = cycleModule().getCycleDayNumber(date)
Maria Zadnepryanets's avatar
Maria Zadnepryanets committed
  const cycleDayLabel = cycleDayNumber ? cycleDayNumber : ' '
  const momentDate = moment(date)
  const dayOfMonth = momentDate.date()
  const isFirstDayOfMonth = dayOfMonth === 1

  return (
Maria Zadnepryanets's avatar
Maria Zadnepryanets committed
    <View style={[styles.container, { height }]}>
      <AppText style={styles.textBold}>{cycleDayLabel}</AppText>
      <View style={styles.dateLabel}>
        <AppText style={styles.text}>
          {isFirstDayOfMonth ? momentDate.format('MMM') : dayOfMonth}
        </AppText>
        {!isFirstDayOfMonth &&
          <AppText style={styles.textLight}>
            {getOrdinalSuffix(dayOfMonth)}
          </AppText>
        }
Maria Zadnepryanets's avatar
Maria Zadnepryanets committed
      </View>
    </View>
  )
}

CycleDayLabel.propTypes = {
  height: PropTypes.number,
  date: PropTypes.string,
}

Maria Zadnepryanets's avatar
Maria Zadnepryanets committed
const styles = StyleSheet.create({
  container: {
    alignItems: 'flex-start',
    justifyContent: 'flex-end',
    left: 4,
  },
  containerRow: {
    ...Containers.rowContainer
  },
  text: {
    ...Typography.label,
    fontSize: 12
Maria Zadnepryanets's avatar
Maria Zadnepryanets committed
  },
  textBold: {
    ...Typography.labelBold
  },
  textLight: {
    ...Typography.labelLight,
  },
  dateLabel: {
    flexDirection: 'row',
    justifyContent: 'space-around',
    alignItems: 'center',
export default CycleDayLabel