Skip to content

Commit 6138ea4

Browse files
committed
scorecard clone - error handling
1 parent c6d6c32 commit 6138ea4

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

src/apps/review/src/pages/scorecards/ScorecardsListPage.tsx

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import { useNavigate } from 'react-router-dom'
12
import { FC, useCallback, useMemo, useState } from 'react'
3+
import { toast } from 'react-toastify'
24

35
import { PageTitle, useConfirmationModal } from '~/libs/ui'
46
import { TableLoading } from '~/apps/admin/src/lib'
@@ -7,15 +9,14 @@ import { PageWrapper, ScorecardsFilter, TableNoRecord, TableScorecards } from '.
79
import { ScorecardsResponse, useFetchScorecards } from '../../lib/hooks'
810
import { cloneScorecard } from '../../lib/services'
911
import { Scorecard } from '../../lib/models'
10-
import { useNavigate } from 'react-router-dom'
1112

1213
// import { mockScorecards } from '../../mock-datas/MockScorecardList'
1314

1415
// import styles from './ScorecardsListPage.module.scss'
1516

1617
export const ScorecardsListPage: FC<{}> = () => {
1718
const navigate = useNavigate()
18-
const { confirm, modal: confirmModal } = useConfirmationModal()
19+
const confirmation = useConfirmationModal()
1920

2021
const [filters, setFilters] = useState({
2122
category: '',
@@ -35,7 +36,6 @@ export const ScorecardsListPage: FC<{}> = () => {
3536
const {
3637
scoreCards: scorecards,
3738
metadata,
38-
error,
3939
isValidating: isLoadingScorecards,
4040
}: ScorecardsResponse = useFetchScorecards({
4141
challengeTrack: filters.projectType,
@@ -46,25 +46,34 @@ export const ScorecardsListPage: FC<{}> = () => {
4646
type: filters.type,
4747
})
4848

49-
console.log(error)
50-
5149
const handleFiltersChange = useCallback((newFilters: Partial<typeof filters>) => {
5250
setFilters(newFilters as typeof filters)
5351
setPage(1) // Optional: reset page on filter change
5452
}, [])
5553

5654
const handleScorecardClone = useCallback(async (scorecard: Scorecard) => {
57-
if (!await confirm({
58-
title: 'Clone Scorecard',
59-
content: `Are you sure you want to clone "${scorecard.name}" scorecard?`,
55+
if (!await confirmation.confirm({
6056
action: 'Clone',
57+
content: `Are you sure you want to clone "${scorecard.name}" scorecard?`,
58+
title: 'Clone Scorecard',
6159
})) {
62-
return;
60+
return
6361
}
6462

65-
const cloned = await cloneScorecard({id: scorecard.id})
66-
navigate(`${cloned.id}/details`)
67-
}, [])
63+
try {
64+
const cloned = await cloneScorecard({ id: scorecard.id })
65+
if (!cloned || !cloned.id) {
66+
toast.error('Failed to clone scorecard!')
67+
return
68+
}
69+
70+
toast.success('Scorecard cloned successfully!')
71+
navigate(`${cloned.id}/details`)
72+
} catch (error) {
73+
toast.error('Failed to clone scorecard!')
74+
console.error('Failed to clone scorecard:', error)
75+
}
76+
}, [navigate, confirmation])
6877

6978
return (
7079
<PageWrapper
@@ -94,7 +103,7 @@ export const ScorecardsListPage: FC<{}> = () => {
94103

95104
</>
96105
)}
97-
{confirmModal}
106+
{confirmation.modal}
98107
</PageWrapper>
99108
)
100109

0 commit comments

Comments
 (0)