view.tsx 2.72 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