Skip to content

Commit 55ee438

Browse files
authored
Merge pull request #305 from nwplus/dev
Dev
2 parents c9e1f47 + 0aea362 commit 55ee438

3 files changed

Lines changed: 52 additions & 8 deletions

File tree

pages/[id]/rewards.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ export default function Rewards({ id, hackathons }) {
3737
const [alertMsg, setAlertMsg] = useState('')
3838
const { email: user } = useAuth().user
3939

40+
const REWARD_TYPES = [{ label: 'Reward' }, { label: 'Raffle' }]
41+
4042
const fetchRewards = async () => {
4143
const rewardsFetched = await getRewards(id)
4244
if (Object.keys(rewardsFetched).length > 0) {
@@ -116,6 +118,7 @@ export default function Rewards({ id, hackathons }) {
116118
return (
117119
<TableRow>
118120
<TableData>{props.reward}</TableData>
121+
<TableData>{props.type}</TableData>
119122
<TableData>{props.blurb}</TableData>
120123
<TableData>{props.prizesAvailable}</TableData>
121124
<TableData>{props.requiredPoints}</TableData>
@@ -143,11 +146,12 @@ export default function Rewards({ id, hackathons }) {
143146
<CardButtonContainer>
144147
<Button
145148
type={NEW}
146-
onClick={() =>
149+
onClick={() => {
147150
setNewReward({
148151
date: setHours(setMinutes(new Date(), 0), 13),
152+
type: 'Reward',
149153
})
150-
}
154+
}}
151155
>
152156
New Reward
153157
</Button>
@@ -175,6 +179,7 @@ export default function Rewards({ id, hackathons }) {
175179
<thead>
176180
<TableRow>
177181
<TableHeader>Reward</TableHeader>
182+
<TableHeader>Type</TableHeader>
178183
<TableHeader>Blurb</TableHeader>
179184
<TableHeader>Number of Prizes Available</TableHeader>
180185
<TableHeader>Required Points</TableHeader>
@@ -189,6 +194,7 @@ export default function Rewards({ id, hackathons }) {
189194
key={rewards[curr].rewardID}
190195
rewardID={rewards[curr].rewardID}
191196
reward={rewards[curr].reward}
197+
type={rewards[curr].type}
192198
blurb={rewards[curr].blurb}
193199
prizesAvailable={rewards[curr].prizesAvailable}
194200
requiredPoints={rewards[curr].requiredPoints}
@@ -216,6 +222,17 @@ export default function Rewards({ id, hackathons }) {
216222
onChange={reward => handleInput('reward', reward.target.value, newReward, setNewReward)}
217223
/>
218224
</ModalContent>
225+
<ModalContent columns={1}>
226+
<ModalField
227+
label="Type"
228+
modalAction={NEW}
229+
dropdown
230+
dropdownOptions={REWARD_TYPES}
231+
onChange={type => {
232+
handleInput('type', type.label, newReward, setNewReward)
233+
}}
234+
/>
235+
</ModalContent>
219236
<ModalContent columns={1}>
220237
<ModalField
221238
label="Blurb"
@@ -271,6 +288,9 @@ export default function Rewards({ id, hackathons }) {
271288
<ModalContent columns={1}>
272289
<ModalField label="Reward" value={rewardViewing.reward} modalAction={VIEW} />
273290
</ModalContent>
291+
<ModalContent columns={1}>
292+
<ModalField label="Type" value={rewardViewing.type} modalAction={VIEW} />
293+
</ModalContent>
274294
<ModalContent columns={1}>
275295
<ModalField label="Blurb" value={rewardViewing.blurb} modalAction={VIEW} />
276296
</ModalContent>
@@ -303,6 +323,18 @@ export default function Rewards({ id, hackathons }) {
303323
}}
304324
/>
305325
</ModalContent>
326+
<ModalContent columns={1}>
327+
<ModalField
328+
label="Type"
329+
modalAction={NEW}
330+
dropdown
331+
dropdownOptions={REWARD_TYPES}
332+
value={rewardEditing?.type || undefined}
333+
onChange={type => {
334+
handleInput('type', type.label, rewardEditing, setRewardEditing)
335+
}}
336+
/>
337+
</ModalContent>
306338
<ModalContent columns={1}>
307339
<ModalField
308340
label="Blurb"
@@ -363,6 +395,9 @@ export default function Rewards({ id, hackathons }) {
363395
<ModalContent columns={1}>
364396
<ModalField label="Reward" value={rewardConfirm.rewardConfirm} modalAction={VIEW} />
365397
</ModalContent>
398+
<ModalContent columns={1}>
399+
<ModalField label="Type" value={rewardConfirm.type} modalAction={VIEW} />
400+
</ModalContent>
366401
<ModalContent columns={1}>
367402
<ModalField label="Blurb" value={rewardConfirm.blurb} modalAction={VIEW} />
368403
</ModalContent>

utility/firebase.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ export const getReward = (rewardID, data) => {
158158
rewardID,
159159
reward: data.reward || 'Empty reward field', // Title of the reward
160160
key: data.key || rewardID, // Key of the reward (defaults to rewardID)
161+
type: data.type, // Reward type
161162
blurb: data.blurb || 'Empty blurb description for reward', // Short description of the reward
162163
from: data.from || 'None', // Source or sponsor of the reward
163164
imgName: data.imgName || 'None', // Image name (if applicable)
@@ -185,6 +186,7 @@ export const addReward = async (hackathon, reward) => {
185186
await ref.set({
186187
reward: reward.reward, // Title of the reward
187188
key: ref.id, // Key generated for the reward
189+
type: reward.type, // Reward type
188190
blurb: reward.blurb, // Short description of the reward
189191
imgName: reward.imgName, // Image name (if applicable)
190192
imgURL: reward.imgURL, // URL to the reward image
@@ -202,6 +204,7 @@ export const updateReward = async (hackathon, reward) => {
202204
await ref.update({
203205
reward: reward.reward || 'Empty reward field',
204206
key: reward.key || reward.rewardID,
207+
type: reward.type,
205208
blurb: reward.blurb || 'Empty blurb description for reward',
206209
from: reward.from || 'None',
207210
imgName: reward.imgName || 'None',
@@ -592,11 +595,10 @@ export const getHackerInfo = async (callback, hackathon, collection) => {
592595
.doc(hackathon)
593596
.collection(collection)
594597
.onSnapshot(snap => {
595-
callback(
596-
snap.docs.map(doc => {
597-
return orderObj(flattenObj(filterHackerInfoFields(doc.data(), collection)))
598-
})
599-
)
598+
const hackerInfoPromises = snap.docs.map(async doc => {
599+
return orderObj(flattenObj(await filterHackerInfoFields(db, doc.data(), hackathon, collection)))
600+
})
601+
Promise.all(hackerInfoPromises).then(callback)
600602
})
601603
return res
602604
}

utility/utilities.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ const createStringFromSelection = (selection, other = '') => {
100100
}
101101

102102
// Specifically for hacker info page - fixes/removes certain fields for table display
103-
export const filterHackerInfoFields = (obj, collection) => {
103+
// Take `db` as a parameter to avoid circular dependency with firebase.js
104+
export const filterHackerInfoFields = async (db, obj, hackathon, collection) => {
104105
let newObj = {}
105106
if (collection === 'Applicants') {
106107
delete obj.questionnaire?.eventsAttended
@@ -144,6 +145,12 @@ export const filterHackerInfoFields = (obj, collection) => {
144145
newObj.longAnswers3 = obj.skills?.longAnswers3 || false
145146

146147
newObj.attendedEvents = obj.dayOf?.events?.map(e => e.eventName).join(', ') ?? ''
148+
149+
const dayOfDocsPromises = obj.dayOf?.events?.map(e =>
150+
db.collection('Hackathons').doc(hackathon).collection('DayOf').doc(e.eventId).get()
151+
)
152+
const dayOfDocs = await Promise.all(dayOfDocsPromises ?? [])
153+
newObj.points = dayOfDocs.reduce((acc, curr) => acc + Number(curr.data().points ?? 0), 0)
147154
} else if (collection === 'Projects') {
148155
newObj = { ...obj }
149156
delete newObj.grades

0 commit comments

Comments
 (0)