+
Earnings Call - {earningDate}
{/if}
diff --git a/src/routes/most-shorted-stocks/+page.svelte b/src/routes/most-shorted-stocks/+page.svelte
index ac7e4071..4b9e775f 100644
--- a/src/routes/most-shorted-stocks/+page.svelte
+++ b/src/routes/most-shorted-stocks/+page.svelte
@@ -5,6 +5,7 @@
import { onMount } from 'svelte';
import UpgradeToPro from '$lib/components/UpgradeToPro.svelte';
import ArrowLogo from "lucide-svelte/icons/move-up-right";
+ import TableHeader from "$lib/components/Table/TableHeader.svelte";
export let data;
@@ -37,7 +38,85 @@ async function handleScroll() {
};
})
-
+ let columns = [
+ {key: "rank", label: "#", align: "right"},
+ { key: "symbol", label: "Symbol", align: "left" },
+ { key: "name", label: "Name", align: "left" },
+ { key: "shortRatio", label: "Short Ratio", align: "right" },
+ { key: "sharesShort", label: "Short Interest", align: "right" },
+ { key: "shortFloatPercent", label: "Short % Float", align: "right" },
+ { key: "shortOutStandingPercent", label: "Short % of Shares Out", align: "right" },
+ ];
+
+ let sortOrders = {
+ rank: { order: "none", type: "number" },
+ symbol: { order: "none", type: "string" },
+ name: { order: "none", type: "string" },
+ shortRatio: { order: "none", type: "number" },
+ sharesShort: { order: "none", type: "number" },
+ shortFloatPercent: { order: "none", type: "number" },
+ shortOutStandingPercent: { order: "none", type: "number" },
+ };
+
+
+ const sortData = (key) => {
+ // Reset all other keys to 'none' except the current key
+ for (const k in sortOrders) {
+ if (k !== key) {
+ sortOrders[k].order = "none";
+ }
+ }
+
+ // Cycle through 'none', 'asc', 'desc' for the clicked key
+ const orderCycle = ["none", "asc", "desc"];
+
+ let originalData = rawData;
+
+ const currentOrderIndex = orderCycle.indexOf(sortOrders[key].order);
+ sortOrders[key].order =
+ orderCycle[(currentOrderIndex + 1) % orderCycle.length];
+ const sortOrder = sortOrders[key].order;
+
+ // Reset to original data when 'none' and stop further sorting
+ if (sortOrder === "none") {
+ stockList = [...originalData]; // Reset to original data (spread to avoid mutation)
+ return;
+ }
+
+ // Define a generic comparison function
+ const compareValues = (a, b) => {
+ const { type } = sortOrders[key];
+ let valueA, valueB;
+
+ switch (type) {
+ case "date":
+ valueA = new Date(a[key]);
+ valueB = new Date(b[key]);
+ break;
+ case "string":
+ valueA = a[key].toUpperCase();
+ valueB = b[key].toUpperCase();
+ return sortOrder === "asc"
+ ? valueA.localeCompare(valueB)
+ : valueB.localeCompare(valueA);
+ case "number":
+ default:
+ valueA = parseFloat(a[key]);
+ valueB = parseFloat(b[key]);
+ break;
+ }
+
+ if (sortOrder === "asc") {
+ return valueA < valueB ? -1 : valueA > valueB ? 1 : 0;
+ } else {
+ return valueA > valueB ? -1 : valueA < valueB ? 1 : 0;
+ }
+ };
+
+ // Sort using the generic comparison function
+ stockList = [...originalData].sort(compareValues);
+ };
+
$: charNumber = $screenWidth < 640 ? 15 : 20;
@@ -137,37 +216,14 @@ async function handleScroll() {