From 180856bd8cbf40551ea944284fe053f9d45bc2b7 Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Sat, 14 Sep 2024 12:06:18 +0200 Subject: [PATCH] update screener page --- src/routes/stock-screener/+page.svelte | 51 ++++++++++++++++++++++---- src/routes/stock-screener/+page.ts | 28 +------------- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/src/routes/stock-screener/+page.svelte b/src/routes/stock-screener/+page.svelte index d73bab42..05b58d78 100644 --- a/src/routes/stock-screener/+page.svelte +++ b/src/routes/stock-screener/+page.svelte @@ -22,10 +22,10 @@ let searchQuery = ''; $: testList = []; - let ruleOfList = data?.getStrategy?.rules ?? []; let strategyList = data?.getAllStrategies; let selectedStrategy = strategyList?.at(0)?.id ?? ''; + let ruleOfList = strategyList?.at(0)?.rules ?? []; let displayRules = []; let selectedPopularStrategy = ''; @@ -238,8 +238,19 @@ async function handleDeleteStrategy() { toast.success('Strategy deleted successfully!', { style: 'border-radius: 200px; background: #333; color: #fff;'}); - strategyList= strategyList?.filter(item => item?.id !== selectedStrategy); + strategyList= strategyList?.filter(item => item?.id !== selectedStrategy) ?? []; selectedStrategy = strategyList?.at(0)?.id ?? ''; + ruleOfList = strategyList?.find(item => item.id === selectedStrategy)?.rules ?? [] + 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 = []; + } + checkedItems = new Set(ruleOfList.flatMap(rule => rule.value)); + await updateStockScreenerData(); } else if ( output === 'failure') { @@ -299,8 +310,11 @@ async function createStrategy(event) const closePopup = document.getElementById("addStrategy"); closePopup?.dispatchEvent(new MouseEvent('click')) selectedStrategy = output?.id; - ruleOfList = []; + if(strategyList?.length !== 0) { + ruleOfList = [] + } strategyList?.unshift(output); + selectedPopularStrategy = ''; } else { toast.error('Something went wrong. Please try again later!', { style: 'border-radius: 200px; background: #333; color: #fff;'}); @@ -310,6 +324,24 @@ async function createStrategy(event) } +async function switchStrategy(item) { + displayTableTab = 'general'; + ruleName = ''; + selectedPopularStrategy = ''; + selectedStrategy = item?.id ?? '' + ruleOfList = strategyList?.find(item => item.id === selectedStrategy)?.rules ?? [] + 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 = []; + } + checkedItems = new Set(ruleOfList.flatMap(rule => rule.value)); + await updateStockScreenerData(); +} + function changeRule(state: string) { searchTerm = ''; @@ -506,7 +538,9 @@ async function handleSave(printToast) { if(data?.user) { if(isSaved === false) - { + { + strategyList.find(item => item.id === selectedStrategy).rules = ruleOfList; + const postData = {'strategyId': selectedStrategy, 'rules': ruleOfList} const response = await fetch(data?.fastifyURL+'/save-strategy', { @@ -898,8 +932,8 @@ function handleInput(event) { {#each strategyList as item} - selectedStrategy = item?.id} class="cursor-pointer sm:hover:bg-[#27272A]"> - {item?.title} + switchStrategy(item)} class="{item?.id === selectedStrategy ? 'bg-[#27272A]' : ''} cursor-pointer sm:hover:bg-[#27272A]"> + {item?.title} ({item?.rules?.length}) {/each} @@ -936,12 +970,13 @@ function handleInput(event) {
Add Filters
- + + {#if data?.user && selectedStrategy?.length !== 0} - {#if data?.user && selectedStrategy?.length !== 0} +