Skip to content

Commit 1fb8445

Browse files
committed
feat: enhance ChartDetails and ChartDetailsPresetValues components with loading states and additional data fields
1 parent 604bc1a commit 1fb8445

File tree

5 files changed

+46
-19
lines changed

5 files changed

+46
-19
lines changed

src/Pages/ChartStore/ChartDetails/ChartDetails.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ export const ChartDetails = () => {
104104
[JSON.stringify(chartVersions)],
105105
)
106106

107+
// CONSTANTS
108+
const isChartDetailsLoading = isFetchingChartDetails || !chartDetails
109+
107110
// HANDLERS
108111
const handleSegmentChange: SegmentedControlProps['onChange'] = (selectedSegment) => {
109112
updateSearchParams({ tab: selectedSegment.value as ChartDetailsSegment })
@@ -126,7 +129,7 @@ export const ChartDetails = () => {
126129
chartsOptions={chartOptions}
127130
selectedChartVersion={selectedChartVersion}
128131
onChartChange={handleChartChange}
129-
isLoading={isFetchingChartDetails}
132+
isLoading={isChartDetailsLoading}
130133
error={chartDetailsErr}
131134
reload={reloadChartDetails}
132135
/>
@@ -182,7 +185,7 @@ export const ChartDetails = () => {
182185
</div>
183186
{renderSegments()}
184187
</div>
185-
<ChartDetailsAbout isLoading={isFetchingChartDetails} chartDetails={chartDetails} />
188+
<ChartDetailsAbout isLoading={isChartDetailsLoading} chartDetails={chartDetails} />
186189
</div>
187190
</Route>
188191
</Switch>

src/Pages/ChartStore/ChartDetails/ChartDetailsPresetValues.tsx

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useMemo, useState } from 'react'
22
import { generatePath, Link, useRouteMatch } from 'react-router-dom'
3+
import moment from 'moment'
34

45
import {
56
APIResponseHandler,
@@ -10,17 +11,20 @@ import {
1011
ComponentSizeType,
1112
DeleteConfirmationModal,
1213
GenericEmptyState,
14+
getAlphabetIcon,
1315
handleAnalyticsEvent,
1416
Icon,
1517
PortalContainer,
1618
SortableTableHeaderCell,
1719
stringComparatorBySortOrder,
20+
Tooltip,
1821
useAsync,
1922
useStateFilters,
2023
} from '@devtron-labs/devtron-fe-common-lib'
2124

2225
import { deleteChartValues } from '@Components/charts/charts.service'
2326
import { SavedValueType } from '@Components/charts/SavedValues/types'
27+
import { Moment12HourFormat } from '@Config/constants'
2428
import { URLS } from '@Config/routes'
2529
import { ApplicationDeletionInfo } from '@Pages/Shared/ApplicationDeletionInfo/ApplicationDeletionInfo'
2630

@@ -66,7 +70,7 @@ export const ChartDetailsPresetValues = ({ searchKey, onClearFilters }: ChartDet
6670
chartValuesTemplateList,
6771
chartValuesTemplateListErr,
6872
reloadChartValuesTemplateList,
69-
] = useAsync(() => fetchChartValuesTemplateList(chartId), [chartId])
73+
] = useAsync(() => fetchChartValuesTemplateList(chartId), [chartId], true, { resetOnChange: false })
7074

7175
const { sortBy, sortOrder, handleSorting } = useStateFilters<'name'>({ initialSortKey: 'name' })
7276

@@ -103,10 +107,10 @@ export const ChartDetailsPresetValues = ({ searchKey, onClearFilters }: ChartDet
103107
}
104108

105109
return (
106-
<div className="flex-grow-1 flexbox-col bg__primary border__primary br-4 w-100 dc__overflow-hidden">
110+
<div className="mh-500 flexbox-col bg__primary border__primary br-4 w-100 dc__overflow-hidden">
107111
<PortalContainer
108112
portalParentId={CHART_DETAILS_PORTAL_CONTAINER_ID}
109-
condition={!isFetchingChartValuesTemplateList && !!chartValuesTemplateList?.length}
113+
condition={Array.isArray(chartValuesTemplateList) && !!chartValuesTemplateList.length}
110114
>
111115
<Button
112116
dataTestId="chart-preset-values-clear-filters"
@@ -149,26 +153,38 @@ export const ChartDetailsPresetValues = ({ searchKey, onClearFilters }: ChartDet
149153
disabled={false}
150154
/>
151155
<SortableTableHeaderCell title="Version" isSortable={false} />
156+
<SortableTableHeaderCell title="Last updated by" isSortable={false} />
157+
<SortableTableHeaderCell title="Updated at" isSortable={false} />
152158
</div>
153-
{filteredChartValuesTemplateList.map(({ chartVersion, id, name, ...rest }) => (
159+
{filteredChartValuesTemplateList.map(({ chartVersion, id, name, updatedBy, updatedOn }) => (
154160
<div
155161
key={id}
156162
className="chart-details-preset-value__row px-16 py-12 bg__hover dc__visible-hover dc__visible-hover--parent"
157163
>
158164
<Icon name="ic-file" color="N700" size={24} />
159165
<Link
160-
className="fs-13 lh-20"
166+
className="fs-13 lh-20 dc__truncate"
161167
to={`${generatePath(path, { chartId })}${URLS.PRESET_VALUES}/${id}`}
162168
>
163169
{name}
164170
</Link>
171+
<span className="fs-13 lh-20 cn-9">{chartVersion}</span>
172+
<span className="flex left">
173+
{updatedBy && getAlphabetIcon(updatedBy)}
174+
<Tooltip content={updatedBy}>
175+
<span className="fs-13 lh-20 cn-9 dc__truncate">{updatedBy || '-'}</span>
176+
</Tooltip>
177+
</span>
165178
<div className="flex dc__content-space">
166-
<span className="fs-13 lh-20 cn-9">{chartVersion}</span>
179+
<span className="fs-13 lh-20 cn-9">
180+
{updatedOn && !updatedOn.startsWith('0001-01-01')
181+
? moment(updatedOn).format(Moment12HourFormat)
182+
: '-'}
183+
</span>
167184
<div className="flex dc__gap-4 dc__visible-hover--child">
168185
<Button
169186
dataTestId="chart-deploy-with-preset-value"
170-
ariaLabel="chart-deploy-with-preset-value"
171-
showAriaLabelInTippy={false}
187+
ariaLabel="Use value to deploy"
172188
icon={<Icon name="ic-rocket-launch" color={null} />}
173189
variant={ButtonVariantType.borderLess}
174190
style={ButtonStyleType.neutral}
@@ -181,8 +197,7 @@ export const ChartDetailsPresetValues = ({ searchKey, onClearFilters }: ChartDet
181197
/>
182198
<Button
183199
dataTestId="chart-preset-value-edit"
184-
ariaLabel="chart-preset-value-edit"
185-
showAriaLabelInTippy={false}
200+
ariaLabel="Edit value"
186201
icon={<Icon name="ic-edit" color={null} />}
187202
variant={ButtonVariantType.borderLess}
188203
style={ButtonStyleType.neutral}
@@ -195,13 +210,19 @@ export const ChartDetailsPresetValues = ({ searchKey, onClearFilters }: ChartDet
195210
/>
196211
<Button
197212
dataTestId="chart-preset-value-delete"
198-
ariaLabel="chart-preset-value-delete"
199-
showAriaLabelInTippy={false}
213+
ariaLabel="Delete value"
200214
icon={<Icon name="ic-delete" color={null} />}
201215
variant={ButtonVariantType.borderLess}
202-
style={ButtonStyleType.neutral}
216+
style={ButtonStyleType.negativeGrey}
203217
size={ComponentSizeType.xs}
204-
onClick={showDeleteModal({ chartVersion, id, name, ...rest })}
218+
onClick={showDeleteModal({
219+
chartVersion,
220+
id,
221+
name,
222+
updatedBy,
223+
updatedOn,
224+
isLoading: false,
225+
})}
205226
/>
206227
</div>
207228
</div>

src/Pages/ChartStore/ChartDetails/ChartDetailsReadme.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const ChartDetailsReadme = ({
3939
const selectedChartVersionValue = getSelectPickerOptionByValue(chartsOptions, selectedChartVersion, null)
4040

4141
return (
42-
<div className="flex-grow-1 flexbox-col bg__primary border__primary br-4 w-100 dc__overflow-hidden">
42+
<div className="mh-500 flexbox-col bg__primary border__primary br-4 w-100 dc__overflow-hidden">
4343
<div className="flex left dc__gap-8 bg__secondary border__primary--bottom px-16 pt-10 pb-9">
4444
<div className="flex left dc__gap-6">
4545
<Icon name="ic-list-bullets" color="N900" />

src/Pages/ChartStore/ChartDetails/chartDetails.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
&__row {
1515
display: grid;
1616
align-items: center;
17-
grid-template-columns: 24px 200px 1fr;
17+
grid-template-columns: 24px 200px 100px 200px 1fr;
1818
gap: 16px;
1919
}
2020
}

src/components/charts/list/DiscoverCharts.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,10 @@ export default function DiscoverCharts({ isSuperAdmin }: { isSuperAdmin: boolean
721721
<ChartValues />
722722
</Route>
723723
{/* <Route path={`${path}${URLS.CHART}/:chartId`} component={DiscoverChartDetails} /> */}
724-
<Route path={`${path}${URLS.CHART}/:chartId`} component={ChartDetails} />
724+
<Route
725+
path={`${path}${URLS.CHART}/:chartId`}
726+
render={({ match: { params } }) => <ChartDetails key={params.chartId} />}
727+
/>
725728
<Route>
726729
<DiscoverChartList isSuperAdmin={isSuperAdmin} />
727730
</Route>

0 commit comments

Comments
 (0)