Skip to content

Commit

Permalink
Merge pull request #7 from kaizerpwn/redesign/panel
Browse files Browse the repository at this point in the history
Redesign/panel
  • Loading branch information
kaizerpwn authored May 9, 2024
2 parents f111d81 + 6914cf8 commit cb950c8
Show file tree
Hide file tree
Showing 54 changed files with 3,565 additions and 2,666 deletions.
18 changes: 0 additions & 18 deletions app/api/weather.ts

This file was deleted.

1 change: 0 additions & 1 deletion app/auth/login/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import "../../globals.css";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import Providers from "../../providers";
Expand Down
44 changes: 23 additions & 21 deletions app/auth/login/page.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
"use client";

import { useSession, signIn } from "next-auth/react";
import { signIn } from "next-auth/react";
import React, { useState } from "react";
import { imageLoader } from "@/utils/ImageLoader";
import Image from "next/image";
import Link from "next/link";
import BackgroundEffects from "@/components/Particles/BackgroundEffects";

export default function Login() {
const [texts, setTexts] = useState({
email: "",
password: "",
});
const { data: session } = useSession();

const handleChange = (
e: React.ChangeEvent<
Expand All @@ -21,7 +21,7 @@ export default function Login() {
setTexts((prev) => ({ ...prev, [e.target.name]: [e.target.value][0] }));
};

const handleSignIn = async () => {
const handleSignIn = async (e: React.KeyboardEvent | React.MouseEvent) => {
try {
const res = await signIn("credentials", {
email: texts.email,
Expand All @@ -36,64 +36,66 @@ export default function Login() {
};

const handleEnter = (e: React.KeyboardEvent) => {
if (e.keyCode === 13) handleSignIn();
if ((e as React.KeyboardEvent).keyCode === 13) {
handleSignIn(e as React.KeyboardEvent);
}
};

return (
<>
<BackgroundEffects />
<main
className="flex items-center justify-center"
className="flex items-center justify-center relative"
style={{ height: "100vh" }}
>
<div className="w-full max-w-md p-4 mx-auto rounded-md shadow sm:p-8 dark:bg-gray-700 dark:text-gray-100">
<div className="w-full max-w-md p-4 mx-auto rounded-md shadow sm:p-8 bg-gray-700 text-white">
<Image
loader={imageLoader}
className="flex justify-center object-cover object-center mx-auto rounded-3xl"
alt="HomeLab logotype on sign in page"
src={`/images/logo.png`}
src="/images/logo.png"
unoptimized
width={300}
height={200}
/>
<h2 className="mb-3 text-3xl font-semibold text-center">
Prijavite se
</h2>
<h2 className="mb-3 text-3xl font-semibold text-center">Sign in</h2>
<p className="text-sm text-center dark:text-gray-400">
Ne posjedujete račun?
Don&apos;t have account?
<Link
href="/auth/register"
rel="noopener noreferrer"
className="focus:underline hover:underline"
>
{" "}
Registrujte se
Register
</Link>
</p>
<div className="flex items-center w-full my-4"></div>
<form className="space-y-8 ng-untouched ng-pristine ng-valid">
<input name="csrfToken" type="hidden" />
<div className="space-y-4">
<div className="space-y-2">
<label className="block text-sm">Email adresa</label>
<label className="block text-sm">Email address</label>
<input
type="email"
name="email"
id="email"
placeholder="vasemail@homelab.com"
placeholder="yourmail@homelab.com"
onKeyDown={handleEnter}
value={texts.email}
onChange={handleChange}
className="w-full px-3 py-2 border rounded-md dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100 focus:dark:border-violet-400"
className="w-full px-3 py-2 border rounded-md border-gray-800/40 bg-gray-800/40 text-gray-200 outline-none"
/>
</div>
<div className="space-y-2">
<div className="flex justify-between">
<label className="text-sm">Lozinka</label>
<label className="text-sm">Password</label>
<a
rel="noopener noreferrer"
href="#"
className="text-xs hover:underline dark:text-gray-400"
>
Zaboravili ste lozinku?
Forgot your password?
</a>
</div>
<input
Expand All @@ -104,16 +106,16 @@ export default function Login() {
onKeyDown={handleEnter}
value={texts.password}
onChange={handleChange}
className="w-full px-3 py-2 border rounded-md dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100 focus:dark:border-violet-400"
className="w-full px-3 py-2 border rounded-md border-gray-800/40 bg-gray-800/40 text-gray-200 outline-none"
/>
</div>
</div>
<button
type="button"
className="w-full px-8 py-3 font-semibold duration-500 rounded-md dark:bg-violet-400 dark:text-gray-800 hover:bg-secondaryColor"
onClick={handleSignIn}
className="w-full px-8 py-3 font-semibold duration-500 rounded-md bg-secondaryColor hover:bg-violet-400"
onClick={(e: React.MouseEvent) => handleSignIn(e)}
>
Prijavite se
Sign in
</button>
</form>
</div>
Expand Down
1 change: 0 additions & 1 deletion app/auth/register/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import "../../globals.css";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import Providers from "../../providers";
Expand Down
142 changes: 25 additions & 117 deletions app/auth/register/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
"use client";
import Head from "next/head";
import { useSession, signIn, signOut } from "next-auth/react";

import { signIn } from "next-auth/react";
import { useState } from "react";
import { imageLoader } from "@/utils/ImageLoader";
import Image from "next/image";
import Axios from "@/utils/Axios";
import Link from "next/link";
import BackgroundEffects from "@/components/Particles/BackgroundEffects";
import Cities from "@/components/Panel/Register/Cities";
import States from "@/components/Panel/Register/States";
import Inputs from "@/components/Panel/Register/Inputs";

export default function Login() {
const [error, setError] = useState<string>();
Expand All @@ -27,12 +31,15 @@ export default function Login() {
};

const handleRegister = async () => {
const res = await Axios.makeRequest
.post("/user/register", texts)
await Axios.makeRequest
.post("http://localhost:8000/api/users/register", texts)
.then((result) => {
if (result.status === 200 && result.data.message === 302) {
setError("Korisnik sa takvim emailom ili lozinkom već postoji.");
} else if (result.status === 200 && result.data.message === 200) {
} else if (
result.status === 200 &&
result.data.message === "Account successfully registered."
) {
signIn("credentials", {
email: texts.email,
password: texts.password,
Expand All @@ -48,11 +55,12 @@ export default function Login() {

return (
<>
<BackgroundEffects />
<main
className="flex items-center justify-center"
className="flex items-center justify-center relative"
style={{ height: "100vh" }}
>
<div className="w-full max-w-md p-4 mx-auto rounded-md shadow sm:p-8 dark:bg-gray-700 dark:text-gray-100">
<div className="w-full max-w-md p-4 mx-auto rounded-md shadow sm:p-8 bg-gray-700 text-white">
<Image
loader={imageLoader}
className="flex justify-center object-cover object-center mx-auto rounded-3xl"
Expand All @@ -61,139 +69,39 @@ export default function Login() {
width={300}
height={200}
/>
<h2 className="text-3xl font-semibold text-center ">
Registrujte se
</h2>
<h2 className="text-3xl font-semibold text-center ">Register</h2>
<p className="text-sm text-center dark:text-gray-400">
Već posjedujete račun?
Already have account?
<Link
href="/auth/login"
rel="noopener noreferrer"
className="focus:underline hover:underline"
>
{" "}
Prijavite se
Sign in
</Link>
</p>
<form className="space-y-8 ng-untouched ng-pristine ng-valid">
<form className="space-y-8">
<input name="csrfToken" type="hidden" />
<div className="space-y-3">
<div className="space-y-2">
<label className="block text-sm">Ime</label>
<input
type="text"
name="name"
id="name"
onKeyDown={handleEnter}
placeholder="Unesite Vaše ime.."
value={texts.name}
onChange={handleChange}
className="w-full px-3 py-2 border rounded-md dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100 focus:dark:border-violet-400"
/>
</div>
<div className="space-y-2">
<label className="block text-sm">Prezime</label>
<input
type="email"
name="surname"
id="surname"
onKeyDown={handleEnter}
placeholder="Unesite Vaše prezime.."
value={texts.surname}
onChange={handleChange}
className="w-full px-3 py-2 border rounded-md dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100 focus:dark:border-violet-400"
/>
</div>
<div className="space-y-2">
<label className="block text-sm">Email adresa</label>
<input
type="email"
name="email"
id="email"
onKeyDown={handleEnter}
placeholder="[email protected]"
value={texts.email}
onChange={handleChange}
className="w-full px-3 py-2 border rounded-md dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100 focus:dark:border-violet-400"
/>
</div>
<div className="space-y-2">
<div className="flex justify-between">
<label className="text-sm">Lozinka</label>
</div>
<input
type="password"
name="password"
id="password"
onKeyDown={handleEnter}
placeholder="********"
value={texts.password}
onChange={handleChange}
className="w-full px-3 py-2 border rounded-md dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100 focus:dark:border-violet-400"
/>
</div>
<Inputs handleChange={handleChange} handleEnter={handleEnter} texts={texts} />
<div className="space-y-2">
<div className="flex justify-between">
<label className="text-sm">Grad</label>
<label className="text-sm">Location</label>
</div>
<div className="flex justify-center">
<select
name="city"
value={texts.city}
onChange={handleChange}
className="bg-gray-50 border border-gray-500 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-800 dark:border-gray-700 dark:placeholder-gray-400 dark:text-gray-400 dark:focus:ring-blue-500 dark:focus:border-blue-500"
>
<option hidden>Izaberite grad</option>
<option value="Sarajevo">Sarajevo</option>
<option value="Banja Luka">Banja Luka</option>
<option value="Tuzla">Tuzla</option>
<option value="Zenica">Zenica</option>
<option value="Mostar">Mostar</option>
<option value="Istocno Sarajevo">Istočno Sarajevo</option>
<option value="Srebrenik">Srebrenik</option>
<option value="Bihac">Bihać</option>
<option value="Brcko">Brčko</option>
<option value="Bijeljina">Bijeljina</option>
<option value="Prijedor">Prijedor</option>
<option value="Trebinje">Trebinje</option>
<option value="Travnik">Travnik</option>
<option value="Kiseljak">Kiseljak</option>
<option value="Doboj">Doboj</option>
<option value="Cazin">Cazir</option>
<option value="Bugojno">Bugojno</option>
<option value="Velika Kladuša">Velika Kladuša</option>
<option value="Visoko">Visoko</option>
<option value="Gorazde">Goražde</option>
<option value="Konjic">Konjic</option>
<option value="Gracanica">Gračanica</option>
<option value="Gradacac">Gradačac</option>
<option value="Bosanska aKrupa">Bosanska Krupa</option>
<option value="Mrkonjic Grad">Mrkonjić Grad</option>
<option value="Foca">Foča</option>
<option value="Zavidovici">Zavidovići</option>
<option value="Zivinice">Živinice</option>
<option value="Sanski Most">Sanski Most</option>
<option value="Bosanska Gradiska">Bosanska Gradiška</option>
<option value="Bileci">Bileći</option>
<option value="Lukavac">Lukavac</option>
<option value="Kakanj">Kakanj</option>
<option value="Livno">Livno</option>
<option value="Odžak">Odžak</option>
<option value="Sipovo">Šipovo</option>
<option value="Prozor">Prozor</option>
<option value="Novi Travnik">Novi Travnik</option>
<option value="Zvornik">Zvornik</option>
</select>
<States />
<Cities texts={texts} handleChange={handleChange} />
</div>
</div>
<span className="text-red-400">{error}</span>
</div>
<button
type="button"
className="w-full px-8 py-3 font-semibold duration-500 rounded-md dark:bg-violet-400 dark:text-gray-800 hover:bg-secondaryColor"
className="w-full px-8 py-3 font-semibold duration-500 rounded-md bg-secondaryColor dark:text-gray-800 hover:bg-violet-400"
onClick={handleRegister}
>
Registrujte se
Register
</button>
</form>
</div>
Expand Down
Loading

0 comments on commit cb950c8

Please sign in to comment.