Profile popup
This commit is contained in:
parent
6c648fad81
commit
0eda49ed5d
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
@include font-size(1.6rem);
|
@include font-size(1.6rem);
|
||||||
|
|
||||||
padding: 2.4rem 2.4rem 2.4rem 1.6rem;
|
padding: 2.4rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@
|
||||||
|
|
||||||
li {
|
li {
|
||||||
margin-bottom: 1.6rem;
|
margin-bottom: 1.6rem;
|
||||||
padding-left: 3.6rem;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
|
@ -32,19 +31,24 @@
|
||||||
a {
|
a {
|
||||||
border: none;
|
border: none;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
img {
|
||||||
|
filter: invert(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
filter: invert(1);
|
filter: invert(1);
|
||||||
max-height: 2rem;
|
max-height: 2rem;
|
||||||
max-width: 2rem;
|
max-width: 2rem;
|
||||||
|
transition: filter 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
left: 1.5rem;
|
display: inline-block;
|
||||||
position: absolute;
|
width: 3.6rem;
|
||||||
top: 50%;
|
|
||||||
transform: translate(-50%, -50%);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
width: 23px;
|
width: 23px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button,
|
||||||
a {
|
a {
|
||||||
border: none;
|
border: none;
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
import type { Author } from '../../graphql/types.gen'
|
import type { Author } from '../../graphql/types.gen'
|
||||||
import Userpic from '../Author/Userpic'
|
import Userpic from '../Author/Userpic'
|
||||||
|
import { ProfilePopup } from './ProfilePopup'
|
||||||
import { Icon } from './Icon'
|
import { Icon } from './Icon'
|
||||||
import styles from './Private.module.scss'
|
import styles from './Private.module.scss'
|
||||||
import { useAuthStore } from '../../stores/auth'
|
import { useAuthStore } from '../../stores/auth'
|
||||||
import { useRouter } from '../../stores/router'
|
import { useRouter } from '../../stores/router'
|
||||||
import { clsx } from 'clsx'
|
import { clsx } from 'clsx'
|
||||||
|
import { createSignal } from 'solid-js'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const { session } = useAuthStore()
|
const { session } = useAuthStore()
|
||||||
const { page } = useRouter()
|
const { page } = useRouter()
|
||||||
|
const [isProfilePopupVisible, setIsProfilePopupVisible] = createSignal(false)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class={clsx(styles.userControl, 'col')}>
|
<div class={clsx(styles.userControl, 'col')}>
|
||||||
|
@ -26,14 +29,21 @@ export default () => {
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
<ProfilePopup
|
||||||
|
onVisibilityChange={(isVisible) => {
|
||||||
|
setIsProfilePopupVisible(isVisible)
|
||||||
|
}}
|
||||||
|
containerCssClass={styles.control}
|
||||||
|
trigger={
|
||||||
<div class={styles.userControlItem}>
|
<div class={styles.userControlItem}>
|
||||||
<a href={`/${session().user?.slug}`}>
|
<button class={styles.button}>
|
||||||
{/*FIXME: replace with route*/}
|
|
||||||
<div classList={{ entered: page().path === `/${session().user?.slug}` }}>
|
<div classList={{ entered: page().path === `/${session().user?.slug}` }}>
|
||||||
<Userpic user={session().user as Author} class={styles.userpic} />
|
<Userpic user={session().user as Author} class={styles.userpic} />
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
37
src/components/Nav/ProfilePopup.tsx
Normal file
37
src/components/Nav/ProfilePopup.tsx
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
import styles from './Popup.module.scss'
|
||||||
|
import { Popup, PopupProps } from './Popup'
|
||||||
|
import { useAuthStore } from '../../stores/auth'
|
||||||
|
|
||||||
|
type ProfilePopupProps = Omit<PopupProps, 'children'>
|
||||||
|
|
||||||
|
export const ProfilePopup = (props: ProfilePopupProps) => {
|
||||||
|
const { session } = useAuthStore()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Popup {...props}>
|
||||||
|
<ul class="nodash">
|
||||||
|
<li>
|
||||||
|
<a href={`/${session().user?.slug}`}>Профиль</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">Черновики</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">Подписки</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">Комментарии</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">Закладки</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">Настройки</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#">Выйти из аккаунта</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</Popup>
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user