Compare commits
5 Commits
c057ce5084
...
a873da8ef5
| Author | SHA1 | Date | |
|---|---|---|---|
| a873da8ef5 | |||
| 5014c97b4d | |||
| e374456588 | |||
| ee3e111e9b | |||
| a8178269c2 |
154
README.md
154
README.md
@@ -1,69 +1,107 @@
|
|||||||
# React + TypeScript + Vite
|
# Mav Mobile UI
|
||||||
|
|
||||||
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
This is a React-based web application built with Vite (react and typescript).
|
||||||
|
|
||||||
Currently, two official plugins are available:
|
## Getting started
|
||||||
|
|
||||||
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
|
### Prerequisites
|
||||||
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
|
|
||||||
|
|
||||||
## Expanding the ESLint configuration
|
- Node.js (v18 or higher recommended)
|
||||||
|
- Yarn (v1.22+) (https://yarnpkg.com/)
|
||||||
|
|
||||||
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
|
### Installation
|
||||||
|
|
||||||
```js
|
```bash
|
||||||
export default tseslint.config([
|
git clone https://mavportal.com/TobaOjo/Mav-Mobile-UI.git
|
||||||
globalIgnores(['dist']),
|
cd Mav-Mobile-UI
|
||||||
{
|
yarn install
|
||||||
files: ['**/*.{ts,tsx}'],
|
|
||||||
extends: [
|
|
||||||
// Other configs...
|
|
||||||
|
|
||||||
// Remove tseslint.configs.recommended and replace with this
|
|
||||||
...tseslint.configs.recommendedTypeChecked,
|
|
||||||
// Alternatively, use this for stricter rules
|
|
||||||
...tseslint.configs.strictTypeChecked,
|
|
||||||
// Optionally, add this for stylistic rules
|
|
||||||
...tseslint.configs.stylisticTypeChecked,
|
|
||||||
|
|
||||||
// Other configs...
|
|
||||||
],
|
|
||||||
languageOptions: {
|
|
||||||
parserOptions: {
|
|
||||||
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
||||||
tsconfigRootDir: import.meta.dirname,
|
|
||||||
},
|
|
||||||
// other options...
|
|
||||||
},
|
|
||||||
},
|
|
||||||
])
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
|
### Running Locally
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
|
The app will be available at `http://localhost:5173`.
|
||||||
|
|
||||||
|
To run on locally on other devices
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev --host
|
||||||
|
```
|
||||||
|
|
||||||
|
The app will be available at the exposed addresses to access e.g. http://1xx.xxx.x.xxx:<PORT>/Mobile
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
- **React** – UI library
|
||||||
|
- **Vite** – Build tool
|
||||||
|
- **Yarn** – Package manager
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Create a `.env` file to access the Mav Mobile box in unit 5 for or for any environment-specific settings:
|
||||||
|
|
||||||
|
```env
|
||||||
|
VITE_AGX_BOX_URL=http://1xx.xxx.xxx.xxx:<PORT>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
### Linting & Formatting
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lint
|
||||||
|
yarn format
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
(Currently not implemented – consider adding Jest or Vitest)
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
To build for production:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
- Navigate to your Mav-Mobile-UI folder
|
||||||
|
- Select the Dist folder
|
||||||
|
- Compress to (ZIP)
|
||||||
|
- Log into box on Moba using Session > SSH and putting IP in Remote Host.
|
||||||
|
- Creds are mav:mav
|
||||||
|
- Drag and drop dist.zip into file explorer menu on left hand side (has to be named dist.zip exactly).
|
||||||
|
- Run command
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo ./integrate-web-ui.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nano web-static/index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
- add the following between the lines </body> & </html>
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// eslint.config.js
|
<foot>
|
||||||
import reactX from 'eslint-plugin-react-x'
|
<script>
|
||||||
import reactDom from 'eslint-plugin-react-dom'
|
if (window.location.pathname !== "/Mobile") {
|
||||||
|
window.location.replace(window.location.origin + "/Mobile");
|
||||||
export default tseslint.config([
|
}
|
||||||
globalIgnores(['dist']),
|
</script>
|
||||||
{
|
</foot>
|
||||||
files: ['**/*.{ts,tsx}'],
|
|
||||||
extends: [
|
|
||||||
// Other configs...
|
|
||||||
// Enable lint rules for React
|
|
||||||
reactX.configs['recommended-typescript'],
|
|
||||||
// Enable lint rules for React DOM
|
|
||||||
reactDom.configs.recommended,
|
|
||||||
],
|
|
||||||
languageOptions: {
|
|
||||||
parserOptions: {
|
|
||||||
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
||||||
tsconfigRootDir: import.meta.dirname,
|
|
||||||
},
|
|
||||||
// other options...
|
|
||||||
},
|
|
||||||
},
|
|
||||||
])
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
It should come back up all working
|
||||||
|
|||||||
@@ -160,12 +160,13 @@ const SightingModal = ({ isSightingModalOpen, handleClose, sighting, onDelete }:
|
|||||||
<dd className="font-medium text-2xl">{sighting?.seenCount ?? "-"}</dd>
|
<dd className="font-medium text-2xl">{sighting?.seenCount ?? "-"}</dd>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{sighting?.make && (
|
{sighting?.make ||
|
||||||
|
(sighting?.make.trim() && (
|
||||||
<div>
|
<div>
|
||||||
<dt className="text-gray-300">Make</dt>
|
<dt className="text-gray-300">Make</dt>
|
||||||
<dd className="font-medium text-2xl">{sighting?.make ?? "-"}</dd>
|
<dd className="font-medium text-2xl">{sighting?.make ?? "-"}</dd>
|
||||||
</div>
|
</div>
|
||||||
)}
|
))}
|
||||||
{sighting?.model ||
|
{sighting?.model ||
|
||||||
(!sighting?.model.trim() && (
|
(!sighting?.model.trim() && (
|
||||||
<div>
|
<div>
|
||||||
@@ -173,12 +174,13 @@ const SightingModal = ({ isSightingModalOpen, handleClose, sighting, onDelete }:
|
|||||||
<dd className="font-medium text-2xl">{sighting?.model ?? "-"}</dd>
|
<dd className="font-medium text-2xl">{sighting?.model ?? "-"}</dd>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
{sighting?.color && (
|
{sighting?.color ||
|
||||||
|
(!sighting?.color.trim() && (
|
||||||
<div className="sm:col-span-2">
|
<div className="sm:col-span-2">
|
||||||
<dt className="text-gray-300">Colour</dt>
|
<dt className="text-gray-300">Colour</dt>
|
||||||
<dd className="font-medium text-2xl">{sighting?.color ?? "-"}</dd>
|
<dd className="font-medium text-2xl">{sighting?.color ?? "-"}</dd>
|
||||||
</div>
|
</div>
|
||||||
)}
|
))}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<dt className="text-gray-300">Time</dt>
|
<dt className="text-gray-300">Time</dt>
|
||||||
|
|||||||
Reference in New Issue
Block a user