diff --git a/src/components/Article/CommentsTree.tsx b/src/components/Article/CommentsTree.tsx index a6ac5449..9d61e3d1 100644 --- a/src/components/Article/CommentsTree.tsx +++ b/src/components/Article/CommentsTree.tsx @@ -108,7 +108,7 @@ export const CommentsTree = (props: Props) => { return ( <>
+
{t('Comments')} {comments().length.toString() || ''} 0}>
+{newReactions().length}
@@ -161,7 +161,7 @@ export const CommentsTree = (props: Props) => {
+
{t('To write a comment, you must')}{' '}
{t('sign up')}
diff --git a/src/components/Article/FullArticle.tsx b/src/components/Article/FullArticle.tsx
index 628d2b3f..d057aa91 100644
--- a/src/components/Article/FullArticle.tsx
+++ b/src/components/Article/FullArticle.tsx
@@ -66,19 +66,6 @@ export const FullArticle = (props: ArticleProps) => {
props.article.topics[0]
)
- onMount(() => {
- const windowHash = window.location.hash
- if (windowHash?.length > 0) {
- const comments = document.querySelector(windowHash)
- if (comments) {
- window.scrollTo({
- top: comments.getBoundingClientRect().top,
- behavior: 'smooth'
- })
- }
- }
- })
-
onMount(async () => {
await loadReactionsBy({
by: { shout: props.article.slug }
@@ -105,20 +92,6 @@ export const FullArticle = (props: ArticleProps) => {
actions: { loadReactionsBy }
} = useReactions()
- let commentsRef: HTMLDivElement | undefined
- const scrollToComments = () => {
- if (!isReactionsLoaded()) {
- return
- }
- commentsRef.scrollIntoView({ behavior: 'smooth' })
- }
- const { searchParams } = useRouter()
- createEffect(() => {
- if (searchParams()?.scrollTo === 'comments') {
- scrollToComments()
- }
- })
-
return (
<>
{props.article.title}
@@ -276,7 +249,7 @@ export const FullArticle = (props: ArticleProps) => {
)}
-
+
{
const { cover, layout, slug, authors, stat, body } = props.article
- const { changeSearchParam } = useRouter()
- const scrollToComments = () => {
- openPage(router, 'article', { slug: slug })
- changeSearchParam('scrollTo', 'comments')
- }
-
return (
{
-
+
diff --git a/src/components/Nav/ProfilePopup.tsx b/src/components/Nav/ProfilePopup.tsx
index 1d5bfd5b..b19ae5ff 100644
--- a/src/components/Nav/ProfilePopup.tsx
+++ b/src/components/Nav/ProfilePopup.tsx
@@ -2,10 +2,9 @@ import { useSession } from '../../context/session'
import type { PopupProps } from '../_shared/Popup'
import { Popup } from '../_shared/Popup'
import styles from '../_shared/Popup/Popup.module.scss'
-import { getPagePath, openPage } from '@nanostores/router'
-import { router, useRouter } from '../../stores/router'
+import { getPagePath } from '@nanostores/router'
+import { router } from '../../stores/router'
import { useLocalize } from '../../context/localize'
-import type { AuthorPageSearchParams } from '../Views/Author'
type ProfilePopupProps = Omit
@@ -16,12 +15,6 @@ export const ProfilePopup = (props: ProfilePopupProps) => {
} = useSession()
const { t } = useLocalize()
- const { changeSearchParam } = useRouter()
-
- const openAuthorComments = () => {
- openPage(router, 'author', { slug: userSlug() })
- changeSearchParam('by', 'commented')
- }
return (
@@ -36,13 +29,7 @@ export const ProfilePopup = (props: ProfilePopupProps) => {
{t('Subscriptions')}
- {
- event.preventDefault()
- openAuthorComments()
- }}
- >
+
{t('Comments')}
diff --git a/src/components/Views/Author.tsx b/src/components/Views/Author.tsx
index 535c915a..b4e94de5 100644
--- a/src/components/Views/Author.tsx
+++ b/src/components/Views/Author.tsx
@@ -54,7 +54,11 @@ export const AuthorView = (props: AuthorProps) => {
const { searchParams, changeSearchParam } = useRouter()
- changeSearchParam('by', 'rating')
+ onMount(() => {
+ if (!searchParams().by) {
+ changeSearchParam('by', 'rating')
+ }
+ })
const loadMore = async () => {
saveScrollPosition()
diff --git a/src/stores/router.ts b/src/stores/router.ts
index ad7afc8d..c21d25b8 100644
--- a/src/stores/router.ts
+++ b/src/stores/router.ts
@@ -40,9 +40,8 @@ const routerStore = createRouter(ROUTES, {
export const router = routerStore
-const handleClientRouteLinkClick = (event) => {
- const link = event.target.closest('a')
- if (
+const checkOpenOnClient = (link: HTMLAnchorElement, event) => {
+ return (
link &&
event.button === 0 &&
link.target !== '_blank' &&
@@ -52,48 +51,58 @@ const handleClientRouteLinkClick = (event) => {
!event.ctrlKey &&
!event.shiftKey &&
!event.altKey
- ) {
- const url = new URL(link.href)
- if (url.origin === location.origin) {
- event.preventDefault()
+ )
+}
- if (url.pathname) {
- routerStore.open(url.pathname)
- }
+const handleClientRouteLinkClick = (event) => {
+ const link = event.target.closest('a')
- if (url.search) {
- const params = Object.fromEntries(new URLSearchParams(url.search))
- searchParamsStore.open(params)
- }
-
- if (url.hash) {
- let selector = url.hash
-
- if (/^#\d+/.test(selector)) {
- // id="1" fix
- // https://stackoverflow.com/questions/20306204/using-queryselector-with-ids-that-are-numbers
- selector = `[id="${selector.replace('#', '')}"]`
- }
-
- const anchor = document.querySelector(selector)
- const headerOffset = 80 // 100px for header
- const elementPosition = anchor ? anchor.getBoundingClientRect().top : 0
- const newScrollTop = elementPosition + window.scrollY - headerOffset
-
- window.scrollTo({
- top: newScrollTop,
- behavior: 'smooth'
- })
-
- return
- }
-
- window.scrollTo({
- top: 0,
- left: 0
- })
- }
+ if (!checkOpenOnClient(link, event)) {
+ return
}
+
+ const url = new URL(link.href)
+ if (url.origin !== location.origin) {
+ return
+ }
+
+ event.preventDefault()
+
+ if (url.pathname) {
+ routerStore.open(url.pathname)
+ }
+
+ if (url.search) {
+ const params = Object.fromEntries(new URLSearchParams(url.search))
+ searchParamsStore.open(params)
+ }
+
+ if (url.hash) {
+ let selector = url.hash
+
+ if (/^#\d+/.test(selector)) {
+ // id="1" fix
+ // https://stackoverflow.com/questions/20306204/using-queryselector-with-ids-that-are-numbers
+ selector = `[id="${selector.replace('#', '')}"]`
+ }
+
+ const anchor = document.querySelector(selector)
+ const headerOffset = 80 // 100px for header
+ const elementPosition = anchor ? anchor.getBoundingClientRect().top : 0
+ const newScrollTop = elementPosition + window.scrollY - headerOffset
+
+ window.scrollTo({
+ top: newScrollTop,
+ behavior: 'smooth'
+ })
+
+ return
+ }
+
+ window.scrollTo({
+ top: 0,
+ left: 0
+ })
}
export const initRouter = (pathname: string, search: Record) => {
@@ -134,7 +143,6 @@ export const useRouter = = Record<
return {
page,
searchParams,
- changeSearchParam,
- handleClientRouteLinkClick
+ changeSearchParam
}
}