diff --git a/src/browser/overlay.js b/src/browser/overlay.js
index 10cfa52..df1dd8c 100644
--- a/src/browser/overlay.js
+++ b/src/browser/overlay.js
@@ -23,7 +23,7 @@ Mousetrap.bind('ctrl+shift+i', () => {
function Overlay({ views, streams, customStreams }) {
const activeViews = views
.map(({ state, context }) => State.from(state, context))
- .filter((s) => s.matches('displaying'))
+ .filter((s) => s.matches('displaying') && !s.matches('displaying.error'))
return (
{activeViews.map((viewState) => {
diff --git a/src/node/StreamWindow.js b/src/node/StreamWindow.js
index 03880f2..87c69ca 100644
--- a/src/node/StreamWindow.js
+++ b/src/node/StreamWindow.js
@@ -180,8 +180,7 @@ export default class StreamWindow extends EventEmitter {
reloadView(viewIdx) {
const view = this.views.find(
(v) =>
- v.state.matches('displaying') &&
- v.state.context.pos.spaces.includes(viewIdx),
+ v.state.context.pos && v.state.context.pos.spaces.includes(viewIdx),
)
if (view) {
view.send('RELOAD')
diff --git a/src/node/viewStateMachine.js b/src/node/viewStateMachine.js
index f953161..9e69cbb 100644
--- a/src/node/viewStateMachine.js
+++ b/src/node/viewStateMachine.js
@@ -1,12 +1,5 @@
import { Machine, assign } from 'xstate'
-const savePosIfSameURL = {
- actions: assign({
- pos: (context, event) => event.pos,
- }),
- cond: 'urlUnchanged',
-}
-
const viewStateMachine = Machine(
{
id: 'view',
@@ -31,7 +24,7 @@ const viewStateMachine = Machine(
invoke: {
src: 'clearView',
onError: {
- target: '#view.error',
+ target: '#view.displaying.error',
},
},
},
@@ -43,7 +36,12 @@ const viewStateMachine = Machine(
url: (context, event) => event.url,
}),
on: {
- DISPLAY: savePosIfSameURL,
+ DISPLAY: {
+ actions: assign({
+ pos: (context, event) => event.pos,
+ }),
+ cond: 'urlUnchanged',
+ },
RELOAD: '.loading',
},
states: {
@@ -57,7 +55,7 @@ const viewStateMachine = Machine(
target: 'video',
},
onError: {
- target: '#view.error',
+ target: '#view.displaying.error',
},
},
},
@@ -71,7 +69,7 @@ const viewStateMachine = Machine(
}),
},
onError: {
- target: '#view.error',
+ target: '#view.displaying.error',
},
},
},
@@ -103,12 +101,9 @@ const viewStateMachine = Machine(
},
},
},
- },
- },
- error: {
- entry: 'logError',
- on: {
- DISPLAY: savePosIfSameURL,
+ error: {
+ entry: 'logError',
+ },
},
},
},
diff --git a/src/web/control.js b/src/web/control.js
index c0e79b9..5c4e78d 100644
--- a/src/web/control.js
+++ b/src/web/control.js
@@ -164,7 +164,7 @@ function App({ wsEndpoint }) {
url={url}
onChangeSpace={handleSetView}
spaceValue={streamId}
- isError={state.matches('error')}
+ isError={state.matches('displaying.error')}
isDisplaying={state.matches('displaying')}
isListening={isListening}
onSetListening={handleSetListening}