Browse Source

refactor(ui): extract reusable gf-fab component and simplify FAB usage

pull/6922/head
David Requeno 2 days ago
parent
commit
6899812015
  1. 4
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  2. 12
      apps/client/src/app/components/admin-market-data/admin-market-data.html
  3. 4
      apps/client/src/app/components/home-watchlist/home-watchlist.component.ts
  4. 12
      apps/client/src/app/components/home-watchlist/home-watchlist.html
  5. 4
      apps/client/src/app/components/user-account-access/user-account-access.component.ts
  6. 12
      apps/client/src/app/components/user-account-access/user-account-access.html
  7. 4
      apps/client/src/app/pages/accounts/accounts-page.component.ts
  8. 12
      apps/client/src/app/pages/accounts/accounts-page.html
  9. 4
      apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
  10. 12
      apps/client/src/app/pages/portfolio/activities/activities-page.html
  11. 9
      libs/ui/src/lib/fab/fab.component.html
  12. 0
      libs/ui/src/lib/fab/fab.component.scss
  13. 16
      libs/ui/src/lib/fab/fab.component.ts
  14. 1
      libs/ui/src/lib/fab/index.ts
  15. 1
      libs/ui/src/lib/page-fab/index.ts
  16. 1
      libs/ui/src/lib/page-fab/page-fab.component.html
  17. 9
      libs/ui/src/lib/page-fab/page-fab.component.ts

4
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts

@ -18,8 +18,8 @@ import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfSymbolPipe } from '@ghostfolio/common/pipes'; import { GfSymbolPipe } from '@ghostfolio/common/pipes';
import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter'; import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter';
import { GfFabComponent } from '@ghostfolio/ui/fab';
import { translate } from '@ghostfolio/ui/i18n'; import { translate } from '@ghostfolio/ui/i18n';
import { GfPageFabComponent } from '@ghostfolio/ui/page-fab';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { AdminService, DataService } from '@ghostfolio/ui/services'; import { AdminService, DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfValueComponent } from '@ghostfolio/ui/value';
@ -84,7 +84,7 @@ import { CreateAssetProfileDialogParams } from './create-asset-profile-dialog/in
imports: [ imports: [
CommonModule, CommonModule,
GfActivitiesFilterComponent, GfActivitiesFilterComponent,
GfPageFabComponent, GfFabComponent,
GfPremiumIndicatorComponent, GfPremiumIndicatorComponent,
GfSymbolPipe, GfSymbolPipe,
GfValueComponent, GfValueComponent,

12
apps/client/src/app/components/admin-market-data/admin-market-data.html

@ -332,15 +332,5 @@
</div> </div>
</div> </div>
<gf-page-fab> <gf-fab [queryParams]="{ createAssetProfileDialog: true }" />
<a
class="align-items-center d-flex justify-content-center"
color="primary"
mat-fab
[queryParams]="{ createAssetProfileDialog: true }"
[routerLink]="[]"
>
<ion-icon name="add-outline" size="large" />
</a>
</gf-page-fab>
</div> </div>

4
apps/client/src/app/components/home-watchlist/home-watchlist.component.ts

@ -8,7 +8,7 @@ import {
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark';
import { GfPageFabComponent } from '@ghostfolio/ui/page-fab'; import { GfFabComponent } from '@ghostfolio/ui/fab';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services'; import { DataService } from '@ghostfolio/ui/services';
@ -38,7 +38,7 @@ import { CreateWatchlistItemDialogParams } from './create-watchlist-item-dialog/
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [ imports: [
GfBenchmarkComponent, GfBenchmarkComponent,
GfPageFabComponent, GfFabComponent,
GfPremiumIndicatorComponent, GfPremiumIndicatorComponent,
IonIcon, IonIcon,
MatButtonModule, MatButtonModule,

12
apps/client/src/app/components/home-watchlist/home-watchlist.html

@ -22,15 +22,5 @@
</div> </div>
</div> </div>
@if (!hasImpersonationId && hasPermissionToCreateWatchlistItem) { @if (!hasImpersonationId && hasPermissionToCreateWatchlistItem) {
<gf-page-fab> <gf-fab [queryParams]="{ createWatchlistItemDialog: true }" />
<a
class="align-items-center d-flex justify-content-center"
color="primary"
mat-fab
[queryParams]="{ createWatchlistItemDialog: true }"
[routerLink]="[]"
>
<ion-icon name="add-outline" size="large" />
</a>
</gf-page-fab>
} }

4
apps/client/src/app/components/user-account-access/user-account-access.component.ts

@ -4,8 +4,8 @@ import { CreateAccessDto } from '@ghostfolio/common/dtos';
import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { ConfirmationDialogType } from '@ghostfolio/common/enums';
import { Access, User } from '@ghostfolio/common/interfaces'; import { Access, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfFabComponent } from '@ghostfolio/ui/fab';
import { NotificationService } from '@ghostfolio/ui/notifications'; import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPageFabComponent } from '@ghostfolio/ui/page-fab';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services'; import { DataService } from '@ghostfolio/ui/services';
@ -45,7 +45,7 @@ import { CreateOrUpdateAccessDialogParams } from './create-or-update-access-dial
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [ imports: [
GfAccessTableComponent, GfAccessTableComponent,
GfPageFabComponent, GfFabComponent,
GfPremiumIndicatorComponent, GfPremiumIndicatorComponent,
IonIcon, IonIcon,
MatButtonModule, MatButtonModule,

12
apps/client/src/app/components/user-account-access/user-account-access.html

@ -69,16 +69,6 @@
(accessToUpdate)="onUpdateAccess($event)" (accessToUpdate)="onUpdateAccess($event)"
/> />
@if (hasPermissionToCreateAccess) { @if (hasPermissionToCreateAccess) {
<gf-page-fab> <gf-fab [queryParams]="{ createDialog: true }" />
<a
class="align-items-center d-flex justify-content-center"
color="primary"
mat-fab
[queryParams]="{ createDialog: true }"
[routerLink]="[]"
>
<ion-icon name="add-outline" size="large" />
</a>
</gf-page-fab>
} }
</div> </div>

4
apps/client/src/app/pages/accounts/accounts-page.component.ts

@ -10,8 +10,8 @@ import {
import { User } from '@ghostfolio/common/interfaces'; import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table'; import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table';
import { GfFabComponent } from '@ghostfolio/ui/fab';
import { NotificationService } from '@ghostfolio/ui/notifications'; import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPageFabComponent } from '@ghostfolio/ui/page-fab';
import { DataService } from '@ghostfolio/ui/services'; import { DataService } from '@ghostfolio/ui/services';
import { import {
@ -40,7 +40,7 @@ import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-ba
host: { class: 'page' }, host: { class: 'page' },
imports: [ imports: [
GfAccountsTableComponent, GfAccountsTableComponent,
GfPageFabComponent, GfFabComponent,
MatButtonModule, MatButtonModule,
RouterModule RouterModule
], ],

12
apps/client/src/app/pages/accounts/accounts-page.html

@ -26,16 +26,6 @@
hasPermissionToCreateAccount && hasPermissionToCreateAccount &&
!user.settings.isRestrictedView !user.settings.isRestrictedView
) { ) {
<gf-page-fab> <gf-fab [queryParams]="{ createDialog: true }" />
<a
class="align-items-center d-flex justify-content-center"
color="primary"
mat-fab
[queryParams]="{ createDialog: true }"
[routerLink]="[]"
>
<ion-icon name="add-outline" size="large" />
</a>
</gf-page-fab>
} }
</div> </div>

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

@ -12,7 +12,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { DateRange } from '@ghostfolio/common/types'; import { DateRange } from '@ghostfolio/common/types';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfPageFabComponent } from '@ghostfolio/ui/page-fab'; import { GfFabComponent } from '@ghostfolio/ui/fab';
import { DataService } from '@ghostfolio/ui/services'; import { DataService } from '@ghostfolio/ui/services';
import { import {
@ -44,7 +44,7 @@ import { ImportActivitiesDialogParams } from './import-activities-dialog/interfa
@Component({ @Component({
imports: [ imports: [
GfActivitiesTableComponent, GfActivitiesTableComponent,
GfPageFabComponent, GfFabComponent,
IonIcon, IonIcon,
MatButtonModule, MatButtonModule,
MatSnackBarModule, MatSnackBarModule,

12
apps/client/src/app/pages/portfolio/activities/activities-page.html

@ -43,16 +43,6 @@
hasPermissionToCreateActivity && hasPermissionToCreateActivity &&
!user.settings.isRestrictedView !user.settings.isRestrictedView
) { ) {
<gf-page-fab> <gf-fab [queryParams]="{ createDialog: true }" />
<a
class="align-items-center d-flex justify-content-center"
color="primary"
mat-fab
[queryParams]="{ createDialog: true }"
[routerLink]="[]"
>
<ion-icon name="add-outline" size="large" />
</a>
</gf-page-fab>
} }
</div> </div>

9
libs/ui/src/lib/fab/fab.component.html

@ -0,0 +1,9 @@
<a
class="align-items-center d-flex justify-content-center"
color="primary"
mat-fab
[queryParams]="queryParams()"
[routerLink]="[]"
>
<ion-icon size="large" [name]="icon()" />
</a>

0
libs/ui/src/lib/page-fab/page-fab.component.scss → libs/ui/src/lib/fab/fab.component.scss

16
libs/ui/src/lib/fab/fab.component.ts

@ -0,0 +1,16 @@
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { Params, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [IonIcon, MatButtonModule, RouterModule],
selector: 'gf-fab',
styleUrls: ['./fab.component.scss'],
templateUrl: './fab.component.html'
})
export class GfFabComponent {
public readonly icon = input('add-outline');
public readonly queryParams = input.required<Params>();
}

1
libs/ui/src/lib/fab/index.ts

@ -0,0 +1 @@
export * from './fab.component';

1
libs/ui/src/lib/page-fab/index.ts

@ -1 +0,0 @@
export * from './page-fab.component';

1
libs/ui/src/lib/page-fab/page-fab.component.html

@ -1 +0,0 @@
<ng-content />

9
libs/ui/src/lib/page-fab/page-fab.component.ts

@ -1,9 +0,0 @@
import { ChangeDetectionStrategy, Component } from '@angular/core';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'gf-page-fab',
styleUrls: ['./page-fab.component.scss'],
templateUrl: './page-fab.component.html'
})
export class GfPageFabComponent {}
Loading…
Cancel
Save