Skip to content

Commit 2954da2

Browse files
committed
better types
1 parent 6d33b2b commit 2954da2

File tree

2 files changed

+55
-26
lines changed

2 files changed

+55
-26
lines changed

internal/dev_server/ui/src/EventsTable.tsx

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { EventData } from "./types";
1+
import {
2+
EventData,
3+
FeatureEventPayload,
4+
GenericEventPayload,
5+
IndexEventPayload,
6+
SummaryEventPayload
7+
} from "./types";
28
import { Icon } from "@launchpad-ui/icons";
39
import { useState } from "react";
410

@@ -26,16 +32,16 @@ const clipboardLink = (linkText: string, value: string, showNotification: (messa
2632
);
2733
}
2834

29-
const summaryRows = (summaryEvent: EventData, showNotification: (message: string) => void) => {
35+
const summaryRows = (event: EventData, summaryEvent: SummaryEventPayload, showNotification: (message: string) => void) => {
3036
const rows = [];
31-
for (const [key, value] of Object.entries(summaryEvent.data.features || {})) {
32-
const rowId = summaryEvent.id + key;
37+
for (const [key, value] of Object.entries(summaryEvent.features || {})) {
38+
const rowId = event.id + key;
3339
const counters = value.counters || [];
3440

3541
for (const counter of counters) {
3642
rows.push(
3743
<tr key={rowId}>
38-
<td>{new Date(summaryEvent.timestamp).toLocaleTimeString()}</td>
44+
<td>{new Date(event.timestamp).toLocaleTimeString()}</td>
3945
<td>summary</td>
4046
<td><Icon name="flag" size="small" /> {key}</td>
4147
<td>evaluated as {String(counter.value)}</td>
@@ -48,7 +54,7 @@ const summaryRows = (summaryEvent: EventData, showNotification: (message: string
4854
return rows;
4955
}
5056

51-
const indexRows = (indexEvent: EventData, showNotification: (message: string) => void) => {
57+
const indexRows = (event: EventData, indexEvent: IndexEventPayload, showNotification: (message: string) => void) => {
5258
let targetText = 'unknown';
5359
let iconName:
5460
| 'person'
@@ -57,8 +63,12 @@ const indexRows = (indexEvent: EventData, showNotification: (message: string) =>
5763
| 'group'
5864
| 'cloud'
5965
| 'help' = 'help';
60-
if (indexEvent.data.context) {
61-
const context = indexEvent.data.context
66+
if (event.data.context) {
67+
const context = indexEvent.context;
68+
if (!context) {
69+
console.error('Index event context is undefined');
70+
return [];
71+
}
6272
switch (context.kind) {
6373
case 'user':
6474
targetText = 'user context';
@@ -93,39 +103,38 @@ const indexRows = (indexEvent: EventData, showNotification: (message: string) =>
93103
}
94104

95105
return [
96-
<tr key={indexEvent.id}>
97-
<td>{new Date(indexEvent.timestamp).toLocaleTimeString()}</td>
106+
<tr key={event.id}>
107+
<td>{new Date(event.timestamp).toLocaleTimeString()}</td>
98108
<td>index</td>
99109
<td><Icon name={iconName} size="small" /> {targetText}</td>
100-
<td>indexed {JSON.stringify(indexEvent.data).length} bytes</td>
110+
<td>indexed {JSON.stringify(indexEvent).length} bytes</td>
101111
<td>{clipboardLink('Copy to clipboard', JSON.stringify(indexEvent.data), showNotification)}</td>
102112
</tr>
103113
]
104114
}
105115

106-
const featureRows = (featureEvent: EventData, showNotification: (message: string) => void) => {
107-
const data = featureEvent.data; // Type assertion for feature event
108-
const eventText = `evaluated as ${String(data.value)}`;
116+
const featureRows = (event: EventData, featureEvent: FeatureEventPayload, showNotification: (message: string) => void) => {
117+
const eventText = `evaluated as ${String(featureEvent.value)}`;
109118

110119
return [
111-
<tr key={featureEvent.id} className="feature-row">
112-
<td>{new Date(featureEvent.timestamp).toLocaleTimeString()}</td>
120+
<tr key={event.id} className="feature-row">
121+
<td>{new Date(event.timestamp).toLocaleTimeString()}</td>
113122
<td>feature</td>
114-
<td>{data.key || 'unknown'}</td>
123+
<td>{featureEvent.key || 'unknown'}</td>
115124
<td>{eventText}</td>
116-
<td>{clipboardLink('Copy to clipboard', JSON.stringify(featureEvent.data), showNotification)}</td>
125+
<td>{clipboardLink('Copy to clipboard', JSON.stringify(featureEvent), showNotification)}</td>
117126
</tr>
118127
];
119128
}
120129

121-
const customRows = (event: EventData, showNotification: (message: string) => void) => {
130+
const customRows = (event: EventData, customEvent: GenericEventPayload, showNotification: (message: string) => void) => {
122131
return [
123132
<tr key={event.id}>
124133
<td>{new Date(event.timestamp).toLocaleTimeString()}</td>
125134
<td>{event.data.kind}</td>
126-
<td><Icon name="chart-histogram" size="small" /> {event.data.key || 'unknown'}</td>
127-
<td>value is {event.data.metricValue}</td>
128-
<td>{clipboardLink('Copy to clipboard', JSON.stringify(event.data), showNotification)}</td>
135+
<td><Icon name="chart-histogram" size="small" /> {customEvent.key }</td>
136+
<td>value is {customEvent.metricValue}</td>
137+
<td>{clipboardLink('Copy to clipboard', JSON.stringify(customEvent), showNotification)}</td>
129138
</tr>,
130139
];
131140
}
@@ -136,11 +145,11 @@ const customRows = (event: EventData, showNotification: (message: string) => voi
136145
const renderEvent = (event: EventData, showNotification: (message: string) => void) => {
137146
switch (event.data.kind) {
138147
case 'summary':
139-
return summaryRows(event, showNotification);
148+
return summaryRows(event, event.data as SummaryEventPayload, showNotification);
140149
case 'index':
141-
return indexRows(event, showNotification);
150+
return indexRows(event, event.data as IndexEventPayload, showNotification);
142151
case 'feature':
143-
return featureRows(event, showNotification);
152+
return featureRows(event, event.data as FeatureEventPayload, showNotification);
144153
case 'custom':
145154
return customRows(event, showNotification);
146155
default:

internal/dev_server/ui/src/types.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,32 @@ export interface FeatureEventPayload {
3232

3333
export interface IndexEventPayload {
3434
kind: 'index';
35-
user?: object;
35+
context?: {
36+
kind: string;
37+
key: string;
38+
user?: {
39+
key: string;
40+
email: string;
41+
[key: string]: unknown;
42+
};
43+
account?: {
44+
key: string;
45+
name: string;
46+
[key: string]: unknown;
47+
};
48+
application?: {
49+
key: string;
50+
[key: string]: unknown;
51+
};
52+
[key: string]: unknown;
53+
};
3654
[key: string]: unknown;
3755
}
3856

3957
export interface GenericEventPayload {
4058
kind: string;
59+
key: string;
60+
metricValue: string;
4161
[key: string]: unknown;
4262
}
4363

0 commit comments

Comments
 (0)