@@ -12,8 +12,7 @@ import {
1212 type AllFeedsType ,
1313 getCountryLocationSummaries ,
1414 getLocationName ,
15- type GTFSFeedType ,
16- type GTFSRTFeedType ,
15+ type SearchFeedItem ,
1716} from '../../services/feeds/utils' ;
1817import * as React from 'react' ;
1918import { FeedStatusIndicator } from '../../components/FeedStatus' ;
@@ -29,10 +28,11 @@ import ProviderTitle from './ProviderTitle';
2928export interface AdvancedSearchTableProps {
3029 feedsData : AllFeedsType | undefined ;
3130 selectedFeatures : string [ ] | undefined ;
31+ selectedGbfsVersions : string [ ] | undefined ;
3232}
3333
3434const renderGTFSDetails = (
35- gtfsFeed : GTFSFeedType ,
35+ gtfsFeed : SearchFeedItem ,
3636 selectedFeatures : string [ ] ,
3737) : React . ReactElement => {
3838 const theme = useTheme ( ) ;
@@ -78,7 +78,7 @@ const renderGTFSDetails = (
7878} ;
7979
8080const renderGTFSRTDetails = (
81- gtfsRtFeed : GTFSRTFeedType ,
81+ gtfsRtFeed : SearchFeedItem ,
8282) : React . ReactElement => {
8383 return (
8484 < GtfsRtEntities
@@ -88,27 +88,36 @@ const renderGTFSRTDetails = (
8888 ) ;
8989} ;
9090
91- // TODO: Finalize with types and versions when GBFS endpoint is implemented
92- // const renderGBFSDetails = (gbfsFeed: any) => {
93- // const fakeVersions = ['v3.0', 'v2.0', 'v1.0'];
94- // return (
95- // <>
96- // {fakeVersions.map((version: string, index: number) => (
97- // <Chip
98- // label={version}
99- // key={index}
100- // size='small'
101- // variant='outlined'
102- // sx={{ mr: 1 }}
103- // />
104- // ))}
105- // </>
106- // );
107- // };
91+ const renderGBFSDetails = (
92+ gbfsFeedSearchElement : SearchFeedItem ,
93+ selectedGbfsVersions : string [ ] ,
94+ ) : JSX . Element => {
95+ const theme = useTheme ( ) ;
96+ return (
97+ < Box >
98+ { gbfsFeedSearchElement . versions ?. map ( ( version : string , index : number ) => (
99+ < Chip
100+ label = { 'v' + version }
101+ key = { index }
102+ size = 'small'
103+ variant = 'outlined'
104+ sx = { {
105+ mr : 1 ,
106+ border : selectedGbfsVersions . includes ( 'v' + version )
107+ ? `2px solid ${ theme . palette . primary . main } `
108+ : '' ,
109+ color : 'black' ,
110+ } }
111+ />
112+ ) ) }
113+ </ Box >
114+ ) ;
115+ } ;
108116
109117export default function AdvancedSearchTable ( {
110118 feedsData,
111119 selectedFeatures,
120+ selectedGbfsVersions,
112121} : AdvancedSearchTableProps ) : React . ReactElement {
113122 const { t } = useTranslation ( 'feeds' ) ;
114123 const [ anchorEl , setAnchorEl ] = React . useState < null | HTMLElement > ( null ) ;
@@ -135,6 +144,8 @@ export default function AdvancedSearchTable({
135144 }
136145 const hasGtfsFeatures =
137146 ( feed ?. latest_dataset ?. validation_report ?. features ?. length ?? 0 ) > 0 ;
147+ const hasGbfsVersions = ( feed . versions ?. length ?? 0 ) > 0 ;
148+
138149 return (
139150 < Card
140151 key = { index }
@@ -181,9 +192,11 @@ export default function AdvancedSearchTable({
181192 { feed . official === true && (
182193 < OfficialChip isLongDisplay = { false } > </ OfficialChip >
183194 ) }
184- < FeedStatusIndicator
185- status = { feed . status }
186- > </ FeedStatusIndicator >
195+ { feed . data_type !== 'gbfs' && (
196+ < FeedStatusIndicator
197+ status = { feed . status }
198+ > </ FeedStatusIndicator >
199+ ) }
187200 </ Box >
188201
189202 < Box
@@ -285,22 +298,20 @@ export default function AdvancedSearchTable({
285298 : { }
286299 }
287300 >
288- { renderGTFSDetails (
289- feed as GTFSFeedType ,
290- selectedFeatures ?? [ ] ,
291- ) }
301+ { renderGTFSDetails ( feed , selectedFeatures ?? [ ] ) }
292302 </ Box >
293303 ) }
294304 { feed . data_type === 'gtfs_rt' && (
295305 < Box sx = { descriptionDividerStyle } >
296- { renderGTFSRTDetails ( feed as GTFSRTFeedType ) }
306+ { renderGTFSRTDetails ( feed ) }
307+ </ Box >
308+ ) }
309+
310+ { feed . data_type === 'gbfs' && (
311+ < Box sx = { hasGbfsVersions ? descriptionDividerStyle : { } } >
312+ { renderGBFSDetails ( feed , selectedGbfsVersions ?? [ ] ) }
297313 </ Box >
298314 ) }
299- { /*
300- TODO: uncomment when GBFS option is available
301- {feed.data_type === ('gbfs' as any) && (
302- <Box>{renderGBFSDetails(feed)}</Box>
303- )} */ }
304315 </ Box >
305316 </ CardActionArea >
306317 </ Card >
0 commit comments