-
- Selamat Datang di Portal Resmi Humas Polri
-
-
- {
- setValUsername(e.target.value.trim());
- }}
- onPaste={(e: any) => {
- setValUsername(e.target.value.trim());
- }}
- onCopy={(e: any) => {
- setValUsername(e.target.value.trim());
- }}
- />
-
-
-
- {isVisible ? (
-
- ) : (
-
- )}
-
- }
- type={isVisible ? "text" : "password"}
- label="Password"
- placeholder="Masukkan password anda"
- variant="underlined"
- onChange={(event) => setPassword(event.target.value)}
- />
-
+
+
+
+
+ Selamat Datang di Portal Resmi Humas Polri
+
+
+ {
+ setValUsername(e.target.value.trim());
+ }}
+ onPaste={(e: any) => {
+ setValUsername(e.target.value.trim());
+ }}
+ onCopy={(e: any) => {
+ setValUsername(e.target.value.trim());
+ }}
+ />
+
+
+
+ {isVisible ? (
+
+ ) : (
+
+ )}
+
+ }
+ type={isVisible ? "text" : "password"}
+ label="Password"
+ placeholder="Masukkan password anda"
+ variant="underlined"
+ onChange={(event) => setPassword(event.target.value)}
+ />
+
-
-
-
-
- Don't have account? Register Now
-
-
-
+
-
+
+
+ Don't have account? Register Now
+
+
+
+
+
+
+
+
+
-
-

-
-
+
);
}
diff --git a/components/form/qudo-login.tsx b/components/form/qudo-login.tsx
new file mode 100644
index 0000000..8e5beaa
--- /dev/null
+++ b/components/form/qudo-login.tsx
@@ -0,0 +1,261 @@
+"use client";
+import { successToast } from "@/config/swal";
+import Cookies from "js-cookie";
+import { EyeIconMdi, EyeOffIconMdi } from "@/components/icons";
+import { error, loading, close } from "@/config/swal";
+
+import { Button, Input } from "@nextui-org/react";
+import { useEffect, useState } from "react";
+import { useRouter } from "next/navigation";
+import { getProfile, postSignIn } from "@/service/master-user";
+
+const images = ["bg1.jpg", "bg2.jpg"];
+
+export default function QudoLogin() {
+ const [currentImageIndex, setCurrentImageIndex] = useState(0);
+ const router = useRouter();
+
+ useEffect(() => {
+ const intervalId = setInterval(() => {
+ setCurrentImageIndex((prevIndex) => (prevIndex + 1) % images.length);
+ }, 10000);
+
+ return () => clearInterval(intervalId);
+ }, []);
+
+ useEffect(() => {
+ const isLogout = Cookies.get("is_logout");
+ if (isLogout) {
+ successToast("Session Expired", "Please log in again.");
+ Cookies.remove("is_logout");
+ }
+ }, []);
+
+ const [username, setUsername] = useState("");
+ const [password, setPassword] = useState("");
+ const [typePass, setTypePass] = useState("password");
+ const [category, setCategory] = useState("5");
+ const [role, setRole] = useState([]);
+ const [isVisible, setIsVisible] = useState(false);
+
+ const toggleVisibility = () => setIsVisible(!isVisible);
+
+ const onSubmit = async () => {
+ const data = {
+ username: username,
+ password: password,
+ };
+
+ if (!username || !password) {
+ error("Username & Password Wajib Diisi !");
+ } else {
+ loading();
+ const response = await postSignIn(data);
+ if (response?.error) {
+ error("Username / Password Tidak Sesuai");
+ } else {
+ const access_token: any = response?.data?.data?.id_token;
+ const refresh_token: any = response?.data?.data?.refresh_token;
+ const dateTime: any = new Date();
+ const newTime: any = dateTime.getTime() + 10 * 60 * 1000;
+
+ Cookies.set("access_token", access_token, {
+ expires: 1,
+ });
+ Cookies.set("refresh_token", refresh_token, {
+ expires: 1,
+ });
+ Cookies.set("time_refresh", newTime, {
+ expires: 1,
+ });
+ Cookies.set("is_first_login", "true", {
+ secure: true,
+ sameSite: "strict",
+ });
+ const profile = await getProfile();
+ console.log("PROFILE : ", profile?.data);
+ Cookies.set("profile_picture", profile?.data?.data?.profilePictureUrl, {
+ expires: 1,
+ });
+ Cookies.set("uie", profile?.data?.data?.id, {
+ expires: 1,
+ });
+ Cookies.set("ufne", profile?.data?.data?.fullname, {
+ expires: 1,
+ });
+ Cookies.set("username", profile?.data?.data?.username, {
+ expires: 1,
+ });
+ Cookies.set("urie", profile?.data?.data?.roleId, {
+ expires: 1,
+ });
+ Cookies.set("roleName", profile?.data?.data?.roleName, {
+ expires: 1,
+ });
+ Cookies.set("masterPoldaId", profile?.data?.data?.masterPoldaId, {
+ expires: 1,
+ });
+ Cookies.set("ulne", profile?.data?.data?.roleLevelNumber, {
+ expires: 1,
+ });
+ Cookies.set("urce", profile?.data?.data?.roleCode, {
+ expires: 1,
+ });
+ Cookies.set("email", profile?.data?.data?.email, {
+ expires: 1,
+ });
+
+ close();
+ router.push("/admin/dashboard");
+ Cookies.set("status", "login", {
+ expires: 1,
+ });
+ }
+ }
+ // }
+ };
+ const setValUsername = (e: any) => {
+ const uname = e.replaceAll(/[^\w.-]/g, "");
+ setUsername(uname.toLowerCase());
+ };
+
+ const [forgotPassword, setForgotPassword] = useState(false);
+
+ const handleForgotPassword = (data: boolean) => {
+ setForgotPassword(false);
+ };
+
+ return (
+
+
+
Another innovation from
+
QudÅco
+
+ AI-based creativity and functionality will soon be available for
+ public use.
+
+
+
+
+

+
+
+ Welcome Back!
+
+
+
+
+ Username*
+
+
{
+ setValUsername(e.target.value.trim());
+ }}
+ onPaste={(e: any) => {
+ setValUsername(e.target.value.trim());
+ }}
+ onCopy={(e: any) => {
+ setValUsername(e.target.value.trim());
+ }}
+ />
+
+
+
+ Password*
+
+
+ {isVisible ? (
+
+ ) : (
+
+ )}
+
+ }
+ type={isVisible ? "text" : "password" && typePass}
+ classNames={{
+ input: ["w-full", "bg-slate-100", "!text-black", "rounded-sm"],
+ mainWrapper: [
+ "w-full",
+ "bg-slate-100",
+ "border-2",
+ "border-slate-200",
+ "rounded-sm",
+ ],
+ innerWrapper: ["bg-transparent"],
+ inputWrapper: [
+ "bg-transparent",
+ "rounded-sm",
+ "dark:bg-transparent",
+ "hover:bg-transparent",
+ "dark:hover:bg-transparent",
+ "group-data-[focused=true]:bg-transparent",
+ "dark:group-data-[focused=true]:bg-transaparent",
+ "group-data-[focused=false]:bg-transparent",
+ "focus-within:!bg-transparent",
+ ],
+ }}
+ onChange={(event) => setPassword(event.target.value)}
+ />
+
setForgotPassword(true)}
+ className="cursor-pointer mt-2 text-sm text-black mb-5"
+ >
+ Forgot Password?
+
+
+
+
+
+
+
© 2024 Qudoco
+
+
+ );
+}
diff --git a/components/layout/navbar/NavbarHumas.tsx b/components/layout/navbar/NavbarHumas.tsx
index f649b83..6952632 100644
--- a/components/layout/navbar/NavbarHumas.tsx
+++ b/components/layout/navbar/NavbarHumas.tsx
@@ -18,7 +18,7 @@ import {
} from "@nextui-org/react";
import Image from "next/image";
import Link from "next/link";
-import { useState } from "react";
+import { useEffect, useState } from "react";
import {
ChevronDownIcon,
ChevronRightIcon,
@@ -32,6 +32,8 @@ import {
YtIcon,
} from "../../icons";
import { ThemeSwitch } from "../../theme-switch";
+import Cookies from "js-cookie";
+import { useRouter } from "next/navigation";
interface MenuItem {
key: string;
@@ -51,6 +53,22 @@ interface DropdownOpenState {
export default function NavbarHumas() {
const [dropdownOpen, setDropdownOpen] = useState
({});
+ const router = useRouter();
+
+ const token = Cookies.get("access_token");
+
+ useEffect(() => {
+ if (!token) {
+ onLogout();
+ }
+ }, [token]);
+
+ const onLogout = () => {
+ Object.keys(Cookies.get()).forEach((cookieName) => {
+ Cookies.remove(cookieName);
+ });
+ router.push("/auth");
+ };
const toggleDropdown = (key: any) => {
setDropdownOpen({
@@ -363,9 +381,15 @@ export default function NavbarHumas() {
-
-
-
+ {token ? (
+
+ ) : (
+
+
+
+ )}