From 9eb1544291a0021caadc30765012717df43d6d72 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Tue, 27 Aug 2024 21:08:35 +0200 Subject: [PATCH 01/34] ui fixes --- src/lib/components/SentimentAnalysis.svelte | 4 ++-- src/lib/components/ShareHolders.svelte | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/components/SentimentAnalysis.svelte b/src/lib/components/SentimentAnalysis.svelte index fe1c9705..54fcddd5 100644 --- a/src/lib/components/SentimentAnalysis.svelte +++ b/src/lib/components/SentimentAnalysis.svelte @@ -169,7 +169,7 @@ $: {
{#if data?.user?.tier === 'Pro'} - {item?.value} + {item?.value !== 0 ? item?.value : '-'} {:else if ['1M','1Y']?.includes(item?.label)} {item?.value} {:else} @@ -185,7 +185,7 @@ $: {
{/if}
- + {item?.label} diff --git a/src/lib/components/ShareHolders.svelte b/src/lib/components/ShareHolders.svelte index c0b7fe24..d6dca325 100644 --- a/src/lib/components/ShareHolders.svelte +++ b/src/lib/components/ShareHolders.svelte @@ -214,7 +214,7 @@ let charNumber = 30; - + {#if putCallRatio !== 0}

Options Activity

@@ -315,6 +315,7 @@ let charNumber = 30; + {/if} From fba070191a1c58aff2cbe5f81a0e5720c681a8cf Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Tue, 27 Aug 2024 21:27:07 +0200 Subject: [PATCH 02/34] ui fix for revenue segmentation --- src/lib/components/RevenueSegmentation.svelte | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/lib/components/RevenueSegmentation.svelte b/src/lib/components/RevenueSegmentation.svelte index a76c832c..44ef3f36 100644 --- a/src/lib/components/RevenueSegmentation.svelte +++ b/src/lib/components/RevenueSegmentation.svelte @@ -43,12 +43,12 @@ for (const category in values) { if (count >= 4) break; // Stop after the fifth element const value = values[category]; - if (value !== 0) { + if (value > 0) { nodes?.push({ - id: (category?.length > 35 ? category?.slice(0, 35) + "..." : category) + `- $${abbreviateNumber(value)}`, + id: (category?.length > 35 ? category?.slice(0, 35) + "..." : category) + ' · ' +`$${abbreviateNumber(value)}`, }); links?.push({ - source: (category?.length > 35 ? category?.slice(0, 35) + "..." : category) + `- $${abbreviateNumber(value)}`, + source: (category?.length > 35 ? category?.slice(0, 35) + "..." : category) + ' · ' +`$${abbreviateNumber(value)}`, target: "Revenue", value: value, }); @@ -169,15 +169,8 @@ } let showFullStats = false; - let charNumber = 40; +$: charNumber = $screenWidth < 640 ? 25 :40; - $: { - if ($screenWidth < 640) { - charNumber = 25; - } else { - charNumber = 40; - } - }
From 4fc771934019bc115c19616366e3559aa4072c6d Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Tue, 27 Aug 2024 22:26:08 +0200 Subject: [PATCH 03/34] ui fix of tickerinfo card --- src/lib/components/TickerInfoCard.svelte | 42 +++++++++++++----------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/lib/components/TickerInfoCard.svelte b/src/lib/components/TickerInfoCard.svelte index 0aa5e965..91f43d99 100644 --- a/src/lib/components/TickerInfoCard.svelte +++ b/src/lib/components/TickerInfoCard.svelte @@ -110,7 +110,7 @@ $: { -
+

Company Info

@@ -118,21 +118,22 @@ $: { - + - - - + + + - - - + + + + - - - + + + {#if $screenWidth > 640} - - - + + + {/if} - - - + + + - - - + + +
CEO {ceoName}CountryCountry {country}
Market Cap{abbreviateNumber(data?.getStockQuote?.marketCap,true)}Volume{abbreviateNumber(data?.getStockQuote?.volume)}{abbreviateNumber(data?.getStockQuote?.marketCap,true)}Volume{abbreviateNumber(data?.getStockQuote?.volume)}
Beta{beta}Avg. Volume{abbreviateNumber(data?.getStockQuote?.avgVolume)}{beta?.toFixed(2)}Avg. Volume{abbreviateNumber(data?.getStockQuote?.avgVolume)}
Open{data?.getStockQuote?.open}Previous Close{data?.getStockQuote?.previousClose}{data?.getStockQuote?.open?.toFixed(2)}Previous Close{data?.getStockQuote?.previousClose?.toFixed(2)}
Day's Range{data?.getStockQuote?.dayLow} - {data?.getStockQuote?.dayHigh}52-Week Range{data?.getStockQuote?.yearLow} - {data?.getStockQuote?.yearHigh}{data?.getStockQuote?.dayLow?.toFixed(2)} - {data?.getStockQuote?.dayHigh?.toFixed(2)}52-Week Range{data?.getStockQuote?.yearLow?.toFixed(2)} - {data?.getStockQuote?.yearHigh?.toFixed(2)}
EPS (ttm){data?.getStockQuote?.eps}PE Ratio (ttm){data?.getStockQuote?.pe}{data?.getStockQuote?.eps}PE Ratio (ttm){data?.getStockQuote?.pe}
Shares Out.{abbreviateNumber(data?.getStockQuote?.sharesOutstanding)}Forward PE{forwardPE === undefined ? '-' : forwardPE}{abbreviateNumber(data?.getStockQuote?.sharesOutstanding)}Forward PE{forwardPE === undefined ? '-' : forwardPE}
From e07b4cab2f3215497c5c8f375442915c383a15a2 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Tue, 27 Aug 2024 22:28:15 +0200 Subject: [PATCH 04/34] ui fix of tickerinfo card --- src/lib/components/TickerInfoCard.svelte | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lib/components/TickerInfoCard.svelte b/src/lib/components/TickerInfoCard.svelte index 91f43d99..887619ab 100644 --- a/src/lib/components/TickerInfoCard.svelte +++ b/src/lib/components/TickerInfoCard.svelte @@ -74,7 +74,7 @@ $: { website = info?.website; snippet= description?.slice(0, 150) + "..."; forwardPE = info?.forwardPE; - beta = info?.beta; + beta = info?.beta?.toFixed(2); } } @@ -115,59 +115,59 @@ $: {
- + - + - + - + - + {#if $screenWidth > 640} - + {/if} - + - + From 181d0bacd38bcff857b7cd7245ab7d90e4a60260 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 28 Aug 2024 00:10:55 +0200 Subject: [PATCH 05/34] add economic data page --- src/lib/components/TickerInfoCard.svelte | 22 +- src/routes/economic-data/+page.svelte | 528 +++++++++++++++++++++++ src/routes/economic-data/+page.ts | 35 ++ 3 files changed, 574 insertions(+), 11 deletions(-) create mode 100644 src/routes/economic-data/+page.svelte create mode 100644 src/routes/economic-data/+page.ts diff --git a/src/lib/components/TickerInfoCard.svelte b/src/lib/components/TickerInfoCard.svelte index 887619ab..6a47bcda 100644 --- a/src/lib/components/TickerInfoCard.svelte +++ b/src/lib/components/TickerInfoCard.svelte @@ -117,20 +117,20 @@ $: { - + - - - + + + - - + + - - + + {#if $screenWidth > 640} - + {/if} - + - + diff --git a/src/routes/economic-data/+page.svelte b/src/routes/economic-data/+page.svelte new file mode 100644 index 00000000..3bd1548a --- /dev/null +++ b/src/routes/economic-data/+page.svelte @@ -0,0 +1,528 @@ + + + + + + + {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} US Economic Data · stocknear + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+
+ + +
+ +
+
+ + +
+
+

+ US Economic Data +

+
+ + + US Economic Data such as treasury rate, CPI + + + +
+ + + + + +
+ + + + +
+ + {#if isLoaded} +
+ +

+ Treasury Rates +

+ +
+ Treasury rates are the interest rates that the US government pays on its debt obligations, and they are a key benchmark for interest rates across the economy. +
+ +
+
+ +
+
+ +
+ +
+ + +
    +
  • + +
  • +
  • + {#if data?.user?.tier === 'Pro'} + + {:else} + + Quarterly + + + {/if} + +
  • +
+ + +
+
CEO {ceoName} Country {country}
Market Cap {abbreviateNumber(data?.getStockQuote?.marketCap,true)} Volume {abbreviateNumber(data?.getStockQuote?.volume)}
Beta{beta?.toFixed(2)}{beta} Avg. Volume {abbreviateNumber(data?.getStockQuote?.avgVolume)}
Open {data?.getStockQuote?.open?.toFixed(2)} Previous Close {data?.getStockQuote?.previousClose?.toFixed(2)}
Day's Range {data?.getStockQuote?.dayLow?.toFixed(2)} - {data?.getStockQuote?.dayHigh?.toFixed(2)} 52-Week Range {data?.getStockQuote?.yearLow?.toFixed(2)} - {data?.getStockQuote?.yearHigh?.toFixed(2)}
EPS (ttm) {data?.getStockQuote?.eps} PE Ratio (ttm) {data?.getStockQuote?.pe}
Shares Out. {abbreviateNumber(data?.getStockQuote?.sharesOutstanding)} Forward PE
CEO{ceoName}{ceoName} Country {country}
Market Cap{abbreviateNumber(data?.getStockQuote?.marketCap,true)}VolumeMkt Cap{abbreviateNumber(data?.getStockQuote?.marketCap,true)}Vol {abbreviateNumber(data?.getStockQuote?.volume)}
Beta{beta}Avg. Volume{beta}Avg. Vol {abbreviateNumber(data?.getStockQuote?.avgVolume)}
Open{data?.getStockQuote?.open?.toFixed(2)}Previous Close{data?.getStockQuote?.open?.toFixed(2)}Prev. Close {data?.getStockQuote?.previousClose?.toFixed(2)}
Day's Range{data?.getStockQuote?.dayLow?.toFixed(2)} - {data?.getStockQuote?.dayHigh?.toFixed(2)}{data?.getStockQuote?.dayLow?.toFixed(2)} - {data?.getStockQuote?.dayHigh?.toFixed(2)} 52-Week Range {data?.getStockQuote?.yearLow?.toFixed(2)} - {data?.getStockQuote?.yearHigh?.toFixed(2)}
EPS (ttm){data?.getStockQuote?.eps}{data?.getStockQuote?.eps} PE Ratio (ttm) {data?.getStockQuote?.pe}
Shares Out.{abbreviateNumber(data?.getStockQuote?.sharesOutstanding)}{abbreviateNumber(data?.getStockQuote?.sharesOutstanding)} Forward PE {forwardPE === undefined ? '-' : forwardPE}
+ + + + + + + + + + + + + + + + + + {#each tableList as item, index} + + + + + + + + + + + + + + + + + + {/each} + + +
DateMonth 1Month 2Month 3Month 6Year 1Year 2Year 3Year 5Year 10Year 20Year 30
+ {item?.date} + + {item?.month1} + + {item?.month2} + + {item?.month3} + + {item?.month6} + + {item?.year1} + + {item?.year2} + + {item?.year3} + + {item?.year5} + + {item?.year10} + + {item?.year20} + + {item?.year30} +
+ + +
+ + + +
+ + {:else} +
+
+ +
+
+ {/if} + + + + + +
+
+ + + + + + +
+ + + + \ No newline at end of file diff --git a/src/routes/economic-data/+page.ts b/src/routes/economic-data/+page.ts new file mode 100644 index 00000000..8f186faf --- /dev/null +++ b/src/routes/economic-data/+page.ts @@ -0,0 +1,35 @@ +import { getCache, setCache } from '$lib/store'; + + + +export const load = async ({parent}) => { + const getEconomicData = async () => { + let output; + const {apiKey, apiURL} = await parent(); + + const cachedData = getCache('', 'getEconomicData'); + if (cachedData) { + output = cachedData; + } else { + const response = await fetch(apiURL + '/economic-data', { + method: 'GET', + headers: { + "Content-Type": "application/json", "X-API-KEY": apiKey + }, + }); + + output = await response.json(); + + + setCache('', output, 'getEconomicData'); + + } + + return output; + }; + + // Make sure to return a promise + return { + getEconomicData: await getEconomicData() + }; +}; \ No newline at end of file From 517851eea388fe0a1ee1a558af21eacee3f6150a Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 28 Aug 2024 00:57:30 +0200 Subject: [PATCH 06/34] add economic indicator page --- .../+page.svelte | 106 +++++++++++++++--- .../+page.ts | 10 +- src/routes/home/+page.svelte | 8 +- 3 files changed, 99 insertions(+), 25 deletions(-) rename src/routes/{economic-data => economic-indicator}/+page.svelte (86%) rename src/routes/{economic-data => economic-indicator}/+page.ts (62%) diff --git a/src/routes/economic-data/+page.svelte b/src/routes/economic-indicator/+page.svelte similarity index 86% rename from src/routes/economic-data/+page.svelte rename to src/routes/economic-indicator/+page.svelte index 3bd1548a..3ff1e76a 100644 --- a/src/routes/economic-data/+page.svelte +++ b/src/routes/economic-indicator/+page.svelte @@ -17,9 +17,10 @@ export let data; let cloudFrontUrl = import.meta.env.VITE_IMAGE_URL; let isLoaded = false; -let rawData = data?.getEconomicData || []; +let rawData; let tableList = []; let optionsData; +let optionsCPI; let filterRule = 'annual'; let timePeriod = 'threeYears'; @@ -210,10 +211,71 @@ async function plotData() { return options; } +async function plotCPI() { + // Get the filtered data based on the selected time period + let dates = []; + let valueList = []; + // Iterate over the data and extract required information + data?.getEconomicIndicator?.cpi?.forEach(item => { + + dates?.push(item?.date); + valueList?.push(item?.value); + }); + + const options = { + animation: false, + grid: { + left: '2%', + right: '2%', + bottom: '2%', + top: '10%', + containLabel: true + }, + xAxis: { + axisLabel: { + color: '#fff', + }, + data: dates, + type: 'category', + }, + yAxis: [ + { + type: 'value', + splitLine: { + show: false, // Disable x-axis grid lines + }, + axisLabel: { + color: '#fff', // Change label color to white + }, + }, + { + type: 'value', + splitLine: { + show: false, // Disable x-axis grid lines + }, + }, + ], + series: { + name: 'CPI', + data: valueList, + type: 'line', + areaStyle: {opacity: 0.2}, + smooth: true, + }, + tooltip: { + trigger: 'axis', + hideDelay: 100, + }, + }; + + return options; +} + onMount(async () => { - rawData = data?.getEconomicData ?? []; + rawData = data?.getEconomicIndicator?.treasury ?? {}; optionsData = await plotData(); + optionsCPI = await plotCPI(); tableList = filterEndOfYearDates(rawData); tableList?.sort((a, b) => new Date(b?.date) - new Date(a?.date)); isLoaded = true; @@ -228,20 +290,20 @@ onMount(async () => { - {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} US Economic Data · stocknear + {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} US Economic Indicator · stocknear - + - - + + - - + + @@ -253,7 +315,7 @@ onMount(async () => { @@ -272,12 +334,12 @@ onMount(async () => {

- US Economic Data + Economic Indicator

- US Economic Data such as treasury rate, CPI + The indicators measure economic performance and identify growth trends. @@ -314,10 +376,22 @@ onMount(async () => { {#if isLoaded}
- -

+ +

+ Consumer Price Index (CPI) +

+ +
+ The CPI measures the average change in prices for a typical basket of goods. It's key for tracking inflation, affecting interest rates, wages, and business decisions. Rising CPI indicates inflation, impacting purchasing power and the overall economy. +
+ +
+ +
+ +

Treasury Rates -

+
Treasury rates are the interest rates that the US government pays on its debt obligations, and they are a key benchmark for interest rates across the economy. @@ -383,7 +457,7 @@ onMount(async () => { - {#each tableList as item, index} + {#each tableList as item} @@ -394,7 +468,7 @@ onMount(async () => { {item?.month1} - {item?.month2} + {item?.month2 !== null ? item?.month2 : '-'} {item?.month3} diff --git a/src/routes/economic-data/+page.ts b/src/routes/economic-indicator/+page.ts similarity index 62% rename from src/routes/economic-data/+page.ts rename to src/routes/economic-indicator/+page.ts index 8f186faf..5d783607 100644 --- a/src/routes/economic-data/+page.ts +++ b/src/routes/economic-indicator/+page.ts @@ -3,15 +3,15 @@ import { getCache, setCache } from '$lib/store'; export const load = async ({parent}) => { - const getEconomicData = async () => { + const getEconomicIndicator = async () => { let output; const {apiKey, apiURL} = await parent(); - const cachedData = getCache('', 'getEconomicData'); + const cachedData = getCache('', 'getEconomicIndicator'); if (cachedData) { output = cachedData; } else { - const response = await fetch(apiURL + '/economic-data', { + const response = await fetch(apiURL + '/economic-indicator', { method: 'GET', headers: { "Content-Type": "application/json", "X-API-KEY": apiKey @@ -21,7 +21,7 @@ export const load = async ({parent}) => { output = await response.json(); - setCache('', output, 'getEconomicData'); + setCache('', output, 'getEconomicIndicator'); } @@ -30,6 +30,6 @@ export const load = async ({parent}) => { // Make sure to return a promise return { - getEconomicData: await getEconomicData() + getEconomicIndicator: await getEconomicIndicator() }; }; \ No newline at end of file diff --git a/src/routes/home/+page.svelte b/src/routes/home/+page.svelte index 86b2f28e..f32dd68c 100644 --- a/src/routes/home/+page.svelte +++ b/src/routes/home/+page.svelte @@ -202,10 +202,10 @@ onMount( async() => { {/if} - +

Dashboard From 0267701d939d7d9194e414870cbff0e79293d66f Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 28 Aug 2024 10:07:38 +0200 Subject: [PATCH 07/34] ui fix --- src/lib/components/Pricing.svelte | 8 ++++---- src/routes/economic-indicator/+page.svelte | 2 +- src/routes/pricing/+page.svelte | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lib/components/Pricing.svelte b/src/lib/components/Pricing.svelte index 8448ddd1..330205fa 100644 --- a/src/lib/components/Pricing.svelte +++ b/src/lib/components/Pricing.svelte @@ -25,7 +25,7 @@ onMount(async () => { -
+
@@ -273,12 +273,12 @@ onMount(async () => { - + diff --git a/src/routes/economic-indicator/+page.svelte b/src/routes/economic-indicator/+page.svelte index 3ff1e76a..3d62cad1 100644 --- a/src/routes/economic-indicator/+page.svelte +++ b/src/routes/economic-indicator/+page.svelte @@ -334,7 +334,7 @@ onMount(async () => {

- Economic Indicator + Economic Indicators

diff --git a/src/routes/pricing/+page.svelte b/src/routes/pricing/+page.svelte index 6164996f..aceae4bd 100644 --- a/src/routes/pricing/+page.svelte +++ b/src/routes/pricing/+page.svelte @@ -111,7 +111,7 @@ async function purchasePlan(subscriptionType:string='') { -
+
@@ -372,12 +372,12 @@ async function purchasePlan(subscriptionType:string='') { - + From ee1fc4b98c1e1952ccc309240fb76cf8fd72f8d7 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 28 Aug 2024 10:13:27 +0200 Subject: [PATCH 08/34] redirect --- src/routes/+page.server.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 52e80c10..ec5c54e4 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -53,7 +53,7 @@ export const actions = { } - redirect(301, '/home'); + redirect(301, '/pricing'); }, register: async ({ locals, request }) => { @@ -107,7 +107,7 @@ export const actions = { error(err.status, err.message); } - redirect(301, "/home"); + redirect(301, "/pricing"); }, @@ -157,7 +157,7 @@ export const actions = { maxAge: 60*60 }); - cookies.set('path', "/home", {httpOnly: true, + cookies.set('path', "/pricing", {httpOnly: true, sameSite: 'lax', secure: true, path: '/', From 9cef649d52829e56fe348ac6bd4311ffea733e55 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 28 Aug 2024 10:38:56 +0200 Subject: [PATCH 09/34] add info text --- src/routes/+layout.svelte | 2 +- src/routes/home/+page.svelte | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index e47e9cad..499f96d1 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -580,7 +580,7 @@ $: { - +