Implement random location on home page #30

Merged
sanj merged 1 commits from feature/random-location into develop 2019-01-22 14:12:31 +00:00
7 changed files with 120 additions and 93 deletions

View File

@ -1,7 +1,11 @@
import { fetchPlaces, fetchVideosByPlace } from '../utils/api'; import {
fetchPlaces,
fetchRandomPlace,
fetchVideosByPlace,
fetchPlaceItemCount
} from '../utils/api';
import { APIError } from './errors'; import { APIError } from './errors';
import { getItem, setItem } from '../utils/safe-storage'; import { getItem, setItem } from '../utils/safe-storage';
import getRandomTopic from '../utils/get-random-place';
import { addVideosToState } from './videos'; import { addVideosToState } from './videos';
import { import {
START_LOADING_ALL_PLACES, START_LOADING_ALL_PLACES,
@ -30,40 +34,51 @@ function startLoadingAllPlaces() {
}; };
function loadedPlaces(places) { function loadedPlaces(places) {
// cache
setItem('allPlaces', JSON.stringify(places));
setItem('placesUpdatedAt', new Date());
return { return {
type: LOADED_ALL_PLACES, type: LOADED_ALL_PLACES,
payload: places payload: places
}; };
}; };
// actions : // actions :
// - async actions // - async actions
// - simple: return action type and payload. // - simple: return action type and payload.
export function getRandomPlaceVideos(allPlaces, numVideos=3) { export function getRandomPlaceVideos(numVideos=3) {
return dispatch => { return dispatch => {
const randomTopic = getRandomTopic(allPlaces); dispatch(loadingRandomPlaceVideos());
dispatch(loadingRandomTopicVideos()); fetchRandomPlace()
fetchVideosByPlace(randomTopic.name, 0, numVideos) .then(place => {
.then(videos => { console.log('place', place);
dispatch(addVideosToState(videos)); return fetchPlaceItemCount(place.name)
dispatch(loadedRandomTopicVideos(randomTopic, videos)); .then(itemCount => {
}); fetchVideosByPlace(place.name, 0, numVideos)
.then(videos => {
console.log('place videos', videos);
dispatch(addVideosToState(videos));
dispatch(loadedRandomPlaceVideos(place, itemCount, videos))
});
})
})
.catch(e => {
console.log('error', e);
})
}; };
}; };
function loadedRandomTopicVideos(place, videos) { function loadedRandomPlaceVideos(place, itemCount, videos) {
return { return {
type: LOADED_RANDOM_PLACE, type: LOADED_RANDOM_PLACE,
payload: { payload: {
place: place, place: place,
itemCount: itemCount,
videos: videos videos: videos
} }
}; };
}; };
function loadingRandomTopicVideos() { function loadingRandomPlaceVideos() {
return { return {
type: START_LOADING_RANDOM_PLACE type: START_LOADING_RANDOM_PLACE
}; };

View File

@ -1,6 +1,7 @@
import Grid from 'react-css-grid' import Grid from 'react-css-grid'
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { getStaticMapURL } from '../utils/mapbox';
import VideoItem from "./VideoItem"; import VideoItem from "./VideoItem";
import RandomItemTitle from "./SectionHeading"; import RandomItemTitle from "./SectionHeading";
import {Link} from 'react-router-dom'; import {Link} from 'react-router-dom';
@ -8,10 +9,15 @@ import {Link} from 'react-router-dom';
class RandomPlace extends React.Component { class RandomPlace extends React.Component {
shufflePlace() { shufflePlace() {
this.props.getRandomPlaceVideos(this.props.allPlaces); this.props.getRandomPlaceVideos();
}
getStaticMapURL() {
return getStaticMapURL(this.props.place);
} }
render() { render() {
console.log('random place props', this.props);
return ( return (
<section className="random-item-container"> <section className="random-item-container">
<h2 className="section-heading"> <h2 className="section-heading">
@ -39,7 +45,9 @@ class RandomPlace extends React.Component {
<i className="fa fa-random"></i> <i className="fa fa-random"></i>
</button> </button>
</Grid> </Grid>
{this.props.place && (
<img src={this.getStaticMapURL()} />
)}
<Grid className="random-places" <Grid className="random-places"
width={220} width={220}
gap={12}> gap={12}>
@ -47,10 +55,13 @@ class RandomPlace extends React.Component {
<VideoItem id={video.id} key={video.id} title={video.title}/> <VideoItem id={video.id} key={video.id} title={video.title}/>
)} )}
</Grid> </Grid>
<RandomItemTitle title={this.props.placeName} {this.props.placeName && (
count={this.props.placeCount} <RandomItemTitle
src={'/results/place/' + this.props.placeName} title={this.props.placeName}
/> count={this.props.placeCount}
src={'/results/place/' + this.props.placeName}
/>
)}
</section> </section>
) )

View File

@ -1,5 +1,6 @@
export default { export default {
baseUrl: 'https://858.ma', baseUrl: 'https://858.ma',
videoBase: 'https://video22.858.ma', videoBase: 'https://video22.858.ma',
apiUrl: 'https://858.ma/api' apiUrl: 'https://858.ma/api',
mapboxKey: 'pk.eyJ1Ijoic2FuamF5YiIsImEiOiI3NjVvMFY0In0.byn_eCZGAwR1yaPeC-SVKw'
}; };

View File

@ -13,12 +13,7 @@ class Home extends React.Component {
} else { } else {
this.props.getAllTopics(); this.props.getAllTopics();
} }
// places this.props.getRandomPlaceVideos();
if (this.props.allPlaces && this.props.allPlaces.length > 0 && !this.props.randomPlace) {
this.props.getRandomPlaceVideos()(this.props.allPlaces);
} else {
this.props.getAllPlaces();
}
} }
componentWillReceiveProps(nextProps) { componentWillReceiveProps(nextProps) {
@ -27,10 +22,6 @@ class Home extends React.Component {
if ((this.props.allTopics || nextProps.allTopics) && !this.props.loadingRandomTopic && !nextProps.loadingRandomTopic && !this.props.randomTopic) { if ((this.props.allTopics || nextProps.allTopics) && !this.props.loadingRandomTopic && !nextProps.loadingRandomTopic && !this.props.randomTopic) {
this.props.getRandomTopicVideos(nextProps.allTopics); this.props.getRandomTopicVideos(nextProps.allTopics);
} }
// places
if ((this.props.allPlaces || nextProps.allPlaces) && !this.props.loadingRandomPlace && !nextProps.loadingRandomPlace && !this.props.randomPlace) {
this.props.getRandomPlaceVideos()(nextProps.allPlaces);
}
} }
render() { render() {
@ -45,11 +36,12 @@ class Home extends React.Component {
getRandomTopicVideos={this.props.getRandomTopicVideos} getRandomTopicVideos={this.props.getRandomTopicVideos}
/> />
<RandomPlace <RandomPlace
placeName={this.props.randomPlace || ''} place={this.props.randomPlace}
allPlaces={this.props.allPlaces || []} placeName={this.props.randomPlaceName || null}
placeCount={this.props.randomPlaceCount} placeId={this.props.randomPlaceId || ''}
placeCount={this.props.randomPlaceCount || null}
videos={this.props.randomPlaceVideos || []} videos={this.props.randomPlaceVideos || []}
loading={this.props.loadingAllPlaces || this.props.loadingRandomPlace} loading={this.props.loadingRandomPlace}
getRandomPlaceVideos={this.props.getRandomPlaceVideos} getRandomPlaceVideos={this.props.getRandomPlaceVideos}
/> />
<RandomDate/> <RandomDate/>
@ -65,13 +57,14 @@ const mapStateToProps = state => ({
randomTopicCount: state.topics.randomTopicCount, randomTopicCount: state.topics.randomTopicCount,
loadingRandomTopic: state.topics.loadingRandomTopic, loadingRandomTopic: state.topics.loadingRandomTopic,
randomTopicVideos: state.topics.randomTopicVideos, randomTopicVideos: state.topics.randomTopicVideos,
// places // places
allPlaces: state.topics.allPlaces, randomPlace: state.places.randomPlace,
loadingAllPlaces: state.topics.loadingAllPlaces, randomPlaceName: state.places.randomPlaceName,
randomPlace: state.topics.randomPlace, randomPlaceId: state.places.randomPlaceId,
randomPlaceCount: state.topics.randomPlaceCount, randomPlaceCount: state.places.randomPlaceCount,
loadingRandomPlace: state.topics.loadingRandomPlace, loadingRandomPlace: state.places.loadingRandomPlace,
randomPlaceVideos: state.topics.randomPlaceVideos, randomPlaceVideos: state.places.randomPlaceVideos,
}); });
const mapDispatchToProps = dispatch => ({ const mapDispatchToProps = dispatch => ({
@ -79,7 +72,7 @@ const mapDispatchToProps = dispatch => ({
getRandomTopicVideos: allTopics => dispatch(getRandomTopicVideos(allTopics)), getRandomTopicVideos: allTopics => dispatch(getRandomTopicVideos(allTopics)),
// places // places
getAllPlaces: () => dispatch(getAllPlaces()), getAllPlaces: () => dispatch(getAllPlaces()),
getRandomPlaceVideos: allTopics => dispatch(getRandomPlaceVideos(allTopics)), getRandomPlaceVideos: () => dispatch(getRandomPlaceVideos()),
}); });

View File

@ -3,6 +3,7 @@ import { combineReducers } from 'redux';
import TopicsReducer from './topics'; import TopicsReducer from './topics';
import VideosReducer from './videos'; import VideosReducer from './videos';
import SearchReducer from './search'; import SearchReducer from './search';
import PlacesReducer from './places';
import { connectRouter } from 'connected-react-router' import { connectRouter } from 'connected-react-router'
export default (history) => combineReducers({ export default (history) => combineReducers({
@ -10,4 +11,5 @@ export default (history) => combineReducers({
topics: TopicsReducer, topics: TopicsReducer,
videos: VideosReducer, videos: VideosReducer,
results: SearchReducer, results: SearchReducer,
places: PlacesReducer
}); });

View File

@ -23,6 +23,7 @@ const VIDEO_KEYS = [
@returns {Promise} - Resolves with data if successful, else throws error. @returns {Promise} - Resolves with data if successful, else throws error.
*/ */
export function callApi(action, data) { export function callApi(action, data) {
console.log('API Call', action, data);
let formData = new FormData(); let formData = new FormData();
formData.append('action', action); formData.append('action', action);
formData.append('data', JSON.stringify(data)); formData.append('data', JSON.stringify(data));
@ -163,12 +164,29 @@ export function fetchVideosByDate(date, startRange=0, endRange=100, sortKey='ran
@param {Float} east - longitude of east bounds @param {Float} east - longitude of east bounds
*/ */
export function fetchPlaces(north, south, west, east, startRange=0, endRange=100) { export function fetchPlaces(north, south, west, east, startRange=0, endRange=100) {
console.log("BAD: fetchPlaces called");
const data = { const data = {
"itemsQuery": { "itemsQuery": {
"conditions": [], "conditions": [],
"operator": "&" "operator": "&"
}, },
"keys": ["id", "name", "alternativeNames", "geoname", "countryCode", "type", "lat", "lng", "south", "west", "north", "east", "area", "editable"], "keys": [
"id",
"name",
"alternativeNames",
"geoname",
"countryCode",
"type",
"lat",
"lng",
"south",
"west",
"north",
"east",
"area",
"editable"
],
"query": { "query": {
"conditions": [{ "conditions": [{
"key": "lat", "key": "lat",
@ -190,31 +208,62 @@ export function fetchPlaces(north, south, west, east, startRange=0, endRange=100
return callApi('findPlaces', data).then(data => data.items); return callApi('findPlaces', data).then(data => data.items);
} }
export function fetchPlaceItemCount(placeName) {
const data = {
"query": {
"conditions": [{
"key": "places",
"value": placeName
}],
"operator": "&"
}
};
return callApi('find', data).then(data => data.items);
}
/* /*
Fetches a random place Fetches a random place
*/ */
export function fetchRandomPlace() { export function fetchRandomPlace() {
const startRange = Math.floor(Math.random() * 50);
const endRange = startRange + 1;
const data = { const data = {
"itemsQuery": { "itemsQuery": {
"conditions": [], "conditions": [],
"operator": "&" "operator": "&"
}, },
"keys": ["id", "name", "alternativeNames", "geoname", "countryCode", "type", "lat", "lng", "south", "west", "north", "east", "area", "editable"], "keys": [
"id",
"name",
"items",
"alternativeNames",
"geoname",
"countryCode",
"type",
"lat",
"lng",
"south",
"west",
"north",
"east",
"area",
"editable"
],
"query": { "query": {
"conditions": [], "conditions": [],
"operator": "&" "operator": "&"
}, },
"range": [0, 1], "range": [startRange, endRange],
"sort": [{ "sort": [{
"key": "random", "key": "items",
"operator": "-" "operator": "-"
}] }]
}; };
return callApi('findPlaces', data).then(data => data.items[0]); return callApi('findPlaces', data).then(data => data.items[0]);
} }
export function fetchVideosByPlace(placeId, startRange=0, endRange=100, sortKey='random') { export function fetchVideosByPlace(placeName, startRange=0, endRange=100, sortKey='random') {
return fetchVideosByX('place', placeId, startRange, endRange, sortKey); return fetchVideosByX('places', placeName, startRange, endRange, sortKey);
} }
export function fetchVideoById(id) { export function fetchVideoById(id) {

View File

@ -953,7 +953,6 @@ alphanum-sort@^1.0.0:
amdefine@>=0.0.4: amdefine@>=0.0.4:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
ansi-colors@^3.0.0: ansi-colors@^3.0.0:
version "3.2.1" version "3.2.1"
@ -1051,7 +1050,6 @@ array-filter@~0.0.0:
array-find-index@^1.0.1: array-find-index@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
array-flatten@1.1.1: array-flatten@1.1.1:
version "1.1.1" version "1.1.1"
@ -1145,7 +1143,6 @@ async-each@^1.0.0:
async-foreach@^0.1.3: async-foreach@^0.1.3:
version "0.1.3" version "0.1.3"
resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=
async-limiter@~1.0.0: async-limiter@~1.0.0:
version "1.0.0" version "1.0.0"
@ -1471,7 +1468,6 @@ binary-extensions@^1.0.0:
block-stream@*: block-stream@*:
version "0.0.9" version "0.0.9"
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
dependencies: dependencies:
inherits "~2.0.0" inherits "~2.0.0"
@ -1750,7 +1746,6 @@ camel-case@3.0.x:
camelcase-keys@^2.0.0: camelcase-keys@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
dependencies: dependencies:
camelcase "^2.0.0" camelcase "^2.0.0"
map-obj "^1.0.0" map-obj "^1.0.0"
@ -1758,12 +1753,10 @@ camelcase-keys@^2.0.0:
camelcase@^2.0.0: camelcase@^2.0.0:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
camelcase@^3.0.0: camelcase@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
camelcase@^4.1.0: camelcase@^4.1.0:
version "4.1.0" version "4.1.0"
@ -1882,7 +1875,6 @@ class-utils@^0.3.5:
classnames@^2.2.3: classnames@^2.2.3:
version "2.2.6" version "2.2.6"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
clean-css@4.2.x: clean-css@4.2.x:
version "4.2.1" version "4.2.1"
@ -1903,7 +1895,6 @@ cli-width@^2.0.0:
cliui@^3.2.0: cliui@^3.2.0:
version "3.2.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
dependencies: dependencies:
string-width "^1.0.1" string-width "^1.0.1"
strip-ansi "^3.0.1" strip-ansi "^3.0.1"
@ -2190,7 +2181,6 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
cross-spawn@^3.0.0: cross-spawn@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
dependencies: dependencies:
lru-cache "^4.0.1" lru-cache "^4.0.1"
which "^1.2.9" which "^1.2.9"
@ -2408,7 +2398,6 @@ cssstyle@^1.0.0, cssstyle@^1.1.1:
currently-unhandled@^0.4.1: currently-unhandled@^0.4.1:
version "0.4.1" version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
dependencies: dependencies:
array-find-index "^1.0.1" array-find-index "^1.0.1"
@ -3405,7 +3394,6 @@ follow-redirects@^1.0.0:
font-awesome@^4.7.0: font-awesome@^4.7.0:
version "4.7.0" version "4.7.0"
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
integrity sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=
for-in@^0.1.3: for-in@^0.1.3:
version "0.1.8" version "0.1.8"
@ -3518,7 +3506,6 @@ fsevents@1.2.4, fsevents@^1.2.2, fsevents@^1.2.3:
fstream@^1.0.0, fstream@^1.0.2: fstream@^1.0.0, fstream@^1.0.2:
version "1.0.11" version "1.0.11"
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
dependencies: dependencies:
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
inherits "~2.0.0" inherits "~2.0.0"
@ -3549,7 +3536,6 @@ gauge@~2.7.3:
gaze@^1.0.0: gaze@^1.0.0:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
dependencies: dependencies:
globule "^1.0.0" globule "^1.0.0"
@ -3564,7 +3550,6 @@ get-own-enumerable-property-symbols@^3.0.0:
get-stdin@^4.0.1: get-stdin@^4.0.1:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
get-stream@^3.0.0: get-stream@^3.0.0:
version "3.0.0" version "3.0.0"
@ -3677,7 +3662,6 @@ globby@^6.1.0:
globule@^1.0.0: globule@^1.0.0:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==
dependencies: dependencies:
glob "~7.1.1" glob "~7.1.1"
lodash "~4.17.10" lodash "~4.17.10"
@ -4099,12 +4083,10 @@ imurmurhash@^0.1.4:
in-publish@^2.0.0: in-publish@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
integrity sha1-4g/146KvwmkDILbcVSaCqcf631E=
indent-string@^2.1.0: indent-string@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
dependencies: dependencies:
repeating "^2.0.0" repeating "^2.0.0"
@ -4864,7 +4846,6 @@ joi@^11.1.1:
js-base64@^2.1.8: js-base64@^2.1.8:
version "2.4.9" version "2.4.9"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03"
integrity sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==
js-levenshtein@^1.1.3: js-levenshtein@^1.1.3:
version "1.1.4" version "1.1.4"
@ -5161,7 +5142,6 @@ lodash._reinterpolate@~3.0.0:
lodash.assign@^4.2.0: lodash.assign@^4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
lodash.camelcase@^4.3.0: lodash.camelcase@^4.3.0:
version "4.3.0" version "4.3.0"
@ -5170,7 +5150,6 @@ lodash.camelcase@^4.3.0:
lodash.clonedeep@^4.3.2: lodash.clonedeep@^4.3.2:
version "4.5.0" version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
lodash.debounce@^4.0.8: lodash.debounce@^4.0.8:
version "4.0.8" version "4.0.8"
@ -5183,7 +5162,6 @@ lodash.memoize@^4.1.2:
lodash.mergewith@^4.6.0: lodash.mergewith@^4.6.0:
version "4.6.1" version "4.6.1"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==
lodash.sortby@^4.7.0: lodash.sortby@^4.7.0:
version "4.7.0" version "4.7.0"
@ -5209,7 +5187,6 @@ lodash.templatesettings@^4.0.0:
lodash.throttle@^4.1.1: lodash.throttle@^4.1.1:
version "4.1.1" version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
lodash.uniq@^4.5.0: lodash.uniq@^4.5.0:
version "4.5.0" version "4.5.0"
@ -5232,7 +5209,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3
loud-rejection@^1.0.0: loud-rejection@^1.0.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
dependencies: dependencies:
currently-unhandled "^0.4.1" currently-unhandled "^0.4.1"
signal-exit "^3.0.0" signal-exit "^3.0.0"
@ -5277,7 +5253,6 @@ map-cache@^0.2.2:
map-obj@^1.0.0, map-obj@^1.0.1: map-obj@^1.0.0, map-obj@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
map-visit@^1.0.0: map-visit@^1.0.0:
version "1.0.0" version "1.0.0"
@ -5329,7 +5304,6 @@ memory-fs@^0.4.0, memory-fs@~0.4.1:
meow@^3.7.0: meow@^3.7.0:
version "3.7.0" version "3.7.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
dependencies: dependencies:
camelcase-keys "^2.0.0" camelcase-keys "^2.0.0"
decamelize "^1.1.2" decamelize "^1.1.2"
@ -5632,7 +5606,6 @@ node-forge@0.7.5:
node-gyp@^3.8.0: node-gyp@^3.8.0:
version "3.8.0" version "3.8.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
dependencies: dependencies:
fstream "^1.0.0" fstream "^1.0.0"
glob "^7.0.3" glob "^7.0.3"
@ -5712,7 +5685,6 @@ node-releases@^1.0.0-alpha.11, node-releases@^1.0.1:
node-sass@^4.11.0: node-sass@^4.11.0:
version "4.11.0" version "4.11.0"
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a"
integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==
dependencies: dependencies:
async-foreach "^0.1.3" async-foreach "^0.1.3"
chalk "^1.1.1" chalk "^1.1.1"
@ -5737,7 +5709,6 @@ node-sass@^4.11.0:
"nopt@2 || 3": "nopt@2 || 3":
version "3.0.6" version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
dependencies: dependencies:
abbrev "1" abbrev "1"
@ -5957,7 +5928,6 @@ os-homedir@^1.0.0:
os-locale@^1.4.0: os-locale@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
dependencies: dependencies:
lcid "^1.0.0" lcid "^1.0.0"
@ -7235,7 +7205,6 @@ recursive-readdir@2.2.2:
redent@^1.0.0: redent@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
dependencies: dependencies:
indent-string "^2.1.0" indent-string "^2.1.0"
strip-indent "^1.0.1" strip-indent "^1.0.1"
@ -7556,7 +7525,6 @@ sane@^2.0.0:
sass-graph@^2.2.4: sass-graph@^2.2.4:
version "2.2.4" version "2.2.4"
resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=
dependencies: dependencies:
glob "^7.0.0" glob "^7.0.0"
lodash "^4.0.0" lodash "^4.0.0"
@ -7609,7 +7577,6 @@ schema-utils@^1.0.0:
scss-tokenizer@^0.2.3: scss-tokenizer@^0.2.3:
version "0.2.3" version "0.2.3"
resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE=
dependencies: dependencies:
js-base64 "^2.1.8" js-base64 "^2.1.8"
source-map "^0.4.2" source-map "^0.4.2"
@ -7635,7 +7602,6 @@ selfsigned@^1.9.1:
semver@~5.3.0: semver@~5.3.0:
version "5.3.0" version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
send@0.16.2: send@0.16.2:
version "0.16.2" version "0.16.2"
@ -7860,7 +7826,6 @@ source-map-url@^0.4.0:
source-map@^0.4.2: source-map@^0.4.2:
version "0.4.4" version "0.4.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
dependencies: dependencies:
amdefine ">=0.0.4" amdefine ">=0.0.4"
@ -7979,7 +7944,6 @@ statuses@~1.4.0:
stdout-stream@^1.4.0: stdout-stream@^1.4.0:
version "1.4.1" version "1.4.1"
resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==
dependencies: dependencies:
readable-stream "^2.0.1" readable-stream "^2.0.1"
@ -8091,7 +8055,6 @@ strip-eof@^1.0.0:
strip-indent@^1.0.1: strip-indent@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
dependencies: dependencies:
get-stdin "^4.0.1" get-stdin "^4.0.1"
@ -8192,7 +8155,6 @@ tapable@^1.0.0, tapable@^1.1.0:
tar@^2.0.0: tar@^2.0.0:
version "2.2.1" version "2.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
dependencies: dependencies:
block-stream "*" block-stream "*"
fstream "^1.0.2" fstream "^1.0.2"
@ -8340,7 +8302,6 @@ tr46@^1.0.1:
trim-newlines@^1.0.0: trim-newlines@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
trim-right@^1.0.1: trim-right@^1.0.1:
version "1.0.1" version "1.0.1"
@ -8349,7 +8310,6 @@ trim-right@^1.0.1:
"true-case-path@^1.0.2": "true-case-path@^1.0.2":
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
dependencies: dependencies:
glob "^7.1.2" glob "^7.1.2"
@ -8599,7 +8559,6 @@ verror@1.10.0:
video-react@^0.13.1: video-react@^0.13.1:
version "0.13.1" version "0.13.1"
resolved "https://registry.yarnpkg.com/video-react/-/video-react-0.13.1.tgz#5d0dc68748f9b12e118beea1998d6ae5f6cbd6ba" resolved "https://registry.yarnpkg.com/video-react/-/video-react-0.13.1.tgz#5d0dc68748f9b12e118beea1998d6ae5f6cbd6ba"
integrity sha512-AeGSpddfHv0UxeJztWUALYEjCdzXM1QdtQ5GD1VUd3vxcgwgIfB7EzFKcewRevSHHK8TDmjNksbvbWRobF/QeA==
dependencies: dependencies:
classnames "^2.2.3" classnames "^2.2.3"
lodash.throttle "^4.1.1" lodash.throttle "^4.1.1"
@ -8806,7 +8765,6 @@ whatwg-url@^7.0.0:
which-module@^1.0.0: which-module@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
which-module@^2.0.0: which-module@^2.0.0:
version "2.0.0" version "2.0.0"
@ -9028,7 +8986,6 @@ yargs-parser@^10.1.0:
yargs-parser@^5.0.0: yargs-parser@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=
dependencies: dependencies:
camelcase "^3.0.0" camelcase "^3.0.0"
@ -9075,7 +9032,6 @@ yargs@^11.0.0:
yargs@^7.0.0: yargs@^7.0.0:
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=
dependencies: dependencies:
camelcase "^3.0.0" camelcase "^3.0.0"
cliui "^3.2.0" cliui "^3.2.0"