new domain popup start

Co-authored-by: Jip Frijlink <JipFr@users.noreply.github.com>
This commit is contained in:
mrjvs 2023-02-19 18:36:53 +01:00
parent b3db58012f
commit aaf0b56ee7
5 changed files with 95 additions and 40 deletions

27
src/components/Button.tsx Normal file
View File

@ -0,0 +1,27 @@
import { Icon, Icons } from "@/components/Icon";
import { ReactNode } from "react";
interface Props {
icon?: Icons;
onClick?: () => void;
children?: ReactNode;
}
// TODO style button
// TODO transition modal
export function Button(props: Props) {
return (
<button
type="button"
onClick={props.onClick}
className="inline-flex items-center justify-center"
>
{props.icon ? (
<span className="mr-3">
<Icon icon={props.icon} />
</span>
) : null}
{props.children}
</button>
);
}

View File

@ -18,7 +18,7 @@ export function Modal(props: Props) {
export function ModalCard(props: { children?: ReactNode }) { export function ModalCard(props: { children?: ReactNode }) {
return ( return (
<div className="relative w-4/5 max-w-[645px] overflow-hidden rounded-lg bg-denim-200 px-10 py-16"> <div className="relative w-4/5 max-w-[600px] overflow-hidden rounded-lg bg-denim-200 px-10 py-10">
{props.children} {props.children}
</div> </div>
); );

View File

@ -13,6 +13,11 @@ html[data-full], html[data-full] body {
overscroll-behavior-y: none; overscroll-behavior-y: none;
} }
body[data-no-scroll] {
overflow-y: hidden;
height: 100vh;
}
#root { #root {
padding: 0.05px; padding: 0.05px;
min-height: 100vh; min-height: 100vh;

View File

@ -77,5 +77,11 @@
"errors": { "errors": {
"fatalError": "The video player encounted a fatal error, please report it to the <0>Discord server</0> or on <1>GitHub</1>." "fatalError": "The video player encounted a fatal error, please report it to the <0>Discord server</0> or on <1>GitHub</1>."
} }
},
"v3": {
"newSiteTitle": "We have a new site!",
"newDomain": "https://movie-web.app",
"newDomainText": "We've moved from domain, you can now access our website on <0>https://movie-web.app</0>. Make sure to change all your bookmarks as <1>the old link will stop working on 25 Febuary 2023.</1>",
"tireless": "We've worked tirelessly on this new update, we hope you will enjoy what we've been cooking up for the past months."
} }
} }

View File

@ -1,5 +1,5 @@
import { useTranslation } from "react-i18next"; import { Trans, useTranslation } from "react-i18next";
import { Icons } from "@/components/Icon"; import { Icon, Icons } from "@/components/Icon";
import { SectionHeading } from "@/components/layout/SectionHeading"; import { SectionHeading } from "@/components/layout/SectionHeading";
import { MediaGrid } from "@/components/media/MediaGrid"; import { MediaGrid } from "@/components/media/MediaGrid";
import { import {
@ -9,10 +9,11 @@ import {
import { useWatchedContext } from "@/state/watched"; import { useWatchedContext } from "@/state/watched";
import { WatchedMediaCard } from "@/components/media/WatchedMediaCard"; import { WatchedMediaCard } from "@/components/media/WatchedMediaCard";
import { EditButton } from "@/components/buttons/EditButton"; import { EditButton } from "@/components/buttons/EditButton";
import { useMemo, useState } from "react"; import { useEffect, useState } from "react";
import { useAutoAnimate } from "@formkit/auto-animate/react"; import { useAutoAnimate } from "@formkit/auto-animate/react";
import { VideoPlayerIconButton } from "@/video/components/parts/VideoPlayerIconButton"; import { useHistory } from "react-router-dom";
import { useHistory, useLocation } from "react-router-dom"; import { Modal, ModalCard } from "@/components/layout/Modal";
import { Button } from "@/components/Button";
function Bookmarks() { function Bookmarks() {
const { t } = useTranslation(); const { t } = useTranslation();
@ -81,48 +82,64 @@ function Watched() {
); );
} }
function NewDomainInfo() { function NewDomainModal() {
const location = useLocation(); const [show, setShow] = useState(
new URLSearchParams(window.location.search).get("migrated") === "1"
);
const history = useHistory(); const history = useHistory();
const { t } = useTranslation();
useEffect(() => {
const newParams = new URLSearchParams(history.location.search);
newParams.delete("migrated");
history.replace({
search: newParams.toString(),
});
}, [history]);
// Hi Isra! (TODO remove this in the future lol)
return ( return (
<div className="relative -mx-5 rounded-r-lg rounded-l border-l-4 border-bink-400 bg-denim-300 px-5 py-6"> <Modal show={show}>
<VideoPlayerIconButton <ModalCard>
icon={Icons.X} <div className="mb-12">
className="absolute top-0 right-0 m-2" <div
onClick={() => { className="absolute left-0 top-0 h-[300px] w-full -translate-y-1/2 opacity-50"
const queryParams = new URLSearchParams(location.search); style={{
queryParams.delete("redirected"); backgroundImage: `radial-gradient(ellipse 70% 9rem, #7831C1 0%, transparent 100%)`,
history.replace({ }}
search: queryParams.toString(), />
}); <div className="relative flex items-center justify-center">
}} <div className="rounded-full bg-bink-200 py-4 px-12 text-xl font-bold text-white">
/> {t("v3.newDomain")}
<h2 className="text-lg font-bold text-white">Hey there!</h2> </div>
<p className="my-3"> </div>
Welcome to the long-awaited shiny new update of movie-web. This awesome </div>
updates includes an awesome new look, updated functionality, and even a <div className="space-y-6">
fully custom-built video player. <h2 className="text-2xl font-bold text-white">
</p> {t("v3.newSiteTitle")}
<p className="text-purple-200"> </h2>
We also have a new domain! Please be sure to update your bookmarks, as <p className="leading-7">
the old domain is going to stop working on <strong>May 31st</strong>. <Trans i18nKey="v3.newDomainText">
The new domain is <strong>movie-web.app</strong> <span className="font-bold text-white" />
</p> <span className="font-bold text-white" />
</div> </Trans>
</p>
<p>{t("v3.tireless")}</p>
</div>
<div className="mt-16 mb-6 flex items-center justify-center">
<Button icon={Icons.PLAY} onClick={() => setShow(false)}>
Take me to the app
</Button>
</div>
</ModalCard>
</Modal>
); );
} }
export function HomeView() { export function HomeView() {
const location = useLocation();
const showNewDomainInfo = useMemo(() => {
return location.search.includes("redirected=1");
}, [location.search]);
return ( return (
<div className={["mb-16", showNewDomainInfo ? "mt-16" : "mt-32"].join(" ")}> <div className="mb-16 mt-32">
{showNewDomainInfo ? <NewDomainInfo /> : ""} <NewDomainModal />
<Bookmarks /> <Bookmarks />
<Watched /> <Watched />
</div> </div>