Skip to content

Commit 0056104

Browse files
committed
Put back package.json saving in Live
Fixes codesandbox#820
1 parent 8cfdc43 commit 0056104

File tree

4 files changed

+60
-3
lines changed

4 files changed

+60
-3
lines changed

packages/app/src/app/components/CodeEditor/Configuration/index.js

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// @flow
22
import React from 'react';
3-
import EntryIcons from 'app/pages/Sandbox/Editor/Workspace/Files/DirectoryEntry/Entry/EntryIcons';
3+
import { TextOperation } from 'ot';
44
import type { Module } from 'common/types';
55
import getUI from 'common/templates/configuration/ui';
66
import getType from 'app/utils/get-type';
7+
import EntryIcons from 'app/pages/Sandbox/Editor/Workspace/Files/DirectoryEntry/Entry/EntryIcons';
78
import Tooltip from 'common/components/Tooltip';
89

910
import CodeIcon from 'react-icons/lib/md/code';
@@ -21,6 +22,7 @@ export default class Configuration extends React.PureComponent<Props>
2122
disposeInitializer: ?() => void;
2223

2324
currentModule: Module;
25+
receivingCode: ?boolean = false;
2426

2527
constructor(props: Props) {
2628
super(props);
@@ -45,11 +47,40 @@ export default class Configuration extends React.PureComponent<Props>
4547
this.forceUpdate();
4648
};
4749

50+
setReceivingCode = (receiving: boolean) => {
51+
this.receivingCode = receiving;
52+
};
53+
54+
sendLiveChanges = (code: string) => {
55+
const { sendTransforms, isLive, onCodeReceived } = this.props;
56+
if (sendTransforms) {
57+
const oldCode = this.currentModule.code || '';
58+
59+
// We don't know exactly what changed, just that the code changed. So
60+
// we send the whole code.
61+
62+
const op = new TextOperation();
63+
64+
op.delete(oldCode.length);
65+
op.insert(code);
66+
67+
sendTransforms(op);
68+
} else if (!isLive && onCodeReceived) {
69+
onCodeReceived();
70+
}
71+
};
72+
4873
changeModule = (newModule: Module) => {
4974
this.currentModule = newModule;
5075
};
5176

5277
updateFile = (code: string) => {
78+
const { isLive, sendTransforms } = this.props;
79+
80+
if (isLive && sendTransforms && !this.receivingCode) {
81+
this.sendLiveChanges(code);
82+
}
83+
5384
this.props.onChange(code);
5485
};
5586

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,33 @@ export async function getLatestVersion({ props, api }) {
1616
}
1717

1818
export function addNpmDependencyToPackage({ state, props }) {
19-
const { parsed } = state.get('editor.parsedConfigurations.package');
19+
const { parsed, code: oldCode } = state.get(
20+
'editor.parsedConfigurations.package'
21+
);
22+
2023
const type = props.isDev ? 'devDependencies' : 'dependencies';
2124

2225
parsed[type] = parsed[type] || {};
2326
parsed[type][props.name] = props.version || 'latest';
2427
parsed[type] = sortObjectByKeys(parsed[type]);
2528

2629
return {
30+
oldCode,
2731
code: JSON.stringify(parsed, null, 2),
2832
moduleShortid: state.get(`editor.currentPackageJSON.shortid`),
2933
};
3034
}
3135

3236
export function removeNpmDependencyFromPackage({ state, props }) {
33-
const { parsed } = state.get('editor.parsedConfigurations.package');
37+
const { parsed, code: oldCode } = state.get(
38+
'editor.parsedConfigurations.package'
39+
);
3440

3541
delete parsed.dependencies[props.name];
3642
parsed.dependencies = sortObjectByKeys(parsed.dependencies);
3743

3844
return {
45+
oldCode,
3946
code: JSON.stringify(parsed, null, 2),
4047
moduleShortid: state.get(`editor.currentPackageJSON.shortid`),
4148
};

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import {
88
getSelectionsForCurrentModule,
99
sendChangeCurrentModule,
1010
setReceivingStatus,
11+
getCodeOperation,
12+
sendTransform,
1113
} from '../live/actions';
1214
import {
1315
ensureOwnedSandbox,
@@ -180,12 +182,16 @@ export const addNpmDependency = [
180182
false: [actions.getLatestVersion],
181183
},
182184
actions.addNpmDependencyToPackage,
185+
getCodeOperation,
186+
sendTransform,
183187
saveCode,
184188
];
185189

186190
export const removeNpmDependency = [
187191
ensureOwnedSandbox,
188192
actions.removeNpmDependencyFromPackage,
193+
getCodeOperation,
194+
sendTransform,
189195
saveCode,
190196
];
191197

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,3 +539,16 @@ export function getCurrentModuleIdOfUser({ props, state }) {
539539

540540
return {};
541541
}
542+
543+
export function getCodeOperation({ props }) {
544+
const { oldCode, code } = props;
545+
546+
const op = new TextOperation();
547+
548+
op.delete(oldCode.length);
549+
op.insert(code);
550+
551+
return {
552+
operation: op.toJSON(),
553+
};
554+
}

0 commit comments

Comments
 (0)