diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..79f89e3 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,48 @@ +name: Deploy React + +on: + push: + branches: + - master + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + container: + image: node:20 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install deps + run: npm ci + + - name: Build + run: npm run build + + - name: Archive build + run: tar -czf build.tar.gz dist + + - name: Setup SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan 79.137.75.155 >> ~/.ssh/known_hosts + + - name: Upload + run: | + scp build.tar.gz deploy@79.137.75.155:/tmp/ + + - name: Deploy + run: | + ssh deploy@79.137.75.155 << 'EOF' + rm -rf /var/www/hotel-demo/assets + rm -rf /var/www/hotel-demo/index.html + + tar -xzf /tmp/build.tar.gz -C /var/www/hotel-demo + + sudo systemctl reload nginx + EOF \ No newline at end of file diff --git a/src/App.css b/src/App.css index 2f1b966..e6c8119 100644 --- a/src/App.css +++ b/src/App.css @@ -17,6 +17,8 @@ } + + .log-menu { position: fixed; top: 50px; diff --git a/src/App.jsx b/src/App.jsx index d5b1f06..93c3388 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -207,7 +207,7 @@ async function updatePassword(e) { return ( <> - @@ -251,7 +251,7 @@ return ( {loggedIn ? ( ) : ( - + )} ); diff --git a/src/components/MainApp.jsx b/src/components/MainApp.jsx index d2892a3..1d6441d 100644 --- a/src/components/MainApp.jsx +++ b/src/components/MainApp.jsx @@ -30,6 +30,7 @@ function MainApp() { const { rooms } = useHotel(); const { conversations } = useHotel(); const { users } = useHotel(); + const { items } = useHotel(); const [view, setView] = useState(VIEW.ROOMS) diff --git a/src/components/login.css b/src/components/login.css new file mode 100644 index 0000000..ae0e63d --- /dev/null +++ b/src/components/login.css @@ -0,0 +1,40 @@ +.loginBlock { + + width: 320px; + padding: 2rem; + background: var(--card); + border-radius: 8px ; + + display: flex; + flex-direction: column; + gap: 1.5rem; + +} + +.loginWrapper { + min-height: 100vh; + width: 100vw; + display: flex; + align-items: center; + justify-content: center; + +} + +.loginBlock form { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.loginBlock input, +.loginBlock button { + width: auto; + padding: 0.75rem ; + font-size: 1rem; +} + +.loginBlock > div { + display: flex; + gap: 1rem; + justify-content: space-between; +} diff --git a/src/components/login.jsx b/src/components/login.jsx index 2abef98..0e58e7a 100644 --- a/src/components/login.jsx +++ b/src/components/login.jsx @@ -1,6 +1,8 @@ import { API_BASE } from "../config"; import { useState } from "react"; +import "./login.css"; + export default function Login({ onLogin }) { const [username, setUsername] = useState(""); @@ -116,25 +118,31 @@ export default function Login({ onLogin }) { return ( <> -
- setUsername(e.target.value)} - /> - setPassword(e.target.value)} - /> - - {error &&

{error}

} -
-
- - +
+
+
+ setUsername(e.target.value)} + /> + setPassword(e.target.value)} + /> + + {error &&

{error}

} +
+ + +
+ + +
+