diff --git a/src/lib/utils.ts b/src/lib/utils.ts index f02a12f6..4ceebcf1 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1307,17 +1307,6 @@ export const getLastTradingDay = () => { const nyDate = new Date( date.toLocaleString("en-US", { timeZone: etTimeZone }), ); - const currentHour = nyDate.getHours(); - const currentMinutes = nyDate.getMinutes(); - const isMarketClosed = - currentHour < 9 || - (currentHour === 9 && currentMinutes < 30) || - currentHour >= 16; - - // If market is closed, move to the previous day - if (isMarketClosed) { - nyDate.setDate(nyDate.getDate() - 1); - } // Loop backwards to find the most recent trading day while (true) { diff --git a/src/routes/market-mover/[slug]/+page.svelte b/src/routes/market-mover/[slug]/+page.svelte index 94bbfa6f..83c6c769 100644 --- a/src/routes/market-mover/[slug]/+page.svelte +++ b/src/routes/market-mover/[slug]/+page.svelte @@ -2,6 +2,8 @@ import { screenWidth, numberOfUnreadNotification } from "$lib/store"; import { abbreviateNumber, getLastTradingDay } from "$lib/utils"; import TableHeader from "$lib/components/Table/TableHeader.svelte"; + import { goto } from "$app/navigation"; + import { afterUpdate } from "svelte"; export let data; let timePeriod = "1D"; @@ -119,6 +121,34 @@ }); $: charNumber = $screenWidth < 640 ? 20 : 30; + + const exportData = (format = "csv") => { + if (data?.user?.tier === "Pro") { + // Add headers row + const csvRows = []; + csvRows.push("Rank,Symbol,Name,Change, Price, Market Cap, Volume"); + + // Add data rows + stockList?.forEach((item) => { + const csvRow = `${item?.rank},${item?.symbol},${item?.name},${item?.changesPercentage},${item?.price},${item?.marketCap},${item?.volume}`; + csvRows.push(csvRow); + }); + + // Create CSV blob and trigger download + const csv = csvRows.join("\n"); + const blob = new Blob([csv], { type: "text/csv" }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.setAttribute("hidden", ""); + a.setAttribute("href", url); + a.setAttribute("download", `${data?.getParams}_${timePeriod}.csv`); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + } else { + goto("/pricing"); + } + }; @@ -238,6 +268,28 @@ {lastTradingDay} + +
+ +
diff --git a/src/routes/market-mover/afterhours/+page.svelte b/src/routes/market-mover/afterhours/+page.svelte index 66553c1a..05f6a662 100644 --- a/src/routes/market-mover/afterhours/+page.svelte +++ b/src/routes/market-mover/afterhours/+page.svelte @@ -2,6 +2,7 @@ import { screenWidth, numberOfUnreadNotification } from "$lib/store"; import { abbreviateNumber, getLastTradingDay } from "$lib/utils"; import TableHeader from "$lib/components/Table/TableHeader.svelte"; + import { goto } from "$app/navigation"; export let data; let categoryType = "gainers"; @@ -103,6 +104,34 @@ stockList = [...originalData].sort(compareValues); }; $: charNumber = $screenWidth < 640 ? 20 : 30; + + const exportData = (format = "csv") => { + if (data?.user?.tier === "Pro") { + // Add headers row + const csvRows = []; + csvRows.push("Rank,Symbol,Name,Change, Price, Market Cap, Volume"); + + // Add data rows + stockList?.forEach((item) => { + const csvRow = `${item?.rank},${item?.symbol},${item?.name},${item?.changesPercentage},${item?.price},${item?.marketCap},${item?.volume}`; + csvRows.push(csvRow); + }); + + // Create CSV blob and trigger download + const csv = csvRows.join("\n"); + const blob = new Blob([csv], { type: "text/csv" }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.setAttribute("hidden", ""); + a.setAttribute("href", url); + a.setAttribute("download", `afterhours_${categoryType}.csv`); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + } else { + goto("/pricing"); + } + }; @@ -190,6 +219,27 @@ {lastTradingDay} +
+ +
diff --git a/src/routes/market-mover/premarket/+page.svelte b/src/routes/market-mover/premarket/+page.svelte index 6176d0cc..0d5880d7 100644 --- a/src/routes/market-mover/premarket/+page.svelte +++ b/src/routes/market-mover/premarket/+page.svelte @@ -2,6 +2,7 @@ import { screenWidth, numberOfUnreadNotification } from "$lib/store"; import { abbreviateNumber, getLastTradingDay } from "$lib/utils"; import TableHeader from "$lib/components/Table/TableHeader.svelte"; + import { goto } from "$app/navigation"; export let data; let categoryType = "gainers"; @@ -112,6 +113,34 @@ stockList = [...originalData].sort(compareValues); }; $: charNumber = $screenWidth < 640 ? 20 : 30; + + const exportData = (format = "csv") => { + if (data?.user?.tier === "Pro") { + // Add headers row + const csvRows = []; + csvRows.push("Rank,Symbol,Name,Change, Price, Market Cap, Volume"); + + // Add data rows + stockList?.forEach((item) => { + const csvRow = `${item?.rank},${item?.symbol},${item?.name},${item?.changesPercentage},${item?.price},${item?.marketCap},${item?.volume}`; + csvRows.push(csvRow); + }); + + // Create CSV blob and trigger download + const csv = csvRows.join("\n"); + const blob = new Blob([csv], { type: "text/csv" }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.setAttribute("hidden", ""); + a.setAttribute("href", url); + a.setAttribute("download", `premarket_${categoryType}.csv`); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + } else { + goto("/pricing"); + } + }; @@ -199,6 +228,27 @@ {lastTradingDay} +
+ +