Browse Source

Feature/update confirmation dialog

pull/3671/head
Daniel Idem 1 year ago
parent
commit
bf4dca3aac
  1. 85
      apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
  2. 90
      apps/client/src/app/components/admin-overview/admin-overview.component.ts
  3. 19
      apps/client/src/app/components/admin-platform/admin-platform.component.ts
  4. 19
      apps/client/src/app/components/admin-tag/admin-tag.component.ts
  5. 33
      apps/client/src/app/components/admin-users/admin-users.component.ts
  6. 75
      apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
  7. 21
      libs/ui/src/lib/account-balances/account-balances.component.ts
  8. 35
      libs/ui/src/lib/activities-table/activities-table.component.ts

85
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts

@ -1,3 +1,5 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/common/config';
import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper';
@ -7,57 +9,64 @@ import {
} from '@ghostfolio/common/interfaces';
import { Injectable } from '@angular/core';
import { title } from 'process';
import { EMPTY, catchError, finalize, forkJoin, takeUntil } from 'rxjs';
@Injectable()
export class AdminMarketDataService {
public constructor(private adminService: AdminService) {}
public constructor(
private adminService: AdminService,
private notificationService: NotificationService
) {}
public deleteAssetProfile({ dataSource, symbol }: AssetProfileIdentifier) {
const confirmation = confirm(
$localize`Do you really want to delete this asset profile?`
);
if (confirmation) {
this.adminService
.deleteProfileData({ dataSource, symbol })
.subscribe(() => {
setTimeout(() => {
window.location.reload();
}, 300);
});
}
this.notificationService.confirm({
confirmFn: () => {
this.adminService
.deleteProfileData({ dataSource, symbol })
.subscribe(() => {
setTimeout(() => {
window.location.reload();
}, 300);
});
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this asset profile?`
});
}
public deleteAssetProfiles(
aAssetProfileIdentifiers: AssetProfileIdentifier[]
) {
const confirmation = confirm(
$localize`Do you really want to delete these profiles?`
);
if (confirmation) {
const deleteRequests = aAssetProfileIdentifiers.map(
({ dataSource, symbol }) => {
return this.adminService.deleteProfileData({ dataSource, symbol });
}
);
this.notificationService.confirm({
confirmFn: () => {
const deleteRequests = aAssetProfileIdentifiers.map(
({ dataSource, symbol }) => {
return this.adminService.deleteProfileData({ dataSource, symbol });
}
);
forkJoin(deleteRequests)
.pipe(
catchError(() => {
alert($localize`Oops! Could not delete profiles.`);
forkJoin(deleteRequests)
.pipe(
catchError(() => {
this.notificationService.alert({
title: '',
message: $localize`Oops! Could not delete profiles.`
});
return EMPTY;
}),
finalize(() => {
setTimeout(() => {
window.location.reload();
}, 300);
})
)
.subscribe(() => {});
}
return EMPTY;
}),
finalize(() => {
setTimeout(() => {
window.location.reload();
}, 300);
})
)
.subscribe(() => {});
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete these profiles?`
});
}
public hasPermissionToDeleteAssetProfile({

90
apps/client/src/app/components/admin-overview/admin-overview.component.ts

@ -1,3 +1,5 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { CacheService } from '@ghostfolio/client/services/cache.service';
import { DataService } from '@ghostfolio/client/services/data.service';
@ -60,7 +62,8 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
private cacheService: CacheService,
private changeDetectorRef: ChangeDetectorRef,
private dataService: DataService,
private userService: UserService
private userService: UserService,
private notificationService: NotificationService
) {
this.info = this.dataService.fetchInfo();
@ -136,39 +139,42 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
}
public onDeleteCoupon(aCouponCode: string) {
const confirmation = confirm(
$localize`Do you really want to delete this coupon?`
);
if (confirmation === true) {
const coupons = this.coupons.filter((coupon) => {
return coupon.code !== aCouponCode;
});
this.putAdminSetting({ key: PROPERTY_COUPONS, value: coupons });
}
this.notificationService.confirm({
confirmFn: () => {
const coupons = this.coupons.filter((coupon) => {
return coupon.code !== aCouponCode;
});
this.putAdminSetting({ key: PROPERTY_COUPONS, value: coupons });
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this coupon?`
});
}
public onDeleteCurrency(aCurrency: string) {
const confirmation = confirm(
$localize`Do you really want to delete this currency?`
);
if (confirmation === true) {
const currencies = this.customCurrencies.filter((currency) => {
return currency !== aCurrency;
});
this.putAdminSetting({ key: PROPERTY_CURRENCIES, value: currencies });
}
this.notificationService.confirm({
confirmFn: () => {
const currencies = this.customCurrencies.filter((currency) => {
return currency !== aCurrency;
});
this.putAdminSetting({ key: PROPERTY_CURRENCIES, value: currencies });
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this currency?`
});
}
public onDeleteSystemMessage() {
const confirmation = confirm(
$localize`Do you really want to delete this system message?`
);
if (confirmation === true) {
this.putAdminSetting({ key: PROPERTY_SYSTEM_MESSAGE, value: undefined });
}
this.notificationService.confirm({
confirmFn: () => {
this.putAdminSetting({
key: PROPERTY_SYSTEM_MESSAGE,
value: undefined
});
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this system message?`
});
}
public onEnableDataGatheringChange(aEvent: MatSlideToggleChange) {
@ -179,20 +185,20 @@ export class AdminOverviewComponent implements OnDestroy, OnInit {
}
public onFlushCache() {
const confirmation = confirm(
$localize`Do you really want to flush the cache?`
);
if (confirmation === true) {
this.cacheService
.flush()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => {
setTimeout(() => {
window.location.reload();
}, 300);
});
}
this.notificationService.confirm({
confirmFn: () => {
this.cacheService
.flush()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(() => {
setTimeout(() => {
window.location.reload();
}, 300);
});
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to flush the cache?`
});
}
public onEnableUserSignupModeChange(aEvent: MatSlideToggleChange) {

19
apps/client/src/app/components/admin-platform/admin-platform.component.ts

@ -1,5 +1,7 @@
import { CreatePlatformDto } from '@ghostfolio/api/app/platform/create-platform.dto';
import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform.dto';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
@ -47,7 +49,8 @@ export class AdminPlatformComponent implements OnInit, OnDestroy {
private dialog: MatDialog,
private route: ActivatedRoute,
private router: Router,
private userService: UserService
private userService: UserService,
private notificationService: NotificationService
) {
this.route.queryParams
.pipe(takeUntil(this.unsubscribeSubject))
@ -75,13 +78,13 @@ export class AdminPlatformComponent implements OnInit, OnDestroy {
}
public onDeletePlatform(aId: string) {
const confirmation = confirm(
$localize`Do you really want to delete this platform?`
);
if (confirmation) {
this.deletePlatform(aId);
}
this.notificationService.confirm({
confirmFn: () => {
this.deletePlatform(aId);
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this platform?`
});
}
public onUpdatePlatform({ id }: Platform) {

19
apps/client/src/app/components/admin-tag/admin-tag.component.ts

@ -1,5 +1,7 @@
import { CreateTagDto } from '@ghostfolio/api/app/tag/create-tag.dto';
import { UpdateTagDto } from '@ghostfolio/api/app/tag/update-tag.dto';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
@ -47,7 +49,8 @@ export class AdminTagComponent implements OnInit, OnDestroy {
private dialog: MatDialog,
private route: ActivatedRoute,
private router: Router,
private userService: UserService
private userService: UserService,
private notificationService: NotificationService
) {
this.route.queryParams
.pipe(takeUntil(this.unsubscribeSubject))
@ -75,13 +78,13 @@ export class AdminTagComponent implements OnInit, OnDestroy {
}
public onDeleteTag(aId: string) {
const confirmation = confirm(
$localize`Do you really want to delete this tag?`
);
if (confirmation) {
this.deleteTag(aId);
}
this.notificationService.confirm({
confirmFn: () => {
this.deleteTag(aId);
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this tag?`
});
}
public onUpdateTag({ id }: Tag) {

33
apps/client/src/app/components/admin-users/admin-users.component.ts

@ -1,3 +1,5 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
@ -39,7 +41,8 @@ export class AdminUsersComponent implements OnDestroy, OnInit {
private changeDetectorRef: ChangeDetectorRef,
private dataService: DataService,
private impersonationStorageService: ImpersonationStorageService,
private userService: UserService
private userService: UserService,
private notificationService: NotificationService
) {
this.info = this.dataService.fetchInfo();
@ -109,20 +112,20 @@ export class AdminUsersComponent implements OnDestroy, OnInit {
}
public onDeleteUser(aId: string) {
const confirmation = confirm(
$localize`Do you really want to delete this user?`
);
if (confirmation) {
this.dataService
.deleteUser(aId)
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe({
next: () => {
this.fetchAdminData();
}
});
}
this.notificationService.confirm({
confirmFn: () => {
this.dataService
.deleteUser(aId)
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe({
next: () => {
this.fetchAdminData();
}
});
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this user?`
});
}
public onImpersonateUser(aId: string) {

75
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts

@ -1,3 +1,5 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import {
KEY_STAY_SIGNED_IN,
@ -73,7 +75,8 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit {
private snackBar: MatSnackBar,
private tokenStorageService: TokenStorageService,
private userService: UserService,
public webAuthnService: WebAuthnService
public webAuthnService: WebAuthnService,
private notificationService: NotificationService
) {
const { baseCurrency, currencies } = this.dataService.fetchInfo();
@ -144,30 +147,33 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit {
}
public onCloseAccount() {
const confirmation = confirm(
$localize`Do you really want to close your Ghostfolio account?`
);
if (confirmation) {
this.dataService
.deleteOwnUser({
accessToken: this.deleteOwnUserForm.get('accessToken').value
})
.pipe(
catchError(() => {
alert($localize`Oops! Incorrect Security Token.`);
return EMPTY;
}),
takeUntil(this.unsubscribeSubject)
)
.subscribe(() => {
this.tokenStorageService.signOut();
this.userService.remove();
document.location.href = `/${document.documentElement.lang}`;
});
}
this.notificationService.confirm({
confirmFn: () => {
this.dataService
.deleteOwnUser({
accessToken: this.deleteOwnUserForm.get('accessToken').value
})
.pipe(
catchError(() => {
this.notificationService.alert({
title: '',
message: $localize`Oops! Incorrect Security Token.`
});
return EMPTY;
}),
takeUntil(this.unsubscribeSubject)
)
.subscribe(() => {
this.tokenStorageService.signOut();
this.userService.remove();
document.location.href = `/${document.documentElement.lang}`;
});
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to close your Ghostfolio account?`
});
}
public onExperimentalFeaturesChange(aEvent: MatSlideToggleChange) {
@ -236,15 +242,16 @@ export class UserAccountSettingsComponent implements OnDestroy, OnInit {
this.changeDetectorRef.markForCheck();
}
} else {
const confirmation = confirm(
$localize`Do you really want to remove this sign in method?`
);
if (confirmation) {
this.deregisterDevice();
} else {
this.update();
}
this.notificationService.confirm({
confirmFn: () => {
this.deregisterDevice();
},
discardFn: () => {
this.update();
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to remove this sign in method?`
});
}
}

21
libs/ui/src/lib/account-balances/account-balances.component.ts

@ -1,4 +1,6 @@
import { CreateAccountBalanceDto } from '@ghostfolio/api/app/account-balance/create-account-balance.dto';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import { getLocale } from '@ghostfolio/common/helper';
import { AccountBalancesResponse } from '@ghostfolio/common/interfaces';
@ -81,7 +83,10 @@ export class GfAccountBalancesComponent
private unsubscribeSubject = new Subject<void>();
public constructor(private dateAdapter: DateAdapter<any>) {}
public constructor(
private dateAdapter: DateAdapter<any>,
private notificationService: NotificationService
) {}
public ngOnInit() {
this.dateAdapter.setLocale(this.locale);
@ -97,13 +102,13 @@ export class GfAccountBalancesComponent
}
public onDeleteAccountBalance(aId: string) {
const confirmation = confirm(
$localize`Do you really want to delete this account balance?`
);
if (confirmation) {
this.accountBalanceDeleted.emit(aId);
}
this.notificationService.confirm({
confirmFn: () => {
this.accountBalanceDeleted.emit(aId);
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this account balance?`
});
}
public async onSubmitAccountBalance() {

35
libs/ui/src/lib/activities-table/activities-table.component.ts

@ -1,5 +1,7 @@
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfAssetProfileIconComponent } from '@ghostfolio/client/components/asset-profile-icon/asset-profile-icon.component';
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import { getDateFormatString, getLocale } from '@ghostfolio/common/helper';
@ -120,7 +122,10 @@ export class GfActivitiesTableComponent
private unsubscribeSubject = new Subject<void>();
public constructor(private router: Router) {}
public constructor(
private router: Router,
private notificationService: NotificationService
) {}
public ngOnInit() {
if (this.showCheckbox) {
@ -212,23 +217,23 @@ export class GfActivitiesTableComponent
}
public onDeleteActivities() {
const confirmation = confirm(
$localize`Do you really want to delete these activities?`
);
if (confirmation) {
this.activitiesDeleted.emit();
}
this.notificationService.confirm({
confirmFn: () => {
this.activitiesDeleted.emit();
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete these activities?`
});
}
public onDeleteActivity(aId: string) {
const confirmation = confirm(
$localize`Do you really want to delete this activity?`
);
if (confirmation) {
this.activityDeleted.emit(aId);
}
this.notificationService.confirm({
confirmFn: () => {
this.activityDeleted.emit(aId);
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this activity?`
});
}
public onExport() {

Loading…
Cancel
Save