diff --git a/src/routes/corporate-lobbying-tracker/+page.svelte b/src/routes/corporate-lobbying-tracker/+page.svelte index 26b10719..3f0aa51d 100644 --- a/src/routes/corporate-lobbying-tracker/+page.svelte +++ b/src/routes/corporate-lobbying-tracker/+page.svelte @@ -4,9 +4,9 @@ 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; - let cloudFrontUrl = import.meta.env.VITE_IMAGE_URL; let isLoaded = false; let rawData = []; @@ -65,6 +65,84 @@ } $: charNumber = $screenWidth < 640 ? 15 : 20; + + let columns = [ + { key: "date", label: "Date", align: "left" }, + { key: "ticker", label: "Symbol", align: "left" }, + + { key: "name", label: "Name", align: "left" }, + { key: "price", label: "Price", align: "right" }, + + { key: "changesPercentage", label: "% Change", align: "right" }, + { key: "amount", label: "Amount", align: "right" }, + ]; + + let sortOrders = { + date: { order: "none", type: "date" }, + ticker: { order: "none", type: "string" }, + name: { order: "none", type: "string" }, + changesPercentage: { order: "none", type: "number" }, + price: { order: "none", type: "number" }, + amount: { 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") { + displayList = [...originalData]?.slice(0, 50); // 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 + displayList = [...originalData].sort(compareValues)?.slice(0, 50); + }; @@ -139,50 +217,7 @@ class="table table-sm table-compact no-scrollbar rounded-none sm:rounded-md w-full bg-[#09090B] border-bg-[#09090B] m-auto" > - - - Date - - - Symbol - - - Name - - - - Sector - - { - changeOrder(order); - }} - class="cursor-pointer text-end bg-[#09090B] text-white text-[1rem] font-semibold" - > - Amount - - - + {#each displayList as item, index} @@ -221,7 +256,25 @@ - {item?.sector} + {item?.price} + + + + {#if item?.changesPercentage >= 0} + +{item?.changesPercentage >= 1000 + ? item?.changesPercentage + : item?.changesPercentage?.toFixed(2)}% + {:else} + {item?.changesPercentage <= -1000 + ? item?.changesPercentage + : item?.changesPercentage?.toFixed(2)}% + + {/if} diff --git a/src/routes/hedge-funds/+page.svelte b/src/routes/hedge-funds/+page.svelte index 46f77d1f..18ca4f9f 100644 --- a/src/routes/hedge-funds/+page.svelte +++ b/src/routes/hedge-funds/+page.svelte @@ -11,11 +11,10 @@ let cloudFrontUrl = import.meta.env.VITE_IMAGE_URL; let rawData = data?.getAllHedgeFunds; - console.log(rawData[0]); - let displayList = []; + let displayList = rawData?.slice(0, 20) ?? []; let filterQuery = ""; - let isLoaded = false; + let isLoaded = true; async function handleScroll() { const scrollThreshold = document.body.offsetHeight * 0.8; // 80% of the website height @@ -28,9 +27,6 @@ } onMount(async () => { - displayList = rawData?.slice(0, 20) ?? []; - isLoaded = true; - window.addEventListener("scroll", handleScroll); //window.addEventListener('keydown', handleKeyDown); @@ -126,198 +122,177 @@ - {#if isLoaded} -
+
+
- {:else} - - {/if} +