diff options
author | Eric Bailey <git@esb.lol> | 2023-07-19 12:16:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-19 12:16:57 -0500 |
commit | 0ae52e91ceaf1af41f12bfa6e76c7d719be5e0e5 (patch) | |
tree | a395def20fc038da3f41920733d18f3a93b07541 /src/view | |
parent | 4515559b1a7db493188cfe92abf8ea5cfd53c6dc (diff) | |
download | voidsky-0ae52e91ceaf1af41f12bfa6e76c7d719be5e0e5.tar.zst |
* add TimeElapsed util component, integrate into PostThreadItem * integrate into posts * use consistent naming * use mobx and single interval for TimeElapsed
Diffstat (limited to 'src/view')
-rw-r--r-- | src/view/com/post-thread/PostThreadItem.tsx | 8 | ||||
-rw-r--r-- | src/view/com/util/PostMeta.tsx | 25 | ||||
-rw-r--r-- | src/view/com/util/TimeElapsed.tsx | 21 |
3 files changed, 42 insertions, 12 deletions
diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index 133d38421..efc9fe694 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -15,7 +15,7 @@ import {PostDropdownBtn} from '../util/forms/DropdownButton' import * as Toast from '../util/Toast' import {PreviewableUserAvatar} from '../util/UserAvatar' import {s} from 'lib/styles' -import {ago, niceDate} from 'lib/strings/time' +import {niceDate} from 'lib/strings/time' import {sanitizeDisplayName} from 'lib/strings/display-names' import {pluralize} from 'lib/strings/helpers' import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers' @@ -30,6 +30,7 @@ import {PostSandboxWarning} from '../util/PostSandboxWarning' import {ErrorMessage} from '../util/error/ErrorMessage' import {usePalette} from 'lib/hooks/usePalette' import {formatCount} from '../util/numeric/format' +import {TimeElapsed} from 'view/com/util/TimeElapsed' const PARENT_REPLY_LINE_LENGTH = 8 @@ -189,7 +190,10 @@ export const PostThreadItem = observer(function PostThreadItem({ </Text> </Link> <Text type="md" style={[styles.metaItem, pal.textLight]}> - · {ago(item.post.indexedAt)} + · + <TimeElapsed timestamp={item.post.indexedAt}> + {({timeElapsed}) => <>{timeElapsed}</>} + </TimeElapsed> </Text> </View> <View style={s.flex1} /> diff --git a/src/view/com/util/PostMeta.tsx b/src/view/com/util/PostMeta.tsx index 7f8abebd7..5df6b3983 100644 --- a/src/view/com/util/PostMeta.tsx +++ b/src/view/com/util/PostMeta.tsx @@ -2,12 +2,13 @@ import React from 'react' import {StyleSheet, View} from 'react-native' import {Text} from './text/Text' import {DesktopWebTextLink} from './Link' -import {ago, niceDate} from 'lib/strings/time' +import {niceDate} from 'lib/strings/time' import {usePalette} from 'lib/hooks/usePalette' import {UserAvatar} from './UserAvatar' import {observer} from 'mobx-react-lite' import {sanitizeDisplayName} from 'lib/strings/display-names' import {isAndroid} from 'platform/detection' +import {TimeElapsed} from './TimeElapsed' interface PostMetaOpts { authorAvatar?: string @@ -64,15 +65,19 @@ export const PostMeta = observer(function (opts: PostMetaOpts) { · </Text> )} - <DesktopWebTextLink - type="md" - style={pal.textLight} - lineHeight={1.2} - text={ago(opts.timestamp)} - accessibilityLabel={niceDate(opts.timestamp)} - accessibilityHint="" - href={opts.postHref} - /> + <TimeElapsed timestamp={opts.timestamp}> + {({timeElapsed}) => ( + <DesktopWebTextLink + type="md" + style={pal.textLight} + lineHeight={1.2} + text={timeElapsed} + accessibilityLabel={niceDate(opts.timestamp)} + accessibilityHint="" + href={opts.postHref} + /> + )} + </TimeElapsed> </View> ) }) diff --git a/src/view/com/util/TimeElapsed.tsx b/src/view/com/util/TimeElapsed.tsx new file mode 100644 index 000000000..7b2dd61f3 --- /dev/null +++ b/src/view/com/util/TimeElapsed.tsx @@ -0,0 +1,21 @@ +import React from 'react' +import {observer} from 'mobx-react-lite' +import {ago} from 'lib/strings/time' +import {useStores} from 'state/index' + +export const TimeElapsed = observer(function TimeElapsed({ + timestamp, + children, +}: { + timestamp: string + children: ({timeElapsed}: {timeElapsed: string}) => JSX.Element +}) { + const stores = useStores() + const [timeElapsed, setTimeAgo] = React.useState(ago(timestamp)) + + React.useEffect(() => { + setTimeAgo(ago(timestamp)) + }, [timestamp, setTimeAgo, stores.shell.tickEveryMinute]) + + return children({timeElapsed}) +}) |