Resolve "don't show temperature chart part of chart when temp not tracked"
This commit is contained in:
committed by
Sofiya Tepikin
parent
620f5e77da
commit
ee0b83d1ca
@@ -1,4 +1,5 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
import { View } from 'react-native'
|
import { View } from 'react-native'
|
||||||
|
|
||||||
import AppText from '../app-text'
|
import AppText from '../app-text'
|
||||||
@@ -9,9 +10,9 @@ import { cycleDayColor } from '../../styles'
|
|||||||
|
|
||||||
import { shared as labels } from '../../i18n/en/labels'
|
import { shared as labels } from '../../i18n/en/labels'
|
||||||
|
|
||||||
const ChartLegend = () => {
|
const ChartLegend = ({ xAxisHeight }) => {
|
||||||
return (
|
return (
|
||||||
<View style={[styles.yAxis, styles.chartLegend]}>
|
<View style={[styles.yAxis, styles.chartLegend, {height: xAxisHeight}]}>
|
||||||
<DripHomeIcon
|
<DripHomeIcon
|
||||||
name="circle"
|
name="circle"
|
||||||
size={styles.yAxis.width - 7}
|
size={styles.yAxis.width - 7}
|
||||||
@@ -24,4 +25,8 @@ const ChartLegend = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ChartLegend.propTypes = {
|
||||||
|
xAxisHeight: PropTypes.number.isRequired
|
||||||
|
}
|
||||||
|
|
||||||
export default ChartLegend
|
export default ChartLegend
|
||||||
|
|||||||
+65
-42
@@ -2,11 +2,13 @@ import React, { Component } from 'react'
|
|||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import { View, FlatList, ActivityIndicator } from 'react-native'
|
import { View, FlatList, ActivityIndicator } from 'react-native'
|
||||||
|
|
||||||
|
import NoData from './no-data'
|
||||||
import AppLoadingView from '../app-loading'
|
import AppLoadingView from '../app-loading'
|
||||||
import YAxis from './y-axis'
|
import YAxis from './y-axis'
|
||||||
import nfpLines from './nfp-lines'
|
import nfpLines from './nfp-lines'
|
||||||
import DayColumn from './day-column'
|
import DayColumn from './day-column'
|
||||||
import HorizontalGrid from './horizontal-grid'
|
import HorizontalGrid from './horizontal-grid'
|
||||||
|
import AppText from '../app-text'
|
||||||
|
|
||||||
import { getCycleDaysSortedByDate } from '../../db'
|
import { getCycleDaysSortedByDate } from '../../db'
|
||||||
import nothingChanged from '../../db/db-unchanged'
|
import nothingChanged from '../../db/db-unchanged'
|
||||||
@@ -14,7 +16,7 @@ import { scaleObservable } from '../../local-storage'
|
|||||||
import { makeColumnInfo } from '../helpers/chart'
|
import { makeColumnInfo } from '../helpers/chart'
|
||||||
|
|
||||||
import config from '../../config'
|
import config from '../../config'
|
||||||
|
import { shared } from '../../i18n/en/labels'
|
||||||
import styles from './styles'
|
import styles from './styles'
|
||||||
|
|
||||||
export default class CycleChart extends Component {
|
export default class CycleChart extends Component {
|
||||||
@@ -25,9 +27,26 @@ export default class CycleChart extends Component {
|
|||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props)
|
super(props)
|
||||||
|
|
||||||
this.state = {}
|
this.state = {}
|
||||||
this.cycleDaysSortedByDate = getCycleDaysSortedByDate()
|
this.cycleDaysSortedByDate = getCycleDaysSortedByDate()
|
||||||
this.getFhmAndLtlInfo = nfpLines()
|
this.getFhmAndLtlInfo = nfpLines()
|
||||||
|
this.shouldShowTemperatureColumn = false
|
||||||
|
|
||||||
|
this.prepareSymptomData()
|
||||||
|
}
|
||||||
|
|
||||||
|
prepareSymptomData = () => {
|
||||||
|
this.symptomRowSymptoms = config.symptoms.filter((symptomName) => {
|
||||||
|
return this.cycleDaysSortedByDate.some(cycleDay => {
|
||||||
|
return cycleDay[symptomName]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
this.chartSymptoms = [...this.symptomRowSymptoms]
|
||||||
|
if (this.cycleDaysSortedByDate.some(day => day.temperature)) {
|
||||||
|
this.chartSymptoms.push('temperature')
|
||||||
|
this.shouldShowTemperatureColumn = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
renderColumn = ({ item, index }) => {
|
renderColumn = ({ item, index }) => {
|
||||||
@@ -40,52 +59,40 @@ export default class CycleChart extends Component {
|
|||||||
columnHeight={this.columnHeight}
|
columnHeight={this.columnHeight}
|
||||||
symptomRowSymptoms={this.symptomRowSymptoms}
|
symptomRowSymptoms={this.symptomRowSymptoms}
|
||||||
chartSymptoms={this.chartSymptoms}
|
chartSymptoms={this.chartSymptoms}
|
||||||
|
shouldShowTemperatureColumn={this.shouldShowTemperatureColumn}
|
||||||
getFhmAndLtlInfo={this.getFhmAndLtlInfo}
|
getFhmAndLtlInfo={this.getFhmAndLtlInfo}
|
||||||
|
xAxisHeight={this.xAxisHeight}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
onLayout = ({ nativeEvent }) => {
|
reCalculateChartInfo = (nativeEvent) => {
|
||||||
if (this.state.chartHeight) return
|
const { height, width } = nativeEvent.layout
|
||||||
const height = nativeEvent.layout.height
|
const xAxisCoefficient = this.shouldShowTemperatureColumn ?
|
||||||
const reCalculateChartInfo = () => {
|
config.xAxisHeightPercentage : config.xAxisHeightPercentageLarge
|
||||||
// how many symptoms need to be displayed on the chart's upper symptom row?
|
const symptomCoefficient = this.shouldShowTemperatureColumn ?
|
||||||
this.symptomRowSymptoms = [
|
config.symptomHeightPercentage : config.symptomHeightPercentageLarge
|
||||||
'bleeding',
|
|
||||||
'mucus',
|
|
||||||
'cervix',
|
|
||||||
'sex',
|
|
||||||
'desire',
|
|
||||||
'pain',
|
|
||||||
'mood',
|
|
||||||
'note'
|
|
||||||
].filter((symptomName) => {
|
|
||||||
return this.cycleDaysSortedByDate.some(cycleDay => {
|
|
||||||
return cycleDay[symptomName]
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
this.xAxisHeight = height * config.xAxisHeightPercentage
|
this.xAxisHeight = height * xAxisCoefficient
|
||||||
const remainingHeight = height - this.xAxisHeight
|
const remainingHeight = height - this.xAxisHeight
|
||||||
this.symptomHeight = config.symptomHeightPercentage * remainingHeight
|
this.symptomHeight = remainingHeight * symptomCoefficient
|
||||||
this.symptomRowHeight = this.symptomRowSymptoms.length *
|
this.symptomRowHeight = this.symptomRowSymptoms.length *
|
||||||
this.symptomHeight
|
this.symptomHeight
|
||||||
this.columnHeight = remainingHeight - this.symptomRowHeight
|
this.columnHeight = remainingHeight - this.symptomRowHeight
|
||||||
|
const chartHeight = this.shouldShowTemperatureColumn ?
|
||||||
|
height : (this.symptomRowHeight + this.xAxisHeight)
|
||||||
|
|
||||||
this.chartSymptoms = [...this.symptomRowSymptoms]
|
const numberOfColumnsToRender = Math.round(width / config.columnWidth)
|
||||||
if (this.cycleDaysSortedByDate.some(day => day.temperature)) {
|
const columns = makeColumnInfo()
|
||||||
this.chartSymptoms.push('temperature')
|
|
||||||
|
this.setState({ columns, chartHeight, numberOfColumnsToRender })
|
||||||
}
|
}
|
||||||
|
|
||||||
const columnData = makeColumnInfo()
|
onLayout = ({ nativeEvent }) => {
|
||||||
this.setState({
|
if (this.state.chartHeight) return
|
||||||
columns: columnData,
|
|
||||||
chartHeight: height
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
reCalculateChartInfo()
|
this.reCalculateChartInfo(nativeEvent)
|
||||||
this.updateListeners(reCalculateChartInfo)
|
this.updateListeners(this.reCalculateChartInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
updateListeners(dataUpdateHandler) {
|
updateListeners(dataUpdateHandler) {
|
||||||
@@ -110,13 +117,16 @@ export default class CycleChart extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { chartHeight, chartLoaded } = this.state
|
const { chartHeight, chartLoaded, numberOfColumnsToRender } = this.state
|
||||||
|
const shouldShowChart = this.chartSymptoms.length > 0 ? true : false
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View onLayout={this.onLayout} style={styles.container}>
|
||||||
onLayout={this.onLayout}
|
{!shouldShowChart && <NoData navigate={this.props.navigate}/>}
|
||||||
style={styles.container}
|
{shouldShowChart && !chartHeight && !chartLoaded && <AppLoadingView />}
|
||||||
>
|
<View style={styles.chartContainer}>
|
||||||
{!chartLoaded && <AppLoadingView />}
|
{shouldShowChart && (
|
||||||
|
<View style={styles.chartArea}>
|
||||||
|
|
||||||
{chartHeight && chartLoaded && (
|
{chartHeight && chartLoaded && (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
@@ -124,11 +134,14 @@ export default class CycleChart extends Component {
|
|||||||
height={this.columnHeight}
|
height={this.columnHeight}
|
||||||
symptomsToDisplay={this.symptomRowSymptoms}
|
symptomsToDisplay={this.symptomRowSymptoms}
|
||||||
symptomsSectionHeight={this.symptomRowHeight}
|
symptomsSectionHeight={this.symptomRowHeight}
|
||||||
|
shouldShowTemperatureColumn=
|
||||||
|
{this.shouldShowTemperatureColumn}
|
||||||
|
xAxisHeight={this.xAxisHeight}
|
||||||
/>
|
/>
|
||||||
<HorizontalGrid
|
{this.shouldShowTemperatureColumn && (<HorizontalGrid
|
||||||
height={this.columnHeight}
|
height={this.columnHeight}
|
||||||
startPosition={this.symptomRowHeight}
|
startPosition={this.symptomRowHeight}
|
||||||
/>
|
/>)}
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@@ -140,15 +153,25 @@ export default class CycleChart extends Component {
|
|||||||
data={this.state.columns}
|
data={this.state.columns}
|
||||||
renderItem={this.renderColumn}
|
renderItem={this.renderColumn}
|
||||||
keyExtractor={item => item}
|
keyExtractor={item => item}
|
||||||
initialNumToRender={15}
|
initialNumToRender={numberOfColumnsToRender}
|
||||||
windowSize={30}
|
windowSize={30}
|
||||||
onLayout={() => this.setState({chartLoaded: true})}
|
onLayout={() => this.setState({chartLoaded: true})}
|
||||||
onEndReached={() => this.setState({end: true})}
|
onEndReached={() => this.setState({end: true})}
|
||||||
ListFooterComponent={<LoadingMoreView end={this.state.end}/>}
|
ListFooterComponent={<LoadingMoreView end={this.state.end}/>}
|
||||||
updateCellsBatchingPeriod={800}
|
updateCellsBatchingPeriod={800}
|
||||||
|
contentContainerStyle={{height: chartHeight}}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
</View>
|
</View>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
{shouldShowChart && chartLoaded && !this.shouldShowTemperatureColumn
|
||||||
|
&& (
|
||||||
|
<View style={styles.centerItem}>
|
||||||
|
<AppText style={{textAlign: 'center'}}>{shared.noTemperatureWarning}</AppText>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const CycleDayLabel = ({ height, date }) => {
|
|||||||
const boldDateLabel = isFirstDayOfMonth ? {fontWeight: 'bold'} : {}
|
const boldDateLabel = isFirstDayOfMonth ? {fontWeight: 'bold'} : {}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={{ height }}>
|
<View style={[styles.chartLegend, { height }]}>
|
||||||
<Text style={label.number}>
|
<Text style={label.number}>
|
||||||
{cycleDayNumber ? cycleDayNumber : ' '}
|
{cycleDayNumber ? cycleDayNumber : ' '}
|
||||||
</Text>
|
</Text>
|
||||||
|
|||||||
@@ -26,9 +26,10 @@ class DayColumn extends Component {
|
|||||||
getFhmAndLtlInfo: PropTypes.func.isRequired,
|
getFhmAndLtlInfo: PropTypes.func.isRequired,
|
||||||
navigate: PropTypes.func.isRequired,
|
navigate: PropTypes.func.isRequired,
|
||||||
setDate: PropTypes.func.isRequired,
|
setDate: PropTypes.func.isRequired,
|
||||||
|
shouldShowTemperatureColumn: PropTypes.bool,
|
||||||
symptomHeight: PropTypes.number.isRequired,
|
symptomHeight: PropTypes.number.isRequired,
|
||||||
symptomRowSymptoms: PropTypes.array,
|
symptomRowSymptoms: PropTypes.array,
|
||||||
xAxisHeight: PropTypes.number
|
xAxisHeight: PropTypes.number,
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -77,10 +78,13 @@ class DayColumn extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { dateString,
|
const { columnHeight,
|
||||||
|
dateString,
|
||||||
|
shouldShowTemperatureColumn,
|
||||||
|
symptomHeight,
|
||||||
symptomRowSymptoms,
|
symptomRowSymptoms,
|
||||||
columnHeight,
|
xAxisHeight
|
||||||
xAxisHeight } = this.props
|
} = this.props
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
@@ -98,17 +102,17 @@ class DayColumn extends Component {
|
|||||||
isSymptomDataComplete={
|
isSymptomDataComplete={
|
||||||
hasSymptomData && isSymptomDataComplete(symptom, dateString)
|
hasSymptomData && isSymptomDataComplete(symptom, dateString)
|
||||||
}
|
}
|
||||||
height={this.props.symptomHeight}
|
height={symptomHeight}
|
||||||
/>)
|
/>)
|
||||||
}
|
}
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<TemperatureColumn
|
{shouldShowTemperatureColumn && <TemperatureColumn
|
||||||
horizontalLinePosition={this.fhmAndLtl.drawLtlAt}
|
horizontalLinePosition={this.fhmAndLtl.drawLtlAt}
|
||||||
isVerticalLine={this.fhmAndLtl.drawFhmLine}
|
isVerticalLine={this.fhmAndLtl.drawFhmLine}
|
||||||
data={this.data && this.data.temperature}
|
data={this.data && this.data.temperature}
|
||||||
columnHeight={columnHeight}
|
columnHeight={columnHeight}
|
||||||
/>
|
/>}
|
||||||
|
|
||||||
<CycleDayLabel
|
<CycleDayLabel
|
||||||
height={xAxisHeight}
|
height={xAxisHeight}
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
import { View } from 'react-native'
|
||||||
|
|
||||||
|
import AppText from '../app-text'
|
||||||
|
import SettingsButton from '../settings/shared/settings-button'
|
||||||
|
|
||||||
|
import { shared } from '../../i18n/en/labels'
|
||||||
|
import styles from './styles'
|
||||||
|
|
||||||
|
const NoData = ({ navigate }) => {
|
||||||
|
return (
|
||||||
|
<View flex={1}>
|
||||||
|
<View style={styles.centerItem}>
|
||||||
|
<AppText>{shared.noDataWarning}</AppText>
|
||||||
|
<SettingsButton
|
||||||
|
onPress={() => {navigate('CycleDay')}}
|
||||||
|
style={{marginHorizontal: 40}}
|
||||||
|
>
|
||||||
|
{shared.noDataButtonText}
|
||||||
|
</SettingsButton>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
NoData.propTypes = {
|
||||||
|
navigate: PropTypes.func,
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NoData
|
||||||
@@ -25,9 +25,14 @@ const orangeColor = '#bc6642'
|
|||||||
const mintColor = '#6ca299'
|
const mintColor = '#6ca299'
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
container: {
|
container: { flex: 1 },
|
||||||
flexDirection: 'row',
|
chartContainer: { flexDirection: 'column' },
|
||||||
|
chartArea: { flexDirection: 'row' },
|
||||||
|
centerItem: {
|
||||||
flex:1,
|
flex:1,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
marginHorizontal: 25,
|
||||||
},
|
},
|
||||||
curve: {
|
curve: {
|
||||||
stroke: colorTemperature,
|
stroke: colorTemperature,
|
||||||
@@ -137,7 +142,7 @@ const styles = {
|
|||||||
},
|
},
|
||||||
chartLegend: {
|
chartLegend: {
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
justifyContent: 'center',
|
justifyContent: 'flex-end',
|
||||||
},
|
},
|
||||||
boldTick: {
|
boldTick: {
|
||||||
fontWeight: 'bold',
|
fontWeight: 'bold',
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types'
|
|||||||
import { View } from 'react-native'
|
import { View } from 'react-native'
|
||||||
|
|
||||||
import styles from './styles'
|
import styles from './styles'
|
||||||
|
import config from '../../config'
|
||||||
|
|
||||||
const SymptomCell = ({
|
const SymptomCell = ({
|
||||||
height,
|
height,
|
||||||
@@ -12,7 +13,7 @@ const SymptomCell = ({
|
|||||||
}) => {
|
}) => {
|
||||||
|
|
||||||
const shouldDrawDot = symptomValue !== false
|
const shouldDrawDot = symptomValue !== false
|
||||||
const styleParent = [styles.symptomRow, { height }]
|
const styleParent = [styles.symptomRow, { height, width: config.columnWidth }]
|
||||||
let styleChild
|
let styleChild
|
||||||
|
|
||||||
if (shouldDrawDot) {
|
if (shouldDrawDot) {
|
||||||
|
|||||||
@@ -8,8 +8,15 @@ import ChartLegend from './chart-legend'
|
|||||||
|
|
||||||
import styles from './styles'
|
import styles from './styles'
|
||||||
|
|
||||||
const YAxis = ({ height, symptomsToDisplay, symptomsSectionHeight }) => {
|
const YAxis = ({
|
||||||
|
height,
|
||||||
|
symptomsToDisplay,
|
||||||
|
symptomsSectionHeight,
|
||||||
|
shouldShowTemperatureColumn,
|
||||||
|
xAxisHeight
|
||||||
|
}) => {
|
||||||
const symptomIconHeight = symptomsSectionHeight / symptomsToDisplay.length
|
const symptomIconHeight = symptomsSectionHeight / symptomsToDisplay.length
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View>
|
<View>
|
||||||
<View style={[styles.yAxis, {height: symptomsSectionHeight}]}>
|
<View style={[styles.yAxis, {height: symptomsSectionHeight}]}>
|
||||||
@@ -22,8 +29,8 @@ const YAxis = ({ height, symptomsToDisplay, symptomsSectionHeight }) => {
|
|||||||
)
|
)
|
||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
<TickList height={height} />
|
{shouldShowTemperatureColumn && <TickList height={height} />}
|
||||||
<ChartLegend />
|
<ChartLegend xAxisHeight={xAxisHeight} />
|
||||||
</View>
|
</View>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -32,6 +39,8 @@ YAxis.propTypes = {
|
|||||||
height: PropTypes.number,
|
height: PropTypes.number,
|
||||||
symptomsToDisplay: PropTypes.array,
|
symptomsToDisplay: PropTypes.array,
|
||||||
symptomsSectionHeight: PropTypes.number,
|
symptomsSectionHeight: PropTypes.number,
|
||||||
|
shouldShowTemperatureColumn: PropTypes.bool,
|
||||||
|
xAxisHeight: PropTypes.number.isRequired
|
||||||
}
|
}
|
||||||
|
|
||||||
export default YAxis
|
export default YAxis
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
const config = {
|
const config = {
|
||||||
columnWidth: 25,
|
columnWidth: 25,
|
||||||
xAxisHeightPercentage: 0.08,
|
xAxisHeightPercentage: 0.08,
|
||||||
|
xAxisHeightPercentageLarge: 0.12,
|
||||||
symptomHeightPercentage: 0.05,
|
symptomHeightPercentage: 0.05,
|
||||||
|
symptomHeightPercentageLarge: 0.1,
|
||||||
temperatureScale: {
|
temperatureScale: {
|
||||||
defaultLow: 35,
|
defaultLow: 35,
|
||||||
defaultHigh: 38,
|
defaultHigh: 38,
|
||||||
@@ -9,7 +11,17 @@ const config = {
|
|||||||
max: 40,
|
max: 40,
|
||||||
units: 0.1,
|
units: 0.1,
|
||||||
verticalPadding: 0.03
|
verticalPadding: 0.03
|
||||||
}
|
},
|
||||||
|
symptoms: [
|
||||||
|
'bleeding',
|
||||||
|
'mucus',
|
||||||
|
'cervix',
|
||||||
|
'sex',
|
||||||
|
'desire',
|
||||||
|
'pain',
|
||||||
|
'mood',
|
||||||
|
'note'
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
config.columnMiddle = config.columnWidth / 2
|
config.columnMiddle = config.columnWidth / 2
|
||||||
|
|||||||
+4
-1
@@ -15,7 +15,10 @@ export const shared = {
|
|||||||
date: 'Date',
|
date: 'Date',
|
||||||
cycleDayWithLinebreak: 'Cycle\nday',
|
cycleDayWithLinebreak: 'Cycle\nday',
|
||||||
loading: 'Loading ...',
|
loading: 'Loading ...',
|
||||||
enter: 'Enter'
|
noDataWarning: 'You haven\'t entered any data yet.',
|
||||||
|
noTemperatureWarning: 'You haven\'t entered any temperature data yet.',
|
||||||
|
noDataButtonText: 'Start entering data now',
|
||||||
|
enter: 'Enter',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const headerTitles = {
|
export const headerTitles = {
|
||||||
|
|||||||
Reference in New Issue
Block a user