Skip to content

Commit 7500ca6

Browse files
committed
✨ dark mode added
1 parent 8e3254b commit 7500ca6

34 files changed

+528
-86
lines changed

src/app/app.component.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Component } from '@angular/core';
2+
import { SettingService } from '@services/setting.service';
23

34
@Component({
45
selector: 'app-root',
@@ -7,4 +8,15 @@ import { Component } from '@angular/core';
78
})
89
export class AppComponent {
910
title = 'frontend';
11+
constructor(
12+
private settingService: SettingService,
13+
) {
14+
const theme = localStorage.getItem('theme');
15+
if(!theme) {
16+
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
17+
this.settingService.setTheme((isDarkMode) ? 'dark' : 'light');
18+
} else {
19+
this.settingService.setTheme(theme as 'dark'|'light');
20+
}
21+
}
1022
}

src/app/auth/auth.component.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
justify-content: center;
1111
align-items: center;
1212
}
13+
1314
.modal.modal-open {
1415
display: flex;
1516
opacity: 1;
@@ -47,7 +48,7 @@
4748
flex-direction: column;
4849
border-radius: 1rem;
4950
max-width: 30rem;
50-
background-color: #ffffff;
51+
background-color: var(--bg-color-card-2);
5152
padding: 1rem;
5253
gap: 1.2rem;
5354
}

src/app/auth/components/login/login.component.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ form .sign-in {
1616
font-size: 42px;
1717
text-align: center;
1818
font-weight: bold;
19+
color: var(--font-color-primary);
1920
}
2021

2122
.no-account {
@@ -28,6 +29,7 @@ form .sign-in {
2829
.no-account span {
2930
font-size: 24px;
3031
font-weight: bold;
32+
color: var(--font-color-primary);
3133
}
3234

3335
.no-account a.link {

src/app/auth/components/register/register.component.css

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ form {
1212
gap: 1rem;
1313
}
1414

15-
form .sign-in {
15+
form .sign-on {
1616
font-size: 42px;
1717
text-align: center;
1818
font-weight: bold;
19+
color: var(--font-color-primary);
1920
}
2021

2122
.has-account {
@@ -28,6 +29,7 @@ form .sign-in {
2829
.has-account span {
2930
font-size: 24px;
3031
font-weight: bold;
32+
color: var(--font-color-primary);
3133
}
3234

3335
.has-account a.link {

src/app/auth/components/register/register.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div class="register-container">
22
<form>
3-
<span class="sign-in">Register</span>
3+
<span class="sign-on">Register</span>
44
<label for="email" class="floating">
55
<input type="text" id="email" placeholder="email">
66
<span>Email</span>

src/app/core/components/sidebar/sidebar.component.css

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@ nav {
22
position: fixed;
33
height: 100%;
44
width: 250px;
5-
/* background: var(--bg-color); */
6-
border-right: 1px solid var(--bg-color);
5+
border-right: 1px solid #a5a5a5;
76
padding: 6px 14px;
8-
z-index: 99;
7+
z-index: 103;
98
transition: 0.5s ease;
109
padding: 0 0.2rem;
1110
display: flex;
1211
flex-direction: column;
1312
align-items: flex-start;
1413
gap: 10px;
15-
/* border: 1px solid black; */
1614
}
1715

1816
nav .logo-details {
@@ -77,7 +75,8 @@ nav li .tooltip {
7775
top: -20px;
7876
left: calc(100% + 15px);
7977
z-index: 3;
80-
background: #f7f7f7;
78+
color: var(--font-color-primary);
79+
background: var(--bg-color-card);
8180
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3);
8281
padding: 6px 12px;
8382
border-radius: 4px;
@@ -87,20 +86,17 @@ nav li .tooltip {
8786
white-space: nowrap;
8887
pointer-events: none;
8988
transition: 0s;
89+
display: none;
9090
}
9191

9292
nav li:hover .tooltip {
9393
opacity: 1;
9494
pointer-events: auto;
95-
transition: 0.5s;
95+
transition: 0.5s ease-out;
9696
top: 50%;
9797
transform: translateY(-50%);
9898
}
9999

100-
nav.open li .tooltip {
101-
display: none;
102-
}
103-
104100
nav li a {
105101
display: flex;
106102
height: 100%;
@@ -115,15 +111,16 @@ nav li a {
115111

116112
nav li a:hover,
117113
.profile .profile-details:hover {
118-
background: #e2e2e2;
114+
background: var(--bg-hover);
119115
}
120116

121117
nav li a .links_name {
122-
color: var(--bg-color-secondary);
123-
font-size: 16px;
124-
font-weight: 400;
118+
color: var(--font-color-primary);
119+
font-size: 19px;
120+
font-weight: 500;
125121
white-space: nowrap;
126122
opacity: 0;
123+
letter-spacing: 1px;
127124
pointer-events: none;
128125
transition: 0.4s;
129126
opacity: 1;
@@ -135,7 +132,7 @@ nav li a:hover i {
135132
}
136133

137134
nav li i {
138-
font-size: 24px;
135+
font-size: 30px;
139136
border-radius: 12px;
140137
}
141138

@@ -203,6 +200,10 @@ nav .profile {
203200
width: 80px;
204201
}
205202

203+
nav li .tooltip {
204+
display: block;
205+
}
206+
206207
nav .logo-details .logo_name,
207208
nav li a .links_name,
208209
.profile-details .username,
@@ -269,7 +270,7 @@ nav .profile {
269270
}
270271

271272
nav li a i {
272-
font-size: 24px;
273+
font-size: 28px;
273274
flex-grow: 0;
274275
}
275276

src/app/core/components/sidebar/sidebar.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<nav class="sidebar open">
1+
<nav class="sidebar">
22
<div class="logo-details">
33
<i class='bx bx-news icon'></i>
44
<span class="logo_name">InfoReader</span>
@@ -26,7 +26,7 @@
2626
<span class="tooltip">Saved</span>
2727
</li>
2828
<li>
29-
<a href="#">
29+
<a routerLink="/settings">
3030
<i class='bx bx-cog'></i>
3131
<span class="links_name">Configuration</span>
3232
</a>

src/app/core/services/auth.service.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ILogin } from '@interfaces/login.interface';
77
import { IResponseLogin } from '@interfaces/response.interface';
88
import Storage from "@utils/storage.util";
99
import { User } from '@models/user.model';
10+
import { SettingService } from './setting.service';
1011

1112
const base_url = environment.base_url;
1213

@@ -20,6 +21,7 @@ export class AuthService {
2021

2122
constructor(
2223
private http: HttpClient,
24+
private settingService:SettingService,
2325
) { }
2426

2527
get headers() {
@@ -48,6 +50,8 @@ export class AuthService {
4850
return this.http.post<IResponseLogin>(url, data).pipe(map(resp => {
4951
this.setUserActiveInfo(resp);
5052
this.isAuthenticatedEmitter.emit(true);
53+
const { user } = resp;
54+
this.settingService.setTheme(user.darkMode ? 'dark' : 'light');
5155
return resp;
5256
}));
5357
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Injectable } from '@angular/core';
2+
import Storage from '@utils/storage.util';
3+
4+
@Injectable({
5+
providedIn: 'root'
6+
})
7+
export class SettingService {
8+
private bodyElement = document.body as HTMLBodyElement;
9+
constructor() { }
10+
11+
setTheme(theme: 'dark' | 'light'): void {
12+
if(theme === 'light') {
13+
this.bodyElement.classList.remove('dark');
14+
}
15+
if(theme === 'dark') {
16+
this.bodyElement.classList.add('dark');
17+
}
18+
this.savePreference(theme);
19+
}
20+
21+
private savePreference(theme: 'dark'| 'light') {
22+
Storage.deleteLocalStorage('theme');
23+
Storage.saveLocalStorage('theme', theme);
24+
25+
}
26+
27+
isDarkMode(): boolean {
28+
return this.bodyElement.classList.contains('dark');
29+
}
30+
31+
}

src/app/core/services/user.service.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,9 @@ export class UserService {
2828
return this.http.patch(url, {}, this.headers);
2929
}
3030

31+
setTheme(darkMode: boolean): void {
32+
const url = `${base_url}/user/theme`;
33+
this.http.patch(url, { darkMode }, this.headers).subscribe(resp => console.log({resp}));
34+
}
35+
3136
}

0 commit comments

Comments
 (0)