diff --git a/backend/modules/team/controller.js b/backend/modules/team/controller.js index 6b457b8b..ed38262c 100644 --- a/backend/modules/team/controller.js +++ b/backend/modules/team/controller.js @@ -491,23 +491,32 @@ controller.attachUserApplicant = (teams, userId) => { controller.getTeamsForEvent = async (eventId, userId, page, size, filter) => { let eventTeams = [] - const query = { event: eventId } - - if (filter) { - query.challenge = filter - } - - const teamCount = await Team.countDocuments(query) - + let teamCount = 0 if (page && size) { - eventTeams = await Team.find(query) - .sort({ createdAt: 'desc' }) - .skip(parseInt(size * page)) - .limit(parseInt(size)) + if (filter) { + eventTeams = await Team.find({ + event: eventId, + challenge: filter, + }) + .sort({ createdAt: 'desc' }) + .skip(parseInt(size * page)) + .limit(parseInt(size)) + teamCount = await eventTeams.length + } else { + eventTeams = await Team.find({ + event: eventId, + }) + .sort({ createdAt: 'desc' }) + .skip(parseInt(size * page)) + .limit(parseInt(size)) + teamCount = await eventTeams.length + } } else { - eventTeams = await Team.find(query).sort({ createdAt: 'desc' }) + eventTeams = await Team.find({ + event: eventId, + }).sort({ createdAt: 'desc' }) + teamCount = await eventTeams.length } - const teamsWithoutTeamCode = convertToObjectAndStripProperties(eventTeams, [ 'code', ]) diff --git a/frontend/src/assets/images/venueMap2023/LayoutMap-venue-01.jpg b/frontend/src/assets/images/venueMap2023/LayoutMap-venue-01.jpg new file mode 100644 index 00000000..eee48867 Binary files /dev/null and b/frontend/src/assets/images/venueMap2023/LayoutMap-venue-01.jpg differ diff --git a/frontend/src/assets/images/venueMap2023/LayoutMap-venue-02.jpg b/frontend/src/assets/images/venueMap2023/LayoutMap-venue-02.jpg new file mode 100644 index 00000000..68e47a41 Binary files /dev/null and b/frontend/src/assets/images/venueMap2023/LayoutMap-venue-02.jpg differ diff --git a/frontend/src/assets/images/venueMap2023/LayoutMap-venue-03.jpg b/frontend/src/assets/images/venueMap2023/LayoutMap-venue-03.jpg new file mode 100644 index 00000000..175c46fd Binary files /dev/null and b/frontend/src/assets/images/venueMap2023/LayoutMap-venue-03.jpg differ diff --git a/frontend/src/components/Team/AdminTeamEdit/index.js b/frontend/src/components/Team/AdminTeamEdit/index.js index fbeef63d..90035057 100644 --- a/frontend/src/components/Team/AdminTeamEdit/index.js +++ b/frontend/src/components/Team/AdminTeamEdit/index.js @@ -53,53 +53,53 @@ export default ({ // console.log("delete") // } - // const handleRemove = useEffect(() => { - // console.log('delete', slug, teamData?.code, teamMemberToRemove) - // setLoading(true) - // dispatch( - // DashboardActions.organiserRemoveMemberFromTeam( - // slug, - // teamData.code, - // teamMemberToRemove, - // ), - // ) - // .then(team => { - // console.log('removed succesfully.', team) - // dispatch(OrganiserActions.updateTeamsForEvent(slug)) - // }) - // .then(() => { - // console.log( - // 'teams updated', - // teamMembersArr.filter( - // t => t.profile.userId !== teamMemberToRemove, - // ), - // ) - // setTeamMembersArr( - // teamMembersArr.filter( - // t => t.profile.userId !== teamMemberToRemove, - // ), - // ) - // dispatch( - // SnackbarActions.success( - // 'removed ' + - // teamMemberToRemove + - // ' from team ' + - // teamData?.code, - // ), - // ) - // }) - // .catch(() => { - // dispatch( - // SnackbarActions.error( - // 'Something went wrong... please try again.', - // ), - // ) - // }) - // .finally(() => { - // setTeamMemberToRemove('') - // setLoading(false) - // }) - // }, [teamMemberToRemove, slug, teamData?.code, dispatch]) + const handleRemove = useEffect(() => { + console.log('delete', slug, teamData?.code, teamMemberToRemove) + setLoading(true) + dispatch( + DashboardActions.organiserRemoveMemberFromTeam( + slug, + teamData.code, + teamMemberToRemove, + ), + ) + .then(team => { + console.log('removed succesfully.', team) + dispatch(OrganiserActions.updateTeamsForEvent(slug)) + }) + .then(() => { + console.log( + 'teams updated', + teamMembersArr.filter( + t => t.profile.userId !== teamMemberToRemove, + ), + ) + setTeamMembersArr( + teamMembersArr.filter( + t => t.profile.userId !== teamMemberToRemove, + ), + ) + dispatch( + SnackbarActions.success( + 'removed ' + + teamMemberToRemove + + ' from team ' + + teamData?.code, + ), + ) + }) + .catch(() => { + dispatch( + SnackbarActions.error( + 'Something went wrong... please try again.', + ), + ) + }) + .finally(() => { + setTeamMemberToRemove('') + setLoading(false) + }) + }, [teamMemberToRemove, slug, teamData?.code, dispatch]) const classes = junctionStyle() return ( diff --git a/frontend/src/components/Team/TeamHeader/index.js b/frontend/src/components/Team/TeamHeader/index.js index be78a46f..1f6ebb6d 100644 --- a/frontend/src/components/Team/TeamHeader/index.js +++ b/frontend/src/components/Team/TeamHeader/index.js @@ -21,8 +21,10 @@ export default ({ let challengeName = null let event = useSelector(DashboardSelectors.event) if (event === null) { + console.log('from organiser') event = useSelector(OrganiserSelectors.event) } + console.log('event', event) if (teamChallenge && typeof teamChallenge === 'string') { const challengeDetails = event.challenges.find( challenge => challenge._id === teamChallenge, diff --git a/frontend/src/components/projects/ProjectDetail/ProjectTeam.js b/frontend/src/components/projects/ProjectDetail/ProjectTeam.js index f9b28bfd..228ea9a7 100644 --- a/frontend/src/components/projects/ProjectDetail/ProjectTeam.js +++ b/frontend/src/components/projects/ProjectDetail/ProjectTeam.js @@ -70,7 +70,7 @@ const ProjectTeam = React.memo(({ hiddenUsers, teamId, showFullTeam }) => { useEffect(() => { fetchTeamMembers() - }, []) + }, [fetchTeamMembers]) if (loading) { return ( diff --git a/frontend/src/components/projects/ProjectDetail/index.js b/frontend/src/components/projects/ProjectDetail/index.js index 1abea06e..b902e888 100644 --- a/frontend/src/components/projects/ProjectDetail/index.js +++ b/frontend/src/components/projects/ProjectDetail/index.js @@ -114,8 +114,30 @@ const ProjectDetail = ({ const classes = useStyles() const [index, setIndex] = useState(0) const [pause, setPause] = useState(true) + const dispatch = useDispatch() if (!project) return null + const downloadFile = async fileDataString => { + const parsedValue = JSON.parse(fileDataString) + await dispatch( + DashboardActions.getFileForProject( + parsedValue.id, + parsedValue.filename, + ), + ) + } + + const extractFileDetails = (fileDataString, toExtract) => { + const parsedValue = JSON.parse(fileDataString) + switch (toExtract) { + case 'filename': + return parsedValue.filename + case 'id': + return parsedValue.id + default: + return parsedValue.filename + } + } const renderTrack = () => { const value = find(event.tracks, t => t.slug === project.track) @@ -128,7 +150,7 @@ const ProjectDetail = ({ return {value.name} } - const renderChallenges = () => { + const renderChallenges = challenges => { const values = filter( event.challenges, c => project.challenges.indexOf(c.slug) !== -1, @@ -373,8 +395,7 @@ const ProjectDetail = ({ {answer.fieldType === 'boolean' - ? answer.value === - 'true' + ? answer.value ? 'Yes' : 'No' : answer.value} diff --git a/frontend/src/components/projects/ProjectsGrid/index.js b/frontend/src/components/projects/ProjectsGrid/index.js index 6f91f720..69e18a7d 100644 --- a/frontend/src/components/projects/ProjectsGrid/index.js +++ b/frontend/src/components/projects/ProjectsGrid/index.js @@ -48,7 +48,6 @@ const ProjectsGrid = ({ } const fetchData = useCallback(async () => { // TODO add loading indicator - //TODO find a way to get if a project has been reviewed by partner in a more efficient manner so it doesnt run for all project fetched const projectScoreData = await Promise.allSettled( projects.map(async project => { return projectScoreLogic(project) diff --git a/frontend/src/pages/_dashboard/renderDashboard/generalPages/default/Blocks/RegistrationStatusBlock.js b/frontend/src/pages/_dashboard/renderDashboard/generalPages/default/Blocks/RegistrationStatusBlock.js index 0ca1f4e4..69d6c54f 100644 --- a/frontend/src/pages/_dashboard/renderDashboard/generalPages/default/Blocks/RegistrationStatusBlock.js +++ b/frontend/src/pages/_dashboard/renderDashboard/generalPages/default/Blocks/RegistrationStatusBlock.js @@ -82,7 +82,7 @@ export default () => { return 'error' } case RegistrationStatuses.asObject.accepted.id: { - return 'theme_purple' + return 'success' } case RegistrationStatuses.asObject.acceptedToHub.id: { return 'success' @@ -207,7 +207,7 @@ export default () => { return ( */} + + {/*
+

Map of dipoli

+ +
*/} - Need more help? - - Click here to review the Guidebook - - + { path: '/1', key: '1', label: 'Floor 1', - component: () => ( - - ), + component: () => floorNeg1() + }, + { + path: '/-1', + key: '-1', + label: 'Floor -1', + component: () => floor1() }, { path: '/2', key: '2', label: 'Floor 2', - component: () => ( - - ), - }, - { - path: '/basement', - key: 'basement', - label: 'Basement', - component: () => ( - - ), + component: () => floor2() }, + ]} location={location} baseRoute={match.url} diff --git a/frontend/src/pages/_dashboard/renderDashboard/participant/finalist-voting/index.js b/frontend/src/pages/_dashboard/renderDashboard/participant/finalist-voting/index.js index 3d8d3349..e8511c60 100644 --- a/frontend/src/pages/_dashboard/renderDashboard/participant/finalist-voting/index.js +++ b/frontend/src/pages/_dashboard/renderDashboard/participant/finalist-voting/index.js @@ -1,6 +1,6 @@ import React, { useCallback, useEffect, useState } from 'react' -import { Grid, Box, Button, Dialog, Card, Typography } from '@material-ui/core' +import { Grid, Box, Button, Dialog } from '@material-ui/core' import { useSelector, useDispatch } from 'react-redux' import PageHeader from 'components/generic/PageHeader' @@ -26,15 +26,14 @@ export default () => { const [selected, setSelected] = useState(false) const [projects, setProjects] = useState([]) - const [currentVote, setCurrentVote] = useState(null) - const [hasVoted, setHasVoted] = useState(false) - const [newVote, setNewVote] = useState(null) + const [vote, setVote] = useState(null) + const [hasVoted, setVoted] = useState(false) - const getCurrentVote = async () => { + const getCurrentVote = useCallback(async () => { return WinnerVoteService.getVote(idToken, event.slug) - } + }, [idToken, event]) - const getFinalists = async () => { + const getFinalists = useCallback(async () => { EventsService.getFinalists(idToken, event.slug) .then(finalistProjects => { setProjects(finalistProjects) @@ -46,7 +45,7 @@ export default () => { ), ) }) - } + }, [idToken, event]) useEffect(() => { setLoading(true) @@ -59,13 +58,12 @@ export default () => { } }, []) - const update = async () => { + const update = useCallback(async () => { try { - const currentVoteFetched = await getCurrentVote() - if (currentVoteFetched && currentVoteFetched?.project) { - setCurrentVote(currentVoteFetched.project) - setNewVote(currentVoteFetched.project) - setHasVoted(true) + const vote = await getCurrentVote() + if (vote && vote?.project) { + setVote(vote?.project) + setVoted(true) } } catch (err) { dispatch( @@ -74,7 +72,7 @@ export default () => { ), ) } - } + }, [event, idToken]) const handleSubmit = async () => { try { @@ -82,17 +80,15 @@ export default () => { const result = await WinnerVoteService.submitVote( idToken, event.slug, - newVote, + vote, ) if (result) { - setCurrentVote(newVote) - setHasVoted(true) - dispatch(SnackbarActions.success('vote submitted!')) + dispatch(SnackbarActions.success('Vote submitted!')) } } catch (err) { dispatch( SnackbarActions.error( - `Your vote could not be saved. Error: ${ + `Score could not be saved. Error: ${ err.response.data.message || err.message }`, ), @@ -108,40 +104,33 @@ export default () => { heading="Finalist voting" subheading="Vote for your favorite project of the finalists" /> - - {projects && - currentVote && - projects.find(project => project._id === currentVote) && ( -
- - Your current choice is:{' '} - { - projects.find( - project => project._id === currentVote, - ).name - } - -
- )} -
+ +