Skip to content

Commit cd4337d

Browse files
committed
Add more datasets
1 parent 1774ece commit cd4337d

1 file changed

Lines changed: 75 additions & 12 deletions

File tree

example/src/App.tsx

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useMemo, useState } from 'react';
2-
import { View, StyleSheet, TouchableOpacity, Text } from 'react-native';
2+
import { View, StyleSheet, TouchableOpacity, Text, Switch } from 'react-native';
33
import Chart, { ChartProps, Dataset } from 'react-native-d3-chart';
44

55
type TimeDomainType = 'hour' | 'day' | 'week' | 'month';
@@ -42,37 +42,54 @@ const generateDataPoints = ({
4242
return points;
4343
};
4444

45-
const datasets: Dataset[] = [
46-
{
47-
unit: 'kg',
45+
enum Measurement {
46+
Red = 'Red',
47+
Blue = 'Blue',
48+
Green = 'Green',
49+
Pink = 'Pink',
50+
}
51+
const measurementKeys = Object.values(Measurement);
52+
const measurementsRecords: Record<Measurement, Dataset> = {
53+
[Measurement.Red]: {
54+
unit: '°C',
4855
points: generateDataPoints(),
4956
decimals: 0,
5057
color: '#e66',
51-
measurementName: 'Red',
58+
measurementName: Measurement.Red,
5259
},
53-
{
54-
unit: 'cm',
60+
[Measurement.Blue]: {
61+
unit: 'l',
5562
points: generateDataPoints({
5663
startingValue: 160,
5764
minimum: 50,
5865
radomFactor: 6,
5966
}),
6067
decimals: 0,
6168
color: '#66e',
62-
measurementName: 'Blue',
69+
measurementName: Measurement.Blue,
6370
},
64-
{
71+
[Measurement.Green]: {
6572
unit: 'kg',
6673
points: generateDataPoints(),
6774
decimals: 0,
6875
color: '#6e6',
69-
measurementName: 'Green',
76+
measurementName: Measurement.Green,
77+
},
78+
[Measurement.Pink]: {
79+
unit: 'm/s',
80+
points: generateDataPoints({
81+
startingValue: 20,
82+
minimum: 100,
83+
}),
84+
decimals: 1,
85+
color: '#e0e',
86+
measurementName: Measurement.Pink,
7087
},
71-
];
88+
};
7289

7390
export default function App() {
7491
const [width, setWidth] = useState<number>(0);
75-
const height = width * 0.8;
92+
const height = width * 1.1;
7693
const [timeDomainType, setTimeDomainType] = useState<TimeDomainType>('hour');
7794
const timeDomain = useMemo(() => {
7895
const now = new Date().valueOf();
@@ -95,6 +112,15 @@ export default function App() {
95112
return { start, end, type: timeDomainType };
96113
}, [timeDomainType]);
97114

115+
const [enabledMeasurements, setEnabledMeasurements] = useState<Measurement[]>(
116+
[Measurement.Red]
117+
);
118+
119+
const datasets = useMemo<Dataset[]>(
120+
() => enabledMeasurements.map((m) => measurementsRecords[m]),
121+
[enabledMeasurements]
122+
);
123+
98124
return (
99125
<View
100126
style={styles.holder}
@@ -125,6 +151,42 @@ export default function App() {
125151
</TouchableOpacity>
126152
))}
127153
</View>
154+
{/* Measurement toggles */}
155+
{measurementKeys.map((measurement) => (
156+
<View
157+
key={measurement}
158+
style={{
159+
flexDirection: 'row',
160+
alignItems: 'center',
161+
marginVertical: 10,
162+
}}
163+
>
164+
<Switch
165+
value={enabledMeasurements.includes(measurement)}
166+
onValueChange={() =>
167+
setEnabledMeasurements((prev) => {
168+
if (!prev.includes(measurement))
169+
// enable
170+
return prev.concat(measurement);
171+
172+
if (prev.length !== 1)
173+
// disable
174+
return prev.filter((m) => m !== measurement);
175+
176+
// only one measurement was enabled, switch to next one
177+
const currentIndex = measurementKeys.findIndex(
178+
(m) => m === measurement
179+
);
180+
const nextIndex = (currentIndex + 1) % measurementKeys.length;
181+
const nextMeasurement = measurementKeys[nextIndex]!;
182+
183+
return [nextMeasurement];
184+
})
185+
}
186+
/>
187+
<Text style={{ marginLeft: 10 }}>{measurement}</Text>
188+
</View>
189+
))}
128190
</View>
129191
);
130192
}
@@ -139,6 +201,7 @@ const styles = StyleSheet.create({
139201
},
140202
holder: {
141203
width: '100%',
204+
flex: 1,
142205
borderRadius: 10,
143206
paddingVertical: PADDING,
144207
backgroundColor: '#fff',

0 commit comments

Comments
 (0)