123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- // @flow
-
- import * as React from 'react';
- import {Image, Linking, TouchableOpacity, View} from 'react-native';
- import {Body, Button, Card, CardItem, Left, Text, Thumbnail} from 'native-base';
- import i18n from "i18n-js";
- import CustomMaterialIcon from '../components/CustomMaterialIcon';
- import FetchedDataSectionList from "../components/FetchedDataSectionList";
- import Autolink from 'react-native-autolink';
- import ThemeManager from "../utils/ThemeManager";
-
- const ICON_AMICALE = require('../assets/amicale.png');
- const NAME_AMICALE = 'Amicale INSA Toulouse';
- const DATA_URL = "https://srv-falcon.etud.insa-toulouse.fr/~amicale_app/facebook/facebook_data.json";
-
-
- /**
- * Opens a link in the device's browser
- * @param link The link to open
- */
- function openWebLink(link) {
- Linking.openURL(link).catch((err) => console.error('Error opening link', err));
- }
-
- /**
- * Class defining the app's home screen
- */
- export default class HomeScreen extends FetchedDataSectionList {
-
- constructor() {
- super(DATA_URL, 0);
- }
-
- getHeaderTranslation() {
- return i18n.t("screens.home");
- }
-
- getUpdateToastTranslations() {
- return [i18n.t("homeScreen.listUpdated"), i18n.t("homeScreen.listUpdateFail")];
- }
-
- getKeyExtractor(item: Object) {
- return item !== undefined ? item.id : undefined;
- }
-
- createDataset(fetchedData: Object) {
- let data = [];
- if (fetchedData.data !== undefined)
- data = fetchedData.data;
- return [
- {
- title: '',
- data: data,
- extraData: super.state,
- keyExtractor: this.getKeyExtractor
- }
- ];
- }
-
- /**
- * Converts a dateString using Unix Timestamp to a formatted date
- * @param dateString {string} The Unix Timestamp representation of a date
- * @return {string} The formatted output date
- */
- static getFormattedDate(dateString: string) {
- let date = new Date(Number.parseInt(dateString) * 1000);
- return date.toLocaleString();
- }
-
- getRenderItem(item: Object, section: Object, data: Object) {
- return (
- <Card style={{
- flex: 0,
- marginLeft: 10,
- marginRight: 10
- }}>
- <CardItem>
- <Left>
- <Thumbnail source={ICON_AMICALE} square/>
- <Body>
- <Text>{NAME_AMICALE}</Text>
- <Text note>{HomeScreen.getFormattedDate(item.created_time)}</Text>
- </Body>
- </Left>
- </CardItem>
- <CardItem>
- <Body>
- {item.full_picture !== '' && item.full_picture !== undefined ?
- <TouchableOpacity onPress={() => openWebLink(item.full_picture)}
- style={{width: '100%', height: 250}}>
- <Image source={{uri: item.full_picture}}
- style={{flex: 1, resizeMode: "contain"}}
- resizeMode="contain"
- />
- </TouchableOpacity>
- : <View/>}
- {item.message !== undefined ?
- <Autolink
- text={item.message}
- hashtag="facebook"
- style={{color: ThemeManager.getCurrentThemeVariables().textColor}}
- /> : <View/>
- }
- </Body>
- </CardItem>
- <CardItem>
- <Left>
- <Button transparent
- onPress={() => openWebLink(item.permalink_url)}>
- <CustomMaterialIcon
- icon="facebook"
- color="#57aeff"
- width={20}/>
- <Text>En savoir plus</Text>
- </Button>
- </Left>
- </CardItem>
- </Card>
- );
- }
-
- }
|