Commit 048ae270 authored by ReemyHasan's avatar ReemyHasan

Add setting page

parent ad0cca50
...@@ -40,6 +40,16 @@ export default function App({ Component, pageProps }: AppProps) { ...@@ -40,6 +40,16 @@ export default function App({ Component, pageProps }: AppProps) {
if (loader) loader.remove(); if (loader) loader.remove();
} }
}, []); }, []);
useEffect(() => {
if (!websocket) {
return;
}
return () => {
if (websocket) {
websocket.close();
}
};
}, []);
return ( return (
<Fragment> <Fragment>
......
...@@ -4,6 +4,7 @@ import AppLayout from "@/src/components/layout"; ...@@ -4,6 +4,7 @@ import AppLayout from "@/src/components/layout";
import { Fragment } from "react"; import { Fragment } from "react";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core"; import { TranslationFiles } from "@/src/data/core";
import Setting from "@/src/features/setting";
export default function Setup() { export default function Setup() {
const { t } = useTranslation(TranslationFiles.COMMON); const { t } = useTranslation(TranslationFiles.COMMON);
return ( return (
...@@ -12,7 +13,11 @@ export default function Setup() { ...@@ -12,7 +13,11 @@ export default function Setup() {
<title>{t("setup")}</title> <title>{t("setup")}</title>
</Head> </Head>
<AppLayout> <AppLayout>
<main className={`app-main-container`}>{t("setup")}</main> <main className={`app-main-container`}>
<div className=" w-full px-4 max-w-full flex-grow flex-1">
<Setting />
</div>
</main>
</AppLayout> </AppLayout>
</Fragment> </Fragment>
); );
......
import * as React from "react";
import Head from "next/head";
import AppLayout from "@/src/components/layout";
import { Fragment } from "react";
import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core";
import SettingAboutContent from "../../../src/features/setting/setting-about-content";
export default function Setup() {
const { t } = useTranslation(TranslationFiles.COMMON);
return (
<Fragment>
<Head>
<title>{t("setup")}</title>
</Head>
<AppLayout>
<main className={`app-main-container`}>
<SettingAboutContent />
</main>
</AppLayout>
</Fragment>
);
}
import * as React from "react";
import Head from "next/head";
import AppLayout from "@/src/components/layout";
import { Fragment } from "react";
import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core";
import SettingProfileContent from "../../../src/features/setting/setting-profile";
export default function Setup() {
const { t } = useTranslation(TranslationFiles.COMMON);
return (
<Fragment>
<Head>
<title>{t("setup")}</title>
</Head>
<AppLayout>
<main className={`app-main-container`}>
<SettingProfileContent />
</main>
</AppLayout>
</Fragment>
);
}
export const AUTH_TOKEN: string = "app-auth-token"; export const AUTH_TOKEN: string = "app-auth-token";
export const Default_Language: string = "app-language"; export const Default_Language: string = "app-language";
export const TrapURL: string = "http://localhost:6647/api/rethink/data";
export const SettingURL: string = "http://localhost:6647/api/about";
...@@ -2,7 +2,7 @@ import { GithubOutlined, MailOutlined } from "@ant-design/icons"; ...@@ -2,7 +2,7 @@ import { GithubOutlined, MailOutlined } from "@ant-design/icons";
import React, { useState } from "react"; import React, { useState } from "react";
export default function Footer() { export default function Footer() {
const [showEmail, setShowEmail] = useState(false); const [showEmail, setShowEmail] = useState(false);
const email = "example@example.com"; const email = <span>{"example@example.com "}</span>;
const handleButtonClick = () => { const handleButtonClick = () => {
setShowEmail(!showEmail); setShowEmail(!showEmail);
...@@ -32,12 +32,12 @@ export default function Footer() { ...@@ -32,12 +32,12 @@ export default function Footer() {
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
<div className="flex flex-wrap text-center lg:text-left"> <div className="flex flex-wrap text-center lg:text-left">
<div className="w-full lg:w-6/12 px-4"> <div className="w-full lg:w-6/12 px-4">
<h4 className="text-3xl font-semibold">Let's keep in touch!</h4> {/* <h4 className="text-3xl font-semibold">Let's keep in touch!</h4>
<h5 className="text-lg mt-0 mb-2 text-blueGray-600"> <h5 className="text-lg mt-0 mb-2 text-blueGray-600">
Find us on any of these platform. Find us on any of these platform.
</h5> </h5> */}
<div className="mt-6 lg:mb-0 mb-6"> <div className="mt-6 lg:mb-0 mb-6">
<button {/* <button
className="bg-white text-lightBlue-400 shadow-lg font-normal h-10 w-10 items-center justify-center align-center rounded-full outline-none focus:outline-none mr-2" className="bg-white text-lightBlue-400 shadow-lg font-normal h-10 w-10 items-center justify-center align-center rounded-full outline-none focus:outline-none mr-2"
type="button" type="button"
onClick={handleButtonClick} onClick={handleButtonClick}
...@@ -59,13 +59,13 @@ export default function Footer() { ...@@ -59,13 +59,13 @@ export default function Footer() {
style={{ fontSize: "19px", color: "#000f24" }} style={{ fontSize: "19px", color: "#000f24" }}
className={"ExclamationCircleOutlined "} className={"ExclamationCircleOutlined "}
/> />
</button> </button> */}
</div> </div>
</div> </div>
<div className="w-full lg:w-6/12 px-4"> <div className="w-full lg:w-6/12 px-4">
<div className="flex flex-wrap items-top mb-6"> <div className="flex flex-wrap items-top mb-6">
<div className="w-full lg:w-4/12 px-4 ml-auto"> <div className="w-full lg:w-4/12 px-4 ml-auto">
<span className="block uppercase text-blueGray-500 text-sm font-semibold mb-2"> {/* <span className="block uppercase text-blueGray-500 text-sm font-semibold mb-2">
Useful Links Useful Links
</span> </span>
<ul className="list-unstyled"> <ul className="list-unstyled">
...@@ -77,7 +77,7 @@ export default function Footer() { ...@@ -77,7 +77,7 @@ export default function Footer() {
Contact Us Contact Us
</a> </a>
</li> </li>
</ul> </ul> */}
</div> </div>
</div> </div>
</div> </div>
......
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core"; import { TranslationFiles } from "@/src/data/core";
import { useRouter } from "next/router";
import React, { useState, useEffect } from "react";
import React from "react"; import Footer from "./footer";
import { Alert } from "antd";
// components import {
fetchAboutSettingData,
import Footer from "./footer"; sendEmailMessage,
} from "@/src/services/setting-service";
export default function AboutContent() {
export default function AboutContent() {
const { t } = useTranslation(TranslationFiles.COMMON); const { t } = useTranslation(TranslationFiles.COMMON);
const router = useRouter();
const [formData, setFormData] = useState({
subject: "", //fullName
email: "",
body: "",
});
const [sendingStatus, setSendingStatus] = useState("");
const [data, setData] = useState([]);
useEffect(() => {
getAboutInfo();
}, []);
async function getAboutInfo() {
const response = await fetchAboutSettingData();
setData(response);
console.log(data);
}
async function sendMessage() {
const response = await sendEmailMessage(formData);
console.log(response);
if (response == true) {
setSendingStatus("success");
} else {
setSendingStatus("error");
}
}
const getTextValueByKey = (key) => {
const item = data.find((item) => item.key === key);
return item ? item.value : "";
};
return ( return (
<> <>
<main> <main>
...@@ -31,10 +63,10 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -31,10 +63,10 @@ import { TranslationFiles } from "@/src/data/core";
<div className="w-full lg:w-6/12 px-4 ml-auto mr-auto text-center"> <div className="w-full lg:w-6/12 px-4 ml-auto mr-auto text-center">
<div className="pr-12"> <div className="pr-12">
<h1 className="text-white font-semibold text-5xl"> <h1 className="text-white font-semibold text-5xl">
Your story starts with us. {getTextValueByKey("h1-text")}
</h1> </h1>
<p className="mt-4 text-lg text-blueGray-200"> <p className="mt-4 text-lg text-blueGray-200">
About page {getTextValueByKey("p1-text")}
</p> </p>
</div> </div>
</div> </div>
...@@ -67,12 +99,12 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -67,12 +99,12 @@ import { TranslationFiles } from "@/src/data/core";
<div className="lg:pt-12 pt-6 w-full md:w-4/12 px-4 text-center"> <div className="lg:pt-12 pt-6 w-full md:w-4/12 px-4 text-center">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg"> <div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg">
<div className="px-4 py-5 flex-auto"> <div className="px-4 py-5 flex-auto">
<div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-red-400"> <div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-red-400"></div>
<i className="fas fa-award"></i> <h6 className="text-xl font-semibold">
</div> {getTextValueByKey("red-h")}
<h6 className="text-xl font-semibold">Fault management System</h6> </h6>
<p className="mt-2 mb-4 text-blueGray-500"> <p className="mt-2 mb-4 text-blueGray-500">
Start here. {getTextValueByKey("red-p")}
</p> </p>
</div> </div>
</div> </div>
...@@ -81,12 +113,12 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -81,12 +113,12 @@ import { TranslationFiles } from "@/src/data/core";
<div className="w-full md:w-4/12 px-4 text-center"> <div className="w-full md:w-4/12 px-4 text-center">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg"> <div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg">
<div className="px-4 py-5 flex-auto"> <div className="px-4 py-5 flex-auto">
<div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-lightBlue-400"> <div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-lightBlue-400"></div>
<i className="fas fa-retweet"></i> <h6 className="text-xl font-semibold">
</div> {getTextValueByKey("blue-h")}
<h6 className="text-xl font-semibold">FMS</h6> </h6>
<p className="mt-2 mb-4 text-blueGray-500"> <p className="mt-2 mb-4 text-blueGray-500">
CURIOUSITY {getTextValueByKey("blue-p")}
</p> </p>
</div> </div>
</div> </div>
...@@ -95,12 +127,12 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -95,12 +127,12 @@ import { TranslationFiles } from "@/src/data/core";
<div className="pt-6 w-full md:w-4/12 px-4 text-center"> <div className="pt-6 w-full md:w-4/12 px-4 text-center">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg"> <div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg">
<div className="px-4 py-5 flex-auto"> <div className="px-4 py-5 flex-auto">
<div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-emerald-400"> <div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-emerald-400"></div>
<i className="fas fa-fingerprint"></i> <h6 className="text-xl font-semibold">
</div> {getTextValueByKey("green-h")}
<h6 className="text-xl font-semibold">OUR Company</h6> </h6>
<p className="mt-2 mb-4 text-blueGray-500"> <p className="mt-2 mb-4 text-blueGray-500">
Stay with us {getTextValueByKey("green-p")}
</p> </p>
</div> </div>
</div> </div>
...@@ -109,17 +141,12 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -109,17 +141,12 @@ import { TranslationFiles } from "@/src/data/core";
<div className="flex flex-wrap items-center mt-32"> <div className="flex flex-wrap items-center mt-32">
<div className="w-full md:w-5/12 px-4 mr-auto ml-auto"> <div className="w-full md:w-5/12 px-4 mr-auto ml-auto">
<div className="text-blueGray-500 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-white"> <div className="text-blueGray-500 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-white"></div>
<i className="fas fa-user-friends text-xl"></i>
</div>
<h3 className="text-3xl mb-2 font-semibold leading-normal"> <h3 className="text-3xl mb-2 font-semibold leading-normal">
Working with us is a pleasure {getTextValueByKey("section2-h3")}
</h3> </h3>
<p className="text-lg font-light leading-relaxed mt-4 mb-4 text-blueGray-600"> <p className="text-lg font-light leading-relaxed mt-4 mb-4 text-blueGray-600">
FMS. {getTextValueByKey("section2-p")}
</p>
<p className="text-lg font-light leading-relaxed mt-0 mb-4 text-blueGray-600">
Abnomaly Detection.
</p> </p>
</div> </div>
...@@ -143,10 +170,10 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -143,10 +170,10 @@ import { TranslationFiles } from "@/src/data/core";
></polygon> ></polygon>
</svg> </svg>
<h4 className="text-xl font-bold text-white"> <h4 className="text-xl font-bold text-white">
Top Services {t("top-services")}
</h4> </h4>
<p className="text-md font-light mt-2 text-white"> <p className="text-md font-light mt-2 text-white">
FMS {getTextValueByKey("topservice-p")}
</p> </p>
</blockquote> </blockquote>
</div> </div>
...@@ -187,57 +214,13 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -187,57 +214,13 @@ import { TranslationFiles } from "@/src/data/core";
</div> </div>
<div className="w-full md:w-5/12 ml-auto mr-auto px-4"> <div className="w-full md:w-5/12 ml-auto mr-auto px-4">
<div className="md:pr-12"> <div className="md:pr-12">
<div className="text-blueGray-500 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-blueGray-200"> <div className="text-blueGray-500 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-blueGray-200"></div>
<i className="fas fa-rocket text-xl"></i> <h3 className="text-3xl font-semibold">
</div> {getTextValueByKey("section3-h")}
<h3 className="text-3xl font-semibold">A growing company</h3> </h3>
<p className="mt-4 text-lg leading-relaxed text-blueGray-500"> <p className="mt-4 text-lg leading-relaxed text-blueGray-500">
FMS {getTextValueByKey("section3-p")}
</p> </p>
<ul className="list-none mt-6">
<li className="py-2">
<div className="flex items-center">
<div>
<span className="text-xs font-semibold inline-block py-1 px-2 uppercase rounded-full text-blueGray-500 bg-blueGray-100 mr-3">
<i className="fas fa-fingerprint"></i>
</span>
</div>
<div>
<h4 className="text-blueGray-500">
A
</h4>
</div>
</div>
</li>
<li className="py-2">
<div className="flex items-center">
<div>
<span className="text-xs font-semibold inline-block py-1 px-2 uppercase rounded-full text-blueGray-500 bg-blueGray-100 mr-3">
<i className="fab fa-html5"></i>
</span>
</div>
<div>
<h4 className="text-blueGray-500">
B
</h4>
</div>
</div>
</li>
<li className="py-2">
<div className="flex items-center">
<div>
<span className="text-xs font-semibold inline-block py-1 px-2 uppercase rounded-full text-blueGray-500 bg-blueGray-100 mr-3">
<i className="far fa-paper-plane"></i>
</span>
</div>
<div>
<h4 className="text-blueGray-500">
C
</h4>
</div>
</div>
</li>
</ul>
</div> </div>
</div> </div>
</div> </div>
...@@ -248,9 +231,9 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -248,9 +231,9 @@ import { TranslationFiles } from "@/src/data/core";
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
<div className="flex flex-wrap justify-center text-center mb-24"> <div className="flex flex-wrap justify-center text-center mb-24">
<div className="w-full lg:w-6/12 px-4"> <div className="w-full lg:w-6/12 px-4">
<h2 className="text-4xl font-semibold">Here are our heroes</h2> <h2 className="text-4xl font-semibold">{getTextValueByKey("Hero-title")}</h2>
<p className="text-lg leading-relaxed m-4 text-blueGray-500"> <p className="text-lg leading-relaxed m-4 text-blueGray-500">
We ara HEROES. {getTextValueByKey("Hero-p")}
</p> </p>
</div> </div>
</div> </div>
...@@ -267,26 +250,6 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -267,26 +250,6 @@ import { TranslationFiles } from "@/src/data/core";
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold"> <p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
Web Developer Web Developer
</p> </p>
<div className="mt-6">
<button
className="bg-lightBlue-400 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-twitter"></i>
</button>
<button
className="bg-lightBlue-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-facebook-f"></i>
</button>
<button
className="bg-pink-500 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-dribbble"></i>
</button>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -302,20 +265,6 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -302,20 +265,6 @@ import { TranslationFiles } from "@/src/data/core";
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold"> <p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
Marketing Specialist Marketing Specialist
</p> </p>
<div className="mt-6">
<button
className="bg-red-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-google"></i>
</button>
<button
className="bg-lightBlue-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-facebook-f"></i>
</button>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -331,26 +280,6 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -331,26 +280,6 @@ import { TranslationFiles } from "@/src/data/core";
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold"> <p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
UI/UX Designer UI/UX Designer
</p> </p>
<div className="mt-6">
<button
className="bg-red-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-google"></i>
</button>
<button
className="bg-lightBlue-400 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-twitter"></i>
</button>
<button
className="bg-blueGray-700 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-instagram"></i>
</button>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -366,32 +295,6 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -366,32 +295,6 @@ import { TranslationFiles } from "@/src/data/core";
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold"> <p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
Founder and CEO Founder and CEO
</p> </p>
<div className="mt-6">
<button
className="bg-pink-500 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-dribbble"></i>
</button>
<button
className="bg-red-600 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-google"></i>
</button>
<button
className="bg-lightBlue-400 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-twitter"></i>
</button>
<button
className="bg-blueGray-700 text-white w-8 h-8 rounded-full outline-none focus:outline-none mr-1 mb-1"
type="button"
>
<i className="fab fa-instagram"></i>
</button>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -423,47 +326,28 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -423,47 +326,28 @@ import { TranslationFiles } from "@/src/data/core";
<div className="container mx-auto px-4 lg:pt-24 lg:pb-64"> <div className="container mx-auto px-4 lg:pt-24 lg:pb-64">
<div className="flex flex-wrap text-center justify-center"> <div className="flex flex-wrap text-center justify-center">
<div className="w-full lg:w-6/12 px-4"> <div className="w-full lg:w-6/12 px-4">
<h2 className="text-4xl font-semibold text-white"> <h2 className="text-4xl font-semibold text-white">MORE IFO</h2>
MORE IFO
</h2>
<p className="text-lg leading-relaxed mt-4 mb-4 text-blueGray-400">
HERE
</p>
</div> </div>
</div> </div>
<div className="flex flex-wrap mt-12 justify-center"> <div className="flex flex-wrap mt-12 justify-center">
<div className="w-full lg:w-3/12 px-4 text-center"> <div className="w-full lg:w-3/12 px-4 text-center">
<div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"> <div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"></div>
<i className="fas fa-medal text-xl"></i>
</div>
<h6 className="text-xl mt-5 font-semibold text-white"> <h6 className="text-xl mt-5 font-semibold text-white">
Excelent Services {getTextValueByKey("moreInfo-h1")}
</h6> </h6>
<p className="mt-2 mb-4 text-blueGray-400"> <p className="mt-2 mb-4 text-blueGray-400">{getTextValueByKey("moreInfo-p1")}</p>
detection.
</p>
</div> </div>
<div className="w-full lg:w-3/12 px-4 text-center"> <div className="w-full lg:w-3/12 px-4 text-center">
<div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"> <div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"></div>
<i className="fas fa-poll text-xl"></i> <h5 className="text-xl mt-5 font-semibold text-white">{getTextValueByKey("moreInfo-h2")}</h5>
</div> <p className="mt-2 mb-4 text-blueGray-400">{getTextValueByKey("moreInfo-p2")}</p>
<h5 className="text-xl mt-5 font-semibold text-white">
MODEL
</h5>
<p className="mt-2 mb-4 text-blueGray-400">
ML
</p>
</div> </div>
<div className="w-full lg:w-3/12 px-4 text-center"> <div className="w-full lg:w-3/12 px-4 text-center">
<div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"> <div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center"></div>
<i className="fas fa-lightbulb text-xl"></i>
</div>
<h5 className="text-xl mt-5 font-semibold text-white"> <h5 className="text-xl mt-5 font-semibold text-white">
WEB APP {getTextValueByKey("moreInfo-h3")}
</h5> </h5>
<p className="mt-2 mb-4 text-blueGray-400"> <p className="mt-2 mb-4 text-blueGray-400">{getTextValueByKey("moreInfo-p3")}</p>
OUR APP.
</p>
</div> </div>
</div> </div>
</div> </div>
...@@ -492,9 +376,12 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -492,9 +376,12 @@ import { TranslationFiles } from "@/src/data/core";
type="text" type="text"
className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150" className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150"
placeholder="Full Name" placeholder="Full Name"
value={formData.subject}
onChange={(e) =>
setFormData({ ...formData, subject: e.target.value })
}
/> />
</div> </div>
<div className="relative w-full mb-3"> <div className="relative w-full mb-3">
<label <label
className="block uppercase text-blueGray-600 text-xs font-bold mb-2" className="block uppercase text-blueGray-600 text-xs font-bold mb-2"
...@@ -506,6 +393,10 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -506,6 +393,10 @@ import { TranslationFiles } from "@/src/data/core";
type="email" type="email"
className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150" className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150"
placeholder="Email" placeholder="Email"
value={formData.email}
onChange={(e) =>
setFormData({ ...formData, email: e.target.value })
}
/> />
</div> </div>
...@@ -521,15 +412,31 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -521,15 +412,31 @@ import { TranslationFiles } from "@/src/data/core";
cols="80" cols="80"
className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full" className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full"
placeholder="Type a message..." placeholder="Type a message..."
value={formData.body}
onChange={(e) =>
setFormData({ ...formData, body: e.target.value })
}
/> />
</div> </div>
<div className="text-center mt-6"> <div className="text-center mt-6">
<button <button
className="bg-blueGray-800 text-white active:bg-blueGray-600 text-sm font-bold uppercase px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150" className="bg-blueGray-800 text-white active:bg-blueGray-600 text-sm font-bold uppercase px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button" type="button"
onClick={sendMessage}
> >
Send Message Send Message
</button> </button>
<div>
{sendingStatus == "success" && (
<Alert
message="Message was sent successfully"
type="success"
/>
)}
{sendingStatus == "error" && (
<Alert message="Sending errors" type="error" />
)}
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -541,5 +448,4 @@ import { TranslationFiles } from "@/src/data/core"; ...@@ -541,5 +448,4 @@ import { TranslationFiles } from "@/src/data/core";
<Footer /> <Footer />
</> </>
); );
} }
\ No newline at end of file
import { useEffect, useState } from 'react';
import { DynamicFormTypes } from "@/src/components/dynamic-form/dtos/dynamic-form.dto";
import DynamicForm from "@/src/components/dynamic-form";
import { formItems } from "./add-user-data";
import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core";
const EditForm = ({ id }) => {
const { t } = useTranslation(TranslationFiles.COMMON);
const [initialValues, setInitialValues] = useState({});
useEffect(() => {
// Fetch user data from API or database
// const fetchUser = async () => {
// const response = await fetch(`/api/users/${id}`);
// const data = await response.json();
// setInitialValues(data);
// };
// fetchUser();
}, [id]);
return (
<div data-testid="new-stock-form">
<DynamicForm
type={DynamicFormTypes.Update}
title={t("edit-user")}
initialValues={{}}
onFinish={(values) => console.log({ values })}
formCol={formItems(t)}
/>
</div>
);
};
export default EditForm;
...@@ -13,8 +13,14 @@ const Login = () => { ...@@ -13,8 +13,14 @@ const Login = () => {
const [cookies, setCookies] = useCookies([AUTH_TOKEN]); const [cookies, setCookies] = useCookies([AUTH_TOKEN]);
const onFinishSend = (values: any) => { const onFinishSend = (values: any) => {
if(values.email=="admin@f.com"){
setCookies(AUTH_TOKEN, values.email); setCookies(AUTH_TOKEN, values.email);
router.push("/"); router.push("/");
}
else if(values.email=="user@f.com"){
setCookies(AUTH_TOKEN, values.email);
router.push("/user");
}
}; };
return ( return (
<div data-testid="login-component"> <div data-testid="login-component">
......
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core"; import { TranslationFiles } from "@/src/data/core";
import FmsButton from "../../../../shared-library/src/buttons/fms-button"; import FmsButton from "../../../../shared-library/src/buttons/fms-button";
import { useRouter } from "next/router";
const ProfileForm = () => { const ProfileForm = () => {
const { t } = useTranslation(TranslationFiles.COMMON); const { t } = useTranslation(TranslationFiles.COMMON);
const router = useRouter();
return ( return (
<> <>
<main className="profile-page"> <main className="profile-page">
...@@ -60,7 +61,9 @@ const ProfileForm = () => { ...@@ -60,7 +61,9 @@ const ProfileForm = () => {
className="bg-blueGray-700 active:bg-blueGray-600 uppercase text-white font-bold hover:shadow-md shadow text-xs px-4 py-2 rounded outline-none focus:outline-none sm:mr-2 mb-1 ease-linear transition-all duration-150" className="bg-blueGray-700 active:bg-blueGray-600 uppercase text-white font-bold hover:shadow-md shadow text-xs px-4 py-2 rounded outline-none focus:outline-none sm:mr-2 mb-1 ease-linear transition-all duration-150"
type="primary" type="primary"
borderRadius="32" borderRadius="32"
onClick={() => {
router.push("/setup/setting-profile-content");
}}
> >
{t("edit")} {t("edit")}
</FmsButton> </FmsButton>
......
import React from "react";
import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core";
import FmsButton from "../../../../shared-library/src/buttons/fms-button";
import { useRouter } from "next/router";
import { Col, Divider, Row } from "antd";
const Setting = () => {
const { t } = useTranslation(TranslationFiles.COMMON);
const router = useRouter();
return (
<>
<Divider orientation="left">{t("setting-pages")}</Divider>
<Col span={24} className={"pd"}>
<FmsButton
type="move"
size={"large"}
borderRadius="8"
onClick={() => {
router.push("/setup/setting-about-content");
}}
>
{t("About-page-setting").toUpperCase()}
</FmsButton>
</Col>
<Divider orientation="left"></Divider>
<Col span={12}className={"pd"} >
<FmsButton
type="move"
size={"large"}
borderRadius="8"
onClick={() => {
router.push("/setup/setting-profile-content");
}}
>
{t("profile-page-setting").toUpperCase()}
</FmsButton>
</Col>
</>
);
};
export default Setting;
import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core";
import React, { useState } from "react";
import { Alert, Input, message } from "antd";
import FmsButton from "../../../../shared-library/src/buttons/fms-button";
import { ExclamationOutlined } from "@ant-design/icons";
import { useRouter } from "next/router";
import {
UpdateAboutSettingData,
sendEmailMessage,
} from "@/src/services/setting-service";
import MainUtils from "../../utils/main";
export default function SettingAboutContent() {
const { t } = useTranslation(TranslationFiles.COMMON);
const router = useRouter();
const [formData, setFormData] = useState({
subject: "", //fullName
email: "",
body: "",
});
const [sendingStatus, setSendingStatus] = useState("");
const [data, setData] = useState([]);
async function sendMessage() {
const response = await sendEmailMessage(formData);
console.log(response);
if (response == true) {
setSendingStatus("success");
} else {
setSendingStatus("error");
}
}
async function UpdateAboutInfo() {
for (let i = 0; i < data.length; i++) {
console.log("data", data[i]);
if (!MainUtils.isEmptyValue( data[i].value)) {
const response = await UpdateAboutSettingData(data[i]);
console.log(response);
if (!MainUtils.isEmptyObject(response)) {
message.success(data[i].key+" Updated successfully");
} else {
message.error("error");
}
}
}
}
const handleInputChange = (key: string, value: string) => {
setData((prevData: any) => {
let dataArray = Array.isArray(prevData) ? prevData : Object.values(prevData);
const index = dataArray.findIndex((item: any) => item.key === key);
if (index !== -1) {
// If the object already exists, update its value property
return [
...dataArray.slice(0, index),
{ ...dataArray[index], value },
...dataArray.slice(index + 1),
];
} else {
// Otherwise, create a new object and add it to the array
return [
...dataArray,
{ key, value },
];
}
});
};
return (
<>
<main>
<div className=" w-full px-4 max-w-full flex-grow flex-1 m-1 text-right">
<FmsButton
type="move"
size="large"
borderRadius="32"
onClick={() => {
UpdateAboutInfo();
}}
>
{"Save".toUpperCase()}
</FmsButton>
<span> </span>
<FmsButton
type="secondary"
size="large"
borderRadius="32"
onClick={() => {
router.push("/about");
}}
>
{"check-about-page".toUpperCase()}
</FmsButton>
</div>
<div className="relative pt-16 pb-32 flex content-center items-center justify-center min-h-screen-75">
<div
className="absolute top-0 w-full h-full bg-center bg-cover"
style={{
backgroundImage:
"url('https://images.unsplash.com/photo-1557804506-669a67965ba0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1267&q=80')",
}}
>
<span
id="blackOverlay"
className="w-full h-full absolute opacity-75 bg-black"
></span>
</div>
<div className="container relative mx-auto">
<div className="items-center flex flex-wrap">
<div className="w-full lg:w-6/12 px-4 ml-auto mr-auto text-center">
<div className="pr-12">
<h1 className="text-white font-semibold text-5xl">
<Input
placeholder={"h1-text"}
value={data.find((item) => item.key === "h1-text")?.value}
onChange={(e: any) =>
handleInputChange("h1-text", e.target.value)
}
/>
</h1>
<p className="mt-4 text-lg text-blueGray-200">
<Input
placeholder={"p1-text"}
value={data.find((item) => item.key === "p1-text")?.value}
onChange={(e: any) =>
handleInputChange("p1-text", e.target.value)
}
/>
</p>
</div>
</div>
</div>
</div>
<div
className="top-auto bottom-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden h-16"
style={{ transform: "translateZ(0)" }}
>
<svg
className="absolute bottom-0 overflow-hidden"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="none"
version="1.1"
viewBox="0 0 2560 100"
x="0"
y="0"
></svg>
</div>
</div>
<section className="pb-20 bg-blueGray-200 -mt-24">
<div className="container mx-auto px-4">
<div className="flex flex-wrap">
<div className="lg:pt-12 pt-6 w-full md:w-4/12 px-4 text-center">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg">
<div className="px-4 py-5 flex-auto">
<div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-red-400">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#fff" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h6 className="text-xl font-semibold">
<Input
placeholder={"red-h"}
value={data.find((item) => item.key === "red-h")?.value}
onChange={(e: any) =>
handleInputChange("red-h", e.target.value)
}
/>
</h6>
<p className="mt-2 mb-4 text-blueGray-500">
<Input.TextArea
placeholder={"red-p"}
value={data.find((item) => item.key === "red-p")?.value}
onChange={(e: any) =>
handleInputChange("red-p", e.target.value)
}
/>
</p>
</div>
</div>
</div>
<div className="w-full md:w-4/12 px-4 text-center">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg">
<div className="px-4 py-5 flex-auto">
<div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-lightBlue-400">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#fff" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h6 className="text-xl font-semibold">
<Input
placeholder={"blue-h"}
value={data.find((item) => item.key === "blue-h")?.value}
onChange={(e: any) =>
handleInputChange("blue-h", e.target.value)
}
/>
</h6>
<p className="mt-2 mb-4 text-blueGray-500">
<Input.TextArea
placeholder={"blue-p"}
value={data.find((item) => item.key === "blue-p")?.value}
onChange={(e: any) =>
handleInputChange("blue-p", e.target.value)
}
/>
</p>
</div>
</div>
</div>
<div className="pt-6 w-full md:w-4/12 px-4 text-center">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-8 shadow-lg rounded-lg">
<div className="px-4 py-5 flex-auto">
<div className="text-white p-3 text-center inline-flex items-center justify-center w-12 h-12 mb-5 shadow-lg rounded-full bg-emerald-400">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#fff" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h6 className="text-xl font-semibold">
<Input
placeholder={"green-h"}
value={data.find((item) => item.key === "green-h")?.value}
onChange={(e: any) =>
handleInputChange("green-h", e.target.value)
}
/>
</h6>
<p className="mt-2 mb-4 text-blueGray-500">
<Input.TextArea
placeholder={"green-p"}
value={data.find((item) => item.key === "green-p")?.value}
onChange={(e: any) =>
handleInputChange("green-p", e.target.value)
}
/>
</p>
</div>
</div>
</div>
</div>
<div className="flex flex-wrap items-center mt-32">
<div className="w-full md:w-5/12 px-4 mr-auto ml-auto">
<div className="text-blueGray-500 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-white">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#000" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h3 className="text-3xl mb-2 font-semibold leading-normal">
<Input
placeholder={"section2-h3"}
value={data.find((item) => item.key === "section2-h3")?.value}
onChange={(e: any) =>
handleInputChange("section2-h3", e.target.value)
}
/>
</h3>
<p className="text-lg font-light leading-relaxed mt-4 mb-4 text-blueGray-600">
<Input.TextArea
placeholder={"section2-p"}
value={data.find((item) => item.key === "section2-p")?.value}
onChange={(e: any) =>
handleInputChange("section2-p", e.target.value)
}
/>
</p>
</div>
<div className="w-full md:w-4/12 px-4 mr-auto ml-auto">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-6 shadow-lg rounded-lg bg-blueGray-700">
<img
alt="..."
src="https://images.unsplash.com/photo-1522202176988-66273c2fd55f?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80"
className="w-full align-middle rounded-t-lg"
/>
<blockquote className="relative p-8 mb-4">
<svg
preserveAspectRatio="none"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 583 95"
className="absolute left-0 w-full block h-95-px -top-94-px"
>
<polygon
points="-30,95 583,95 583,65"
className="text-blueGray-700 fill-current"
></polygon>
</svg>
<h4 className="text-xl font-bold text-white">
{"top-services"}
</h4>
<p className="text-md font-light mt-2 text-white">
<Input.TextArea
placeholder={"topservice-p"}
value={data.find((item) => item.key === "topservice-p")?.value}
onChange={(e: any) =>
handleInputChange("topservice-p", e.target.value)
}
/>
</p>
</blockquote>
</div>
</div>
</div>
</div>
</section>
<section className="relative py-20">
<div
className="bottom-auto top-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden -mt-20 h-20"
style={{ transform: "translateZ(0)" }}
>
<svg
className="absolute bottom-0 overflow-hidden"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="none"
version="1.1"
viewBox="0 0 2560 100"
x="0"
y="0"
>
<polygon
className="text-white fill-current"
points="2560 0 2560 100 0 100"
></polygon>
</svg>
</div>
<div className="container mx-auto px-4">
<div className="items-center flex flex-wrap">
<div className="w-full md:w-4/12 ml-auto mr-auto px-4">
<img
alt="..."
className="max-w-full rounded-lg shadow-lg"
src="https://images.unsplash.com/photo-1555212697-194d092e3b8f?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=634&q=80"
/>
</div>
<div className="w-full md:w-5/12 ml-auto mr-auto px-4">
<div className="md:pr-12">
<div className="text-blueGray-500 p-3 text-center inline-flex items-center justify-center w-16 h-16 mb-6 shadow-lg rounded-full bg-blueGray-200">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#000" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h3 className="text-3xl font-semibold">
<Input
placeholder={"section3-h"}
value={data.find((item) => item.key === "section3-h")?.value}
onChange={(e: any) =>
handleInputChange("section3-h", e.target.value)
}
/>
</h3>
<p className="mt-4 text-lg leading-relaxed text-blueGray-500">
<Input.TextArea
placeholder={"section3-p"}
value={data.find((item) => item.key === "section3-p")?.value}
onChange={(e: any) =>
handleInputChange("section3-p", e.target.value)
}
/>
</p>
</div>
</div>
</div>
</div>
</section>
<section className="pt-20 pb-48">
<div className="container mx-auto px-4">
<div className="flex flex-wrap justify-center text-center mb-24">
<div className="w-full lg:w-6/12 px-4">
<h2 className="text-4xl font-semibold">
<Input
placeholder={"Hero-title"}
value={data.find((item) => item.key === "Hero-title")?.value}
onChange={(e: any) =>
handleInputChange("Hero-title", e.target.value)
}
/>
</h2>
<p className="text-lg leading-relaxed m-4 text-blueGray-500">
<Input.TextArea
placeholder={"Hero-p"}
value={data.find((item) => item.key === "Hero-p")?.value}
onChange={(e: any) =>
handleInputChange("Hero-p", e.target.value)
}
/>
</p>
</div>
</div>
<div className="flex flex-wrap">
<div className="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div className="px-6">
<img
alt="..."
src="/images/Reem.jpg"
className="shadow-lg rounded-full mx-auto max-w-120-px"
/>
<div className="pt-6 text-center">
<h5 className="text-xl font-bold">REEM HASAN</h5>
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
Web Developer
</p>
</div>
</div>
</div>
<div className="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div className="px-6">
<img
alt="..."
src="/images/Ali.jpg"
className="shadow-lg rounded-full mx-auto max-w-120-px"
/>
<div className="pt-6 text-center">
<h5 className="text-xl font-bold">ALI MOUHAMMAD</h5>
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
Marketing Specialist
</p>
</div>
</div>
</div>
<div className="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div className="px-6">
<img
alt="..."
src="/images/Bashar.jpg"
className="shadow-lg rounded-full mx-auto max-w-120-px"
/>
<div className="pt-6 text-center">
<h5 className="text-xl font-bold">BASHAR HUSSAIN</h5>
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
UI/UX Designer
</p>
</div>
</div>
</div>
<div className="w-full md:w-6/12 lg:w-3/12 lg:mb-0 mb-12 px-4">
<div className="px-6">
<img
alt="..."
src="/images/Nour.jpg"
className="shadow-lg rounded-full mx-auto max-w-120-px"
/>
<div className="pt-6 text-center">
<h5 className="text-xl font-bold">NOUR</h5>
<p className="mt-1 text-sm text-blueGray-400 uppercase font-semibold">
Founder and CEO
</p>
</div>
</div>
</div>
</div>
</div>
</section>
<section className="pb-20 relative block bg-blueGray-800">
<div
className="bottom-auto top-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden -mt-20 h-20"
style={{ transform: "translateZ(0)" }}
>
<svg
className="absolute bottom-0 overflow-hidden"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="none"
version="1.1"
viewBox="0 0 2560 100"
x="0"
y="0"
>
<polygon
className="text-blueGray-800 fill-current"
points="2560 0 2560 100 0 100"
></polygon>
</svg>
</div>
<div className="container mx-auto px-4 lg:pt-24 lg:pb-64">
<div className="flex flex-wrap text-center justify-center">
<div className="w-full lg:w-6/12 px-4">
<h2 className="text-4xl font-semibold text-white">{t("more-info").toUpperCase}</h2>
</div>
</div>
<div className="flex flex-wrap mt-12 justify-center">
<div className="w-full lg:w-3/12 px-4 text-center">
<div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#000" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h6 className="text-xl mt-5 font-semibold text-white">
<Input
placeholder={"moreInfo-h1"}
value={data.find((item) => item.key === "moreInfo-h1")?.value}
onChange={(e: any) =>
handleInputChange("moreInfo-h1", e.target.value)
}
/>
</h6>
<p className="mt-2 mb-4 text-blueGray-400">
<Input.TextArea
placeholder={"moreInfo-p1"}
value={data.find((item) => item.key === "moreInfo-p1")?.value}
onChange={(e: any) =>
handleInputChange("moreInfo-p1", e.target.value)
}
/>
</p>
</div>
<div className="w-full lg:w-3/12 px-4 text-center">
<div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#000" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h5 className="text-xl mt-5 font-semibold text-white">
<Input
placeholder={"moreInfo-h2"}
value={data.find((item) => item.key === "moreInfo-h2")?.value}
onChange={(e: any) =>
handleInputChange("moreInfo-h2", e.target.value)
}
/>
</h5>
<p className="mt-2 mb-4 text-blueGray-400">
<Input.TextArea
placeholder={"moreInfo-p2"}
value={data.find((item) => item.key === "moreInfo-p2")?.value}
onChange={(e: any) =>
handleInputChange("moreInfo-p2", e.target.value)
}
/>
</p>
</div>
<div className="w-full lg:w-3/12 px-4 text-center">
<div className="text-blueGray-800 p-3 w-12 h-12 shadow-lg rounded-full bg-white inline-flex items-center justify-center">
<ExclamationOutlined
style={{ fontSize: "30px", color: "#000" }}
className={"ExclamationCircleOutlined "}
/>
</div>
<h5 className="text-xl mt-5 font-semibold text-white">
<Input
placeholder={"moreInfo-h3"}
value={data.find((item) => item.key === "moreInfo-h3")?.value}
onChange={(e: any) =>
handleInputChange("moreInfo-h3", e.target.value)
}
/>
</h5>
<p className="mt-2 mb-4 text-blueGray-400">
<Input.TextArea
placeholder={"moreInfo-p3"}
value={data.find((item) => item.key === "moreInfo-p3")?.value}
onChange={(e: any) =>
handleInputChange("moreInfo-p3", e.target.value)
}
/>
</p>
</div>
</div>
</div>
</section>
<section className="relative block py-24 lg:pt-0 bg-blueGray-800">
<div className="container mx-auto px-4">
<div className="flex flex-wrap justify-center lg:-mt-64 -mt-48">
<div className="w-full lg:w-6/12 px-4">
<div className="relative flex flex-col min-w-0 break-words w-full mb-6 shadow-lg rounded-lg bg-blueGray-200">
<div className="flex-auto p-5 lg:p-10">
<h4 className="text-2xl font-semibold">
Want to work with us?
</h4>
<p className="leading-relaxed mt-1 mb-4 text-blueGray-500">
Complete this form and we will get back to you in 24
hours.
</p>
<div className="relative w-full mb-3 mt-8">
<label
className="block uppercase text-blueGray-600 text-xs font-bold mb-2"
htmlFor="full-name"
>
{t("full-name").toUpperCase()}
</label>
<input
type="text"
className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150"
placeholder="Full Name"
value={formData.subject}
onChange={(e) =>
setFormData({ ...formData, subject: e.target.value })
}
/>
</div>
<div className="relative w-full mb-3">
<label
className="block uppercase text-blueGray-600 text-xs font-bold mb-2"
htmlFor="email"
>
{t("email")}
</label>
<input
type="email"
className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150"
placeholder="Email"
value={formData.email}
onChange={(e) =>
setFormData({ ...formData, email: e.target.value })
}
/>
</div>
<div className="relative w-full mb-3">
<label
className="block uppercase text-blueGray-600 text-xs font-bold mb-2"
htmlFor="message"
>
{t("message")}
</label>
<textarea
rows="4"
cols="80"
className="border-0 px-3 py-3 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full"
placeholder="Type a message..."
value={formData.body}
onChange={(e) =>
setFormData({ ...formData, body: e.target.value })
}
/>
</div>
<div className="text-center mt-6">
<button
className="bg-blueGray-800 text-white active:bg-blueGray-600 text-sm font-bold uppercase px-6 py-3 rounded shadow hover:shadow-lg outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150"
type="button"
onClick={sendMessage}
>
{t("send")}
</button>
<div>
{sendingStatus == "success" && (
<Alert
message="Message was sent successfully"
type="success"
/>
)}
{sendingStatus == "error" && (
<Alert message="Sending errors" type="error" />
)}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
</>
);
}
import { useState } from "react";
import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core";
import FmsButton from "../../../../shared-library/src/buttons/fms-button";
import { DatePicker, Input, Select } from "antd";
import { FileAddOutlined, UploadOutlined } from "@ant-design/icons";
const SettingProfileContent = () => {
const { t } = useTranslation(TranslationFiles.COMMON);
const [imageSrc, setImageSrc] = useState("/images/Reem.jpg");
const handleImageUpload = (e) => {
const file = e.target.files[0];
const reader = new FileReader();
reader.onloadend = () => {
setImageSrc(reader.result);
};
reader.readAsDataURL(file);
};
return (
<>
<main className="profile-page">
<section className="relative block h-500-px">
<div
className="absolute top-0 w-full h-full bg-center bg-cover"
style={{
backgroundImage:
"url('https://images.unsplash.com/photo-1499336315816-097655dcfbda?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2710&q=80')",
}}
>
<span
id="blackOverlay"
className="w-full h-full absolute opacity-50 bg-black"
></span>
</div>
<div
className="top-auto bottom-0 left-0 right-0 w-full absolute pointer-events-none overflow-hidden h-16"
style={{ transform: "translateZ(0)" }}
>
<svg
className="absolute bottom-0 overflow-hidden"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="none"
version="1.1"
viewBox="0 0 2560 100"
x="0"
y="0"
>
<polygon
className="text-blueGray-200 fill-current"
points="2560 0 2560 100 0 100"
></polygon>
</svg>
</div>
</section>
<section className="relative py-16 bg-blueGray-200">
<div className="container mx-auto px-4">
<div className="relative flex flex-col min-w-0 break-words bg-white w-full mb-6 shadow-xl rounded-lg -mt-64">
<div className="px-6">
<div className="flex flex-wrap justify-center">
<div className="w-full lg:w-3/12 px-4 lg:order-2 flex justify-center">
<div className="relative">
<label htmlFor="image-upload" className="file-input-label">
<img
alt="..."
src={imageSrc}
className="shadow-xl rounded-full h-auto align-middle border-none absolute -m-16 -ml-20 lg:-ml-16 max-w-150-px"
/>
<div className="add-image-button pd-top">
<FmsButton
type={"secondary"}
className={"pd-top"}
size={"large"}
borderRadius={8}
onclick={
handleImageUpload
}
>
<input
type="file"
id="image-upload"
accept=".jpg,.jpeg,.png"
onChange={handleImageUpload}
// className="hidden"
/>
</FmsButton>
</div>
</label>
</div>
</div>
<div className="w-full lg:w-4/12 px-4 lg:order-3 lg:text-right lg:self-center">
<div className="py-6 px-3 mt-32 sm:mt-0">
<FmsButton
className="bg-blueGray-700 active:bg-blueGray-600 uppercase text-white font-bold hover:shadow-md shadow text-xs px-4 py-2 rounded outline-none focus:outline-none sm:mr-2 mb-1 ease-linear transition-all duration-150"
type="primary"
borderRadius="32"
>
{t("save")}
</FmsButton>
</div>
</div>
<div className="w-full lg:w-4/12 px-4 lg:order-1">
<div className="flex justify-center py-4 lg:pt-4 pt-8">
<div className="mr-4 p-3 text-center">
<span className="text-xl font-bold block uppercase tracking-wide text-blueGray-600">
</span>
<span className="text-sm text-blueGray-400">
</span>
</div>
<div className="pd-top mr-4 p-3 text-center">
<span className=" text-xl font-bold block uppercase tracking-wide text-blueGray-600">
<Select
placeholder={t("gender")}
// value={""}
onChange={(e: any) =>
{}
}
/>
</span>
</div>
<div className="pd-top lg:mr-4 p-3 text-center">
<span className="text-xl font-bold block uppercase tracking-wide text-blueGray-600">
<DatePicker
placeholder={t("start-working-date")}
// value={""}
onChange={(e: any) =>
{}}/>
</span>
</div>
</div>
</div>
</div>
<div className="text-center mt-12">
<h3 className="text-4xl font-semibold leading-normal mb-2 text-blueGray-700 mb-2">
<Input
className={"med-size"}
placeholder={"name"}
// value={""}
onChange={(e: any) =>
{}
}/>
</h3>
<div className="text-sm leading-normal mt-0 mb-2 text-blueGray-400 font-bold uppercase">
<i className="fas fa-map-marker-alt text-lg text-blueGray-400"></i>
<Input
className={"med-size"}
placeholder={"country"}
// value={""}
onChange={(e: any) =>
{}
}/>
</div>
</div>
<div className="mt-10 py-10 border-t border-blueGray-200 text-center">
<div className="flex flex-wrap justify-center">
<div className="w-full lg:w-9/12 px-4">
<p className="mb-4 text-lg leading-relaxed text-blueGray-700">
<Input
placeholder={"role"}
// value={""}
onChange={(e: any) =>
{}
}/>
</p>
<div className="mb-2 text-lightBlue-500 mt-10">
<i className="fas fa-briefcase mr-2 text-lg text-blueGray-400"></i>
{t("description")}
</div>
<div className="mb-2 text-lightBlue-500">
<i className="fas fa-university mr-2 text-lg "></i>
<Input.TextArea
placeholder={"description"}
// value={""}
onChange={(e: any) =>
{}
}/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
</>
);
};
export default SettingProfileContent;
...@@ -9,6 +9,7 @@ import { DataSource } from "./data-source"; ...@@ -9,6 +9,7 @@ import { DataSource } from "./data-source";
import ShowDetailsPopup from "./show-details-popup"; import ShowDetailsPopup from "./show-details-popup";
import axios from "axios"; import axios from "axios";
import { Spin } from "antd"; import { Spin } from "antd";
import { fetchData } from "@/src/services/traps-service";
export default function ShowTraps() { export default function ShowTraps() {
const { t } = useTranslation(TranslationFiles.COMMON); const { t } = useTranslation(TranslationFiles.COMMON);
...@@ -21,80 +22,64 @@ export default function ShowTraps() { ...@@ -21,80 +22,64 @@ export default function ShowTraps() {
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
useEffect(() => { useEffect(() => {
setLoading(true); setLoading(true);
const fetchData = async () => { fetchData().then((transformedData) => {
axios if(transformedData)
.get("http://192.168.93.198:6647/api/rethink/data")
.then((res: any) => {
if (res.data) {
// console.log(res.data);
const transformedData = res.data.map((item: any) => ({
id: item.id,
timestamp: item.timestamp,
agentAddress: item.agentAddress,
severity: item.severity,
specificTrap: item.specificTrap,
genericTrap: item.genericTrap,
variableBindings: item.variableBindings,
}));
setData1(transformedData); setData1(transformedData);
// console.log(data1);
if(new_val!=null){ if(new_val!=null){
if (new_val.flag == '0') { if (new_val.flag == '0') {
// const transformedData2 =data.map((newData:any)=>({
// id: newData.id,
// timestamp: newData.timestamp,
// agentAddress: newData.agentAddress,
// severity: newData.severity,
// specificTrap: newData.specificTrap,
// genericTrap: newData.genericTrap,
// variableBindings: newData.variableBindings,
// }))
console.log(new_val); console.log(new_val);
setData1((prevData:any) => [...prevData, new_val]); setData1((prevData:any) => [...prevData, new_val]);
setNewVal(null); setNewVal(null);
// transformedData2.forEach((item:any) => {
// setData1((prevData:any) => [...prevData, item]);
// });
} }
else if (new_val.flag==-1){ else if (new_val.flag==-1){
setData1((prevData:any) => prevData.filter((item:any) => item.id !== new_val.id)); setData1((prevData:any) => prevData.filter((item:any) => item.id !== new_val.id));
} }
} }
} });
else {
alert("Error");
}
})
.catch((err: any) => console.log(err));
};
fetchData();
setLoading(false); setLoading(false);
}, [new_val]); }, [new_val]);
// useEffect(() => { // useEffect(() => {
// if (!websocket) { // setLoading(true);
// return; // const fetchData = async () => {
// } // axios
// .get("http://192.168.93.198:6647/api/rethink/data")
// .then((res: any) => {
// if (res.data) {
// const transformedData = res.data.map((item: any) => ({
// id: item.id,
// timestamp: item.timestamp,
// agentAddress: item.agentAddress,
// severity: item.severity,
// specificTrap: item.specificTrap,
// genericTrap: item.genericTrap,
// variableBindings: item.variableBindings,
// }));
// setData1(transformedData);
// if(new_val!=null){
// if (new_val.flag == '0') {
// websocket.onmessage = function (event) { // console.log(new_val);
// const message = JSON.parse(event.data); // setData1((prevData:any) => [...prevData, new_val]);
// setNewVal(null);
// const newData = message.new_val; // }
// const transformedData = { // else if (new_val.flag==-1){
// id: newData.id, // setData1((prevData:any) => prevData.filter((item:any) => item.id !== new_val.id));
// agentAddress: newData.agentAddress, // }
// timestamp: newData.timestamp, // }
// severity: newData.severity, // }
// specificTrap: newData.specificTrap, // else {
// genericTrap: newData.genericTrap, // alert("Error");
// variableBindings: newData.variableBindings, // }
// }; // })
// setData((prevData: any) => [...prevData, transformedData]); // .catch((err: any) => console.log(err));
// }; // };
// fetchData();
// setLoading(false);
// }, [new_val]);
// }, [websocket]);
return ( return (
<div> <div>
<Spin spinning={loading}> <Spin spinning={loading}>
......
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import FmsButton from "../../../../shared-library/src/buttons/fms-button"; import FmsButton from "../../../../shared-library/src/buttons/fms-button";
export const Columns = [ export function getColumns(setModalProps:any) {
return [
{ {
title: "Name", title: "Name",
dataIndex: "name", dataIndex: "name",
...@@ -19,20 +20,14 @@ export const Columns = [ ...@@ -19,20 +20,14 @@ export const Columns = [
{ {
title: "Actions", title: "Actions",
key: "actions", key: "actions",
render: (text:any, record:any) => ( render: (text: any, record: any) => (
<span> <FmsButton
<EditButton id={record.id} /> type="primary"
</span> onClick={() => setModalProps({ isOpen: true, data: null})}
>
{"edit"}
</FmsButton>
), ),
}, },
]; ];
const EditButton = ({ id }) => {
const router = useRouter(); // Get the router object from useRouter
const handleEditClick = () => {
router.push(`/edit-user`); // Navigate to the edit page URL
};
return <FmsButton type = "link" onClick={handleEditClick}>Edit</FmsButton>;
}; };
\ No newline at end of file
import React, {useState, useEffect} from "react";
import { Col, DatePicker, Input, Modal, Row, Select } from "antd";
import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core";
interface Props {
modalProps: any;
setModalProps: any;
}
export default function EditUserPopup({ modalProps, setModalProps }: Props) {
const { t } = useTranslation(TranslationFiles.COMMON);
const [isModalOpen,setIsModalOpen] = useState(false);
const handleCancel = () => {
setModalProps(false,null);
};
useEffect(() => {
setIsModalOpen(modalProps.isOpen);
}, [modalProps])
return (
<Modal title="edit-user" visible={isModalOpen} onOk={handleCancel} onCancel={handleCancel}>
<Row gutter={[12, 12]}>
<Col span={24}>
<Input />
</Col>
<Col span={24}>
<Input />
</Col>
<Col span={24}>
<Select />
</Col>
<Col span={24}>
<Select />
</Col>
<Col span={24}>
<Select />
</Col>
<Col span={24}>
<DatePicker />
</Col>
<Col span={24}>
<Input.TextArea />
</Col>
</Row>
</Modal>
);
}
\ No newline at end of file
...@@ -3,28 +3,33 @@ import { useState } from "react"; ...@@ -3,28 +3,33 @@ import { useState } from "react";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { TranslationFiles } from "@/src/data/core"; import { TranslationFiles } from "@/src/data/core";
import FmsTable from "../../../../shared-library/src/tables/fms-table"; import FmsTable from "../../../../shared-library/src/tables/fms-table";
import { Columns } from "./columns"; import { getColumns } from "./columns";
import { DataSource } from "./data-source"; import { DataSource } from "./data-source";
import EditUserPopup from "./edit-user-popup"
export default function ShowUsers() { export default function ShowUsers() {
const { t } = useTranslation(TranslationFiles.COMMON); const { t } = useTranslation(TranslationFiles.COMMON);
const [columns, setColumns] = useState({ const [modalProps, setModalProps] = useState({
columns: Columns isOpen: false,
data: null,
}); });
const [data, setData] = useState(DataSource); const [data, setData] = useState(DataSource);
return ( return (
<div> <div>
<FmsTable <FmsTable
title={t("users")} title={t("users")}
columns={columns.columns} columns={getColumns(setModalProps)}
data={data} data={data}
rowSelection={{ rowSelection={{
type: "checkbox", type: "checkbox",
}} }}
t={t} t={t}
setData= {setData} setData= {setData}
setColumns={setColumns}
pageSizeOptions={["10", "20", "50"]} pageSizeOptions={["10", "20", "50"]}
defaultPageSize={10} defaultPageSize={10}
/>
<EditUserPopup
modalProps={modalProps}
setModalProps={setModalProps}
/> />
</div> </div>
); );
......
import axios from "axios";
import {SettingURL} from "../data/constant/app-constant";
export const fetchAboutSettingData = async () => {
try {
const response = await axios.get(SettingURL+"/data");
if (response.data) {
const data = response.data.map((item:any) => ({
id: item.id,
key: item.key,
value: item.value,
}));
return data;
} else {
alert("Error");
}
} catch (error) {
console.log(error);
}
};
export const putAboutSettingData = async (data:any) => {
try {
const response = await axios.post(SettingURL+"/post",data);
console.log(response.data);
} catch (error) {
console.error(error);
}
};
export const deleteByKeyAboutSettingData = async (key:any) => {
try {
const response = await axios.delete(SettingURL+`/delete/${key}`);
console.log(response.data);
} catch (error) {
console.error(error);
}
};
export const UpdateAboutSettingData = async (data:any) => {
try {
const response = await axios.put(SettingURL+`/update`, data);
console.log(response);
return response;
} catch (error) {
console.error(error);
return error;
}
};
export const sendEmailMessage = async (data:any) => {
try {
const response = await axios.post(SettingURL+`/send-message`, data);
return response.data;
} catch (error) {
return error;
}
};
\ No newline at end of file
import axios from "axios";
import {TrapURL} from "../data/constant/app-constant";
export const fetchData = async () => {
try {
const response = await axios.get(TrapURL);
if (response.data) {
const transformedData = response.data.map((item:any) => ({
id: item.id,
timestamp: item.timestamp,
agentAddress: item.agentAddress,
severity: item.severity,
specificTrap: item.specificTrap,
genericTrap: item.genericTrap,
variableBindings: item.variableBindings,
}));
return transformedData;
} else {
alert("Error");
}
} catch (error) {
console.log(error);
}
};
\ No newline at end of file
...@@ -149,21 +149,47 @@ a { ...@@ -149,21 +149,47 @@ a {
color: #e2d303; color: #e2d303;
font-weight: 1000; font-weight: 1000;
// font-size: larger; // font-size: larger;
font-family: 'Times New Roman', Times, serif; font-family: "Times New Roman", Times, serif;
} }
.severity-ERROR { .severity-ERROR {
color: #ff2306; color: #ff2306;
font-weight: 1000; font-weight: 1000;
// font-size: larger; // font-size: larger;
font-family: 'Times New Roman', Times, serif; font-family: "Times New Roman", Times, serif;
} }
.severity-INFO { .severity-INFO {
color: #06ff83; color: #06ff83;
font-weight: 1000; font-weight: 1000;
// font-size: larger; // font-size: larger;
font-family: 'Times New Roman', Times, serif; font-family: "Times New Roman", Times, serif;
} }
.ExclamationCircleOutlined { .ExclamationCircleOutlined {
margin-bottom: 2px; margin-bottom: 2px;
} }
.pd {
margin-bottom: 20px;
}
.pd-top {
margin-top: 20px;
}
.med-size {
width: 20vw;
}
.add-image-button {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
margin: 15px;
margin-top: 40px;
}
.file-input-label input[type="file"] {
// margin: 20px;
cursor: pointer;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment