@@ -1870,6 +1870,7 @@ const CommitListItem: React.FC<CommitListItemProps> = ({ commit, highlight }) =>
18701870} ;
18711871
18721872const RepoEditView : React . FC < RepoEditViewProps > = ( { onSave, onCancel, repository, onRefreshState, setToast, confirmAction, defaultCategoryId, onOpenWeblink, detectedExecutables } ) => {
1873+ const logger = useLogger ( ) ;
18731874 const [ formData , setFormData ] = useState < Repository | Omit < Repository , 'id' > > ( ( ) => repository || NEW_REPO_TEMPLATE ) ;
18741875
18751876 const repoIdForSuggestions = useMemo ( ( ) => {
@@ -2154,10 +2155,21 @@ const RepoEditView: React.FC<RepoEditViewProps> = ({ onSave, onCancel, repositor
21542155 if ( ! pat ) {
21552156 setReleasesError ( "A GitHub Personal Access Token is required to manage releases. Please set one in Settings > Behavior." ) ;
21562157 } else {
2157- setReleasesError ( "Failed to fetch releases. This may be due to an invalid PAT or insufficient permissions (requires 'Contents: Read & write'). Check the debug console for more details." ) ;
2158+ const errorMessage = "Failed to fetch releases. This may be due to an invalid PAT or insufficient permissions (requires 'Contents: Read & write'). Check the debug console for more details." ;
2159+ logger . error ( 'Failed to fetch releases for repository' , {
2160+ repoId : repository . id ,
2161+ repoName : repository . name ,
2162+ error : errorMessage ,
2163+ } ) ;
2164+ setReleasesError ( errorMessage ) ;
21582165 }
21592166 }
21602167 } catch ( e : any ) {
2168+ logger . error ( 'Error while fetching releases' , {
2169+ repoId : repository . id ,
2170+ repoName : repository . name ,
2171+ error : e ,
2172+ } ) ;
21612173 setReleasesError ( `Error: ${ e . message } ` ) ;
21622174 } finally {
21632175 setReleasesLoading ( false ) ;
@@ -2835,59 +2847,113 @@ const RepoEditView: React.FC<RepoEditViewProps> = ({ onSave, onCancel, repositor
28352847 } , [ ] ) ;
28362848
28372849 const handleUpdateRelease = async ( releaseId : number , options : Partial < ReleaseInfo > ) => {
2838- if ( ! repository ) return ;
2839- const result = await window . electronAPI ?. updateRelease ( { repo : repository , releaseId, options } ) ;
2840- if ( result ?. success ) {
2841- setToast ( { message : 'Release updated.' , type : 'success' } ) ;
2842- fetchReleases ( ) ;
2843- } else {
2844- setToast ( { message : `Error: ${ result ?. error || 'API call failed.' } ` , type : 'error' } ) ;
2850+ if ( ! repository ) {
2851+ logger . warn ( 'handleUpdateRelease called without repository context' , { releaseId, options } ) ;
2852+ return ;
2853+ }
2854+
2855+ const repoLogContext = { repoId : repository . id , repoName : repository . name , releaseId, options } ;
2856+ logger . info ( 'Updating release' , repoLogContext ) ;
2857+
2858+ try {
2859+ const result = await window . electronAPI ?. updateRelease ( { repo : repository , releaseId, options } ) ;
2860+
2861+ if ( result ?. success ) {
2862+ logger . info ( 'Release update succeeded' , repoLogContext ) ;
2863+ setToast ( { message : 'Release updated.' , type : 'success' } ) ;
2864+ fetchReleases ( ) ;
2865+ } else {
2866+ const errorMessage = result ?. error || 'API call failed.' ;
2867+ logger . error ( 'Release update failed' , { ...repoLogContext , error : errorMessage } ) ;
2868+ setToast ( { message : `Error: ${ errorMessage } ` , type : 'error' } ) ;
2869+ }
2870+ } catch ( error ) {
2871+ logger . error ( 'Release update threw an exception' , { ...repoLogContext , error } ) ;
2872+ setToast ( { message : `Error: ${ ( error as Error ) . message } ` , type : 'error' } ) ;
28452873 }
28462874 } ;
2847-
2875+
28482876 const handleDeleteRelease = async ( releaseId : number ) => {
2849- if ( ! repository ) return ;
2877+ if ( ! repository ) {
2878+ logger . warn ( 'handleDeleteRelease called without repository context' , { releaseId } ) ;
2879+ return ;
2880+ }
2881+
2882+ logger . info ( 'Preparing to delete release' , { repoId : repository . id , repoName : repository . name , releaseId } ) ;
28502883 confirmAction ( {
28512884 title : 'Delete Release' ,
28522885 message : 'Are you sure you want to delete this release? This action cannot be undone.' ,
28532886 confirmText : 'Delete' ,
28542887 icon : < ExclamationTriangleIcon className = "h-6 w-6 text-red-600" /> ,
28552888 onConfirm : async ( ) => {
2856- const result = await window . electronAPI ?. deleteRelease ( { repo : repository , releaseId } ) ;
2857- if ( result ?. success ) {
2858- setToast ( { message : 'Release deleted.' , type : 'success' } ) ;
2859- fetchReleases ( ) ;
2860- } else {
2861- setToast ( { message : `Error: ${ result ?. error || 'API call failed.' } ` , type : 'error' } ) ;
2889+ try {
2890+ const result = await window . electronAPI ?. deleteRelease ( { repo : repository , releaseId } ) ;
2891+ if ( result ?. success ) {
2892+ logger . info ( 'Release deletion succeeded' , { repoId : repository . id , repoName : repository . name , releaseId } ) ;
2893+ setToast ( { message : 'Release deleted.' , type : 'success' } ) ;
2894+ fetchReleases ( ) ;
2895+ } else {
2896+ const errorMessage = result ?. error || 'API call failed.' ;
2897+ logger . error ( 'Release deletion failed' , { repoId : repository . id , repoName : repository . name , releaseId, error : errorMessage } ) ;
2898+ setToast ( { message : `Error: ${ errorMessage } ` , type : 'error' } ) ;
2899+ }
2900+ } catch ( error ) {
2901+ logger . error ( 'Release deletion threw an exception' , { repoId : repository . id , repoName : repository . name , releaseId, error } ) ;
2902+ setToast ( { message : `Error: ${ ( error as Error ) . message } ` , type : 'error' } ) ;
28622903 }
28632904 } ,
28642905 } ) ;
28652906 } ;
28662907
28672908 const handleSaveRelease = async ( ) => {
2868- if ( ! repository || ! editingRelease ) return ;
2869-
2909+ if ( ! repository || ! editingRelease ) {
2910+ logger . warn ( 'handleSaveRelease called without required context' , {
2911+ hasRepository : Boolean ( repository ) ,
2912+ hasEditingRelease : Boolean ( editingRelease ) ,
2913+ } ) ;
2914+ return ;
2915+ }
2916+
28702917 const options = {
28712918 tag_name : editingRelease . tagName ! ,
28722919 name : editingRelease . name ! ,
28732920 body : editingRelease . body || '' ,
28742921 draft : editingRelease . isDraft || false ,
28752922 prerelease : editingRelease . isPrerelease || false ,
28762923 } ;
2877-
2878- let result ;
2879- if ( editingRelease . isNew ) {
2880- result = await window . electronAPI ?. createRelease ( { repo : repository , options } ) ;
2881- } else {
2882- result = await window . electronAPI ?. updateRelease ( { repo : repository , releaseId : editingRelease . id ! , options } ) ;
2883- }
28842924
2885- if ( result ?. success ) {
2886- setToast ( { message : `Release ${ editingRelease . isNew ? 'created' : 'saved' } .` , type : 'success' } ) ;
2887- setEditingRelease ( null ) ;
2888- fetchReleases ( ) ;
2889- } else {
2890- setToast ( { message : `Error: ${ result ?. error || 'API call failed.' } ` , type : 'error' } ) ;
2925+ const logContext = {
2926+ repoId : repository . id ,
2927+ repoName : repository . name ,
2928+ releaseId : editingRelease . id ?? null ,
2929+ tagName : editingRelease . tagName ,
2930+ options,
2931+ isNew : Boolean ( editingRelease . isNew ) ,
2932+ } ;
2933+
2934+ logger . info ( 'Saving release' , logContext ) ;
2935+
2936+ try {
2937+ let result ;
2938+ if ( editingRelease . isNew ) {
2939+ result = await window . electronAPI ?. createRelease ( { repo : repository , options } ) ;
2940+ } else {
2941+ result = await window . electronAPI ?. updateRelease ( { repo : repository , releaseId : editingRelease . id ! , options } ) ;
2942+ }
2943+
2944+ if ( result ?. success ) {
2945+ logger . info ( 'Release save succeeded' , logContext ) ;
2946+ setToast ( { message : `Release ${ editingRelease . isNew ? 'created' : 'saved' } .` , type : 'success' } ) ;
2947+ setEditingRelease ( null ) ;
2948+ fetchReleases ( ) ;
2949+ } else {
2950+ const errorMessage = result ?. error || 'API call failed.' ;
2951+ logger . error ( 'Release save failed' , { ...logContext , error : errorMessage } ) ;
2952+ setToast ( { message : `Error: ${ errorMessage } ` , type : 'error' } ) ;
2953+ }
2954+ } catch ( error ) {
2955+ logger . error ( 'Release save threw an exception' , { ...logContext , error } ) ;
2956+ setToast ( { message : `Error: ${ ( error as Error ) . message } ` , type : 'error' } ) ;
28912957 }
28922958 } ;
28932959
0 commit comments