diff --git a/public/index.html b/public/index.html index a93c3807..9f1a2e0b 100644 --- a/public/index.html +++ b/public/index.html @@ -34,7 +34,7 @@ crossorigin="anonymous" referrerpolicy="no-referrer" /> - nwHacks 2024 Portal + cmd-f 2024 Portal diff --git a/src/App.js b/src/App.js index e7bc05f9..5c248e3c 100644 --- a/src/App.js +++ b/src/App.js @@ -82,36 +82,18 @@ const ApplicationInProgressRoute = ({ name, handleLogout, path, children, theme const { isAuthed, user, logout } = useAuth() return isAuthed ? ( - - - - {children} - - - + + {children} + ) : ( ) } -const ApplicationInProgressContentContainer = ({ children }) => { - const { - application: { - status: { applicationStatus }, - }, - } = useHackerApplication() - - return applicationStatus === APPLICATION_STATUS.inProgress ? ( - <>{children} - ) : ( - - ) -} - const NoAuthRoute = ({ path, children }) => { const { isAuthed, user } = useAuth() return ( @@ -143,15 +125,7 @@ const NavbarSaveOnLogout = ({ name, handleLogout }) => { const ApplicationFormContainer = ({ part }) => { const { isAuthed, user, logout } = useAuth() - const { - application, - // got rid of destructuring in case of null value (not logged in, visits a page on application - maybe it was bookmarked) - // { - // status: { - // applicationStatus - // }, - // }, - } = useHackerApplication() + const { application } = useHackerApplication() return isAuthed && application.status.applicationStatus === APPLICATION_STATUS.inProgress ? ( <> @@ -189,13 +163,7 @@ const ProjectViewContainer = ({ params }) => ( const ApplicationDashboardRoutingContainer = () => { const { isAuthed } = useAuth() - return isAuthed ? ( - - - - ) : ( - - ) + return isAuthed ? : } function App() { @@ -273,20 +241,20 @@ function App() { - - - - - - - - - {params => ( - - - - )} - + + + + + + + + + + + {params => } + + + diff --git a/src/components/ApplicationDashboard.js b/src/components/ApplicationDashboard.js index 2a993a00..d05d1877 100644 --- a/src/components/ApplicationDashboard.js +++ b/src/components/ApplicationDashboard.js @@ -202,7 +202,7 @@ export const hackerStatuses = (relevantDates, hackerName = null) => ({ sidebarText: 'In Review', cardText: 'Awaiting assessment', // blurb: `We will send out all acceptances by ${relevantDates?.sendAcceptancesBy}. In the meantime, get connected with our community of hackers on Instagram, Facebook, Medium, and Twitter to stay up to date with the latest news on sponsors, prizes and workshops!`, - blurb: `We will send out all acceptances by January 2024. In the meantime, get connected with our community of hackers on Instagram, Facebook, Medium, and Twitter to stay up to date with the latest news on sponsors, prizes and workshops!`, + blurb: `We will send out all acceptances by late Feb 2024. In the meantime, get connected with our community of hackers on Instagram, Facebook, Medium, and Twitter to stay up to date with the latest news on sponsors, prizes and workshops!`, }, waitlisted: { sidebarText: 'Waitlisted', @@ -300,7 +300,7 @@ export const hackerStatuses = (relevantDates, hackerName = null) => ({ sidebarText: 'Not Submitted', cardText: 'Not Submitted', // blurb: `Your application has not been submitted. Please complete your application and submit before the deadline on ${relevantDates?.applicationDeadline} in order to join us at ${copyText.hackathonName}!`, - blurb: `Your application has not been submitted. Please complete your application and submit before December in order to join us at ${copyText.hackathonName}!`, + blurb: `Your application has not been submitted. Please complete your application and submit before February 22, 2024 in order to join us at ${copyText.hackathonName}!`, }, }) @@ -415,7 +415,10 @@ const Dashboard = ({
- nwHacks 2024 is Western Canada’s largest 24 hour hackathon! + + cmd-f 2024 is Western Canada's largest hackathon celebrating underrepresented genders in + tech! + Registration status: {hackerStatuses()[hackerStatus]?.cardText} diff --git a/src/components/ApplicationForm/BasicInfo.js b/src/components/ApplicationForm/BasicInfo.js index 35ee7878..ac3417a4 100644 --- a/src/components/ApplicationForm/BasicInfo.js +++ b/src/components/ApplicationForm/BasicInfo.js @@ -1,13 +1,15 @@ import React from 'react' import styled from 'styled-components' -import majors from '../../containers/Application/data/majors.json' import schools from '../../containers/Application/data/schools.json' import { + CULTURAL_BG_OPTIONS, DIETARY_RESTRICTION_OPTIONS, - ETHNICITY_OPTIONS, + MAJOR_OPTIONS, PRONOUN_OPTIONS, + RACE_OPTIONS, } from '../../utility/Constants' import { applyCustomSort, creatableDropdownValue, findElement } from '../../utility/utilities' +import { TextArea } from '../Input' import Dropdown from '../Input/Dropdown' import Select from '../Input/Select' import { TextInput } from '../Input/TextInput' @@ -24,11 +26,24 @@ import { FormSpacing, SubHeading } from './' const genderOptions = [ { value: 'female', label: 'Woman' }, { value: 'male', label: 'Man' }, - { value: 'non-binary', label: 'Non-binary' }, + { value: 'non-binary', label: 'Non-binary/Genderqueer/Gender non-conforming' }, + { value: 'two-spirit', label: 'Two-Spirit' }, { value: 'other', label: 'Prefer to self-describe' }, { value: 'prefer not to answer', label: 'Prefer not to answer' }, ] +const indigenousIdentificationOptions = [ + { value: 'yes', label: 'Yes' }, + { value: 'no', label: 'No' }, + { value: 'prefer not to answer', label: 'Prefer not to answer' }, +] + +const canadianStatusOptions = [ + { value: 'international student', label: 'International Student' }, + { value: 'canadian/on PR student', label: 'Canadian/on PR Student' }, + { value: 'other', label: 'Other (Please Describe)' }, +] + const educationOptions = [ { value: 'less than high school', label: 'Less than Secondary / High School' }, { value: 'high school', label: 'Secondary/High school' }, @@ -52,13 +67,12 @@ const educationOptions = [ { value: 'prefer not to answer', label: 'Prefer not to answer' }, ] -// Removed as of nwHacks 2024 -// const identifyAsUnderrepresentedOptions = [ -// { value: 'yes', label: 'Yes' }, -// { value: 'no', label: 'No' }, -// { value: 'unsure', label: 'Unsure' }, -// { value: 'preferNotToAnswer', label: 'Prefer not to answer' }, -// ] +const identifyAsUnderrepresentedOptions = [ + { value: 'yes', label: 'Yes' }, + { value: 'no', label: 'No' }, + { value: 'unsure', label: 'Unsure' }, + { value: 'preferNotToAnswer', label: 'Prefer not to answer' }, +] const academicYearOptions = [ { value: 'Secondary/High School', label: 'Secondary/High School' }, @@ -67,6 +81,7 @@ const academicYearOptions = [ { value: '3rd year', label: '3rd year' }, { value: '4th year', label: '4th year' }, { value: '5th year+', label: '5th year+' }, + { value: 'New Grad', label: 'New Grad (<= 1 year)' }, { value: 'Graduate school', label: 'Graduate school' }, ] @@ -362,6 +377,10 @@ const StyledTextInput = styled(TextInput)` margin: 0.5em 1em 1em 0; ` +const StyledTextArea = styled(TextArea)` + margin: 1em 0; +` + // form part 1 export default ({ refs, errors, formInputs, onChange }) => ( <> @@ -381,52 +400,47 @@ export default ({ refs, errors, formInputs, onChange }) => ( onChange({ - firstName: e.target.value, + legalFirstName: e.target.value, }) } - customRef={refs['firstNameRef']} + customRef={refs['legalFirstNameRef']} /> onChange({ - middleName: e.target.value, + legalMiddleName: e.target.value, }) } /> onChange({ - lastName: e.target.value, + legalLastName: e.target.value, }) } - customRef={refs['lastNameRef']} + customRef={refs['legalLastNameRef']} /> question 02 - - What is your preferred name? - - + What is your preferred name? onChange({ preferredName: e.target.value, @@ -442,7 +456,7 @@ export default ({ refs, errors, formInputs, onChange }) => ( What is your current age? -

We accept hackers currently in high school but require this for consent purposes.

+

We accept hackers currently in high school but require this information for consent purposes.

{errors?.ageByHackathon && {errors?.ageByHackathon}} ( question 06 - - {formInputs.educationLevel === 'high school' - ? 'What do you plan on studying?' - : 'What is your current or intended major?'} - - -

Enter your intended/current major, or unknown

- {errors?.major && {errors?.major}} - `${inputValue}`} - label={formInputs.major} - value={creatableDropdownValue(majors, 'label', formInputs.major)} - onChange={e => - onChange({ - major: e.label, - }) - } - emptySearchDefaultOption="Start typing to search" - canCreateNewOption - isValid={!errors?.major} - customRef={refs['majorRef']} - /> -
- - - question 07 What is your level of study? @@ -589,51 +574,51 @@ export default ({ refs, errors, formInputs, onChange }) => ( - question 08 + question 07 - What is your (expected) graduation year? + What is your current academic year? - {errors?.graduation && {errors?.graduation}} + {errors?.academicYear && {errors?.academicYear}} onChange({ - graduation: inputValue.value, + academicYear: inputValue.value, }) } - isValid={!errors?.graduation} - customRef={refs['graduationRef']} + isValid={!errors?.academicYear} + customRef={refs['academicYearRef']} /> - question 09 + question 08 - What is your current academic year? + What is your (expected) graduation year? - {errors?.academicYear && {errors?.academicYear}} + {errors?.graduation && {errors?.graduation}} onChange({ - academicYear: inputValue.value, + graduation: inputValue.value, }) } - isValid={!errors?.academicYear} - customRef={refs['academicYearRef']} + isValid={!errors?.graduation} + customRef={refs['graduationRef']} /> - question 10 + question 09 What is your country of residence? @@ -641,7 +626,7 @@ export default ({ refs, errors, formInputs, onChange }) => ( {errors?.countryOfResidence && {errors?.countryOfResidence}} @@ -656,11 +641,15 @@ export default ({ refs, errors, formInputs, onChange }) => ( - question 11 + question 10 Dietary restrictions +

+ Please answer to the best of your abilities so we are able to accommodate your needs! Note + that we may be unable to provide accommodations if you do not answer this accurately. +

{errors?.dietaryRestriction && {errors?.dietaryRestriction}} {formInputs && applyCustomSort( @@ -696,7 +685,7 @@ export default ({ refs, errors, formInputs, onChange }) => ( )}
- + {/* question 12 Will you be 19 years of age or older by January 20th, 2024? @@ -716,21 +705,13 @@ export default ({ refs, errors, formInputs, onChange }) => ( checked={formInputs.willBeAgeOfMajority === false} onChange={() => onChange({ willBeAgeOfMajority: false })} /> - + */} - Optional Questions -

- The following questions are completely optional and do not affect your application as a - hacker. -

-
- - {/* Removed as of nwHacks 2024 */} - {/* - question 13 + question 11 Do you identify as part of an underrepresented gender in the technology industry? + {errors?.identifyAsUnderrepresented && ( {errors?.identifyAsUnderrepresented} @@ -752,10 +733,18 @@ export default ({ refs, errors, formInputs, onChange }) => ( isValid={!errors?.identifyAsUnderrepresented} customRef={refs['identifyAsUnderrepresentedRef']} /> - */} +
- question 13 + Optional Questions +

+ The following questions are completely optional and do not affect your application as a + hacker. +

+
+ + + question 12 What are your pronouns? {/* {errors?.pronouns && {errors?.pronouns}} */} {formInputs && @@ -792,8 +781,8 @@ export default ({ refs, errors, formInputs, onChange }) => ( - question 14 - What gender do you identify as? + question 13 + What is your gender identity? {/* {errors?.gender && {errors?.gender}} */} ( )} + + question 14 + Do you have trans experience? + onChange({ haveTransExperience: false })} + /> + + + {/* + question 14 + + {formInputs.educationLevel === 'high school' + ? 'What do you plan on studying?' + : 'What is your current or intended major?'} + +

Enter your intended/current major, or unknown

+ {errors?.major && {errors?.major}} + `${inputValue}`} + label={formInputs.major} + value={creatableDropdownValue(majors, 'label', formInputs.major)} + onChange={e => + onChange({ + major: e.label, + }) + } + emptySearchDefaultOption="Start typing to search" + canCreateNewOption + isValid={true} + customRef={refs['majorRef']} + /> +
*/} + question 15 - What is your race/ethnicity? - {/* {errors?.ethnicity && {errors?.ethnicity}} */} + + {formInputs.educationLevel === 'high school' + ? 'What do you plan on studying?' + : 'What is your current or intended major?'} + {formInputs && - applyCustomSort(Object.entries(formInputs?.ethnicity), Object.keys(ETHNICITY_OPTIONS)).map( + applyCustomSort(Object.entries(formInputs?.major), Object.keys(MAJOR_OPTIONS)).map( ([key, val]) => ( + onChange({ + race: { ...formInputs.race, [key]: !val }, + }) + } + customRef={refs['raceRef']} + /> + ) + )} +
+ {formInputs?.race?.other && ( + + onChange({ + otherRace: e.target.value, + }) + } + /> + )} +
+ + + question 17 + Do you identify as Indigenous/First Nations? + + onChange({ + indigenousIdentification: e.value, + }) + } + isValid={true} + customRef={refs['indigenousIdentificationRef']} + /> + {formInputs.indigenousIdentification === 'yes' && ( + + onChange({ + specifiedIndigenousIdentification: e.target.value, + }) + } + /> + )} + + + + question 18 + What is your cultural background? + {formInputs && + applyCustomSort( + Object.entries(formInputs?.culturalBackground), + Object.keys(CULTURAL_BG_OPTIONS) + ).map(([key, val]) => ( + ( checked={formInputs.isAuthorizedToWorkInCanada === false} onChange={() => onChange({ isAuthorizedToWorkInCanada: false })} /> + */} + + + question 19 + What is your Canadian status? +

+ Note: this does not affect your application and is only collected for potential employers at + the event.{' '} +

+ + onChange({ + canadianStatus: inputValue.value, + }) + } + isValid={true} + customRef={refs['canadianStatusRef']} + /> + {formInputs.canadianStatus === 'other' && ( + + onChange({ + otherCanadianStatus: e.target.value, + }) + } + /> + )} +
+ + + question 20 + Do you have any visible or invisible disabilities? + + onChange({ + disability: val, + }) + } + customRef={refs['disabilityRef']} + /> ) diff --git a/src/components/ApplicationForm/HackathonInfo.js b/src/components/ApplicationForm/HackathonInfo.js index c5bf48e6..2143a8d1 100644 --- a/src/components/ApplicationForm/HackathonInfo.js +++ b/src/components/ApplicationForm/HackathonInfo.js @@ -7,25 +7,46 @@ export default () => { <> - Western Canada’s largest hackathon is here! {''} - - 🎉 - + nwPlus is proud to present cmd-f 2024 - Western Canada's largest hackathon celebrating + underrepresented genders in tech.

- Join us on January 20-21, 2024, for a thrilling 24-hour hackathon of innovation and - collaboration. Immerse yourself in a dynamic atmosphere with engaging workshops and - events, and seize the chance to showcase your project live in front of a distinguished - panel of judges and a vibrant community of hackers from across North America. Apply now - and explore the exciting opportunities that await you at nwHacks 2024!{' '} - - 🚀 + We are beyond excited to host the 6th iteration of our hackathon on March 9-10, 2024!  + cmd-f is a hackathon focused on addressing gender inequality in technology. Our main + purpose is to create a safe and dedicated space for gender minorities to hack together. + We’re trying to create access for people who have historically been excluded. We encourage + participation from women, trans, non-binary, Two-Spirit and gender diverse people. Thus, + cmd-f is only open to individuals who identify as an underrepresented gender in + technology. Please make sure your participation in this event is aligned with the + intentions of the event. We also ask all participants who attend to trust that everyone + attending is meant to be here. +

+

+ + 🌱  + + Time: March 9-10, 2024  +

+

+ + 🌱  + Location: Life Sciences Institute, UBC +

+

+ Hacker application deadline: February 22, 2024 +

+

+ If you have any questions, feel free to reach out to the team at{' '} + + cmd-f@nwplus.io + + !

Learn more at{' '} - - https://nwhacks.io + + cmd-f.nwplus.io !

diff --git a/src/components/ApplicationForm/Questionnaire.js b/src/components/ApplicationForm/Questionnaire.js index f7d1b1ac..b5c2b211 100644 --- a/src/components/ApplicationForm/Questionnaire.js +++ b/src/components/ApplicationForm/Questionnaire.js @@ -1,17 +1,15 @@ import React from 'react' -import styled from 'styled-components' -import { Dropdown, Select, TextInput } from '../../components/Input' +import { Select, TextInput } from '../../components/Input' import { ErrorMessage, QuestionHeading, ErrorSpan as Required } from '../../components/Typography' import { copyText } from '../../utility/Constants' -import { findElement } from '../../utility/utilities' import { CenteredH1 } from '../Typography' import { FormSpacing, SubHeading } from './' -const StyledDropdown = styled(Dropdown)` - .react-select__control { - margin: 0 0 1em; - } -` +// const StyledDropdown = styled(Dropdown)` +// .react-select__control { +// margin: 0 0 1em; +// } +// ` // const StyledTextInput = styled(TextInput)` // margin: 0.5em 1em 1em 0; @@ -25,7 +23,7 @@ export const options = [ { value: '4', label: 'Word of mouth' }, { value: '5', label: 'Club newsletter' }, { value: '6', label: 'Faculty newsletter' }, - { value: '7', label: 'Professor/in class' }, + { value: '7', label: 'Professors/In Class' }, { value: '8', label: 'Other' }, ] @@ -42,13 +40,14 @@ export default ({ errors, formInputs, onChange }) => {
- Question 23 + Question 29 How did you hear about {copyText.hackathonName}? {errors?.engagementSource && {errors?.resume}} - { }) } isValid + /> */} + + + onChange({ + ...formInputs, + engagementSource: { + ...formInputs.engagementSource, + MLH: !formInputs.engagementSource.MLH, + }, + }) + } + /> + + onChange({ + ...formInputs, + engagementSource: { + ...formInputs.engagementSource, + facebook: !formInputs.engagementSource.facebook, + }, + }) + } + /> + + onChange({ + ...formInputs, + engagementSource: { + ...formInputs.engagementSource, + website: !formInputs.engagementSource.website, + }, + }) + } + /> + + onChange({ + ...formInputs, + engagementSource: { + ...formInputs.engagementSource, + nwPlusNewsletter: !formInputs.engagementSource.nwPlusNewsletter, + }, + }) + } + /> + + onChange({ + ...formInputs, + engagementSource: { + ...formInputs.engagementSource, + professorInClass: !formInputs.engagementSource.professorInClass, + }, + }) + } + /> + + onChange({ + ...formInputs, + eventsAttended: { + ...formInputs.eventsAttended, + nwHacks2024: !formInputs.eventsAttended.nwHacks2024, + }, + }) + } + /> onChange({ firstTimeHacker: true })} - customRef={refs['firstTimeHackerRef']} - /> -