diff --git a/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte b/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte index 4d0297c5..a0733a4e 100644 --- a/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte +++ b/src/routes/stocks/[tickerID]/stats/balance-sheet/+page.svelte @@ -6,9 +6,9 @@ import { abbreviateNumber,sumQuarterlyResultsByYear } from '$lib/utils'; import { init, use } from 'echarts/core' import { LineChart, BarChart } from 'echarts/charts' -import { GridComponent } from 'echarts/components' +import { GridComponent, TooltipComponent } from 'echarts/components' import { CanvasRenderer } from 'echarts/renderers' -use([LineChart, BarChart, GridComponent, CanvasRenderer]) +use([LineChart, BarChart, GridComponent, TooltipComponent, CanvasRenderer]) export let data; @@ -16,7 +16,8 @@ use([LineChart, BarChart, GridComponent, CanvasRenderer]) let balanceSheet = []; - let fullStatement = [] + let fullStatement = []; + let tableList = []; let filterRule = 'annual'; let optionsData; @@ -24,7 +25,7 @@ use([LineChart, BarChart, GridComponent, CanvasRenderer]) let displayStatement = 'cashAndCashEquivalents'; - let mode = false; + let mode = true; let timeFrame = '10Y'; @@ -234,7 +235,7 @@ function normalizer(value) { let labelName = '-'; let xList = []; let valueList = []; - let growthList = []; + tableList = []; const index = statementConfig?.findIndex((item) => item?.propertyName === displayStatement); @@ -242,15 +243,28 @@ function normalizer(value) { const statement = balanceSheet[i]; const year = statement?.calendarYear?.slice(-2); const quarter = statement?.period; + + // Determine the label based on filterRule if (filterRule === 'annual') { - xList?.push('FY'+year); + xList.push('FY' + year); } else { - xList?.push('FY'+year+' '+quarter); + xList.push('FY' + year + ' ' + quarter); } - - valueList?.push((Number(statement[statementConfig[index]?.propertyName]))?.toFixed(2)); - growthList?.push((Number(statement[statementConfig[index]?.growthPropertyName]) * 100)?.toFixed(2)); + + // Calculate the value and growth + const value = (Number(statement[statementConfig[index]?.propertyName]))?.toFixed(2); + + valueList.push(value); + + // Add the entry to tableList + tableList.push({ + 'date': statement?.date, + 'value': value, + }); } + + //sort tableList by date + tableList?.sort((a, b) => new Date(b?.date) - new Date(a?.date)); labelName =statementConfig[index]?.label; @@ -259,66 +273,55 @@ function normalizer(value) { const options = { - xAxis: { - data: xList, - type: 'category', + animation: false, + grid: { + left: '0%', + right: '0%', + bottom: '2%', + top: '10%', + containLabel: true + }, + xAxis: { + axisLabel: { + color: '#fff', + }, + data: xList, + type: 'category', + }, + yAxis: [ + { + type: 'value', + splitLine: { + show: false, // Disable x-axis grid lines }, - yAxis: [ - { - type: 'value', - splitLine: { - show: false, // Disable x-axis grid lines - }, - axisLabel: { - color: '#6E7079', // Change label color to white - formatter: function (value) { - value = Math.max(value, 0); - return '$'+(value / denominator)?.toFixed(1) + unit; // Format value in millions - }, - }, - }, - { - type: 'value', - splitLine: { - show: false, // Disable x-axis grid lines + axisLabel: { + color: '#fff', // Change label color to white + formatter: function (value) { + value = Math.max(value, 0); + return '$'+(value / denominator)?.toFixed(1) + unit; // Format value in millions }, }, - { - type: 'value', - axisLabel: { - formatter: '{value} %', - }, - splitLine: { - show: false, // Disable x-axis grid lines - }, + }, + { + type: 'value', + splitLine: { + show: false, // Disable x-axis grid lines }, - ], - series: [ - { - name: labelName, - data: valueList, - type: 'line', - smooth: true, - }, - { - name: 'Growth Rate [%]', - data: growthList, - type: 'bar', - smooth: true, - yAxisIndex: 1, - itemStyle: { - color: (params) => { - // Set color based on positive or negative value - return params.data >= 0 ? '#10DB06' : '#FF2F1F'; - }, - }, - }, - ], - tooltip: { - trigger: 'axis', - hideDelay: 100, // Set the delay in milliseconds - }, - }; + }, + ], + series: [ + { + name: labelName, + data: valueList, + type: 'bar', + smooth: true, + }, + ], + tooltip: { + trigger: 'axis', + hideDelay: 100, + }, + }; return options; } @@ -564,10 +567,69 @@ $: { -
| {filterRule === 'annual' ? 'Fiscal Year End' : 'Quarter Ends'} | +{statementConfig?.find((item) => item?.propertyName === displayStatement)?.label} | +Change | +Growth | +
|---|---|---|---|
| + {item?.date} + | + ++ {abbreviateNumber(item?.value)} + | + ++ {item?.value-tableList[index+1]?.value !== 0 ? abbreviateNumber((item?.value-tableList[index+1]?.value)?.toFixed(2)) : '-'} + | + ++ {#if index+1-tableList?.length === 0} + - + {:else} + {#if (item?.value- tableList[index+1]?.value) > 0} + + +{(((item?.value-tableList[index+1]?.value) / item?.value) * 100 )?.toFixed(2)}% + + {:else if (item?.value - tableList[index+1]?.value ) < 0} + + -{(((tableList[index+1]?.value - item?.value) / item?.value) * 100 )?.toFixed(2)}% + + {:else} + - + {/if} + {/if} + | + +