From e3d34ff110f067ca1bc443ffddd32e41f3f702bf Mon Sep 17 00:00:00 2001 From: ivanzavisic Date: Thu, 22 Aug 2024 14:31:04 +0200 Subject: [PATCH] feat: add shield graph --- packages/lib/index.ts | 1 + .../lib/src/age-graph/age-graph.wc.svelte | 4 +- packages/lib/src/shared/functions/helpers.ts | 48 ++++- .../src/shield-graph/shield-graph.wc.svelte | 194 ++++++++++++++++++ 4 files changed, 244 insertions(+), 3 deletions(-) create mode 100644 packages/lib/src/shield-graph/shield-graph.wc.svelte diff --git a/packages/lib/index.ts b/packages/lib/index.ts index 9c1696a..f7e83e2 100644 --- a/packages/lib/index.ts +++ b/packages/lib/index.ts @@ -19,4 +19,5 @@ export default () => { import('./src/endometrial/endometrial.wc.svelte'); import('./src/ovarian/ovarian.wc.svelte'); import('./src/age-graph/age-graph.wc.svelte'); + import('./src/shield-graph/shield-graph.wc.svelte'); }; diff --git a/packages/lib/src/age-graph/age-graph.wc.svelte b/packages/lib/src/age-graph/age-graph.wc.svelte index dc2918d..28b62c5 100644 --- a/packages/lib/src/age-graph/age-graph.wc.svelte +++ b/packages/lib/src/age-graph/age-graph.wc.svelte @@ -51,12 +51,12 @@

{glycanAge}

- +
- +
diff --git a/packages/lib/src/shared/functions/helpers.ts b/packages/lib/src/shared/functions/helpers.ts index 833167f..d879101 100644 --- a/packages/lib/src/shared/functions/helpers.ts +++ b/packages/lib/src/shared/functions/helpers.ts @@ -1,6 +1,5 @@ import {english, polish} from '../consts/languages.const'; - export function suffix(perc: number) { if (perc === 11 || perc === 12 || perc === 13) { return 'th'; @@ -42,4 +41,51 @@ export function getTranslation(language: string = 'english', key: string) { }; return translations[language][key]; +} + +export function scale(value: number, inMin: number, inMax: number, outMin: number, outMax: number) { + const result = (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin; + + if (result < outMin) { + return outMin; + } else if (result > outMax) { + return outMax; + } + return result; +} + +export function calculateSliderPosition(min: number, mid: number, max: number, result: number) { + if (result === mid) { + return 50; + } else if (result === min) { + return 9.5; + } else if (result === max) { + return 90.5; + } else if (result < min) { + return 5; + } else if (result > max) { + return 95; + } else if (result > min && result < mid) { + return scale(result, min, mid, 10, 50); + } else if (result > mid && result < max) { + return scale(result, mid, max, 50, 90); + } else { + return 0; + } +} + +export function getColorRedToBlue(min: number, mid: number, max: number, result: number) { + const position = calculateSliderPosition(min, mid, max, result); + + if (position < 23) { + return '#DF2120'; + } else if (position >= 23 && position <= 36) { + return '#F2800D'; + } else if (position > 36 && position < 64) { + return '#66CCAA'; + } else if (position >= 64 && position <= 77) { + return '#13A195'; + } else if (position > 77) { + return '#015566'; + } } \ No newline at end of file diff --git a/packages/lib/src/shield-graph/shield-graph.wc.svelte b/packages/lib/src/shield-graph/shield-graph.wc.svelte new file mode 100644 index 0000000..2b0c127 --- /dev/null +++ b/packages/lib/src/shield-graph/shield-graph.wc.svelte @@ -0,0 +1,194 @@ + + + + +{#if show} +
+
+
+
+
+
+
+
+
+ +
+

+ Your result +

+

+ {result} +

+ + + +
+ +
+ + + +
{min}
+
+ +
+ + + +
{mid}
+
+ +
+ + + +
{max}
+
+ +
+

This result ranks you in the

+
+ {percentile}{suffix(percentile)} percentile +
+

*

+
+
+

Having a

+
higher
+

percentile ranking is better for this index.

+
+
+{/if} + + \ No newline at end of file