diff --git a/src/components/Tags/index.tsx b/src/components/Tags/index.tsx index d62ee91..54e84c2 100644 --- a/src/components/Tags/index.tsx +++ b/src/components/Tags/index.tsx @@ -14,15 +14,15 @@ interface TagsProps extends BaseComponentProps, I18nProps { } export function Tags (props: TagsProps) { - const { className, data, onClick, select, canClick } = props + const { className, data, onClick, select, canClick, rowHeight: rawHeight } = props const { t } = useTranslation() const [expand, setExpand] = useState(false) const ulRef = useRef() - const showExtend = useMemo(() => ulRef.current.offsetHeight > 30, [ulRef]) + const showExtend = useMemo(() => ulRef.current && ulRef.current.offsetHeight > 30, [ulRef.current]) - const rowHeight = this.state.expand ? 'auto' : this.props.rowHeight + const rowHeight = expand ? 'auto' : rawHeight const handleClick = canClick ? onClick : noop function toggleExtend () { diff --git a/src/containers/ExternalControllerDrawer/index.tsx b/src/containers/ExternalControllerDrawer/index.tsx index d8232d0..12775b2 100644 --- a/src/containers/ExternalControllerDrawer/index.tsx +++ b/src/containers/ExternalControllerDrawer/index.tsx @@ -1,12 +1,12 @@ import * as React from 'react' -import { withTranslation } from 'react-i18next' +import { withTranslation, WithTranslation } from 'react-i18next' import { inject, observer } from 'mobx-react' import { storeKeys } from '@lib/createStore' import { Modal, Input, Row, Col, Alert } from '@components' -import { BaseProps, I18nProps } from '@models' +import { BaseProps } from '@models' import './style.scss' -interface ExternalControllerModalProps extends I18nProps, BaseProps {} +interface ExternalControllerModalProps extends BaseProps, WithTranslation {} interface ExternalControllerModalState { hostname: string diff --git a/src/containers/Logs/index.tsx b/src/containers/Logs/index.tsx index 66ebe9a..004aba2 100644 --- a/src/containers/Logs/index.tsx +++ b/src/containers/Logs/index.tsx @@ -1,7 +1,6 @@ import * as React from 'react' -import * as dayjs from 'dayjs' -import { translate } from 'react-i18next' -import { I18nProps } from '@models' +import dayjs from 'dayjs' +import { withTranslation, WithTranslation } from 'react-i18next' import { Card, Header } from '@components' import './style.scss' import { getLogsStreamReader } from '@lib/request' @@ -12,7 +11,7 @@ interface Log { time: Date } -interface LogsProps extends I18nProps {} +interface LogsProps extends WithTranslation {} interface LogsState { logs: Log[] @@ -64,4 +63,4 @@ class Logs extends React.Component { } } -export default translate(['Logs'])(Logs) +export default withTranslation(['Logs'])(Logs) diff --git a/src/containers/Proxies/components/ModifyProxyDialog/index.tsx b/src/containers/Proxies/components/ModifyProxyDialog/index.tsx index faeeddd..322c38b 100644 --- a/src/containers/Proxies/components/ModifyProxyDialog/index.tsx +++ b/src/containers/Proxies/components/ModifyProxyDialog/index.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { translate } from 'react-i18next' +import { withTranslation, WithTranslation } from 'react-i18next' import { Modal } from '@components' import { getLocalStorageItem, setLocalStorageItem } from '@lib/helper' import './style.scss' @@ -8,7 +8,6 @@ import { BaseComponentProps, Proxy as IProxy, SsProxyConfigList, VmessProxyConfigList, Socks5ProxyConfigList, - I18nProps, TagColors, ProxyType, SsCipher, VmessCipher, pickCipherWithAlias @@ -23,7 +22,7 @@ import { ProxyCipherSelector } from './FormItems' -interface ModifyProxyDialogProps extends BaseComponentProps, I18nProps { +interface ModifyProxyDialogProps extends BaseComponentProps, WithTranslation { config: IProxy onOk?: (config: IProxy) => void onCancel?: () => void @@ -222,4 +221,4 @@ class RawDialog extends React.Component { } } -export default translate(['Proxies'])(Proxies) +export default withTranslation(['Proxies'])(Proxies) diff --git a/src/containers/Rules/index.tsx b/src/containers/Rules/index.tsx index 2e71d2d..b99d181 100644 --- a/src/containers/Rules/index.tsx +++ b/src/containers/Rules/index.tsx @@ -1,13 +1,13 @@ import * as React from 'react' -import { translate } from 'react-i18next' +import { withTranslation, WithTranslation } from 'react-i18next' import { Header, Card, Row, Col } from '@components' -import { I18nProps, BaseRouterProps } from '@models' +import { BaseRouterProps } from '@models' import './style.scss' import { storeKeys } from '@lib/createStore' import { inject, observer } from 'mobx-react' import { List, AutoSizer } from 'react-virtualized' -interface RulesProps extends BaseRouterProps, I18nProps {} +interface RulesProps extends BaseRouterProps, WithTranslation {} @inject(...storeKeys) @observer @@ -64,4 +64,4 @@ class Rules extends React.Component { } } -export default translate(['Rules'])(Rules) +export default withTranslation(['Rules'])(Rules) diff --git a/src/containers/Settings/index.tsx b/src/containers/Settings/index.tsx index 4ae9afb..df3628d 100644 --- a/src/containers/Settings/index.tsx +++ b/src/containers/Settings/index.tsx @@ -1,16 +1,16 @@ import * as React from 'react' -import { translate } from 'react-i18next' -import { changeLanguage } from 'i18next' +import { withTranslation, WithTranslation } from 'react-i18next' +import i18next from 'i18next' import { inject, observer } from 'mobx-react' import { Header, Card, Row, Col, Switch, ButtonSelect, ButtonSelectOptions, Input, Icon } from '@components' -import { I18nProps, BaseRouterProps } from '@models' +import { BaseRouterProps } from '@models' import { updateConfig } from '@lib/request' import { to } from '@lib/helper' import { rootStores, storeKeys } from '@lib/createStore' import './style.scss' import { isClashX, jsBridge } from '@lib/jsBridge' -interface SettingProps extends BaseRouterProps, I18nProps {} +interface SettingProps extends BaseRouterProps, WithTranslation {} @inject(...storeKeys) @observer @@ -24,7 +24,7 @@ class Settings extends React.Component { languageOptions: ButtonSelectOptions[] = [{ label: '中文', value: 'zh' }, { label: 'English', value: 'en' }] changeLanguage = (language: string) => { - changeLanguage(language) + i18next.changeLanguage(language) } handleProxyModeChange = async (mode: string) => { @@ -84,7 +84,7 @@ class Settings extends React.Component { } render () { - const { t, lng, store } = this.props + const { t, i18n, store } = this.props const { isClashX, socks5ProxyPort, @@ -125,7 +125,7 @@ class Settings extends React.Component { {t('labels.language')} - + @@ -222,4 +222,4 @@ class Settings extends React.Component { } } -export default translate(['Settings'])(Settings) +export default withTranslation(['Settings'])(Settings) diff --git a/src/containers/Sidebar/index.tsx b/src/containers/Sidebar/index.tsx index a085ced..44671b1 100644 --- a/src/containers/Sidebar/index.tsx +++ b/src/containers/Sidebar/index.tsx @@ -1,13 +1,12 @@ import * as React from 'react' import { NavLink } from 'react-router-dom' -import { translate } from 'react-i18next' +import { withTranslation, WithTranslation } from 'react-i18next' import classnames from 'classnames' -import { I18nProps } from '@models' import './style.scss' const logo = require('@assets/logo.png') -interface SidebarProps extends I18nProps { +interface SidebarProps extends WithTranslation { routes: { path: string name: string @@ -38,4 +37,4 @@ class Sidebar extends React.Component { } } -export default translate(['SideBar'])(Sidebar) +export default withTranslation(['SideBar'])(Sidebar) diff --git a/src/i18n/index.ts b/src/i18n/index.ts index d6703be..d9647f2 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,5 +1,5 @@ -import * as i18n from 'i18next' -import * as LanguageDetector from 'i18next-browser-languagedetector' +import i18n from 'i18next' +import LanguageDetector from 'i18next-browser-languagedetector' // locales import en_US from './en_US' @@ -24,4 +24,6 @@ const options = { } } -export default i18n.use(LanguageDetector).init(options) +i18n.use(LanguageDetector).init(options) + +export default i18n