Skip to content

Commit 3b625bd

Browse files
author
Patricio Albizu
committed
Merge branch 'main' of github.com:hypertrace/hypertrace-ui into StylingRadioGroup
2 parents 6207358 + e2f46bb commit 3b625bd

File tree

6 files changed

+45
-10
lines changed

6 files changed

+45
-10
lines changed
Lines changed: 6 additions & 0 deletions
Loading

projects/assets-library/src/icons/icon-library.module.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const iconsRootPath = 'assets/icons';
6565
{ key: IconType.MoreVertical, url: `${iconsRootPath}/more-vertical.svg` },
6666
{ key: IconType.NoData, url: `${iconsRootPath}/no-data.svg` },
6767
{ key: IconType.Node, url: `${iconsRootPath}/node.svg` },
68+
{ key: IconType.Note, url: `${iconsRootPath}/note.svg` },
6869
{ key: IconType.OpenInNewTab, url: `${iconsRootPath}/open-in-new-tab.svg` },
6970
{ key: IconType.Search, url: `${iconsRootPath}/search.svg` },
7071
{ key: IconType.SidebarCollapse, url: `${iconsRootPath}/sidebar-collapse.svg` },

projects/assets-library/src/icons/icon-type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export const enum IconType {
7878
NoData = 'svg:noData',
7979
Node = 'node',
8080
None = 'none',
81+
Note = 'svg:note',
8182
OpenInNewTab = 'svg:open-in-new-tab',
8283
PageView = 'pageview',
8384
Previous = 'navigate_before',

projects/components/src/paginator/paginator.component.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from '@angular/core';
1010
import { IconType } from '@hypertrace/assets-library';
1111
import { TypedSimpleChanges } from '@hypertrace/common';
12-
import { Observable } from 'rxjs';
12+
import { merge, Observable, Subject } from 'rxjs';
1313
import { ButtonSize, ButtonStyle } from '../button/button';
1414
import { PageEvent } from './page.event';
1515
import { PaginationProvider } from './paginator-api';
@@ -90,17 +90,26 @@ export class PaginatorComponent implements OnChanges, PaginationProvider {
9090
}
9191
private _totalItems: number = 0;
9292

93+
private readonly pageSizeInputSubject: Subject<PageEvent> = new Subject();
94+
9395
@Output()
9496
public readonly pageChange: EventEmitter<PageEvent> = new EventEmitter();
9597

96-
public readonly pageEvent$: Observable<PageEvent> = this.pageChange.asObservable();
98+
// Caused either by a change in the provided page, or user change being emitted
99+
public readonly pageEvent$: Observable<PageEvent> = merge(this.pageChange, this.pageSizeInputSubject);
97100

98101
public constructor(private readonly changeDetectorRef: ChangeDetectorRef) {}
99102

100103
public ngOnChanges(changes: TypedSimpleChanges<this>): void {
101104
if (changes.totalItems) {
102105
this.gotoFirstPage();
103106
}
107+
if (changes.pageIndex || changes.pageSize) {
108+
this.pageSizeInputSubject.next({
109+
pageSize: this.pageSize,
110+
pageIndex: this.pageIndex
111+
});
112+
}
104113
}
105114

106115
public onPageSizeChange(pageSize: number): void {

projects/components/src/table/table.component.scss

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ $header-height: 32px;
4242
flex-direction: row;
4343
height: 44px;
4444
min-height: 44px;
45-
cursor: pointer;
45+
46+
&.selectable {
47+
cursor: pointer;
48+
}
4649

4750
&.selected-row {
4851
background: $blue-1;

projects/components/src/table/table.component.ts

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
TypedSimpleChanges
2525
} from '@hypertrace/common';
2626
import { without } from 'lodash-es';
27-
import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
27+
import { BehaviorSubject, combineLatest, merge, Observable, Subject } from 'rxjs';
2828
import { filter, map } from 'rxjs/operators';
2929
import { FilterAttribute } from '../filtering/filter/filter-attribute';
3030
import { PageEvent } from '../paginator/page.event';
@@ -144,7 +144,11 @@ import { TableColumnConfigExtended, TableService } from './table.service';
144144
*cdkRowDef="let row; columns: this.visibleColumnIds$ | async"
145145
(mouseenter)="this.onDataRowMouseEnter(row)"
146146
(mouseleave)="this.onDataRowMouseLeave()"
147-
[ngClass]="{ 'selected-row': this.shouldHighlightRowAsSelection(row), 'hovered-row': this.isHoveredRow(row) }"
147+
[ngClass]="{
148+
'selected-row': this.shouldHighlightRowAsSelection(row),
149+
'hovered-row': this.isHoveredRow(row),
150+
selectable: this.supportsRowSelection()
151+
}"
148152
class="data-row"
149153
></cdk-row>
150154
@@ -168,7 +172,7 @@ import { TableColumnConfigExtended, TableService } from './table.service';
168172
[style.position]="this.isTableFullPage ? 'fixed' : 'sticky'"
169173
>
170174
<ht-paginator
171-
*htLetAsync="this.pagination$ as pagination"
175+
*htLetAsync="this.currentPage$ as pagination"
172176
(pageChange)="this.onPageChange($event)"
173177
[pageSizeOptions]="this.pageSizeOptions"
174178
[pageSize]="pagination?.pageSize"
@@ -335,9 +339,15 @@ export class TableComponent
335339
/*
336340
* Pagination
337341
*/
338-
public readonly pagination$: Observable<Partial<PageEvent> | undefined> = this.activatedRoute.queryParamMap.pipe(
339-
map(params => this.getPagination(params))
340-
);
342+
// For pushing changes to the page explicitly
343+
private readonly pageSubject: Subject<Partial<PageEvent>> = new Subject();
344+
// When route, sort or filters change, reset pagination
345+
public readonly paginationReset$: Observable<Partial<PageEvent>> = combineLatest([
346+
this.activatedRoute.queryParamMap,
347+
this.columnState$,
348+
this.filters$
349+
]).pipe(map(([params]) => this.calculateDefaultPagination(params)));
350+
public readonly currentPage$: Observable<Partial<PageEvent>> = merge(this.pageSubject, this.paginationReset$);
341351

342352
public dataSource?: TableCdkDataSource;
343353
public isTableFullPage: boolean = false;
@@ -691,11 +701,16 @@ export class TableComponent
691701
return this.selectionMode === TableSelectionMode.Multiple;
692702
}
693703

704+
public supportsRowSelection(): boolean {
705+
return this.hasMultiSelect() || this.hasSingleSelect();
706+
}
707+
694708
public isRowExpanded(row: StatefulTableRow): boolean {
695709
return this.hasExpandableRows() && row.$$state.expanded;
696710
}
697711

698712
public onPageChange(pageEvent: PageEvent): void {
713+
this.pageSubject.next(pageEvent);
699714
if (this.syncWithUrl) {
700715
this.navigationService.addQueryParametersToUrl({
701716
[TableComponent.PAGE_INDEX_URL_PARAM]: pageEvent.pageIndex,
@@ -711,7 +726,7 @@ export class TableComponent
711726
this.pageChange.emit(pageEvent);
712727
}
713728

714-
private getPagination(params: ParamMap): Partial<PageEvent> {
729+
private calculateDefaultPagination(params: ParamMap): Partial<PageEvent> {
715730
return this.syncWithUrl
716731
? {
717732
pageSize: new NumberCoercer({ defaultValue: this.pageSize }).coerce(

0 commit comments

Comments
 (0)