From 022bd792d29d02bfd9a3573a3e75348e9c68b5fd Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Wed, 26 Mar 2025 00:15:00 +0100 Subject: [PATCH] add contract lookup component --- .../components/Options/ContractLookup.svelte | 1041 +++++++++++++++++ .../stocks/[tickerID]/options/+layout.svelte | 12 + .../options/contract-lookup/+page.server.ts | 51 + .../options/contract-lookup/+page.svelte | 32 + 4 files changed, 1136 insertions(+) create mode 100644 src/lib/components/Options/ContractLookup.svelte create mode 100644 src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts create mode 100644 src/routes/stocks/[tickerID]/options/contract-lookup/+page.svelte diff --git a/src/lib/components/Options/ContractLookup.svelte b/src/lib/components/Options/ContractLookup.svelte new file mode 100644 index 00000000..242c968a --- /dev/null +++ b/src/lib/components/Options/ContractLookup.svelte @@ -0,0 +1,1041 @@ + + +
+
+
+
+

+ Option Contract Lookup +

+ + + +
+
+
+ +
+
+ Date Expiration + +
+ + + + + + + + {#each dateList as item} + (selectedDate = item)} + class="sm:hover:bg-gray-200 dark:sm:hover:bg-primary cursor-pointer " + > + {formatDate(item)} + + {/each} + + +
+
+
+ Strike Price + +
+ + + + + + + + + + {#each strikeList as item} + (selectedStrike = item)} + class="sm:hover:bg-gray-200 dark:sm:hover:bg-primary cursor-pointer " + > + {item} + + {/each} + + + +
+
+
+ Option Type + +
+ + + + + + + + {#each ["Call", "Put"] as item} + (selectedOptionType = item)} + class="sm:hover:bg-gray-200 dark:sm:hover:bg-primary cursor-pointer " + > + {item} + + {/each} + + +
+ +
+
+
+ +

+ {ticker} Mar 28, 2025 50.0 Call +

+

+ NVDA250328C00050000 +

+ +
+ + + + + + + + + + + + + + + + + +
Lastn/a
Highn/a
Lown/a
Mid + n/a
Volume + n/a
Open Interest + n/a
+ + + + + + + + + + + + + + + + + +
Implied Volatility (IV)n/a
Deltan/a
Gamman/a
Theta + n/a +
Vega + n/a +
+
+
+
+
+
+ + + + + diff --git a/src/routes/stocks/[tickerID]/options/+layout.svelte b/src/routes/stocks/[tickerID]/options/+layout.svelte index 92ddc03f..bd307e79 100644 --- a/src/routes/stocks/[tickerID]/options/+layout.svelte +++ b/src/routes/stocks/[tickerID]/options/+layout.svelte @@ -12,6 +12,7 @@ overview: "/options", "hottest-contracts": "/options/hottest-contracts", "unusual-activity": "/options/unusual-activity", + "contract-lookup": "/options/contract-lookup", volatility: "/options/volatility", gex: "/options/gex", dex: "/options/dex", @@ -34,6 +35,7 @@ overview: "overview", "hottest-contracts": "hottest-contracts", "unusual-activity": "unusual-activity", + "contract-lookup": "contract-lookup", volatility: "volatility", gex: "gex", dex: "dex", @@ -72,6 +74,16 @@ > Overview + changeSubSection("contract-lookup")} + class="p-2 px-5 cursor-pointer {displaySubSection === + 'contract-lookup' + ? 'text-muted dark:text-white bg-[#EEEEEE] dark:bg-primary/90 font-semibold' + : 'text-blue-500 dark:text-gray-400 sm:hover:text-muted dark:sm:hover:text-white sm:hover:bg-[#EEEEEE] dark:sm:hover:bg-primary/90'}" + > + Contract Lookup + changeSubSection("unusual-activity")} diff --git a/src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts b/src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts new file mode 100644 index 00000000..9b7f38f4 --- /dev/null +++ b/src/routes/stocks/[tickerID]/options/contract-lookup/+page.server.ts @@ -0,0 +1,51 @@ + + +export const load = async ({ locals, params }) => { + const { apiKey, apiURL, user } = locals; + + const getData = async () => { + const postData = { + ticker: params.tickerID, + }; + + const response = await fetch(apiURL + "/contract-lookup-summary", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-KEY": apiKey, + }, + body: JSON.stringify(postData), + }); + + const output = await response.json(); + + + return output; + }; + + + const getHistoricalPrice = async () => { + const postData = { ticker: params.tickerID, timePeriod: "max" }; + const response = await fetch(apiURL + "/historical-price", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-KEY": apiKey, + }, + body: JSON.stringify(postData), + }); + + const output = await response.json(); + return output; + }; + + + + // Make sure to return a promise + return { + getData: await getData(), + getHistoricalPrice: await getHistoricalPrice(), + }; +}; + + diff --git a/src/routes/stocks/[tickerID]/options/contract-lookup/+page.svelte b/src/routes/stocks/[tickerID]/options/contract-lookup/+page.svelte new file mode 100644 index 00000000..eb34ff5e --- /dev/null +++ b/src/routes/stocks/[tickerID]/options/contract-lookup/+page.svelte @@ -0,0 +1,32 @@ + + + + +
+
+
+ {#if Object?.keys(data?.getData)?.length > 0} + + {:else} +
+
+ +
+
+ {/if} +
+
+