11import "./styles/HomeView.css" ;
2- import { Outlet , useLocation , useNavigate , useParams } from "react-router-dom" ;
2+ import { useLocation , useNavigate , useParams } from "react-router-dom" ;
33import { useContext , useEffect , useState } from "react" ;
44import HomeViewHeader from "./HomeViewHeader" ;
55import HomeViewFooter from "./HomeViewFooter" ;
@@ -20,18 +20,17 @@ const HomeView = ({}: Props) => {
2020 const param2_Opts = [ "portfolio" , "blog" , "introduction" , "intro" ] ;
2121 const param3_Opts = [ "gamedev" , "webdev" ] ;
2222 const param4_Opts = AppConfig . projectURL_Params ;
23- // useStates for Interfacing with URL Params
2423 const [ param1 , setParam1 ] = useState < string > ( "" ) ;
2524 const [ param2 , setParam2 ] = useState < string > ( "" ) ;
2625 const [ param3 , setParam3 ] = useState < string > ( "" ) ;
2726 const [ param4 , setParam4 ] = useState < string > ( "" ) ;
28- const [ allParamsObj , setAllParamsObj ] = useState < any > ( {
27+ const [ allParamsArray , setAllParamsArray ] = useState < string [ ] > ( [
2928 param1 ,
3029 param2 ,
3130 param3 ,
3231 param4 ,
33- } ) ;
34- const setParamsArray = [ setParam1 , setParam2 , setParam3 , setParam4 ] ;
32+ ] ) ;
33+ const paramStateSet = [ setParam1 , setParam2 , setParam3 , setParam4 ] ;
3534 // check if this is the landing page
3635 const [ isLanding , setIsLanding ] = useState < boolean > ( false ) ;
3736 // - - - - CONTEXT - - - -
@@ -42,102 +41,87 @@ const HomeView = ({}: Props) => {
4241 // - - - - - PROJECTS - - - - -
4342 const gameDevProjList = [ "deerfall" ] ;
4443 const webDevProjList = [ "mediamatchup" ] ;
45- const [ currentContent , setCurrentContent ] = useState < string | undefined > ( ) ;
4644
4745 // - - - - - FUNCTIONS - - - - -
48- const checkDefaultProject = ( ) => {
49- let isGameDev = param3 === "gamedev" ;
50- let isWebDev = param3 === "webdev" ;
51- let isGameDevProj = gameDevProjList . includes ( param4 ) ;
52- let isWebDevProj = webDevProjList . includes ( param4 ) ;
53- // checks location and
54- if ( isGameDev && ! isGameDevProj ) {
55- setParam4 ( gameDevProjList [ 0 ] ) ;
56- } else if ( isWebDev && ! isWebDevProj ) {
57- setParam4 ( webDevProjList [ 0 ] ) ;
58- }
59- } ;
60-
61- const checkProjectParams = ( ) => {
62- let construct_URL = `/${ param1 } /${ param2 } /${ param3 } /${ param4 } ` ;
63- // booleans
64- let projectIsCurrent_URL = param4 === project ;
65- let isSame_URL = construct_URL === location . pathname ;
66- let isIntroduction_URL = param2 === "introduction" ;
67-
68- if ( param4 && ! projectIsCurrent_URL && ! isSame_URL && ! isIntroduction_URL ) {
69- navigate ( construct_URL ) ;
70- }
71- } ;
7246
7347 const validateURL = ( ) => {
48+ // INITIAL SEGMENT VALIDATION
49+ let tempParams = allParamsArray ;
7450 let URLSegments = [ landingOrHome , category1 , gameOrWeb , project ] ;
7551 let paramArray = [ param1_Opts , param2_Opts , param3_Opts , param4_Opts ] ;
76- // verifies if this should be the landing page
52+ // checks for landing page
7753 if ( location . pathname === "/" ) {
54+ tempParams = [ "" ] ;
7855 navigate ( "/landing" ) ;
7956 setIsLanding ( true ) ;
80- } else if ( location . pathname === "/landing" ) {
57+ } else if ( landingOrHome === "landing" ) {
58+ tempParams = [ "/landing" ] ;
8159 setIsLanding ( true ) ;
60+ } else {
61+ setIsLanding ( false ) ;
8262 }
83- // compares segments of the URL against valid options
63+ // loops through each segment and validates it individually
8464 for ( let i = 0 ; i < URLSegments . length ; i ++ ) {
8565 if ( URLSegments [ i ] ) {
8666 let found = paramArray [ i ] . find ( ( item ) => item === URLSegments [ i ] ) ;
8767 if ( found === undefined ) {
8868 navigate ( "/404NotFound" ) ;
8969 } else {
90- setParamsArray [ i ] ( found ) ;
70+ // setParamsArray[i](found);
71+ paramStateSet [ i ] ( found ) ;
72+ tempParams [ i ] = found ;
9173 }
9274 }
9375 }
76+ // Sets Default Project if none is selected in this category
77+ let isGameDev = tempParams [ 2 ] === "gamedev" ;
78+ let isWebDev = tempParams [ 2 ] === "webdev" ;
79+ let isGameDevProj = gameDevProjList . includes ( tempParams [ 3 ] ) ;
80+ let isWebDevProj = webDevProjList . includes ( tempParams [ 3 ] ) ;
81+
82+ if ( isGameDev && ! isGameDevProj ) {
83+ setParam4 ( gameDevProjList [ 0 ] ) ;
84+ tempParams [ 3 ] = gameDevProjList [ 0 ] ;
85+ } else if ( isWebDev && ! isWebDevProj ) {
86+ setParam4 ( webDevProjList [ 0 ] ) ;
87+ tempParams [ 3 ] = webDevProjList [ 0 ] ;
88+ }
89+
90+ let construct_URL = `/${ tempParams [ 0 ] } /${ tempParams [ 1 ] } /${ tempParams [ 2 ] } /${ tempParams [ 3 ] } ` ;
91+ let isSame_URL = construct_URL === location . pathname ;
92+ let isIntroduction_URL = tempParams [ 1 ] === "introduction" ;
93+
94+ if ( tempParams [ 3 ] && ! isSame_URL && ! isIntroduction_URL ) {
95+ navigate ( construct_URL , { replace : true } ) ;
96+ }
9497 } ;
9598
9699 // - - - - - useEffects - - - - -
97100 useEffect ( ( ) => {
101+ validateURL ( ) ;
98102 if ( ! isLanding ) {
99- validateURL ( ) ;
100103 if ( hueRotation != AppConfig . hueAnimDuration_Slow ) {
101104 setHueDuration ( AppConfig . hueAnimDuration_Slow ) ;
102105 }
103106 }
104- console . log ( "- - - - - - - -" ) ;
105-
106- console . log ( `individual params: /${ param1 } /${ param2 } /${ param3 } /${ param4 } ` ) ;
107- console . log (
108- `params object: /${ allParamsObj . param1 } /${ allParamsObj . param2 } /${ allParamsObj . param3 } /${ allParamsObj . param4 } `
109- ) ;
110- console . log ( `current URL: ${ location . pathname } ` ) ;
111- console . log ( "- - - - - - - -" ) ;
112107 } , [ location ] ) ;
113108
109+ // Necessary to update props. Otherwise, props are always a step behind.
114110 useEffect ( ( ) => {
115- setAllParamsObj ( { param1, param2, param3, param4 } ) ;
111+ setAllParamsArray ( [ param1 , param2 , param3 , param4 ] ) ;
116112 } , [ param1 , param2 , param3 , param4 ] ) ;
117113
118- useEffect ( ( ) => {
119- checkDefaultProject ( ) ;
120- } , [ allParamsObj ] ) ;
121-
122114 // - - - - - JSX - - - - -
123115 return (
124116 < div className = 'HomeView' >
125- { isLanding ? (
126- < LandingPage
127- setIsLanding = { setIsLanding }
128- setParamsArray = { setParamsArray }
129- />
130- ) : (
131- ""
132- ) }
117+ { isLanding ? < LandingPage setIsLanding = { setIsLanding } /> : "" }
133118 < HomeViewHeader
134119 subtitle = { subtitle }
135120 subEmoji = { subEmoji }
136- allParams = { allParamsObj }
137- isLanding = { isLanding }
121+ allParams = { allParamsArray }
138122 />
139123 < HomeViewContent currentContent = { param4 } />
140- < HomeViewFooter allParams = { allParamsObj } />
124+ < HomeViewFooter allParams = { allParamsArray } />
141125 </ div >
142126 ) ;
143127} ;
0 commit comments