From 0bf31ec7ef8657b3752dcc973db42239c863a279 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 26 Mar 2025 02:05:32 +0100 Subject: [PATCH] ui fix --- .../components/Options/ContractLookup.svelte | 108 ++++++++++-------- .../options/contract-lookup/+page.server.ts | 2 +- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/src/lib/components/Options/ContractLookup.svelte b/src/lib/components/Options/ContractLookup.svelte index 9c958d49..a3a045f5 100644 --- a/src/lib/components/Options/ContractLookup.svelte +++ b/src/lib/components/Options/ContractLookup.svelte @@ -24,11 +24,7 @@ let strikeList = optionData[selectedDate] || []; let selectedStrike = strikeList?.at(0) || []; - let optionSymbol = buildOptionSymbol( - selectedDate, - selectedOptionType, - selectedStrike, - ); + let optionSymbol = "n/a"; let displayList = []; let selectGraphType = "Vol/OI"; @@ -372,34 +368,49 @@ } } - onMount(async () => { - if (selectGraphType) { - isLoaded = false; + async function loadData() { + isLoaded = false; + optionData = data?.getData[selectedOptionType]; - const output = await getContractHistory(optionSymbol); - rawDataHistory = output?.history; - if (rawDataHistory?.length > 0) { - rawDataHistory.forEach((entry) => { - const matchingData = data?.getHistoricalPrice?.find( - (d) => d?.time === entry?.date, - ); - if (matchingData) { - entry.price = matchingData?.close; - } - }); + dateList = [...Object?.keys(optionData)]; - rawDataHistory = calculateDTE(rawDataHistory, selectedDate); - config = plotData(); - rawDataHistory = rawDataHistory?.sort( - (a, b) => new Date(b?.date) - new Date(a?.date), + strikeList = [...optionData[selectedDate]]; + + displayList = []; + rawDataHistory = []; + + optionSymbol = buildOptionSymbol( + selectedDate, + selectedOptionType, + selectedStrike, + ); + const output = await getContractHistory(optionSymbol); + rawDataHistory = output?.history; + + if (rawDataHistory?.length > 0) { + rawDataHistory.forEach((entry) => { + const matchingData = data?.getHistoricalPrice?.find( + (d) => d?.time === entry?.date, ); - displayList = rawDataHistory?.slice(0, 20); - } else { - config = null; - } + if (matchingData) { + entry.price = matchingData?.close; + } + }); - isLoaded = true; + rawDataHistory = calculateDTE(rawDataHistory, selectedDate); + config = plotData(); + rawDataHistory = rawDataHistory?.sort( + (a, b) => new Date(b?.date) - new Date(a?.date), + ); + displayList = rawDataHistory?.slice(0, 20); + } else { + config = null; } + isLoaded = true; + } + + onMount(async () => { + await loadData(); window.addEventListener("scroll", handleScroll); return () => { @@ -487,7 +498,10 @@ {#each dateList as item} (selectedDate = item)} + on:click={() => { + selectedDate = item; + loadData(); + }} class="sm:hover:bg-gray-200 dark:sm:hover:bg-primary cursor-pointer " > {formatDate(item)} @@ -551,7 +565,10 @@ {#each strikeList as item} (selectedStrike = item)} + on:click={() => { + selectedStrike = item; + loadData(); + }} class="sm:hover:bg-gray-200 dark:sm:hover:bg-primary cursor-pointer " > {item} @@ -614,7 +631,10 @@ {#each ["Call", "Put"] as item} (selectedOptionType = item)} + on:click={() => { + selectedOptionType = item; + loadData(); + }} class="sm:hover:bg-gray-200 dark:sm:hover:bg-primary cursor-pointer " > {item} @@ -703,7 +723,8 @@ {rawDataHistory?.at(0)?.volume || "n/a"}{rawDataHistory?.at(0)?.volume?.toLocaleString("en-US") || + "n/a"} {rawDataHistory?.at(0)?.open_interest || "n/a"}{rawDataHistory + ?.at(0) + ?.open_interest?.toLocaleString("en-US") || "n/a"} @@ -819,8 +842,8 @@ {/if} -
- {#if isLoaded} + {#if isLoaded && displayList?.length > 0} +
@@ -919,19 +942,8 @@ {/each}
- {:else} -
-
- -
-
- {/if} -
+
+ {/if} diff --git a/src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts b/src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts index 9b7f38f4..016d27d3 100644 --- a/src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts +++ b/src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts @@ -25,7 +25,7 @@ export const load = async ({ locals, params }) => { const getHistoricalPrice = async () => { - const postData = { ticker: params.tickerID, timePeriod: "max" }; + const postData = { ticker: params.tickerID, timePeriod: "six-months" }; const response = await fetch(apiURL + "/historical-price", { method: "POST", headers: {