Browse Source

feat: add budget portfolio route

pull/7140/head
Yip Shing him 3 weeks ago
parent
commit
62dc3ada4b
  1. 8
      apps/client/src/app/pages/portfolio/budget/budget-page.component.ts
  2. 15
      apps/client/src/app/pages/portfolio/budget/budget-page.routes.ts
  3. 11
      apps/client/src/app/pages/portfolio/portfolio-page.component.ts
  4. 5
      apps/client/src/app/pages/portfolio/portfolio-page.routes.ts
  5. 1316
      docs/superpowers/plans/2026-06-23-budget-ui-feature.md
  6. 22
      libs/common/src/lib/routes/routes.spec.ts
  7. 5
      libs/common/src/lib/routes/routes.ts

8
apps/client/src/app/pages/portfolio/budget/budget-page.component.ts

@ -0,0 +1,8 @@
import { Component } from '@angular/core';
@Component({
host: { class: 'page' },
selector: 'gf-budget-page',
template: ''
})
export class GfBudgetPageComponent {}

15
apps/client/src/app/pages/portfolio/budget/budget-page.routes.ts

@ -0,0 +1,15 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfBudgetPageComponent } from './budget-page.component';
export const routes: Routes = [
{
canActivate: [AuthGuard],
component: GfBudgetPageComponent,
path: '',
title: internalRoutes.portfolio.subRoutes.budget.title
}
];

11
apps/client/src/app/pages/portfolio/portfolio-page.component.ts

@ -14,7 +14,8 @@ import {
calculatorOutline,
pieChartOutline,
scanOutline,
swapVerticalOutline
swapVerticalOutline,
walletOutline
} from 'ionicons/icons';
@Component({
@ -49,6 +50,11 @@ export class PortfolioPageComponent {
routerLink:
internalRoutes.portfolio.subRoutes.activities.routerLink
},
{
iconName: 'wallet-outline',
label: internalRoutes.portfolio.subRoutes.budget.title,
routerLink: internalRoutes.portfolio.subRoutes.budget.routerLink
},
{
iconName: 'pie-chart-outline',
label: internalRoutes.portfolio.subRoutes.allocations.title,
@ -77,7 +83,8 @@ export class PortfolioPageComponent {
calculatorOutline,
pieChartOutline,
scanOutline,
swapVerticalOutline
swapVerticalOutline,
walletOutline
});
}
}

5
apps/client/src/app/pages/portfolio/portfolio-page.routes.ts

@ -19,6 +19,11 @@ export const routes: Routes = [
loadChildren: () =>
import('./activities/activities-page.routes').then((m) => m.routes)
},
{
path: internalRoutes.portfolio.subRoutes.budget.path,
loadChildren: () =>
import('./budget/budget-page.routes').then((m) => m.routes)
},
{
path: internalRoutes.portfolio.subRoutes.allocations.path,
loadChildren: () =>

1316
docs/superpowers/plans/2026-06-23-budget-ui-feature.md

File diff suppressed because it is too large

22
libs/common/src/lib/routes/routes.spec.ts

@ -0,0 +1,22 @@
(global as any).$localize = (
messageParts: TemplateStringsArray,
...expressions: any[]
) => {
return String.raw({ raw: messageParts }, ...expressions);
};
jest.mock('@angular/localize', () => {
return {};
});
const { internalRoutes } = require('./routes');
describe('internalRoutes', () => {
it('defines the portfolio budget route', () => {
expect(internalRoutes.portfolio.subRoutes.budget).toEqual({
path: 'budget',
routerLink: ['/portfolio', 'budget'],
title: 'Budget'
});
});
});

5
libs/common/src/lib/routes/routes.ts

@ -137,6 +137,11 @@ export const internalRoutes = {
routerLink: ['/portfolio'],
title: $localize`Analysis`
},
budget: {
path: 'budget',
routerLink: ['/portfolio', 'budget'],
title: $localize`Budget`
},
fire: {
path: 'fire',
routerLink: ['/portfolio', 'fire'],

Loading…
Cancel
Save