@@ -3,6 +3,10 @@ import { View, StyleSheet, TouchableOpacity, Text, Switch } from 'react-native'
33
44import Chart , { ChartProps , Dataset } from 'react-native-d3-chart'
55
6+ import { buildSlices } from './helpers/buildSlices'
7+ import { generateTimeSeriesData } from './helpers/generateTimeSeriesData'
8+ import { temperatureData , visits } from './mockData'
9+
610type TimeDomainType = 'hour' | 'day' | 'week' | 'month'
711
812const TIME_DOMAIN_TYPES : TimeDomainType [ ] = [ 'hour' , 'day' , 'week' , 'month' ]
@@ -16,53 +20,22 @@ const chartColors: ChartProps['colors'] = {
1620 highlightTime : '#444' ,
1721}
1822
19- // Generate data points every minute from a month ago to now
20- const generateDataPoints = ( {
21- startingValue = 400 ,
22- minimum = 0 ,
23- maximum = 3000 ,
24- radomFactor = 20 ,
25- } = { } ) => {
26- const points = [ ]
27- const now = Date . now ( )
28- const monthAgo = now - 30 * 24 * 60 * 60 * 1000 // 30 days ago
29- let value = startingValue
30-
31- for ( let timestamp = monthAgo ; timestamp <= now ; timestamp += 60 * 1000 ) {
32- const randomVariation = ( Math . random ( ) - 0.5 ) * radomFactor
33- value += randomVariation
34-
35- // either randomVariation was negative and value went below minimum
36- // or randomVariation was positive and value went above maximum
37- if ( value < minimum || value > maximum ) {
38- // invert direction to keep within bounds
39- value -= 2 * randomVariation
40- }
41-
42- points . push ( { timestamp, value } )
43- }
44-
45- return points
46- }
47-
4823enum Measurement {
4924 Temperature = 'Temperature' ,
5025 Blue = 'Blue' ,
5126 Green = 'Green' ,
5227 Pink = 'Pink' ,
28+ Visits = 'Visits' ,
29+ VisitRate = 'Visit Rate' ,
5330}
31+
5432const measurementKeys = Object . values ( Measurement )
5533const measurementsRecords : Record < Measurement , Dataset > = {
5634 [ Measurement . Temperature ] : {
5735 unit : '°C' ,
58- points : generateDataPoints ( {
59- maximum : 40 ,
60- minimum : - 10 ,
61- radomFactor : 1 ,
62- startingValue : - 8 ,
63- } ) ,
36+ points : temperatureData ,
6437 decimals : 0 ,
65- areaColor : '#83cba8 ' ,
38+ areaColor : '#c4deff ' ,
6639 color : {
6740 type : 'thresholds' ,
6841 baseColor : '#3d91ff' ,
@@ -79,7 +52,7 @@ const measurementsRecords: Record<Measurement, Dataset> = {
7952 } ,
8053 [ Measurement . Blue ] : {
8154 unit : 'l' ,
82- points : generateDataPoints ( {
55+ points : generateTimeSeriesData ( {
8356 startingValue : 160 ,
8457 minimum : 50 ,
8558 radomFactor : 6 ,
@@ -90,21 +63,50 @@ const measurementsRecords: Record<Measurement, Dataset> = {
9063 } ,
9164 [ Measurement . Green ] : {
9265 unit : 'kg' ,
93- points : generateDataPoints ( ) ,
66+ points : generateTimeSeriesData ( ) ,
9467 decimals : 0 ,
9568 color : '#6e6' ,
9669 measurementName : Measurement . Green ,
9770 } ,
9871 [ Measurement . Pink ] : {
9972 unit : 'm/s' ,
100- points : generateDataPoints ( {
73+ points : generateTimeSeriesData ( {
10174 startingValue : 20 ,
10275 minimum : 100 ,
10376 } ) ,
10477 decimals : 1 ,
10578 color : '#e0e' ,
10679 measurementName : Measurement . Pink ,
10780 } ,
81+
82+ [ Measurement . VisitRate ] : {
83+ unit : 'visits/h' ,
84+ points : visits . movingAveregeData ,
85+ slices : buildSlices ( 'horizontal' , {
86+ end : visits . latestTimestamp ,
87+ start : visits . oldestTimestamp ,
88+ yellowThreshold : visits . averageVisitRatePerHour ,
89+ redThreshold : visits . averageVisitRatePerHour * 1.1 ,
90+ } ) ,
91+ decimals : 0 ,
92+ color : '#000' ,
93+ areaColor : null ,
94+ measurementName : Measurement . VisitRate ,
95+ } ,
96+ [ Measurement . Visits ] : {
97+ unit : 'pulses' ,
98+ points : visits . culmulativeData ,
99+ decimals : 0 ,
100+ color : '#000' ,
101+ areaColor : null ,
102+ measurementName : 'Visits cumulative' ,
103+ slices : buildSlices ( 'axial' , {
104+ end : visits . latestTimestamp ,
105+ start : visits . oldestTimestamp ,
106+ yellowThreshold : visits . averageVisitRatePerHour ,
107+ redThreshold : visits . averageVisitRatePerHour * 1.1 ,
108+ } ) ,
109+ } ,
108110}
109111
110112export default function App ( ) {
0 commit comments