Skip to content

Commit cfe7537

Browse files
committed
Merge pull request #264 from parallaxinc/overwriteOverlay
adds confirm dialog on overwrite
2 parents dd5e5d4 + 6cb1c65 commit cfe7537

13 files changed

+148
-7
lines changed

src/constants/action-types.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const actionTypes = {
2525
UPDATE_DOWNLOAD_PROGRESS: 'UPDATE_DOWNLOAD_PROGRESS',
2626
QUEUE_NEW_FILE: 'QUEUE_NEW_FILE',
2727
QUEUE_CHANGE_FILE: 'QUEUE_CHANGE_FILE',
28+
QUEUE_OVERWRITE_FILE: 'QUEUE_OVERWRITE_FILE',
2829
RESET_ACTION_QUEUE: 'RESET_ACTION_QUEUE'
2930
};
3031

src/constants/overlay-states.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const overlayStates = {
66
SAVE_OVERLAY: 'SAVE_OVERLAY',
77
DOWNLOAD_OVERLAY: 'DOWNLOAD_OVERLAY',
88
PROJECTS_OVERLAY: 'PROJECTS_OVERLAY',
9+
OVERWRITE_OVERLAY: 'OVERWRITE_OVERLAY',
910
DELETE_FILE_OVERLAY: 'DELETE_FILE_OVERLAY',
1011
DELETE_PROJECT_OVERLAY: 'DELETE_PROJECT_OVERLAY'
1112
};

src/constants/queued-action-types.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
const queuedActionTypes = {
44
NEW_FILE: 'NEW_FILE',
5-
CHANGE_FILE: 'CHANGE_FILE'
5+
CHANGE_FILE: 'CHANGE_FILE',
6+
OVERWRITE_FILE: 'OVERWRITE_FILE'
67
};
78

89
module.exports = queuedActionTypes;

src/creators/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const creators = {
77
showDeleteProjectOverlay: require('./show-delete-project-overlay'),
88
showDownloadOverlay: require('./show-download-overlay'),
99
showProjectsOverlay: require('./show-projects-overlay'),
10+
showOverwriteOverlay: require('./show-overwrite-overlay'),
1011
showSaveOverlay: require('./show-save-overlay'),
1112
showHelpOverlay: require('./show-help-overlay'),
1213
hideOverlay: require('./hide-overlay'),
@@ -34,6 +35,7 @@ const creators = {
3435
// action queue creators
3536
queueNewFile: require('./queue-new-file'),
3637
queueChangeFile: require('./queue-change-file'),
38+
queueOverwriteFile: require('./queue-overwrite-file'),
3739
resetActionQueue: require('./reset-action-queue')
3840
};
3941

src/creators/queue-overwrite-file.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
3+
const {
4+
QUEUE_OVERWRITE_FILE
5+
} = require('../constants/action-types');
6+
7+
function queueOverwriteFile(filename){
8+
return {
9+
type: QUEUE_OVERWRITE_FILE,
10+
payload: {
11+
filename
12+
}
13+
};
14+
}
15+
16+
module.exports = queueOverwriteFile;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'use strict';
2+
3+
const {
4+
SHOW_OVERLAY
5+
} = require('../constants/action-types');
6+
7+
const {
8+
OVERWRITE_OVERLAY
9+
} = require('../constants/overlay-states');
10+
11+
function showOverwriteOverlay(){
12+
return {
13+
type: SHOW_OVERLAY,
14+
payload: {
15+
state: OVERWRITE_OVERLAY
16+
}
17+
};
18+
}
19+
20+
module.exports = showOverwriteOverlay;

src/lib/documents.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ class Documents {
4747
this._editor.swapDoc(doc);
4848
return doc;
4949
}
50+
51+
replace(filename){
52+
this._documents[filename] = this._editor.getDoc();
53+
}
5054
}
5155

5256
module.exports = Documents;

src/plugins/handlers.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ const highlighter = require('../lib/highlighter');
1515

1616
const {
1717
NEW_FILE,
18-
CHANGE_FILE
18+
CHANGE_FILE,
19+
OVERWRITE_FILE
1920
} = require('../constants/queued-action-types');
2021

2122
// TODO: move somewhere else?
@@ -71,6 +72,8 @@ function handlers(app, opts, done){
7172
return newFile();
7273
case CHANGE_FILE:
7374
return changeFile(nextFile);
75+
case OVERWRITE_FILE:
76+
return saveFileAs(nextFile, true);
7477
}
7578
}
7679

@@ -117,23 +120,32 @@ function handlers(app, opts, done){
117120
.then(function(){
118121
documents.swap(path.join(cwd, filename));
119122
});
123+
store.dispatch(creators.hideOverlay());
120124
}
121125
}
122126

123-
function saveFileAs(filename){
127+
function saveFileAs(filename, overwrite){
124128
if(!filename){
125129
return;
126130
}
127131

128-
const { cwd, content } = workspace.getState();
132+
const { cwd, content, directory } = workspace.getState();
133+
if(!overwrite && _.filter(directory, {name: filename}).length){
134+
return showOverwriteOverlay(filename);
135+
}
129136

130137
workspace.updateFilename(filename)
131138
.then(() => workspace.saveFile(filename, content))
132139
.then(() => userConfig.set('last-file', filename))
133140
.then(function(){
134-
documents.swap(path.join(cwd, filename));
141+
documents.replace(path.join(cwd, filename));
135142
handleActionQueue();
136143
});
144+
store.dispatch(creators.hideOverlay());
145+
}
146+
147+
function overwriteFile(){
148+
handleActionQueue();
137149
}
138150

139151
function dontSaveFile(){
@@ -233,6 +245,11 @@ function handlers(app, opts, done){
233245
store.dispatch(creators.showSaveOverlay());
234246
}
235247

248+
function showOverwriteOverlay(name){
249+
store.dispatch(creators.queueOverwriteFile(name));
250+
store.dispatch(creators.showOverwriteOverlay());
251+
}
252+
236253
function showDownloadOverlay(){
237254
store.dispatch(creators.showDownloadOverlay());
238255
// TODO: is there ever a time when show download overlay doesn't reload devices?
@@ -571,6 +588,7 @@ function handlers(app, opts, done){
571588
deleteFile,
572589
changeFile,
573590
dontSaveFile,
591+
overwriteFile,
574592
// project methods
575593
changeProject,
576594
deleteProject,

src/plugins/overlays.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const HelpOverlay = require('../views/help-overlay');
66
const SaveOverlay = require('../views/save-overlay');
77
const ProjectOverlay = require('../views/project-overlay');
88
const DownloadOverlay = require('../views/download-overlay');
9+
const OverwriteOverlay = require('../views/overwrite-overlay');
910
const DeleteFileOverlay = require('../views/delete-file-overlay');
1011
const DeleteProjectOverlay = require('../views/delete-project-overlay');
1112

@@ -17,6 +18,7 @@ const {
1718
SAVE_OVERLAY,
1819
DOWNLOAD_OVERLAY,
1920
PROJECTS_OVERLAY,
21+
OVERWRITE_OVERLAY,
2022
DELETE_FILE_OVERLAY,
2123
DELETE_PROJECT_OVERLAY
2224
} = require('../constants/overlay-states');
@@ -43,6 +45,9 @@ function overlays(app, opts, done){
4345
case SAVE_OVERLAY:
4446
renderOverlay(<SaveOverlay workspace={workspace} handlers={handlers} />);
4547
break;
48+
case OVERWRITE_OVERLAY:
49+
renderOverlay(<OverwriteOverlay store={store} handlers={handlers} />);
50+
break;
4651
case DOWNLOAD_OVERLAY:
4752
renderOverlay(<DownloadOverlay store={store} handlers={handlers} />);
4853
break;

src/reducers/next-action.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
const {
44
QUEUE_NEW_FILE,
55
QUEUE_CHANGE_FILE,
6+
QUEUE_OVERWRITE_FILE,
67
RESET_ACTION_QUEUE
78
} = require('../constants/action-types');
89

910
const {
1011
NEW_FILE,
11-
CHANGE_FILE
12+
CHANGE_FILE,
13+
OVERWRITE_FILE
1214
} = require('../constants/queued-action-types');
1315

1416
const initial = '';
@@ -19,6 +21,8 @@ function nextAction(state = initial, { type }){
1921
return NEW_FILE;
2022
case QUEUE_CHANGE_FILE:
2123
return CHANGE_FILE;
24+
case QUEUE_OVERWRITE_FILE:
25+
return OVERWRITE_FILE;
2226
case RESET_ACTION_QUEUE:
2327
return initial;
2428
default:

0 commit comments

Comments
 (0)