From 434a1ded240cfae9fa4d8444844398851e5fe268 Mon Sep 17 00:00:00 2001 From: Mike Fitzpatrick Date: Wed, 17 Jul 2019 03:21:23 -0400 Subject: [PATCH] - implementing immutable.js --- android/app/build.gradle | 1 + .../java/com/eventment/MainApplication.java | 1 + android/settings.gradle | 2 + app/App.js | 40 +-- app/actions/index.js | 69 ++++- app/api/index.js | 8 +- .../Auction/AuctionPriceAndBidCount.js | 7 + app/components/Auction/BidStatus.js | 10 +- app/components/Auction/FilterBar.js | 42 ++++ app/components/Item/List.js | 56 +++-- app/constants/actionTypes.js | 8 + app/containers/Auction.js | 18 ++ .../Auction/AuctionPriceAndBidCount.js | 8 +- app/containers/Auction/BidStatus.js | 15 +- app/domain/Auction.js | 16 ++ app/domain/Event.js | 39 +++ app/domain/Item.js | 43 ++++ app/domain/Post.js | 20 ++ app/domain/Profile.js | 39 +++ app/domain/TicketClass.js | 27 ++ app/reducers/activeEvent.js | 12 + app/reducers/auctions.js | 18 ++ app/reducers/blockUI.js | 12 + app/reducers/events.js | 19 +- app/reducers/index.js | 16 +- app/reducers/items.js | 21 +- app/reducers/profile.js | 17 ++ app/router.js | 10 +- app/screens/Auction.js | 48 ++-- app/screens/Events.js | 17 ++ app/selectors/auctions.js | 13 + app/selectors/items.js | 42 ++++ app/store/index.js | 7 +- ios/Eventment.xcodeproj/project.pbxproj | 121 ++++++--- ios/Eventment/Info.plist | 2 +- ios/Podfile | 31 ++- ios/Podfile.lock | 194 ++++++++++++++- package.json | 6 + yarn.lock | 235 +++++++++++++++++- 39 files changed, 1123 insertions(+), 187 deletions(-) create mode 100644 app/components/Auction/FilterBar.js create mode 100644 app/containers/Auction.js create mode 100644 app/domain/Auction.js create mode 100644 app/domain/Event.js create mode 100644 app/domain/Item.js create mode 100644 app/domain/Post.js create mode 100644 app/domain/Profile.js create mode 100644 app/domain/TicketClass.js create mode 100644 app/reducers/activeEvent.js create mode 100644 app/reducers/auctions.js create mode 100644 app/reducers/blockUI.js create mode 100644 app/reducers/profile.js create mode 100644 app/selectors/auctions.js create mode 100644 app/selectors/items.js diff --git a/android/app/build.gradle b/android/app/build.gradle index c89f0a9..e053b60 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -164,6 +164,7 @@ android { } dependencies { + implementation project(':react-native-vector-icons') implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.facebook.react:react-native:+" // From node_modules diff --git a/android/app/src/main/java/com/eventment/MainApplication.java b/android/app/src/main/java/com/eventment/MainApplication.java index 3ca84c9..ba3f82c 100644 --- a/android/app/src/main/java/com/eventment/MainApplication.java +++ b/android/app/src/main/java/com/eventment/MainApplication.java @@ -4,6 +4,7 @@ import android.app.Application; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; +import com.oblador.vectoricons.VectorIconsPackage; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.soloader.SoLoader; diff --git a/android/settings.gradle b/android/settings.gradle index d77d561..7eee7c1 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,3 +1,5 @@ rootProject.name = 'Eventment' +include ':react-native-vector-icons' +project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' diff --git a/app/App.js b/app/App.js index 2427abe..5f821e9 100644 --- a/app/App.js +++ b/app/App.js @@ -7,46 +7,10 @@ */ import React, {Fragment} from 'react'; -import { - SafeAreaView, - StyleSheet, - ScrollView, - View, - Text, - StatusBar, -} from 'react-native'; +import { createAppContainer } from 'react-navigation'; import { Tabs } from './router.js'; -const App = () => { - return ; -}; - -const styles = StyleSheet.create({ - scrollView: { - backgroundColor: Colors.lighter, - }, - body: { - backgroundColor: Colors.white, - }, - sectionContainer: { - marginTop: 32, - paddingHorizontal: 24, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - color: Colors.black, - }, - sectionDescription: { - marginTop: 8, - fontSize: 18, - fontWeight: '400', - color: Colors.dark, - }, - highlight: { - fontWeight: '700', - }, -}); +const App = createAppContainer(Tabs); export default App; diff --git a/app/actions/index.js b/app/actions/index.js index 9ea9e55..716381c 100644 --- a/app/actions/index.js +++ b/app/actions/index.js @@ -1,29 +1,82 @@ +import { List } from 'immutable'; + import { getEndpointUrl } from '../api/index.js'; + +import Auction from '../domain/Auction.js'; +import Event from '../domain/Event.js'; +import Item from '../domain/Item.js'; + import { + AUCTIONS_UPDATED, + BLOCK_UI, EVENTS_LOADED, GET_EVENTS, GET_ITEMS, ITEMS_LOADED, + UNBLOCK_UI, } from '../constants/actionTypes.js'; + import { API_ENDPOINTS } from '../constants/constants.js'; export const getEvents = () => (dispatch) => { - return fetch(getEndpointUrl[API_ENDPOINTS.GET_EVENTS]) + dispatch(blockUI()); + fetch(getEndpointUr(API_ENDPOINTS.GET_EVENTS)) .then(response => response.json()) - .then(payload => { - dispatch({ type: EVENTS_LOADED, payload }); + .then((payload) => { + const events = List(payload).map((i) => Event.fromJS(i)); + dispatch({ type: EVENTS_LOADED, payload: events }); + dispatch(unblockUI); }); }; export const getItems = () => (dispatch, getState) => { - const { activeEvent } = getState(); - let apiUrl = getEndpointUrl[API_ENDPOINTS.GET_ITEMS]; - apiUrl = apiUrl.replace(/:event_id/, activeEvent); + const state = getState(); + const activeEvent = state.get('activeEvent'); + + let apiUrl = getEndpointUrl(API_ENDPOINTS.GET_ITEMS); + apiUrl = apiUrl.replace(/:event_id$/, ''); + if (activeEvent) { + apiUrl = `${apiUrl}${activeEvent}`; + } + + dispatch(blockUI()); + + fetch(apiUrl) + .then(response => response.json()) + .then(payload => { + const items = List(payload).map(i => Item.fromJS(i)); + dispatch({ type: ITEMS_LOADED, payload: items }); + dispatch(unblockUI()); + }) + .catch(err => console.error('[actions::getItems]', err)); +}; + +export const getStatus = () => (dispatch, getState) => { + const state = getState(); + const activeEvent = state.get('activeEvent'); + + let apiUrl = getEndpointUrl(API_ENDPOINTS.GET_STATUS); + apiUrl = apiUrl.replace(/:event_id$/, ''); + if (activeEvent) { + apiUrl = `${apiUrl}${activeEvent}`; + } + + dispatch(blockUI()); return fetch(apiUrl) .then(response => response.json()) .then(payload => { - dispatch({ type: ITEMS_LOADED, payload }); - }); + const auctions = List(payload).map(i => Auction.fromJS(i)); + dispatch(unblockUI()); + dispatch({ type: AUCTIONS_UPDATED, payload: auctions }); + }) + .catch(err => console.error('[actions::getStatus]', err)); }; +export const blockUI = () => ({ + type: BLOCK_UI, +}); + +export const unblockUI = () => ({ + type: UNBLOCK_UI, +}); diff --git a/app/api/index.js b/app/api/index.js index c10e92b..16c05f7 100644 --- a/app/api/index.js +++ b/app/api/index.js @@ -3,9 +3,11 @@ const apiUrl = 'http://localhost:3001'; const endpoints = { // Events and Items GET_EVENTS: '/events', - GET_ITEMS: '/items?eventId=:event_id', +// GET_ITEMS: '/items?eventId=:event_id', + GET_ITEMS: '/items', // Auction Interactions +// GET_STATUS: '/auction/:event_id', GET_STATUS: '/auction', PLACE_BID: '/bids/:item_id', PURCHASE_ITEM: '/sales', @@ -30,8 +32,8 @@ const cacheBuster = () => { export const getEndpointUrl = (endpoint) => { if (!endpoints[endpoint]) { - return throw new Error('Invalid API endpoint specified'); + throw new Error('Invalid API endpoint specified'); } - return `${apiUrl}${endpoints[endpoint]}${cacheBuster()}`; + return `${apiUrl}${endpoints[endpoint]}`; //`${cacheBuster()}`; }; diff --git a/app/components/Auction/AuctionPriceAndBidCount.js b/app/components/Auction/AuctionPriceAndBidCount.js index 979bb53..94c8aa9 100644 --- a/app/components/Auction/AuctionPriceAndBidCount.js +++ b/app/components/Auction/AuctionPriceAndBidCount.js @@ -17,8 +17,15 @@ const AuctionPriceAndBidCount = ({ bidCount, currentPrice }) => { }; AuctionPriceAndBidCount.propTypes = { + itemId: PropTypes.string.isRequired, bidCount: PropTypes.number.isRequired, currentPrice: PropTypes.number.isRequired, }; +const styles = StyleSheet.create({ + currentPriceAndBidCount: { + color: '#000', + }, +}); + export default AuctionPriceAndBidCount; diff --git a/app/components/Auction/BidStatus.js b/app/components/Auction/BidStatus.js index 0a7d265..64c012d 100644 --- a/app/components/Auction/BidStatus.js +++ b/app/components/Auction/BidStatus.js @@ -3,10 +3,10 @@ import PropTypes from 'prop-types'; import { StyleSheet, - View, + Text, } from 'react-native'; -const BidStatus = ({ bidCount, currentPrice, isBidding, isWinning }) => { +const BidStatus = ({ isBidding, isWinning }) => { if (!isBidding) { return null; } @@ -17,16 +17,16 @@ const BidStatus = ({ bidCount, currentPrice, isBidding, isWinning }) => { return ( - {`${currentPrice} (${bidCount} bids)`} + {isWinning && `Oh no! You have been outbid!`} + {!isWinning && isBidding && `You have the winning bid! (for now...)`} ); }; BidStatus.propTypes = { - bidCount: PropTypes.number.isRequired, - currentPrice: PropTypes.number.isRequired, isBidding: PropTypes.bool.isRequired, isWinning: PropTypes.bool.isRequired, + itemId: PropTypes.string.isRequired, }; const styles = StyleSheet.create({ diff --git a/app/components/Auction/FilterBar.js b/app/components/Auction/FilterBar.js new file mode 100644 index 0000000..2da7503 --- /dev/null +++ b/app/components/Auction/FilterBar.js @@ -0,0 +1,42 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { + StyleSheet, + Text, + View, +} from 'react-native'; + +const FilterBar = ({ changeFilterer, changeViewMode, filterMode, viewMode }) => ( + + Filter + View + +); + +FilterBar.propTypes = { + changeFilterer: PropTypes.func.isRequired, + changeViewMode: PropTypes.func.isRequired, + filterMode: PropTypes.string, + viewMode: PropTypes.string, +}; + +FilterBar.defaultProps = { + filterMode: null, + viewMode: null, +}; + +const styles = StyleSheet.create({ + filterBar: { + backgroundColor: '#0F0', + flexDirection: 'row', + }, + filter: { + flex: 2, + }, + view: { + flex: 2, + }, +}); + +export default FilterBar; diff --git a/app/components/Item/List.js b/app/components/Item/List.js index 53c20fc..c7b0f95 100644 --- a/app/components/Item/List.js +++ b/app/components/Item/List.js @@ -1,4 +1,6 @@ import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + import { StyleSheet, TouchableOpacity, @@ -7,6 +9,8 @@ import { View } from 'react-native'; +import GallerySwiper from 'react-native-gallery-swiper'; + import AuctionPriceAndBidCount from '../../containers/Auction/AuctionPriceAndBidCount.js'; import BidStatus from '../../containers/Auction/BidStatus.js'; @@ -25,21 +29,34 @@ export default class ItemRow extends Component { url: PropTypes.string, }), ), - start: PropTytpes.string.isRequired, - startPrice: PropTypes.number, + start: PropTypes.string.isRequired, + startingPrice: PropTypes.number.isRequired, subtitle: PropTypes.string, title: PropTypes.string.isRequired, type: PropTypes.string.isRequired, }; } + static get defaultProps() { + return { + description: null, + donor: null, + images: null, + subtitle: null, + }; + } + + constructor(props) { + super(props); + } + _getBidTime = () => { const { end, start } = this.props; return getAuctionTime({ end, start }); } _viewItemDetail = () => { - const { id } = this.props.details; + const { _id: id } = this.props.details; this.props.navigation.navigate('Item', { id }); } @@ -48,9 +65,10 @@ export default class ItemRow extends Component { description, donor, end, + id, images, start, - startPrice, + startingPrice, subtitle, title, type, @@ -59,13 +77,18 @@ export default class ItemRow extends Component { return( - + {images !== null && images.length > 0 && ( + + )} - {type === ITEM_TYPES.AUCTION && } + {type === ITEM_TYPES.AUCTION && } {title} @@ -78,10 +101,10 @@ export default class ItemRow extends Component { )} {type === ITEM_TYPES.AUCTION ? ( - + ) : ( - {formatPrice(startPrice)} + {formatPrice(startingPrice)} )} @@ -126,14 +149,17 @@ const styles = StyleSheet.create({ rowContainer: { backgroundColor: '#FFF', borderRadius: 4, - flexDirection: 'row', - height: 100, + flex: 1, + flexDirection: 'column', marginRight: 10, marginLeft: 10, marginTop: 10, padding: 10, shadowColor: '#CCC', - shadowOffset:{ width: 1, height: 1, }, + shadowOffset: { + width: 1, + height: 1 + }, shadowOpacity: 1.0, shadowRadius: 1, }, diff --git a/app/constants/actionTypes.js b/app/constants/actionTypes.js index 66d8ea1..bb1958e 100644 --- a/app/constants/actionTypes.js +++ b/app/constants/actionTypes.js @@ -7,6 +7,7 @@ export const ITEMS_LOADED = 'ITEMS_LOADED'; export const ITEMS_LOAD_FAILED = 'ITEMS_LOAD_FAILED'; export const UPDATE_AUCTIONS = 'UPDATE_AUCTIONS'; +export const AUCTIONS_UPDATED = 'AUCTIONS_UPDATED'; export const SET_TICKET_PURCHASE_FLOW = 'SET_TICKET_PURCHASE_FLOW'; @@ -34,6 +35,7 @@ export const LINK_FACEBOOK_SUCCESS = 'LINK_FACEBOOK_SUCCESS'; export const LINK_GOOGLE_FAILURE = 'LINK_GOOGLE_FAILURE'; export const LINK_GOOGLE_SUCCESS = 'LINK_GOOGLE_SUCCESS'; +export const SET_PROFILE = 'SET_PROFILE'; export const UPDATE_PROFILE = 'UPDATE_PROFILE'; export const SET_NOM_DE_BID = 'SET_NOM_DE_BID'; @@ -41,3 +43,9 @@ export const SET_PASSWORD = 'SET_PASSWORD'; export const ADD_PAYMENT_DATA = 'ADD_PAYMENT_DATA'; export const DO_CHECKOUT = 'DO_CHECKOUT'; + +export const BLOCK_UI = 'BLOCK_UI'; +export const UNBLOCK_UI = 'UNBLOCK_UI'; + +export const SET_ACTIVE_EVENT = 'SET_ACTIVE_EVENT'; +export const UNSET_ACTIVE_EVENT = 'UNSET_ACTIVE_EVENT'; diff --git a/app/containers/Auction.js b/app/containers/Auction.js new file mode 100644 index 0000000..368f407 --- /dev/null +++ b/app/containers/Auction.js @@ -0,0 +1,18 @@ +import { connect } from 'react-redux'; + +import { getItems, getStatus } from '../actions/index.js'; + +import { getAuctionItemsAsList } from '../selectors/items.js'; + +import Auction from '../screens/Auction.js'; + +const matchStateToProps = (state) => ({ + items: getAuctionItemsAsList(state), +}); + +const mapDispatchToProps = (dispatch) => ({ + fetchItems: () => dispatch(getItems(dispatch)), + fetchStatus: () => dispatch(getStatus(dispatch)), +}); + +export default connect(matchStateToProps, mapDispatchToProps)(Auction); diff --git a/app/containers/Auction/AuctionPriceAndBidCount.js b/app/containers/Auction/AuctionPriceAndBidCount.js index 002e456..36e085b 100644 --- a/app/containers/Auction/AuctionPriceAndBidCount.js +++ b/app/containers/Auction/AuctionPriceAndBidCount.js @@ -1,13 +1,15 @@ import { connect } from 'react-redux'; +import { getItemBidCount, getItemPrice } from '../../selectors/auctions.js'; + import AuctionPriceAndBidCount from '../../components/Auction/AuctionPriceAndBidCount.js'; function mapStateToProps(state, ownProps) { - const { bidCount, currentPrice } = getAuctionItemStatus(state, ownProps.id); + const { itemId } = ownProps; return { - bidCount, - currentPrice, + bidCount: getItemBidCount(state, itemId), + currentPrice: getItemPrice(state, itemId), }; } diff --git a/app/containers/Auction/BidStatus.js b/app/containers/Auction/BidStatus.js index 205d5a3..8a1fba8 100644 --- a/app/containers/Auction/BidStatus.js +++ b/app/containers/Auction/BidStatus.js @@ -1,20 +1,15 @@ import { connect } from 'react-redux'; +import { isBiddingItem, isWinningItem } from '../../selectors/auctions.js'; + import AuctionPriceAndBidCount from '../../components/Auction/BidStatus.js'; function mapStateToProps(state, ownProps) { - const { - bidCount, - currentPrice, - isBidding, - isWinning, - } = getAuctionItemStatus(state, ownProps.id); + const { itemId } = ownProps; return { - bidCount, - currentPrice, - isBidding, - isWinning, + isBidding: isBiddingItem(state, itemId), + isWinning: isWinningItem(state, itemId), }; } diff --git a/app/domain/Auction.js b/app/domain/Auction.js new file mode 100644 index 0000000..36b930c --- /dev/null +++ b/app/domain/Auction.js @@ -0,0 +1,16 @@ +import { Record } from 'immutable'; + +export default class Auction extends Record({ + id: null, + bidCount: 0, + isBidding: false, + isWinning: false, + itemPrice: 0, +}) {} + +Auction.fromJS = (data = {}) => { + return new Auction({ + id: data._id, + ...data, + }); +}; diff --git a/app/domain/Event.js b/app/domain/Event.js new file mode 100644 index 0000000..b2bfa1c --- /dev/null +++ b/app/domain/Event.js @@ -0,0 +1,39 @@ +import { List, Record } from 'immutable'; + +import Post from './Post.js'; +import TicketClass from './TicketClass.js'; + +export default class Event extends Record({ + id: null, + isTicketed: false, + requireLoginToSeeAuction: false, + description: null, + endTime: null, + images: new List(), + posts: new List(), + showFrom: null, + showUntil: null, + startTime: null, + tagline: null, + title: null, + url: null, + ticketClasses: new List(), +}) { + get isSoldOut() { + if (this.isTicketed) { + return false; + } + + return this.ticketClasses.find(t => t.available > 0) || false; + } +} + +Event.fromJS = (data = {}) => { + return new Event({ + id: data._id, + ...data, + images: new List(data.images), + posts: new List(data.posts.map(p => Post.fromJS(p))), + ticketClasses: new List(data.ticketClasses.map(t => TicketClass.fromJS(t))), + }); +}; diff --git a/app/domain/Item.js b/app/domain/Item.js new file mode 100644 index 0000000..f04543b --- /dev/null +++ b/app/domain/Item.js @@ -0,0 +1,43 @@ +import { List, Record } from 'immutable'; + +export default class Item extends Record({ + bidCount: 0, + bidIncrement: 10, + catalogNumber: null, + currentPrice: 0, + description: null, + donor: null, + end: null, + estimatedValue: null, + eventId: null, + hideAfterEnd: false, + hideBeforeStart: false, + id: null, + images: new List(), + isShippable: false, + notifyOnAvailable: false, + quantityAvailable: 1, + soldCount: 0, + start: null, + startingPrice: null, + subtitle: null, + title: null, + type: null, + shippingCost: 0, +}) { + get isSoldOut() { + return this.quantityAvailable > this.soldCount; + } + + get totalWithShipping() { + return this.currentPrice + this.shippingCost; + } +} + +Item.fromJS = (data = {}) => { + return new Item({ + id: data._id, + ...data, + images: List(data.images), + }); +}; diff --git a/app/domain/Post.js b/app/domain/Post.js new file mode 100644 index 0000000..6aa0b26 --- /dev/null +++ b/app/domain/Post.js @@ -0,0 +1,20 @@ +import { Record } from 'immutable'; + +export default class Post extends Record({ + author: null, + content: null, + id: null, + isPublic: false, + scheduledPost: false, + sendNotification: false, + timestamp: null, + title: null, +}) {}; + + +Post.fromJS = (data = {}) => { + return new TicketClass({ + id: data._id, + ...data, + }); +}; diff --git a/app/domain/Profile.js b/app/domain/Profile.js new file mode 100644 index 0000000..857e7e4 --- /dev/null +++ b/app/domain/Profile.js @@ -0,0 +1,39 @@ +import { List, Record } from 'immutable'; + +export default class Profile extends Record({ + addresses: new List(), + avatar: null, + email: null, + firstName: null, + generatedNomDeBid: false, + hasLinkedApple: false, + hasLinkedFacebook: false, + hasLinkedGoogle: false, + hasLocalAccount: false, + id: null, + isAllowedToBid: false, + isOrganizationEmployee: false, + isVerified: false, + lastName: null, + nomDeBid: null, + organizationIdentifier: null, + paymentToken: null, + phones: new List(), +}) { + get canBid() { + return this.isAllowedToBid && this.paymentToken !== null; + } + + get fullName() { + return `${this.firstName} ${this.lastName}`; + } +} + +Profile.fromJS = (data = {}) => { + return new Profile({ + id: data._id, + ...data, + addresses: new List(data.addresses), + phones: new List(data.phones), + }); +}; diff --git a/app/domain/TicketClass.js b/app/domain/TicketClass.js new file mode 100644 index 0000000..b80ab80 --- /dev/null +++ b/app/domain/TicketClass.js @@ -0,0 +1,27 @@ +import { List, Record } from 'immutable'; + +export default class TicketClass extends Record({ + available: 0, + capacity: 0, + endSale: null, + id: null, + itemId: null, + name: null, + price: 0, + startSale: null, +}) { + get isAlmostGone() { + return this.available < (this.capacity * 0.20); + } + + get isSoldOut() { + return this.available === 0; + } +} + +TicketClass.fromJS = (data = {}) => { + return new TicketClass({ + id: data._id, + ...data, + }); +}; diff --git a/app/reducers/activeEvent.js b/app/reducers/activeEvent.js new file mode 100644 index 0000000..9e1358c --- /dev/null +++ b/app/reducers/activeEvent.js @@ -0,0 +1,12 @@ +import { SET_ACTIVE_EVENT, UNSET_ACTIVE_EVENT } from '../constants/actionTypes.js'; + +export const activeEvent = (state = null, action) => { + switch (action.type) { + case SET_ACTIVE_EVENT: + return action.payload; + case UNSET_ACTIVE_EVENT: + return null; + default: + return state; + } +}; diff --git a/app/reducers/auctions.js b/app/reducers/auctions.js new file mode 100644 index 0000000..5045915 --- /dev/null +++ b/app/reducers/auctions.js @@ -0,0 +1,18 @@ +import { Map } from 'immutable'; + +import { AUCTIONS_UPDATED, UPDATE_AUCTIONS } from '../constants/actionTypes.js'; + +export const auctions = (state = new Map(), action) => { + switch (action.type) { + case AUCTIONS_UPDATED: + return state.merge( + action.payload.toMap().mapEntries((entry) => { + const [, item] = entry; + return [`${item.id}`, item]; + }), + ); + case UPDATE_AUCTIONS: + default: + return state; + } +}; diff --git a/app/reducers/blockUI.js b/app/reducers/blockUI.js new file mode 100644 index 0000000..97ec8fc --- /dev/null +++ b/app/reducers/blockUI.js @@ -0,0 +1,12 @@ +import { BLOCK_UI, UNBLOCK_UI } from '../constants/actionTypes.js'; + +export const blockUI = (state = false, action) => { + switch (action.type) { + case BLOCK_UI: + return true; + case UNBLOCK_UI: + return false; + default: + return state; + } +}; diff --git a/app/reducers/events.js b/app/reducers/events.js index ed39633..7d9571f 100644 --- a/app/reducers/events.js +++ b/app/reducers/events.js @@ -1,16 +1,17 @@ +import { Map } from 'immutable'; + import { EVENTS_LOADED, GET_EVENTS } from '../constants/actionTypes.js'; -export const events = (state = {}, action) => { +export const events = (state = new Map(), action) => { switch (action.type) { - case GET_EVENTS: - return Object.assign({}, state, { - isFetching: true, - }); case EVENTS_LOADED: - return Object.assign({}, state, { - events: action.payload, - isFetching: false, - }); + return state.merge( + action.payload.toMap().mapEntries((entry) => { + const [, event] = entry; + return [`${event.id}`, event]; + }), + ); + case GET_EVENTS: default: return state; } diff --git a/app/reducers/index.js b/app/reducers/index.js index a29cccc..6d4a27f 100644 --- a/app/reducers/index.js +++ b/app/reducers/index.js @@ -1,17 +1,15 @@ -import { combineReducers } from 'redux'; +import { combineReducers } from 'redux-immutable'; +import { activeEvent } from './activeEvent.js'; +import { auctions } from './auctions.js'; +import { blockUI } from './blockUI.js'; import { events } from './events.js'; import { items } from './items.js'; -const initialState = { - auction: {}, - cart: [], - isFetching: false, - items: [], - profile: {}, -}; - const rootReducer = combineReducers({ + activeEvent, + auctions, + blockUI, events, items, }); diff --git a/app/reducers/items.js b/app/reducers/items.js index 10965e1..d4c6940 100644 --- a/app/reducers/items.js +++ b/app/reducers/items.js @@ -1,16 +1,19 @@ -import { ITEMS_LOADED, GET_ITEMS } from '../constants/actionTypes.js'; +import { Map } from 'immutable'; -export const items = (state = {}, action) => { +import { + GET_ITEMS, + ITEMS_LOADED, +} from '../constants/actionTypes.js'; + +export const items = (state = new Map(), action) => { switch (action.type) { - case GET_ITEMS: - return Object.assign({}, state, { - isFetching: true, - }); case ITEMS_LOADED: - return Object.assign({}, state, { - items: action.payload, - isFetching: false, + const mapped = action.payload.toMap().mapEntries((entry) => { + const [, item] = entry; + return [`${item.id}`, item]; }); + return state.merge(mapped); + case GET_ITEMS: default: return state; } diff --git a/app/reducers/profile.js b/app/reducers/profile.js new file mode 100644 index 0000000..d4f3b7f --- /dev/null +++ b/app/reducers/profile.js @@ -0,0 +1,17 @@ +import { Map } from 'immutable'; + +import { + SET_PROFILE, + UPDATE_PROFILE, +} from '../constants/actionTypes.js'; + +export const profile = (state = new Map(), action) => { + switch (action.type) { + case SET_PROFILE: + return action.payload; + case UPDATE_PROFILE: + return action.payload; + default: + return state; + } +}; diff --git a/app/router.js b/app/router.js index 414f087..e7e06b2 100644 --- a/app/router.js +++ b/app/router.js @@ -3,7 +3,7 @@ import { Dimensions, Platform } from 'react-native'; import { createBottomTabNavigator, createStackNavigator } from 'react-navigation'; import { Icon } from 'react-native-elements'; -import Auction from './screens/Auction.js'; +import Auction from './containers/Auction.js'; import Checkout from './screens/Checkout.js'; import Event from './screens/Event.js'; import Events from './screens/Events.js'; @@ -19,28 +19,28 @@ export const Tabs = createBottomTabNavigator({ screen: Event, navigationOptions: { tabBarLabel: 'Event', - tabBarIcon: ({ tintColor }) => , + tabBarIcon: ({ tintColor }) => , }, }, 'Auction': { screen: Auction, navigationOptions: { tabBarLabel: 'Silent Auction', - tabBarIcon: ({ tintColor }) => , + tabBarIcon: ({ tintColor }) => , }, }, 'Bazaar': { screen: Marketplace, navigationOptions: { tabBarLabel: 'Bazaar', - tabBarIcon: ({ tintColor }) => , + tabBarIcon: ({ tintColor }) => , }, }, 'Profile': { screen: Profile, navigationOptions: { tabBarLabel: 'Profile', - tabBarIcon: ({ tintColor }) => , + tabBarIcon: ({ tintColor }) => , }, }, }); diff --git a/app/screens/Auction.js b/app/screens/Auction.js index 1319bd0..8c00674 100644 --- a/app/screens/Auction.js +++ b/app/screens/Auction.js @@ -10,6 +10,7 @@ import { import { SORT_MODES, VIEW_MODES } from '../constants/constants.js'; +import FilterBar from '../components/Auction/FilterBar.js'; import GridItem from '../components/Item/Grid.js'; import ListItem from '../components/Item/List.js'; @@ -17,14 +18,16 @@ export default class Auction extends Component { static get propTypes() { return { changeFilter: PropTypes.func, - items: PropTypes.array.isRequired, + fetchItems: PropTypes.func.isRequired, + fetchStatus: PropTypes.func.isRequired, + items: PropTypes.array, }; } static get defaultProps() { return { changeFilter: () => { console.log('Change Filter Default Prop', arguments); }, - header: null, + items: [], }; } @@ -40,6 +43,11 @@ export default class Auction extends Component { }; } + componentDidMount() { + this.props.fetchStatus(); + this.props.fetchItems(); + } + changeFilter(filter) { this.props.changeFilter('auction', filter); } @@ -48,18 +56,20 @@ export default class Auction extends Component { this.setState({ view: mode }); } - _keyExtractor = (item, index) => item.id; + _keyExtractor = (item, index) => `${item._id}_${index}`; _renderItem = (view) => ({ item }) => { + console.log('_renderItem', item); if (view === VIEW_MODES.GRID) { - return ; + return ; } - return ; + return ; } render() { - const { items, view } = this.state; + const { items } = this.props; + const { sort, view } = this.state; return ( @@ -67,11 +77,15 @@ export default class Auction extends Component { changeFilterer={this.changeFilter} changeViewMode={this.changeViewMode} /> - + {items.size > 0 && ( + + )} ); } @@ -84,9 +98,11 @@ const styles = StyleSheet.create({ alignItems: 'center', backgroundColor: '#F5FCFF', }, - title: { - fontSize: 20, - textAlign: 'center', - margin: 10, - } + itemList: { + width: '100%', + }, + itemListContentContainer: { + alignItems: 'stretch', + justifyContent: 'flex-start', + }, }); diff --git a/app/screens/Events.js b/app/screens/Events.js index 6664a52..5d3560a 100644 --- a/app/screens/Events.js +++ b/app/screens/Events.js @@ -1,4 +1,6 @@ import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + import { StyleSheet, Text, @@ -6,6 +8,21 @@ import { } from 'react-native'; export default class Events extends Component { + static get propTypes() { + return { + events: PropTypes.array.isRequired, + fetchEvents: PropTypes.func.isRequired, + }; + } + + constructor(props) { + super(props); + } + + componentDidMount() { + + } + render() { return ( diff --git a/app/selectors/auctions.js b/app/selectors/auctions.js new file mode 100644 index 0000000..cb90519 --- /dev/null +++ b/app/selectors/auctions.js @@ -0,0 +1,13 @@ +import { createSelector } from 'reselect'; + +//import { getItemsIdsWithNoBids, getMyBidItemIds, getMyWinningItemIds } from './auctions.js'; + +const getState = (state) => state; + +export const getItemBidCount = (state, itemId) => state.getIn(['auctions', itemId, 'bidCount'], 0); + +export const getItemPrice = (state, itemId) => state.getIn(['auctions', itemId, 'currentPrice'], 0); + +export const isBiddingItem = (state, itemId) => state.getIn(['auctions', itemId, 'isBidding'], false); + +export const isWinningItem = (state, itemId) => state.getIn(['auctions', itemId, 'isWinning'], false); diff --git a/app/selectors/items.js b/app/selectors/items.js new file mode 100644 index 0000000..340cad3 --- /dev/null +++ b/app/selectors/items.js @@ -0,0 +1,42 @@ +import { createSelector } from 'reselect'; + +//import { getItemsIdsWithNoBids, getMyBidItemIds, getMyWinningItemIds } from './auctions.js'; + +const getState = (state) => state; + +export const getItem = (state, itemId) => state.getIn(['items', itemId], false); + +export const getItems = createSelector( + [getState], + (state) => state.get('items') || new Map(), +); + +export const getItemsAsList = createSelector( + [getItems], + (itemsAsMap) => itemsAsMap.toList(), +); + +export const getAuctionItems = createSelector( + [getState], + (state) => state.get('items').filter(i => i.type === 'auction') || new Map(), +); + +export const getAuctionItemsAsList = createSelector( + [getAuctionItems], + (auctionItemsAsMap) => auctionItemsAsMap.toList(), +); + +export const getTicketItems = createSelector( + [getState], + (state) => state.get('items').filter(i => i.type === 'ticket') || new Map(), +); + +export const getTicketItemsAsList = createSelector( + [getTicketItems], + (ticketItemsAsMap) => ticketItemsAsMap.toList(), +); + +export const getAuctionItemsWithNoBids = createSelector( + [getAuctionItems], + (auctionItemsAsMap) => auctionItemsAsMap.filter(i => i.bidCount), +); diff --git a/app/store/index.js b/app/store/index.js index c72e666..f1748ca 100644 --- a/app/store/index.js +++ b/app/store/index.js @@ -1,9 +1,14 @@ +import { Map } from 'immutable'; import { applyMiddleware, compose, createStore } from 'redux'; +import { composeWithDevTools } from 'remote-redux-devtools'; import thunk from 'redux-thunk'; import rootReducer from '../reducers/index.js'; +const composeEnhancers = composeWithDevTools({ port: 8000, realtime: true, suppressConnectErrors: false }); + export const store = createStore( rootReducer, - compose(applyMiddleware(thunk)), + Map(), + composeEnhancers(applyMiddleware(thunk)), ); diff --git a/ios/Eventment.xcodeproj/project.pbxproj b/ios/Eventment.xcodeproj/project.pbxproj index 15608e4..cdba7cd 100644 --- a/ios/Eventment.xcodeproj/project.pbxproj +++ b/ios/Eventment.xcodeproj/project.pbxproj @@ -12,30 +12,30 @@ 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 1D7F90ED22D4672E0006EDF4 /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D7F90E722D464690006EDF4 /* libRNGestureHandler.a */; }; - 1DAE268E22D4762C004C6DA5 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DAE268D22D4762C004C6DA5 /* libReact.a */; }; + 1D0FF8D822DB4FE40025F1BB /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D0FF8D522DB4FCB0025F1BB /* libRNVectorIcons.a */; }; + 1DBE5D4822D6F91E00F6E1D3 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DBE5D4722D6F91000F6E1D3 /* libc++.tbd */; }; 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2DCD954D1E0B4F2C00145EB5 /* EventmentTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* EventmentTests.m */; }; - 3A3269E1B6D6D06F72B241D8 /* libPods-EventmentTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD62987D2A5499F328ADEE2 /* libPods-EventmentTests.a */; }; 424086B4B7AB4FDBAFAD27A2 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2022E63B77564B27848F25D8 /* SimpleLineIcons.ttf */; }; 46E6D73BB7B44EEB81FDA0C8 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3B1F1508DEB34A2D82A9D161 /* FontAwesome5_Solid.ttf */; }; 4DD467F8FBF94D40A51DCD92 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 74C126D4D76B4C999FEFC22B /* MaterialCommunityIcons.ttf */; }; 586CF9D2C39C4DC0A46789DD /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9251381650BB49089909910A /* Ionicons.ttf */; }; 603E02CDE31345D68CAA1478 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 06DB0AAEC3524CA3B9B50E29 /* Feather.ttf */; }; 682F28F289304A12821DF68E /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E0A54F8A8B184AAFA7B8E830 /* FontAwesome5_Brands.ttf */; }; - 76AAD9E7974A6376D567BA38 /* libPods-Eventment-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 76BDA2713B94C290F5160207 /* libPods-Eventment-tvOSTests.a */; }; 87BCA2F7FF774EC1AFA7269D /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3BC30329DB444504966B99EE /* MaterialIcons.ttf */; }; 8DF805F5C42A4E1E95C74489 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C0F2FD0EDB3E4909B87E6AE8 /* Foundation.ttf */; }; A6FE30176BED40AA9C54678F /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2B5D73883C3E469289AC135B /* EvilIcons.ttf */; }; AA04415FB2F7466C8B4DBAE5 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 205CDE118CBE44B3BB3200BE /* Entypo.ttf */; }; + B136264F709787A4ED944BF9 /* libPods-Eventment.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 95CCBED3A2131D8443B2A7FF /* libPods-Eventment.a */; }; + B6448097D15C2F76F3877523 /* libPods-Eventment-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6842142FC8ED4380770BB1DF /* libPods-Eventment-tvOSTests.a */; }; BC88AA5047D2497CA0B624F7 /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 989F5DACBE66407EB79943CF /* Fontisto.ttf */; }; CB252ABBEF174E99B96004C4 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F66208AB65A848BEB4335799 /* Octicons.ttf */; }; + CEB2DE8972FC482D2D07BC0A /* libPods-EventmentTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F256D73C36A1F18D3745FDC /* libPods-EventmentTests.a */; }; D70DFACB347A40788ACB38F1 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9BF2621C0334B15B136E000 /* FontAwesome5_Regular.ttf */; }; D92F7EC399764DE48E3C0EEE /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B0AD7DC59D14427381008950 /* FontAwesome.ttf */; }; - DFE4DD0CB0107AA6C8FDAA61 /* libPods-Eventment.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F5F70445D5E6E006AF93604 /* libPods-Eventment.a */; }; - E177D0F8B0D577D291BFE3A8 /* libPods-Eventment-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F8C7A360952455A79EFC8C12 /* libPods-Eventment-tvOS.a */; }; + EB9A3171312615B9FC0019A4 /* libPods-Eventment-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A8CE2A63074927A673C4087 /* libPods-Eventment-tvOS.a */; }; ECF71F46F59B4448B8B57C5E /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E894DEEE56C44931A45F69EF /* AntDesign.ttf */; }; F18C203DA63F4F948D5DB6E7 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2B8A826188544A67BF3D91D9 /* Zocial.ttf */; }; /* End PBXBuildFile section */ @@ -48,6 +48,20 @@ remoteGlobalIDString = 13B07F861A680F5B00A75B9A; remoteInfo = Eventment; }; + 1D0FF8D422DB4FCB0025F1BB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1D0FF8CF22DB4FCB0025F1BB /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5DBEB1501B18CEA900B34395; + remoteInfo = RNVectorIcons; + }; + 1D0FF8D622DB4FCB0025F1BB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1D0FF8CF22DB4FCB0025F1BB /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A39873CE1EA65EE60051E01A; + remoteInfo = "RNVectorIcons-tvOS"; + }; 1D7F90E622D464690006EDF4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 1D7F90E122D464690006EDF4 /* RNGestureHandler.xcodeproj */; @@ -203,24 +217,28 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Eventment/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Eventment/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Eventment/main.m; sourceTree = ""; }; + 1D0FF8CF22DB4FCB0025F1BB /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; 1D7F90E122D464690006EDF4 /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; }; 1DAE268D22D4762C004C6DA5 /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; 1DAE26C222D47855004C6DA5 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 1DBE5D4722D6F91000F6E1D3 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; 2022E63B77564B27848F25D8 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; 205CDE118CBE44B3BB3200BE /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; 2B5D73883C3E469289AC135B /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; 2B8A826188544A67BF3D91D9 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; 2D02E47B1E0B4A5D006451C7 /* Eventment-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Eventment-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D02E4901E0B4A5D006451C7 /* Eventment-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Eventment-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F256D73C36A1F18D3745FDC /* libPods-EventmentTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-EventmentTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 3B1F1508DEB34A2D82A9D161 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; 3BC30329DB444504966B99EE /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 4EAF8EE9684C55A54CB05FC0 /* Pods-Eventment.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Eventment.debug.xcconfig"; path = "Target Support Files/Pods-Eventment/Pods-Eventment.debug.xcconfig"; sourceTree = ""; }; 5A40140E6486505E9C4A9D2D /* Pods-EventmentTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-EventmentTests.debug.xcconfig"; path = "Target Support Files/Pods-EventmentTests/Pods-EventmentTests.debug.xcconfig"; sourceTree = ""; }; + 6842142FC8ED4380770BB1DF /* libPods-Eventment-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Eventment-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 74C126D4D76B4C999FEFC22B /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; - 76BDA2713B94C290F5160207 /* libPods-Eventment-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Eventment-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 8F5F70445D5E6E006AF93604 /* libPods-Eventment.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Eventment.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 9251381650BB49089909910A /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; + 95CCBED3A2131D8443B2A7FF /* libPods-Eventment.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Eventment.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 989F5DACBE66407EB79943CF /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = ""; }; + 9A8CE2A63074927A673C4087 /* libPods-Eventment-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Eventment-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; A2020AC52A44798F168742B5 /* Pods-Eventment-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Eventment-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Eventment-tvOS/Pods-Eventment-tvOS.debug.xcconfig"; sourceTree = ""; }; B0AD7DC59D14427381008950 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; B54614FC2A59A9A8E69686BF /* Pods-Eventment-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Eventment-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Eventment-tvOSTests/Pods-Eventment-tvOSTests.debug.xcconfig"; sourceTree = ""; }; @@ -228,7 +246,6 @@ C16C897DC77F76058902BC56 /* Pods-Eventment-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Eventment-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Eventment-tvOS/Pods-Eventment-tvOS.release.xcconfig"; sourceTree = ""; }; C1FB632CE816F883355AD2FF /* Pods-Eventment-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Eventment-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-Eventment-tvOSTests/Pods-Eventment-tvOSTests.release.xcconfig"; sourceTree = ""; }; C9BF2621C0334B15B136E000 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; - DAD62987D2A5499F328ADEE2 /* libPods-EventmentTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-EventmentTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; E0A54F8A8B184AAFA7B8E830 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; E77FDFD5E804505749111821 /* Pods-EventmentTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-EventmentTests.release.xcconfig"; path = "Target Support Files/Pods-EventmentTests/Pods-EventmentTests.release.xcconfig"; sourceTree = ""; }; E894DEEE56C44931A45F69EF /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; @@ -236,7 +253,6 @@ ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; EE9B3A7C9E845F18B5A9C843 /* Pods-Eventment.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Eventment.release.xcconfig"; path = "Target Support Files/Pods-Eventment/Pods-Eventment.release.xcconfig"; sourceTree = ""; }; F66208AB65A848BEB4335799 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; - F8C7A360952455A79EFC8C12 /* libPods-Eventment-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Eventment-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -244,7 +260,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3A3269E1B6D6D06F72B241D8 /* libPods-EventmentTests.a in Frameworks */, + CEB2DE8972FC482D2D07BC0A /* libPods-EventmentTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -252,9 +268,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1DAE268E22D4762C004C6DA5 /* libReact.a in Frameworks */, - 1D7F90ED22D4672E0006EDF4 /* libRNGestureHandler.a in Frameworks */, - DFE4DD0CB0107AA6C8FDAA61 /* libPods-Eventment.a in Frameworks */, + 1DBE5D4822D6F91E00F6E1D3 /* libc++.tbd in Frameworks */, + 1D0FF8D822DB4FE40025F1BB /* libRNVectorIcons.a in Frameworks */, + B136264F709787A4ED944BF9 /* libPods-Eventment.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -262,7 +278,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E177D0F8B0D577D291BFE3A8 /* libPods-Eventment-tvOS.a in Frameworks */, + EB9A3171312615B9FC0019A4 /* libPods-Eventment-tvOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -270,7 +286,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 76AAD9E7974A6376D567BA38 /* libPods-Eventment-tvOSTests.a in Frameworks */, + B6448097D15C2F76F3877523 /* libPods-Eventment-tvOSTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -308,6 +324,15 @@ name = Eventment; sourceTree = ""; }; + 1D0FF8D022DB4FCB0025F1BB /* Products */ = { + isa = PBXGroup; + children = ( + 1D0FF8D522DB4FCB0025F1BB /* libRNVectorIcons.a */, + 1D0FF8D722DB4FCB0025F1BB /* libRNVectorIcons-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; 1D7F90E222D464690006EDF4 /* Products */ = { isa = PBXGroup; children = ( @@ -343,13 +368,14 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( + 1DBE5D4722D6F91000F6E1D3 /* libc++.tbd */, 1DAE268D22D4762C004C6DA5 /* libReact.a */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, - 8F5F70445D5E6E006AF93604 /* libPods-Eventment.a */, - F8C7A360952455A79EFC8C12 /* libPods-Eventment-tvOS.a */, - 76BDA2713B94C290F5160207 /* libPods-Eventment-tvOSTests.a */, - DAD62987D2A5499F328ADEE2 /* libPods-EventmentTests.a */, + 95CCBED3A2131D8443B2A7FF /* libPods-Eventment.a */, + 9A8CE2A63074927A673C4087 /* libPods-Eventment-tvOS.a */, + 6842142FC8ED4380770BB1DF /* libPods-Eventment-tvOSTests.a */, + 2F256D73C36A1F18D3745FDC /* libPods-EventmentTests.a */, ); name = Frameworks; sourceTree = ""; @@ -357,6 +383,7 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( + 1D0FF8CF22DB4FCB0025F1BB /* RNVectorIcons.xcodeproj */, 1DAE26C222D47855004C6DA5 /* React.xcodeproj */, 1D7F90E122D464690006EDF4 /* RNGestureHandler.xcodeproj */, ); @@ -460,7 +487,7 @@ 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - E2780F98BD5B6F4FF7BBD851 /* [CP] Copy Pods Resources */, + 93B31A921E2ADA01E0063E8B /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -555,6 +582,10 @@ ProductGroup = 1D7F90E222D464690006EDF4 /* Products */; ProjectRef = 1D7F90E122D464690006EDF4 /* RNGestureHandler.xcodeproj */; }, + { + ProductGroup = 1D0FF8D022DB4FCB0025F1BB /* Products */; + ProjectRef = 1D0FF8CF22DB4FCB0025F1BB /* RNVectorIcons.xcodeproj */; + }, ); projectRoot = ""; targets = ( @@ -567,6 +598,20 @@ /* End PBXProject section */ /* Begin PBXReferenceProxy section */ + 1D0FF8D522DB4FCB0025F1BB /* libRNVectorIcons.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNVectorIcons.a; + remoteRef = 1D0FF8D422DB4FCB0025F1BB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 1D0FF8D722DB4FCB0025F1BB /* libRNVectorIcons-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNVectorIcons-tvOS.a"; + remoteRef = 1D0FF8D622DB4FCB0025F1BB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 1D7F90E722D464690006EDF4 /* libRNGestureHandler.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -758,7 +803,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { isa = PBXShellScriptBuildPhase; @@ -796,6 +841,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 93B31A921E2ADA01E0063E8B /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Eventment/Pods-Eventment-resources.sh", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Eventment/Pods-Eventment-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 960D8C95C68024594BCD09D0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -840,22 +901,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - E2780F98BD5B6F4FF7BBD851 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Eventment/Pods-Eventment-resources.sh", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Eventment/Pods-Eventment-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; F99AE85D220DBCB12BF37E80 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/ios/Eventment/Info.plist b/ios/Eventment/Info.plist index 65b85c6..4f5df81 100644 --- a/ios/Eventment/Info.plist +++ b/ios/Eventment/Info.plist @@ -38,7 +38,7 @@ NSLocationWhenInUseUsageDescription - + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities diff --git a/ios/Podfile b/ios/Podfile index ea07673..71afe90 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -2,7 +2,34 @@ platform :ios, '9.0' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' target 'Eventment' do - # Pods for Eventment + # Pods for HelloWorld + pod 'React', :path => '../node_modules/react-native/' + pod 'React-Core', :path => '../node_modules/react-native/React' + pod 'React-DevSupport', :path => '../node_modules/react-native/React' + pod 'React-fishhook', :path => '../node_modules/react-native/Libraries/fishhook' + pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' + pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' + pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' + pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' + pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' + pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' + pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' + pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' + pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' + pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket' + + pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' + pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' + pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' + pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' + pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + + pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' + pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' + + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + target 'EventmentTests' do inherit! :search_paths # Pods for testing @@ -12,7 +39,7 @@ target 'Eventment' do end target 'Eventment-tvOS' do - # Pods for Eventment-tvOS + # Pods for HelloWorld-tvOS target 'Eventment-tvOSTests' do inherit! :search_paths diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 0c25033..e060d51 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,37 +1,205 @@ PODS: - - React (0.11.0): - - React/Core (= 0.11.0) - - React/Core (0.11.0) + - boost-for-react-native (1.63.0) + - DoubleConversion (1.1.6) + - Folly (2018.10.22.00): + - boost-for-react-native + - DoubleConversion + - Folly/Default (= 2018.10.22.00) + - glog + - Folly/Default (2018.10.22.00): + - boost-for-react-native + - DoubleConversion + - glog + - glog (0.3.5) + - React (0.60.0): + - React-Core (= 0.60.0) + - React-DevSupport (= 0.60.0) + - React-RCTActionSheet (= 0.60.0) + - React-RCTAnimation (= 0.60.0) + - React-RCTBlob (= 0.60.0) + - React-RCTImage (= 0.60.0) + - React-RCTLinking (= 0.60.0) + - React-RCTNetwork (= 0.60.0) + - React-RCTSettings (= 0.60.0) + - React-RCTText (= 0.60.0) + - React-RCTVibration (= 0.60.0) + - React-RCTWebSocket (= 0.60.0) + - React-Core (0.60.0): + - Folly (= 2018.10.22.00) + - React-cxxreact (= 0.60.0) + - React-jsiexecutor (= 0.60.0) + - yoga (= 0.60.0.React) + - React-cxxreact (0.60.0): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsinspector (= 0.60.0) + - React-DevSupport (0.60.0): + - React-Core (= 0.60.0) + - React-RCTWebSocket (= 0.60.0) + - React-fishhook (0.60.0) + - React-jsi (0.60.0): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsi/Default (= 0.60.0) + - React-jsi/Default (0.60.0): + - boost-for-react-native (= 1.63.0) + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-jsiexecutor (0.60.0): + - DoubleConversion + - Folly (= 2018.10.22.00) + - glog + - React-cxxreact (= 0.60.0) + - React-jsi (= 0.60.0) + - React-jsinspector (0.60.0) + - React-RCTActionSheet (0.60.0): + - React-Core (= 0.60.0) + - React-RCTAnimation (0.60.0): + - React-Core (= 0.60.0) + - React-RCTBlob (0.60.0): + - React-Core (= 0.60.0) + - React-RCTNetwork (= 0.60.0) + - React-RCTWebSocket (= 0.60.0) + - React-RCTImage (0.60.0): + - React-Core (= 0.60.0) + - React-RCTNetwork (= 0.60.0) + - React-RCTLinking (0.60.0): + - React-Core (= 0.60.0) + - React-RCTNetwork (0.60.0): + - React-Core (= 0.60.0) + - React-RCTSettings (0.60.0): + - React-Core (= 0.60.0) + - React-RCTText (0.60.0): + - React-Core (= 0.60.0) + - React-RCTVibration (0.60.0): + - React-Core (= 0.60.0) + - React-RCTWebSocket (0.60.0): + - React-Core (= 0.60.0) + - React-fishhook (= 0.60.0) - RNGestureHandler (1.3.0): - React - RNScreens (1.0.0-alpha.23): - React - RNVectorIcons (6.6.0): - React + - yoga (0.60.0.React) DEPENDENCIES: - - RNGestureHandler (from `/Users/mifi/Library/CloudStorage/iCloud Drive/Documents/Projects/wEvent/code/app/node_modules/react-native-gesture-handler`) - - RNScreens (from `/Users/mifi/Library/CloudStorage/iCloud Drive/Documents/Projects/wEvent/code/app/node_modules/react-native-screens`) - - RNVectorIcons (from `/Users/mifi/Library/CloudStorage/iCloud Drive/Documents/Projects/wEvent/code/app/node_modules/react-native-vector-icons`) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - React (from `../node_modules/react-native/`) + - React-Core (from `../node_modules/react-native/React`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-DevSupport (from `../node_modules/react-native/React`) + - React-fishhook (from `../node_modules/react-native/Libraries/fishhook`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-RCTWebSocket (from `../node_modules/react-native/Libraries/WebSocket`) + - RNGestureHandler (from `/Users/mifi/Temporary Projects/eventment-app/node_modules/react-native-gesture-handler`) + - RNScreens (from `/Users/mifi/Temporary Projects/eventment-app/node_modules/react-native-screens`) + - RNVectorIcons (from `/Users/mifi/Temporary Projects/eventment-app/node_modules/react-native-vector-icons`) + - yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: https://github.com/cocoapods/specs.git: - - React + - boost-for-react-native EXTERNAL SOURCES: + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + React: + :path: "../node_modules/react-native/" + React-Core: + :path: "../node_modules/react-native/React" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-DevSupport: + :path: "../node_modules/react-native/React" + React-fishhook: + :path: "../node_modules/react-native/Libraries/fishhook" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-RCTWebSocket: + :path: "../node_modules/react-native/Libraries/WebSocket" RNGestureHandler: - :path: "/Users/mifi/Library/CloudStorage/iCloud Drive/Documents/Projects/wEvent/code/app/node_modules/react-native-gesture-handler" + :path: "/Users/mifi/Temporary Projects/eventment-app/node_modules/react-native-gesture-handler" RNScreens: - :path: "/Users/mifi/Library/CloudStorage/iCloud Drive/Documents/Projects/wEvent/code/app/node_modules/react-native-screens" + :path: "/Users/mifi/Temporary Projects/eventment-app/node_modules/react-native-screens" RNVectorIcons: - :path: "/Users/mifi/Library/CloudStorage/iCloud Drive/Documents/Projects/wEvent/code/app/node_modules/react-native-vector-icons" + :path: "/Users/mifi/Temporary Projects/eventment-app/node_modules/react-native-vector-icons" + yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - React: ab1a2e21deb34965c38328d5ec40cc7d12c6050a + boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c + DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2 + Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51 + glog: 1f3da668190260b06b429bb211bfbee5cd790c28 + React: 4b3c068e793e96672dcd186a2b572fac43e4b031 + React-Core: 3dc86b22920597f813c62a96db3165950b64826b + React-cxxreact: 0dacb291e59b81e7c3f22a2118bee853ba8a60d2 + React-DevSupport: 4eb4135386acd10c2586cc9c759bf96b4dac035e + React-fishhook: 86ca737527bb9d860efbb943c11c729a5b69aa3d + React-jsi: 8e128c4d0d8febc2977ef617d1c09bb54326069c + React-jsiexecutor: 7a3554f703a58963ec80b860144ea0f0e9b910e1 + React-jsinspector: d4ed52225912efe0019bb7f1a225aec20f23049a + React-RCTActionSheet: b27ff3cf3a68f917c46d2b94abf938b625b96570 + React-RCTAnimation: 9e4708e5bd65fca8285ce7c0aa076f3f4fa5c2f8 + React-RCTBlob: 6eafcc3a24f33785692a7be24918ade607bc8719 + React-RCTImage: 46b965d7225b428ea11580ead08a4318aef1d6be + React-RCTLinking: d65b9f56cf0b8e171575a86764df7bb019ac28d6 + React-RCTNetwork: 783ee2f430740e58f724e46adc79fe7feff64202 + React-RCTSettings: aa28315aadfbfaf94206d865673ae509f1e97c07 + React-RCTText: 685fca2e13b024271048e7e247ef24476f28a41e + React-RCTVibration: 4ee1cf208ab17a50fafb1c16ffe28fe594a64e4f + React-RCTWebSocket: fca087d583724aa0e5fef7d911f0f2a28d0f2736 RNGestureHandler: 5329a942fce3d41c68b84c2c2276ce06a696d8b0 RNScreens: f28b48b8345f2f5f39ed6195518291515032a788 RNVectorIcons: 0bb4def82230be1333ddaeee9fcba45f0b288ed4 + yoga: 616fde658be980aa60a2158835170f3f9c2d04b4 -PODFILE CHECKSUM: 2e73b972f32915fd0bd074c1c1e918e49b2312a7 +PODFILE CHECKSUM: 26223b0d86281b1c70ae009fe120443ad6ad9bf9 -COCOAPODS: 1.7.3 +COCOAPODS: 1.7.4 diff --git a/package.json b/package.json index 03692ea..c6c1f8f 100644 --- a/package.json +++ b/package.json @@ -13,14 +13,20 @@ "prop-types": "^15.7.2", "react": "16.8.6", "react-native": "0.60.0", + "react-native-debugger": "^1.1.0", "react-native-elements": "^1.1.0", + "react-native-gallery-swiper": "^1.22.1", "react-native-gesture-handler": "^1.3.0", "react-native-screens": "^1.0.0-alpha.23", "react-native-vector-icons": "^6.6.0", "react-navigation": "^3.11.0", "react-redux": "^7.1.0", "redux": "^4.0.2", + "redux-devtools-extension": "^2.13.8", + "redux-immutable": "^4.0.0", "redux-thunk": "^2.3.0", + "remote-redux-devtools": "^0.5.16", + "reselect": "^4.0.0", "thunk": "^0.0.1" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 5874685..c015963 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1449,7 +1449,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.1.2, base64-js@^1.2.3: +base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== @@ -1553,6 +1553,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -1713,6 +1721,11 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +clone@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs= + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -1806,6 +1819,11 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2789,6 +2807,11 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-params@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/get-params/-/get-params-0.1.2.tgz#bae0dfaba588a0c60d7834c0d8dc2ff60eeef2fe" + integrity sha1-uuDfq6WIoMYNeDTA2Nwv9g7u8v4= + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -2984,6 +3007,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +humps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" + integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao= + iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -2991,6 +3019,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, ic dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" @@ -3760,6 +3793,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsan@^3.1.13: + version "3.1.13" + resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.13.tgz#4de8c7bf8d1cfcd020c313d438f930cec4b91d86" + integrity sha512-9kGpCsGHifmw6oJet+y8HaCl14y7qgAsxVdV3pCHDySNR3BfDC30zgkssd7x5LRVAT22dnpbe9JdzzmXZnq9/g== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -3961,6 +3999,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +linked-list@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/linked-list/-/linked-list-0.1.0.tgz#798b0ff97d1b92a4fd08480f55aea4e9d49d37bf" + integrity sha1-eYsP+X0bkqT9CEgPVa6k6dSdN78= + load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -4017,6 +4060,11 @@ lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.2.0: + version "4.17.14" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -4512,6 +4560,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nanoid@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.0.3.tgz#dde999e173bc9d7bd2ee2746b89909ade98e075e" + integrity sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5188,6 +5241,11 @@ query-string@^6.4.2: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +querystring@0.2.0, querystring@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -5226,6 +5284,37 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-native-debugger@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/react-native-debugger/-/react-native-debugger-1.1.0.tgz#88ae36c229a7da6c8e97e0e98e366eca55d4736a" + integrity sha512-ckFI3QztvmLUVE/TCA++V5apVWrsARejSXqSFdTtiKmTNOsHhF+KjiVzwBYk1TegiSCjDU0LHO4m5b+HjN0Ncg== + dependencies: + humps "^2.0.1" + lodash "^4.17.5" + react-native-device-info "^0.10.2" + redux-create-reducer "^1.1.1" + +react-native-device-info@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-0.10.2.tgz#350cd68ed43839022ddea0a3a423439f16fa4fba" + integrity sha1-NQzWjtQ4OQIt3qCjpCNDnxb6T7o= + +react-native-easy-guesture-responder@^1.0.0, react-native-easy-guesture-responder@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/react-native-easy-guesture-responder/-/react-native-easy-guesture-responder-1.1.2.tgz#5e74fe61f22216b76c0e2bc7d12132e1df0c44b0" + integrity sha512-edUUD1VCa45VwSAwz0BdYmH2I4zk9AqXyFN9VNfHGgNux7ciLRc+fwpi98LCo9oKEBUBGpUwfMLmoZKj+VOn5g== + dependencies: + prop-types "^15.6.2" + +react-native-easy-view-transformer@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/react-native-easy-view-transformer/-/react-native-easy-view-transformer-1.1.1.tgz#cf5e5d7ecba4154c9110a7e992bfe58dfd22d646" + integrity sha512-14mdrLsv108Mm4a210E1QlXyWdFvsnXnVccTpd7iZqgLoVPDulWbE2vbfT5zTsSxnE3Srq6tuUzUGy3G11o9pg== + dependencies: + prop-types "^15.6.2" + react-native-easy-guesture-responder "^1.0.0" + react-native-scrolling "^1.0.0" + react-native-elements@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/react-native-elements/-/react-native-elements-1.1.0.tgz#f99bcda4459a886f3ab4591c684c099d37aedf2b" @@ -5239,6 +5328,16 @@ react-native-elements@^1.1.0: react-native-ratings "^6.3.0" react-native-status-bar-height "^2.2.0" +react-native-gallery-swiper@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/react-native-gallery-swiper/-/react-native-gallery-swiper-1.22.1.tgz#a1b400d6f2e3faff28c66e8c6a968756c73e5294" + integrity sha512-8JwhmXJHyOF/1q076qh/UxpMemq1uC11wbwhLQ8nko3HlZ+WHqRYMCd3GT19ry9/n4LU2cGzKf2XG/2TBLFPiw== + dependencies: + prop-types "^15.6.2" + react-native-easy-guesture-responder "^1.1.1" + react-native-image-transformer "^1.0.5" + react-native-page-list "^1.0.1" + react-native-gesture-handler@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.3.0.tgz#d0386f565928ccc1849537f03f2e37fd5f6ad43f" @@ -5248,6 +5347,23 @@ react-native-gesture-handler@^1.3.0: invariant "^2.2.2" prop-types "^15.5.10" +react-native-image-transformer@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/react-native-image-transformer/-/react-native-image-transformer-1.0.6.tgz#9f387643d500568e51454dfe6d340cf84ae12622" + integrity sha512-QhOZryorU9Khm48Dko4TkBQfuU+bliM+cvLMAErGDDZ77kp24TMAdIDQKhMnp6T5cUVqIFc+tpEGzZQG5GAQ6Q== + dependencies: + prop-types "^15.6.2" + react-native-easy-view-transformer "^1.0.1" + +react-native-page-list@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/react-native-page-list/-/react-native-page-list-1.0.3.tgz#0ae9eb86f78f86c960d49d90da610158029e053c" + integrity sha512-SFP45eaML1CBucyH1qjjaq2m7qg10xeuEv0wLauGc6Dy4BJbsD3trdSCxY+BVENKYuiYZGgSTjWWA8acuFNLnw== + dependencies: + prop-types "^15.6.2" + react-native-easy-guesture-responder "^1.0.0" + react-native-scrolling "^1.0.0" + react-native-ratings@^6.3.0: version "6.3.1" resolved "https://registry.yarnpkg.com/react-native-ratings/-/react-native-ratings-6.3.1.tgz#4e4bd87f376423dc62c933f570fc1932c78adaa4" @@ -5270,6 +5386,13 @@ react-native-safe-area-view@^0.14.1: dependencies: debounce "^1.2.0" +react-native-scrolling@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-native-scrolling/-/react-native-scrolling-1.0.2.tgz#15016d2f57493a96847e90ea4effc71984d1a39d" + integrity sha512-XjchTkZFKN8gFC9h39lFWhkLfkAtkuAvNhkwgPrr7Hwb1Ef92wFcyLfy/I3Kb9Z1AZ6zyOzNYikHyX1yq5KJAw== + dependencies: + prop-types "^15.6.2" + react-native-status-bar-height@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/react-native-status-bar-height/-/react-native-status-bar-height-2.3.1.tgz#b92ce9112c2367290847ac11284d9d84a6330169" @@ -5463,6 +5586,40 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +redux-create-reducer@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redux-create-reducer/-/redux-create-reducer-1.2.0.tgz#accdd7f36509b202c7602f14c0fb827a4d1c3dde" + integrity sha512-H+bi4NCgw253xVVGHRnQQyWVkl2v0MDUiWRzFrSexcSgZ84JOa9Phsso1IRKKkrqGvBqQn2+oLZYdB3/qG99FQ== + +redux-devtools-core@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/redux-devtools-core/-/redux-devtools-core-0.2.1.tgz#4e43cbe590a1f18c13ee165d2d42e0bc77a164d8" + integrity sha512-RAGOxtUFdr/1USAvxrWd+Gq/Euzgw7quCZlO5TgFpDfG7rB5tMhZUrNyBjpzgzL2yMk0eHnPYIGm7NkIfRzHxQ== + dependencies: + get-params "^0.1.2" + jsan "^3.1.13" + lodash "^4.17.11" + nanoid "^2.0.0" + remotedev-serialize "^0.1.8" + +redux-devtools-extension@^2.13.8: + version "2.13.8" + resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz#37b982688626e5e4993ff87220c9bbb7cd2d96e1" + integrity sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg== + +redux-devtools-instrument@^1.9.4: + version "1.9.6" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.9.6.tgz#6b412595f74b9d48cfd4ecc13e585b1588ed6e7e" + integrity sha512-MwvY4cLEB2tIfWWBzrUR02UM9qRG2i7daNzywRvabOSVdvAY7s9BxSwMmVRH1Y/7QWjplNtOwgT0apKhHg2Qew== + dependencies: + lodash "^4.2.0" + symbol-observable "^1.0.2" + +redux-immutable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/redux-immutable/-/redux-immutable-4.0.0.tgz#3a1a32df66366462b63691f0e1dc35e472bbc9f3" + integrity sha1-Ohoy32Y2ZGK2NpHw4dw15HK7yfM= + redux-thunk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" @@ -5537,6 +5694,25 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" +remote-redux-devtools@^0.5.16: + version "0.5.16" + resolved "https://registry.yarnpkg.com/remote-redux-devtools/-/remote-redux-devtools-0.5.16.tgz#95b1a4a1988147ca04f3368f3573b661748b3717" + integrity sha512-xZ2D1VRIWzat5nsvcraT6fKEX9Cfi+HbQBCwzNnUAM8Uicm/anOc60XGalcaDPrVmLug7nhDl2nimEa3bL3K9w== + dependencies: + jsan "^3.1.13" + querystring "^0.2.0" + redux-devtools-core "^0.2.1" + redux-devtools-instrument "^1.9.4" + rn-host-detect "^1.1.5" + socketcluster-client "^14.2.1" + +remotedev-serialize@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/remotedev-serialize/-/remotedev-serialize-0.1.8.tgz#c99cb184e7f71a906162abc404be8ce33810205f" + integrity sha512-3YG/FDcOmiK22bl5oMRM8RRnbGrFEuPGjbcDG+z2xi5aQaNQNZ8lqoRnZTwXVfaZtutXuiAQOgPRrogzQk8edg== + dependencies: + jsan "^3.1.13" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -5609,6 +5785,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +reselect@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" + integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -5668,6 +5849,11 @@ rimraf@~2.2.6: resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= +rn-host-detect@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.5.tgz#fbecb982b73932f34529e97932b9a63e58d8deb6" + integrity sha512-ufk2dFT3QeP9HyZ/xTuMtW27KnFy815CYitJMqQm+pgG3ZAtHBsrU8nXizNKkqXGy3bQmhEoloVbrfbvMJMqkg== + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -5753,6 +5939,23 @@ sax@~1.1.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" integrity sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA= +sc-channel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/sc-channel/-/sc-channel-1.2.0.tgz#d9209f3a91e3fa694c66b011ce55c4ad8c3087d9" + integrity sha512-M3gdq8PlKg0zWJSisWqAsMmTVxYRTpVRqw4CWAdKBgAfVKumFcTjoCV0hYu7lgUXccCtCD8Wk9VkkE+IXCxmZA== + dependencies: + component-emitter "1.2.1" + +sc-errors@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sc-errors/-/sc-errors-1.4.1.tgz#53e80030fe647e133d73b51eaa7d2b0f7591fd5b" + integrity sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ== + +sc-formatter@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/sc-formatter/-/sc-formatter-3.0.2.tgz#9abdb14e71873ce7157714d3002477bbdb33c4e6" + integrity sha512-9PbqYBpCq+OoEeRQ3QfFIGE6qwjjBcd2j7UjgDlhnZbtSnuGgHdcRklPKYGuYFH82V/dwd+AIpu8XvA1zqTd+A== + scheduler@0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.14.0.tgz#b392c23c9c14bfa2933d4740ad5603cc0d59ea5b" @@ -5945,6 +6148,22 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socketcluster-client@^14.2.1: + version "14.2.2" + resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-14.2.2.tgz#60b31318abe6828ba7233f5a9a32540263fd23b6" + integrity sha512-vofmFcTaHaIf+MqAR0OZS7e30X4jxbDPJl+taCe8kLGJ5rVOrKeuU0sGyHyHyqW87AIR6jqc4KODl4WQJ4SsAA== + dependencies: + buffer "^5.2.1" + clone "2.1.1" + component-emitter "1.2.1" + linked-list "0.1.0" + querystring "0.2.0" + sc-channel "^1.2.0" + sc-errors "^1.4.1" + sc-formatter "^3.0.1" + uuid "3.2.1" + ws "5.1.1" + source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -6178,7 +6397,7 @@ symbol-observable@1.0.1: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= -symbol-observable@^1.2.0: +symbol-observable@^1.0.2, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -6497,6 +6716,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== + uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -6661,6 +6885,13 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +ws@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.1.1.tgz#1d43704689711ac1942fd2f283e38f825c4b8b95" + integrity sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw== + dependencies: + async-limiter "~1.0.0" + ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"