diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-07-26 10:03:52 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-07-26 10:03:52 -0500 |
commit | efc28b00987d8cc63aea56109e221e7a2e78b787 (patch) | |
tree | b457c3a1729dd3bd6cb9327ef2541aac7926aca5 /src | |
parent | 041bfa22a99d8d6b4b17ad36c983e9e2b2444918 (diff) | |
download | voidsky-efc28b00987d8cc63aea56109e221e7a2e78b787.tar.zst |
Replace momentjs - it is too large of a dependency
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/feed/FeedItem.tsx | 4 | ||||
-rw-r--r-- | src/view/com/post-thread/PostThreadItem.tsx | 5 | ||||
-rw-r--r-- | src/view/index.ts | 21 | ||||
-rw-r--r-- | src/view/lib/strings.ts | 32 |
4 files changed, 36 insertions, 26 deletions
diff --git a/src/view/com/feed/FeedItem.tsx b/src/view/com/feed/FeedItem.tsx index 616fb0aca..e79c15326 100644 --- a/src/view/com/feed/FeedItem.tsx +++ b/src/view/com/feed/FeedItem.tsx @@ -2,11 +2,11 @@ import React from 'react' import {observer} from 'mobx-react-lite' import {Image, StyleSheet, Text, TouchableOpacity, View} from 'react-native' import {bsky, AdxUri} from '@adxp/mock-api' -import moment from 'moment' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {OnNavigateContent} from '../../routes/types' import {FeedViewItemModel} from '../../../state/models/feed-view' import {s} from '../../lib/styles' +import {ago} from '../../lib/strings' import {AVIS} from '../../lib/assets' export const FeedItem = observer(function FeedItem({ @@ -78,7 +78,7 @@ export const FeedItem = observer(function FeedItem({ @{item.author.name} </Text> <Text style={[styles.metaItem, s.f14, s.gray]}> - · {moment(item.indexedAt).fromNow(true)} + · {ago(item.indexedAt)} </Text> </View> <Text style={[styles.postText, s.f15, s['lh15-1.3']]}> diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index 7ed00403b..981aab092 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -2,12 +2,11 @@ import React from 'react' import {observer} from 'mobx-react-lite' import {Image, StyleSheet, Text, TouchableOpacity, View} from 'react-native' import {bsky, AdxUri} from '@adxp/mock-api' -import moment from 'moment' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {OnNavigateContent} from '../../routes/types' import {PostThreadViewPostModel} from '../../../state/models/post-thread-view' import {s} from '../../lib/styles' -import {pluralize} from '../../lib/strings' +import {ago, pluralize} from '../../lib/strings' import {AVIS} from '../../lib/assets' function iter<T>(n: number, fn: (_i: number) => T): Array<T> { @@ -97,7 +96,7 @@ export const PostThreadItem = observer(function PostThreadItem({ @{item.author.name} </Text> <Text style={[styles.metaItem, s.f14, s.gray]}> - · {moment(item.indexedAt).fromNow(true)} + · {ago(item.indexedAt)} </Text> </View> <Text diff --git a/src/view/index.ts b/src/view/index.ts index 645aa425b..026bea123 100644 --- a/src/view/index.ts +++ b/src/view/index.ts @@ -1,4 +1,3 @@ -import moment from 'moment' import {library} from '@fortawesome/fontawesome-svg-core' import {faArrowLeft} from '@fortawesome/free-solid-svg-icons/faArrowLeft' @@ -16,26 +15,6 @@ import {faRetweet} from '@fortawesome/free-solid-svg-icons/faRetweet' import {faX} from '@fortawesome/free-solid-svg-icons/faX' export function setup() { - moment.updateLocale('en', { - relativeTime: { - future: 'in %s', - past: '%s ago', - s: 'a few seconds', - ss: '%ds', - m: 'a minute', - mm: '%dm', - h: 'an hour', - hh: '%dh', - d: 'a day', - dd: '%dd', - w: 'a week', - ww: '%dw', - M: 'a month', - MM: '%dmo', - y: 'a year', - yy: '%dy', - }, - }) library.add( faArrowLeft, faBars, diff --git a/src/view/lib/strings.ts b/src/view/lib/strings.ts index 3ef707dd8..30426e674 100644 --- a/src/view/lib/strings.ts +++ b/src/view/lib/strings.ts @@ -21,3 +21,35 @@ export function makeRecordUri( urip.recordKey = recordKey return urip.toString() } + +const MINUTE = 60 +const HOUR = MINUTE * 60 +const DAY = HOUR * 24 +const MONTH = DAY * 30 +const YEAR = DAY * 365 +export function ago(date: number | string | Date): string { + let ts: number + if (typeof date === 'string') { + ts = Number(new Date(date)) + } else if (date instanceof Date) { + ts = Number(date) + } else { + ts = date + } + const diffSeconds = Math.floor((Date.now() - ts) / 1e3) + if (diffSeconds === 0) { + return 'just now' + } else if (diffSeconds < MINUTE) { + return `${diffSeconds}s` + } else if (diffSeconds < HOUR) { + return `${Math.floor(diffSeconds / MINUTE)}m` + } else if (diffSeconds < DAY) { + return `${Math.floor(diffSeconds / HOUR)}h` + } else if (diffSeconds < MONTH) { + return `${Math.floor(diffSeconds / DAY)}d` + } else if (diffSeconds < YEAR) { + return `${Math.floor(diffSeconds / MONTH)}mo` + } else { + return new Date(ts).toLocaleDateString() + } +} |