Initiate editor for any file without content

Important to get file data for any file that has no content set yet: we
need this information in order to build a previe for changed/staged
files if they were not yet opened in the editor
This commit is contained in:
Denys Mishunov 2019-07-03 14:14:44 +02:00
parent 4c954a5c9e
commit ff1a4a4241
5 changed files with 81 additions and 14 deletions

View file

@ -144,7 +144,9 @@ export default {
'triggerFilesChange',
]),
initEditor() {
if (this.shouldHideEditor) return;
if (this.shouldHideEditor && (this.file.content || this.file.raw)) {
return;
}
this.editor.clearEditor();

View file

@ -1,6 +1,7 @@
import * as types from '../mutation_types';
import { sortTree } from '../utils';
import { diffModes } from '../../constants';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
export default {
[types.SET_FILE_ACTIVE](state, { path, active }) {
@ -35,19 +36,18 @@ export default {
}
},
[types.SET_FILE_DATA](state, { data, file }) {
Object.assign(state.entries[file.path], {
id: data.id,
blamePath: data.blame_path,
commitsPath: data.commits_path,
permalink: data.permalink,
rawPath: data.raw_path,
binary: data.binary,
renderError: data.render_error,
raw: (state.entries[file.path] && state.entries[file.path].raw) || null,
const stateEntry = state.entries[file.path];
const stagedFile = state.stagedFiles.find(f => f.path === file.path);
const openFile = state.openFiles.find(f => f.path === file.path);
const changedFile = state.changedFiles.find(f => f.path === file.path);
[stateEntry, stagedFile, openFile, changedFile].forEach(f => {
if (f) {
Object.assign(f, convertObjectPropsToCamelCase(data, { dropKeys: ['raw', 'baseRaw'] }), {
raw: (stateEntry && stateEntry.raw) || null,
baseRaw: null,
html: data.html,
size: data.size,
lastCommitSha: data.last_commit_sha,
});
}
});
},
[types.SET_FILE_RAW_DATA](state, { file, raw }) {

View file

@ -0,0 +1,5 @@
---
title: Removing an image should not output binary data
merge_request: 30314
author:
type: fixed

View file

@ -30,6 +30,7 @@ describe('RepoEditor', () => {
Vue.set(vm.$store.state.entries, f.path, f);
spyOn(vm, 'getFileData').and.returnValue(Promise.resolve());
spyOn(vm, 'getRawFileData').and.returnValue(Promise.resolve());
vm.$mount();
@ -407,6 +408,44 @@ describe('RepoEditor', () => {
});
});
describe('initEditor', () => {
beforeEach(() => {
spyOn(vm.editor, 'createInstance');
spyOnProperty(vm, 'shouldHideEditor').and.returnValue(true);
});
it('is being initialised for files without content even if shouldHideEditor is `true`', done => {
vm.file.content = '';
vm.file.raw = '';
vm.initEditor();
vm.$nextTick()
.then(() => {
expect(vm.getFileData).toHaveBeenCalled();
expect(vm.getRawFileData).toHaveBeenCalled();
})
.then(done)
.catch(done.fail);
});
it('does not initialize editor for files already with content', done => {
expect(vm.getFileData.calls.count()).toEqual(1);
expect(vm.getRawFileData.calls.count()).toEqual(1);
vm.file.content = 'foo';
vm.initEditor();
vm.$nextTick()
.then(() => {
expect(vm.getFileData.calls.count()).toEqual(1);
expect(vm.getRawFileData.calls.count()).toEqual(1);
expect(vm.editor.createInstance).not.toHaveBeenCalled();
})
.then(done)
.catch(done.fail);
});
});
it('calls removePendingTab when old file is pending', done => {
spyOnProperty(vm, 'shouldHideEditor').and.returnValue(true);
spyOn(vm, 'removePendingTab');
@ -416,6 +455,7 @@ describe('RepoEditor', () => {
vm.$nextTick()
.then(() => {
vm.file = file('testing');
vm.file.content = 'foo'; // need to prevent full cycle of initEditor
return vm.$nextTick();
})

View file

@ -83,6 +83,26 @@ describe('IDE store file mutations', () => {
expect(localFile.raw).toBeNull();
expect(localFile.baseRaw).toBeNull();
});
it('sets extra file data to all arrays concerned', () => {
localState.stagedFiles = [localFile];
localState.changedFiles = [localFile];
localState.openFiles = [localFile];
const rawPath = 'foo/bar/blah.md';
mutations.SET_FILE_DATA(localState, {
data: {
raw_path: rawPath,
},
file: localFile,
});
expect(localState.stagedFiles[0].rawPath).toEqual(rawPath);
expect(localState.changedFiles[0].rawPath).toEqual(rawPath);
expect(localState.openFiles[0].rawPath).toEqual(rawPath);
expect(localFile.rawPath).toEqual(rawPath);
});
});
describe('SET_FILE_RAW_DATA', () => {