0.5.0 • Published 4 years ago

react-native-hgraph v0.5.0

Weekly downloads
2
License
GPL-3.0
Repository
github
Last release
4 years ago

Introduction

This is a React Native native implementation of the hGraph library. hGraph is a visual representation of a patient's health status, designed to increase awareness of the individual's factors that can affect one's overall health.

react-native-hgraph

Getting started

$ npm install react-native-hgraph --save

$ react-native link react-native-hgraph

You will still need to manually add the SVG package manually. Please follow the steps below.

iOS Manual Installation

Follow the steps bellow:

  1. Add RNSVG.xcodeproj from \<React Native Project>/node_modules/react-native-svg/iOS/ to your project

  2. Link the libRNSVG.a library in the Linked Frameworks and Libraries in your Target -> General -> Linked Frameworks and Libraries

Android Manual Installation

Follow the steps bellow:

  1. Import the react-native-hgraph module: Add the following lines to your settings.gradle file:
include ':react-native-svg'  
project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android')  
include ':react-native-hgraph'  
project(':react-native-hgraph').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-hgraph/android')
  1. Add the compile line in your app gradle file:
implementation project(':react-native-svg')  
implementation project(':react-native-hgraph')
  1. Import RNReactNativeHgraphPackage and SvgPackage in the MainApplication.java file:
import io.citizenhealth.RNReactNativeHgraphPackage;  
import com.horcrux.svg.SvgPackage;

and add the new SvgPackage() and new RNReactNativeHgraphPackage() in your getPackages() function in MainApplication.java

protected List<ReactPackage> getPackages() {  
  return Arrays.<ReactPackage>asList(  
      new MainReactPackage(),  
       new SvgPackage(),  
       new RNReactNativeHgraphPackage()  
  );  
}

Common props:

Prop NameTypeIs RequiredDescriptionDefault
dataarraytrueAn array of objects representing the metrics to display in hGraph (see below)N/A
scorenumberfalseThe overall score to display in the center of hGraphN/A
widthnumberfalseThe width in pixels hGraph should render at.600
heightnumberfalseThe height in pixels hGraph should render at.600
marginobjectfalseAn object representing the values for margins around hGraph.{ top: 70, right: 100, bottom: 70, left: 100 }
thresholdMinnumberfalseA number value between 0 and 1 (percentage), determining the position the lower threshold of the healthy range renders at..25
thresholdMaxnumberfalseA number value between 0 and 1 (percentage), determining the position the upper threshold of the healthy range renders at..75
donutHoleFactornumberfalseA number value between 0 and 1 (percentage), determining the amount of hGraph's radius that should be cut out forming the hole in the center of the graph..4
pathColorstring (hex color code)falseThe color of the polygon shape."#d2d2d2"
colorstring (hex color code)falseThe color of the points and polygon shape.'#616363'
healthyRangeFillColorstring (hex color code)falseThe color of the healthy range band.'#98bd8e'
fontSizenumberfalseThe size (in pixels) of the font for the labels.16
fontColorstring (hex color code)falseThe color of the labels.'#000'
showAxisLabelbooleanfalseWhether or not axis labels should display around hGraph.true
axisLabelWrapWidthnumberfalseThe width (in pixels) that the labels should wrap text at.80 (Note: use null for no wrapping)
axisLabelOffsetnumberfalseThe distance (in pixels) that axis labels should be offset from the outer bounds of hGraph's 'absolute max' radius.12
areaOpacitynumberfalseThe opacity of the polygon shape.0.25
pointRadiusnumberfalseThe radius (in pixels) of the points for metric values.10
pointLabelWrapWidthnumberfalseThe width (in pixels) that the point labels should wrap text at.null (no wrapping)
pointLabelOffsetnumberfalseThe distance (in pixels) that point labels should be offset from the point.8
hitboxRadiusnumberfalseThe radius (in pixels) of the point hitboxes. (hGraph overlays a transparent hitbox over each point which can help users accurately click/touch points, particularly on mobile devices.)Defaults to props.pointRadius size.
showScorebooleanfalseWhether or not to display the overall score in the middle of hGraph.true
scoreFontSizenumberfalseThe size (in pixels) of the font for the overall hGraph score120
scoreFontColorstring (hex color code)falseThe color of the hGraph score.'#000'
zoomFactornumberfalseThe multiplier factor hGraph should zoom in.2.25
zoomTransitionTimenumberfalseThe amount of time (in milliseconds) the zooming animation should take.750
zoomOnPointClickbooleanfalseConfigure if hGraph should zoom in/focus on a clicked point and display child points in the graph.true
onPointClickfunctionfalseCallback function called when a point is clicked. Function is passed 2 arguments: the data object corresponding to the point clicked, and the event.N/A
NameDefaultTypeDescription
--------------------------------------------------------

Usage

import  HGraph, {
	hGraphConvert,
	calculateHealthScore
} from  'react-native-hgraph';
...
const  totalCholesterolValue  = (1-0)*Math.random();
const  ldlValue  = (300-0)*Math.random();
const  hdlValue  = (150-0)*Math.random();
const  triglyceridesValue  = (300-0)*Math.random();
const  bloodPressureSystolicValue  = (230-50)*Math.random();
const  bloodPressureDiastolicValue  = (140-35)*Math.random();
const  alcoholUseValue  = (20-0)*Math.random();
const  nicotineUseValue  = (20-0)*Math.random();
const  painLevelValue  = (10-0)*Math.random();
const  waistCircumferenceValue  = (200-0)*Math.random();
const  weightValue  = (400-50)*Math.random();
const  exerciseValue  = (60-0)*Math.random();
const  sleepValue  = (18-0)*Math.random();
const  happinessValue  = (10-0)*Math.random();
const  glucoseValue  = (160-0)*Math.random();
const  otherValue  = (1-0)*Math.random();
const  healthData  = [
hGraphConvert('male', 'totalCholesterol',
{
	id :  'totalCholesterol',
	"value" :  totalCholesterolValue
}),
hGraphConvert('male', 'ldl',
{
	id :  'ldl',
	"value" :  ldlValue
}),
hGraphConvert('male', 'hdl',
{
	id :  'hdl',
	"value" :  hdlValue
}),
hGraphConvert('male', 'triglycerides',
{
	id :  'triglycerides',
	"value" :  triglyceridesValue
}),
hGraphConvert('male', 'bloodPressureSystolic',
{
	id :  'bloodPressureSystolic',
	"value" :  bloodPressureSystolicValue
}),
hGraphConvert('male', 'bloodPressureDiastolic',
{
	id :  'bloodPressureDiastolic',
	"value" :  bloodPressureDiastolicValue
}),
hGraphConvert('male', 'alcoholUse',
{
	id :  'alcoholUse',
	"value" :  alcoholUseValue
}),
hGraphConvert('male', 'nicotineUse',
{
	id :  'nicotineUse',
	"value" :  nicotineUseValue
}),
hGraphConvert('male', 'painLevel',
{
	id :  'painLevel',
	"value" :  painLevelValue
}),
hGraphConvert('male', 'waistCircumference',
{
	id :  'waistCircumference',
	"value" :  waistCircumferenceValue
}),
hGraphConvert('male', 'weight',
{
	id :  'weight',
	"value" :  weightValue
}),
hGraphConvert('male', 'exercise',
{
	id :  'exercise',
	"value" :  exerciseValue
}),
hGraphConvert('male', 'sleep',
{
	id :  'sleep',
	"value" :  sleepValue
}),
hGraphConvert('male', 'happiness',
{
	id :  'happiness',
	"value" :  happinessValue
}),
hGraphConvert('male', 'glucose',
{
	id :  'glucose',
	"value" :  glucoseValue
}),
hGraphConvert('male', 'other',
{
	id :  'other',
	"value" :  otherValue
}),
]
const  healthScore  =  Math.floor(calculateHealthScore(healthData));
...
<HGraph
	width= {200}
	height= {200}
	score={98}
	margin={
		{top:  50,
		right:  100,
		bottom:  50,
		left:  100}}
	showAxisLabel={true}
	scoreFontSize= {50}
	data= {}
/>