diff --git a/src/hooks/modal/useModalRouting.ts b/src/hooks/modal/useModalRouting.ts new file mode 100644 index 00000000..082724b1 --- /dev/null +++ b/src/hooks/modal/useModalRouting.ts @@ -0,0 +1,31 @@ +import { useCallback, useMemo } from 'react'; + +import { useRouter } from 'next/router'; + +/** use this to preserve scrolling and handle back button behaviour on + * opening modal + * + * this will replace url with ?modal=modalName, next you should + * show modal for that name and pass params to it + */ +export const useModalRouting = () => { + const router = useRouter(); + + const openModal = useCallback( + (modalName: string) => { + const [path] = router.asPath.split('?'); + + void router.push(path + '?modal=' + modalName, path + '?modal=' + modalName, { + shallow: true, + scroll: false, + }); + }, + [router] + ); + + const currentModal = useMemo(() => router.query.modal, [router]); + + console.log(currentModal); + + return { openModal }; +}; diff --git a/src/pages/node/[id].tsx b/src/pages/node/[id].tsx index f8112a86..112a7087 100644 --- a/src/pages/node/[id].tsx +++ b/src/pages/node/[id].tsx @@ -8,7 +8,6 @@ import { apiGetNode, apiGetNodeComments, getNodeDiff } from '~/api/node'; import { NodeHeadMetadata } from '~/components/node/NodeHeadMetadata'; import { COMMENTS_DISPLAY } from '~/constants/node'; import { useNodeComments } from '~/hooks/comments/useNodeComments'; -import { useScrollToTop } from '~/hooks/dom/useScrollToTop'; import { useImageModal } from '~/hooks/navigation/useImageModal'; import { useLoadNode } from '~/hooks/node/useLoadNode'; import { useNodePageParams } from '~/hooks/node/useNodePageParams'; @@ -107,8 +106,6 @@ const NodePage: FC = observer(props => { ); const [canEdit] = useNodePermissions(node); - useScrollToTop([id, isLoadingComments]); - if (!node) { // TODO: do something here return null;