From a67b234bf2111c23355b632c9fe224d01d6ebdea Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Sat, 16 Nov 2024 10:42:27 +0100 Subject: [PATCH] ui fixes --- src/lib/components/ShareHolders.svelte | 4 +- src/routes/market-mover/[slug]/+page.svelte | 186 +++--------------- .../insider/congress-trading/+page.svelte | 32 ++- 3 files changed, 51 insertions(+), 171 deletions(-) diff --git a/src/lib/components/ShareHolders.svelte b/src/lib/components/ShareHolders.svelte index d12440b9..a3691cc9 100644 --- a/src/lib/components/ShareHolders.svelte +++ b/src/lib/components/ShareHolders.svelte @@ -244,7 +244,7 @@ maximumFractionDigits: 0, }).format(rawData?.investorsHolding)} - Hedge Funds hold a total of + Institutions hold a total of {abbreviateNumber(rawData?.numberOf13Fshares)} @@ -309,7 +309,7 @@
- Hedge Funds are holding {callPercentage > 55 + Institutions are holding {callPercentage > 55 ? "more Calls Contracts as Puts Contracts, indicating a bullish sentiment." : callPercentage < 45 ? "more Puts Contracts as Calls Contracts, indicating a bearish sentiment." diff --git a/src/routes/market-mover/[slug]/+page.svelte b/src/routes/market-mover/[slug]/+page.svelte index 16dce3ce..c378ae48 100644 --- a/src/routes/market-mover/[slug]/+page.svelte +++ b/src/routes/market-mover/[slug]/+page.svelte @@ -4,7 +4,7 @@ import TableHeader from "$lib/components/Table/TableHeader.svelte"; import HoverStockChart from "$lib/components/HoverStockChart.svelte"; import InfoModal from "$lib/components/InfoModal.svelte"; - import DownloadData from "$lib/components/DownloadData.svelte"; + import Table from "$lib/components/Table/Table.svelte"; import { afterUpdate } from "svelte"; export let data; @@ -26,87 +26,26 @@ "5Y": "5 Year title", }; let rawData = data?.getMarketMover[data?.getParams]; - let stockList = rawData[timePeriod]; + + const excludedRules = new Set([ + "volume", + "price", + "changesPercentage", + "eps", + "marketCap", + ]); + + const defaultList = [ + { name: "Market Cap", rule: "marketCap" }, + { name: "Price", rule: "price" }, + { name: "% Change", rule: "changesPercentage" }, + { name: "Volume", rule: "volume" }, + ]; function selectTimeInterval(state) { timePeriod = state; - stockList = rawData[timePeriod]; } - let columns = [ - { key: "rank", label: "Rank", align: "center" }, - { key: "symbol", label: "Symbol", align: "left" }, - { key: "name", label: "Name", align: "left" }, - { key: "changesPercentage", label: "% Change", align: "right" }, - { key: "price", label: "Price", align: "right" }, - { key: "marketCap", label: "Market Cap", align: "right" }, - { key: "volume", label: "Volume", align: "right" }, - ]; - - let sortOrders = { - rank: { order: "none", type: "number" }, - symbol: { order: "none", type: "string" }, - name: { order: "none", type: "string" }, - changesPercentage: { order: "none", type: "number" }, - price: { order: "none", type: "number" }, - marketCap: { order: "none", type: "number" }, - volume: { 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"]; - 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 = [...rawData[timePeriod]]; // 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 = [...rawData[timePeriod]].sort(compareValues); - }; - let previousTimePeriod; let previousPage = data?.getParams; let title; @@ -116,7 +55,6 @@ previousTimePeriod = timePeriod; previousPage = data?.getParams; rawData = data?.getMarketMover[data?.getParams]; - stockList = rawData[timePeriod]; title = data?.getParams?.charAt(0)?.toUpperCase() + data?.getParams?.slice(1); } @@ -249,94 +187,14 @@ {lastTradingDay}
- -
- -
- -
- - - - - - {#each stockList as item} - - - - - - - - - - - - - - - {/each} - -
- {item?.rank} - - - - {item?.name?.length > charNumber - ? item?.name?.slice(0, charNumber) + "..." - : item?.name} - - {#if item?.changesPercentage >= 0} - +{item?.changesPercentage >= 1000 - ? abbreviateNumber(item?.changesPercentage) - : item?.changesPercentage?.toFixed(2)}% - {:else} - {item?.changesPercentage <= -1000 - ? abbreviateNumber(item?.changesPercentage) - : item?.changesPercentage?.toFixed(2)}% - - {/if} - - {item?.price?.toFixed(2)} - - {item?.marketCap !== null - ? abbreviateNumber(item?.marketCap) - : "-"} - - {item?.volume !== null - ? abbreviateNumber(item?.volume) - : "-"} -
-
+ diff --git a/src/routes/stocks/[tickerID]/insider/congress-trading/+page.svelte b/src/routes/stocks/[tickerID]/insider/congress-trading/+page.svelte index 280cf082..2b8e6a6f 100644 --- a/src/routes/stocks/[tickerID]/insider/congress-trading/+page.svelte +++ b/src/routes/stocks/[tickerID]/insider/congress-trading/+page.svelte @@ -17,6 +17,26 @@ let cloudFrontUrl = import.meta.env.VITE_IMAGE_URL; + function getAbbreviatedName(fullName) { + if (fullName === null) { + return "-"; + } + + const names = fullName?.split(" "); + let firstName = names[0]; + // Remove any title prefix (e.g. Dr., Mr., Mrs., Ms.) + if (names.length > 1 && /^(Dr|Mr|Mrs|Ms)\.?$/i.test(names[0])) { + firstName = names[1]; + names?.splice(0, 1); + } + const initials = names + ?.slice(0, -1) + ?.map((name) => name?.charAt(0)) + ?.join(". "); + const lastName = names[names?.length - 1]; + return `${firstName?.charAt(0)}. ${lastName}`; + } + function backToTop() { window.scrollTo({ top: 0, @@ -308,7 +328,7 @@ >
-
+
{item?.representative?.replace("_", " ")}{getAbbreviatedName( + item?.representative?.replace("_", " "), + )} - {item?.party} + {item?.party}