aboutsummaryrefslogtreecommitdiff
path: root/components/admin/dashboard
diff options
context:
space:
mode:
authorFactiven <[email protected]>2023-09-26 23:35:35 +0700
committerFactiven <[email protected]>2023-09-26 23:35:35 +0700
commit20b8a7267827e3a07c1eef668c3b9c22fda43765 (patch)
tree2fec9006dfac5737d8b227bf5ccce73880800cc2 /components/admin/dashboard
parentUpdate release.md (diff)
downloadmoopa-4.1.2.tar.xz
moopa-4.1.2.zip
Update v4.1.2v4.1.2
Diffstat (limited to 'components/admin/dashboard')
-rw-r--r--components/admin/dashboard/index.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/components/admin/dashboard/index.js b/components/admin/dashboard/index.js
new file mode 100644
index 0000000..64a1d6f
--- /dev/null
+++ b/components/admin/dashboard/index.js
@@ -0,0 +1,134 @@
+import React, { useState } from "react";
+
+export default function AdminDashboard({
+ animeCount,
+ infoCount,
+ metaCount,
+ report,
+}) {
+ const [message, setMessage] = useState("");
+ const [selectedTime, setSelectedTime] = useState("");
+ const [unixTimestamp, setUnixTimestamp] = useState(null);
+
+ const handleSubmit = (e) => {
+ e.preventDefault();
+
+ if (selectedTime) {
+ const unixTime = Math.floor(new Date(selectedTime).getTime() / 1000);
+ setUnixTimestamp(unixTime);
+ }
+ };
+ return (
+ <div className="flex flex-col gap-5 px-5 py-10 h-full">
+ <div className="flex flex-col gap-2">
+ <p className="font-semibold">Stats</p>
+ <div className="grid grid-cols-3 gap-5">
+ <div className="flex-center flex-col bg-secondary rounded p-5">
+ <p className="font-karla text-4xl">{animeCount}</p>
+ <p className="font-karla text-xl">Anime</p>
+ </div>
+ <div className="flex-center flex-col bg-secondary rounded p-5">
+ <p className="font-karla text-4xl">{infoCount}</p>
+ <p className="font-karla text-xl">detail info</p>
+ </div>
+ <div className="flex-center flex-col bg-secondary rounded p-5">
+ <p className="font-karla text-4xl">{metaCount}</p>
+ <p className="font-karla text-xl">Metadata</p>
+ </div>
+ </div>
+ </div>
+ <div className="grid grid-cols-2 gap-5 h-full">
+ <div className="flex flex-col gap-2">
+ <p className="font-semibold">Broadcast</p>
+ <div className="flex flex-col justify-between bg-secondary rounded p-5 h-full">
+ <form onSubmit={handleSubmit}>
+ <div className="mb-4">
+ <label
+ htmlFor="message"
+ className="block text-txt font-light mb-2"
+ >
+ Message
+ </label>
+ <input
+ type="text"
+ id="message"
+ value={message}
+ onChange={(e) => setMessage(e.target.value)}
+ required
+ className="w-full px-3 py-2 border rounded-md focus:outline-none text-black"
+ />
+ </div>
+ <div className="mb-4">
+ <label
+ htmlFor="selectedTime"
+ className="block text-txt font-light mb-2"
+ >
+ Select Time
+ </label>
+ <input
+ type="datetime-local"
+ id="selectedTime"
+ value={selectedTime}
+ onChange={(e) => setSelectedTime(e.target.value)}
+ required
+ className="w-full px-3 py-2 border rounded-md focus:outline-none text-black"
+ />
+ </div>
+ <button
+ type="submit"
+ className="bg-image text-white py-2 px-4 rounded-md hover:bg-opacity-80 transition duration-300"
+ >
+ Submit
+ </button>
+ </form>
+ {unixTimestamp && (
+ <p>
+ Unix Timestamp: <strong>{unixTimestamp}</strong>
+ </p>
+ )}
+ </div>
+ </div>
+ <div className="flex flex-col gap-2">
+ <p className="font-semibold">Recent Reports</p>
+ <div className="bg-secondary rounded p-5 h-full">
+ <div className="rounded overflow-hidden w-full h-full">
+ {report?.map((i, index) => (
+ <div
+ key={index}
+ className="odd:bg-primary/80 even:bg-primary/40 p-2 flex justify-between items-center"
+ >
+ {i.desc}{" "}
+ {i.severity === "Low" && (
+ <span className="relative w-5 h-5 flex-center shrink-0">
+ {/* <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-rose-500 opacity-75"></span> */}
+ <span className="relative inline-flex rounded-full h-3 w-3 bg-green-500"></span>
+ </span>
+ )}
+ {i.severity === "Medium" && (
+ <span className="relative w-5 h-5 flex-center shrink-0">
+ {/* <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-rose-500 opacity-75"></span> */}
+ <span className="relative inline-flex rounded-full h-3 w-3 bg-amber-500"></span>
+ </span>
+ )}
+ {i.severity === "High" && (
+ <span className="relative w-5 h-5 flex-center shrink-0">
+ {/* <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-rose-500 opacity-75"></span> */}
+ <span className="relative animate-pulse inline-flex rounded-full h-3 w-3 bg-rose-500"></span>
+ </span>
+ )}
+ {i.severity === "Critical" && (
+ <span className="relative w-5 h-5 flex-center shrink-0">
+ <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-red-900 opacity-75"></span>
+ <span className="relative inline-flex rounded-full h-3 w-3 bg-red-900"></span>
+ </span>
+ )}
+ </div>
+ ))}
+ </div>
+ </div>
+ </div>
+ </div>
+ <div className="w-full h-full">a</div>
+ </div>
+ );
+}