import React, {Component} from 'react'; import {StyleSheet, ScrollView} from 'react-native'; import {FlatList, GestureHandlerRootView} from 'react-native-gesture-handler'; import { Assets, View, Text, Colors, PanView, Card, Constants, Modal, BorderRadiuses, Icon, TouchableOpacity } from 'react-native-ui-lib'; interface Item { value: string; label: string; } const OVERLAY_BACKGROUND_COLOR = Colors.rgba(Colors.$backgroundInverted, 0.3); const colors: Item[] = [ {value: Colors.red10, label: 'Red10'}, {value: Colors.red30, label: 'Red30'}, {value: Colors.red50, label: 'Red50'}, {value: Colors.red70, label: 'Red70'}, {value: Colors.blue10, label: 'Blue10'}, {value: Colors.blue30, label: 'Blue30'}, {value: Colors.blue50, label: 'Blue50'}, {value: Colors.blue70, label: 'Blue70'}, {value: Colors.purple10, label: 'Purple10'}, {value: Colors.purple30, label: 'Purple30'}, {value: Colors.purple50, label: 'Purple50'}, {value: Colors.purple70, label: 'Purple70'}, {value: Colors.green10, label: 'Green10'}, {value: Colors.green30, label: 'Green30'}, {value: Colors.green50, label: 'Green50'}, {value: Colors.green70, label: 'Green70'}, {value: Colors.yellow10, label: 'Yellow10'}, {value: Colors.yellow30, label: 'Yellow30'}, {value: Colors.yellow50, label: 'Yellow50'}, {value: Colors.yellow70, label: 'Yellow70'} ]; const TOAST_DIRECTIONS = [PanView.directions.LEFT, PanView.directions.DOWN, PanView.directions.RIGHT]; const DIALOG_DIRECTIONS = [PanView.directions.DOWN]; const TOAST_THRESHOLD = {y: 10}; class PanViewScreen extends Component { state = { showToast: false, showDialog: false }; onDialogDismissed = () => { this.setState({showDialog: false}); }; keyExtractor = (item: Item) => { return item.value; }; renderVerticalItem = ({item}: {item: Item}) => { return ( {item.label} ); }; renderDialog = () => { return ( Title (swipe here) ); }; onToastDismissed = () => { this.setState({showToast: false}); }; renderToast = () => { return ( Swipe or click to dismiss ); }; renderCard = (key: string, name: string) => { // @ts-expect-error const value = this.state[key]; const text = value ? `I'm still showing or being dismissed` : `Click me (${name})`; const onPress = value ? undefined : () => this.setState({[key]: true}); return ( {text} ); }; render() { const {showToast, showDialog} = this.state; return ( New Pan View {this.renderCard('showToast', 'toast')} {this.renderCard('showDialog', 'dialog')} Scrollable {showToast && this.renderToast()} {showDialog && this.renderDialog()} ); } } export default PanViewScreen; const styles = StyleSheet.create({ root: { flex: 1, backgroundColor: Colors.grey80 }, panView: { flex: 1, position: 'absolute', bottom: 20, alignSelf: 'center' }, toast: { backgroundColor: Colors.white, width: 200, height: 40, borderRadius: BorderRadiuses.br20, borderWidth: 0.5, borderColor: Colors.grey30 }, dialog: { backgroundColor: Colors.white, width: 200, height: 300, borderRadius: BorderRadiuses.br20 }, verticalScroll: { marginTop: 20 } });