This commit is contained in:
MuslemRahimi 2024-07-12 19:12:09 +02:00
parent c7654d67ba
commit 2460f5920e
10 changed files with 39 additions and 124 deletions

97
package-lock.json generated
View File

@ -55,8 +55,7 @@
"ua-parser-js": "^1.0.37",
"util": "^0.12.5",
"uuid": "^9.0.1",
"vaul-svelte": "^0.3.0",
"xlsx": "^0.18.5"
"vaul-svelte": "^0.3.0"
},
"devDependencies": {
"@playwright/test": "^1.43.1",
@ -3235,14 +3234,6 @@
"node": ">=0.4.0"
}
},
"node_modules/adler-32": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
"integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@ -3686,18 +3677,6 @@
}
]
},
"node_modules/cfb": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz",
"integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
"dependencies": {
"adler-32": "~1.3.0",
"crc-32": "~1.2.0"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/chai": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz",
@ -3870,14 +3849,6 @@
"@types/estree": "^1.0.0"
}
},
"node_modules/codepage": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
"integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/color": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@ -4014,17 +3985,6 @@
"node": ">= 0.6"
}
},
"node_modules/crc-32": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
"bin": {
"crc32": "bin/crc32.njs"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@ -4912,14 +4872,6 @@
"node": ">= 18"
}
},
"node_modules/frac": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
@ -7493,17 +7445,6 @@
"node": ">=0.10.0"
}
},
"node_modules/ssf": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
"integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
"dependencies": {
"frac": "~1.1.2"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/stackback": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
@ -8787,22 +8728,6 @@
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
"node_modules/wmf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
"integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/word": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
"integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/wrap-ansi": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
@ -8936,26 +8861,6 @@
}
}
},
"node_modules/xlsx": {
"version": "0.18.5",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
"integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
"dependencies": {
"adler-32": "~1.3.0",
"cfb": "~1.2.1",
"codepage": "~1.15.0",
"crc-32": "~1.2.1",
"ssf": "~0.11.2",
"wmf": "~1.0.1",
"word": "~0.3.0"
},
"bin": {
"xlsx": "bin/xlsx.njs"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/xml-name-validator": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",

View File

@ -97,8 +97,7 @@
"ua-parser-js": "^1.0.37",
"util": "^0.12.5",
"uuid": "^9.0.1",
"vaul-svelte": "^0.3.0",
"xlsx": "^0.18.5"
"vaul-svelte": "^0.3.0"
},
"description": "UI of stocknear - Stock Analysis & Community Platform for Small Investors.",
"main": "svelte.config.js",

View File

@ -1,8 +1,9 @@
<script lang='ts'>
//import ProgressBar from 'progressbar.js';
import {currentPortfolioPrice, stockTicker, screenWidth} from '$lib/store';
import {stockTicker, screenWidth} from '$lib/store';
import { abbreviateNumber } from '$lib/utils';
export let lastPrice;
export let analystRating = {};
@ -26,9 +27,9 @@ if ($stockTicker && typeof window !== 'undefined' && typeof analystRating !== 'u
sellCount = (analystRating?.Sell/numOfAnalyst * 100)?.toFixed(2);
priceTarget = analystRating?.priceTarget
consensusRating = analystRating?.consensusRating;
console.log(lastPrice)
try {
changesPercentage = ((priceTarget/$currentPortfolioPrice -1)*100)?.toFixed(2) ?? 0;
changesPercentage = ((priceTarget/lastPrice -1)*100)?.toFixed(2) ?? 0;
} catch(e) {
changesPercentage = 0;
}

View File

@ -7,8 +7,8 @@ import SimilarTickerCard from '$lib/components/SimilarTickerCard.svelte';
import TopETFTickerHolder from '$lib/components/TopETFTickerHolder.svelte';
export let logoUrl;
export let stockDeck;
export let lastPrice;
export let similarstock;
export let topETFHolder;
export let analystRating
@ -19,10 +19,10 @@ export let analystRating
<TickerInfoCard logoUrl={logoUrl} stockDeck={stockDeck} />
<TickerInfoCard stockDeck={stockDeck} />
<AnalystCard analystRating={analystRating} />
<AnalystCard lastPrice={lastPrice} analystRating={analystRating} />
<ESGCard stockDeck={stockDeck} />

View File

@ -1,5 +1,4 @@
import { writable } from 'svelte/store';
import { write } from 'xlsx';
// Function to set cache data for a specific tickerID
export const setCache = (key, data, name) => {

View File

@ -62,7 +62,6 @@ async function loadSearchData() {
let isScrolled = false;
let logoUrl;
let userWatchList = data?.getUserWatchlist ?? [];
let isTickerIncluded;
@ -390,7 +389,6 @@ $: {
{
stockDeck = data?.getStockDeck;
logoUrl = stockDeck[0]?.image;
similarstock = data?.getSimilarStock;
topETFHolder = data?.getTopETFHolder;
$currentPortfolioPrice = data?.getStockQuote?.price;
@ -758,8 +756,8 @@ $: {
<!--Start Company Info -->
<Sidecard
logoUrl = {logoUrl}
stockDeck = {stockDeck}
lastPrice = {data?.getStockQuote?.price}
analystRating ={data?.getAnalystRating}
similarstock = {similarstock}
topETFHolder = {topETFHolder}

View File

@ -2,7 +2,7 @@
import { Chart } from 'svelte-echarts'
import {numberOfUnreadNotification, displayCompanyName, stockTicker} from '$lib/store';
import { abbreviateNumber,sumQuarterlyResultsByYear } from '$lib/utils';
import * as XLSX from 'xlsx';
//import * as XLSX from 'xlsx';
export let data;
@ -316,6 +316,7 @@ function normalizer(value) {
return options;
}
/*
const exportData = (format = 'csv') => {
const data = fullStatement;
if (!data || data.length === 0) {
@ -360,6 +361,7 @@ const exportData = (format = 'csv') => {
XLSX.writeFile(workbook, `${$stockTicker.toLowerCase()}-balance-sheet-statement.xlsx`);
}
};
*/
@ -486,13 +488,14 @@ $: {
</label>
<!--
<label for="exportDataModal" class="ml-3 mr-2 sm:mr-0 cursor-pointer bg-[#202020] sm:hover:bg-[#313131] duration-100 transition ease-in-out px-4 py-1.5 rounded-lg shadow-md">
<div class="flex flex-row items-center">
<span class="m-auto mr-0.5 text-white text-sm">Export</span>
<svg class="inline-block w-4 h-4 ml-1 mt-1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><g transform="rotate(180 512 512)"> <path fill="#fff" d="m488.832 344.32l-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872l319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0z"/></g></svg>
</div>
</label>
-->
</div>
@ -869,6 +872,7 @@ $: {
<!--Start Export -->
<!--
<input type="checkbox" id="exportDataModal" class="modal-toggle" />
<dialog id="exportDataModal" class="modal modal-bottom sm:modal-middle ">
@ -929,6 +933,7 @@ $: {
</div>
</dialog>
-->
<!--End Export-->

View File

@ -1,10 +1,8 @@
<script lang="ts">
import Chart from '$lib/components/Chart.svelte'
import { page } from '$app/stores';
import {numberOfUnreadNotification,displayCompanyName, stockTicker} from '$lib/store';
//import {Katex} from '$lib/components';
import { abbreviateNumber, sumQuarterlyResultsByYear } from '$lib/utils';
import * as XLSX from 'xlsx';
//import * as XLSX from 'xlsx';
export let data;
@ -282,7 +280,7 @@ const options = {
return options;
}
/*
const exportData = (format = 'csv') => {
const data = fullStatement;
if (!data || data.length === 0) {
@ -327,6 +325,8 @@ const exportData = (format = 'csv') => {
XLSX.writeFile(workbook, `${$stockTicker.toLowerCase()}-cashflow-statement.xlsx`);
}
};
*/
fullStatement = data?.getCashFlowStatement;
@ -450,13 +450,14 @@ $: {
</label>
<!--
<label for="exportDataModal" class="ml-3 mr-2 sm:mr-0 cursor-pointer bg-[#202020] sm:hover:bg-[#313131] duration-100 transition ease-in-out px-4 py-1.5 rounded-lg shadow-md">
<div class="flex flex-row items-center">
<span class="m-auto mr-0.5 text-white text-sm">Export</span>
<svg class="inline-block w-4 h-4 ml-1 mt-1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><g transform="rotate(180 512 512)"> <path fill="#fff" d="m488.832 344.32l-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872l319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0z"/></g></svg>
</div>
</label>
-->
</div>
@ -787,6 +788,7 @@ $: {
<!--Start Export -->
<!--
<input type="checkbox" id="exportDataModal" class="modal-toggle" />
<dialog id="exportDataModal" class="modal modal-bottom sm:modal-middle ">
@ -847,6 +849,7 @@ $: {
</div>
</dialog>
-->
<!--End Export-->
<style>

View File

@ -2,7 +2,7 @@
import Chart from '$lib/components/Chart.svelte'
import {numberOfUnreadNotification,displayCompanyName, stockTicker} from '$lib/store';
import { abbreviateNumber, sumQuarterlyResultsByYear } from '$lib/utils';
import * as XLSX from 'xlsx';
//import * as XLSX from 'xlsx';
export let data;
@ -270,7 +270,7 @@ function normalizer(value) {
return options;
}
/*
const exportData = (format = 'csv') => {
const data = fullStatement;
if (!data || data.length === 0) {
@ -315,7 +315,7 @@ const exportData = (format = 'csv') => {
XLSX.writeFile(workbook, `${$stockTicker.toLowerCase()}-income-statement.xlsx`);
}
};
*/
fullStatement = data?.getIncomeStatement;
@ -441,13 +441,14 @@ const exportData = (format = 'csv') => {
</label>
<!--
<label for="exportDataModal" class="ml-3 mr-2 sm:mr-0 cursor-pointer bg-[#202020] sm:hover:bg-[#313131] duration-100 transition ease-in-out px-4 py-1.5 rounded-lg shadow-md">
<div class="flex flex-row items-center">
<span class="m-auto mr-0.5 text-white text-sm">Export</span>
<svg class="inline-block w-4 h-4 ml-1 mt-1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><g transform="rotate(180 512 512)"> <path fill="#fff" d="m488.832 344.32l-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872l319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0z"/></g></svg>
</div>
</label>
-->
</div>
@ -754,6 +755,7 @@ const exportData = (format = 'csv') => {
<!--Start Export -->
<!--
<input type="checkbox" id="exportDataModal" class="modal-toggle" />
<dialog id="exportDataModal" class="modal modal-bottom sm:modal-middle ">
@ -810,6 +812,7 @@ const exportData = (format = 'csv') => {
</div>
</dialog>
-->
<!--End Export-->

View File

@ -2,7 +2,7 @@
import { Chart } from 'svelte-echarts'
import {numberOfUnreadNotification, displayCompanyName, stockTicker} from '$lib/store';
import { sumQuarterlyResultsByYear } from '$lib/utils';
import * as XLSX from 'xlsx';
//import * as XLSX from 'xlsx';
export let data;
@ -253,7 +253,7 @@ function plotData()
return options;
}
/*
const exportData = (format = 'csv') => {
const data = fullStatement;
if (!data || data.length === 0) {
@ -299,7 +299,7 @@ const exportData = (format = 'csv') => {
}
};
*/
fullStatement = data?.getRatiosStatement;
@ -423,14 +423,14 @@ $: {
</label>
<!--
<label for="exportDataModal" class="ml-3 mr-2 sm:mr-0 cursor-pointer bg-[#202020] sm:hover:bg-[#313131] duration-100 transition ease-in-out px-4 py-1.5 rounded-lg shadow-md">
<div class="flex flex-row items-center">
<span class="m-auto mr-0.5 text-white text-sm">Export</span>
<svg class="inline-block w-4 h-4 ml-1 mt-1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><g transform="rotate(180 512 512)"> <path fill="#fff" d="m488.832 344.32l-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872l319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0z"/></g></svg>
</div>
</label>
-->
</div>
<ul class="text-[0.8rem] font-medium text-center w-56 pt-3 sm:w-56 mb-5 flex justify-center sm:justify-end items-center ml-auto">
@ -738,6 +738,7 @@ $: {
<!--Start Export -->
<!--
<input type="checkbox" id="exportDataModal" class="modal-toggle" />
<dialog id="exportDataModal" class="modal modal-bottom sm:modal-middle ">
@ -798,6 +799,7 @@ $: {
</div>
</dialog>
-->
<!--End Export-->