view.js 2.38 KB
/**
 * @author sheng
 * @description 功能介绍列表页
 * @date 2020/09/03
 */
import React, { memo, useState, useLayoutEffect, useCallback, useEffect } from 'react'
import { Text, View, FlatList, Pressable, InteractionManager } from 'react-native'
import { Icons } from '../../../assets/icons'
import { styles } from './style'
import { dateFormat, setUnit } from '../../../libs/utils'
import { Toast, Divider, Empty } from 'react-native-mb-ui'
import { getVersionList } from '../../../api/version'

const Item = memo(({ navigation, item }) => {
  const { version, create_time, remark } = item
  return (
    <>
      <Pressable
        style={styles.item}
        android_ripple={{ color: '#eee' }}
        onPress={() => { navigation.navigate('FeatureDetail', {content: remark || ''}) }}
      >
        <View style={styles.content}>
          <Text style={styles.title}>商品交易所{version}主要更新</Text>
          <Text style={styles.subtitle}>{dateFormat('MM/DD', new Date(create_time).getTime())}</Text>
        </View>
        <Icons name='you' size={setUnit(32)} color='#C2C3C4' />
      </Pressable>
      <Divider style={{ marginLeft: setUnit(25) }} />
    </>
  )
})

let http
const Page = ({ navigation }) => {
  const [records, setRecords] = useState([])

  useLayoutEffect(() => {
    navigation.setOptions({
      headerLeft: () => (
        <Icons
          name='guanbi'
          color='#555'
          size={setUnit(32)}
          style={{ paddingHorizontal: setUnit(24) }}
          onPress={() => navigation.goBack()}
        />
      )
    })
  }, [navigation])

  useEffect(() => {
    fetchData()
    return () => {
      http && http.cancel()
    }
  }, [])

  const fetchData = useCallback(() => {
    InteractionManager.runAfterInteractions(() => {
      Toast.loading()
      http = getVersionList(res => {
        setRecords(res?.reverse() || [])
        Toast.hideLoading()
      }, err => {
        Toast.hideLoading()
        alert(err)
      })
    })
  }, [])

  return (
    <View style={styles.container}>
      <FlatList
        data={records}
        contentContainerStyle={!records.length ? styles.containerStyle : {}}
        keyExtractor={(item, index) => item.id?.toString()}
        renderItem={({ item }) => <Item navigation={navigation} item={item} />}
        ListEmptyComponent={() => <Empty style={{ paddingTop: 100 }}  />}
      />
    </View>
  )
}

export default Page