diff --git a/core/src/assets/svg/sprite.svg b/core/src/assets/svg/sprite.svg index e586bbc6c0..32afc784e7 100644 --- a/core/src/assets/svg/sprite.svg +++ b/core/src/assets/svg/sprite.svg @@ -264,6 +264,13 @@ c0,3.9-2.4,4.8-4.7,5.1c0.4,0.3,0.7,0.9,0.7,1.9c0,1.4,0,2.5,0,2.8c0,0.3,0.2,0.6,0.7,0.5c4.1-1.4,7-5.2,7-9.7 C25.3,9.6,20.7,5,15,5z"/> + + + + + + + + > `, changeDetection: ChangeDetectionStrategy.OnPush, }) diff --git a/core/src/js/components/decktracker/main/filters/decktracker-deck-sort-dropdown.component.ts b/core/src/js/components/decktracker/main/filters/decktracker-deck-sort-dropdown.component.ts index 0b160db14a..0e68cdcd01 100644 --- a/core/src/js/components/decktracker/main/filters/decktracker-deck-sort-dropdown.component.ts +++ b/core/src/js/components/decktracker/main/filters/decktracker-deck-sort-dropdown.component.ts @@ -22,17 +22,17 @@ import { AbstractSubscriptionComponent } from '../../../abstract-subscription.co styleUrls: [ `../../../../../css/global/filters.scss`, `../../../../../css/component/app-section.component.scss`, - `../../../../../css/component/filter-dropdown.component.scss`, + `../../../../../css/component/sort-dropdown.component.scss`, ], template: ` - + > `, changeDetection: ChangeDetectionStrategy.OnPush, }) diff --git a/core/src/js/components/duels/desktop/filters/duels-hero-sort-dropdown.component.ts b/core/src/js/components/duels/desktop/filters/duels-hero-sort-dropdown.component.ts index 6b4c8634a9..9e5641d625 100644 --- a/core/src/js/components/duels/desktop/filters/duels-hero-sort-dropdown.component.ts +++ b/core/src/js/components/duels/desktop/filters/duels-hero-sort-dropdown.component.ts @@ -22,10 +22,10 @@ import { AbstractSubscriptionComponent } from '../../../abstract-subscription.co styleUrls: [ `../../../../../css/global/filters.scss`, `../../../../../css/component/app-section.component.scss`, - `../../../../../css/component/filter-dropdown.component.scss`, + `../../../../../css/component/sort-dropdown.component.scss`, ], template: ` - + > `, changeDetection: ChangeDetectionStrategy.OnPush, }) diff --git a/core/src/js/components/duels/desktop/filters/duels-treasures-sort-dropdown.component.ts b/core/src/js/components/duels/desktop/filters/duels-treasures-sort-dropdown.component.ts index 816093f9b7..2d505595a2 100644 --- a/core/src/js/components/duels/desktop/filters/duels-treasures-sort-dropdown.component.ts +++ b/core/src/js/components/duels/desktop/filters/duels-treasures-sort-dropdown.component.ts @@ -21,10 +21,10 @@ import { AbstractSubscriptionComponent } from '../../../abstract-subscription.co styleUrls: [ `../../../../../css/global/filters.scss`, `../../../../../css/component/app-section.component.scss`, - `../../../../../css/component/filter-dropdown.component.scss`, + `../../../../../css/component/sort-dropdown.component.scss`, ], template: ` - + > `, changeDetection: ChangeDetectionStrategy.OnPush, }) diff --git a/core/src/js/components/sort-dropdown.component.ts b/core/src/js/components/sort-dropdown.component.ts new file mode 100644 index 0000000000..5b8f506f7c --- /dev/null +++ b/core/src/js/components/sort-dropdown.component.ts @@ -0,0 +1,113 @@ +import { + AfterViewInit, + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + ElementRef, + EventEmitter, + Input, + Output, + ViewRef, +} from '@angular/core'; +import { IOption } from 'ng-select'; + +@Component({ + selector: 'sort-dropdown', + styleUrls: [`../../css/global/scrollbar.scss`, `../../css/component/sort-dropdown.component.scss`], + template: ` + + + +
+ + + +
+ + + + + +
+
+ `, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class SortDropdownComponent implements AfterViewInit { + @Output() onOptionSelected: EventEmitter = new EventEmitter(); + + @Input() options: readonly IOption[]; + @Input() placeholder: string; + + @Input() set filter(value: string) { + this._filter = value; + // Don't know why this is required, but it is. + if (!(this.cdr as ViewRef)?.destroyed) { + this.cdr.detectChanges(); + } + } + + @Input() set visible(value: boolean) { + this._visible = value; + if (value) { + setTimeout(() => { + this.addCarets(); + }); + } + } + + _visible: boolean; + _filter: string; + + constructor(private readonly cdr: ChangeDetectorRef, private readonly el: ElementRef) {} + + refresh() { + if (!(this.cdr as ViewRef)?.destroyed) { + this.cdr.detectChanges(); + } + } + + ngAfterViewInit() { + this.addCarets(); + } + + private addCarets() { + const carets = this.el.nativeElement.querySelectorAll('.single .caret'); + + if (!!carets?.length) { + return; + } + + const singleEls: HTMLElement[] = this.el.nativeElement.querySelectorAll('.single'); + + singleEls.forEach((singleEl) => { + const caretEl = singleEl.appendChild(document.createElement('i')); + caretEl.innerHTML = ` + + `; + caretEl.classList.add('i-30'); + caretEl.classList.add('caret'); + }); + if (!(this.cdr as ViewRef)?.destroyed) { + this.cdr.detectChanges(); + } + } + + select(option: IOption) { + this.onOptionSelected.next(option); + } +} diff --git a/core/src/js/modules/shared/shared.module.ts b/core/src/js/modules/shared/shared.module.ts index 7e246adb71..24cb7fa5f4 100644 --- a/core/src/js/modules/shared/shared.module.ts +++ b/core/src/js/modules/shared/shared.module.ts @@ -89,6 +89,7 @@ import { FilterDropdownMultiselectComponent } from '../../components/filter-drop import { FilterDropdownComponent } from '../../components/filter-dropdown.component'; import { FilterComponent } from '../../components/filter.component'; import { FsFilterDropdownComponent } from '../../components/fs-filter-dropdown.component'; +import { SortDropdownComponent } from '../../components/sort-dropdown.component'; import { HotkeyComponent } from '../../components/hotkey.component'; import { InfiniteScrollComponent } from '../../components/infinite-scroll.component'; import { LoadingStateComponent } from '../../components/loading-state.component'; @@ -304,6 +305,7 @@ export function HttpLoaderFactory(http: HttpClient) { FilterDropdownComponent, FilterDropdownMultiselectComponent, FsFilterDropdownComponent, + SortDropdownComponent, StatCellComponent, ProgressBarComponent, @@ -444,6 +446,7 @@ export function HttpLoaderFactory(http: HttpClient) { FilterDropdownComponent, FilterDropdownMultiselectComponent, FsFilterDropdownComponent, + SortDropdownComponent, StatCellComponent, ProgressBarComponent,