Skip to content

Commit 9e94511

Browse files
feat: add code table cell renderer (#627)
1 parent fbbf449 commit 9e94511

File tree

5 files changed

+82
-2
lines changed

5 files changed

+82
-2
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
@import 'font';
2+
@import 'color-palette';
3+
4+
.code-cell {
5+
@include code($gray-7);
6+
@include ellipsis-overflow();
7+
background-color: $gray-2;
8+
border-radius: 4px;
9+
padding: 0 4px;
10+
display: inline-block;
11+
max-width: 100%;
12+
vertical-align: text-bottom;
13+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { FormattingModule } from '@hypertrace/common';
2+
import { createComponentFactory } from '@ngneat/spectator/jest';
3+
import { MockDirective } from 'ng-mocks';
4+
import { TooltipDirective } from '../../../../tooltip/tooltip.directive';
5+
import { TableCellStringParser } from '../../data-parsers/table-cell-string-parser';
6+
import { tableCellDataProvider, tableCellProviders } from '../../test/cell-providers';
7+
import { CodeTableCellRendererComponent } from './code-table-cell-renderer.component';
8+
9+
describe('Code table cell renderer component', () => {
10+
const buildComponent = createComponentFactory({
11+
component: CodeTableCellRendererComponent,
12+
imports: [FormattingModule],
13+
providers: [
14+
tableCellProviders(
15+
{
16+
id: 'test'
17+
},
18+
new TableCellStringParser(undefined!)
19+
)
20+
],
21+
declarations: [MockDirective(TooltipDirective)],
22+
shallow: true
23+
});
24+
25+
test('should render a plain string', () => {
26+
const spectator = buildComponent({
27+
providers: [tableCellDataProvider('test text')]
28+
});
29+
30+
expect(spectator.element).toHaveText('test text');
31+
expect(spectator.query(TooltipDirective)?.content).toBe('test text');
32+
});
33+
34+
test('should render a missing string', () => {
35+
const spectator = buildComponent();
36+
37+
expect(spectator.element).toHaveText('Unknown');
38+
expect(spectator.query(TooltipDirective)?.content).toBe('Unknown');
39+
});
40+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { ChangeDetectionStrategy, Component } from '@angular/core';
2+
import { TableCellRenderer } from '../../table-cell-renderer';
3+
import { TableCellRendererBase } from '../../table-cell-renderer-base';
4+
import { CoreTableCellParserType } from '../../types/core-table-cell-parser-type';
5+
import { CoreTableCellRendererType } from '../../types/core-table-cell-renderer-type';
6+
import { TableCellAlignmentType } from '../../types/table-cell-alignment-type';
7+
8+
@Component({
9+
selector: 'ht-code-table-cell-renderer',
10+
styleUrls: ['./code-table-cell-renderer.component.scss'],
11+
changeDetection: ChangeDetectionStrategy.OnPush,
12+
template: `
13+
<div class="code-cell" [htTooltip]="this.value | htDisplayString">
14+
{{ this.value | htDisplayString }}
15+
</div>
16+
`
17+
})
18+
@TableCellRenderer({
19+
type: CoreTableCellRendererType.Code,
20+
alignment: TableCellAlignmentType.Left,
21+
parser: CoreTableCellParserType.String
22+
})
23+
export class CodeTableCellRendererComponent extends TableCellRendererBase<string> {}

projects/components/src/table/cells/table-cells.module.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { TableCellNoOpParser } from './data-parsers/table-cell-no-op-parser';
1616
import { TableCellNumberParser } from './data-parsers/table-cell-number-parser';
1717
import { TableCellStringParser } from './data-parsers/table-cell-string-parser';
1818
import { TableCellTimestampParser } from './data-parsers/table-cell-timestamp-parser';
19+
import { CodeTableCellRendererComponent } from './data-renderers/code/code-table-cell-renderer.component';
1920
import { IconTableCellRendererComponent } from './data-renderers/icon/icon-table-cell-renderer.component';
2021
import { NumericTableCellRendererComponent } from './data-renderers/numeric/numeric-table-cell-renderer.component';
2122
import { TableDataCellRendererComponent } from './data-renderers/table-data-cell-renderer.component';
@@ -62,7 +63,8 @@ export const TABLE_CELL_PARSERS = new InjectionToken<unknown[][]>('TABLE_CELL_PA
6263
TableHeaderCellRendererComponent,
6364
TextTableCellRendererComponent,
6465
TimestampTableCellRendererComponent,
65-
TimeAgoTableCellRendererComponent
66+
TimeAgoTableCellRendererComponent,
67+
CodeTableCellRendererComponent
6668
],
6769
providers: [
6870
{
@@ -74,7 +76,8 @@ export const TABLE_CELL_PARSERS = new InjectionToken<unknown[][]>('TABLE_CELL_PA
7476
TableExpanderCellRendererComponent,
7577
TextTableCellRendererComponent,
7678
TimestampTableCellRendererComponent,
77-
TimeAgoTableCellRendererComponent
79+
TimeAgoTableCellRendererComponent,
80+
CodeTableCellRendererComponent
7881
],
7982
multi: true
8083
},

projects/components/src/table/cells/types/core-table-cell-renderer-type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export const enum CoreTableCellRendererType {
22
Checkbox = 'checkbox',
3+
Code = 'code',
34
Icon = 'icon',
45
Number = 'number',
56
RowExpander = 'row-expander',

0 commit comments

Comments
 (0)