From b3e2ce0ea743fb6d6ce3e9b32f3f43c0ec862179 Mon Sep 17 00:00:00 2001 From: Julia Friesel <julia.friesel@gmail.com> Date: Fri, 10 Aug 2018 15:26:41 +0200 Subject: [PATCH] Fix bug: Don't produce closure for every item --- components/chart/chart.js | 2 ++ components/chart/day-column.js | 7 +++---- components/chart/nfp-lines.js | 36 +++++++++++++++++----------------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/components/chart/chart.js b/components/chart/chart.js index 6e7da685..8a91920e 100644 --- a/components/chart/chart.js +++ b/components/chart/chart.js @@ -67,6 +67,8 @@ export default class CycleChart extends Component { data={this.state.columns} renderItem={this.renderColumn} keyExtractor={item => item.dateString} + initialNumToRender={15} + maxToRenderPerBatch={5} > </FlatList> </View> diff --git a/components/chart/day-column.js b/components/chart/day-column.js index a24899af..bb6e834b 100644 --- a/components/chart/day-column.js +++ b/components/chart/day-column.js @@ -17,12 +17,12 @@ import slowlog from 'react-native-slowlog' const getCycleDayNumber = cycleModule().getCycleDayNumber const label = styles.column.label +const getFhmAndLtlInfo = setUpFertilityStatusFunc() export default class DayColumn extends Component { constructor(props) { super(props) - this.getFhmAndLtlInfo = setUpFertilityStatusFunc() - // slowlog(this, /.*/) + slowlog(this, /.*/) } makeDayColumn(data, index) { const { @@ -35,8 +35,7 @@ export default class DayColumn extends Component { } = data const cycleDayNumber = getCycleDayNumber(dateString) const dateLabel = dateString.split('-').slice(1).join('-') - // const nfpLineInfo = this.getFhmAndLtlInfo(dateString, temperature) - const nfpLineInfo = {} + const nfpLineInfo = getFhmAndLtlInfo(dateString, temperature) return ( <G onPress={() => this.passDateToDayView(dateString)}> diff --git a/components/chart/nfp-lines.js b/components/chart/nfp-lines.js index a58abc06..e5265acd 100644 --- a/components/chart/nfp-lines.js +++ b/components/chart/nfp-lines.js @@ -2,26 +2,26 @@ import { getCycleStatusForDay } from '../../lib/sympto-adapter' import { normalizeToScale } from './y-axis' export default function () { - let cycleStatus - let cycleStartDate - let noMoreCycles = false + const cycle = { + status: null + } function updateCurrentCycle(dateString) { - cycleStatus = getCycleStatusForDay(dateString) - if(!cycleStatus) { - noMoreCycles = true + cycle.status = getCycleStatusForDay(dateString) + if(!cycle.status) { + cycle.noMoreCycles = true return } - if (cycleStatus.phases.preOvulatory) { - cycleStartDate = cycleStatus.phases.preOvulatory.start.date + if (cycle.status.phases.preOvulatory) { + cycle.startDate = cycle.status.phases.preOvulatory.start.date } else { - cycleStartDate = cycleStatus.phases.periOvulatory.start.date + cycle.startDate = cycle.status.phases.periOvulatory.start.date } } function dateIsInPeriOrPostPhase(dateString) { return ( - dateString >= cycleStatus.phases.periOvulatory.start.date + dateString >= cycle.status.phases.periOvulatory.start.date ) } @@ -29,15 +29,15 @@ export default function () { return ( // we are only interested in days that have a preceding // temp - Object.keys(cycleStatus.phases).some(phaseName => { - return cycleStatus.phases[phaseName].cycleDays.some(day => { + Object.keys(cycle.status.phases).some(phaseName => { + return cycle.status.phases[phaseName].cycleDays.some(day => { return day.temperature && day.date < dateString }) }) // and also a following temp, so we don't draw the line // longer than necessary && - cycleStatus.phases.postOvulatory.cycleDays.some(day => { + cycle.status.phases.postOvulatory.cycleDays.some(day => { return day.temperature && day.date > dateString }) ) @@ -51,13 +51,13 @@ export default function () { return function(dateString, temperature) { const ret = {} - if (!cycleStatus && !noMoreCycles) updateCurrentCycle(dateString) - if (noMoreCycles) return ret + if (!cycle.status && !cycle.noMoreCycles) updateCurrentCycle(dateString) + if (cycle.noMoreCycles) return ret - if (dateString < cycleStartDate) updateCurrentCycle(dateString) - if (noMoreCycles) return ret + if (dateString < cycle.startDate) updateCurrentCycle(dateString) + if (cycle.noMoreCycles) return ret - const tempShift = cycleStatus.temperatureShift + const tempShift = cycle.status.temperatureShift if (tempShift) { if (tempShift.firstHighMeasurementDay.date === dateString) { -- GitLab