mirror of https://github.com/ghostfolio/ghostfolio
1 changed files with 217 additions and 0 deletions
@ -0,0 +1,217 @@ |
|||||
|
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; |
||||
|
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module'; |
||||
|
|
||||
|
import { CommonModule } from '@angular/common'; |
||||
|
import { MatButtonModule } from '@angular/material/button'; |
||||
|
import { MatCheckboxModule } from '@angular/material/checkbox'; |
||||
|
import { MatMenuModule } from '@angular/material/menu'; |
||||
|
import { MatPaginatorModule } from '@angular/material/paginator'; |
||||
|
import { MatSortModule } from '@angular/material/sort'; |
||||
|
import { MatTableDataSource, MatTableModule } from '@angular/material/table'; |
||||
|
import { MatTooltipModule } from '@angular/material/tooltip'; |
||||
|
import { RouterModule } from '@angular/router'; |
||||
|
import { IonIcon } from '@ionic/angular/standalone'; |
||||
|
import { moduleMetadata } from '@storybook/angular'; |
||||
|
import type { Meta, StoryObj } from '@storybook/angular'; |
||||
|
import { NotificationService } from 'apps/client/src/app/core/notification/notification.service'; |
||||
|
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
||||
|
|
||||
|
import { GfActivityTypeComponent } from '../activity-type/activity-type.component'; |
||||
|
import { GfEntityLogoComponent } from '../entity-logo'; |
||||
|
import { GfNoTransactionsInfoComponent } from '../no-transactions-info/no-transactions-info.component'; |
||||
|
import { GfValueComponent } from '../value'; |
||||
|
import { GfActivitiesTableComponent } from './activities-table.component'; |
||||
|
|
||||
|
const activities: Activity[] = [ |
||||
|
{ |
||||
|
id: 'a1f1a111-1111-4111-8111-111111111111' as any, |
||||
|
type: 'BUY', |
||||
|
date: new Date('2025-06-01T10:00:00.000Z') as any, |
||||
|
quantity: 10 as any, |
||||
|
feeInAssetProfileCurrency: 1, |
||||
|
feeInBaseCurrency: 1, |
||||
|
unitPriceInAssetProfileCurrency: 250, |
||||
|
value: 2500, |
||||
|
valueInBaseCurrency: 2500, |
||||
|
currency: 'USD' as any, |
||||
|
isDraft: false as any, |
||||
|
account: { |
||||
|
id: 'acc-1' as any, |
||||
|
name: 'Brokerage Account' as any, |
||||
|
platform: { |
||||
|
id: 'plt-ib' as any, |
||||
|
name: 'Interactive Brokers' as any, |
||||
|
url: 'https://interactivebrokers.com' as any |
||||
|
} |
||||
|
} as any, |
||||
|
SymbolProfile: { |
||||
|
dataSource: 'YAHOO' as any, |
||||
|
symbol: 'AAPL' as any, |
||||
|
name: 'Apple Inc.' as any |
||||
|
} as any |
||||
|
} as any, |
||||
|
{ |
||||
|
id: 'b2f2b222-2222-4222-8222-222222222222' as any, |
||||
|
type: 'DIVIDEND', |
||||
|
date: new Date('2025-06-10T10:00:00.000Z') as any, |
||||
|
quantity: 0 as any, |
||||
|
feeInAssetProfileCurrency: 0, |
||||
|
feeInBaseCurrency: 0, |
||||
|
unitPriceInAssetProfileCurrency: 0, |
||||
|
value: 15.5, |
||||
|
valueInBaseCurrency: 15.5, |
||||
|
currency: 'USD' as any, |
||||
|
isDraft: false as any, |
||||
|
account: { |
||||
|
id: 'acc-1' as any, |
||||
|
name: 'Brokerage Account' as any, |
||||
|
platform: { |
||||
|
id: 'plt-ib' as any, |
||||
|
name: 'Interactive Brokers' as any, |
||||
|
url: 'https://interactivebrokers.com' as any |
||||
|
} |
||||
|
} as any, |
||||
|
SymbolProfile: { |
||||
|
dataSource: 'YAHOO' as any, |
||||
|
symbol: 'AAPL' as any, |
||||
|
name: 'Apple Inc.' as any |
||||
|
} as any |
||||
|
} as any, |
||||
|
{ |
||||
|
id: 'c3f3c333-3333-4333-8333-333333333333' as any, |
||||
|
type: 'SELL', |
||||
|
date: new Date('2025-06-15T10:00:00.000Z') as any, |
||||
|
quantity: 5 as any, |
||||
|
feeInAssetProfileCurrency: 1, |
||||
|
feeInBaseCurrency: 1, |
||||
|
unitPriceInAssetProfileCurrency: 300, |
||||
|
value: 1500, |
||||
|
valueInBaseCurrency: 1500, |
||||
|
currency: 'USD' as any, |
||||
|
isDraft: false as any, |
||||
|
account: { |
||||
|
id: 'acc-2' as any, |
||||
|
name: 'Trading Account' as any, |
||||
|
platform: { |
||||
|
id: 'plt-rob' as any, |
||||
|
name: 'Robinhood' as any, |
||||
|
url: 'https://robinhood.com' as any |
||||
|
} |
||||
|
} as any, |
||||
|
SymbolProfile: { |
||||
|
dataSource: 'YAHOO' as any, |
||||
|
symbol: 'MSFT' as any, |
||||
|
name: 'Microsoft Corp.' as any |
||||
|
} as any |
||||
|
} as any |
||||
|
]; |
||||
|
|
||||
|
const dataSource = new MatTableDataSource<Activity>(activities); |
||||
|
|
||||
|
export default { |
||||
|
title: 'Activities Table', |
||||
|
component: GfActivitiesTableComponent, |
||||
|
decorators: [ |
||||
|
moduleMetadata({ |
||||
|
imports: [ |
||||
|
CommonModule, |
||||
|
GfActivityTypeComponent, |
||||
|
GfEntityLogoComponent, |
||||
|
GfNoTransactionsInfoComponent, |
||||
|
GfSymbolModule, |
||||
|
GfValueComponent, |
||||
|
IonIcon, |
||||
|
MatButtonModule, |
||||
|
MatCheckboxModule, |
||||
|
MatMenuModule, |
||||
|
MatPaginatorModule, |
||||
|
MatSortModule, |
||||
|
MatTableModule, |
||||
|
MatTooltipModule, |
||||
|
NgxSkeletonLoaderModule, |
||||
|
RouterModule.forChild([]) |
||||
|
], |
||||
|
providers: [NotificationService] |
||||
|
}) |
||||
|
] |
||||
|
} as Meta<GfActivitiesTableComponent>; |
||||
|
|
||||
|
type Story = StoryObj<GfActivitiesTableComponent>; |
||||
|
|
||||
|
export const Default: Story = { |
||||
|
args: { |
||||
|
baseCurrency: 'USD', |
||||
|
dataSource, |
||||
|
deviceType: 'desktop', |
||||
|
hasActivities: true, |
||||
|
hasPermissionToCreateActivity: false, |
||||
|
hasPermissionToDeleteActivity: false, |
||||
|
hasPermissionToExportActivities: false, |
||||
|
hasPermissionToOpenDetails: true, |
||||
|
locale: 'en-US', |
||||
|
pageIndex: 0, |
||||
|
pageSize: 10, |
||||
|
showAccountColumn: true, |
||||
|
showActions: false, |
||||
|
showCheckbox: false, |
||||
|
showNameColumn: true, |
||||
|
sortColumn: 'date', |
||||
|
sortDirection: 'desc', |
||||
|
sortDisabled: false, |
||||
|
totalItems: activities.length |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
export const EmptyState: Story = { |
||||
|
args: { |
||||
|
baseCurrency: 'USD', |
||||
|
dataSource: new MatTableDataSource<Activity>([]), |
||||
|
deviceType: 'desktop', |
||||
|
hasActivities: false, |
||||
|
hasPermissionToCreateActivity: true, |
||||
|
hasPermissionToDeleteActivity: false, |
||||
|
hasPermissionToExportActivities: false, |
||||
|
hasPermissionToOpenDetails: true, |
||||
|
locale: 'en-US', |
||||
|
pageIndex: 0, |
||||
|
pageSize: 10, |
||||
|
showAccountColumn: true, |
||||
|
showActions: false, |
||||
|
showCheckbox: false, |
||||
|
showNameColumn: true, |
||||
|
sortColumn: 'date', |
||||
|
sortDirection: 'desc', |
||||
|
sortDisabled: false, |
||||
|
totalItems: 0 |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
export const ManyRows: Story = { |
||||
|
args: { |
||||
|
baseCurrency: 'USD', |
||||
|
dataSource: new MatTableDataSource<Activity>( |
||||
|
Array.from({ length: 50 }).map((_, i) => ({ |
||||
|
...(activities[i % activities.length] as Activity), |
||||
|
id: `${i}` as any, |
||||
|
date: new Date(2025, 5, (i % 28) + 1) as any |
||||
|
})) |
||||
|
), |
||||
|
deviceType: 'desktop', |
||||
|
hasActivities: true, |
||||
|
hasPermissionToCreateActivity: false, |
||||
|
hasPermissionToDeleteActivity: false, |
||||
|
hasPermissionToExportActivities: false, |
||||
|
hasPermissionToOpenDetails: true, |
||||
|
locale: 'en-US', |
||||
|
pageIndex: 0, |
||||
|
pageSize: 10, |
||||
|
showAccountColumn: true, |
||||
|
showActions: false, |
||||
|
showCheckbox: false, |
||||
|
showNameColumn: true, |
||||
|
sortColumn: 'date', |
||||
|
sortDirection: 'desc', |
||||
|
sortDisabled: false, |
||||
|
totalItems: 50 |
||||
|
} |
||||
|
}; |
||||
Loading…
Reference in new issue