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 @@
Updated
{lastTradingDay}
-
-
-
-
-
-
+
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 @@
>