11// @flow
22
33import React from 'react'
4- import { Dimensions , StyleSheet } from 'react-native'
4+ import { StyleSheet , FlatList } from 'react-native'
55
66import { saveHomescreenOrder } from '../../../flux/parts/homescreen'
77import { connect } from 'react-redux'
88import * as c from '../../components/colors'
9- import fromPairs from 'lodash/fromPairs'
109import sortBy from 'lodash/sortBy'
1110
1211import type { ViewType } from '../../views'
@@ -22,28 +21,54 @@ const styles = StyleSheet.create({
2221} )
2322
2423type Props = {
25- onSaveOrder : ( ViewType [ ] ) => any ,
24+ onChangeOrder : ( string [ ] ) => any ,
2625 order : string [ ] ,
2726}
28- ; [ ]
2927
30- type State = {
31- width : number ,
32- }
33- ; [ ]
34-
35- class EditHomeView extends React . PureComponent < void , Props , State > {
28+ class EditHomeView extends React . PureComponent < void , Props , void > {
3629 static navigationOptions = {
3730 title : 'Edit Home' ,
3831 }
3932
40- renderRow = ( { data, active} : { data : ViewType , active : boolean } ) => (
41- < EditHomeRow data = { data } active = { active } width = { this . state . width } />
42- )
33+ handleMoveUp = ( currentOrder : string [ ] , viewName : string ) => {
34+ const currentIndex = currentOrder . indexOf ( viewName )
35+ const newIndex = Math . max ( 0 , currentIndex - 1 )
36+ this . onChangeOrder ( currentOrder , viewName , newIndex )
37+ }
38+
39+ handleMoveDown = ( currentOrder : string [ ] , viewName : string ) => {
40+ const currentIndex = currentOrder . indexOf ( viewName )
41+ const newIndex = Math . min ( currentOrder . length - 1 , currentIndex + 1 )
42+ this . onChangeOrder ( currentOrder , viewName , newIndex )
43+ }
44+
45+ onChangeOrder = (
46+ currentOrder : string [ ] ,
47+ viewName : string ,
48+ newIndex : number ,
49+ ) = > {
50+ const newOrder = currentOrder . filter ( v => v !== viewName )
51+ newOrder . splice ( newIndex , 0 , viewName )
52+
53+ this . props . onChangeOrder ( newOrder )
54+ }
4355
44- onChangeOrder = ( order : ViewType [ ] ) => this . props . onSaveOrder ( order )
56+ renderItem = ( { item} : { item : ViewType } ) => {
57+ const index = this . props . order . indexOf ( item . view )
58+ const last = this . props . order . length - 1
59+ return (
60+ < EditHomeRow
61+ item = { item }
62+ isFirst = { index === 0 }
63+ isLast = { index === last }
64+ order = { this . props . order }
65+ onMoveUp = { this . handleMoveUp }
66+ onMoveDown = { this . handleMoveDown }
67+ />
68+ )
69+ }
4570
46- keyExtractor = ( item : ViewType ) => view . view
71+ keyExtractor = ( item : ViewType ) = > item . view
4772
4873 render ( ) {
4974 const data = sortBy ( allViews , ( item : ViewType ) =>
@@ -53,24 +78,22 @@ class EditHomeView extends React.PureComponent<void, Props, State> {
5378 return (
5479 < FlatList
5580 contentContainerStyle = { styles . contentContainer }
56- data = { allViews }
81+ data = { data }
5782 keyExtractor = { this . keyExtractor }
5883 onChangeOrder = { this . onChangeOrder }
59- renderRow = { this . renderRow }
84+ renderItem = { this . renderItem }
6085 />
6186 )
6287 }
6388}
6489
6590function mapState ( state ) {
66- return {
67- order : state . homescreen . order ,
68- }
91+ return { order : state . homescreen . order }
6992}
7093
7194function mapDispatch ( dispatch ) {
7295 return {
73- onSaveOrder : newOrder => dispatch ( saveHomescreenOrder ( newOrder ) ) ,
96+ onChangeOrder : newOrder => dispatch ( saveHomescreenOrder ( newOrder ) ) ,
7497 }
7598}
7699
0 commit comments