Chore: remove timeago.js

This commit is contained in:
Dreamacro 2019-12-23 17:19:54 +08:00
parent 83d1bcc848
commit ce2ee24c0e
7 changed files with 23 additions and 14 deletions

5
package-lock.json generated
View File

@ -12620,11 +12620,6 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true "dev": true
}, },
"timeago.js": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.1.tgz",
"integrity": "sha512-ePzZuMoJqUc44hJbUYtY1qtzU7IammxooDCcFKogLkS5Nj+iCabR0ZlmNOFX8Dm1r5EpvR5q/PotOJli/mEPew=="
},
"timed-out": { "timed-out": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",

View File

@ -87,7 +87,6 @@
"react-window": "^1.8.5", "react-window": "^1.8.5",
"semver": "^6.3.0", "semver": "^6.3.0",
"swr": "^0.1.13", "swr": "^0.1.13",
"timeago.js": "^4.0.1",
"unstated-next": "^1.1.0", "unstated-next": "^1.1.0",
"use-immer": "^0.3.5" "use-immer": "^0.3.5"
} }

View File

@ -2,7 +2,6 @@ import React, { useEffect, useState, useMemo, useCallback, useRef, useLayoutEffe
import { useBlockLayout, useResizeColumns, useTable } from 'react-table' import { useBlockLayout, useResizeColumns, useTable } from 'react-table'
import { VariableSizeGrid as Grid, GridOnScrollProps, GridChildComponentProps } from 'react-window' import { VariableSizeGrid as Grid, GridOnScrollProps, GridChildComponentProps } from 'react-window'
import AutoSizer from 'react-virtualized-auto-sizer' import AutoSizer from 'react-virtualized-auto-sizer'
import { format } from 'timeago.js'
import classnames from 'classnames' import classnames from 'classnames'
import { Header, Card, Checkbox, Modal, useModal, Icon } from '@components' import { Header, Card, Checkbox, Modal, useModal, Icon } from '@components'
import { containers } from '@stores' import { containers } from '@stores'
@ -10,6 +9,7 @@ import * as API from '@lib/request'
import { StreamReader } from '@lib/streamer' import { StreamReader } from '@lib/streamer'
import { useObject } from '@lib/hook' import { useObject } from '@lib/hook'
import { noop } from '@lib/helper' import { noop } from '@lib/helper'
import { fromNow } from '@lib/date'
import { useConnections } from './store' import { useConnections } from './store'
import './style.scss' import './style.scss'
@ -114,7 +114,7 @@ export default function Connections () {
host: `${ c.metadata.host || c.metadata.destinationIP }:${ c.metadata.destinationPort }`, host: `${ c.metadata.host || c.metadata.destinationIP }:${ c.metadata.destinationPort }`,
chains: c.chains.slice().reverse().join(' --> '), chains: c.chains.slice().reverse().join(' --> '),
rule: c.rule, rule: c.rule,
time: format(new Date(c.start), lang), time: fromNow(new Date(c.start), lang),
upload: formatTraffic(c.upload), upload: formatTraffic(c.upload),
download: formatTraffic(c.download), download: formatTraffic(c.download),
type: c.metadata.type, type: c.metadata.type,

View File

@ -1,7 +1,7 @@
import * as React from 'react' import * as React from 'react'
import { format } from 'timeago.js'
import { Card, Tag, Icon, Loading, useLoading } from '@components' import { Card, Tag, Icon, Loading, useLoading } from '@components'
import { containers } from '@stores' import { containers } from '@stores'
import { fromNow } from '@lib/date'
import { Provider as IProvider, Proxy as IProxy, updateProvider, healthCheckProvider } from '@lib/request' import { Provider as IProvider, Proxy as IProxy, updateProvider, healthCheckProvider } from '@lib/request'
import { Proxy } from '../Proxy' import { Proxy } from '../Proxy'
import './style.scss' import './style.scss'
@ -40,7 +40,7 @@ export function Provider (props: ProvidersProps) {
<div className="proxy-provider-header-part"> <div className="proxy-provider-header-part">
{ {
provider.updatedAt && provider.updatedAt &&
<span className="proxy-provider-update">{ `${t('providerUpdateTime')}: ${format(new Date(provider.updatedAt), lang)}`}</span> <span className="proxy-provider-update">{ `${t('providerUpdateTime')}: ${fromNow(new Date(provider.updatedAt), lang)}`}</span>
} }
<Icon className="proxy-provider-icon healthcheck" type="healthcheck" size={18} onClick={handleHealthChech} /> <Icon className="proxy-provider-icon healthcheck" type="healthcheck" size={18} onClick={handleHealthChech} />
<Icon className="proxy-provider-icon" type="update" size={18} onClick={handleUpdate} /> <Icon className="proxy-provider-icon" type="update" size={18} onClick={handleUpdate} />

View File

@ -5,6 +5,7 @@ import { updateConfig } from '@lib/request'
import { useObject } from '@lib/hook' import { useObject } from '@lib/hook'
import { to } from '@lib/helper' import { to } from '@lib/helper'
import { isClashX, jsBridge } from '@lib/jsBridge' import { isClashX, jsBridge } from '@lib/jsBridge'
import { Lang } from '@i18n'
import './style.scss' import './style.scss'
const languageOptions: ButtonSelectOptions[] = [{ label: '中文', value: 'zh_CN' }, { label: 'English', value: 'en_US' }] const languageOptions: ButtonSelectOptions[] = [{ label: '中文', value: 'zh_CN' }, { label: 'English', value: 'en_US' }]
@ -50,7 +51,7 @@ export default function Settings () {
fetchClashXData() fetchClashXData()
} }
function changeLanguage (language: string) { function changeLanguage (language: Lang) {
setLang(language) setLang(language)
} }

View File

@ -10,6 +10,8 @@ const Language = {
zh_CN zh_CN
} }
export type Lang = keyof typeof Language
const languageKey = 'language' const languageKey = 'language'
const locales = Object.keys(Language) const locales = Object.keys(Language)
@ -30,10 +32,10 @@ function getNavigatorLanguage (): string[] {
return found return found
} }
function getLanguage () { function getLanguage (): Lang {
const localLanguage = getLocalStorageItem(languageKey) const localLanguage = getLocalStorageItem(languageKey)
if (localLanguage && locales.includes(localLanguage)) { if (localLanguage && locales.includes(localLanguage)) {
return localLanguage return localLanguage as Lang
} }
const navigatorLanguage = getNavigatorLanguage() const navigatorLanguage = getNavigatorLanguage()
@ -51,7 +53,7 @@ function getLanguage () {
export function useI18n () { export function useI18n () {
const [lang, set] = useState(getLanguage()) const [lang, set] = useState(getLanguage())
function setLang (lang: string) { function setLang (lang: Lang) {
set(lang) set(lang)
setLocalStorageItem(languageKey, lang) setLocalStorageItem(languageKey, lang)
} }

12
src/lib/date.ts Normal file
View File

@ -0,0 +1,12 @@
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/zh-cn'
import { Lang } from '@i18n'
dayjs.extend(relativeTime)
export function fromNow (date: Date, lang: Lang): string {
const locale = lang === 'en_US' ? 'en' : 'zh-cn'
return dayjs().locale(locale).from(date)
}