import React, {Component} from 'react'; import {StyleSheet} from 'react-native'; import { View, Text, Constants, SortableGridList, Card, Spacings, BorderRadiuses, GridListProps, SortableGridListProps, Button } from 'react-native-ui-lib'; import _ from 'lodash'; import products from '../../data/products'; import {renderBooleanOption} from '../ExampleScreenPresenter'; const productsWithIds = products.map(product => ({...product})); type Item = (typeof productsWithIds)[0]; class SortableGridListScreen extends Component { state = { orientation: Constants.orientation, selectedItemId: undefined, items: productsWithIds, removedItems: [] as Item[], shouldOrderByIndex: false }; itemsOrdered = this.state.items; onOrderChange: SortableGridListProps['onOrderChange'] = (newOrderedData, newOrder) => { this.itemsOrdered = newOrderedData; console.log('newOrder:', newOrder); }; selectItem = ({customValue: id}: {customValue: number}) => { const {selectedItemId} = this.state; if (id === selectedItemId) { this.setState({selectedItemId: undefined}); } else { this.setState({selectedItemId: id}); } }; removeSelectedItem = () => { const {selectedItemId, removedItems} = this.state; if (!_.isUndefined(selectedItemId)) { const newItems = [...this.itemsOrdered]; const removed = _.remove(newItems, item => item.id === selectedItemId); removedItems.push(removed[0]); this.setState({items: newItems, selectedItemId: undefined, removedItems}); this.itemsOrdered = newItems; } }; addItem = () => { const {removedItems} = this.state; const itemToAdd = removedItems.pop(); if (itemToAdd) { this.itemsOrdered.push(itemToAdd); const newItems = [...this.itemsOrdered]; this.setState({items: newItems, selectedItemId: undefined, removedItems}); } }; renderItem: GridListProps['renderItem'] = ({item}) => { const {selectedItemId} = this.state; return ( {item.id} ) }} /> ); }; render() { const {items, removedItems, selectedItemId, shouldOrderByIndex} = this.state; return ( SortableGridList