1
- import { Flex , FlexItem , Title , TitleSizes } from '@patternfly/react-core' ;
1
+ import { Flex , FlexItem , Title , TitleSizes , Tooltip } from '@patternfly/react-core' ;
2
2
import type { Providers } from 'api/providers' ;
3
3
import { ProviderType } from 'api/providers' ;
4
4
import { getProvidersQuery } from 'api/queries/providersQuery' ;
@@ -23,6 +23,7 @@ import { Currency } from 'routes/components/currency';
23
23
import { GroupBy } from 'routes/components/groupBy' ;
24
24
import { Perspective } from 'routes/components/perspective' ;
25
25
import { getIdKeyForGroupBy } from 'routes/utils/computedReport/getComputedExplorerReportItems' ;
26
+ import { getTotalCost } from 'routes/utils/cost' ;
26
27
import type { DateRangeType } from 'routes/utils/dateRange' ;
27
28
import type { Filter } from 'routes/utils/filter' ;
28
29
import { filterProviders , hasCloudProvider } from 'routes/utils/providers' ;
@@ -279,7 +280,10 @@ class ExplorerHeaderBase extends React.Component<ExplorerHeaderProps, ExplorerHe
279
280
onFilterRemoved,
280
281
onGroupBySelect,
281
282
perspective,
283
+ providers,
284
+ providersError,
282
285
providersFetchStatus,
286
+ report,
283
287
query,
284
288
startDate,
285
289
} = this . props ;
@@ -299,8 +303,15 @@ class ExplorerHeaderBase extends React.Component<ExplorerHeaderProps, ExplorerHe
299
303
const resourcePathsType = getResourcePathsType ( perspective ) ;
300
304
const tagPathsType = getTagReportPathsType ( perspective ) ;
301
305
306
+ const showContent = report && ! providersError && providers ?. meta ?. count > 0 ;
302
307
const showCostDistribution = costDistribution === ComputedReportItemValueType . distributed ; // Always show -- see https://issues.redhat.com/browse/COST-5870
303
308
309
+ const { cost, infrastructureCost, supplementaryCost } = getTotalCost ( report , costDistribution ) ;
310
+ const dateRange = intl . formatDateTimeRange ( new Date ( startDate + 'T00:00:00' ) , new Date ( endDate + 'T00:00:00' ) , {
311
+ day : 'numeric' ,
312
+ month : 'long' ,
313
+ } ) ;
314
+
304
315
return (
305
316
< header style = { styles . header } >
306
317
< Flex justifyContent = { { default : 'justifyContentSpaceBetween' } } style = { styles . headerContent } >
@@ -351,21 +362,49 @@ class ExplorerHeaderBase extends React.Component<ExplorerHeaderProps, ExplorerHe
351
362
</ Flex >
352
363
</ FlexItem >
353
364
</ Flex >
354
- < ExplorerFilter
355
- dateRangeType = { dateRangeType }
356
- endDate = { endDate }
357
- groupBy = { groupBy }
358
- isCurrentMonthData = { isCurrentMonthData }
359
- isDataAvailable = { isDataAvailable }
360
- isDisabled = { noProviders }
361
- isPreviousMonthData = { isPreviousMonthData }
362
- onFilterAdded = { onFilterAdded }
363
- onFilterRemoved = { onFilterRemoved }
364
- onDateRangeSelect = { onDateRangeSelect }
365
- perspective = { perspective }
366
- query = { query }
367
- startDate = { startDate }
368
- />
365
+ < Flex justifyContent = { { default : 'justifyContentSpaceBetween' } } style = { styles . filterContainer } >
366
+ < FlexItem >
367
+ < ExplorerFilter
368
+ dateRangeType = { dateRangeType }
369
+ endDate = { endDate }
370
+ groupBy = { groupBy }
371
+ isCurrentMonthData = { isCurrentMonthData }
372
+ isDataAvailable = { isDataAvailable }
373
+ isDisabled = { noProviders }
374
+ isPreviousMonthData = { isPreviousMonthData }
375
+ onFilterAdded = { onFilterAdded }
376
+ onFilterRemoved = { onFilterRemoved }
377
+ onDateRangeSelect = { onDateRangeSelect }
378
+ perspective = { perspective }
379
+ query = { query }
380
+ startDate = { startDate }
381
+ />
382
+ </ FlexItem >
383
+ < FlexItem >
384
+ { showContent && (
385
+ < >
386
+ { perspective === PerspectiveType . ocp ? (
387
+ < Tooltip
388
+ content = { intl . formatMessage ( messages . dashboardTotalCostTooltip , {
389
+ infrastructureCost,
390
+ supplementaryCost,
391
+ } ) }
392
+ enableFlip
393
+ >
394
+ < Title headingLevel = "h2" style = { styles . costValue } size = { TitleSizes [ '4xl' ] } >
395
+ { cost }
396
+ </ Title >
397
+ </ Tooltip >
398
+ ) : (
399
+ < Title headingLevel = "h2" style = { styles . costValue } size = { TitleSizes [ '4xl' ] } >
400
+ { cost }
401
+ </ Title >
402
+ ) }
403
+ < div style = { styles . dateTitle } > { intl . formatMessage ( messages . sinceDate , { dateRange } ) } </ div >
404
+ </ >
405
+ ) }
406
+ </ FlexItem >
407
+ </ Flex >
369
408
</ header >
370
409
) ;
371
410
}
0 commit comments