35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { useQueryClient } from "@tanstack/react-query";
|
|
import { useParams } from "react-router";
|
|
import {
|
|
type BrokerageAccount,
|
|
brokerageAccountsQueryKey,
|
|
} from "@/entities/brokerage-account";
|
|
import { portfolioErrorCode, usePortfolio } from "@/entities/portfolio";
|
|
import { useAuth } from "@/features/auth";
|
|
|
|
export function useAccountPageViewModel() {
|
|
const { accountId } = useParams();
|
|
const { accessToken } = useAuth();
|
|
const portfolio = usePortfolio(accountId, accessToken);
|
|
const account = useQueryClient()
|
|
.getQueryData<BrokerageAccount[]>(brokerageAccountsQueryKey)
|
|
?.find((item) => item.id === accountId);
|
|
if (portfolio.isError)
|
|
return {
|
|
state: "error" as const,
|
|
code: portfolioErrorCode(portfolio.error),
|
|
retry: () => portfolio.refetch(),
|
|
};
|
|
if (portfolio.isFetching || !portfolio.data)
|
|
return { state: "loading" as const };
|
|
if (!portfolio.data.positions.length && !portfolio.data.cashBalances.length)
|
|
return { state: "empty" as const, account, accountId, accessToken };
|
|
return {
|
|
state: "loaded" as const,
|
|
account,
|
|
accountId,
|
|
accessToken,
|
|
portfolio: portfolio.data,
|
|
};
|
|
}
|