Skip to content

Commit 5a2faa1

Browse files
committed
Merge branch 'zouhir-auth' into feat-streaks
2 parents d1dac8c + e802001 commit 5a2faa1

6 files changed

Lines changed: 100 additions & 10 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Button, Modal } from 'src/components/Elements'
2+
import './confirmModal.css'
3+
4+
interface LogoutModalProps {
5+
showModal: boolean
6+
title: string
7+
description: string
8+
onClose: () => void
9+
onConfirm: () => void
10+
}
11+
12+
export const ConfirmModal = ({
13+
showModal,
14+
title,
15+
description,
16+
onClose,
17+
onConfirm,
18+
}: LogoutModalProps) => {
19+
return (
20+
<Modal
21+
showModal={showModal}
22+
onClose={onClose}
23+
header={{
24+
title: title,
25+
className: undefined,
26+
icon: undefined,
27+
}}
28+
className="confirmModal">
29+
<div className="content">
30+
<p className="description">{description}</p>
31+
<div className="buttons">
32+
<Button onClick={onClose} size="medium">
33+
Cancel
34+
</Button>
35+
<Button onClick={onConfirm} size="medium">
36+
Confirm
37+
</Button>
38+
</div>
39+
</div>
40+
</Modal>
41+
)
42+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
@media (min-width: 768px) {
2+
.confirmModal {
3+
width: 400px;
4+
overflow-y: hidden;
5+
}
6+
}
7+
8+
.confirmModal .content {
9+
display: flex;
10+
flex-direction: column;
11+
}
12+
.confirmModal .description {
13+
font-size: 1em;
14+
}
15+
.confirmModal .buttons {
16+
display: flex;
17+
flex-direction: row;
18+
gap: 10px;
19+
align-self: flex-end;
20+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
export * from './ConfirmModal'
12
export * from './Modal'

src/features/auth/hooks/useAuth.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import { signOut } from 'firebase/auth'
12
import { AuthModalStore, AuthStore } from 'src/features/auth'
23
import { trackUserDisconnect } from 'src/lib/analytics'
4+
import { firebaseAuth } from 'src/lib/firebase'
35

46
export const useAuth = () => {
57
const { isAuthModalOpen, openAuthModal, closeAuthModal } = AuthModalStore()
@@ -8,9 +10,11 @@ export const useAuth = () => {
810

911
const isConnected = () => user != null
1012

11-
const logout = () => {
13+
const logout = async () => {
1214
trackUserDisconnect()
15+
signOut(firebaseAuth)
1316
clear()
17+
return await firebaseAuth.signOut()
1418
}
1519

1620
return {

src/features/settings/components/GeneralSettings/GeneralSettings.tsx

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import React from 'react'
1+
import React, { useState } from 'react'
2+
import { FaGithub } from 'react-icons/fa'
3+
import { FcGoogle } from 'react-icons/fc'
24
import Toggle from 'react-toggle'
35
import 'react-toggle/style.css'
4-
import { Button, ChipsSet } from 'src/components/Elements'
6+
import { Button, ChipsSet, ConfirmModal } from 'src/components/Elements'
57
import { Footer } from 'src/components/Layout'
68
import { SettingsContentLayout } from 'src/components/Layout/SettingsContentLayout'
79
import { useAuth, User } from 'src/features/auth'
@@ -20,26 +22,42 @@ import { Option } from 'src/types'
2022
import { DNDSettings } from './DNDSettings'
2123
import './generalSettings.css'
2224

25+
// TODO Maybe we should create a separate folder in components for UserInfo ?
2326
interface UserInfoProps {
2427
user: User
2528
}
2629

2730
const UserInfo = ({ user }: UserInfoProps) => {
2831
const { logout, providerId } = useAuth()
2932
const providerName = providerId?.split('.')[0] || 'Unknown'
33+
const [showLogout, setShowLogout] = useState(false)
3034

3135
return (
3236
<div className="userContent">
37+
<ConfirmModal
38+
showModal={showLogout}
39+
title="Logout !"
40+
description="Are you sure you want to logout ?"
41+
onClose={() => setShowLogout(false)}
42+
onConfirm={logout}
43+
/>
3344
{user?.imageURL && <img src={user.imageURL} className="userImage"></img>}
3445
<div className="userInfos">
3546
<div className="userName">{user.name}</div>
36-
<div className="sub providerId">
47+
<div className="sub">
48+
{providerId == 'github.com' ? (
49+
<FaGithub size={18} />
50+
) : providerId == 'google.com' ? (
51+
<FcGoogle size={18} />
52+
) : null}
3753
Connected with <span className="capitalize">{providerName}</span>
3854
</div>
55+
<div>
56+
<Button className="logoutBtn" onClick={() => setShowLogout(true)} size="small">
57+
Logout
58+
</Button>
59+
</div>
3960
</div>
40-
<Button onClick={logout} size="small">
41-
Logout
42-
</Button>
4361
</div>
4462
)
4563
}
@@ -49,7 +67,6 @@ export const GeneralSettings = () => {
4967
openLinksNewTab,
5068
listingMode,
5169
theme,
52-
searchEngine,
5370
maxVisibleCards,
5471
setTheme,
5572
setListingMode,

src/features/settings/components/GeneralSettings/generalSettings.css

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Select styles
9898

9999
.userContent {
100100
width: auto;
101-
padding: 20px 10px;
101+
padding: 20px 0px;
102102
display: flex;
103103
align-items: center;
104104
border-bottom: 1px solid var(--card-content-divider);
@@ -107,19 +107,25 @@ Select styles
107107
width: 50px;
108108
height: 50px;
109109
border-radius: 100%;
110+
align-self: flex-start;
110111
}
111112
.userContent .userInfos {
112113
flex: 1;
113114
display: flex;
114115
flex-direction: column;
115-
gap: 6px;
116+
gap: 8px;
116117
width: auto;
117118
margin-left: 10px;
118119
}
119120
.userContent .userName {
120121
font-weight: 600;
121122
}
123+
122124
.userContent .sub {
123125
font-size: 0.9em;
124126
opacity: 0.9;
127+
display: flex;
128+
flex-direction: row;
129+
align-items: center;
130+
column-gap: 4px;
125131
}

0 commit comments

Comments
 (0)