feat: notification list pull to refresh
This commit is contained in:
@@ -11,6 +11,7 @@ import { useEffect, useMemo, useRef, useState } from 'react'
|
|||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { FormattedTimestamp } from '../FormattedTimestamp'
|
import { FormattedTimestamp } from '../FormattedTimestamp'
|
||||||
import UserAvatar from '../UserAvatar'
|
import UserAvatar from '../UserAvatar'
|
||||||
|
import PullToRefresh from 'react-simple-pull-to-refresh'
|
||||||
|
|
||||||
const LIMIT = 50
|
const LIMIT = 50
|
||||||
|
|
||||||
@@ -18,6 +19,7 @@ export default function NotificationList() {
|
|||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const { pubkey } = useNostr()
|
const { pubkey } = useNostr()
|
||||||
const [timelineKey, setTimelineKey] = useState<string | undefined>(undefined)
|
const [timelineKey, setTimelineKey] = useState<string | undefined>(undefined)
|
||||||
|
const [refreshCount, setRefreshCount] = useState(0)
|
||||||
const [initialized, setInitialized] = useState(false)
|
const [initialized, setInitialized] = useState(false)
|
||||||
const [notifications, setNotifications] = useState<Event[]>([])
|
const [notifications, setNotifications] = useState<Event[]>([])
|
||||||
const [until, setUntil] = useState<number | undefined>(dayjs().unix())
|
const [until, setUntil] = useState<number | undefined>(dayjs().unix())
|
||||||
@@ -62,7 +64,7 @@ export default function NotificationList() {
|
|||||||
return () => {
|
return () => {
|
||||||
promise.then((closer) => closer?.())
|
promise.then((closer) => closer?.())
|
||||||
}
|
}
|
||||||
}, [pubkey])
|
}, [pubkey, refreshCount])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!initialized) return
|
if (!initialized) return
|
||||||
@@ -108,6 +110,15 @@ export default function NotificationList() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<PullToRefresh
|
||||||
|
onRefresh={async () =>
|
||||||
|
new Promise((resolve) => {
|
||||||
|
setRefreshCount((pre) => pre + 1)
|
||||||
|
setTimeout(resolve, 1000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
pullingContent=""
|
||||||
|
>
|
||||||
<div>
|
<div>
|
||||||
{notifications.map((notification) => (
|
{notifications.map((notification) => (
|
||||||
<NotificationItem key={notification.id} notification={notification} />
|
<NotificationItem key={notification.id} notification={notification} />
|
||||||
@@ -116,6 +127,7 @@ export default function NotificationList() {
|
|||||||
{until ? <div ref={bottomRef}>{t('loading...')}</div> : t('no more notifications')}
|
{until ? <div ref={bottomRef}>{t('loading...')}</div> : t('no more notifications')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</PullToRefresh>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user