Advertisement
cavalier_revolt

Untitled

Nov 8th, 2020
744
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import * as React from 'react';
  2. import { View, StyleSheet } from 'react-native';
  3. import { Theme } from '../../theme/theme';
  4. import { FHReward, FHSettings } from '../../types/types';
  5. import { FirebaseAuthTypes } from '@react-native-firebase/auth';
  6. import { useEffect } from 'react';
  7. import { SafeAreaView } from 'react-native-safe-area-context';
  8. import { constants } from '../../constants/constants';
  9. import { useState } from 'react';
  10. import { FirebaseFirestoreTypes } from '@react-native-firebase/firestore';
  11. import { getUser } from '../../api/user';
  12. import LoyaltyLeft from '../../component/LoyaltyLeft';
  13. import LoyaltyQR from '../../component/LoyaltyQR';
  14. import LoyaltyDeals from './LoyaltyDeals';
  15. import LoyaltyRewards from '../../component/LoyaltyRewards';
  16. import { listenFor } from '../../api/database';
  17. import { authListener } from '../../api/auth';
  18.  
  19.  
  20. interface LoyaltyScreenProps {
  21.   navigation: any
  22. }
  23.  
  24. const LoyaltyScreen = (props: LoyaltyScreenProps) => {
  25.  
  26.  
  27.   // state
  28.   const [isOpen, setIsOpen] = useState(true)
  29.   const [xid, setXid] = useState('x')
  30.   const [uid, setUid] = useState('x')
  31.   const [currentPoints, setCurrentPoints] = useState(0)
  32.   const [totalPoints, setTotalPoints] = useState(0)
  33.   const [rewards, setRewards] = useState<FHReward[]>([])
  34.   const [settings, setSettings] = useState<FHSettings | undefined>()
  35.   const [uri, setUri] = useState('http://via.placeholder.com/150')
  36.  
  37.   //props
  38.   const { navigation } = props
  39.  
  40.   //user data variable
  41.   let uData: void | (() => void | undefined);
  42.  
  43.   //navigation
  44.   const navigateTo = (screen: string, param?: {}): void => {
  45.     navigation.navigate(screen, param ? param : null)
  46.   }
  47.  
  48.   // subscription functions
  49.  
  50.   // set store to open or closed
  51.   const isStoreOpenCallback = (data: FirebaseFirestoreTypes.DocumentData): void => {
  52.     const storeData = data.data()
  53.     if (storeData !== undefined) {
  54.       setIsOpen(storeData.isOpen)
  55.     }
  56.   }
  57.   // get store status
  58.   const isStoreOpen = (): () => void => {
  59.     return listenFor(isStoreOpenCallback, constants.dbAdmin, constants.dbAdmin)
  60.   }
  61.  
  62.   //set sub for store status listener
  63.   useEffect((): () => void => {
  64.     const unsubscribe = isStoreOpen()
  65.     return unsubscribe
  66.   }, [])
  67.  
  68.   //code to run after we get user data
  69.   const checkUserCallback = (data: FirebaseFirestoreTypes.DocumentData): void => {
  70.     let userData = data.data()
  71.     if (userData !== undefined) {
  72.       setXid(userData.xid)
  73.       setCurrentPoints(userData.currentPoints)
  74.       setTotalPoints(userData.totalPoints)
  75.     }
  76.   }
  77.   //check for user data
  78.   const checkUserData = (uid: string): () => void => {
  79.     return listenFor(checkUserCallback, constants.dbUser, uid)
  80.   }
  81.  
  82.   //set sub for user data
  83.   useEffect((): void | (() => void | undefined)  => {
  84.     const user = getUser()
  85.     if (user) {
  86.       uData = checkUserData(user.uid)
  87.     }
  88.     return uData
  89.   }, [])
  90.  
  91.   // authorization status listener
  92.   const onAuthStateChanged = (user: FirebaseAuthTypes.User | null): void => {
  93.     if (!user) {
  94.       navigateTo(constants.screens.loginStack)
  95.     } else {
  96.       navigateTo(constants.screens.mainStack)
  97.       setUid(user.uid)
  98.     }
  99.   }
  100.   // set auth subscription
  101.   useEffect((): () => void => {
  102.     const unsubscribe = authListener(onAuthStateChanged)
  103.     return unsubscribe
  104.   }, []);
  105.  
  106.  
  107.  
  108.   // callback to process rewards from db
  109.   const rewardCallback = (data: FirebaseFirestoreTypes.DocumentData): void => {
  110.     let rewards: FHReward[] = []
  111.     data.docs.map((item: FirebaseFirestoreTypes.DocumentData) => {
  112.       const reward = item.data() as FHReward
  113.       rewards.push(reward)
  114.     })
  115.     setRewards(rewards)
  116.   }
  117.  
  118.   //set subscription for obtaining rewards from db
  119.   useEffect((): () => void => {
  120.     const rewardSub = listenFor(rewardCallback, constants.dbRewards)
  121.     return rewardSub
  122.   }, [])
  123.  
  124.  
  125.   //callback to process settings object from db
  126.   const settingsCallback = (data: FirebaseFirestoreTypes.DocumentData): void => {
  127.     const settingsObj = data.data() as FHSettings
  128.     if (settingsObj === undefined) return
  129.  
  130.     setSettings(settingsObj)
  131.  
  132.     //check app version
  133.     //TODO check app version
  134.   }
  135.  
  136.   //set settings subscriptions
  137.   useEffect((): () => void => {
  138.     const settings = listenFor(settingsCallback, constants.dbAdmin, constants.dbAdmin)
  139.     return settings
  140.   }, [])
  141.  
  142.  
  143.   // screen functions
  144.  
  145.  
  146.   return (
  147.  
  148.     <View style={styles.container}>
  149.       {/* left side */}
  150.       <LoyaltyLeft settings={settings} currentPoints={currentPoints} />
  151.       {/* end left side */}
  152.  
  153.       {/* right side */}
  154.       <SafeAreaView style={styles.right}>
  155.         <View style={styles.right}>
  156.  
  157.           {/* qrcode container */}
  158.           <LoyaltyQR uri={uri} xid={xid} currentPoints={currentPoints} totalPoints={totalPoints} />
  159.           {/* end qrcode container */}
  160.  
  161.           {/* start deal */}
  162.           <LoyaltyDeals navigation={navigation} xid={xid} isOpen={isOpen} />
  163.  
  164.           {/* end deals */}
  165.  
  166.           {/* rewards */}
  167.           <LoyaltyRewards navigation={navigation} uid={uid} rewards={rewards} currentPoints={currentPoints} />
  168.           {/* end rewards */}
  169.         </View>
  170.       </SafeAreaView>
  171.       {/* end right side */}
  172.     </View>
  173.  
  174.   );
  175. };
  176.  
  177. export default LoyaltyScreen;
  178.  
  179. const styles = StyleSheet.create({
  180.  
  181.   container: {
  182.     flex: 1,
  183.     flexDirection: 'row',
  184.     backgroundColor: Theme.secondaryColor
  185.   },
  186.  
  187.   left: {
  188.     flex: 1,
  189.     margin: constants.ui.standardMargin,
  190.     flexDirection: 'column-reverse',
  191.     height: '100%',
  192.     backgroundColor: Theme.whiteColor,
  193.     borderRadius: 5,
  194.   },
  195.  
  196.   right: {
  197.     flex: 4,
  198.     backgroundColor: Theme.primaryColor
  199.   },
  200.  
  201. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement