1
0
mirror of https://github.com/upscayl/upscayl.git synced 2024-12-18 10:26:04 +01:00
upscayl/renderer/components/upscayl-cloud-modal.tsx

132 lines
4.0 KiB
TypeScript
Raw Normal View History

2023-08-30 09:16:54 +02:00
import { useState } from "react";
2023-08-30 09:58:15 +02:00
import { waitlistCollection } from "../firebase";
import { doc, setDoc } from "firebase/firestore";
import { useAtomValue } from "jotai";
import { translationAtom } from "@/atoms/translations-atom";
2023-08-30 09:16:54 +02:00
const nameRegex = /^[A-Za-z\s.'-]+$/;
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
2023-09-03 11:16:48 +02:00
export const UpscaylCloudModal = ({ show, setShow, setDontShowCloudModal }) => {
2023-08-30 09:16:54 +02:00
const [name, setName] = useState("");
const [email, setEmail] = useState("");
const t = useAtomValue(translationAtom);
2023-08-30 09:16:54 +02:00
2023-08-30 07:53:53 +02:00
return (
<dialog className={`modal ${show && "modal-open"}`}>
<div className="modal-box flex flex-col items-center gap-4 text-center">
2023-09-03 11:16:48 +02:00
<button
className="btn btn-circle absolute right-4 top-2"
onClick={() => setShow(false)}
>
2023-09-03 11:16:48 +02:00
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
>
2023-09-03 11:16:48 +02:00
<rect
x="0"
y="0"
width="24"
height="24"
fill="none"
stroke="none"
/>
<path
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-width="1.5"
d="m8.464 15.535l7.072-7.07m-7.072 0l7.072 7.07"
/>
</svg>
</button>
<p className="badge badge-neutral text-xs">
{t("UPSCAYL_CLOUD.COMING_SOON")}
</p>
<p className="text-2xl font-semibold">{t("INTRO")}</p>
<p className="w-9/12 text-lg font-medium">
{t("UPSCAYL_CLOUD.CATCHY_PHRASE_1")}
2023-08-30 07:53:53 +02:00
</p>
<div className="flex flex-col gap-2 text-start">
<pre style={{ fontFamily: "inherit" }} className="leading-8">
{t("UPSCAYL_CLOUD.CATCHY_PHRASE_2")}
</pre>
2023-08-30 07:53:53 +02:00
</div>
2023-08-30 09:58:15 +02:00
<form
className="flex flex-col items-center gap-3"
onSubmit={async (e) => {
e.preventDefault();
2023-08-30 09:16:54 +02:00
if (
name &&
email &&
nameRegex.test(name) &&
emailRegex.test(email)
) {
try {
2023-08-30 09:58:15 +02:00
await setDoc(doc(waitlistCollection, email), {
2023-08-30 09:16:54 +02:00
name,
email,
});
} catch (error) {
alert(t("UPSCAYL_CLOUD.ALREADY_REGISTERED_ALERT", { name }));
2023-08-30 09:16:54 +02:00
return;
}
2023-08-30 09:58:15 +02:00
setName("");
setEmail("");
2023-09-03 11:16:48 +02:00
setDontShowCloudModal(true);
setShow(false);
alert(t("UPSCAYL_CLOUD.ADD_SUCCESS"));
2023-08-30 09:16:54 +02:00
} else {
alert(t("UPSCAYL_CLOUD.INCORRECT_FIELDS_ALERT"));
2023-08-30 09:16:54 +02:00
}
}}
>
<div className="grid grid-cols-2 gap-2">
2023-08-30 09:58:15 +02:00
<input
type="text"
className="input input-bordered"
placeholder="Name"
value={name}
onChange={(e) => setName(e.target.value)}
/>
<input
type="email"
className="input input-bordered"
placeholder="Email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
</div>
<button
type="submit"
className="rounded-2xl bg-success px-4 py-2 text-success-content"
>
{t("UPSCAYL_CLOUD.JOIN_WAITLIST")}
2023-08-30 09:58:15 +02:00
</button>
2023-09-03 11:16:48 +02:00
<button
className="text-xs text-base-content/50"
onClick={() => {
setDontShowCloudModal(true);
setShow(false);
}}
type="button"
>
{t("UPSCAYL_CLOUD.DONT_SHOW_AGAIN")}
2023-09-03 11:16:48 +02:00
</button>
2023-08-30 09:58:15 +02:00
</form>
2023-08-30 07:53:53 +02:00
</div>
2023-08-30 09:16:54 +02:00
2023-08-30 07:53:53 +02:00
<form method="dialog" className="modal-backdrop">
<button onClick={() => setShow(false)}>
{t("APP.DIALOG_BOX.CLOSE")}
</button>
2023-08-30 07:53:53 +02:00
</form>
</dialog>
);
};