feat: show persisted investment data and sync state

Consume the provided resource-envelope API snapshot. Preserve financial snapshots during
refresh, observe synchronization without importing, and fence late responses across
account and connection changes.
This commit is contained in:
2026-09-26 21:22:49 +03:00
parent b987fd8e78
commit 4e5f564fa1
81 changed files with 4714 additions and 1420 deletions
@@ -63,12 +63,10 @@ const StockPageView: FC<StockPageViewProps> = (props) => {
</div>
<Button
variant="subtle"
onClick={() => {
vm.stockState.retry();
vm.quoteState.retry();
}}
onClick={vm.refresh}
disabled={vm.refreshing}
>
{t("stock.refreshPrice")}
{t("investment.refresh")}
</Button>
</Group>
{vm.company?.description ? (
@@ -76,8 +74,8 @@ const StockPageView: FC<StockPageViewProps> = (props) => {
{vm.company.description}
</Text>
) : null}
{vm.stockState.error || vm.quoteState.error ? (
<Alert role="alert" color="orange" mt="md">
{vm.refreshError || vm.stockState.error || vm.quoteState.error ? (
<Alert role="status" aria-live="polite" color="orange" mt="md">
{t(vm.quote ? "accounts.refreshError" : "stock.sectionError")}
</Alert>
) : null}
@@ -164,7 +162,7 @@ const StockPageView: FC<StockPageViewProps> = (props) => {
{vm.company ? (
<Stack gap="lg">
{vm.company.unavailable.length ? (
<Alert color="orange">
<Alert color="orange" role="status" aria-live="polite">
<Group justify="space-between">
<Text size="sm">{t("stock.partialCompany")}</Text>
<Button