App.Root = function Root() {
const [page, setPage] = React.useState(null);
const [params, setParams] = React.useState({});
const [user, setUser] = React.useState(null);
const [showWelcome, setShowWelcome] = React.useState(false);
// Expose setUser globally so Nav can update after nickname change
window._setUser = setUser;
// Fetch user identity on mount
React.useEffect(() => {
App.API.get('user?fingerprint=' + App.fingerprint)
.then(data => {
setUser(data);
if (data.isNew) setShowWelcome(true);
})
.catch(() => {});
}, []);
React.useEffect(() => {
App.Router.addRoute('/', () => { setPage('dashboard'); setParams({}); });
App.Router.addRoute('/combos', () => { setPage('combo-library'); setParams({}); });
App.Router.addRoute('/cars', () => { setPage('cars'); setParams({}); });
App.Router.addRoute('/tracks', () => { setPage('tracks'); setParams({}); });
App.Router.addRoute('/create-combo', () => { setPage('create-combo'); setParams({}); });
App.Router.addRoute('/polls', () => { setPage('poll-list'); setParams({}); });
App.Router.addRoute('/create-poll', () => { setPage('create-poll'); setParams({}); });
App.Router.addRoute('/poll/:code', (p) => { setPage('vote-poll'); setParams(p); });
App.Router.addRoute('/results/:code', (p) => { setPage('poll-results'); setParams(p); });
App.Router.setNotFound(() => { setPage('not-found'); setParams({}); });
App.Router.resolve();
}, []);
let content;
switch (page) {
case 'dashboard': content =