Skip to content

Commit 940caa5

Browse files
committed
chore: code refactoring
1 parent 94db2d0 commit 940caa5

File tree

7 files changed

+60
-64
lines changed

7 files changed

+60
-64
lines changed

src/Pages/App/CreateAppModal/AppClone/AppCloneList.tsx

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { useState } from 'react'
2-
31
import {
42
Button,
53
ComponentSizeType,
@@ -18,25 +16,16 @@ import { useDevtronCloneList } from './useDevtronCloneList'
1816

1917
export const AppCloneList = ({ handleCloneAppClick, isJobView, handleCreationMethodChange }: AppCloneListProps) => {
2018
const { searchKey, handleSearch, clearFilters } = useStateFilters()
21-
const [isLoadingMoreJobList, setIsLoadingMoreJobList] = useState<boolean>(false)
22-
const [hasError, setHasError] = useState<boolean>(false)
2319

24-
const { isListLoading, list, listError, reloadList, loadMoreData, hasMoreData } = useDevtronCloneList({
25-
handleCloneAppClick,
26-
isJobView,
27-
})
20+
const { isListLoading, list, listError, reloadList, loadMoreData, hasMoreData, isLoadingMore, hasError } =
21+
useDevtronCloneList({
22+
handleCloneAppClick,
23+
isJobView,
24+
})
2825

2926
const handleLoadMore = async () => {
30-
if (isLoadingMoreJobList || !hasMoreData) return
31-
setIsLoadingMoreJobList(true)
32-
setHasError(false)
33-
try {
34-
await loadMoreData()
35-
} catch {
36-
setHasError(true)
37-
} finally {
38-
setIsLoadingMoreJobList(false)
39-
}
27+
if (isLoadingMore || !hasMoreData) return
28+
await loadMoreData()
4029
}
4130

4231
const handleCreateFromScratch = () => {
@@ -82,9 +71,9 @@ export const AppCloneList = ({ handleCloneAppClick, isJobView, handleCreationMet
8271
renderButton: renderCreateFromScratchButton,
8372
}}
8473
/>
85-
{hasMoreData && isLoadingMoreJobList && <GenericInfoListSkeleton />}
74+
{hasMoreData && isLoadingMore && <GenericInfoListSkeleton />}
8675

87-
{hasMoreData && !isLoadingMoreJobList && <DetectBottom callback={handleLoadMore} hasError={hasError} />}
76+
{hasMoreData && !isLoadingMore && <DetectBottom callback={handleLoadMore} hasError={hasError} />}
8877
</div>
8978
</div>
9079
)

src/Pages/App/CreateAppModal/AppClone/types.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { BaseAppMetaData } from '@devtron-labs/devtron-fe-common-lib'
22

33
import { JobList } from '@Components/Jobs/Types'
4+
import { APP_TYPE } from '@Config/constants'
45
import { AppListMin } from '@Services/service.types'
56

67
import { SidebarProps } from '../types'
@@ -10,6 +11,8 @@ export interface AppCloneListProps extends Pick<SidebarProps, 'handleCreationMet
1011
isJobView?: boolean
1112
}
1213

13-
export type DevtronListResponse = { type: 'job'; data: JobList } | { type: 'app'; data: AppListMin }
14+
export type DevtronListResponse =
15+
| { type: APP_TYPE.JOB; data: JobList }
16+
| { type: APP_TYPE.DEVTRON_APPS; data: AppListMin }
1417

1518
export interface DevtronAppCloneListProps extends Pick<AppCloneListProps, 'handleCloneAppClick' | 'isJobView'> {}

src/Pages/App/CreateAppModal/AppClone/useDevtronCloneList.tsx

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@
33
*/
44
import { useEffect, useMemo, useRef, useState } from 'react'
55

6-
import { abortPreviousRequests, getIsRequestAborted, useAsync } from '@devtron-labs/devtron-fe-common-lib'
6+
import {
7+
abortPreviousRequests,
8+
getIsRequestAborted,
9+
showError,
10+
useAsync,
11+
useStateFilters,
12+
} from '@devtron-labs/devtron-fe-common-lib'
713

814
import { getJobs } from '@Components/Jobs/Service'
915
import { APP_TYPE } from '@Config/constants'
@@ -15,8 +21,10 @@ import { DevtronAppCloneListProps, DevtronListResponse } from './types'
1521
export const useDevtronCloneList = ({ handleCloneAppClick, isJobView }: DevtronAppCloneListProps) => {
1622
const cloneListAbortControllerRef = useRef(new AbortController())
1723
const [isLoadingMore, setIsLoadingMore] = useState(false)
24+
const [hasError, setHasError] = useState(false)
25+
const { searchKey } = useStateFilters()
1826

19-
const [isListLoading, listResponse, listError, reloadList, setListResponse] = useAsync<DevtronListResponse>(() =>
27+
const fetchDevtronCloneList = (offset = 0): Promise<DevtronListResponse> =>
2028
abortPreviousRequests(
2129
() =>
2230
isJobView
@@ -25,10 +33,11 @@ export const useDevtronCloneList = ({ handleCloneAppClick, isJobView }: DevtronA
2533
teams: [],
2634
appStatuses: [],
2735
appNameSearch: '',
28-
offset: 0,
36+
offset,
2937
size: 20,
3038
sortBy: 'appNameSort',
3139
sortOrder: 'ASC',
40+
searchKey,
3241
},
3342
{
3443
signal: cloneListAbortControllerRef.current.signal,
@@ -39,7 +48,10 @@ export const useDevtronCloneList = ({ handleCloneAppClick, isJobView }: DevtronA
3948
data: res,
4049
})),
4150
cloneListAbortControllerRef,
42-
),
51+
)
52+
53+
const [isListLoading, listResponse, listError, reloadList, setListResponse] = useAsync<DevtronListResponse>(() =>
54+
fetchDevtronCloneList(0),
4355
)
4456

4557
useEffect(
@@ -62,35 +74,28 @@ export const useDevtronCloneList = ({ handleCloneAppClick, isJobView }: DevtronA
6274
if (listResponse.type === APP_TYPE.JOB) {
6375
const currentJobContainers = listResponse.data.result?.jobContainers ?? []
6476

65-
const response = await getJobs(
66-
{
67-
teams: [],
68-
appStatuses: [],
69-
appNameSearch: '',
70-
offset: currentJobContainers.length,
71-
size: 20,
72-
sortBy: 'appNameSort',
73-
sortOrder: 'ASC',
74-
},
75-
{
76-
signal: cloneListAbortControllerRef.current.signal,
77-
},
78-
)
79-
80-
const newJobContainers = response.result?.jobContainers ?? []
77+
const response: DevtronListResponse = await fetchDevtronCloneList(currentJobContainers.length)
8178

8279
// Update the list response with the new data
8380
setListResponse({
8481
type: APP_TYPE.JOB,
8582
data: {
8683
...response,
8784
result: {
88-
...response.result,
89-
jobContainers: [...currentJobContainers, ...newJobContainers],
85+
...response.data,
86+
jobContainers: [
87+
...currentJobContainers,
88+
...('jobContainers' in response.data.result
89+
? response.data.result.jobContainers || []
90+
: []),
91+
],
9092
},
9193
},
9294
})
9395
}
96+
} catch (error) {
97+
setHasError(true)
98+
showError(error)
9499
} finally {
95100
setIsLoadingMore(false)
96101
}
@@ -104,5 +109,7 @@ export const useDevtronCloneList = ({ handleCloneAppClick, isJobView }: DevtronA
104109
totalCount,
105110
loadMoreData,
106111
hasMoreData: listResponse?.type === APP_TYPE.JOB && list.length < totalCount,
112+
hasError,
113+
isLoadingMore,
107114
}
108115
}

src/Pages/App/CreateAppModal/CloneApplicationSelectionList.tsx

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,14 @@ export const CloneApplicationSelectionList = ({
3737
}: ApplicationSelectionListProps) => {
3838
const isCreationMethodTemplate = selectedCreationMethod === CreationMethodType.template
3939

40-
const goBackToTemplatesList = () =>
40+
const handleGoBack = () => {
4141
handleFormStateChange({
42-
action: CreateAppFormStateActionType.updateTemplateConfig,
43-
value: null,
44-
})
45-
46-
const goBackToAppCloneList = () =>
47-
handleFormStateChange({
48-
action: CreateAppFormStateActionType.updateCloneAppConfig,
42+
action: isCreationMethodTemplate
43+
? CreateAppFormStateActionType.updateTemplateConfig
44+
: CreateAppFormStateActionType.updateCloneAppConfig,
4945
value: null,
5046
})
51-
47+
}
5248
const handleTemplateClick = ({ id, templateId, name }: CreateAppFormStateType['templateConfig']) => {
5349
handleFormStateChange({
5450
action: CreateAppFormStateActionType.updateTemplateConfig,
@@ -99,7 +95,6 @@ export const CloneApplicationSelectionList = ({
9995
}
10096

10197
const renderAppInfoForm = () => {
102-
const goBack = isCreationMethodTemplate ? goBackToTemplatesList : goBackToAppCloneList
10398
const breadcrumbText = getBreadcrumbText()
10499
const breadcrumbDataTestId = isCreationMethodTemplate ? 'template-list-breadcrumb' : 'clone-list-breadcrumb'
105100
const icon = isCreationMethodTemplate ? (
@@ -124,14 +119,14 @@ export const CloneApplicationSelectionList = ({
124119
style={ButtonStyleType.neutral}
125120
size={ComponentSizeType.xs}
126121
showAriaLabelInTippy={false}
127-
onClick={goBack}
122+
onClick={handleGoBack}
128123
/>
129124
<div className="flex left dc__gap-6">
130125
<Button
131126
dataTestId={breadcrumbDataTestId}
132127
variant={ButtonVariantType.text}
133128
text={breadcrumbText}
134-
onClick={goBack}
129+
onClick={handleGoBack}
135130
/>
136131
<span className="fs-13">/</span>
137132
<p className="m-0 flex left dc__gap-6">

src/Pages/App/CreateAppModal/CreateAppModal.component.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ const CreateAppModal = ({ isJobView, handleClose }: CreateAppModalProps) => {
251251
const { isFormValid, invalidLabels, labelTags, invalidWorkFlow } = validateForm()
252252

253253
if (isCreationMethodTemplate) {
254-
if (!formState.templateConfig?.templateId || !formState.cloneAppConfig?.appId) {
254+
if (!formState.templateConfig?.templateId) {
255255
ToastManager.showToast({
256256
variant: ToastVariantType.error,
257257
description: getNoItemSelectToastText(CreationMethodType.template),
@@ -328,11 +328,12 @@ const CreateAppModal = ({ isJobView, handleClose }: CreateAppModalProps) => {
328328
}
329329

330330
const handleCreationMethodChange = (method: CreationMethodType) => {
331-
setFormState((prev) => ({
332-
...prev,
333-
templateConfig: null,
334-
cloneAppConfig: null,
335-
}))
331+
handleFormStateChange({
332+
action: isCreationMethodTemplate
333+
? CreateAppFormStateActionType.updateTemplateConfig
334+
: CreateAppFormStateActionType.updateCloneAppConfig,
335+
value: null,
336+
})
336337

337338
setSelectedCreationMethod(method)
338339
}

src/Pages/App/CreateAppModal/UpdateTemplateConfig.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const UpdateTemplateConfig = ({
4141
handleFormStateChange,
4242
formErrorState,
4343
}: UpdateTemplateConfigProps) => {
44-
const stringTemplateDbId = formState.templateConfig?.id.toString()
44+
const stringTemplateDbId = formState.templateConfig.id.toString()
4545

4646
const handleBuildConfigurationChange: CIConfigProps['updateDockerConfigOverride'] = (key, value) => {
4747
switch (key) {

src/components/app/Overview/utils.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,20 @@ export const getResourceKindFromAppType = (appType: AppOverviewProps['appType'])
3636
}
3737

3838
export const getAppConfig = (appType: AppOverviewProps['appType'], iconSize: IconBaseSizeType = 48) => {
39+
const icon = getAppIconWithBackground(appType, iconSize)
3940
switch (appType) {
4041
case 'app':
4142
return {
4243
resourceName: 'application',
4344
defaultNote: DefaultAppNote,
44-
icon: getAppIconWithBackground(appType, iconSize),
45+
icon: icon,
4546
defaultDescription: APP_DESCRIPTION,
4647
}
4748
case 'job':
4849
return {
4950
resourceName: 'job',
5051
defaultNote: DefaultJobNote,
51-
icon: getAppIconWithBackground(appType, iconSize),
52+
icon: icon,
5253
defaultDescription: JOB_DESCRIPTION,
5354
}
5455
case 'helm-chart':

0 commit comments

Comments
 (0)