diff --git a/CHANGELOG.md b/CHANGELOG.md
index 92ddad0b5..edbfa5460 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Changed
+
+- Upgraded `twitter-api-v2` from version `1.27.0` to `1.29.0`
+
## 2.237.0 - 2026-02-08
### Changed
diff --git a/README.md b/README.md
index 03566b2dd..3be15e49f 100644
--- a/README.md
+++ b/README.md
@@ -318,8 +318,8 @@ If you like to support this project, become a [**Sponsor**](https://github.com/s
## Sponsors
Browser testing via
@@ -217,9 +217,9 @@
alt="TestMu AI Logo"
height="32"
[src]="
- user?.settings?.colorScheme === 'LIGHT'
- ? '../assets/images/sponsors/logo-testmu-dark.svg'
- : '../assets/images/sponsors/logo-testmu-light.svg'
+ user?.settings?.colorScheme === 'DARK'
+ ? '../assets/images/sponsors/logo-testmu-light.svg'
+ : '../assets/images/sponsors/logo-testmu-dark.svg'
"
/>
diff --git a/apps/client/src/app/pages/accounts/accounts-page.html b/apps/client/src/app/pages/accounts/accounts-page.html
index 0c6b7b8f3..3d9d7ee5c 100644
--- a/apps/client/src/app/pages/accounts/accounts-page.html
+++ b/apps/client/src/app/pages/accounts/accounts-page.html
@@ -6,7 +6,6 @@
[accounts]="accounts"
[activitiesCount]="activitiesCount"
[baseCurrency]="user?.settings?.baseCurrency"
- [deviceType]="deviceType"
[locale]="user?.settings?.locale"
[showActions]="
!hasImpersonationId &&
diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html
index 63a7a89b6..15f5bb21f 100644
--- a/libs/ui/src/lib/accounts-table/accounts-table.component.html
+++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -3,7 +3,7 @@
@@ -19,7 +19,7 @@
matSort
matSortActive="name"
matSortDirection="asc"
- [dataSource]="dataSource()"
+ [dataSource]="dataSource"
>
- {{ baseCurrency }}
+ {{ baseCurrency() }}
@@ -129,7 +129,7 @@
{{ element.activitiesCount }}
- {{ activitiesCount }}
+ {{ activitiesCount() }}
@@ -150,7 +150,7 @@
@@ -162,8 +162,8 @@
@@ -185,7 +185,7 @@
@@ -197,8 +197,8 @@
@@ -220,7 +220,7 @@
@@ -232,8 +232,8 @@
@@ -255,7 +255,7 @@
@@ -341,14 +341,14 @@
*matRowDef="let row; columns: displayedColumns()"
mat-row
[ngClass]="{
- 'cursor-pointer': hasPermissionToOpenDetails
+ 'cursor-pointer': hasPermissionToOpenDetails()
}"
(click)="onOpenAccountDetailDialog(row.id)"
>
diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
index 594db4c6a..62a01164f 100644
--- a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
+++ b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
@@ -111,7 +111,6 @@ export const Loading: Story = {
args: {
accounts: undefined,
baseCurrency: 'USD',
- deviceType: 'desktop',
hasPermissionToOpenDetails: false,
locale: 'en-US',
showActions: false,
@@ -129,7 +128,6 @@ export const Default: Story = {
accounts,
activitiesCount: 12,
baseCurrency: 'USD',
- deviceType: 'desktop',
hasPermissionToOpenDetails: false,
locale: 'en-US',
showActions: false,
@@ -149,7 +147,6 @@ export const WithoutFooter: Story = {
accounts,
activitiesCount: 12,
baseCurrency: 'USD',
- deviceType: 'desktop',
hasPermissionToOpenDetails: false,
locale: 'en-US',
showActions: false,
diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.ts
index 834e33fb3..d486b775f 100644
--- a/libs/ui/src/lib/accounts-table/accounts-table.component.ts
+++ b/libs/ui/src/lib/accounts-table/accounts-table.component.ts
@@ -8,13 +8,11 @@ import { CommonModule } from '@angular/common';
import {
ChangeDetectionStrategy,
Component,
- EventEmitter,
- Input,
- OnDestroy,
- Output,
computed,
+ effect,
inject,
input,
+ output,
viewChild
} from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -35,7 +33,6 @@ import {
walletOutline
} from 'ionicons/icons';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
-import { Subject } from 'rxjs';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
@@ -55,35 +52,29 @@ import { Subject } from 'rxjs';
styleUrls: ['./accounts-table.component.scss'],
templateUrl: './accounts-table.component.html'
})
-export class GfAccountsTableComponent implements OnDestroy {
- @Input() activitiesCount: number;
- @Input() baseCurrency: string;
- @Input() deviceType: string;
- @Input() hasPermissionToOpenDetails = true;
- @Input() locale = getLocale();
- @Input() showFooter = true;
- @Input() totalBalanceInBaseCurrency: number;
- @Input() totalValueInBaseCurrency: number;
-
- @Output() accountDeleted = new EventEmitter();
- @Output() accountToUpdate = new EventEmitter();
- @Output() transferBalance = new EventEmitter();
-
+export class GfAccountsTableComponent {
public readonly accounts = input.required();
+ public readonly activitiesCount = input();
+ public readonly baseCurrency = input();
+ public readonly hasPermissionToOpenDetails = input(true);
+ public readonly locale = input(getLocale());
public readonly showActions = input();
public readonly showActivitiesCount = input(true);
public readonly showAllocationInPercentage = input();
public readonly showBalance = input(true);
+ public readonly showFooter = input(true);
public readonly showValue = input(true);
public readonly showValueInBaseCurrency = input(false);
+ public readonly totalBalanceInBaseCurrency = input();
+ public readonly totalValueInBaseCurrency = input();
+
+ public readonly accountDeleted = output();
+ public readonly accountToUpdate = output();
+ public readonly transferBalance = output();
+
public readonly sort = viewChild.required(MatSort);
- protected readonly dataSource = computed(() => {
- const dataSource = new MatTableDataSource(this.accounts());
- dataSource.sortingDataAccessor = getLowercase;
- dataSource.sort = this.sort();
- return dataSource;
- });
+ protected readonly dataSource = new MatTableDataSource([]);
protected readonly displayedColumns = computed(() => {
const columns = ['status', 'account', 'platform'];
@@ -123,7 +114,6 @@ export class GfAccountsTableComponent implements OnDestroy {
private readonly notificationService = inject(NotificationService);
private readonly router = inject(Router);
- private readonly unsubscribeSubject = new Subject();
public constructor() {
addIcons({
@@ -135,9 +125,21 @@ export class GfAccountsTableComponent implements OnDestroy {
trashOutline,
walletOutline
});
+
+ this.dataSource.sortingDataAccessor = getLowercase;
+
+ // Reactive data update
+ effect(() => {
+ this.dataSource.data = this.accounts();
+ });
+
+ // Reactive view connection
+ effect(() => {
+ this.dataSource.sort = this.sort();
+ });
}
- public onDeleteAccount(aId: string) {
+ protected onDeleteAccount(aId: string) {
this.notificationService.confirm({
confirmFn: () => {
this.accountDeleted.emit(aId);
@@ -147,30 +149,25 @@ export class GfAccountsTableComponent implements OnDestroy {
});
}
- public onOpenAccountDetailDialog(accountId: string) {
- if (this.hasPermissionToOpenDetails) {
+ protected onOpenAccountDetailDialog(accountId: string) {
+ if (this.hasPermissionToOpenDetails()) {
this.router.navigate([], {
queryParams: { accountId, accountDetailDialog: true }
});
}
}
- public onOpenComment(aComment: string) {
+ protected onOpenComment(aComment: string) {
this.notificationService.alert({
title: aComment
});
}
- public onTransferBalance() {
+ protected onTransferBalance() {
this.transferBalance.emit();
}
- public onUpdateAccount(aAccount: Account) {
+ protected onUpdateAccount(aAccount: Account) {
this.accountToUpdate.emit(aAccount);
}
-
- public ngOnDestroy() {
- this.unsubscribeSubject.next();
- this.unsubscribeSubject.complete();
- }
}
diff --git a/package-lock.json b/package-lock.json
index da8bf26f4..d415758b1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -88,7 +88,7 @@
"stripe": "20.3.0",
"svgmap": "2.14.0",
"tablemark": "4.1.0",
- "twitter-api-v2": "1.27.0",
+ "twitter-api-v2": "1.29.0",
"yahoo-finance2": "3.13.0",
"zone.js": "0.16.0"
},
@@ -33383,9 +33383,9 @@
}
},
"node_modules/twitter-api-v2": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.27.0.tgz",
- "integrity": "sha512-hbIFwzg0NeOcFOdmJqtKMCXjLjc0INff/7NwhnZ2zpnw65oku8i+0eMxo5M0iTc1hs+inD/IpDw3S0Xh2c45QQ==",
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.29.0.tgz",
+ "integrity": "sha512-v473q5bwme4N+DWSg6qY+JCvfg1nSJRWwui3HUALafxfqCvVkKiYmS/5x/pVeJwTmyeBxexMbzHwnzrH4h6oYQ==",
"license": "Apache-2.0"
},
"node_modules/type-check": {
diff --git a/package.json b/package.json
index 70922d840..0f43fff08 100644
--- a/package.json
+++ b/package.json
@@ -132,7 +132,7 @@
"stripe": "20.3.0",
"svgmap": "2.14.0",
"tablemark": "4.1.0",
- "twitter-api-v2": "1.27.0",
+ "twitter-api-v2": "1.29.0",
"yahoo-finance2": "3.13.0",
"zone.js": "0.16.0"
},