From 6d67f4f0f48f800fbab069f0b21ca92e84e6b4a0 Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Tue, 6 Sep 2022 18:36:57 +0200 Subject: [PATCH] feat: implement indicator --- example/src/screens/GraphPage.tsx | 47 +++++- package.json | 12 +- src/AnimatedLineGraph.tsx | 269 ++++++++++++++++++++++++++---- src/CreateGraphPath.ts | 233 ++++++++++++++++++++------ src/LineGraphProps.ts | 28 ++++ src/Maths.ts | 23 +++ src/SelectionDot.tsx | 7 +- src/StaticLineGraph.tsx | 19 ++- src/hooks/useHoldOrPanGesture.ts | 77 --------- src/hooks/usePanGesture.ts | 47 ++++++ src/utils/hexToRgba.ts | 11 ++ yarn.lock | 28 ++-- 12 files changed, 615 insertions(+), 186 deletions(-) create mode 100644 src/Maths.ts delete mode 100644 src/hooks/useHoldOrPanGesture.ts create mode 100644 src/hooks/usePanGesture.ts create mode 100644 src/utils/hexToRgba.ts diff --git a/example/src/screens/GraphPage.tsx b/example/src/screens/GraphPage.tsx index 5ff5bb9..51e0b4c 100644 --- a/example/src/screens/GraphPage.tsx +++ b/example/src/screens/GraphPage.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useState } from 'react' +import React, { useCallback, useMemo, useState } from 'react' import { View, StyleSheet, Text, Button } from 'react-native' import { LineGraph } from 'react-native-graph' import StaticSafeAreaInsets from 'react-native-static-safe-area-insets' @@ -19,6 +19,11 @@ export function GraphPage() { const [isAnimated, setIsAnimated] = useState(true) const [enablePanGesture, setEnablePanGesture] = useState(true) const [enableFadeInEffect, setEnableFadeInEffect] = useState(false) + const [enableCustomSelectionDot, setEnableCustomSelectionDot] = + useState(false) + const [enableRange, setEnableRange] = useState(false) + const [enableIndicator, setEnableIndicator] = useState(false) + const [indicatorPulsating, setIndicatorPulsating] = useState(false) const [points, setPoints] = useState(() => generateRandomGraphData(POINTS)) const smallPoints = generateSinusGraphData(9) @@ -28,6 +33,8 @@ export function GraphPage() { hapticFeedback('impactLight') }, []) + const highestDate = useMemo(() => points[POINTS - 1]!.date, []) + return ( @@ -52,7 +59,23 @@ export function GraphPage() { enablePanGesture={enablePanGesture} enableFadeInMask={enableFadeInEffect} onGestureStart={() => hapticFeedback('impactLight')} - SelectionDot={SelectionDot} + SelectionDot={enableCustomSelectionDot ? SelectionDot : undefined} + range={ + enableRange + ? { + x: { + min: points[0]!.date, + max: new Date(highestDate.getTime() + 30), + }, + y: { + min: -200, + max: 200, + }, + } + : undefined + } + enableIndicator={enableIndicator} + indicatorPulsating={indicatorPulsating} />