Guest User

Untitled

a guest
Jul 29th, 2020
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { ReactElement, useState } from 'react'
  2. import styles from './styles'
  3. import { SafeAreaView, ScrollView, Text, View } from 'react-native'
  4. import i18n from 'i18n-js'
  5. import Cell from './components/cell/Cell'
  6. import Modal from 'react-native-modal'
  7. import Button from '../../components/button/Button'
  8. import { colors } from '../../assets/colors'
  9. import { inject, observer } from 'mobx-react'
  10. import ProgramsStore from '../../store/ProgramsStore'
  11. import SelectProgramModal from '../select_program/SelectProgramModal'
  12. import { testIDs } from '../../../e2e/testIDs'
  13.  
  14. const ANIMATION_MSEC = 400
  15.  
  16. interface Props {
  17.     isVisible: boolean
  18.     initialFrom: Date
  19.     initialTo: Date
  20.     initialProgramIndex: number
  21.     onSelectPress?: (from: Date, to: Date, programIndex: number) => void
  22.     onCancel?: () => void
  23.     programsStore?: ProgramsStore
  24. }
  25. const defaultProps: Props = {
  26.     isVisible: false,
  27.     initialProgramIndex: 0,
  28.     initialFrom: new Date(),
  29.     initialTo: new Date(),
  30. }
  31.  
  32. const FilterModal = ({
  33.     isVisible,
  34.     initialFrom,
  35.     initialTo,
  36.     initialProgramIndex,
  37.     onSelectPress,
  38.     onCancel,
  39.     programsStore: { programsResponse },
  40. }: Props): ReactElement => {
  41.     const [from, setFrom] = useState<Date>(initialFrom)
  42.     const [to, setTo] = useState<Date>(initialTo)
  43.     const [programIndex, setProgramIndex] = useState<number>(initialProgramIndex)
  44.     const [selectProgramVisible, setSelectProgramVisible] = useState<boolean>(false)
  45.     const [fromExpanded, setFromExpanded] = useState<boolean>(false)
  46.     const [toExpanded, setToExpanded] = useState<boolean>(false)
  47.     const handleCancelPress = () => onCancel && onCancel()
  48.     const handleSelectPress = () => onSelectPress && onSelectPress(from, to, programIndex)
  49.     const handleSavePress = (selectedIndex: number) => {
  50.         setProgramIndex(selectedIndex)
  51.         setSelectProgramVisible(false)
  52.     }
  53.     const handleProgramPress = () => setSelectProgramVisible(true)
  54.     const handleProgramCancelPress = () => setSelectProgramVisible(false)
  55.     const { programTitle } = programsResponse[programIndex]
  56.     const handleToPress = () => {
  57.         setFromExpanded(!toExpanded ? toExpanded : false)
  58.         setToExpanded(!toExpanded)
  59.     }
  60.     const handleFromPress = () => {
  61.         setFromExpanded(!fromExpanded)
  62.         setToExpanded(!fromExpanded ? fromExpanded : false)
  63.     }
  64.     return (
  65.         <Modal
  66.             animationInTiming={ANIMATION_MSEC}
  67.             animationOutTiming={ANIMATION_MSEC}
  68.             backdropTransitionOutTiming={ANIMATION_MSEC}
  69.             backdropTransitionInTiming={ANIMATION_MSEC}
  70.             animationIn={'slideInUp'}
  71.             animationOut={'slideOutDown'}
  72.             backdropColor={colors.brown_1}
  73.             backdropOpacity={0.5}
  74.             onBackButtonPress={handleCancelPress}
  75.             onBackdropPress={handleCancelPress}
  76.             propagateSwipe={true}
  77.             style={styles.modal}
  78.             isVisible={isVisible}>
  79.             <SafeAreaView style={styles.container}>
  80.                 <ScrollView testID={testIDs.filter.scrollContainer}>
  81.                     <Text style={styles.title}>{i18n.t('Filter by date')}</Text>
  82.                     <View style={styles.itemsContainer}>
  83.                         <Cell
  84.                             testID={testIDs.filter.from}
  85.                             type={'from'}
  86.                             title={i18n.t('From')}
  87.                             date={from}
  88.                             onPress={handleFromPress}
  89.                             onDateChange={setFrom}
  90.                             expanded={fromExpanded}
  91.                         />
  92.                         <Cell
  93.                             testID={testIDs.filter.to}
  94.                             onPress={handleToPress}
  95.                             type={'to'}
  96.                             title={i18n.t('To')}
  97.                             date={to}
  98.                             onDateChange={setTo}
  99.                             expanded={toExpanded}
  100.                         />
  101.                     </View>
  102.                     <Text style={styles.title}>{i18n.t('Select program')}</Text>
  103.                     <View style={styles.itemsContainer}>
  104.                         <Cell
  105.                             testID={testIDs.filter.program}
  106.                             type={'program'}
  107.                             title={programTitle}
  108.                             onPress={handleProgramPress}
  109.                         />
  110.                     </View>
  111.                     <View style={styles.selectContainer}>
  112.                         <Button
  113.                             testID={testIDs.filter.select}
  114.                             text={i18n.t('Select')}
  115.                             onPress={handleSelectPress}
  116.                         />
  117.                     </View>
  118.                 </ScrollView>
  119.             </SafeAreaView>
  120.             <SelectProgramModal
  121.                 isVisible={selectProgramVisible}
  122.                 onBackPress={handleProgramCancelPress}
  123.                 initialIndex={programIndex}
  124.                 onSavePress={handleSavePress}
  125.             />
  126.         </Modal>
  127.     )
  128. }
  129. FilterModal.defaultProps = defaultProps
  130.  
  131. export default inject('programsStore')(observer(FilterModal))
Advertisement
Add Comment
Please, Sign In to add comment