Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 5x 5x 5x 5x 5x 5x 5x 5x 1x 5x 1x 4x 4x 4x 1x 2x 2x 1x | /*
* Copyright 2021 Harness Inc. All rights reserved.
* Use of this source code is governed by the PolyForm Shield 1.0.0 license
* that can be found in the licenses directory at the root of this repository, also available at
* https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
*/
import React, { useState } from 'react'
import {
Button,
ButtonVariation,
Layout,
PageHeader,
PageBody,
PageSpinner,
Text,
PageError
} from '@wings-software/uicore'
import { useParams } from 'react-router-dom'
import { Color } from '@harness/design-system'
import LandingDashboardFactory from '@common/factories/LandingDashboardFactory'
import {
LandingDashboardContextProvider,
TimeRangeToDays,
useLandingDashboardContext
} from '@common/factories/LandingDashboardContext'
import { ModuleName } from 'framework/types/ModuleName'
import { useAppStore } from 'framework/AppStore/AppStoreContext'
import { useStrings } from 'framework/strings'
import LandingDashboardWidgetWrapper from '@projects-orgs/components/LandingDashboardWidgetWrapper/LandingDashboardWidgetWrapper'
import type { AccountPathProps } from '@common/interfaces/RouteInterfaces'
import { useGetCounts } from 'services/dashboard-service'
import LandingDashboardSummaryWidget from '@projects-orgs/components/LandingDashboardSummaryWidget/LandingDashboardSummaryWidget'
import TimeRangeSelect from '@projects-orgs/components/TimeRangeSelect/TimeRangeSelect'
import { isCommunityPlan, isOnPrem } from '@common/utils/utils'
import LandingDashboardWelcomeView, { View } from './LandingDashboardWelcomeView'
import css from './LandingDashboardPage.module.scss'
const modules: Array<ModuleName> = [ModuleName.CD]
const defaultView = isCommunityPlan() || isOnPrem() ? View.Welcome : View.Dashboard
const LandingDashboardPage: React.FC = () => {
const { accountId } = useParams<AccountPathProps>()
const { currentUserInfo } = useAppStore()
const { getString } = useStrings()
const [view, setView] = useState<View>(defaultView)
const name = currentUserInfo.name || currentUserInfo.email
const { selectedTimeRange } = useLandingDashboardContext()
const [range] = useState([Date.now() - TimeRangeToDays[selectedTimeRange] * 24 * 60 * 60000, Date.now()])
const { data, loading, error, refetch } = useGetCounts({
queryParams: {
accountIdentifier: accountId,
startTime: range[0],
endTime: range[1]
}
})
const retry = () =>
refetch({
queryParams: {
accountIdentifier: accountId,
startTime: Date.now() - TimeRangeToDays[selectedTimeRange] * 24 * 60 * 60000,
endTime: Date.now()
}
})
if (View.Welcome === view) {
return <LandingDashboardWelcomeView setView={setView} />
} else Iif (loading) {
return <PageSpinner />
} else {
const projetCount = data?.data?.response?.projectsCountDetail?.count
return data && projetCount ? (
<LandingDashboardContextProvider>
<PageHeader
title={getString('projectsOrgs.landingDashboard.dashboardTitle', {
name
})}
toolbar={
<Button
onClick={() => {
setView(View.Welcome)
}}
text={getString('common.welcome')}
variation={ButtonVariation.LINK}
/>
}
/>
<PageBody>
<Layout.Vertical spacing="large" padding="xlarge">
<Layout.Horizontal flex={{ justifyContent: 'space-between' }}>
<Text font={{ size: 'medium', weight: 'bold' }} color={Color.BLACK}>
{getString('projectsOrgs.landingDashboard.atAGlance')}
</Text>
<TimeRangeSelect className={css.timeRangeSelect} />
</Layout.Horizontal>
<LandingDashboardSummaryWidget glanceCardData={data} />
<Layout.Vertical spacing="large">
{modules.map(moduleName => {
const moduleHandler = LandingDashboardFactory.getModuleDashboardHandler(moduleName)
return moduleHandler ? (
<LandingDashboardWidgetWrapper
icon={moduleHandler?.icon}
title={moduleHandler?.label}
iconProps={moduleHandler?.iconProps}
key={moduleName}
>
{moduleHandler.moduleDashboardRenderer?.()}
</LandingDashboardWidgetWrapper>
) : null
})}
</Layout.Vertical>
</Layout.Vertical>
</PageBody>
</LandingDashboardContextProvider>
) : (error || data?.data?.executionStatus) !== 'SUCCESS' ? (
<PageError message={data?.data?.executionMessage} onClick={retry} />
) : (
<LandingDashboardWelcomeView setView={setView} />
)
}
}
export default LandingDashboardPage
|