Commit f91781a1 by 杨周龙

新增eslint设置

1 parent 2cc98596
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
node_modules/
lib/
babel.config.js
metro.config.js
prod.js
module.exports = {
root: true,
extends: '@react-native-community',
};
{
"env": {
"browser": true,
"es2021": true,
"node": true,
"mocha": true,
"jest": true,
"react-native/react-native": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react-hooks/recommended",
"plugin:react-native/all"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": [
"react",
"react-hooks",
"react-native",
"jsx-a11y"
],
"globals": {
"JSX": true,
"React": true,
"NodeJS": true
},
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"@typescript-eslint/no-empty-function": 0,
"react-native/no-unused-styles": 2,
"react-native/no-raw-text": 0,
"react-native/no-single-element-style-arrays": 2,
"no-console": [1, { "allow": ["error"] }],
"consistent-return": 2,
"curly": [2, "multi-or-nest"],
"dot-location": 0,
"eqeqeq": 2,
"no-alert": 2,
"no-eq-null": 2,
"no-lone-blocks": 2,
"no-return-await": 2,
"no-unused-expressions": 2,
"no-label-var": 1,
"array-bracket-spacing": 2,
"brace-style": 0,
"comma-spacing": 1,
"consistent-this": 1,
"eol-last": 0,
"multiline-ternary": [1, "always-multiline"],
"new-cap": [2, { "capIsNew": false }],
"no-trailing-spaces": 0,
"semi": ["error", "never"],
"space-before-blocks": 2,
"space-in-parens": 2,
"spaced-comment": 2,
"switch-colon-spacing": ["error", { "after": true, "before": false }],
"arrow-spacing": 2,
"quotes": [0, "single"],
"key-spacing": 2,
"comma-dangle": ["error", "never"],
"react-hooks/exhaustive-deps": 0,
"no-empty-function": 0,
"react-native/no-inline-styles": 0,
"react/forbid-prop-types": 0,
"react/prop-types": 0,
"react/display-name": 0,
"prefer-promise-reject-errors": 0,
"react/no-array-index-key": 2,
"react/no-unused-state": 2,
"react/jsx-indent-props": 1,
"react/jsx-no-comment-textnodes": 1,
"react/jsx-no-duplicate-props": 2,
"react/jsx-no-target-blank": [1, { "enforceDynamicLinks": "always" }],
"react/jsx-no-undef": 2,
"react/jsx-props-no-multi-spaces": 1,
"react/jsx-tag-spacing": 1,
"react/jsx-uses-vars": 2,
"react/jsx-wrap-multilines": 2,
"react-hooks/rules-of-hooks": 2
}
}
*.pbxproj -text
# specific for windows script files
*.bat text eol=crlf
import site from './site'
export default {
site
}
export default {}
import { connect } from 'react-redux'
const mapState = state => state.site
const mapDispatch = dispatch => ({})
export default connect(mapState, mapDispatch)
import { getStorage, setStorage } from '../../../libs/utils'
import { APP } from '../../../config'
import { findAddr, findAddrVersion } from '../../../api/site'
export default {
state: {
data: []
},
reducers: {
save(_, data) {
return { data }
},
update(_, data) {
return { data }
}
},
effects: {
async init(_, rootState) {
const data = rootState.site.data
if (data.length !== 0) return
// 查询缓存库
const cacheList = await getStorage(APP.siteCacheName) || []
if (cacheList.length !== 0) { // 缓存存在数组
this.save(cacheList)
findAddrVersion()
.then(async resVersion => {
const version = await getStorage(APP.siteVersionName)
if (version != resVersion) this.httpGet(resVersion)
})
.catch(err => {})
}
else // 网络获取
this.httpGet()
},
async httpGet(version) {
findAddr()
.then(async res => {
if (version === undefined) { // 网络获取版本号
findAddrVersion()
.then(res => setStorage(APP.siteVersionName, res))
.catch(err => {})
}
setStorage(APP.siteCacheName, res)
this.update(res)
})
.catch(err => {})
}
}
}
\ No newline at end of file
......@@ -8,9 +8,8 @@ import { Text, View, FlatList, Pressable, InteractionManager } from 'react-nativ
import { Icons } from '../../../assets/icons'
import { styles } from './style'
import { dateFormat, setUnit } from '../../../libs/utils'
import { XbdDivider, XbdLoading } from 'rn-ui'
import { Toast, Divider, Empty } from 'react-native-mb-ui'
import { getVersionList } from '../../../api/version'
import { ListEmpty } from '../../../components'
const Item = memo(({ navigation, item }) => {
const { version, create_time, remark } = item
......@@ -27,7 +26,7 @@ const Item = memo(({ navigation, item }) => {
</View>
<Icons name='you' size={setUnit(32)} color='#C2C3C4' />
</Pressable>
<XbdDivider style={{ marginLeft: setUnit(25) }} />
<Divider style={{ marginLeft: setUnit(25) }} />
</>
)
})
......@@ -35,7 +34,6 @@ const Item = memo(({ navigation, item }) => {
let http
const Page = ({ navigation }) => {
const [records, setRecords] = useState([])
const [loading, setLoading] = useState(false)
useLayoutEffect(() => {
navigation.setOptions({
......@@ -60,12 +58,12 @@ const Page = ({ navigation }) => {
const fetchData = useCallback(() => {
InteractionManager.runAfterInteractions(() => {
setLoading(true)
Toast.loading()
http = getVersionList(res => {
setRecords(res?.reverse() || [])
setLoading(false)
Toast.hideLoading()
}, err => {
setLoading(false)
Toast.hideLoading()
alert(err)
})
})
......@@ -78,9 +76,8 @@ const Page = ({ navigation }) => {
contentContainerStyle={!records.length ? styles.containerStyle : {}}
keyExtractor={(item, index) => item.id?.toString()}
renderItem={({ item }) => <Item navigation={navigation} item={item} />}
ListEmptyComponent={() => <ListEmpty/>}
ListEmptyComponent={() => <Empty style={{ paddingTop: 100 }} />}
/>
<XbdLoading visible={loading}/>
</View>
)
}
......
......@@ -3,14 +3,15 @@
* @description 隐私政策
* @date 2020/09/03
*/
import React from 'react'
import React, { useEffect, useState } from 'react'
import { View, ActivityIndicator } from 'react-native'
import WebView from 'react-native-webview'
import { Colors } from '../../../commo/theme'
import { APP } from '../../../config'
import { styles } from './style'
const Page = () => {
const Page = ({ navigation }) => {
const [show, setShow] = useState(false)
const indicator = () => {
return (
<View style={styles.wrapper}>
......@@ -19,12 +20,30 @@ const Page = () => {
)
}
useEffect(()=>{
setShow(true)
const remove = navigation.addListener('beforeRemove', e => {
e.preventDefault()
setShow(false)
remove()
navigation.goBack()
})
return () => remove && remove()
}, [])
return (
<WebView
startInLoadingState={true}
renderLoading={indicator}
source={{ uri: APP.privacyLink }}
/>
<View style={{ flex: 1 }}>
{ show &&
<WebView
style={{ flex: 1 }}
startInLoadingState={true}
renderLoading={indicator}
source={{ uri: APP.privacyLink }}
/>
}
</View>
)
}
......
......@@ -11,12 +11,13 @@ const styles = StyleSheet.create({
alignItems: 'center'
},
logo: {
width: setUnit(116),
height: setUnit(116)
width: setUnit(160),
height: setUnit(160)
},
name: {
marginTop: setUnit(56),
marginTop: setUnit(32),
color: '#262626',
fontWeight: '500',
fontSize: setUnit(40)
},
version: {
......
......@@ -5,8 +5,8 @@
*/
import React, { useCallback, useEffect, useState, useRef } from 'react'
import { View, Image, Text, Alert, Linking } from 'react-native'
import { XbdCell, XbdDivider, XbdToast } from 'rn-ui'
import { View, Image, Text, Linking } from 'react-native'
import { Toast, ModalManager, Divider, Cell } from 'react-native-mb-ui'
import { styles } from './style'
import { getVersion, getVersionCode, setUnit } from '../../libs/utils'
import { getTopVersion } from '../../api/version'
......@@ -26,28 +26,32 @@ const Page = ({ navigation }) => {
const openDown = () => {
Linking.openURL(downUrl.current)
.then(() => { })
.catch(err => {
XbdToast.show('打开下载地址失败,请重试')
})
.catch(err => Toast.info('打开下载地址失败,请重试'))
}
const getUpdate = async () => {
const versionCode = await getVersionCode()
http = getTopVersion(APP.APP_CODE, res => {
if (res === null) return
http = getTopVersion(res => {
if (res === null) return Toast.info('已是最新版本')
const { version_code, down, version } = res
downUrl.current = down
if (version_code > versionCode) {
Alert.alert('提示', `发现新版本${version}需要更新,是否更新`, [
{ text: '取消' },
{ text: '立即更新', onPress: openDown }
])
ModalManager.alert({
title: '提示',
content: `发现新版本${version}需要更新,是否更新`,
button: [
{ text: '取消' },
{ text: '立即更新', onPress: openDown }
]
})
} else {
XbdToast.show('已是最新版本')
Toast.info('已是最新版本')
}
})
}, err => Toast.info(err))
}
/**获取当前版本号 */
......@@ -68,23 +72,13 @@ const Page = ({ navigation }) => {
source={require('../../assets/images/ic_launcher.png')}
style={styles.logo}
/>
<Text style={styles.name}>商品交易所</Text>
<Text style={styles.name}>{APP.appName}</Text>
<Text style={styles.version}>Version {version}</Text>
</View>
<View style={styles.center}>
<XbdDivider style={{ marginHorizontal: setUnit(25) }} />
<XbdCell
title={'功能介绍'}
onClick={() => navigation.navigate('Features')}
padLeft={setUnit(25)}
padRight={setUnit(25)}
/>
<XbdCell
title={'版本更新'}
onClick={getUpdate}
padLeft={setUnit(25)}
padRight={setUnit(25)}
/>
<Divider style={{ marginHorizontal: setUnit(25) }} />
<Cell label={'功能介绍'} onClick={() => navigation.navigate('Features')} />
<Cell label={'版本更新'} onClick={getUpdate} />
</View>
</View>
<View style={styles.footer}>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!