Quantcast
Channel: Active questions tagged javascript - Stack Overflow
Viewing all articles
Browse latest Browse all 138134

How do you group a list of transactions by the date they're created in react native?

$
0
0

I have a JSON list of test transactions and I'm able to display them with the dates they were performed but I would like to be able to group these so that for instance all transactions that were performed today are listed under one banner that says 'Today' and other transactions that were performed on same dates fall under a banner displaying that date. I've tried to think of ways to implement this but am struggling, any help would be appreciated.

Below is the component I'm trying to create this function within.

import React from 'react';
import {
  Text,
  SafeAreaView,
  StatusBar,
  ActivityIndicator,
  FlatList,
  View,
  List,
  Image,
  SectionList,
} from 'react-native';
import moment from 'moment';
import transactions from '../testdata/transactions.json';
import Icon from 'react-native-ionicons'

var datetest = [moment(transactions[0].addedtime).calendar()];
 
moment.locale('en-uk', {
  calendar: {
    lastDay: '[Yesterday ]',
    sameDay: '[Today]',
    nextDay: '[Tomorrow]',
    lastWeek: 'L',
    nextWeek: 'dddd',
    sameElse: 'L',
  },
});

class TransactionsComponent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      isLoading: true,
      dataSource: [],
      epochDate: [],
    };
  }

  componentDidMount() {
    this.setState({
      isLoading: false,
      dataSource: transactions,
      epochDate: datetest,
    });
  }

  
  renderSeparator = () => {
    return (<View
        style={{
          height: 0,
          width: '100%',
          backgroundColor: '#F5F5F5	',
          marginLeft: '0%',
        }}
      />
    );
  };

  render() {
    if (this.state.isLoading) {
      return (
        <View style={{flex: 1, padding: 20}}><ActivityIndicator /></View>
      );
    }
  }


 

  render() {
    return (
      <View style={{width: '100%'}}><FlatList
          data={this.state.dataSource}
          renderItem={({item}) => (<View
              style={{
                flex: 1,
                flexDirection: 'column',
                borderBottomColor: '#5AA8C8',
                borderBottomWidth: 1,
                paddingBottom: 10,
              }}>

              
              { <View style={{marginLeft: '3%'}}><Text style={{fontWeight: 'bold', fontSize: 18}}>
                  {moment(item.addedtime).calendar()}</Text></View> }<View style={{marginLeft: '5%', flexDirection: 'row', flex: 2,}}><View
                  style={{flexDirection: 'row', alignItems: 'center', flex: 3}}><Image
                    style={{width: 40, height: 40}}
                    source={{uri: item.iconblob}}
                  /><Text
                    style={{fontSize: 16, color: 'grey', fontWeight: 'bold'}}>
                    {''}
                    {item.merchantname}</Text></View><View
                  style={{
                    flex: 1,
                    flexDirection: 'row',
                    alignItems: 'center',
                    justifyContent: 'flex-end',
                    marginRight: '3%',
                  }}><Text style={{fontSize: 18, color: 'black'}}><Text style={{fontSize: 12, color: 'grey'}}>CHF</Text>
                    {parseFloat(item.billingamountauthorised / 100).toFixed(2)}</Text><View style= {{flex :6, flexDirection:"row", justifyContent:"flex-end"}}><Icon name="arrow-dropright" color="#5AA8C8" /></View></View></View></View>
          )}
          keyExtractor={item => item.uniqueref}
          //containerStyle={{borderBottomWidth: 0}}
        /></View>
    );
  }
}

export default TransactionsComponent;

This is an example of how the JSON looks with addedtime being the epoch date the transaction was created

[   
    {"billingamountauthorised": "1","iconblob": "https://is1-ssl.mzstatic.com/image/thumb/Purple114/v4/cb/cf/bb/cbcfbb61-4d03-4f4e-ecf7-b7582688435f/source/512x512bb.jpg","merchantname": "K Kiosk Sihlquai","merchantstreet": "Sihlquai","addedtime": 1576590342000,"uniqueref": "A446806878486B5B"
},
{"billingamountauthorised": "750","iconblob": "https://upload.wikimedia.org/wikipedia/en/thumb/d/d3/Starbucks_Corporation_Logo_2011.svg/1024px-Starbucks_Corporation_Logo_2011.svg.png","merchantname": "Starbucks","merchantstreet": "Rue du Mont-Blanc","addedtime": 1576590342000,"uniqueref": "D0868EB65DC2DE585"
},
    {"billingamountauthorised": "1","iconblob": "https://is1-ssl.mzstatic.com/image/thumb/Purple114/v4/cb/cf/bb/cbcfbb61-4d03-4f4e-ecf7-b7582688435f/source/512x512bb.jpg","merchantname": "K Kiosk Sihlquai","merchantstreet": "Sihlquai","addedtime": 1576590342000,"uniqueref": "A446806878486B5B0"
    },
    {"billingamountauthorised": "100","iconblob": "https://is1-ssl.mzstatic.com/image/thumb/Purple114/v4/cb/cf/bb/cbcfbb61-4d03-4f4e-ecf7-b7582688435f/source/512x512bb.jpg","merchantname": "K Kiosk Sihlquai","merchantstreet": "Sihlquai","addedtime": 1575554709000,"uniqueref": "0D10B5F56A73D73DD"
    },
    {"billingamountauthorised": "1320","iconblob": "https://pbs.twimg.com/profile_images/568401882444349441/KDWvUHCJ_400x400.jpeg","merchantname": "Schweizerische Bundesbahnen","merchantstreet": "Bahnhofplatz","addedtime": 1575554709000,"uniqueref": "2F3D907B0FF675216"
    }
  ]

This is currently how it is the transactions are looking with each one displaying the date next to it regardless of if the date is the same as another transaction.


Viewing all articles
Browse latest Browse all 138134

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>