Skip to content

Commit 8803c32

Browse files
committed
tree-reports: migrate to Svelte 5 runes
1 parent 75a1899 commit 8803c32

File tree

17 files changed

+143
-112
lines changed

17 files changed

+143
-112
lines changed

frontend/src/reports/commodities/index.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { get } from "../../api";
2-
import type { FavaChart } from "../../charts";
32
import { LineChart } from "../../charts/line";
43
import { domHelpers } from "../../charts/tooltip";
54
import { day } from "../../format";
@@ -8,14 +7,7 @@ import { getURLFilters } from "../../stores/filters";
87
import { Route } from "../route";
98
import CommoditiesSvelte from "./Commodities.svelte";
109

11-
export const commodities = new Route<{
12-
commodities: {
13-
base: string;
14-
quote: string;
15-
prices: [Date, number][];
16-
}[];
17-
charts: FavaChart[];
18-
}>(
10+
export const commodities = new Route(
1911
"commodities",
2012
CommoditiesSvelte,
2113
async (url) =>

frontend/src/reports/documents/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import { get } from "../../api";
2-
import type { Document } from "../../entries";
32
import { _ } from "../../i18n";
43
import { getURLFilters } from "../../stores/filters";
54
import { Route } from "../route";
65
import Documents from "./Documents.svelte";
76

8-
export const documents = new Route<{ documents: Document[] }>(
7+
export const documents = new Route(
98
"documents",
109
Documents,
1110
async (url: URL) =>

frontend/src/reports/editor/index.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
import type { LanguageSupport } from "@codemirror/language";
2-
31
import { get } from "../../api";
4-
import type { SourceFile } from "../../api/validators";
52
import { getBeancountLanguageSupport } from "../../codemirror/beancount";
63
import { _ } from "../../i18n";
74
import { Route } from "../route";
85
import Editor from "./Editor.svelte";
96

10-
export const editor = new Route<{
11-
source: SourceFile;
12-
beancount_language_support: LanguageSupport;
13-
}>(
7+
export const editor = new Route(
148
"editor",
159
Editor,
1610
async (url: URL) =>

frontend/src/reports/events/index.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { get } from "../../api";
2-
import type { Event } from "../../entries";
32
import { _ } from "../../i18n";
43
import { getURLFilters } from "../../stores/filters";
54
import { Route } from "../route";
65
import Events from "./Events.svelte";
76

8-
export const events = new Route<{
9-
events: Event[];
10-
}>(
7+
export const events = new Route(
118
"events",
129
Events,
1310
async (url: URL) =>

frontend/src/reports/holdings/index.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { get } from "../../api";
22
import { getUrlPath } from "../../helpers";
33
import { _ } from "../../i18n";
44
import { getURLFilters } from "../../stores/filters";
5-
import type { QueryResultTable } from "../query/query_table";
65
import { Route } from "../route";
76
import Holdings from "./Holdings.svelte";
87

@@ -67,11 +66,7 @@ ORDER BY cost_currency
6766
`.trim(),
6867
};
6968

70-
export const holdings = new Route<{
71-
aggregation_key: HoldingsReportType;
72-
query_string: string;
73-
query_result_table: QueryResultTable;
74-
}>(
69+
export const holdings = new Route(
7570
"holdings",
7671
Holdings,
7772
async (url) => {

frontend/src/reports/route.svelte.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ export interface FrontendRoute {
1515
}
1616

1717
/** This class pairs the components and their load functions to use them in a type-safe way. */
18-
export class Route<T extends Record<string, unknown>> implements FrontendRoute {
18+
// The base type for the component props needs to be typed as Record<string,any> to allow for T
19+
// to be correctly inferred from the imported svelte components
20+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
21+
export class Route<T extends Record<string, any>> implements FrontendRoute {
1922
/** The currently rendered instance - if loading failed, we render an error component. */
2023
private instance?:
2124
| { error: false; component: Record<string, unknown>; props: T }
@@ -46,7 +49,7 @@ export class Route<T extends Record<string, unknown>> implements FrontendRoute {
4649
/** Destroy any components that might be rendered by this route. */
4750
destroy(): void {
4851
if (this.instance !== undefined) {
49-
unmount(this.instance.component);
52+
void unmount(this.instance.component);
5053
}
5154
this.instance = undefined;
5255
}

frontend/src/reports/tree_reports/BalanceSheet.svelte

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
import { parseChartData } from "../../charts";
33
import ChartSwitcher from "../../charts/ChartSwitcher.svelte";
44
import { chartContext } from "../../charts/context";
5-
import type { AccountTreeNode } from "../../charts/hierarchy";
65
import TreeTable from "../../tree-table/TreeTable.svelte";
6+
import type { TreeReportProps } from ".";
77
8-
export let charts: unknown;
9-
export let trees: AccountTreeNode[];
10-
export let date_range: { begin: Date; end: Date } | null;
8+
let { charts, trees, date_range }: TreeReportProps = $props();
9+
let end = $derived(date_range?.end ?? null);
1110
12-
$: chartData = parseChartData(charts, $chartContext).unwrap_or(null);
11+
let chartData = $derived(
12+
parseChartData(charts, $chartContext).unwrap_or(null),
13+
);
1314
</script>
1415

1516
{#if chartData}
@@ -19,12 +20,12 @@
1920
<div class="row">
2021
<div class="column">
2122
{#each trees.slice(0, 1) as tree}
22-
<TreeTable {tree} end={date_range?.end ?? null} />
23+
<TreeTable {tree} {end} />
2324
{/each}
2425
</div>
2526
<div class="column">
2627
{#each trees.slice(1) as tree}
27-
<TreeTable {tree} end={date_range?.end ?? null} />
28+
<TreeTable {tree} {end} />
2829
{/each}
2930
</div>
3031
</div>

frontend/src/reports/tree_reports/IncomeStatement.svelte

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
import { parseChartData } from "../../charts";
33
import ChartSwitcher from "../../charts/ChartSwitcher.svelte";
44
import { chartContext } from "../../charts/context";
5-
import type { AccountTreeNode } from "../../charts/hierarchy";
65
import TreeTable from "../../tree-table/TreeTable.svelte";
6+
import type { TreeReportProps } from ".";
77
8-
export let charts: unknown;
9-
export let trees: AccountTreeNode[];
10-
export let date_range: { begin: Date; end: Date } | null;
8+
let { charts, trees, date_range }: TreeReportProps = $props();
9+
let end = $derived(date_range?.end ?? null);
1110
12-
$: chartData = parseChartData(charts, $chartContext).unwrap_or(null);
11+
let chartData = $derived(
12+
parseChartData(charts, $chartContext).unwrap_or(null),
13+
);
1314
</script>
1415

1516
{#if chartData}
@@ -19,12 +20,12 @@
1920
<div class="row">
2021
<div class="column">
2122
{#each trees.slice(0, 2) as tree}
22-
<TreeTable {tree} end={date_range?.end ?? null} />
23+
<TreeTable {tree} {end} />
2324
{/each}
2425
</div>
2526
<div class="column">
2627
{#each trees.slice(2) as tree}
27-
<TreeTable {tree} end={date_range?.end ?? null} />
28+
<TreeTable {tree} {end} />
2829
{/each}
2930
</div>
3031
</div>

frontend/src/reports/tree_reports/TrialBalance.svelte

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
import { parseChartData } from "../../charts";
33
import ChartSwitcher from "../../charts/ChartSwitcher.svelte";
44
import { chartContext } from "../../charts/context";
5-
import type { AccountTreeNode } from "../../charts/hierarchy";
65
import TreeTable from "../../tree-table/TreeTable.svelte";
6+
import type { TreeReportProps } from ".";
77
8-
export let charts: unknown;
9-
export let trees: AccountTreeNode[];
10-
export let date_range: { begin: Date; end: Date } | null;
8+
let { charts, trees, date_range }: TreeReportProps = $props();
9+
let end = $derived(date_range?.end ?? null);
1110
12-
$: chartData = parseChartData(charts, $chartContext).unwrap_or(null);
11+
let chartData = $derived(
12+
parseChartData(charts, $chartContext).unwrap_or(null),
13+
);
1314
</script>
1415

1516
{#if chartData}
@@ -18,6 +19,6 @@
1819

1920
<div class="row">
2021
{#each trees as tree}
21-
<TreeTable {tree} end={date_range?.end ?? null} />
22+
<TreeTable {tree} {end} />
2223
{/each}
2324
</div>

frontend/src/reports/tree_reports/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
import { get } from "../../api";
2+
import type { AccountTreeNode } from "../../charts/hierarchy";
23
import { _ } from "../../i18n";
34
import { getURLFilters } from "../../stores/filters";
45
import { Route } from "../route";
56
import BalanceSheet from "./BalanceSheet.svelte";
67
import IncomeStatement from "./IncomeStatement.svelte";
78
import TrialBalance from "./TrialBalance.svelte";
89

10+
export interface TreeReportProps {
11+
charts: unknown;
12+
trees: AccountTreeNode[];
13+
date_range: { begin: Date; end: Date } | null;
14+
}
15+
916
export const income_statement = new Route(
1017
"income_statement",
1118
IncomeStatement,

0 commit comments

Comments
 (0)