Skip to content

Commit 78a2ac6

Browse files
committed
Live fixes and version check for live sessions
1 parent 5ef35bd commit 78a2ac6

File tree

9 files changed

+86
-5
lines changed

9 files changed

+86
-5
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import styled from 'styled-components';
2+
3+
export const Container = styled.div`
4+
background-color: ${props => props.theme.background};
5+
padding: 1rem;
6+
7+
margin: 0;
8+
color: rgba(255, 255, 255, 0.8);
9+
`;
10+
11+
export const Heading = styled.h2`
12+
margin-top: 7px !important;
13+
`;
14+
15+
export const Explanation = styled.p`
16+
line-height: 1.3;
17+
margin-bottom: 1rem;
18+
`;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from 'react';
2+
import { inject } from 'mobx-react';
3+
4+
import VERSION, { getTimestamp } from 'common/version';
5+
6+
import { Container, Heading, Explanation } from './elements';
7+
8+
function LiveVersionMismatch({ store }) {
9+
const newer =
10+
getTimestamp(store.live.roomInfo.version) > getTimestamp(VERSION);
11+
12+
return (
13+
<Container>
14+
<Heading>Version Mismatch</Heading>
15+
<Explanation>
16+
The owner of this session has a{newer ? ' newer' : 'n older'} version of
17+
CodeSandbox.
18+
{newer
19+
? ' Refresh to get the latest version.'
20+
: ' Ask the owner to refresh to get the latest version.'}
21+
<p>
22+
If refreshing doesn{"'"}t work, you can try to clear your storage and
23+
unregister the service worker.
24+
</p>
25+
</Explanation>
26+
</Container>
27+
);
28+
}
29+
30+
export default inject('store')(LiveVersionMismatch);

packages/app/src/app/pages/common/Modals/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import SelectSandboxModal from './SelectSandboxModal';
1414
import SearchDependenciesModal from './SearchDependenciesModal';
1515
import DeleteProfileSandboxModal from './DeleteProfileSandboxModal';
1616
import LiveSessionEndedModal from './LiveSessionEndedModal';
17+
import LiveSessionVersionMismatch from './LiveSessionVersionMismatch';
1718
import UploadModal from './UploadModal';
1819
import StorageManagementModal from './StorageManagementModal';
1920

@@ -66,6 +67,10 @@ const modals = {
6667
Component: LiveSessionEndedModal,
6768
width: 600,
6869
},
70+
liveVersionMismatch: {
71+
Component: LiveSessionVersionMismatch,
72+
width: 600,
73+
},
6974
uploading: {
7075
Component: UploadModal,
7176
width: 600,

packages/app/src/app/store/modules/editor/sequences.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,16 +182,22 @@ export const addNpmDependency = [
182182
false: [actions.getLatestVersion],
183183
},
184184
actions.addNpmDependencyToPackage,
185-
getCodeOperation,
186-
sendTransform,
185+
equals(state`live.isLive`),
186+
{
187+
true: [getCodeOperation, sendTransform],
188+
false: [],
189+
},
187190
saveCode,
188191
];
189192

190193
export const removeNpmDependency = [
191194
ensureOwnedSandbox,
192195
actions.removeNpmDependencyFromPackage,
193-
getCodeOperation,
194-
sendTransform,
196+
equals(state`live.isLive`),
197+
{
198+
true: [getCodeOperation, sendTransform],
199+
false: [],
200+
},
195201
saveCode,
196202
];
197203

packages/app/src/app/store/modules/live/actions.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { TextOperation } from 'ot';
22
import { camelizeKeys } from 'humps';
33

4+
import VERSION from 'common/version';
5+
46
export function createRoom({ api, props }) {
57
const id = props.sandboxId;
68

@@ -47,6 +49,7 @@ export function initializeLiveState({ props, state }) {
4749
messages: [],
4850
users: {},
4951
},
52+
version: VERSION,
5053
});
5154
state.set('live.isLive', true);
5255
state.set('live.error', null);

packages/app/src/app/store/modules/live/model.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export default {
3636
sandboxId: types.string,
3737
editorIds: types.array(types.string),
3838
usersMetadata: types.map(UserMetadata),
39+
version: types.string,
3940
users: types.array(
4041
types.model({
4142
id: types.string,

packages/app/src/app/store/modules/live/sequences.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
toggle,
99
} from 'cerebral/operators';
1010
import { state, props } from 'cerebral/tags';
11+
import VERSION from 'common/version';
1112

1213
import * as factories from '../../factories';
1314
import { setSandbox, openModal, resetLive } from '../../sequences';
@@ -133,6 +134,11 @@ export const handleMessage = [
133134
props`changedModuleShortids`
134135
),
135136
set(state`live.roomInfo`, props`roomInfo`),
137+
when(state`live.roomInfo.version`, v => v !== VERSION),
138+
{
139+
true: [set(props`modal`, 'liveVersionMismatch'), openModal],
140+
false: [],
141+
},
136142
// Whether this is first load
137143
equals(state`live.isLoading`),
138144
{
@@ -360,7 +366,13 @@ export const createLive = [
360366
initializeLive,
361367
];
362368

363-
export const sendTransform = [actions.sendTransform];
369+
export const sendTransform = [
370+
equals(state`live.isCurrentEditor`),
371+
{
372+
true: [actions.sendTransform],
373+
false: [],
374+
},
375+
];
364376

365377
export const applyTransformation = [
366378
when(

packages/app/src/sandbox/status-screen/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export default function setScreen(screen: Screen) {
4444
if (currentScreen) {
4545
changeText(currentScreen.text);
4646
}
47+
48+
firstLoaded = null;
4749
}, 600);
4850
}
4951
} else if (currentScreen) {

packages/common/version.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ try {
2121
}
2222
`);
2323

24+
export const getTimestamp = version => {
25+
return +version.split('-')[1];
26+
};
27+
2428
export default preval(
2529
`module.exports = "${versionType}-${versionNumber}-${shortCommitSha}";`
2630
);

0 commit comments

Comments
 (0)