update tabs

This commit is contained in:
MuslemRahimi 2024-09-04 22:13:58 +02:00
parent d9fec6fa27
commit 98759cbdef

View File

@ -15,6 +15,7 @@
let ruleOfList = data?.getStrategy?.rules ?? []; let ruleOfList = data?.getStrategy?.rules ?? [];
let displayRules = []; let displayRules = [];
let selectedPopularStrategy = ''; let selectedPopularStrategy = '';
let displayTableTab = 'general';
const title = data?.getStrategy?.title; const title = data?.getStrategy?.title;
let stockScreenerData = data?.getStockScreenerData?.filter(item => let stockScreenerData = data?.getStockScreenerData?.filter(item =>
@ -276,7 +277,6 @@ async function updateStockScreenerData() {
displayRules = allRows?.filter(row => ruleOfList?.some(rule => rule.name === row.rule)); displayRules = allRows?.filter(row => ruleOfList?.some(rule => rule.name === row.rule));
filteredData = filterStockScreenerData(); filteredData = filterStockScreenerData();
displayResults = filteredData?.slice(0, 50); displayResults = filteredData?.slice(0, 50);
} catch (error) { } catch (error) {
console.error('Error fetching new stock screener data:', error); console.error('Error fetching new stock screener data:', error);
@ -288,6 +288,7 @@ async function updateStockScreenerData() {
async function handleResetAll() { async function handleResetAll() {
selectedPopularStrategy = ''; selectedPopularStrategy = '';
displayTableTab = 'general';
ruleOfList = []; ruleOfList = [];
ruleOfList = [...ruleOfList]; ruleOfList = [...ruleOfList];
ruleName = ''; ruleName = '';
@ -459,7 +460,6 @@ function convertUnitToValue(input: string | number): number {
} }
function filterStockScreenerData() { function filterStockScreenerData() {
return stockScreenerData?.filter(item => { return stockScreenerData?.filter(item => {
for (const rule of ruleOfList) { for (const rule of ruleOfList) {
@ -546,7 +546,7 @@ $: {
} }
$: displayResults = filteredData?.slice(0, 50); $: displayResults = filteredData?.slice(0, 50);
console.log(displayResults)
$: isSaved = !ruleOfList; $: isSaved = !ruleOfList;
$: charNumber = $screenWidth < 640 ? 20 : 40; $: charNumber = $screenWidth < 640 ? 20 : 40;
@ -931,7 +931,7 @@ async function popularStrategy(state: string) {
<div class="mt-10 sm:mt-6 grid-cols-2 items-center border-gray-600 sm:grid sm:border-t lg:flex lg:space-x-1 lg:overflow-visible lg:px-1 lg:py-2"> <div class="mt-10 sm:mt-6 grid-cols-2 items-center sm:grid lg:flex lg:space-x-1 lg:overflow-visible lg:px-1 lg:py-2">
<h2 class="mb-1 whitespace-nowrap text-xl font-semibold text-white bp:text-[1.3rem] sm:mb-0"> <h2 class="mb-1 whitespace-nowrap text-xl font-semibold text-white bp:text-[1.3rem] sm:mb-0">
{filteredData?.length} Stocks {filteredData?.length} Stocks
</h2> </h2>
@ -939,12 +939,12 @@ async function popularStrategy(state: string) {
<nav class="grow py-2.5 sm:py-3 lg:py-1"> <nav class="grow py-2.5 sm:py-3 lg:py-1">
<ul class="flex flex-row items-center space-x-2 whitespace-nowrap text-base"> <ul class="flex flex-row items-center space-x-2 whitespace-nowrap text-base">
<li> <li>
<button class="text-lg block text-white rounded-md px-2 py-1 focus:outline-none bg-[#27272A] font-semibold"> <button on:click={() => displayTableTab = 'general'} class="text-lg block text-white rounded-md px-2 py-1 focus:outline-none sm:hover:bg-[#27272A] {displayTableTab === 'general' ? 'font-semibold bg-[#27272A]' : ''}">
General General
</button> </button>
</li> </li>
<li> <li>
<button class="text-lg flex flex-row items-center relative block rounded-md px-1.5 py-1 focus:outline-none"> <button on:click={() => displayTableTab = 'filters'} class="text-lg flex flex-row items-center relative block rounded-md px-2 py-1 sm:hover:bg-[#27272A] {displayTableTab === 'filters' ? 'font-semibold bg-[#27272A]' : ''} focus:outline-none">
<span class="text-white">Filters</span> <span class="text-white">Filters</span>
<span class="ml-2 rounded-full avatar w-5 h-5 text-xs font-semibold text-white text-center flex-shrink-0 <span class="ml-2 rounded-full avatar w-5 h-5 text-xs font-semibold text-white text-center flex-shrink-0
flex items-center justify-center {ruleOfList?.length !== 0 ? 'bg-red-500' : 'bg-gray-600'}"> flex items-center justify-center {ruleOfList?.length !== 0 ? 'bg-red-500' : 'bg-gray-600'}">
@ -988,6 +988,7 @@ async function popularStrategy(state: string) {
{#if displayResults?.length !== 0} {#if displayResults?.length !== 0}
{#if displayTableTab === 'general'}
<div class="w-full rounded-lg overflow-x-scroll "> <div class="w-full rounded-lg overflow-x-scroll ">
<table class="table table-sm table-compact w-full bg-[#09090B] border-bg-[#09090B]"> <table class="table table-sm table-compact w-full bg-[#09090B] border-bg-[#09090B]">
<thead> <thead>
@ -1064,6 +1065,56 @@ async function popularStrategy(state: string) {
</tbody> </tbody>
</table> </table>
</div> </div>
{:else if displayTableTab === 'filters'}
<div class="w-full rounded-lg overflow-x-scroll ">
<table class="table table-sm table-compact w-full bg-[#09090B] border-bg-[#09090B]">
<thead>
<tr class="border-b-[#1A1A27]">
<th class="text-white bg-[#09090B] text-sm sm:text-[1rem] font-semibold border-b-[#09090B]">Symbol</th>
<th class="text-white hidden sm:table-cell bg-[#09090B] text-sm sm:text-[1rem] font-semibold border-b-[#09090B]">Company Name</th>
<th class="text-white text-end bg-[#09090B] text-sm sm:text-[1rem] font-semibold border-b-[#09090B]">Market Cap</th>
{#each displayRules as row (row?.rule)}
{#if row?.rule !== 'marketCap'}
<th class="text-white text-end bg-[#09090B] text-sm sm:text-[1rem] font-semibold border-b-[#09090B]">{row?.label}</th>
{/if}
{/each}
</tr>
</thead>
<tbody>
{#each displayResults as item (item?.symbol)}
<tr on:click={() => {handleSave(false); goto("/stocks/"+item?.symbol)}} class="sm:hover:bg-[#245073] sm:hover:bg-opacity-[0.2] bg-[#09090B] border-b-[#09090B] odd:bg-[#27272A] cursor-pointer">
<td class="border-b-[#09090B] whitespace-nowrap">
<div class="flex flex-col items-start">
<span class="text-blue-400 text-sm sm:text-[1rem]">{item?.symbol}</span>
<span class="text-white text-xs sm:hidden">{item?.name?.length > charNumber ? item?.name?.slice(0, charNumber) + "..." : item?.name}</span>
</div>
</td>
<td class="hidden sm:table-cell whitespace-nowrap text-[1rem] text-white border-b-[#09090B]">
{item?.name?.length > charNumber ? item?.name?.slice(0, charNumber) + "..." : item?.name}
</td>
<td class="whitespace-nowrap text-sm sm:text-[1rem] text-end text-white border-b-[#09090B]">
{abbreviateNumber(item?.marketCap, true)}
</td>
{#each displayRules as row (row?.rule)}
{#if row?.rule !== 'marketCap'}
<td class="whitespace-nowrap text-sm sm:text-[1rem] text-end text-white border-b-[#09090B]">
{#if row?.rule === 'analystRating'}
{item?.analystRating}
{:else if ['fundamentalAnalysis','trendAnalysis']?.includes(row?.rule)}
{item[row?.rule]?.accuracy}%
{:else}
{abbreviateNumber(item[row?.rule])}
{/if}
</td>
{/if}
{/each}
</tr>
{/each}
</tbody>
</table>
</div>
{/if}
{:else} {:else}