2022-09-22 09:37:49 +00:00
|
|
|
import type { JSX } from 'solid-js'
|
|
|
|
|
2022-11-16 21:08:04 +00:00
|
|
|
import { clsx } from 'clsx'
|
2024-02-04 11:25:21 +00:00
|
|
|
import { Show, createEffect, createSignal } from 'solid-js'
|
2024-05-07 15:17:31 +00:00
|
|
|
import { Title } from '../../context/meta'
|
2023-11-14 15:10:00 +00:00
|
|
|
|
|
|
|
import { Footer } from '../Discours/Footer'
|
|
|
|
import { Header } from '../Nav/Header'
|
|
|
|
|
2023-02-17 09:21:02 +00:00
|
|
|
import '../../styles/app.scss'
|
|
|
|
import styles from './PageLayout.module.scss'
|
2022-09-22 09:37:49 +00:00
|
|
|
|
2023-09-15 14:41:11 +00:00
|
|
|
type Props = {
|
2023-11-14 10:45:44 +00:00
|
|
|
title: string
|
2022-09-22 09:37:49 +00:00
|
|
|
headerTitle?: string
|
2023-04-17 10:31:20 +00:00
|
|
|
slug?: string
|
2023-01-30 10:39:36 +00:00
|
|
|
articleBody?: string
|
|
|
|
cover?: string
|
2022-09-22 09:37:49 +00:00
|
|
|
children: JSX.Element
|
2022-09-23 21:29:32 +00:00
|
|
|
isHeaderFixed?: boolean
|
2022-09-29 11:15:59 +00:00
|
|
|
hideFooter?: boolean
|
2022-11-16 21:08:04 +00:00
|
|
|
class?: string
|
2023-02-17 09:21:02 +00:00
|
|
|
withPadding?: boolean
|
2023-10-10 15:38:02 +00:00
|
|
|
zeroBottomPadding?: boolean
|
2023-04-17 10:31:20 +00:00
|
|
|
scrollToComments?: (value: boolean) => void
|
2022-09-22 09:37:49 +00:00
|
|
|
}
|
|
|
|
|
2023-09-15 14:41:11 +00:00
|
|
|
export const PageLayout = (props: Props) => {
|
2022-11-21 13:02:04 +00:00
|
|
|
const isHeaderFixed = props.isHeaderFixed === undefined ? true : props.isHeaderFixed
|
2023-04-17 10:31:20 +00:00
|
|
|
const [scrollToComments, setScrollToComments] = createSignal<boolean>(false)
|
|
|
|
|
|
|
|
createEffect(() => {
|
|
|
|
if (props.scrollToComments) {
|
|
|
|
props.scrollToComments(scrollToComments())
|
|
|
|
}
|
|
|
|
})
|
2023-10-14 11:39:24 +00:00
|
|
|
|
2022-09-22 09:37:49 +00:00
|
|
|
return (
|
|
|
|
<>
|
2023-11-14 10:45:44 +00:00
|
|
|
<Title>{props.title}</Title>
|
2023-01-30 10:39:36 +00:00
|
|
|
<Header
|
2023-04-17 10:31:20 +00:00
|
|
|
slug={props.slug}
|
2023-01-30 10:39:36 +00:00
|
|
|
title={props.headerTitle}
|
|
|
|
articleBody={props.articleBody}
|
|
|
|
cover={props.articleBody}
|
|
|
|
isHeaderFixed={isHeaderFixed}
|
2023-04-17 10:31:20 +00:00
|
|
|
scrollToComments={(value) => setScrollToComments(value)}
|
2023-01-30 10:39:36 +00:00
|
|
|
/>
|
2022-11-16 21:08:04 +00:00
|
|
|
<main
|
2023-02-17 09:21:02 +00:00
|
|
|
class={clsx('main-content', {
|
2023-10-10 15:38:02 +00:00
|
|
|
[styles.withPadding]: props.withPadding,
|
2023-11-14 15:10:00 +00:00
|
|
|
[styles.zeroBottomPadding]: props.zeroBottomPadding,
|
2023-02-17 09:21:02 +00:00
|
|
|
})}
|
2022-11-16 21:08:04 +00:00
|
|
|
classList={{ 'main-content--no-padding': !isHeaderFixed }}
|
|
|
|
>
|
2022-09-29 19:16:17 +00:00
|
|
|
{props.children}
|
|
|
|
</main>
|
2022-09-29 11:15:59 +00:00
|
|
|
<Show when={props.hideFooter !== true}>
|
|
|
|
<Footer />
|
|
|
|
</Show>
|
2022-09-22 09:37:49 +00:00
|
|
|
</>
|
|
|
|
)
|
|
|
|
}
|