1- import React , { useContext } from "react" ;
1+ import React , { useContext , useState } from "react" ;
22import { 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" ;
412import { feast } from "../../protos" ;
513import useLoadRegistry from "../../queries/useLoadRegistry" ;
614import RegistryPathContext from "../../contexts/RegistryPathContext" ;
715import RegistryVisualization from "../../components/RegistryVisualization" ;
816import { FEAST_FCO_TYPES } from "../../parsers/types" ;
17+ import { filterPermissionsByAction } from "../../utils/permissionUtils" ;
918
1019interface FeatureViewLineageTabProps {
1120 data : feast . core . IFeatureView ;
@@ -20,6 +29,7 @@ const FeatureViewLineageTab = ({ data }: FeatureViewLineageTabProps) => {
2029 data : registryData ,
2130 } = useLoadRegistry ( registryUrl ) ;
2231 const { featureViewName } = useParams ( ) ;
32+ const [ selectedPermissionAction , setSelectedPermissionAction ] = useState ( "" ) ;
2333
2434 const filterNode = {
2535 type : FEAST_FCO_TYPES . featureView ,
@@ -47,12 +57,45 @@ const FeatureViewLineageTab = ({ data }: FeatureViewLineageTabProps) => {
4757 />
4858 ) }
4959 { 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+ </ >
5699 ) }
57100 </ >
58101 ) ;
0 commit comments