From 5fca62a9862362917b1e435bcc271ba562d6aeb7 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Fri, 22 Nov 2024 13:54:34 +0100 Subject: [PATCH] bugfixing display price correctly --- src/lib/store.ts | 1 - src/routes/stocks/[tickerID]/+layout.svelte | 90 +++++++++++++------ src/routes/stocks/[tickerID]/+page.svelte | 10 +-- .../stocks/[tickerID]/insider/+page.svelte | 2 +- .../statistics/employees/+layout.server.ts | 3 +- .../statistics/employees/+page.server.ts | 3 +- .../statistics/market-cap/+page.server.ts | 3 +- 7 files changed, 76 insertions(+), 36 deletions(-) diff --git a/src/lib/store.ts b/src/lib/store.ts index b3a99623..3ac37a2c 100644 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -43,7 +43,6 @@ export const clearCache = () => { clientSideCache.set({}); }; -export const displayLegend = writable(>{}); export const showCookieConsent = writable(false); diff --git a/src/routes/stocks/[tickerID]/+layout.svelte b/src/routes/stocks/[tickerID]/+layout.svelte index dc6ee2cc..2c9a2ae4 100644 --- a/src/routes/stocks/[tickerID]/+layout.svelte +++ b/src/routes/stocks/[tickerID]/+layout.svelte @@ -13,10 +13,7 @@ priceIncrease, stockTicker, displayCompanyName, - displayLegend, isOpen, - isBeforeMarketOpen, - isWeekend, shouldUpdatePriceChart, priceChartData, } from "$lib/store"; @@ -24,13 +21,14 @@ import { onMount, onDestroy, afterUpdate } from "svelte"; import { page } from "$app/stores"; import toast from "svelte-french-toast"; + import { convertTimestamp } from "$lib/utils"; import Markethour from "$lib/components/Markethour.svelte"; import AIScore from "$lib/components/AIScore.svelte"; export let data; let prePostData = data?.getPrePostQuote || {}; $: $realtimePrice = data?.getStockQuote?.price?.toFixed(2); - + let oneDayPrice = []; let previousRealtimePrice = null; let previousTicker; let socket; @@ -45,6 +43,7 @@ //let availableCash = 0; let displaySection = ""; + let displayLegend = {}; function shareContent(url) { if (navigator.share) { @@ -62,23 +61,6 @@ } } - /* -function handleTypeOfTrade(state:string) -{ - if (state === 'buy') - { - const closePopup = document.getElementById("buyTradeModal"); - closePopup?.dispatchEvent(new MouseEvent('click')) - } - - else if (state === 'sell') - { - const closePopup = document.getElementById("sellTradeModal"); - closePopup?.dispatchEvent(new MouseEvent('click')) - } -} -*/ - function changeSection(state) { const sectionMap = { insider: "/insider", @@ -282,6 +264,64 @@ function handleTypeOfTrade(state:string) $currentPortfolioPrice = data?.getStockQuote?.price; prePostData = data?.getPrePostQuote || {}; + const output = [...data?.getOneDayPrice] ?? []; + oneDayPrice = output?.map((item) => ({ + time: Date?.parse(item?.time + "Z") / 1000, + open: item?.open !== null ? item?.open : NaN, + high: item?.high !== null ? item?.high : NaN, + low: item?.low !== null ? item?.low : NaN, + close: item?.close !== null ? item?.close : NaN, + })); + + let change; + let currentDataRowOneDay; + let baseClose = data?.getStockQuote?.previousClose; + + const length = oneDayPrice?.length; + for (let i = length - 1; i >= 0; i--) { + if (!isNaN(oneDayPrice[i]?.close)) { + currentDataRowOneDay = oneDayPrice[i]; + break; + } + } + + // Calculate percentage change if baseClose and currentDataRow are valid + const closeValue = + $realtimePrice !== null + ? $realtimePrice + : (currentDataRowOneDay?.close ?? currentDataRowOneDay?.value); + + if (closeValue && baseClose) { + change = ((closeValue / baseClose - 1) * 100)?.toFixed(2); + } + + // Format date + const date = new Date(currentDataRowOneDay?.time * 1000); + + const options = { + day: "2-digit", + month: "short", + year: "numeric", + hour: "numeric", + minute: "2-digit", + timeZone: "UTC", + }; + + const formattedDate = date?.toLocaleString("en-US", options); + + const safeFormattedDate = + formattedDate === "Invalid Date" + ? convertTimestamp(data?.getStockQuote?.timestamp) + : formattedDate; + + // Set display legend + displayLegend = { + close: + currentDataRowOneDay?.close?.toFixed(2) ?? + data?.getStockQuote?.price?.toFixed(2), + date: safeFormattedDate, + change, + }; } } @@ -711,22 +751,22 @@ function handleTypeOfTrade(state:string)
- {$displayLegend?.close} + {displayLegend?.close}
= 0 ? "before:content-['+'] text-[#00FC50]" : 'text-[#FF2F1F]'}" > - {$displayLegend?.change}% + {displayLegend?.change}%
At close: - {$displayLegend?.date} + {displayLegend?.date}
{#if Object?.keys(prePostData)?.length !== 0} diff --git a/src/routes/stocks/[tickerID]/+page.svelte b/src/routes/stocks/[tickerID]/+page.svelte index 395436b0..bf1c3b1b 100644 --- a/src/routes/stocks/[tickerID]/+page.svelte +++ b/src/routes/stocks/[tickerID]/+page.svelte @@ -10,7 +10,6 @@ priceIncrease, wsBidPrice, wsAskPrice, - displayLegend, currentPortfolioPrice, stockTicker, displayCompanyName, @@ -129,7 +128,6 @@ timeZone: "UTC", }; - //const formattedDate = (displayData === '1D' || displayData === '1W' || displayData === '1M') ? date.toLocaleString('en-GB', options).replace(/\//g, '.') : date.toLocaleDateString('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' }).replace(/\//g, '.'); const formattedDate = date?.toLocaleString("en-US", options); const safeFormattedDate = @@ -138,7 +136,7 @@ : formattedDate; // Set display legend - $displayLegend = { + displayLegend = { close: currentDataRowOneDay?.close?.toFixed(2) ?? data?.getStockQuote?.price?.toFixed(2), @@ -418,7 +416,7 @@ } } - $displayLegend = { close: "-", date: "-" }; + let displayLegend = { close: "-", date: "-" }; let displayLastLogicalRangeValue; @@ -961,11 +959,11 @@ class="flex shrink flex-row space-x-1 pr-1 text-sm sm:text-[1rem]" > = 0 + class={displayLegend?.graphChange >= 0 ? "before:content-['+'] text-[#00FC50]" : "text-[#FF2F1F]"} > - {$displayLegend?.graphChange}% + {displayLegend?.graphChange}% - {#if rawData?.length === insiderTradingList?.length && data?.user?.tier === "Pro"} + {#if rawData?.length > 5 && rawData?.length === insiderTradingList?.length && data?.user?.tier === "Pro"}