From a49f337e1c14f793c3ac011870487012d1cc2090 Mon Sep 17 00:00:00 2001 From: pokhrelashok2 Date: Tue, 28 Nov 2023 14:21:41 +0545 Subject: [PATCH] Share results page optimize --- app/result/page.tsx | 64 ++++++++++++++++++++++++++------------- app/users/page.tsx | 14 ++++----- controller/src/lib.rs | 29 +++++++++--------- src-tauri/src/main.rs | 4 +-- src-tauri/tauri.conf.json | 2 +- 5 files changed, 68 insertions(+), 45 deletions(-) diff --git a/app/result/page.tsx b/app/result/page.tsx index f624959..649a97a 100644 --- a/app/result/page.tsx +++ b/app/result/page.tsx @@ -1,11 +1,12 @@ "use client"; import useInvoke from "@/hooks/useInvoke"; import Wrapper from "../_components/Wrapper"; -import { CompanyApplication, IpoResult } from "../../types"; +import { CompanyApplication, IpoResult, User } from "../../types"; import SectionLoading from "../_components/SectionLoading"; import Button from "../_components/Button"; import { Fragment, useEffect, useState } from "react"; import { Dialog, Transition } from "@headlessui/react"; +import LoadingSpinner from "../_components/LoadingSpinner"; function ResultPage() { const { data: shares, loading } = useInvoke( @@ -13,16 +14,28 @@ function ResultPage() { [], true ); + const { data: users } = useInvoke("get_users", [], true); const [selectedShare, setSelectedShare] = useState( null ); - const { - data: result, - handle: getResult, - loading: isFetchingShares, - } = useInvoke("get_share_results", []); + const [report, setReport] = useState>({}); + const { handle: getResult, loading: isFetchingShares } = useInvoke( + "get_share_results", + [] + ); + useEffect(() => { - if (selectedShare) getResult({ script: selectedShare.scrip }); + if (!selectedShare || users.length === 0) return; + setReport({}); + users.forEach((user) => { + getResult({ script: selectedShare.scrip, user }) + .then((result) => { + setReport((old) => ({ ...old, [user.id as string]: result })); + }) + .catch((e: string) => { + setReport((old) => ({ ...old, [user.id as string]: e })); + }); + }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedShare]); @@ -48,7 +61,8 @@ function ResultPage() { onClose={() => { setSelectedShare(null); }} - result={result} + users={users} + result={report} /> )} @@ -60,11 +74,13 @@ function ViewResultDialog({ result, onClose, loading, + users, }: { + users: User[]; share: CompanyApplication; onClose: () => any; loading: boolean; - result: IpoResult[]; + result: Record; }) { return ( @@ -112,30 +128,36 @@ function ViewResultDialog({ {!loading && (
Alloted{" "} - {result.filter((r) => r.status === "Alloted").length}/ - {result.length} + { + Object.values(result).filter((r) => r === "Alloted") + .length + } + /{users.length}
)} -
- {result.map((res, ind) => { +
+ {users.map((user) => { return ( ); })} - {loading && }
diff --git a/app/users/page.tsx b/app/users/page.tsx index 5ca1149..c8e0700 100644 --- a/app/users/page.tsx +++ b/app/users/page.tsx @@ -124,20 +124,20 @@ function ManageUsers() { return ( @@ -148,8 +148,8 @@ function ManageUsers() { > diff --git a/controller/src/lib.rs b/controller/src/lib.rs index 2f2ac5d..e4f096b 100644 --- a/controller/src/lib.rs +++ b/controller/src/lib.rs @@ -108,20 +108,21 @@ impl Controller { } } - pub async fn get_results(&mut self, script: String) -> Vec { - let mut results: Vec = vec![]; - let users: Vec = self.get_users().unwrap(); - for user in users.iter() { - let result = self - .meroshare - .get_company_result(user, script.as_str()) - .await; - results.push(IPOResult { - user: user.name.clone(), - status: result, - }); - } - return results; + pub async fn get_results(&mut self, script: String, user: &User) -> String { + // let mut results: Vec = vec![]; + // let users: Vec = self.get_users().unwrap(); + // for user in users.iter() { + let result = self + .meroshare + .get_company_result(user, script.as_str()) + .await; + // results.push(IPOResult { + // user: user.name.clone(), + // status: result, + // }); + // } + // return results; + return result; } pub async fn get_user_portfolio(&mut self, id: String) -> Portfolio { diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 790c3a4..182d16a 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -73,10 +73,10 @@ async fn get_application_report() -> Vec { return res; } #[tauri::command] -async fn get_share_results(script: String) -> Vec { +async fn get_share_results(script: String, user: User) -> String { let controller = CONTROLLER.clone(); let mut controller_lock = controller.lock().await; - let res = controller_lock.get_results(script).await; + let res = controller_lock.get_results(script, &user).await; return res; } #[tauri::command] diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e8d7030..24a1a5d 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "share-sathi", - "version": "2.0.3" + "version": "2.0.4" }, "tauri": { "allowlist": {