diff --git a/src/lib/components/IndustryTable.svelte b/src/lib/components/IndustryTable.svelte index aae917db..9084ce65 100644 --- a/src/lib/components/IndustryTable.svelte +++ b/src/lib/components/IndustryTable.svelte @@ -1,29 +1,100 @@
- - - - - - - - - - + - {#each industryList as item} + {#each displayList as item} {item?.industry?.length > charNumber ? item?.industry?.slice(0, charNumber) + "..." @@ -66,9 +137,11 @@
Industry NameStocksMarket CapDiv. YieldPE RatioProfit Margin1M Change1Y Change
- {item?.profitMargin?.toFixed(2)}% + {abbreviateNumber(item?.profitMargin)}% - + Back to Home Page diff --git a/src/routes/industry/all/+page.svelte b/src/routes/industry/all/+page.svelte index da9b582f..24782eda 100644 --- a/src/routes/industry/all/+page.svelte +++ b/src/routes/industry/all/+page.svelte @@ -1,11 +1,94 @@
@@ -15,32 +98,10 @@
- - - - - - - - - - + - {#each rawData as item} + {#each displayList as item} {item?.industry?.length > charNumber ? item?.industry?.slice(0, charNumber) + "..." @@ -83,9 +144,11 @@
Industry NameStocksMarket CapDiv. YieldPE RatioProfit Margin1M Change1Y Change
- {item?.profitMargin?.toFixed(2)}% + {abbreviateNumber(item?.profitMargin)}% import { screenWidth } from "$lib/store"; import { abbreviateNumber, sectorNavigation } from "$lib/utils"; + import TableHeader from "$lib/components/Table/TableHeader.svelte"; export let data; let rawData = data?.getSectorOverview; + let displayList = rawData; $: charNumber = $screenWidth < 640 ? 20 : 30; + + let columns = [ + { key: "industry", label: "Industry Name", align: "left" }, + { key: "numStocks", label: "# Stocks", align: "right" }, + { key: "totalMarketCap", label: "Market Cap", align: "right" }, + { key: "avgDividendYield", label: "Div. Yield", align: "right" }, + { key: "pe", label: "PE Ratio", align: "right" }, + { key: "profitMargin", label: "Profit Margin", align: "right" }, + { key: "avgChange1M", label: "1M Change", align: "right" }, + { key: "avgChange1Y", label: "1Y Change", align: "right" }, + ]; + + let sortOrders = { + industry: { order: "none", type: "string" }, + numStocks: { order: "none", type: "number" }, + totalMarketCap: { order: "none", type: "number" }, + avgDividendYield: { order: "none", type: "number" }, + pe: { order: "none", type: "number" }, + profitMargin: { order: "none", type: "number" }, + avgChange1M: { order: "none", type: "number" }, + avgChange1Y: { 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]; // 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); + };
@@ -15,32 +97,10 @@
- - - - - - - - - - + - {#each rawData as item} + {#each displayList as item} listItem?.title === item?.sector, )?.link} - class="sm:hover:text-white text-blue-400" + class="sm:hover:underline sm:hover:underline-offset-4 text-white" > {item?.sector?.length > charNumber ? item?.sector?.slice(0, charNumber) + "..." @@ -85,9 +145,11 @@
Industry NameStocksMarket CapDiv. YieldPE RatioProfit Margin1M Change1Y Change
- {item?.profitMargin?.toFixed(2)}% + {abbreviateNumber(item?.profitMargin)}% - import { goto } from "$app/navigation"; import { numberOfUnreadNotification, screenWidth } from "$lib/store"; import { abbreviateNumber } from "$lib/utils"; import { onMount } from "svelte";