@@ -2,6 +2,7 @@ import axios from "axios";
22import { Ok , Err , Result } from "ts-results" ;
33import dotenv from "dotenv" ;
44import { PROJECT_V2_ITEMS } from "./graphql" ;
5+ import { Item } from "../../items" ;
56
67dotenv . config ( ) ;
78
@@ -36,15 +37,16 @@ export interface ProjectV2Item {
3637 } ;
3738}
3839
39- export const fetchProjectV2Items = async ( ) : Promise <
40- Result < ProjectV2Item [ ] , Error >
41- > => {
40+ export const fetchProjectV2Items = async ( ) : Promise < Result < Item [ ] , Error > > => {
4241 const result = await fetchData ( ) ;
4342 if ( result . err ) {
4443 return result ;
4544 }
4645
47- return Ok ( result . val . data . organization . projectV2 . items . nodes ) ;
46+ const formattedItems = convertGithubItems (
47+ result . val . data . organization . projectV2 . items . nodes ,
48+ ) ;
49+ return Ok ( formattedItems ) ;
4850} ;
4951
5052const TOKEN = process . env . GITHUB_ACCESS_TOKEN ?? "" ;
@@ -67,3 +69,33 @@ const fetchData = async (): Promise<Result<any, Error>> => {
6769 return Err ( new Error ( "Failed to fetch data" ) ) ;
6870 }
6971} ;
72+
73+ const convertGithubItems = ( items : ProjectV2Item [ ] ) => {
74+ return items . map ( ( item : ProjectV2Item ) => {
75+ const assignedUsers = item . fieldValues . nodes
76+ . filter ( ( field ) => field . users )
77+ . flatMap ( ( field ) => field . users . nodes . map ( ( user ) => user . url ) ) ;
78+ const status = item . fieldValues . nodes
79+ . filter ( ( field ) => field . name )
80+ . map ( ( field ) => field . name ) [ 0 ] ;
81+ const labels = item . fieldValues . nodes
82+ . filter ( ( field ) => field . labels )
83+ . flatMap ( ( field ) => field . labels . nodes . map ( ( label ) => label . name ) ) ;
84+
85+ // TODO: improve this
86+ let dueDate : Date | undefined ;
87+ if ( item . fieldValueByName ?. date ) {
88+ dueDate = new Date ( item . fieldValueByName . date ) ;
89+ dueDate . setDate ( dueDate . getDate ( ) + 1 ) ;
90+ }
91+
92+ return {
93+ title : item . content . title ,
94+ url : item . content . url ,
95+ assignedUsers,
96+ labels,
97+ dueDate : dueDate ,
98+ status : status ,
99+ } ;
100+ } ) ;
101+ } ;
0 commit comments