@@ -57,17 +57,19 @@ const useLazerPriceIdState = () => {
57
57
return state ;
58
58
} ;
59
59
60
- export function LazerPriceIdTable ( ) {
61
- const lazerPriceIdState = useLazerPriceIdState ( ) ;
60
+ const LoadedLazerPriceIdTable = ( {
61
+ priceFeeds,
62
+ } : {
63
+ priceFeeds : LazerPriceIdMetadata [ ] ;
64
+ } ) => {
62
65
const [ search , setSearch ] = useState ( "" ) ;
63
66
64
67
const updateSearch = useCallback ( ( event : ChangeEvent < HTMLInputElement > ) => {
65
68
setSearch ( event . target . value ) ;
66
69
} , [ ] ) ;
67
70
68
71
const filteredFeeds = useMemo ( ( ) => {
69
- if ( lazerPriceIdState . type !== LazerPriceIdStateType . Loaded ) return [ ] ;
70
- return lazerPriceIdState . priceFeeds . filter ( ( feed ) => {
72
+ return priceFeeds . filter ( ( feed ) => {
71
73
const searchLower = search . toLowerCase ( ) ;
72
74
return (
73
75
feed . symbol . toLowerCase ( ) . includes ( searchLower ) ||
@@ -76,7 +78,47 @@ export function LazerPriceIdTable() {
76
78
feed . pyth_lazer_id . toString ( ) . includes ( searchLower )
77
79
) ;
78
80
} ) ;
79
- } , [ lazerPriceIdState , search ] ) ;
81
+ } , [ priceFeeds , search ] ) ;
82
+
83
+ return (
84
+ < div >
85
+ < input
86
+ type = "text"
87
+ placeholder = "Search by symbol, name, description, or pyth lazer id..."
88
+ value = { search }
89
+ onChange = { updateSearch }
90
+ className = "w-full p-2 mb-4 border border-gray-300 rounded-md"
91
+ />
92
+ < table >
93
+ < thead >
94
+ < tr >
95
+ < th > Asset Type</ th >
96
+ < th > Description</ th >
97
+ < th > Name</ th >
98
+ < th > Symbol</ th >
99
+ < th > Pyth Lazer Id</ th >
100
+ < th > Exponent</ th >
101
+ </ tr >
102
+ </ thead >
103
+ < tbody >
104
+ { filteredFeeds . map ( ( priceFeed ) => (
105
+ < tr key = { priceFeed . symbol } >
106
+ < StyledTd > { priceFeed . asset_type } </ StyledTd >
107
+ < StyledTd > { priceFeed . description } </ StyledTd >
108
+ < StyledTd > { priceFeed . name } </ StyledTd >
109
+ < StyledTd > { priceFeed . symbol } </ StyledTd >
110
+ < StyledTd > { priceFeed . pyth_lazer_id } </ StyledTd >
111
+ < StyledTd > { priceFeed . exponent } </ StyledTd >
112
+ </ tr >
113
+ ) ) }
114
+ </ tbody >
115
+ </ table >
116
+ </ div >
117
+ ) ;
118
+ } ;
119
+
120
+ export function LazerPriceIdTable ( ) {
121
+ const lazerPriceIdState = useLazerPriceIdState ( ) ;
80
122
81
123
switch ( lazerPriceIdState . type ) {
82
124
case LazerPriceIdStateType . NotLoaded :
@@ -85,39 +127,7 @@ export function LazerPriceIdTable() {
85
127
return < Spinner /> ;
86
128
case LazerPriceIdStateType . Loaded :
87
129
return (
88
- < div >
89
- < input
90
- type = "text"
91
- placeholder = "Search by symbol, name, description, or pyth lazer id..."
92
- value = { search }
93
- onChange = { updateSearch }
94
- className = "w-full p-2 mb-4 border border-gray-300 rounded-md"
95
- />
96
- < table >
97
- < thead >
98
- < tr >
99
- < th > Asset Type</ th >
100
- < th > Description</ th >
101
- < th > Name</ th >
102
- < th > Symbol</ th >
103
- < th > Pyth Lazer Id</ th >
104
- < th > Exponent</ th >
105
- </ tr >
106
- </ thead >
107
- < tbody >
108
- { filteredFeeds . map ( ( priceFeed ) => (
109
- < tr key = { priceFeed . symbol } >
110
- < StyledTd > { priceFeed . asset_type } </ StyledTd >
111
- < StyledTd > { priceFeed . description } </ StyledTd >
112
- < StyledTd > { priceFeed . name } </ StyledTd >
113
- < StyledTd > { priceFeed . symbol } </ StyledTd >
114
- < StyledTd > { priceFeed . pyth_lazer_id } </ StyledTd >
115
- < StyledTd > { priceFeed . exponent } </ StyledTd >
116
- </ tr >
117
- ) ) }
118
- </ tbody >
119
- </ table >
120
- </ div >
130
+ < LoadedLazerPriceIdTable priceFeeds = { lazerPriceIdState . priceFeeds } />
121
131
) ;
122
132
case LazerPriceIdStateType . Error :
123
133
return < div > Error</ div > ;
0 commit comments