-
Notifications
You must be signed in to change notification settings - Fork 948
/
FeatureViewListingTable.tsx
90 lines (79 loc) · 2.16 KB
/
FeatureViewListingTable.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import React from "react";
import {
EuiBasicTable,
EuiBadge,
EuiTableFieldDataColumnType,
} from "@elastic/eui";
import EuiCustomLink from "../../components/EuiCustomLink";
import { genericFVType } from "../../parsers/mergedFVTypes";
import { EuiTableComputedColumnType } from "@elastic/eui/src/components/basic_table";
import { useParams } from "react-router-dom";
interface FeatureViewListingTableProps {
tagKeysSet: Set<string>;
featureViews: genericFVType[];
}
type genericFVTypeColumn =
| EuiTableFieldDataColumnType<genericFVType>
| EuiTableComputedColumnType<genericFVType>;
const FeatureViewListingTable = ({
tagKeysSet,
featureViews,
}: FeatureViewListingTableProps) => {
const { projectName } = useParams();
const columns: genericFVTypeColumn[] = [
{
name: "Name",
field: "name",
sortable: true,
render: (name: string, item: genericFVType) => {
return (
<EuiCustomLink
href={`/p/${projectName}/feature-view/${name}`}
to={`/p/${projectName}/feature-view/${name}`}
>
{name} {(item.type === "ondemand" && <EuiBadge>ondemand</EuiBadge>) || (item.type === "stream" && <EuiBadge>stream</EuiBadge>)}
</EuiCustomLink>
);
},
},
{
name: "# of Features",
field: "features",
sortable: true,
render: (features: unknown[]) => {
return features.length;
},
},
];
// Add columns if they come up in search
tagKeysSet.forEach((key) => {
columns.push({
name: key,
render: (item: genericFVType) => {
let tag = <span>n/a</span>;
if (item.type === "regular") {
const value = item.object.spec.tags
? item.object.spec.tags[key]
: undefined;
if (value) {
tag = <span>{value}</span>;
}
}
return tag;
},
});
});
const getRowProps = (item: genericFVType) => {
return {
"data-test-subj": `row-${item.name}`,
};
};
return (
<EuiBasicTable
columns={columns}
items={featureViews}
rowProps={getRowProps}
/>
);
};
export default FeatureViewListingTable;