@@ -51,7 +51,56 @@ const Model: ModelType = {
51
51
const { list, detail } = yield select ( ( state ) => state . workshop )
52
52
53
53
const url = `${ apiUrl } /clone/${ encodeURIComponent ( payload . name ) } /${ payload . branch } ?${ Math . random ( ) } `
54
- const { data } = yield axios . get ( url )
54
+
55
+ let data
56
+ try {
57
+ const response = yield axios . get ( url )
58
+ data = response . data
59
+ } catch ( error ) {
60
+ console . error ( 'Failed to load workshop:' , error )
61
+
62
+ // Dismiss loading toast and show error
63
+ toast . dismiss ( )
64
+
65
+ // Extract detailed error message from response
66
+ let errorMessage = 'Failed to load workshop'
67
+ if ( error . response ?. data ) {
68
+ // If the response contains plain text error details (like in the screenshot)
69
+ if ( typeof error . response . data === 'string' ) {
70
+ errorMessage = error . response . data
71
+ }
72
+ // If the response has a structured error message
73
+ else if ( error . response . data . message ) {
74
+ errorMessage = error . response . data . message
75
+ }
76
+ // If the response has error details
77
+ else if ( error . response . data . error ) {
78
+ errorMessage = error . response . data . error
79
+ }
80
+ }
81
+ // Fallback to axios error message or generic error
82
+ else if ( error . message ) {
83
+ errorMessage = error . message
84
+ } else {
85
+ errorMessage = 'Network error occurred'
86
+ }
87
+
88
+ toast . error ( errorMessage )
89
+
90
+ // Clean up loading state
91
+ yield put ( {
92
+ type : 'loading/save' ,
93
+ payload : {
94
+ screen : false ,
95
+ } ,
96
+ } )
97
+
98
+ // Track error event
99
+ ; ( < any > window ) . _paq ?. push ( [ 'trackEvent' , 'learneth' , 'load_repo_error' , `${ payload . name } /${ payload . branch } ` ] )
100
+
101
+ return // Exit early on error
102
+ }
103
+
55
104
const repoId = `${ payload . name } -${ payload . branch } `
56
105
57
106
for ( let i = 0 ; i < data . ids . length ; i ++ ) {
0 commit comments