Skip to content

Commit 180449e

Browse files
committed
feat: add bottombar actions
Signed-off-by: Innei <[email protected]>
1 parent 503170d commit 180449e

File tree

9 files changed

+49
-11
lines changed

9 files changed

+49
-11
lines changed

src/app/notes/[id]/pageImpl.tsx

+7-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { AckRead } from '~/components/common/AckRead'
77
import { ClientOnly } from '~/components/common/ClientOnly'
88
import {
99
NoteActionAside,
10+
NoteBottomBarAction,
1011
NoteFooterNavigationBarForMobile,
1112
NoteTopic,
1213
} from '~/components/widgets/note'
@@ -71,9 +72,12 @@ const NotePage = function (props: NoteModel) {
7172
</IndentArticleContainer>
7273

7374
{/* <SubscribeBell defaultType="note_c" /> */}
74-
<NoteTopic />
75-
<XLogInfoForNote />
76-
<NoteFooterNavigationBarForMobile />
75+
<ClientOnly>
76+
<NoteBottomBarAction />
77+
<NoteTopic />
78+
<XLogInfoForNote />
79+
<NoteFooterNavigationBarForMobile />
80+
</ClientOnly>
7781
</>
7882
)
7983
}

src/app/posts/(post-detail)/[category]/[slug]/pageImpl.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { AckRead } from '~/components/common/AckRead'
44
import { ClientOnly } from '~/components/common/ClientOnly'
55
import {
66
PostActionAside,
7+
PostBottomBarAction,
78
PostCopyright,
89
PostOutdate,
910
PostRelated,
@@ -67,6 +68,7 @@ const PostPage = (props: PostModel) => {
6768
<PostCopyright />
6869
{/* <SubscribeBell defaultType="post_c" /> */}
6970
<XLogInfoForPost />
71+
<PostBottomBarAction />
7072
</ClientOnly>
7173
</div>
7274
)

src/components/widgets/note/NoteActionAside.tsx

+18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { m, useAnimationControls, useForceUpdate } from 'framer-motion'
44

5+
import { useIsMobile } from '~/atoms'
56
import { MotionButtonBase } from '~/components/ui/button'
67
import { NumberSmoothTransition } from '~/components/ui/number-transition/NumberSmoothTransition'
78
import { useIsClient } from '~/hooks/common/use-is-client'
@@ -18,6 +19,7 @@ import {
1819
} from '~/providers/note/CurrentNoteDataProvider'
1920
import { useCurrentNoteId } from '~/providers/note/CurrentNoteIdProvider'
2021
import { useModalStack } from '~/providers/root/modal-stack-provider'
22+
import { useIsEoFWrappedElement } from '~/providers/shared/WrappedElementProvider'
2123

2224
import {
2325
ActionAsideContainer,
@@ -29,6 +31,19 @@ import { AsideDonateButton } from '../shared/AsideDonateButton'
2931
import { ShareModal } from '../shared/ShareModal'
3032
import { usePresentSubscribeModal } from '../subscribe'
3133

34+
export const NoteBottomBarAction: Component = () => {
35+
const isMobile = useIsMobile()
36+
if (!isMobile) return null
37+
return (
38+
<div className="mb-8 flex items-center justify-center space-x-8">
39+
<LikeButton />
40+
<ShareButton />
41+
<SubscribeButton />
42+
<AsideDonateButton />
43+
</div>
44+
)
45+
}
46+
3247
export const NoteActionAside: Component = ({ className }) => {
3348
return (
3449
<ActionAsideContainer className={className}>
@@ -50,7 +65,10 @@ const NoteAsideCommentButton = () => {
5065
id: data?.id,
5166
}
5267
}) || {}
68+
69+
const isEoF = useIsEoFWrappedElement()
5370
if (!id) return null
71+
if (isEoF) return null
5472
return <AsideCommentButton refId={id} title={title!} />
5573
}
5674

src/components/widgets/post/PostActionAside.tsx

+14
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { m, useAnimationControls, useForceUpdate } from 'framer-motion'
44

5+
import { useIsMobile } from '~/atoms'
56
import { ThumbsupIcon } from '~/components/icons/thumbs-up'
67
import { MotionButtonBase } from '~/components/ui/button'
78
import { NumberSmoothTransition } from '~/components/ui/number-transition/NumberSmoothTransition'
@@ -29,6 +30,19 @@ import { AsideDonateButton } from '../shared/AsideDonateButton'
2930
import { ShareModal } from '../shared/ShareModal'
3031
import { usePresentSubscribeModal } from '../subscribe'
3132

33+
export const PostBottomBarAction: Component = () => {
34+
const isMobile = useIsMobile()
35+
if (!isMobile) return null
36+
return (
37+
<div className="flex items-center justify-center space-x-8">
38+
<LikeButton />
39+
<ShareButton />
40+
<SubscribeButton />
41+
<AsideDonateButton />
42+
</div>
43+
)
44+
}
45+
3246
export const PostActionAside: Component = ({ className }) => {
3347
return (
3448
<ActionAsideContainer className={className}>

src/components/widgets/shared/ActionAsideContainer.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { useViewport } from '~/atoms'
44
import { clsxm } from '~/lib/helper'
55
import { usePageScrollLocationSelector } from '~/providers/root/page-scroll-info-provider'
6-
import { useIsEOWrappedElement } from '~/providers/shared/WrappedElementProvider'
6+
import { useIsEoFWrappedElement } from '~/providers/shared/WrappedElementProvider'
77

88
export const asideButtonStyles = {
99
base: 'text-[24px] opacity-80 duration-200 hover:opacity-100 relative',
@@ -13,7 +13,7 @@ export const ActionAsideIcon: Component = (props) => {
1313
return <i className={clsxm(asideButtonStyles.base, props.className)} />
1414
}
1515
export const ActionAsideContainer: Component = ({ className, children }) => {
16-
const isEOA = useIsEOWrappedElement()
16+
const isEOA = useIsEoFWrappedElement()
1717
const h = useViewport((v) => v.h)
1818

1919
const isEndOfPage = usePageScrollLocationSelector(

src/components/widgets/shared/ReadIndicator.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { useIsMobile } from '~/atoms'
88
import { RootPortal } from '~/components/ui/portal'
99
import { useReadPercent } from '~/hooks/shared/use-read-percent'
1010
import { clsxm } from '~/lib/helper'
11-
import { useIsEOWrappedElement } from '~/providers/shared/WrappedElementProvider'
11+
import { useIsEoFWrappedElement } from '~/providers/shared/WrappedElementProvider'
1212

1313
export const ReadIndicator: Component<{
1414
as?: ElementType
@@ -31,7 +31,7 @@ export const ReadIndicator: Component<{
3131

3232
const ReadIndicatorVertical: Component = ({ className }) => {
3333
const readPercent = useDeferredValue(useReadPercent())
34-
const isEOA = useIsEOWrappedElement()
34+
const isEOA = useIsEoFWrappedElement()
3535
return (
3636
<RootPortal>
3737
<div

src/components/widgets/subscribe/hooks.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export const usePresentSubscribeModal = (
3737
present: () => {
3838
const dispose = present({
3939
title: '邮件订阅',
40-
40+
clickOutsideToDismiss: true,
4141
content: () => (
4242
<SubscribeModal onConfirm={dispose} defaultTypes={defaultTypes} />
4343
),

src/components/widgets/toc/TocFAB.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export const TocFAB = () => {
2727
const presentToc = useCallback(() => {
2828
const dispose = present({
2929
title: 'Table of Content',
30-
30+
clickOutsideToDismiss: true,
3131
content: () => (
3232
<TocTree
3333
$headings={$headings!}

src/providers/shared/WrappedElementProvider.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const [
3636

3737
const [
3838
IsEOArticleElementProviderInternal,
39-
useIsEOWrappedElement,
39+
useIsEoFWrappedElement,
4040
useSetIsEOArticleElement,
4141
] = createContextState<boolean>(false)
4242

@@ -132,7 +132,7 @@ export {
132132
WrappedElementProvider,
133133
useSetWrappedElement,
134134
useWrappedElement,
135-
useIsEOWrappedElement,
135+
useIsEoFWrappedElement,
136136
useWrappedElementSize,
137137
useWrappedElementPositsion,
138138
}

0 commit comments

Comments
 (0)