From 37785180054a4ee7c4559bcc3ebc666a7aca5d76 Mon Sep 17 00:00:00 2001 From: Juan Carlos Farah Date: Fri, 14 Jun 2019 16:39:15 +0200 Subject: [PATCH] fix: do not fetch from api if space is saved closes #95 --- src/Home.js | 2 +- src/actions/space.js | 5 +++-- src/components/phase/Phase.js | 2 ++ src/components/space/SpaceGrid.js | 8 +++++--- src/components/space/SpaceScreen.js | 12 ++++++++++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/Home.js b/src/Home.js index 9864e7b3..21f0df84 100644 --- a/src/Home.js +++ b/src/Home.js @@ -116,7 +116,7 @@ class Home extends Component { })} >
- +
); diff --git a/src/actions/space.js b/src/actions/space.js index 9f4e3ae0..ccbe2775 100644 --- a/src/actions/space.js +++ b/src/actions/space.js @@ -299,8 +299,9 @@ const loadSpace = ({ fileLocation }) => dispatch => { }); }; -const getSpace = ({ id }) => dispatch => { - if (window.navigator.onLine) { +const getSpace = ({ id, saved = false }) => dispatch => { + // only get the space from the api if not saved + if (!saved) { dispatch(getRemoteSpace({ id })); } else { dispatch(getLocalSpace({ id })); diff --git a/src/components/phase/Phase.js b/src/components/phase/Phase.js index ff4403b7..9d9b5f73 100644 --- a/src/components/phase/Phase.js +++ b/src/components/phase/Phase.js @@ -37,6 +37,7 @@ class Phase extends Component { render() { const { phase, space, dispatchSelectPhase, start } = this.props; const phases = space.get('phases'); + const saved = space.get('saved'); const lang = space.get('language'); const description = space.get('description'); if (!phase || phase.isEmpty()) { @@ -47,6 +48,7 @@ class Phase extends Component { selectPhase={dispatchSelectPhase} start={start} lang={lang} + saved={saved} /> ); } diff --git a/src/components/space/SpaceGrid.js b/src/components/space/SpaceGrid.js index 6601d25f..357eae84 100644 --- a/src/components/space/SpaceGrid.js +++ b/src/components/space/SpaceGrid.js @@ -32,10 +32,12 @@ class SpaceGrid extends Component { history: PropTypes.shape({ length: PropTypes.number.isRequired }) .isRequired, dispatchClearSpace: PropTypes.func.isRequired, + saved: PropTypes.bool, }; static defaultProps = { folder: null, + saved: false, }; componentDidMount() { @@ -78,7 +80,7 @@ class SpaceGrid extends Component { }; render() { - const { spaces, classes, history } = this.props; + const { spaces, classes, history, saved } = this.props; // spaces is a set to mapping through it will return a set const MediaCards = spaces.map(space => { @@ -90,7 +92,7 @@ class SpaceGrid extends Component { size="large" color="primary" id={id} - onClick={() => replace(`/space/${id}`)} + onClick={() => replace(`/space/${id}?saved=${saved}`)} fullWidth > @@ -118,7 +120,7 @@ class SpaceGrid extends Component { ); } return ( - + {MediaCards} ); diff --git a/src/components/space/SpaceScreen.js b/src/components/space/SpaceScreen.js index ddf3eca9..9741b67b 100644 --- a/src/components/space/SpaceScreen.js +++ b/src/components/space/SpaceScreen.js @@ -1,4 +1,5 @@ import React, { Component } from 'react'; +import Qs from 'qs'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; @@ -57,6 +58,9 @@ class SpaceScreen extends Component { id: PropTypes.string.isRequired, }), }).isRequired, + location: PropTypes.shape({ + search: PropTypes.string.isRequired, + }).isRequired, history: PropTypes.shape({ length: PropTypes.number.isRequired }) .isRequired, }; @@ -66,9 +70,13 @@ class SpaceScreen extends Component { match: { params: { id }, }, + location: { search }, dispatchGetSpace, } = this.props; - dispatchGetSpace({ id }); + + // tell action creator if this space has already been saved + const { saved } = Qs.parse(search, { ignoreQueryPrefix: true }); + dispatchGetSpace({ id, saved: saved === 'true' }); } componentDidUpdate() { @@ -137,7 +145,7 @@ class SpaceScreen extends Component { const phases = space.get('phases') || []; // const description = space.get('description'); return ( -
+