diff options
Diffstat (limited to 'frontend/src/pages/Maps.tsx')
| -rw-r--r-- | frontend/src/pages/Maps.tsx | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/frontend/src/pages/Maps.tsx b/frontend/src/pages/Maps.tsx index 707d865..5548650 100644 --- a/frontend/src/pages/Maps.tsx +++ b/frontend/src/pages/Maps.tsx | |||
| @@ -7,21 +7,24 @@ import Leaderboards from '../components/Leaderboards'; | |||
| 7 | import Discussions from '../components/Discussions'; | 7 | import Discussions from '../components/Discussions'; |
| 8 | import ModMenu from '../components/ModMenu'; | 8 | import ModMenu from '../components/ModMenu'; |
| 9 | import { MapDiscussions, MapLeaderboard, MapSummary } from '../types/Map'; | 9 | import { MapDiscussions, MapLeaderboard, MapSummary } from '../types/Map'; |
| 10 | import { UserProfile } from '../types/Profile'; | ||
| 10 | import { API } from '../api/Api'; | 11 | import { API } from '../api/Api'; |
| 11 | import "../css/Maps.css"; | 12 | import "../css/Maps.css"; |
| 13 | import Loading from '../components/Loading'; | ||
| 12 | 14 | ||
| 13 | interface MapProps { | 15 | interface MapProps { |
| 16 | profile?: UserProfile; | ||
| 14 | isModerator: boolean; | 17 | isModerator: boolean; |
| 18 | onUploadRun: (mapID: number) => void; | ||
| 15 | }; | 19 | }; |
| 16 | 20 | ||
| 17 | const Maps: React.FC<MapProps> = ({ isModerator }) => { | 21 | const Maps: React.FC<MapProps> = ({ profile, isModerator, onUploadRun }) => { |
| 18 | 22 | ||
| 19 | const [selectedRun, setSelectedRun] = React.useState<number>(0); | 23 | const [selectedRun, setSelectedRun] = React.useState<number>(0); |
| 20 | 24 | ||
| 21 | const [mapSummaryData, setMapSummaryData] = React.useState<MapSummary | undefined>(undefined); | 25 | const [mapSummaryData, setMapSummaryData] = React.useState<MapSummary | undefined>(undefined); |
| 22 | const [mapLeaderboardData, setMapLeaderboardData] = React.useState<MapLeaderboard | undefined>(undefined); | 26 | const [mapLeaderboardData, setMapLeaderboardData] = React.useState<MapLeaderboard | undefined>(undefined); |
| 23 | const [mapDiscussionsData, setMapDiscussionsData] = React.useState<MapDiscussions | undefined>(undefined) | 27 | const [mapDiscussionsData, setMapDiscussionsData] = React.useState<MapDiscussions | undefined>(undefined); |
| 24 | |||
| 25 | 28 | ||
| 26 | const [navState, setNavState] = React.useState<number>(0); | 29 | const [navState, setNavState] = React.useState<number>(0); |
| 27 | 30 | ||
| @@ -51,8 +54,23 @@ const Maps: React.FC<MapProps> = ({ isModerator }) => { | |||
| 51 | }, []); | 54 | }, []); |
| 52 | 55 | ||
| 53 | if (!mapSummaryData) { | 56 | if (!mapSummaryData) { |
| 57 | // loading placeholder | ||
| 54 | return ( | 58 | return ( |
| 55 | <></> | 59 | <main> |
| 60 | <section id='section1' className='summary1'> | ||
| 61 | <div> | ||
| 62 | <Link to="/games"><button className='nav-button' style={{ borderRadius: "20px 20px 20px 20px" }}><i className='triangle'></i><span>Games List</span></button></Link> | ||
| 63 | </div> | ||
| 64 | </section> | ||
| 65 | |||
| 66 | <section id='section2' className='summary1'> | ||
| 67 | <button className='nav-button'><img src={PortalIcon} alt="" /><span>Summary</span></button> | ||
| 68 | <button className='nav-button'><img src={FlagIcon} alt="" /><span>Leaderboards</span></button> | ||
| 69 | <button className='nav-button'><img src={ChatIcon} alt="" /><span>Discussions</span></button> | ||
| 70 | </section> | ||
| 71 | |||
| 72 | <Loading /> | ||
| 73 | </main> | ||
| 56 | ); | 74 | ); |
| 57 | } | 75 | } |
| 58 | 76 | ||
| @@ -66,12 +84,11 @@ const Maps: React.FC<MapProps> = ({ isModerator }) => { | |||
| 66 | <main> | 84 | <main> |
| 67 | <section id='section1' className='summary1'> | 85 | <section id='section1' className='summary1'> |
| 68 | <div> | 86 | <div> |
| 69 | <Link to="/games"><button className='nav-button' style={{ borderRadius: "20px 0px 0px 20px" }}><i className='triangle'></i><span>Games list</span></button></Link> | 87 | <Link to="/games"><button className='nav-button' style={{ borderRadius: "20px 0px 0px 20px" }}><i className='triangle'></i><span>Games List</span></button></Link> |
| 70 | <Link to={`/games/${!mapSummaryData.map.is_coop ? "1" : "2"}?chapter=${mapSummaryData.map.chapter_name}`}><button className='nav-button' style={{ borderRadius: "0px 20px 20px 0px", marginLeft: "2px" }}><i className='triangle'></i><span>{mapSummaryData.map.chapter_name}</span></button></Link> | 88 | <Link to={`/games/${!mapSummaryData.map.is_coop ? "1" : "2"}?chapter=${mapSummaryData.map.chapter_name.split(" ")[1]}`}><button className='nav-button' style={{ borderRadius: "0px 20px 20px 0px", marginLeft: "2px" }}><i className='triangle'></i><span>{mapSummaryData.map.chapter_name}</span></button></Link> |
| 71 | <br /><span><b>{mapSummaryData.map.map_name}</b></span> | 89 | <br /><span><b>{mapSummaryData.map.map_name}</b></span> |
| 90 | {profile && <button onClick={() => onUploadRun(mapSummaryData.map.id)}>Submit a Run</button>} | ||
| 72 | </div> | 91 | </div> |
| 73 | |||
| 74 | |||
| 75 | </section> | 92 | </section> |
| 76 | 93 | ||
| 77 | <section id='section2' className='summary1'> | 94 | <section id='section2' className='summary1'> |