diff --git a/.idea/frontend.iml b/.idea/frontend.iml
new file mode 100644
index 0000000..24643cc
--- /dev/null
+++ b/.idea/frontend.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f3d93d7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 369b867..4540371 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,27 +1,16 @@
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -34,29 +23,29 @@
-
+ {
+ "associatedIndex": 3
+}
- {
+ "keyToString": {
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "WebServerToolWindowFactoryState": "false",
+ "git-widget-placeholder": "dev",
+ "last_opened_file_path": "/home/user/Documents/fd_data-structures/pj/frontend",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
@@ -83,6 +72,8 @@
1700814200305
+
+
diff --git a/misc/icon.jpeg b/misc/icon.jpeg
new file mode 100644
index 0000000..75eacf5
Binary files /dev/null and b/misc/icon.jpeg differ
diff --git a/public/icon.jpeg b/public/icon.jpeg
new file mode 100644
index 0000000..c57c9e6
Binary files /dev/null and b/public/icon.jpeg differ
diff --git a/public/index.html b/public/index.html
index 4bc3b88..f966501 100644
--- a/public/index.html
+++ b/public/index.html
@@ -6,7 +6,7 @@
-
+
- React App
+ nanoMap
diff --git a/src/App.js b/src/App.js
index 53f3338..49550e5 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,18 +1,110 @@
-import React, { Component } from 'react';
-import logo from './logo.svg';
+import React, {Component, useState} from 'react';
+import {Transition} from 'react-transition-group';
import './App.css';
import UMap from "./UMap";
+import {
+ Alert,
+ Box,
+ CircularProgress,
+ DialogContent,
+ DialogTitle,
+ Modal,
+ ModalDialog,
+ Sheet,
+ Typography
+} from "@mui/joy";
+import {WebhookOutlined} from "@mui/icons-material";
+import {post} from "./Networking";
-class App extends Component {
- render() {
+export default function App() {
+ const [featureOpen, setFeatureOpen] = useState(true);
+ const [version, setVersion] = useState('');
+ const [intro, setIntro] = useState('');
+ const hs=setInterval(()=>{
+ post('handshake', []).then((response)=>{
+ const [version,intro]=response.split('@@');
+ setVersion(version);
+ setIntro(intro);
+ clearInterval(hs);
+ }).catch((e)=> {
+ console.error(e);
+ setVersion('');
+ });
+ }, 1000);
return (
-
+
+
+
+
+ {(state) => (
+ setFeatureOpen(false)}
+ slotProps={{
+ backdrop: {
+ sx: {
+ opacity: 0,
+ backdropFilter: 'none',
+ transition: `opacity 400ms, backdrop-filter 400ms`,
+ ...{
+ entering: {opacity: 1, backdropFilter: 'blur(8px)'},
+ entered: {opacity: 1, backdropFilter: 'blur(8px)'},
+ }[state],
+ },
+ },
+ }}
+ sx={{
+ visibility: state === 'exited' ? 'hidden' : 'visible',
+ zIndex: 'tooltip'
+ }}
+ >
+
+
+
+
+ }
+ sx={{alignItems: 'flex-start', gap: '1rem'}}
+ >
+
+ Still connecting...
+
+ nanoMap requires a valid backend to work. If it takes too long, please check
+ your connection or see our status page.
+
+
+
+
+
+
+ What's new in
+ nanoMap {version}
+
+
+
+
+
+ )}
+
+
+
);
- }
}
-
-export default App;
diff --git a/src/Networking.js b/src/Networking.js
index 6fc6802..c0c48e3 100644
--- a/src/Networking.js
+++ b/src/Networking.js
@@ -13,4 +13,4 @@ export function post(method,args) {
return response_data;
};
return ft();
-};
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/SimulateClick.js b/src/SimulateClick.js
index 21e2724..1674acd 100644
--- a/src/SimulateClick.js
+++ b/src/SimulateClick.js
@@ -1,12 +1,12 @@
import {Button, IconButton, ButtonGroup, Menu, MenuItem, Stack} from "@mui/joy";
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
import React from "react";
+import {Add} from "@mui/icons-material";
export default function SimulateClick() {
return (
-
-
+ }>Add
);
}
\ No newline at end of file
diff --git a/src/UMap.js b/src/UMap.js
index 8db9dc6..f7a3544 100644
--- a/src/UMap.js
+++ b/src/UMap.js
@@ -1,4 +1,5 @@
import React, {Component, useEffect, useRef, useState} from 'react';
+import * as L from 'leaflet';
import SearchIcon from '@mui/icons-material/Search';
import {MapContainer, TileLayer, Marker, Popup, useMap} from 'react-leaflet';
import {useMapEvents} from 'react-leaflet/hooks';
@@ -7,7 +8,6 @@ import {Autocomplete, CircularProgress, Sheet} from "@mui/joy";
import SimulateClick from "./SimulateClick";
const AppleParkLoc=[37.334835049999995,-122.01139165956805];
-
class Markers extends Component {
constructor(props) {
super(props);
@@ -16,12 +16,10 @@ class Markers extends Component {
render() {
const mks=this.state.markers.map((p, i) => (
- Generated
- by Markers()
+
));
const cmks=this.state.candMarkers.map((p, i) => (
- Generated
- by Markers()
+
));
return mks.concat(cmks);
}
@@ -71,7 +69,10 @@ function MapClickHandler({mks}) {
const lat = e.latlng.lat, lng = e.latlng.lng;
console.info(`Clicking on ${lat} ${lng}`);
mks.current.addMarker(lat, lng);
- post('click', [lat, lng]);
+ post('click', [lat, lng]).catch((e)=>{
+ console.error(e);
+ location.reload();
+ });
},
// TODO
locationfound: (location) => {