Skip to content

Commit 875d808

Browse files
committed
fix: y for x computation
1 parent b289ed6 commit 875d808

File tree

3 files changed

+5961
-26
lines changed

3 files changed

+5961
-26
lines changed

example/app/index.tsx

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,21 @@ import {
55
HoverGestureHandlerOnChangeEventPayload,
66
} from "@codeherence/react-native-graph";
77
import { LinearGradient, vec } from "@shopify/react-native-skia";
8-
import { useCallback, useEffect, useState } from "react";
9-
import { Button, StyleSheet, Text, View } from "react-native";
8+
import { useCallback, useMemo } from "react";
9+
import { StyleSheet, Text, View, useWindowDimensions } from "react-native";
1010
import { useAnimatedProps, useSharedValue } from "react-native-reanimated";
1111
import { useSafeAreaInsets } from "react-native-safe-area-context";
1212

1313
import AnimatedText from "../components/AnimatedText";
14-
15-
const generateRandomData = (): [number, number][] => {
16-
return Array.from({ length: 30 }, (_, i) => [i, Math.random() * 2000]);
17-
};
14+
import msft_prices from "../data/msft_prices.json";
1815

1916
const formatter = new Intl.NumberFormat("en-US", {
2017
style: "currency",
2118
currency: "USD",
2219
});
2320

2421
const AxisLabel: React.FC<AxisLabelComponentProps> = ({ value }) => (
25-
<Text>{formatter.format(value)}</Text>
22+
<Text selectable={false}>{formatter.format(value)}</Text>
2623
);
2724

2825
const uiFormatter = (price: number) => {
@@ -35,20 +32,18 @@ const uiFormatter = (price: number) => {
3532
};
3633

3734
export default () => {
35+
const { width } = useWindowDimensions();
3836
const { top, bottom } = useSafeAreaInsets();
39-
const [data, setData] = useState<[number, number][]>([]);
37+
const data: [number, number][] = useMemo(
38+
() =>
39+
msft_prices.results
40+
.reverse()
41+
.map<[number, number]>((r) => [new Date(r.date).getTime(), r.close]),
42+
[]
43+
);
4044

4145
const latestPrice = useSharedValue("0");
4246

43-
// Randomize the data
44-
const refreshData = useCallback(() => {
45-
const newData = generateRandomData();
46-
latestPrice.value = formatter.format(newData[newData.length - 1]![1]);
47-
setData(newData);
48-
}, []);
49-
50-
useEffect(refreshData, []);
51-
5247
const onHoverChangeWorklet = useCallback((evt: HoverGestureHandlerOnChangeEventPayload) => {
5348
"worklet";
5449
latestPrice.value = uiFormatter(evt.point);
@@ -70,11 +65,10 @@ export default () => {
7065

7166
return (
7267
<View style={[styles.container, { paddingTop: top, paddingBottom: bottom }]}>
73-
<Button title="Randomize data" onPress={refreshData} />
7468
<AnimatedText style={styles.price} animatedProps={animatedProps} />
7569
<LineChart
7670
points={data}
77-
style={styles.chart}
71+
style={[styles.chart, { width }]}
7872
TopAxisLabel={AxisLabel}
7973
BottomAxisLabel={AxisLabel}
8074
onPanGestureChange={onGestureChangeWorklet}
@@ -83,7 +77,11 @@ export default () => {
8377
onHoverGestureChange={onHoverChangeWorklet}
8478
strokeWidth={2}
8579
PathFill={({ width }) => (
86-
<LinearGradient start={vec(0, 0)} end={vec(width, 0)} colors={["blue", "yellow"]} />
80+
<LinearGradient
81+
start={vec(0, 0)}
82+
end={vec(width, 0)}
83+
colors={["blue", "red", "purple"]}
84+
/>
8785
)}
8886
/>
8987
</View>
@@ -92,6 +90,6 @@ export default () => {
9290

9391
const styles = StyleSheet.create({
9492
container: { flex: 1 },
95-
chart: { flex: 1 },
93+
chart: { flex: 1, maxHeight: 400 },
9694
price: { fontSize: 32 },
9795
});

0 commit comments

Comments
 (0)