1
- import React , { useContext } from "react" ;
1
+ import React , { useContext , useState } from "react" ;
2
2
import { useParams } from "react-router-dom" ;
3
- import { EuiEmptyPrompt , EuiLoadingSpinner } from "@elastic/eui" ;
3
+ import {
4
+ EuiEmptyPrompt ,
5
+ EuiLoadingSpinner ,
6
+ EuiSpacer ,
7
+ EuiSelect ,
8
+ EuiFormRow ,
9
+ EuiFlexGroup ,
10
+ EuiFlexItem ,
11
+ } from "@elastic/eui" ;
4
12
import { feast } from "../../protos" ;
5
13
import useLoadRegistry from "../../queries/useLoadRegistry" ;
6
14
import RegistryPathContext from "../../contexts/RegistryPathContext" ;
7
15
import RegistryVisualization from "../../components/RegistryVisualization" ;
8
16
import { FEAST_FCO_TYPES } from "../../parsers/types" ;
17
+ import { filterPermissionsByAction } from "../../utils/permissionUtils" ;
9
18
10
19
interface FeatureViewLineageTabProps {
11
20
data : feast . core . IFeatureView ;
@@ -20,6 +29,7 @@ const FeatureViewLineageTab = ({ data }: FeatureViewLineageTabProps) => {
20
29
data : registryData ,
21
30
} = useLoadRegistry ( registryUrl ) ;
22
31
const { featureViewName } = useParams ( ) ;
32
+ const [ selectedPermissionAction , setSelectedPermissionAction ] = useState ( "" ) ;
23
33
24
34
const filterNode = {
25
35
type : FEAST_FCO_TYPES . featureView ,
@@ -47,12 +57,45 @@ const FeatureViewLineageTab = ({ data }: FeatureViewLineageTabProps) => {
47
57
/>
48
58
) }
49
59
{ isSuccess && registryData && (
50
- < RegistryVisualization
51
- registryData = { registryData . objects }
52
- relationships = { registryData . relationships }
53
- indirectRelationships = { registryData . indirectRelationships }
54
- filterNode = { filterNode }
55
- />
60
+ < >
61
+ < EuiSpacer size = "l" />
62
+ < EuiFlexGroup style = { { marginBottom : 16 } } >
63
+ < EuiFlexItem grow = { false } style = { { width : 300 } } >
64
+ < EuiFormRow label = "Filter by permissions" >
65
+ < EuiSelect
66
+ options = { [
67
+ { value : "" , text : "All" } ,
68
+ { value : "CREATE" , text : "CREATE" } ,
69
+ { value : "DESCRIBE" , text : "DESCRIBE" } ,
70
+ { value : "UPDATE" , text : "UPDATE" } ,
71
+ { value : "DELETE" , text : "DELETE" } ,
72
+ { value : "READ_ONLINE" , text : "READ_ONLINE" } ,
73
+ { value : "READ_OFFLINE" , text : "READ_OFFLINE" } ,
74
+ { value : "WRITE_ONLINE" , text : "WRITE_ONLINE" } ,
75
+ { value : "WRITE_OFFLINE" , text : "WRITE_OFFLINE" } ,
76
+ ] }
77
+ value = { selectedPermissionAction }
78
+ onChange = { ( e ) => setSelectedPermissionAction ( e . target . value ) }
79
+ aria-label = "Filter by permissions"
80
+ />
81
+ </ EuiFormRow >
82
+ </ EuiFlexItem >
83
+ </ EuiFlexGroup >
84
+ < RegistryVisualization
85
+ registryData = { registryData . objects }
86
+ relationships = { registryData . relationships }
87
+ indirectRelationships = { registryData . indirectRelationships }
88
+ permissions = {
89
+ selectedPermissionAction
90
+ ? filterPermissionsByAction (
91
+ registryData . permissions ,
92
+ selectedPermissionAction ,
93
+ )
94
+ : registryData . permissions
95
+ }
96
+ filterNode = { filterNode }
97
+ />
98
+ </ >
56
99
) }
57
100
</ >
58
101
) ;
0 commit comments