1
+ import { useNavigate } from 'react-router-dom'
1
2
import { FC , useCallback , useMemo , useState } from 'react'
3
+ import { toast } from 'react-toastify'
2
4
3
5
import { PageTitle , useConfirmationModal } from '~/libs/ui'
4
6
import { TableLoading } from '~/apps/admin/src/lib'
@@ -7,15 +9,14 @@ import { PageWrapper, ScorecardsFilter, TableNoRecord, TableScorecards } from '.
7
9
import { ScorecardsResponse , useFetchScorecards } from '../../lib/hooks'
8
10
import { cloneScorecard } from '../../lib/services'
9
11
import { Scorecard } from '../../lib/models'
10
- import { useNavigate } from 'react-router-dom'
11
12
12
13
// import { mockScorecards } from '../../mock-datas/MockScorecardList'
13
14
14
15
// import styles from './ScorecardsListPage.module.scss'
15
16
16
17
export const ScorecardsListPage : FC < { } > = ( ) => {
17
18
const navigate = useNavigate ( )
18
- const { confirm , modal : confirmModal } = useConfirmationModal ( )
19
+ const confirmation = useConfirmationModal ( )
19
20
20
21
const [ filters , setFilters ] = useState ( {
21
22
category : '' ,
@@ -35,7 +36,6 @@ export const ScorecardsListPage: FC<{}> = () => {
35
36
const {
36
37
scoreCards : scorecards ,
37
38
metadata,
38
- error,
39
39
isValidating : isLoadingScorecards ,
40
40
} : ScorecardsResponse = useFetchScorecards ( {
41
41
challengeTrack : filters . projectType ,
@@ -46,25 +46,34 @@ export const ScorecardsListPage: FC<{}> = () => {
46
46
type : filters . type ,
47
47
} )
48
48
49
- console . log ( error )
50
-
51
49
const handleFiltersChange = useCallback ( ( newFilters : Partial < typeof filters > ) => {
52
50
setFilters ( newFilters as typeof filters )
53
51
setPage ( 1 ) // Optional: reset page on filter change
54
52
} , [ ] )
55
53
56
54
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 ( {
60
56
action : 'Clone' ,
57
+ content : `Are you sure you want to clone "${ scorecard . name } " scorecard?` ,
58
+ title : 'Clone Scorecard' ,
61
59
} ) ) {
62
- return ;
60
+ return
63
61
}
64
62
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 ] )
68
77
69
78
return (
70
79
< PageWrapper
@@ -94,7 +103,7 @@ export const ScorecardsListPage: FC<{}> = () => {
94
103
95
104
</ >
96
105
) }
97
- { confirmModal }
106
+ { confirmation . modal }
98
107
</ PageWrapper >
99
108
)
100
109
0 commit comments