2024-01-18 16:49:47 +01:00
|
|
|
import { Button, CunninghamProvider } from "@openfun/cunningham-react";
|
|
|
|
|
import React, { useEffect, useState } from "react";
|
|
|
|
|
import { Create } from "./Create";
|
|
|
|
|
import { Home } from "./Home";
|
2023-02-20 16:27:37 +01:00
|
|
|
|
2023-09-26 11:39:28 +02:00
|
|
|
enum Theme {
|
|
|
|
|
DEFAULT = "default",
|
|
|
|
|
DARK = "dark",
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-18 16:49:47 +01:00
|
|
|
export enum Page {
|
|
|
|
|
HOME,
|
|
|
|
|
CREATE,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface PageProps {
|
|
|
|
|
changePage: (page: Page) => void;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const preferredScheme = window.matchMedia("(prefers-color-scheme: dark)")
|
|
|
|
|
.matches
|
|
|
|
|
? Theme.DARK
|
|
|
|
|
: Theme.DEFAULT;
|
2023-09-26 11:39:28 +02:00
|
|
|
|
2023-02-20 16:27:37 +01:00
|
|
|
export const App = () => {
|
2024-01-18 16:49:47 +01:00
|
|
|
const [locale] = useState("en-US");
|
|
|
|
|
const [theme, setTheme] = useState<Theme>(preferredScheme);
|
|
|
|
|
const [page, setPage] = useState<Page>(Page.HOME);
|
|
|
|
|
const handleThemeChange = (event: MediaQueryListEvent) =>
|
|
|
|
|
setTheme(event.matches ? Theme.DARK : Theme.DEFAULT);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
const query = window.matchMedia("(prefers-color-scheme: dark)");
|
|
|
|
|
query.addEventListener("change", handleThemeChange);
|
|
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
|
query.removeEventListener("change", handleThemeChange);
|
|
|
|
|
};
|
|
|
|
|
}, []);
|
|
|
|
|
|
2023-02-20 16:27:37 +01:00
|
|
|
return (
|
2023-09-26 11:39:28 +02:00
|
|
|
<CunninghamProvider currentLocale={locale} theme={theme}>
|
2024-01-18 16:49:47 +01:00
|
|
|
<div className="container">
|
|
|
|
|
<img
|
|
|
|
|
className="pattern"
|
|
|
|
|
src={
|
|
|
|
|
theme === Theme.DARK ? "pattern_dark.png" : "pattern_default.png"
|
|
|
|
|
}
|
|
|
|
|
alt="Background pattern"
|
2023-09-26 11:39:28 +02:00
|
|
|
/>
|
2024-01-18 16:49:47 +01:00
|
|
|
{page === Page.HOME && <Home changePage={(p) => setPage(p)} />}
|
|
|
|
|
{page === Page.CREATE && <Create changePage={(p) => setPage(p)} />}
|
|
|
|
|
</div>
|
2023-09-26 11:39:28 +02:00
|
|
|
|
2024-01-18 16:49:47 +01:00
|
|
|
<div className="theme-switch">
|
|
|
|
|
<Button
|
|
|
|
|
color="tertiary"
|
|
|
|
|
icon={
|
|
|
|
|
<span className="material-icons">
|
|
|
|
|
{theme === Theme.DARK ? "light_mode" : "dark_mode"}
|
|
|
|
|
</span>
|
|
|
|
|
}
|
|
|
|
|
onClick={() => {
|
|
|
|
|
setTheme(theme === Theme.DARK ? Theme.DEFAULT : Theme.DARK);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
2023-03-06 16:32:02 +01:00
|
|
|
</div>
|
|
|
|
|
</CunninghamProvider>
|
2023-02-20 16:27:37 +01:00
|
|
|
);
|
|
|
|
|
};
|