diff --git a/src/lib/components/Table/Table.svelte b/src/lib/components/Table/Table.svelte index 954d3758..97b049ac 100644 --- a/src/lib/components/Table/Table.svelte +++ b/src/lib/components/Table/Table.svelte @@ -881,8 +881,16 @@ {:else} {item[column.key]} {/if} + {:else if column?.type === "date"} + {new Date(item[column.key]).toLocaleDateString("en-US", { + month: "short", + day: "numeric", + year: "numeric", + })} {:else if column?.type === "int"} - {@html abbreviateNumber(item[column.key], false, true)} + {@html column.key === "marketCap" && item[column.key] === 0 + ? "n/a" + : abbreviateNumber(item[column.key], false, true)} {:else if column?.type === "decimal"} {item[column.key]?.toLocaleString("en-US")} {:else if column?.type === "decimalSign"} diff --git a/src/routes/ipos/+layout.server.ts b/src/routes/ipos/+layout.server.ts index 55055d9a..291536ac 100644 --- a/src/routes/ipos/+layout.server.ts +++ b/src/routes/ipos/+layout.server.ts @@ -18,8 +18,31 @@ export const load = async ({ locals }) => { }; + const getIPOCalendar = async () => { + + // make the POST request to the endpoint + const postData = { year: "all" }; + + const response = await fetch(apiURL + "/ipo-calendar", { + 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 { getNews: await getNews(), + getIPOCalendar: await getIPOCalendar(), }; }; diff --git a/src/routes/ipos/+layout.svelte b/src/routes/ipos/+layout.svelte index fc2d611f..48c0a57c 100644 --- a/src/routes/ipos/+layout.svelte +++ b/src/routes/ipos/+layout.svelte @@ -1,18 +1,14 @@ - - -
- diff --git a/src/routes/ipos/+page.svelte b/src/routes/ipos/+page.svelte index b8966aba..6712fd7c 100644 --- a/src/routes/ipos/+page.svelte +++ b/src/routes/ipos/+page.svelte @@ -1,139 +1,91 @@ -
- + -
- - - - - - - - - - - - - {#each ipoList as item} - - - - - - - - - - - -
IPO DateSymbolNameIPO PriceCurrent PriceReturn Since
- {new Date(item?.date)?.toLocaleString("en-US", { - month: "short", - day: "numeric", - year: "numeric", - daySuffix: "2-digit", - })} - - - {item?.symbol} - - - {item?.name?.length > charNumber - ? formatString(item?.name?.slice(0, charNumber)) + "..." - : formatString(item?.name)} - - {item?.ipoPrice !== null ? item?.ipoPrice : "-"} - - {item?.currentPrice !== null ? "$" + item?.currentPrice : "-"} - - {#if item?.return >= 0 && item?.return !== null} - {abbreviateNumber(item?.return)}% +

+ Last {rawData?.length} IPOs +

+
+
+
+
+ + + +
-
+ + {/each} + + + More IPO News + +
+
+ {/if} + - - + + diff --git a/src/routes/ipos/[slug]/+page.server.ts b/src/routes/ipos/[slug]/+page.server.ts index 1f5d8cd4..22677744 100644 --- a/src/routes/ipos/[slug]/+page.server.ts +++ b/src/routes/ipos/[slug]/+page.server.ts @@ -1,22 +1,4 @@ export const load = async ({ locals, params }) => { - const getIPOCalendar = async () => { - const { apiURL, apiKey } = locals; - // make the POST request to the endpoint - const postData = { year: params.slug }; - - const response = await fetch(apiURL + "/ipo-calendar", { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-API-KEY": apiKey, - }, - body: JSON.stringify(postData), - }); - - const output = await response.json(); - - return output; - }; const getYear = async () => { return params.slug; @@ -24,7 +6,6 @@ export const load = async ({ locals, params }) => { // Make sure to return a promise return { - getIPOCalendar: await getIPOCalendar(), getYear: await getYear(), }; }; diff --git a/src/routes/ipos/[slug]/+page.svelte b/src/routes/ipos/[slug]/+page.svelte index 8c625b3d..b04e517a 100644 --- a/src/routes/ipos/[slug]/+page.svelte +++ b/src/routes/ipos/[slug]/+page.svelte @@ -4,12 +4,17 @@ import { page } from "$app/stores"; import { onMount } from "svelte"; import Infobox from "$lib/components/Infobox.svelte"; + import SEO from "$lib/components/SEO.svelte"; export let data; - let rawData = data?.getIPOCalendar; + let rawData = data?.getIPOCalendar?.filter( + (item) => new Date(item?.ipoDate).getFullYear() >= data?.getYear, + ); + let ipoList = rawData?.slice(0, 150); let year = data?.getYear; + let ipoNews = data?.getNews; async function handleScroll() { const scrollThreshold = document.body.offsetHeight * 0.8; // 80% of the website height @@ -30,124 +35,177 @@ $: { if ($page?.url?.pathname) { - rawData = data?.getIPOCalendar; + rawData = data?.getIPOCalendar?.filter( + (item) => new Date(item?.ipoDate).getFullYear() == data?.getYear, + ); ipoList = rawData?.slice(0, 150); year = data?.getYear; } } - $: charNumber = $screenWidth < 640 ? 20 : 40; + $: charNumber = $screenWidth < 640 ? 20 : 30; -
-
- {#if rawData?.length !== 0} -

- {rawData?.length} IPOs -

-
- - - - - - - - - - - - - {#each ipoList as item} - - + - - - - - - - - - + + + + + + {#each ipoList as item} + + + + + + + + + + + + + + {/each} + +
IPO DateSymbolNameIPO PriceCurrent PriceReturn Since
- {new Date(item?.date)?.toLocaleString("en-US", { - month: "short", - day: "numeric", - year: "numeric", - daySuffix: "2-digit", - })} - - - {item?.symbol} - - - {item?.name?.length > charNumber - ? formatString(item?.name?.slice(0, charNumber)) + "..." - : formatString(item?.name)} - - {item?.ipoPrice !== null ? item?.ipoPrice : "-"} - - {item?.currentPrice !== null ? item?.currentPrice : "-"} - - {#if item?.return >= 0 && item?.return !== null} - +{abbreviateNumber(item?.return)}% +
+
+
+
+ {#if rawData?.length !== 0} +

+ {rawData?.length} IPOs +

+
+ + + + - {:else if item?.return < 0 && item?.return !== null} - {abbreviateNumber(item?.return)}% - - {:else} - Symbol - - - - {/if} - - - {/each} - -
IPO Date
-
- {:else} - Name +
IPO PriceCurrent PriceReturn Since
+ {new Date(item?.ipoDate)?.toLocaleString("en-US", { + month: "short", + day: "numeric", + year: "numeric", + daySuffix: "2-digit", + })} + + + {item?.symbol} + + + {item?.name?.length > charNumber + ? formatString(item?.name?.slice(0, charNumber)) + + "..." + : formatString(item?.name)} + + {item?.ipoPrice !== null ? item?.ipoPrice : "n/a"} + + {item?.currentPrice !== null + ? item?.currentPrice + : "n/a"} + + {#if item?.return >= 0 && item?.return !== null} + +{abbreviateNumber(item?.return)}% + {:else if item?.return < 0 && item?.return !== null} + {abbreviateNumber(item?.return)}% + + {:else} + + n/a + + {/if} +
+
+ {:else} +
+ - {/if} + /> +
+ {/if} +
+ + + -
+ diff --git a/src/routes/ipos/+page.server.ts b/src/routes/ipos/news/+page.server.ts similarity index 63% rename from src/routes/ipos/+page.server.ts rename to src/routes/ipos/news/+page.server.ts index f189f6f0..04872f0d 100644 --- a/src/routes/ipos/+page.server.ts +++ b/src/routes/ipos/news/+page.server.ts @@ -1,26 +1,25 @@ -export const load = async ({ locals }) => { - const getIPOCalendar = async () => { - const { apiURL, apiKey } = locals; - - // make the POST request to the endpoint - const postData = { year: "all" }; - - const response = await fetch(apiURL + "/ipo-calendar", { - 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 { - getIPOCalendar: await getIPOCalendar(), - }; -}; +export const load = async ({ locals }) => { + const { apiURL, apiKey } = locals; + + const getStockNews = async () => { + const postData = { newsType: "stock-news" }; + // make the POST request to the endpoint + const response = await fetch(apiURL + "/market-news", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-KEY": apiKey, + }, + body: JSON.stringify(postData), + }); + + const output = await response.json(); + + return output; + }; + + + return { + getStockNews: await getStockNews(), + }; +}; diff --git a/src/routes/ipos/news/+page.svelte b/src/routes/ipos/news/+page.svelte new file mode 100644 index 00000000..c648cf10 --- /dev/null +++ b/src/routes/ipos/news/+page.svelte @@ -0,0 +1,218 @@ + + + + +
+
+
+
+
+
+ {#if news?.length !== 0} + {#each news as item, index} +
+ {#if checkIfYoutubeVideo(item.link)} + {#if showVideo[index]} + +
+ +
+ {:else} + +
+
+
handlePlayClick(index)} + > +
+
+
+
+ {/if} + + {:else} + + + {/if} +
+
+ {/each} + {/if} +
+
+
+ +
+
+
diff --git a/src/routes/market-news/+page.svelte b/src/routes/market-news/+page.svelte index a257feed..98a5d23b 100644 --- a/src/routes/market-news/+page.svelte +++ b/src/routes/market-news/+page.svelte @@ -1,6 +1,6 @@ - - - - - {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} All - Stock News · Stocknear - - - - - - - - - - - - - - - +