1
1
import "./styles/HomeView.css" ;
2
- import { Outlet , useLocation , useNavigate , useParams } from "react-router-dom" ;
2
+ import { useLocation , useNavigate , useParams } from "react-router-dom" ;
3
3
import { useContext , useEffect , useState } from "react" ;
4
4
import HomeViewHeader from "./HomeViewHeader" ;
5
5
import HomeViewFooter from "./HomeViewFooter" ;
@@ -20,18 +20,17 @@ const HomeView = ({}: Props) => {
20
20
const param2_Opts = [ "portfolio" , "blog" , "introduction" , "intro" ] ;
21
21
const param3_Opts = [ "gamedev" , "webdev" ] ;
22
22
const param4_Opts = AppConfig . projectURL_Params ;
23
- // useStates for Interfacing with URL Params
24
23
const [ param1 , setParam1 ] = useState < string > ( "" ) ;
25
24
const [ param2 , setParam2 ] = useState < string > ( "" ) ;
26
25
const [ param3 , setParam3 ] = useState < string > ( "" ) ;
27
26
const [ param4 , setParam4 ] = useState < string > ( "" ) ;
28
- const [ allParamsObj , setAllParamsObj ] = useState < any > ( {
27
+ const [ allParamsArray , setAllParamsArray ] = useState < string [ ] > ( [
29
28
param1 ,
30
29
param2 ,
31
30
param3 ,
32
31
param4 ,
33
- } ) ;
34
- const setParamsArray = [ setParam1 , setParam2 , setParam3 , setParam4 ] ;
32
+ ] ) ;
33
+ const paramStateSet = [ setParam1 , setParam2 , setParam3 , setParam4 ] ;
35
34
// check if this is the landing page
36
35
const [ isLanding , setIsLanding ] = useState < boolean > ( false ) ;
37
36
// - - - - CONTEXT - - - -
@@ -42,102 +41,87 @@ const HomeView = ({}: Props) => {
42
41
// - - - - - PROJECTS - - - - -
43
42
const gameDevProjList = [ "deerfall" ] ;
44
43
const webDevProjList = [ "mediamatchup" ] ;
45
- const [ currentContent , setCurrentContent ] = useState < string | undefined > ( ) ;
46
44
47
45
// - - - - - 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
- } ;
72
46
73
47
const validateURL = ( ) => {
48
+ // INITIAL SEGMENT VALIDATION
49
+ let tempParams = allParamsArray ;
74
50
let URLSegments = [ landingOrHome , category1 , gameOrWeb , project ] ;
75
51
let paramArray = [ param1_Opts , param2_Opts , param3_Opts , param4_Opts ] ;
76
- // verifies if this should be the landing page
52
+ // checks for landing page
77
53
if ( location . pathname === "/" ) {
54
+ tempParams = [ "" ] ;
78
55
navigate ( "/landing" ) ;
79
56
setIsLanding ( true ) ;
80
- } else if ( location . pathname === "/landing" ) {
57
+ } else if ( landingOrHome === "landing" ) {
58
+ tempParams = [ "/landing" ] ;
81
59
setIsLanding ( true ) ;
60
+ } else {
61
+ setIsLanding ( false ) ;
82
62
}
83
- // compares segments of the URL against valid options
63
+ // loops through each segment and validates it individually
84
64
for ( let i = 0 ; i < URLSegments . length ; i ++ ) {
85
65
if ( URLSegments [ i ] ) {
86
66
let found = paramArray [ i ] . find ( ( item ) => item === URLSegments [ i ] ) ;
87
67
if ( found === undefined ) {
88
68
navigate ( "/404NotFound" ) ;
89
69
} else {
90
- setParamsArray [ i ] ( found ) ;
70
+ // setParamsArray[i](found);
71
+ paramStateSet [ i ] ( found ) ;
72
+ tempParams [ i ] = found ;
91
73
}
92
74
}
93
75
}
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
+ }
94
97
} ;
95
98
96
99
// - - - - - useEffects - - - - -
97
100
useEffect ( ( ) => {
101
+ validateURL ( ) ;
98
102
if ( ! isLanding ) {
99
- validateURL ( ) ;
100
103
if ( hueRotation != AppConfig . hueAnimDuration_Slow ) {
101
104
setHueDuration ( AppConfig . hueAnimDuration_Slow ) ;
102
105
}
103
106
}
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 ( "- - - - - - - -" ) ;
112
107
} , [ location ] ) ;
113
108
109
+ // Necessary to update props. Otherwise, props are always a step behind.
114
110
useEffect ( ( ) => {
115
- setAllParamsObj ( { param1, param2, param3, param4 } ) ;
111
+ setAllParamsArray ( [ param1 , param2 , param3 , param4 ] ) ;
116
112
} , [ param1 , param2 , param3 , param4 ] ) ;
117
113
118
- useEffect ( ( ) => {
119
- checkDefaultProject ( ) ;
120
- } , [ allParamsObj ] ) ;
121
-
122
114
// - - - - - JSX - - - - -
123
115
return (
124
116
< div className = 'HomeView' >
125
- { isLanding ? (
126
- < LandingPage
127
- setIsLanding = { setIsLanding }
128
- setParamsArray = { setParamsArray }
129
- />
130
- ) : (
131
- ""
132
- ) }
117
+ { isLanding ? < LandingPage setIsLanding = { setIsLanding } /> : "" }
133
118
< HomeViewHeader
134
119
subtitle = { subtitle }
135
120
subEmoji = { subEmoji }
136
- allParams = { allParamsObj }
137
- isLanding = { isLanding }
121
+ allParams = { allParamsArray }
138
122
/>
139
123
< HomeViewContent currentContent = { param4 } />
140
- < HomeViewFooter allParams = { allParamsObj } />
124
+ < HomeViewFooter allParams = { allParamsArray } />
141
125
</ div >
142
126
) ;
143
127
} ;
0 commit comments