/* eslint-disable @typescript-eslint/no-unnecessary-condition */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable import/order */ /* eslint-disable eqeqeq */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable react-hooks/exhaustive-deps */ /* eslint-disable @typescript-eslint/no-floating-promises */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable new-cap */ /* eslint-disable @typescript-eslint/prefer-optional-chain */ /* eslint-disable @typescript-eslint/restrict-plus-operands */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call */ import type { Tag } from 'utopia-ui' import { AppShell, SideBar, Content, AuthProvider, Modal, LoginPage, SignupPage, Quests, RequestPasswordPage, SetNewPasswordPage, OverlayItemsIndexPage, Permissions, Tags, SelectUser, AttestationForm, MarketView, SVG, LoadingMapOverlay, } from 'utopia-ui' import { Route, Routes } from 'react-router-dom' import './App.css' import { lazy, Suspense, useEffect, useState } from 'react' import { assetsApi } from './api/assetsApi' import { itemsApi } from './api/itemsApi' import { layersApi } from './api/layersApi' import { mapApi } from './api/mapApi' import { permissionsApi } from './api/permissionsApi' import { userApi } from './api/userApi' import { ModalContent } from './ModalContent' import { Landingpage } from './pages/Landingpage' import MapContainer from './pages/MapContainer' import { getBottomRoutes, routes } from './routes/sidebar' function App() { const [permissionsApiInstance, setPermissionsApiInstance] = useState() const [tagsApi, setTagsApi] = useState>() const [mapApiInstance, setMapApiInstance] = useState() const [layersApiInstance, setLayersApiInstance] = useState() const [attestationApi, setAttestationApi] = useState>() const [map, setMap] = useState() const [layers, setLayers] = useState() const [layerPageRoutes, setLayerPageRoutes] = useState() const [loading, setLoading] = useState(true) const [embedded, setEmbedded] = useState(true) useEffect(() => { const params = new URLSearchParams(location.search) const embedded = params.get('embedded') embedded !== 'true' && setEmbedded(false) }, [location]) useEffect(() => { setPermissionsApiInstance(new permissionsApi()) setMapApiInstance(new mapApi(window.location.origin)) setAttestationApi(new itemsApi('attestations')) }, []) useEffect(() => { mapApiInstance && getMap() }, [mapApiInstance]) const getMap = async () => { const map = await mapApiInstance?.getItems() map && setMap(map) map && map != 'null' && setLayersApiInstance(new layersApi(map.id)) map && map != 'null' && map.own_tag_space ? setTagsApi(new itemsApi('tags', undefined, map.id)) : setTagsApi(new itemsApi('tags')) } useEffect(() => { layersApiInstance && getLayers() }, [layersApiInstance]) const getLayers = async () => { const layers = await layersApiInstance?.getItems() layers && setLayers(layers) setLayerPageRoutes( layers ?.filter((l: any) => l.listed) .map((l: any) => ({ path: '/' + l.name, // url icon: ( code.replace(/stroke=".*?"/g, 'stroke="currentColor"') } /> ), name: l.name, // name that appear in Sidebar })), ) } useEffect(() => { if (map && map.name) { document.title = map?.name && map.name let link: HTMLLinkElement = document.querySelector("link[rel~='icon']")! if (!link) { link = document.createElement('link') link.rel = 'icon' document.getElementsByTagName('head')[0].appendChild(link) } link.href = map?.logo && 'https://api.utopia-lab.org/assets/' + map.logo // Specify the path to your favicon } setLoading(false) }, [map]) const currentUrl = window.location.href const bottomRoutes = getBottomRoutes(currentUrl) const ProfileForm = lazy(() => import('utopia-ui/Profile').then((mod) => ({ default: mod.ProfileForm, })), ) const ProfileView = lazy(() => import('utopia-ui/Profile').then((mod) => ({ default: mod.ProfileView, })), ) const UserSettings = lazy(() => import('utopia-ui/Profile').then((mod) => ({ default: mod.UserSettings, })), ) if (map && layers) return (
{tagsApi && } }> } /> } /> } /> } /> }> } /> }> } /> }> } /> } /> } /> } /> {/* } /> */} } /> {layers.map((l: any) => ( } /> ))}
) else if (map == 'null' && !loading) return (

This map does not exist

) else return (

) } export default App