@@ -42,10 +42,9 @@ export interface HackathonInformation {
4242 title : string ;
4343 banner : string ;
4444 description : string ;
45- category ?: HackathonCategory ; // Legacy format (single category)
46- categories ?: HackathonCategory [ ] ; // New format (array of categories)
47- venue ?: HackathonVenue ;
45+ categories : HackathonCategory [ ] ; // New format (array of categories)
4846 slug : string ;
47+ venue ?: HackathonVenue ;
4948}
5049
5150// Timeline Tab Types
@@ -177,6 +176,7 @@ export type CreateDraftRequest = Partial<HackathonData>;
177176export type UpdateDraftRequest = Partial < HackathonData > ;
178177
179178export interface PublishHackathonRequest extends HackathonData {
179+ draftId ?: string ;
180180 contractId ?: string ;
181181 escrowAddress ?: string ;
182182 transactionHash ?: string ;
@@ -709,7 +709,6 @@ interface FlatHackathonData {
709709 // Flat fields that map to nested structure
710710 banner ?: string ;
711711 description ?: string ;
712- category ?: string | HackathonCategory ; // Legacy format
713712 categories ?: HackathonCategory [ ] ; // New format
714713 venue ?: HackathonVenue ;
715714 startDate ?: string ;
@@ -786,10 +785,7 @@ const transformHackathonResponse = (
786785 // Support both new format (categories) and legacy format (category)
787786 categories : Array . isArray ( flat . categories )
788787 ? ( flat . categories as HackathonCategory [ ] )
789- : flat . category
790- ? [ flat . category as HackathonCategory ]
791- : [ HackathonCategory . OTHER ] ,
792- category : ( flat . category as HackathonCategory ) || HackathonCategory . OTHER ,
788+ : [ HackathonCategory . OTHER ] ,
793789 venue : flat . venue ,
794790 } ,
795791 timeline : {
@@ -1382,13 +1378,22 @@ export const transformPublicHackathonToHackathon = (
13821378 internalStatus = 'completed' ;
13831379 }
13841380
1385- // Get first category or default to OTHER
1386- const category = publicHackathon . categories ?. [ 0 ] || HackathonCategory . OTHER ;
1387- const categoryEnum = Object . values ( HackathonCategory ) . includes (
1388- category as HackathonCategory
1389- )
1390- ? ( category as HackathonCategory )
1391- : HackathonCategory . OTHER ;
1381+ // Map all categories from API response
1382+ const categoriesArray : HackathonCategory [ ] = publicHackathon . categories
1383+ ? publicHackathon . categories
1384+ . map ( cat => {
1385+ // Check if the category string matches any HackathonCategory enum value
1386+ const matchedCategory = Object . values ( HackathonCategory ) . find (
1387+ enumCat => enumCat === cat
1388+ ) ;
1389+ return matchedCategory || null ;
1390+ } )
1391+ . filter ( ( cat ) : cat is HackathonCategory => cat !== null )
1392+ : [ ] ;
1393+
1394+ // Ensure at least one category
1395+ const categories : HackathonCategory [ ] =
1396+ categoriesArray . length > 0 ? categoriesArray : [ HackathonCategory . OTHER ] ;
13921397
13931398 // Extract resources (telegram, discord, etc.) from resources array
13941399 const telegram = publicHackathon . resources ?. find (
@@ -1412,7 +1417,7 @@ export const transformPublicHackathonToHackathon = (
14121417 title : publicHackathon . title ,
14131418 banner : publicHackathon . imageUrl ,
14141419 description : publicHackathon . description ,
1415- category : categoryEnum ,
1420+ categories : categories ,
14161421 slug : publicHackathon . slug ,
14171422 venue,
14181423 } ,
0 commit comments