Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

React Native hGraph


NPM downloadsNPM versionLicenseFollow on Twitter

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

importHGraph,{hGraphConvert,calculateHealthScore}from'react-native-hgraph';
...
consttotalCholesterolValue=(1-0)*Math.random();constldlValue=(300-0)*Math.random();consthdlValue=(150-0)*Math.random();consttriglyceridesValue=(300-0)*Math.random();constbloodPressureSystolicValue=(230-50)*Math.random();constbloodPressureDiastolicValue=(140-35)*Math.random();constalcoholUseValue=(20-0)*Math.random();constnicotineUseValue=(20-0)*Math.random();constpainLevelValue=(10-0)*Math.random();constwaistCircumferenceValue=(200-0)*Math.random();constweightValue=(400-50)*Math.random();constexerciseValue=(60-0)*Math.random();constsleepValue=(18-0)*Math.random();consthappinessValue=(10-0)*Math.random();constglucoseValue=(160-0)*Math.random();constotherValue=(1-0)*Math.random();consthealthData=[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}),]consthealthScore=Math.floor(calculateHealthScore(healthData));
...
<HGraphwidth={200}height={200}score={98}margin={{top: 50,right: 100,bottom: 50,left: 100}}showAxisLabel={true}scoreFontSize={50}data={}/>

About

React native implementation of hGraph

Resources

Stars

7 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages