File tree Expand file tree Collapse file tree 2 files changed +74
-0
lines changed Expand file tree Collapse file tree 2 files changed +74
-0
lines changed Original file line number Diff line number Diff line change 1+ "use client" ;
2+
3+ import React from "react" ;
4+ import { getIntroductionDictionary } from "@/features/localization/services/language-dictionary.service" ;
5+ import styles from "./sidebar-nav.module.scss" ;
6+ import { useRouter } from "next/navigation" ;
7+
8+ interface SidebarNavComponentProps {
9+ languageCode : string ;
10+ }
11+
12+ const scrollToElementWithOffset = ( id : string , offset = 0 ) => {
13+ const element = document . getElementById ( id ) ;
14+ if ( element ) {
15+ const y = element . getBoundingClientRect ( ) . top + window . pageYOffset + offset ;
16+ window . scrollTo ( { top : y , behavior : "smooth" } ) ;
17+ }
18+ } ;
19+
20+ export const SidebarNavComponent : React . FC < SidebarNavComponentProps > = ( {
21+ languageCode,
22+ } ) => {
23+ const introductionDictionary = getIntroductionDictionary ( languageCode ) ;
24+ const router = useRouter ( ) ;
25+ const handleClick = ( id : string ) => {
26+ scrollToElementWithOffset ( id , - 120 ) ;
27+ history . replaceState ( null , "" , `#${ id } ` ) ;
28+ } ;
29+
30+ return (
31+ < div className = { styles . container } >
32+ < ul className = { styles . list } >
33+ { introductionDictionary . content . headings . map ( ( heading , index ) => (
34+ < li
35+ key = { index }
36+ className = { styles . title }
37+ onClick = { ( ) => handleClick ( heading . id ) }
38+ >
39+ { heading . title }
40+ </ li >
41+ ) ) }
42+ </ ul >
43+ </ div >
44+ ) ;
45+ } ;
Original file line number Diff line number Diff line change 1+ .container {
2+ position : sticky ;
3+ color : white ;
4+ height : 100vh ;
5+ flex-shrink : 0 ;
6+ top : 0 ;
7+ padding : 100px 30px 0px ;
8+ border-right : 1px solid white ;
9+ max-width : 250px ;
10+ overflow-y : auto
11+ }
12+
13+ .title {
14+ margin-bottom : 36px ;
15+ padding-right : 8px ;
16+ cursor : pointer ;
17+ }
18+
19+ .list {
20+ list-style-type : none ;
21+ }
22+
23+ @media (max-width : 768px ) {
24+ .container {
25+ width : 100% ;
26+ height : auto ;
27+ position : relative ;
28+ }
29+ }
You can’t perform that action at this time.
0 commit comments