Skip to content
This repository was archived by the owner on Jun 29, 2025. It is now read-only.

Commit d902aae

Browse files
committed
feat: use system color theme
1 parent db7edc4 commit d902aae

File tree

5 files changed

+51
-108
lines changed

5 files changed

+51
-108
lines changed

frontend/src/components/mantine/ThemeProvider.tsx

Lines changed: 0 additions & 41 deletions
This file was deleted.

frontend/src/components/navBar/ActionAvatar.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { ActionIcon, Avatar, Menu } from "@mantine/core";
22
import { NextLink } from "@mantine/next";
3-
import { DoorExit, Link, Moon } from "tabler-icons-react";
3+
import { DoorExit, Link } from "tabler-icons-react";
44
import authService from "../../services/auth.service";
5-
import ToggleThemeButton from "./ToggleThemeButton";
65

76
const ActionAvatar = () => {
87
return (
@@ -13,13 +12,12 @@ const ActionAvatar = () => {
1312
</ActionIcon>
1413
</Menu.Target>
1514
<Menu.Dropdown>
16-
<Menu.Label>My account</Menu.Label>
1715
<Menu.Item
1816
component={NextLink}
1917
href="/account/shares"
2018
icon={<Link size={14} />}
2119
>
22-
Shares
20+
My shares
2321
</Menu.Item>
2422
<Menu.Item
2523
onClick={async () => {
@@ -29,10 +27,6 @@ const ActionAvatar = () => {
2927
>
3028
Sign out
3129
</Menu.Item>
32-
<Menu.Label>Settings</Menu.Label>
33-
<Menu.Item icon={<Moon size={14} />}>
34-
<ToggleThemeButton />
35-
</Menu.Item>
3630
</Menu.Dropdown>
3731
</Menu>
3832
);

frontend/src/components/navBar/NavBar.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
Box,
23
Burger,
34
Container,
45
createStyles,
@@ -111,15 +112,15 @@ const NavBar = () => {
111112
const user = useUser();
112113
const [opened, toggleOpened] = useDisclosure(false);
113114

114-
const [authenticatedLinks, setAuthenticatedLinks] = useState<Link[]>([
115+
const authenticatedLinks = [
115116
{
116117
link: "/upload",
117118
label: "Upload",
118119
},
119120
{
120121
component: <ActionAvatar />,
121122
},
122-
]);
123+
];
123124

124125
const [unauthenticatedLinks, setUnauthenticatedLinks] = useState<Link[]>([
125126
{
@@ -149,16 +150,15 @@ const NavBar = () => {
149150
}, []);
150151

151152
const { classes, cx } = useStyles();
152-
console.log(user);
153153
const items = (
154154
<>
155155
{(user ? authenticatedLinks : unauthenticatedLinks).map((link) => {
156156
if (link.component) {
157157
return (
158158
<>
159-
<Container pl={5} py={15}>
159+
<Box pl={5} py={15}>
160160
{link.component}
161-
</Container>
161+
</Box>
162162
</>
163163
);
164164
}
@@ -185,8 +185,8 @@ const NavBar = () => {
185185
<Image
186186
src="/img/logo.svg"
187187
alt="Pinvgin Share Logo"
188-
height={40}
189-
width={40}
188+
height={35}
189+
width={35}
190190
/>
191191
<Text weight={600}>Pingvin Share</Text>
192192
</Group>

frontend/src/components/navBar/ToggleThemeButton.tsx

Lines changed: 0 additions & 19 deletions
This file was deleted.

frontend/src/pages/_app.tsx

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ import {
55
MantineProvider,
66
Stack,
77
} from "@mantine/core";
8+
import { useColorScheme } from "@mantine/hooks";
89
import { ModalsProvider } from "@mantine/modals";
910
import { NotificationsProvider } from "@mantine/notifications";
10-
import { getCookie } from "cookies-next";
11+
import { getCookie, setCookies } from "cookies-next";
1112
import { GetServerSidePropsContext } from "next";
1213
import type { AppProps } from "next/app";
13-
import getConfig from "next/config";
1414
import { useEffect, useState } from "react";
1515
import Footer from "../components/Footer";
16-
import ThemeProvider from "../components/mantine/ThemeProvider";
1716
import Header from "../components/navBar/NavBar";
1817
import { UserContext } from "../hooks/user.hook";
1918
import authService from "../services/auth.service";
@@ -23,56 +22,66 @@ import globalStyle from "../styles/mantine.style";
2322
import { CurrentUser } from "../types/user.type";
2423
import { GlobalLoadingContext } from "../utils/loading.util";
2524

26-
const { publicRuntimeConfig } = getConfig()
27-
2825
function App(
2926
props: AppProps & { colorScheme: ColorScheme; environmentVariables: any }
3027
) {
3128
const { Component, pageProps } = props;
29+
30+
const systemTheme = useColorScheme();
31+
3232
const [colorScheme, setColorScheme] = useState<ColorScheme>(
3333
props.colorScheme
3434
);
3535
const [isLoading, setIsLoading] = useState(true);
3636
const [user, setUser] = useState<CurrentUser | null>(null);
3737

3838
const getInitalData = async () => {
39-
console.log(publicRuntimeConfig)
4039
setIsLoading(true);
4140
setUser(await userService.getCurrentUser());
42-
4341
setIsLoading(false);
4442
};
43+
4544
useEffect(() => {
4645
setInterval(async () => await authService.refreshAccessToken(), 30 * 1000);
4746
getInitalData();
4847
}, []);
48+
49+
useEffect(() => {
50+
setCookies("mantine-color-scheme", systemTheme, {
51+
maxAge: 60 * 60 * 24 * 30,
52+
});
53+
setColorScheme(systemTheme);
54+
}, [systemTheme]);
55+
4956
return (
50-
<MantineProvider withGlobalStyles withNormalizeCSS theme={globalStyle}>
51-
<ThemeProvider colorScheme={colorScheme} setColorScheme={setColorScheme}>
52-
<GlobalStyle />
53-
<NotificationsProvider>
54-
<ModalsProvider>
55-
<GlobalLoadingContext.Provider value={{ isLoading, setIsLoading }}>
56-
{isLoading ? (
57-
<LoadingOverlay visible overlayOpacity={1} />
58-
) : (
59-
<UserContext.Provider value={user}>
60-
<LoadingOverlay visible={isLoading} overlayOpacity={1} />
61-
<Stack justify="space-between" sx={{ minHeight: "100vh" }}>
62-
<div>
63-
<Header />
64-
<Container>
65-
<Component {...pageProps} />
66-
</Container>
67-
</div>
68-
<Footer />
69-
</Stack>
70-
</UserContext.Provider>
71-
)}
72-
</GlobalLoadingContext.Provider>
73-
</ModalsProvider>
74-
</NotificationsProvider>
75-
</ThemeProvider>
57+
<MantineProvider
58+
withGlobalStyles
59+
withNormalizeCSS
60+
theme={{ colorScheme, ...globalStyle }}
61+
>
62+
<GlobalStyle />
63+
<NotificationsProvider>
64+
<ModalsProvider>
65+
<GlobalLoadingContext.Provider value={{ isLoading, setIsLoading }}>
66+
{isLoading ? (
67+
<LoadingOverlay visible overlayOpacity={1} />
68+
) : (
69+
<UserContext.Provider value={user}>
70+
<LoadingOverlay visible={isLoading} overlayOpacity={1} />
71+
<Stack justify="space-between" sx={{ minHeight: "100vh" }}>
72+
<div>
73+
<Header />
74+
<Container>
75+
<Component {...pageProps} />
76+
</Container>
77+
</div>
78+
<Footer />
79+
</Stack>
80+
</UserContext.Provider>
81+
)}
82+
</GlobalLoadingContext.Provider>
83+
</ModalsProvider>
84+
</NotificationsProvider>
7685
</MantineProvider>
7786
);
7887
}

0 commit comments

Comments
 (0)