Skip to content

Commit 92fb2f6

Browse files
authored
Merge pull request #2842 from devtron-labs/release-candidate-v0.40.0
chore: merge rc-v0.40.0
2 parents 8fc2863 + 5949314 commit 92fb2f6

File tree

94 files changed

+3551
-3275
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+3551
-3275
lines changed

.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,5 +73,6 @@ FEATURE_ASK_DEVTRON_EXPERT=false
7373
FEATURE_MANAGE_TRAFFIC_ENABLE=false
7474
FEATURE_REDFISH_NODE_ENABLE=false
7575
FEATURE_INFRA_PROVISION_INFO_BLOCK_HIDE=false
76+
FEATURE_GROUPED_APP_LIST_FILTERS_ENABLE=false
7677
FEATURE_FLUX_DEPLOYMENTS_ENABLE=false
7778
FEATURE_LINK_EXTERNAL_FLUX_ENABLE=false

.eslintignore

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -143,26 +143,17 @@ src/components/charts/ChartGroupUpdate.tsx
143143
src/components/charts/ChartHeaderFilters.tsx
144144
src/components/charts/Charts.tsx
145145
src/components/charts/MultiChartSummary.tsx
146-
src/components/charts/SavedValues/SavedValuesList.tsx
147146
src/components/charts/chartValues/ChartValues.tsx
148147
src/components/charts/charts.service.ts
149148
src/components/charts/charts.util.tsx
150149
src/components/charts/dialogs/ValuesYamlConfirmDialog.tsx
151-
src/components/charts/discoverChartDetail/About.tsx
152-
src/components/charts/discoverChartDetail/ChartDeploymentList.tsx
153-
src/components/charts/discoverChartDetail/DiscoverChartDetails.tsx
154150
src/components/charts/list/ChartGroup.tsx
155-
src/components/charts/list/ChartListPopUp.tsx
156151
src/components/charts/list/ChartListPopUpRow.tsx
157-
src/components/charts/list/Deployed.tsx
158152
src/components/charts/list/DeployedChartFilters.tsx
159153
src/components/charts/list/DiscoverCharts.tsx
160154
src/components/charts/modal/ChartGroupBasicDeploy.tsx
161155
src/components/charts/modal/CreateChartGroup.tsx
162156
src/components/charts/useChartGroup.ts
163-
src/components/charts/util/ChartGroupCard.tsx
164-
src/components/charts/util/ChartSelect.tsx
165-
src/components/charts/util/ChartValueSelect.tsx
166157
src/components/checkList/AllChartsCheck.tsx
167158
src/components/checkList/AllCheckModal.tsx
168159
src/components/checkList/AppCheckList.tsx

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"private": true,
55
"homepage": "/dashboard",
66
"dependencies": {
7-
"@devtron-labs/devtron-fe-common-lib": "1.17.1",
7+
"@devtron-labs/devtron-fe-common-lib": "1.18.0",
88
"@esbuild-plugins/node-globals-polyfill": "0.2.3",
99
"@rjsf/core": "^5.13.3",
1010
"@rjsf/utils": "^5.13.3",
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
import { useEffect, useMemo, useState } from 'react'
2+
import { Route, Switch, useRouteMatch } from 'react-router-dom'
3+
4+
import {
5+
APIResponseHandler,
6+
BreadCrumb,
7+
handleAnalyticsEvent,
8+
PageHeader,
9+
SegmentedControl,
10+
SegmentedControlProps,
11+
SelectPickerProps,
12+
useAsync,
13+
useBreadcrumb,
14+
useUrlFilters,
15+
} from '@devtron-labs/devtron-fe-common-lib'
16+
17+
import { ChartSelector } from '@Components/AppSelector'
18+
import { getChartSelectAPI } from '@Components/charts/charts.util'
19+
import { URLS } from '@Config/routes'
20+
21+
import { ChartDetailsAbout } from './ChartDetailsAbout'
22+
import { ChartDetailsDeploy } from './ChartDetailsDeploy'
23+
import { ChartDetailsDeployments } from './ChartDetailsDeployments'
24+
import { ChartDetailsPresetValues } from './ChartDetailsPresetValues'
25+
import { ChartDetailsReadme } from './ChartDetailsReadme'
26+
import { CHART_DETAILS_PORTAL_CONTAINER_ID, CHART_DETAILS_SEGMENTS } from './constants'
27+
import { fetchChartDetails, fetchChartVersions } from './services'
28+
import { ChartDetailsRouteParams, ChartDetailsSearchParams, ChartDetailsSegment } from './types'
29+
import { chartSelectorFilterOption, chartSelectorFormatOptionLabel, parseChartDetailsSearchParams } from './utils'
30+
31+
import './chartDetails.scss'
32+
33+
export const ChartDetails = () => {
34+
// STATES
35+
const [selectedChartVersion, setSelectedChartVersion] = useState<number>(null)
36+
37+
// HOOKS
38+
const {
39+
path,
40+
params: { chartId },
41+
} = useRouteMatch<ChartDetailsRouteParams>()
42+
43+
const { tab, updateSearchParams } = useUrlFilters<void, ChartDetailsSearchParams>({
44+
parseSearchParams: parseChartDetailsSearchParams,
45+
})
46+
47+
// ASYNC CALLS
48+
const [isFetchingChartVersions, chartVersions, chartVersionsErr, reloadChartVersions] = useAsync(
49+
() => fetchChartVersions(chartId),
50+
[chartId],
51+
)
52+
53+
const [isFetchingChartDetails, chartDetails, chartDetailsErr, reloadChartDetails] = useAsync(
54+
() => fetchChartDetails(selectedChartVersion),
55+
[selectedChartVersion],
56+
!!selectedChartVersion,
57+
{ resetOnChange: false },
58+
)
59+
60+
useEffect(() => {
61+
if (!isFetchingChartVersions && chartVersions?.length) {
62+
setSelectedChartVersion(chartVersions[0].id)
63+
}
64+
}, [isFetchingChartVersions, chartVersions])
65+
66+
// CONFIGS
67+
const { breadcrumbs } = useBreadcrumb(
68+
{
69+
alias: {
70+
':chartSegment?': null,
71+
':chartId': {
72+
component: (
73+
<ChartSelector
74+
primaryKey="chartId"
75+
primaryValue="name"
76+
api={getChartSelectAPI}
77+
matchedKeys={[]}
78+
apiPrimaryKey="id"
79+
formatOptionLabel={chartSelectorFormatOptionLabel}
80+
filterOption={chartSelectorFilterOption}
81+
/>
82+
),
83+
linked: false,
84+
},
85+
chart: null,
86+
'chart-store': null,
87+
},
88+
},
89+
[chartId],
90+
)
91+
92+
const chartOptions = useMemo(
93+
() =>
94+
(chartVersions ?? []).map(({ id, version }) => ({
95+
label: version.startsWith('v') ? version : `v${version}`,
96+
value: id,
97+
})),
98+
[JSON.stringify(chartVersions)],
99+
)
100+
101+
// CONSTANTS
102+
const isChartDetailsLoading = isFetchingChartDetails || !chartDetails
103+
104+
// HANDLERS
105+
const handleSegmentChange: SegmentedControlProps['onChange'] = (selectedSegment) => {
106+
const updatedTab = selectedSegment.value as ChartDetailsSegment
107+
108+
if (updatedTab === ChartDetailsSegment.PRESET_VALUES) {
109+
handleAnalyticsEvent({ category: 'Chart Store', action: 'CS_CHART_PRESET_VALUES' })
110+
}
111+
112+
updateSearchParams({ tab: updatedTab })
113+
}
114+
115+
const handleChartChange: SelectPickerProps<number>['onChange'] = ({ value }) => {
116+
setSelectedChartVersion(value)
117+
}
118+
119+
// RENDERERS
120+
const renderBreadcrumbs = () => <BreadCrumb breadcrumbs={breadcrumbs} />
121+
122+
const renderSegments = () => {
123+
switch (tab) {
124+
case ChartDetailsSegment.README:
125+
return (
126+
<ChartDetailsReadme
127+
chartName={chartDetails?.name}
128+
readme={chartDetails?.readme}
129+
chartsOptions={chartOptions}
130+
selectedChartVersion={selectedChartVersion}
131+
onChartChange={handleChartChange}
132+
isLoading={isChartDetailsLoading}
133+
error={chartDetailsErr}
134+
reload={reloadChartDetails}
135+
/>
136+
)
137+
case ChartDetailsSegment.PRESET_VALUES:
138+
return <ChartDetailsPresetValues />
139+
case ChartDetailsSegment.DEPLOYMENTS:
140+
return <ChartDetailsDeployments chartIcon={chartDetails?.icon} />
141+
default:
142+
return null
143+
}
144+
}
145+
146+
return (
147+
<div className="flex-grow-1 flexbox-col bg__secondary dc__overflow-hidden">
148+
<PageHeader isBreadcrumbs breadCrumbs={renderBreadcrumbs} />
149+
150+
<APIResponseHandler
151+
isLoading={isFetchingChartVersions}
152+
progressingProps={{ pageLoader: true }}
153+
error={chartVersionsErr}
154+
errorScreenManagerProps={{ code: chartVersionsErr?.code, reload: reloadChartVersions }}
155+
>
156+
<Switch>
157+
<Route path={`${path}${URLS.DEPLOY_CHART}/:presetValueId?`}>
158+
<ChartDetailsDeploy
159+
chartDetails={chartDetails}
160+
chartVersions={chartVersions}
161+
selectedChartVersion={selectedChartVersion}
162+
/>
163+
</Route>
164+
<Route>
165+
<div className="chart-details flex-grow-1 p-20 dc__overflow-auto">
166+
<div className="flexbox-col dc__gap-16 mw-none">
167+
<div id={CHART_DETAILS_PORTAL_CONTAINER_ID} className="flex dc__content-space">
168+
<SegmentedControl
169+
name="chart-details-segmented-control"
170+
segments={CHART_DETAILS_SEGMENTS}
171+
value={tab}
172+
onChange={handleSegmentChange}
173+
/>
174+
</div>
175+
{renderSegments()}
176+
</div>
177+
<ChartDetailsAbout isLoading={isChartDetailsLoading} chartDetails={chartDetails} />
178+
</div>
179+
</Route>
180+
</Switch>
181+
</APIResponseHandler>
182+
</div>
183+
)
184+
}

0 commit comments

Comments
 (0)