From bf1a93418e7253ca6c5e7cf05ea518690c5bc71f Mon Sep 17 00:00:00 2001 From: Alec LaLonde Date: Sun, 7 Feb 2021 14:30:02 -0700 Subject: [PATCH] Added separate pages for each step in the setup flow --- packages/web/components/LoginButton.tsx | 12 +-- .../components/Setup/SetupAvailability.tsx | 14 ++- .../web/components/Setup/SetupMemberships.tsx | 25 +++--- .../components/Setup/SetupPersonalityType.tsx | 17 ++-- .../web/components/Setup/SetupPlayerType.tsx | 19 ++-- .../web/components/Setup/SetupProfile.tsx | 78 +--------------- packages/web/components/Setup/SetupSkills.tsx | 20 +++-- .../web/components/Setup/SetupTimeZone.tsx | 11 ++- .../web/components/Setup/SetupUsername.tsx | 11 ++- packages/web/contexts/SetupContext.tsx | 90 ++----------------- packages/web/pages/profile/setup.tsx | 37 -------- .../web/pages/profile/setup/availability.tsx | 28 ++++++ .../web/pages/profile/setup/memberships.tsx | 29 ++++++ .../pages/profile/setup/personalityType.tsx | 47 ++++++++++ .../web/pages/profile/setup/playerType.tsx | 47 ++++++++++ packages/web/pages/profile/setup/skills.tsx | 57 ++++++++++++ packages/web/pages/profile/setup/timeZone.tsx | 28 ++++++ packages/web/pages/profile/setup/username.tsx | 33 +++++++ packages/web/utils/setupOptions.tsx | 27 +++--- 19 files changed, 369 insertions(+), 261 deletions(-) delete mode 100644 packages/web/pages/profile/setup.tsx create mode 100644 packages/web/pages/profile/setup/availability.tsx create mode 100644 packages/web/pages/profile/setup/memberships.tsx create mode 100644 packages/web/pages/profile/setup/personalityType.tsx create mode 100644 packages/web/pages/profile/setup/playerType.tsx create mode 100644 packages/web/pages/profile/setup/skills.tsx create mode 100644 packages/web/pages/profile/setup/timeZone.tsx create mode 100644 packages/web/pages/profile/setup/username.tsx diff --git a/packages/web/components/LoginButton.tsx b/packages/web/components/LoginButton.tsx index 2e00fd1e..c2cfd46a 100644 --- a/packages/web/components/LoginButton.tsx +++ b/packages/web/components/LoginButton.tsx @@ -12,12 +12,13 @@ import { MetaLink } from 'components/Link'; import { Web3Context } from 'contexts/Web3Context'; import React, { useCallback, useContext } from 'react'; -import { useUser } from '../lib/hooks'; +import { useUser, useWeb3 } from '../lib/hooks'; import { getPlayerImage, getPlayerName } from '../utils/playerHelpers'; export const LoginButton: React.FC = () => { const { connectWeb3, disconnect, isConnected } = useContext(Web3Context); + const { address } = useWeb3(); const { user, fetching } = useUser(); const handleLoginClick = useCallback(async () => { @@ -29,6 +30,9 @@ export const LoginButton: React.FC = () => { return ; } if (!user?.player) return null; + + const hasEditedProfile = user.username && user.username !== address; + return ( { {user.player ? getPlayerName(user.player) : 'Unknown'} - + diff --git a/packages/web/components/Setup/SetupAvailability.tsx b/packages/web/components/Setup/SetupAvailability.tsx index 0b3f1001..1fbd20b9 100644 --- a/packages/web/components/Setup/SetupAvailability.tsx +++ b/packages/web/components/Setup/SetupAvailability.tsx @@ -14,13 +14,19 @@ import { useUpdateProfileMutation } from 'graphql/autogen/types'; import { useUser } from 'lib/hooks'; import React, { useEffect, useState } from 'react'; -export const SetupAvailability: React.FC = () => { +export type SetupAvailabilityProps = { + availability: string; + setAvailability: React.Dispatch>; +} + +export const SetupAvailability: React.FC = ({ + availability, setAvailability +}) => { const { onNextPress, - nextButtonLabel, - availability, - setAvailability, + nextButtonLabel } = useSetupFlow(); + const [invalid, setInvalid] = useState(false); const { user } = useUser({ redirectTo: '/' }); const toast = useToast(); diff --git a/packages/web/components/Setup/SetupMemberships.tsx b/packages/web/components/Setup/SetupMemberships.tsx index 1b74d485..ca447753 100644 --- a/packages/web/components/Setup/SetupMemberships.tsx +++ b/packages/web/components/Setup/SetupMemberships.tsx @@ -8,24 +8,25 @@ import { } from '@metafam/ds'; import { FlexContainer } from 'components/Container'; import { useSetupFlow } from 'contexts/SetupContext'; -import { getMemberships } from 'graphql/getMemberships'; -import React, { useEffect } from 'react'; +import { Membership } from 'graphql/types'; +import React from 'react'; import { useWeb3 } from '../../lib/hooks'; -export const SetupMemberships: React.FC = () => { - const { address, isConnected } = useWeb3(); +export type SetupMembershipsProps = { + memberships: Array | null | undefined; + setMemberships: React.Dispatch< + React.SetStateAction | null | undefined> + >; +} + +export const SetupMemberships: React.FC = ({memberships}) => { + const { isConnected } = useWeb3(); const { onNextPress, - nextButtonLabel, - memberships, - setMemberships, + nextButtonLabel } = useSetupFlow(); - useEffect(() => { - getMemberships(address).then((data) => { - setMemberships(data); - }); - }, [address, setMemberships]); + return ( diff --git a/packages/web/components/Setup/SetupPersonalityType.tsx b/packages/web/components/Setup/SetupPersonalityType.tsx index 33610be5..da4f7c65 100644 --- a/packages/web/components/Setup/SetupPersonalityType.tsx +++ b/packages/web/components/Setup/SetupPersonalityType.tsx @@ -15,13 +15,20 @@ import { PersonalityType } from 'graphql/types'; import { useUser } from 'lib/hooks'; import React from 'react'; -export const SetupPersonalityType: React.FC = () => { +export type SetupPersonalityTypeProps = { + personalityTypeChoices: Array; + personalityType: PersonalityType | undefined; + setPersonalityType: React.Dispatch< + React.SetStateAction + >; +} + +export const SetupPersonalityType: React.FC = ({ + personalityTypeChoices, personalityType, setPersonalityType +}) => { const { onNextPress, nextButtonLabel, - personalityTypes, - personalityType, - setPersonalityType, } = useSetupFlow(); const { user } = useUser({ redirectTo: '/' }); const toast = useToast(); @@ -65,7 +72,7 @@ export const SetupPersonalityType: React.FC = () => { - {personalityTypes.map((p: PersonalityType) => ( + {personalityTypeChoices.map((p: PersonalityType) => ( { +export type SetupPlayerTypeProps = { + playerTypeChoices: Array; + playerType: Player_Type | undefined; + setPlayerType: React.Dispatch>; +} + +export const SetupPlayerType: React.FC = ({ + playerTypeChoices, playerType, setPlayerType +}) => { const { onNextPress, - nextButtonLabel, - playerTypes, - playerType, - setPlayerType + nextButtonLabel } = useSetupFlow(); const { user } = useUser({ redirectTo: '/' }); const toast = useToast(); @@ -59,7 +64,7 @@ export const SetupPlayerType: React.FC = () => { that suits you best. - {playerTypes.map((p) => ( + {playerTypeChoices.map((p) => ( { +export const SetupProfile: React.FC = ({children}) => { const { step, - screen, - numTotalSteps, - options, - username, - setUsername, - personalityType, - setPersonalityType, - playerType, - setPlayerType, - availability, - setAvailability, - timeZone, - setTimeZone, - skills, - setSkills, + numTotalSteps } = useSetupFlow(); - const { user } = useUser({ redirectTo: '/' }); - const { address } = useWeb3(); - useEffect(() => { - if (user?.player) { - const {player} = user; - if ( - player.username && - player.username.toLowerCase() !== address?.toLowerCase() && - !username - ) { - setUsername(player.username); - } - if (player.availability_hours && !availability) { - setAvailability(player.availability_hours.toString()); - } - if (player.EnneagramType && !personalityType) { - setPersonalityType(PersonalityTypes[player.EnneagramType.name]); - } - if (player.playerType && !playerType) { - setPlayerType(player.playerType); - } - if ( - player.Player_Skills && - player.Player_Skills.length > 0 && - skills.length === 0 - ) { - setSkills( - player.Player_Skills.map((s) => ({ - value: s.Skill.id, - label: s.Skill.name, - ...s.Skill, - })), - ); - } - if (player.timezone && !timeZone) { - setTimeZone(player.timezone); - } - } - }, [ - user, - address, - username, - setUsername, - personalityType, - setPersonalityType, - playerType, - setPlayerType, - availability, - setAvailability, - timeZone, - setTimeZone, - skills, - setSkills, - ]); return ( {(step + 1) % numTotalSteps !== 0 && } - {options[step].screens[screen].component} + {children} ); diff --git a/packages/web/components/Setup/SetupSkills.tsx b/packages/web/components/Setup/SetupSkills.tsx index 5dede6f8..621d1d30 100644 --- a/packages/web/components/Setup/SetupSkills.tsx +++ b/packages/web/components/Setup/SetupSkills.tsx @@ -12,13 +12,20 @@ import { SkillCategory_Enum, useUpdatePlayerSkillsMutation } from 'graphql/autog import { SkillColors } from 'graphql/types'; import { useUser } from 'lib/hooks'; import React from 'react'; -import { SkillOption } from 'utils/skillHelpers'; +import { CategoryOption, SkillOption } from 'utils/skillHelpers'; -export const SetupSkills: React.FC = () => { +export type SetupSkillsProps = { + skillChoices: Array; + skills: Array; + setSkills: React.Dispatch< + React.SetStateAction> + >; +} + +export const SetupSkills: React.FC = ({ + skillChoices, skills, setSkills, +}) => { const { - skillsList, - skills, - setSkills, onNextPress, nextButtonLabel, } = useSetupFlow(); @@ -47,7 +54,6 @@ export const SetupSkills: React.FC = () => { onNextPress(); }; - const styles: typeof selectStyles = { ...selectStyles, multiValue: (s, { data }) => ({ @@ -81,7 +87,7 @@ export const SetupSkills: React.FC = () => { styles={styles} value={skills} onChange={(value) => setSkills(value as Array)} - options={skillsList} + options={skillChoices} autoFocus closeMenuOnSelect={false} placeholder="ADD YOUR SKILLS" diff --git a/packages/web/components/Setup/SetupTimeZone.tsx b/packages/web/components/Setup/SetupTimeZone.tsx index 335aca5d..5d690108 100644 --- a/packages/web/components/Setup/SetupTimeZone.tsx +++ b/packages/web/components/Setup/SetupTimeZone.tsx @@ -10,12 +10,15 @@ import { useUpdateProfileMutation } from 'graphql/autogen/types'; import { useUser } from 'lib/hooks'; import React from 'react'; -export const SetupTimeZone: React.FC = () => { +export type SetupTimezoneProps = { + timeZone: string; + setTimeZone: React.Dispatch>; +} + +export const SetupTimeZone: React.FC = ({timeZone, setTimeZone}) => { const { onNextPress, - nextButtonLabel, - timeZone, - setTimeZone + nextButtonLabel } = useSetupFlow(); const { user } = useUser({ redirectTo: '/' }); const toast = useToast(); diff --git a/packages/web/components/Setup/SetupUsername.tsx b/packages/web/components/Setup/SetupUsername.tsx index 885b790f..5a05d8fb 100644 --- a/packages/web/components/Setup/SetupUsername.tsx +++ b/packages/web/components/Setup/SetupUsername.tsx @@ -7,12 +7,15 @@ import React, { useEffect, useState } from 'react'; const USERNAME_REGEX = /^[a-zA-Z0-9](_(?!(\.|_))|\.(?!(_|\.))|[a-zA-Z0-9]){2,18}[a-zA-Z0-9]$/; -export const SetupUsername: React.FC = () => { +export type SetupUsernameProps = { + username: string; + setUsername: React.Dispatch>; +} + +export const SetupUsername: React.FC = ({username, setUsername}) => { const { onNextPress, - nextButtonLabel, - username, - setUsername, + nextButtonLabel } = useSetupFlow(); const [invalid, setInvalid] = useState(false); const { user } = useUser({ redirectTo: '/' }); diff --git a/packages/web/contexts/SetupContext.tsx b/packages/web/contexts/SetupContext.tsx index 90316854..168b895b 100644 --- a/packages/web/contexts/SetupContext.tsx +++ b/packages/web/contexts/SetupContext.tsx @@ -1,8 +1,5 @@ -import { Player_Type } from 'graphql/autogen/types'; -import { Membership, PersonalityType } from 'graphql/types'; import { useRouter } from 'next/router'; import React, { useCallback, useContext, useEffect, useState } from 'react'; -import { CategoryOption, SkillOption } from 'utils/skillHelpers'; type SetupOption = { label: string; @@ -11,7 +8,8 @@ type SetupOption = { }; screens: Array<{ label: string; - component: React.ReactNode; + component?: React.ReactNode; + slug?: string; }>; }; @@ -23,27 +21,6 @@ type SetupContextType = { onBackPress: () => void; nextButtonLabel: string; numTotalSteps: number; - skillsList: Array; - personalityTypes: Array; - playerTypes: Array; - username: string; - setUsername: React.Dispatch>; - skills: Array; - setSkills: React.Dispatch>>; - personalityType: PersonalityType | undefined; - setPersonalityType: React.Dispatch< - React.SetStateAction - >; - playerType: Player_Type | undefined; - setPlayerType: React.Dispatch>; - availability: string; - setAvailability: React.Dispatch>; - timeZone: string; - setTimeZone: React.Dispatch>; - memberships: Array | null | undefined; - setMemberships: React.Dispatch< - React.SetStateAction | null | undefined> - >; }; export const SetupContext = React.createContext({ @@ -54,38 +31,15 @@ export const SetupContext = React.createContext({ onBackPress: () => undefined, nextButtonLabel: 'Next Step', numTotalSteps: 0, - skillsList: [], - personalityTypes: [], - playerTypes: [], - username: '', - setUsername: () => undefined, - skills: [], - setSkills: () => undefined, - personalityType: undefined, - setPersonalityType: () => undefined, - playerType: undefined, - setPlayerType: () => undefined, - availability: '', - setAvailability: () => undefined, - timeZone: '', - setTimeZone: () => undefined, - memberships: undefined, - setMemberships: () => undefined, }); type Props = { options: Array; - skillsList: Array; - personalityTypes: Array; - playerTypes: Array; }; export const SetupContextProvider: React.FC = ({ children, - options, - skillsList, - personalityTypes, - playerTypes, + options }) => { const router = useRouter(); const [step, setStep] = useState(0); @@ -116,7 +70,8 @@ export const SetupContextProvider: React.FC = ({ } else { setScreen((screen + 1) % numScreens); } - }, [options, step, screen, setStep, setScreen, numTotalSteps]); + router.push(`/profile/setup/${options[step].screens[(screen + 1) % numScreens].slug}`); + }, [router, options, step, screen, setStep, setScreen, numTotalSteps]); const onBackPress = useCallback(() => { if (step <= 0 && screen <= 0) { @@ -132,16 +87,6 @@ export const SetupContextProvider: React.FC = ({ } }, [router, options, step, screen, setStep, setScreen, numTotalSteps]); - const [username, setUsername] = useState(''); - const [skills, setSkills] = useState>([]); - const [personalityType, setPersonalityType] = useState(); - const [playerType, setPlayerType] = useState(); - const [availability, setAvailability] = useState(''); - const [timeZone, setTimeZone] = useState(''); - const [memberships, setMemberships] = useState< - Array | null | undefined - >(); - return ( = ({ onNextPress, onBackPress, nextButtonLabel, - // data - skillsList, - personalityTypes, - playerTypes, - // username - username, - setUsername, - // skills - skills, - setSkills, - // personalityType - personalityType, - setPersonalityType, - // playerType - playerType, - setPlayerType, - // availability - availability, - setAvailability, - // time zone - timeZone, - setTimeZone, - // memberships - memberships, - setMemberships, }} > {children} diff --git a/packages/web/pages/profile/setup.tsx b/packages/web/pages/profile/setup.tsx deleted file mode 100644 index e4592879..00000000 --- a/packages/web/pages/profile/setup.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { SetupProfile } from 'components/Setup/SetupProfile'; -import { SetupContextProvider } from 'contexts/SetupContext'; -import { getPersonalityTypes } from 'graphql/getPersonalityTypes'; -import { getPlayerTypes } from 'graphql/getPlayerTypes'; -import { getSkills } from 'graphql/getSkills'; -import { InferGetStaticPropsType } from 'next'; -import React from 'react'; -import { options as setupOptions } from 'utils/setupOptions'; -import { parseSkills } from 'utils/skillHelpers'; - -export const getStaticProps = async () => { - const [skills, personalityTypes, playerTypes] = await Promise.all([ - getSkills(), - getPersonalityTypes(), - getPlayerTypes(), - ]); - const skillsList = parseSkills(skills); - - return { - props: { - skillsList, - personalityTypes, - playerTypes, - hideAppDrawer: true, - }, - }; -}; - -type Props = InferGetStaticPropsType; - -const ProfileSetup: React.FC = (props) => ( - - - -); - -export default ProfileSetup; diff --git a/packages/web/pages/profile/setup/availability.tsx b/packages/web/pages/profile/setup/availability.tsx new file mode 100644 index 00000000..62c061bc --- /dev/null +++ b/packages/web/pages/profile/setup/availability.tsx @@ -0,0 +1,28 @@ +import { SetupAvailability } from 'components/Setup/SetupAvailability'; +import { SetupProfile } from 'components/Setup/SetupProfile'; +import { SetupContextProvider } from 'contexts/SetupContext'; +import { useUser } from 'lib/hooks'; +import React, { useState } from 'react'; +import { options as setupOptions } from 'utils/setupOptions'; + +const AvailabilitySetup: React.FC = () => { + + const [availability, setAvailability] = useState(''); + const { user } = useUser({ redirectTo: '/' }); + + if (user?.player) { + const {player} = user; + if (player.availability_hours && !availability) { + setAvailability(player.availability_hours.toString()); + } + } + + return ( + + + + + + ); +}; +export default AvailabilitySetup; diff --git a/packages/web/pages/profile/setup/memberships.tsx b/packages/web/pages/profile/setup/memberships.tsx new file mode 100644 index 00000000..2a26b419 --- /dev/null +++ b/packages/web/pages/profile/setup/memberships.tsx @@ -0,0 +1,29 @@ +import { SetupMemberships } from 'components/Setup/SetupMemberships'; +import { SetupProfile } from 'components/Setup/SetupProfile'; +import { SetupContextProvider } from 'contexts/SetupContext'; +import { getMemberships } from 'graphql/getMemberships'; +import { Membership } from 'graphql/types'; +import { useWeb3 } from 'lib/hooks'; +import React, { useState } from 'react'; +import { options as setupOptions } from 'utils/setupOptions'; + +const MembershipsSetup: React.FC = () => { + + const [memberships, setMemberships] = useState< + Array | null | undefined + >(); + + const { address } = useWeb3(); + getMemberships(address).then((data) => { + setMemberships(data); + }); + + return ( + + + + + + ); +}; +export default MembershipsSetup; diff --git a/packages/web/pages/profile/setup/personalityType.tsx b/packages/web/pages/profile/setup/personalityType.tsx new file mode 100644 index 00000000..d554a16c --- /dev/null +++ b/packages/web/pages/profile/setup/personalityType.tsx @@ -0,0 +1,47 @@ +import { SetupPersonalityType } from 'components/Setup/SetupPersonalityType'; +import { SetupProfile } from 'components/Setup/SetupProfile'; +import { SetupContextProvider } from 'contexts/SetupContext'; +import { getPersonalityTypes } from 'graphql/getPersonalityTypes'; +import { PersonalityType, PersonalityTypes } from 'graphql/types'; +import { useUser } from 'lib/hooks'; +import { InferGetStaticPropsType } from 'next'; +import React, { useState } from 'react'; +import { options as setupOptions } from 'utils/setupOptions'; + +export const getStaticProps = async () => { + const personalityTypeChoices = await getPersonalityTypes(); + + return { + props: { + personalityTypeChoices + } + }; +}; + +type Props = InferGetStaticPropsType; + +const PersonalityTypeSetup: React.FC = (props) => { + + const {personalityTypeChoices} = props; + const [personalityType, setPersonalityType] = useState(); + const { user } = useUser({ redirectTo: '/' }); + + if (user?.player) { + const {player} = user; + if (player.EnneagramType && !personalityType) { + setPersonalityType(PersonalityTypes[player.EnneagramType.name]); + } + } + + return ( + + + + + + ); +}; +export default PersonalityTypeSetup; diff --git a/packages/web/pages/profile/setup/playerType.tsx b/packages/web/pages/profile/setup/playerType.tsx new file mode 100644 index 00000000..b211e007 --- /dev/null +++ b/packages/web/pages/profile/setup/playerType.tsx @@ -0,0 +1,47 @@ +import { SetupPlayerType } from 'components/Setup/SetupPlayerType'; +import { SetupProfile } from 'components/Setup/SetupProfile'; +import { SetupContextProvider } from 'contexts/SetupContext'; +import { Player_Type } from 'graphql/autogen/types'; +import { getPlayerTypes } from 'graphql/getPlayerTypes'; +import { useUser } from 'lib/hooks'; +import { InferGetStaticPropsType } from 'next'; +import React, { useState } from 'react'; +import { options as setupOptions } from 'utils/setupOptions'; + +export const getStaticProps = async () => { + const playerTypeChoices = await getPlayerTypes(); + + return { + props: { + hideAppDrawer: true, + playerTypeChoices + } + }; +}; + +type Props = InferGetStaticPropsType; + +const PlayerTypeSetup: React.FC = (props) => { + const {playerTypeChoices} = props; + const [playerType, setPlayerType] = useState(); + const { user } = useUser({ redirectTo: '/' }); + + if (user?.player) { + const {player} = user; + if (player.playerType && !playerType) { + setPlayerType(player.playerType); + } + } + + return ( + + + + + + ); +}; +export default PlayerTypeSetup; diff --git a/packages/web/pages/profile/setup/skills.tsx b/packages/web/pages/profile/setup/skills.tsx new file mode 100644 index 00000000..25e227db --- /dev/null +++ b/packages/web/pages/profile/setup/skills.tsx @@ -0,0 +1,57 @@ +import { SetupProfile } from 'components/Setup/SetupProfile'; +import { SetupSkills } from 'components/Setup/SetupSkills'; +import { SetupContextProvider } from 'contexts/SetupContext'; +import { getSkills } from 'graphql/getSkills'; +import { useUser } from 'lib/hooks'; +import { InferGetStaticPropsType } from 'next'; +import React, { useState } from 'react'; +import { options as setupOptions } from 'utils/setupOptions'; +import { parseSkills, SkillOption } from 'utils/skillHelpers'; + +export const getStaticProps = async () => { + const skills = await getSkills(); + const skillChoices = parseSkills(skills); + + return { + props: { + skillChoices + }, + }; +}; + +type Props = InferGetStaticPropsType; + +const SkillsSetup: React.FC = (props) => { + const {skillChoices} = props; + const [skills, setSkills] = useState>([]); + const { user } = useUser({ redirectTo: '/' }); + + if (user?.player) { + const {player} = user; + if ( + player.Player_Skills && + player.Player_Skills.length > 0 && + skills.length === 0 + ) { + setSkills( + player.Player_Skills.map((s) => ({ + value: s.Skill.id, + label: s.Skill.name, + ...s.Skill, + })), + ); + } + } + + return ( + + + + + + ); +}; +export default SkillsSetup; diff --git a/packages/web/pages/profile/setup/timeZone.tsx b/packages/web/pages/profile/setup/timeZone.tsx new file mode 100644 index 00000000..2bb096b8 --- /dev/null +++ b/packages/web/pages/profile/setup/timeZone.tsx @@ -0,0 +1,28 @@ +import { SetupProfile } from 'components/Setup/SetupProfile'; +import { SetupTimeZone } from 'components/Setup/SetupTimeZone'; +import { SetupContextProvider } from 'contexts/SetupContext'; +import { useUser } from 'lib/hooks'; +import React, { useState } from 'react'; +import { options as setupOptions } from 'utils/setupOptions'; + +const TimeZoneSetup: React.FC = () => { + + const [timeZone, setTimeZone] = useState(''); + const { user } = useUser({ redirectTo: '/' }); + + if (user?.player) { + const {player} = user; + if (player.timezone && !timeZone) { + setTimeZone(player.timezone); + } + } + + return ( + + + + + + ); +}; +export default TimeZoneSetup; diff --git a/packages/web/pages/profile/setup/username.tsx b/packages/web/pages/profile/setup/username.tsx new file mode 100644 index 00000000..74207078 --- /dev/null +++ b/packages/web/pages/profile/setup/username.tsx @@ -0,0 +1,33 @@ +import { SetupProfile } from 'components/Setup/SetupProfile'; +import { SetupUsername } from 'components/Setup/SetupUsername'; +import { SetupContextProvider } from 'contexts/SetupContext'; +import { useUser, useWeb3 } from 'lib/hooks'; +import React, { useState } from 'react'; +import { options as setupOptions } from 'utils/setupOptions'; + +const UsernameSetup: React.FC = () => { + + const [username, setUsername] = useState(''); + const { address } = useWeb3(); + const { user } = useUser({ redirectTo: '/' }); + + if (user?.player) { + const {player} = user; + if ( + player.username && + player.username.toLowerCase() !== address?.toLowerCase() && + !username + ) { + setUsername(player.username); + } + } + + return ( + + + + + + ); +}; +export default UsernameSetup; diff --git a/packages/web/utils/setupOptions.tsx b/packages/web/utils/setupOptions.tsx index d77198f5..3536228e 100644 --- a/packages/web/utils/setupOptions.tsx +++ b/packages/web/utils/setupOptions.tsx @@ -1,11 +1,4 @@ -import { SetupAvailability } from 'components/Setup/SetupAvailability'; import { SetupDone } from 'components/Setup/SetupDone'; -import { SetupMemberships } from 'components/Setup/SetupMemberships'; -import { SetupPersonalityType } from 'components/Setup/SetupPersonalityType'; -import { SetupPlayerType } from 'components/Setup/SetupPlayerType'; -import { SetupSkills } from 'components/Setup/SetupSkills'; -import { SetupTimeZone } from 'components/Setup/SetupTimeZone'; -import { SetupUsername } from 'components/Setup/SetupUsername'; import React from 'react'; export const options = [ @@ -15,41 +8,41 @@ export const options = [ screens: [ { label: 'Username', - component: , + slug: 'username' }, { label: 'Personality Type', - component: , + slug: 'personalityType' }, { label: 'Player Type', - component: , + slug: 'playerType', }, ], }, { - label: 'Portfolio', + label: 'Profile', title: { - base: 'Portfolio', - sm: '2. Portfolio', + base: 'Profile', + sm: '2. Profile', lg: '2. Professional Profile', }, screens: [ { label: 'Skills', - component: , + slug: 'skills' }, { label: 'Availability', - component: , + slug: 'availability', }, { label: 'Time Zone', - component: + slug: 'timeZone' }, { label: 'Memberships', - component: , + slug: 'memberships', }, ], },