mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
6.8 KiB
224 lines
6.8 KiB
<div (click)="$event.stopPropagation()">
|
|
<div
|
|
[style.width]="deviceType === 'mobile' ? '85vw' : '30rem'"
|
|
(keydown.tab)="$event.stopPropagation()"
|
|
>
|
|
<div class="align-items-center d-flex search-container">
|
|
<ion-icon class="ml-2 mr-0" name="search-outline" />
|
|
<input
|
|
#search
|
|
autocomplete="off"
|
|
autocorrect="off"
|
|
class="border-0 p-2 w-100"
|
|
name="search"
|
|
type="text"
|
|
[formControl]="searchFormControl"
|
|
[placeholder]="placeholder"
|
|
/>
|
|
@if (deviceType !== 'mobile' && !searchFormControl.value) {
|
|
<div class="hot-key-hint mx-1 px-1">/</div>
|
|
}
|
|
@if (searchFormControl.value) {
|
|
<button
|
|
class="h-100 no-min-width px-3 rounded-0"
|
|
mat-button
|
|
(click)="initialize()"
|
|
>
|
|
<ion-icon class="m-0" name="close-circle-outline" />
|
|
</button>
|
|
} @else {
|
|
<button
|
|
class="h-100 no-min-width px-3 rounded-0"
|
|
mat-button
|
|
(click)="onCloseAssistant()"
|
|
>
|
|
<ion-icon class="m-0" name="close-outline" />
|
|
</button>
|
|
}
|
|
</div>
|
|
@if (searchFormControl.value) {
|
|
<div class="overflow-auto py-2 result-container">
|
|
@if (
|
|
!isLoading.accounts &&
|
|
!isLoading.assetProfiles &&
|
|
!isLoading.holdings &&
|
|
!isLoading.quickLinks &&
|
|
searchResults.accounts?.length === 0 &&
|
|
searchResults.assetProfiles?.length === 0 &&
|
|
searchResults.holdings?.length === 0 &&
|
|
searchResults.quickLinks?.length === 0
|
|
) {
|
|
<div class="px-3 py-1 text-muted" i18n>No results found...</div>
|
|
} @else {
|
|
@if (
|
|
isLoading.quickLinks || searchResults?.quickLinks?.length !== 0
|
|
) {
|
|
<div class="mb-2">
|
|
<div class="font-weight-bold px-3 text-muted title" i18n>
|
|
Quick Links
|
|
</div>
|
|
@for (
|
|
searchResultItem of searchResults.quickLinks;
|
|
track searchResultItem
|
|
) {
|
|
<gf-assistant-list-item
|
|
[item]="searchResultItem"
|
|
(clicked)="onCloseAssistant()"
|
|
/>
|
|
}
|
|
@if (isLoading.quickLinks) {
|
|
<ngx-skeleton-loader
|
|
animation="pulse"
|
|
class="mx-3"
|
|
[theme]="{
|
|
height: '1.5rem',
|
|
width: '100%'
|
|
}"
|
|
/>
|
|
}
|
|
</div>
|
|
}
|
|
@if (isLoading.accounts || searchResults?.accounts?.length !== 0) {
|
|
<div>
|
|
<div class="font-weight-bold px-3 text-muted title" i18n>
|
|
Accounts
|
|
</div>
|
|
@for (
|
|
searchResultItem of searchResults.accounts;
|
|
track searchResultItem
|
|
) {
|
|
<gf-assistant-list-item
|
|
[item]="searchResultItem"
|
|
(clicked)="onCloseAssistant()"
|
|
/>
|
|
}
|
|
@if (isLoading.accounts) {
|
|
<ngx-skeleton-loader
|
|
animation="pulse"
|
|
class="mx-3"
|
|
[theme]="{
|
|
height: '1.5rem',
|
|
width: '100%'
|
|
}"
|
|
/>
|
|
}
|
|
</div>
|
|
}
|
|
@if (isLoading.holdings || searchResults?.holdings?.length !== 0) {
|
|
<div>
|
|
<div class="font-weight-bold px-3 text-muted title" i18n>
|
|
Holdings
|
|
</div>
|
|
@for (
|
|
searchResultItem of searchResults.holdings;
|
|
track searchResultItem
|
|
) {
|
|
<gf-assistant-list-item
|
|
[item]="searchResultItem"
|
|
(clicked)="onCloseAssistant()"
|
|
/>
|
|
}
|
|
@if (isLoading.holdings) {
|
|
<ngx-skeleton-loader
|
|
animation="pulse"
|
|
class="mx-3"
|
|
[theme]="{
|
|
height: '1.5rem',
|
|
width: '100%'
|
|
}"
|
|
/>
|
|
}
|
|
</div>
|
|
}
|
|
@if (
|
|
hasPermissionToAccessAdminControl &&
|
|
(isLoading.assetProfiles ||
|
|
searchResults?.assetProfiles?.length !== 0)
|
|
) {
|
|
<div class="mt-2">
|
|
<div class="font-weight-bold px-3 text-muted title" i18n>
|
|
Asset Profiles
|
|
</div>
|
|
@for (
|
|
searchResultItem of searchResults.assetProfiles;
|
|
track searchResultItem
|
|
) {
|
|
<gf-assistant-list-item
|
|
[item]="searchResultItem"
|
|
(clicked)="onCloseAssistant()"
|
|
/>
|
|
}
|
|
@if (isLoading.assetProfiles) {
|
|
<ngx-skeleton-loader
|
|
animation="pulse"
|
|
class="mx-3"
|
|
[theme]="{
|
|
height: '1.5rem',
|
|
width: '100%'
|
|
}"
|
|
/>
|
|
}
|
|
</div>
|
|
}
|
|
}
|
|
</div>
|
|
}
|
|
</div>
|
|
@if (!searchFormControl.value) {
|
|
<div class="date-range-selector-container p-3">
|
|
<mat-form-field appearance="outline" class="w-100 without-hint">
|
|
<mat-label i18n>Date Range</mat-label>
|
|
<mat-select
|
|
[formControl]="dateRangeFormControl"
|
|
(selectionChange)="onChangeDateRange($event.value)"
|
|
>
|
|
@for (
|
|
dateRangeOption of dateRangeOptions;
|
|
track dateRangeOption.value
|
|
) {
|
|
<mat-option [value]="dateRangeOption.value">{{
|
|
dateRangeOption.label
|
|
}}</mat-option>
|
|
}
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="p-3">
|
|
<gf-portfolio-filter-form
|
|
#portfolioFilterForm
|
|
[accounts]="user?.accounts"
|
|
[assetClasses]="assetClasses"
|
|
[formControl]="portfolioFilterFormControl"
|
|
[holdings]="holdings"
|
|
[tags]="tags"
|
|
/>
|
|
<div class="d-flex w-100">
|
|
<button
|
|
i18n
|
|
mat-button
|
|
type="button"
|
|
[disabled]="
|
|
!portfolioFilterForm.hasFilters() || portfolioFilterForm.disabled
|
|
"
|
|
(click)="onResetFilters()"
|
|
>
|
|
Reset Filters
|
|
</button>
|
|
<span class="gf-spacer"></span>
|
|
<button
|
|
color="primary"
|
|
i18n
|
|
mat-flat-button
|
|
type="button"
|
|
[disabled]="
|
|
!portfolioFilterForm.filterForm.dirty ||
|
|
portfolioFilterForm.disabled
|
|
"
|
|
(click)="onApplyFilters()"
|
|
>
|
|
Apply Filters
|
|
</button>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|