mirror of https://github.com/ghostfolio/ghostfolio
committed by
GitHub
24 changed files with 455 additions and 231 deletions
@ -1,4 +1,3 @@ |
|||||
import { SymbolProfile } from '@prisma/client'; |
import { SymbolProfile } from '@prisma/client'; |
||||
|
|
||||
export interface DataProviderGhostfolioAssetProfileResponse |
export interface DataProviderGhostfolioAssetProfileResponse extends Partial<SymbolProfile> {} |
||||
extends Partial<SymbolProfile> {} |
|
||||
|
|||||
@ -1,50 +1,54 @@ |
|||||
<div |
<div class="card-wrapper position-relative" [class.hover-3d]="hover3d"> |
||||
class="card-container position-relative" |
<div class="card-container" [ngClass]="{ premium: name === 'Premium' }"> |
||||
[ngClass]="{ premium: name === 'Premium' }" |
<a |
||||
> |
class="card-item d-flex flex-column justify-content-between p-4" |
||||
<a |
[routerLink]="routerLinkPricing" |
||||
class="card-item d-flex flex-column justify-content-between p-4" |
> |
||||
[routerLink]="routerLinkPricing" |
@if (hover3d) { |
||||
> |
@for (zone of [1, 2, 3, 4, 5, 6, 7, 8, 9]; track zone) { |
||||
<div class="d-flex justify-content-end"> |
<span class="hover-zone position-absolute"></span> |
||||
<gf-logo |
} |
||||
size="large" |
} |
||||
[ngClass]="{ 'text-muted': name === 'Basic' }" |
<div class="d-flex justify-content-end"> |
||||
[showLabel]="false" |
<gf-logo |
||||
/> |
size="large" |
||||
</div> |
[ngClass]="{ 'text-muted': name === 'Basic' }" |
||||
@if (hasPermissionToCreateApiKey) { |
[showLabel]="false" |
||||
<div class="mt-5"> |
/> |
||||
<div class="heading text-muted" i18n>API Key</div> |
|
||||
<div class="align-items-center d-flex"> |
|
||||
<div class="text-monospace value">* * * * * * * * *</div> |
|
||||
<div class="ml-1"> |
|
||||
<button |
|
||||
class="no-min-width" |
|
||||
i18n-title |
|
||||
mat-button |
|
||||
title="Generate Ghostfolio Premium Data Provider API key for self-hosted environments..." |
|
||||
(click)="onGenerateApiKey($event)" |
|
||||
> |
|
||||
<ion-icon name="refresh-outline" /> |
|
||||
</button> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
} |
|
||||
<div class="d-flex justify-content-between"> |
|
||||
<div> |
|
||||
<div class="heading text-muted" i18n>Membership</div> |
|
||||
<div class="text-truncate value">{{ name }}</div> |
|
||||
</div> |
</div> |
||||
@if (expiresAt) { |
@if (hasPermissionToCreateApiKey) { |
||||
<div> |
<div class="mt-5"> |
||||
<div class="heading text-muted" i18n>Valid until</div> |
<div class="heading text-muted" i18n>API Key</div> |
||||
<div class="text-truncate value"> |
<div class="align-items-center d-flex"> |
||||
{{ expiresAt }} |
<div class="text-monospace value">* * * * * * * * *</div> |
||||
|
<div class="ml-1"> |
||||
|
<button |
||||
|
class="bg-transparent no-min-width" |
||||
|
i18n-title |
||||
|
mat-button |
||||
|
title="Generate Ghostfolio Premium Data Provider API key for self-hosted environments..." |
||||
|
(click)="onGenerateApiKey($event)" |
||||
|
> |
||||
|
<ion-icon name="refresh-outline" /> |
||||
|
</button> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
} |
} |
||||
</div> |
<div class="d-flex justify-content-between"> |
||||
</a> |
<div> |
||||
|
<div class="heading text-muted" i18n>Membership</div> |
||||
|
<div class="text-truncate value">{{ name }}</div> |
||||
|
</div> |
||||
|
@if (expiresAt) { |
||||
|
<div> |
||||
|
<div class="heading text-muted" i18n>Valid until</div> |
||||
|
<div class="text-truncate value"> |
||||
|
{{ expiresAt }} |
||||
|
</div> |
||||
|
</div> |
||||
|
} |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
</div> |
</div> |
||||
|
|||||
Loading…
Reference in new issue