diff --git a/src/routes/stock-screener/+page.svelte b/src/routes/stock-screener/+page.svelte index 7a1ad292..4e1655d2 100644 --- a/src/routes/stock-screener/+page.svelte +++ b/src/routes/stock-screener/+page.svelte @@ -1272,11 +1272,9 @@ defaultCondition: "over", defaultValue: "any", }, - analystRating: { label: "Analyst Rating", step: ["Strong Buy", "Buy", "Hold", "Sell", "Strong Sell"], - defaultCondition: "", defaultValue: "any", category: ["Most Popular", "Forecasts, Analysts & Price Targets"], @@ -1537,13 +1535,16 @@ ruleName = ""; selectedPopularStrategy = ""; selectedStrategy = item?.id ?? ""; + ruleOfList = strategyList?.find((item) => item.id === selectedStrategy)?.rules ?? []; - ruleOfList.forEach((rule) => { + + ruleOfList.forEach((rule) => { ruleCondition[rule.name] = rule.condition || allRules[rule.name].defaultCondition; valueMappings[rule.name] = rule.value || allRules[rule.name].defaultValue; }); + if (ruleOfList?.length === 0) { filteredData = []; displayResults = []; @@ -1564,6 +1565,7 @@ ) // Only include specific rules ?.map((rule) => [rule.name, new Set(rule.value)]), // Create Map from filtered rules ); + } function changeRule(state: string) { @@ -1591,7 +1593,7 @@ }; const loadWorker = async () => { - if (displayTableTab === "performance" || hoverStatus) { + if (['performance', 'analysts']?.includes(displayTableTab) || hoverStatus) { syncWorker.postMessage({ stockScreenerData, ruleOfList: [...ruleOfList, ...otherTabRules], @@ -1605,7 +1607,7 @@ }; const updateStockScreenerData = async () => { - if (displayTableTab === "performance" || hoverStatus) { + if (["performance","analysts"]?.includes(displayTableTab) || hoverStatus) { downloadWorker.postMessage({ ruleOfList: [...ruleOfList, ...otherTabRules], }); @@ -1789,7 +1791,7 @@ const handleKeyDown = (event) => { strategyList.find((item) => item.id === selectedStrategy).rules = ruleOfList; - const postData = { + const postData = { strategyId: selectedStrategy, rules: ruleOfList, }; @@ -1814,7 +1816,7 @@ const handleKeyDown = (event) => { } $: { - if (ruleOfList) { + if (ruleOfList ) { const ruleToUpdate = ruleOfList?.find((rule) => rule.name === ruleName); if (ruleToUpdate) { ruleToUpdate.value = valueMappings[ruleToUpdate.name]; @@ -2226,6 +2228,11 @@ const handleKeyDown = (event) => { { key: "name", label: "Name", align: "left" }, { key: "marketCap", label: "Market Cap", align: "right" }, ], + analysts: [ + { key: "symbol", label: "Symbol", align: "left" }, + { key: "name", label: "Name", align: "left" }, + { key: "marketCap", label: "Market Cap", align: "right" }, + ], filters: [ { key: "symbol", label: "Symbol", align: "left" }, { key: "name", label: "Name", align: "left" }, @@ -2239,6 +2246,11 @@ const handleKeyDown = (event) => { name: { order: "none", type: "string" }, marketCap: { order: "none", type: "number" }, }, + analysts: { + symbol: { order: "none", type: "string" }, + name: { order: "none", type: "string" }, + marketCap: { order: "none", type: "number" }, + }, filters: { symbol: { order: "none", type: "string" }, name: { order: "none", type: "string" }, @@ -2254,7 +2266,7 @@ const handleKeyDown = (event) => { sortOrders = { ...(baseSortOrdersMap[displayTableTab] || {}) }; const rulesList = - displayTableTab === "performance" ? tabRuleList : displayRules; + ["performance","analysts"]?.includes(displayTableTab) ? tabRuleList : displayRules; rulesList?.forEach((rule) => { if (rule.rule !== "marketCap") { columns.push({ @@ -2287,10 +2299,24 @@ const handleKeyDown = (event) => { .map((rule) => allRows.find((row) => row.rule === rule.name)) .filter(Boolean); + await updateStockScreenerData(); + } else if (displayTableTab === "analysts") { + hoverStatus = false; + otherTabRules = [ + { name: "marketCap", value: "any" }, + { name: "analystRating", value: "any" }, + { name: "analystCounter", value: "any" }, + { name: "priceTarget", value: "any" }, + { name: "upside", value: "any" }, + ]; + tabRuleList = otherTabRules + .map((rule) => allRows.find((row) => row.rule === rule.name)) + .filter(Boolean); + await updateStockScreenerData(); } } - +/* async function handleMouseOver() { if (displayTableTab !== "performance") { hoverStatus = true; @@ -2305,9 +2331,24 @@ const handleKeyDown = (event) => { ?.map((rule) => allRows.find((row) => row.rule === rule.name)) ?.filter(Boolean); + await updateStockScreenerData(); + } else if (displayTableTab !== "analysts") { + hoverStatus = true; + otherTabRules = [ + { name: "marketCap", value: "any" }, + { name: "analystRating", value: "any" }, + { name: "analystCounter", value: "any" }, + { name: "priceTarget", value: "any" }, + { name: "upside", value: "any" }, + ]; + tabRuleList = otherTabRules + ?.map((rule) => allRows.find((row) => row.rule === rule.name)) + ?.filter(Boolean); + await updateStockScreenerData(); } } + */ @@ -3058,7 +3099,7 @@ const handleKeyDown = (event) => { >