| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  | import { isURL } from 'validator'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-19 20:32:14 +00:00
										 |  |  | import { addPlaceholderImage } from './'; | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  | import { | 
					
						
							|  |  |  |   prepUniqueDaysByHours, | 
					
						
							|  |  |  |   calcCurrentStreak, | 
					
						
							|  |  |  |   calcLongestStreak | 
					
						
							|  |  |  | } from '../utils/user-stats'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const publicUserProps = [ | 
					
						
							|  |  |  |   'about', | 
					
						
							|  |  |  |   'calendar', | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |   'completedChallenges', | 
					
						
							|  |  |  |   'githubProfile', | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   'isApisMicroservicesCert', | 
					
						
							|  |  |  |   'isBackEndCert', | 
					
						
							|  |  |  |   'isCheater', | 
					
						
							| 
									
										
										
										
											2018-06-07 22:35:06 +01:00
										 |  |  |   'isDonating', | 
					
						
							| 
									
										
										
										
											2018-02-27 14:03:06 +00:00
										 |  |  |   'is2018DataVisCert', | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   'isDataVisCert', | 
					
						
							|  |  |  |   'isFrontEndCert', | 
					
						
							|  |  |  |   'isFullStackCert', | 
					
						
							|  |  |  |   'isFrontEndLibsCert', | 
					
						
							|  |  |  |   'isHonest', | 
					
						
							|  |  |  |   'isInfosecQaCert', | 
					
						
							| 
									
										
										
										
											2020-06-18 00:00:31 +09:00
										 |  |  |   'isQaCertV7', | 
					
						
							|  |  |  |   'isInfosecCertV7', | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   'isJsAlgoDataStructCert', | 
					
						
							|  |  |  |   'isRespWebDesignCert', | 
					
						
							| 
									
										
										
										
											2020-06-18 00:00:31 +09:00
										 |  |  |   'isSciCompPyCertV7', | 
					
						
							|  |  |  |   'isDataAnalysisPyCertV7', | 
					
						
							|  |  |  |   'isMachineLearningPyCertV7', | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   'linkedin', | 
					
						
							|  |  |  |   'location', | 
					
						
							|  |  |  |   'name', | 
					
						
							|  |  |  |   'points', | 
					
						
							|  |  |  |   'portfolio', | 
					
						
							| 
									
										
										
										
											2018-05-20 04:07:41 +01:00
										 |  |  |   'profileUI', | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   'projects', | 
					
						
							|  |  |  |   'streak', | 
					
						
							|  |  |  |   'twitter', | 
					
						
							|  |  |  |   'username', | 
					
						
							| 
									
										
										
										
											2018-08-02 18:39:51 +03:00
										 |  |  |   'website', | 
					
						
							|  |  |  |   'yearsTopContributor' | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const userPropsForSession = [ | 
					
						
							|  |  |  |   ...publicUserProps, | 
					
						
							|  |  |  |   'currentChallengeId', | 
					
						
							|  |  |  |   'email', | 
					
						
							| 
									
										
										
										
											2018-05-28 22:52:15 +01:00
										 |  |  |   'emailVerified', | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   'id', | 
					
						
							|  |  |  |   'sendQuincyEmail', | 
					
						
							| 
									
										
										
										
											2018-08-24 14:32:54 +01:00
										 |  |  |   'theme', | 
					
						
							|  |  |  |   'completedChallengeCount', | 
					
						
							|  |  |  |   'completedProjectCount', | 
					
						
							|  |  |  |   'completedCertCount', | 
					
						
							| 
									
										
										
										
											2018-08-25 00:24:19 +01:00
										 |  |  |   'completedLegacyCertCount', | 
					
						
							| 
									
										
										
										
											2019-11-13 19:40:49 +05:30
										 |  |  |   'acceptedPrivacyTerms', | 
					
						
							|  |  |  |   'donationEmails' | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function normaliseUserFields(user) { | 
					
						
							|  |  |  |   const about = user.bio && !user.about ? user.bio : user.about; | 
					
						
							|  |  |  |   const picture = user.picture || addPlaceholderImage(user.username); | 
					
						
							| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  |   const twitter = | 
					
						
							|  |  |  |     user.twitter && isURL(user.twitter) | 
					
						
							|  |  |  |       ? user.twitter | 
					
						
							|  |  |  |       : user.twitter && | 
					
						
							|  |  |  |         `https://www.twitter.com/${user.twitter.replace(/^@/, '')}`; | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   return { about, picture, twitter }; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function getProgress(progressTimestamps, timezone = 'EST') { | 
					
						
							|  |  |  |   const calendar = progressTimestamps | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |     .filter(Boolean) | 
					
						
							|  |  |  |     .reduce((data, timestamp) => { | 
					
						
							|  |  |  |       data[Math.floor(timestamp / 1000)] = 1; | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |       return data; | 
					
						
							| 
									
										
										
										
											2019-02-06 14:19:58 +00:00
										 |  |  |     }, {}); | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |   const uniqueHours = prepUniqueDaysByHours(progressTimestamps, timezone); | 
					
						
							| 
									
										
										
										
											2018-02-16 23:18:53 +00:00
										 |  |  |   const streak = { | 
					
						
							|  |  |  |     longest: calcLongestStreak(uniqueHours, timezone), | 
					
						
							|  |  |  |     current: calcCurrentStreak(uniqueHours, timezone) | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   return { calendar, streak }; | 
					
						
							|  |  |  | } |