diff options
-rw-r--r-- | app/assets/javascripts/ide/components/repo_file.vue | 32 | ||||
-rw-r--r-- | app/assets/javascripts/ide/stores/getters.js | 2 | ||||
-rw-r--r-- | app/assets/stylesheets/pages/repo.scss | 10 | ||||
-rw-r--r-- | spec/javascripts/ide/stores/getters_spec.js | 33 |
4 files changed, 60 insertions, 17 deletions
diff --git a/app/assets/javascripts/ide/components/repo_file.vue b/app/assets/javascripts/ide/components/repo_file.vue index 965a49d98cf..d572e564b75 100644 --- a/app/assets/javascripts/ide/components/repo_file.vue +++ b/app/assets/javascripts/ide/components/repo_file.vue @@ -1,22 +1,24 @@ <script> import { mapActions, mapGetters } from 'vuex'; -import skeletonLoadingContainer from '~/vue_shared/components/skeleton_loading_container.vue'; -import fileIcon from '~/vue_shared/components/file_icon.vue'; +import SkeletonLoadingContainer from '~/vue_shared/components/skeleton_loading_container.vue'; +import Icon from '~/vue_shared/components/icon.vue'; +import FileIcon from '~/vue_shared/components/file_icon.vue'; import router from '../ide_router'; -import newDropdown from './new_dropdown/index.vue'; -import fileStatusIcon from './repo_file_status_icon.vue'; -import changedFileIcon from './changed_file_icon.vue'; -import mrFileIcon from './mr_file_icon.vue'; +import NewDropdown from './new_dropdown/index.vue'; +import FileStatusIcon from './repo_file_status_icon.vue'; +import ChangedFileIcon from './changed_file_icon.vue'; +import MrFileIcon from './mr_file_icon.vue'; export default { name: 'RepoFile', components: { - skeletonLoadingContainer, - newDropdown, - fileStatusIcon, - fileIcon, - changedFileIcon, - mrFileIcon, + SkeletonLoadingContainer, + NewDropdown, + FileStatusIcon, + FileIcon, + ChangedFileIcon, + MrFileIcon, + Icon, }, props: { file: { @@ -107,8 +109,14 @@ export default { /> <span v-if="isTree && folderChangedCount > 0" + class="ide-tree-changes" > {{ folderChangedCount }} + <icon + name="file-modified" + :size="12" + css-classes="prepend-left-5 multi-file-modified" + /> </span> <changed-file-icon v-else-if="file.changed || file.tempFile" diff --git a/app/assets/javascripts/ide/stores/getters.js b/app/assets/javascripts/ide/stores/getters.js index 775ab17e0c8..7cdd511c045 100644 --- a/app/assets/javascripts/ide/stores/getters.js +++ b/app/assets/javascripts/ide/stores/getters.js @@ -37,4 +37,4 @@ export const hasChanges = state => !!state.changedFiles.length; export const hasMergeRequest = state => !!state.currentMergeRequestId; export const getChangesInFolder = state => path => - state.changedFiles.filter(f => f.path.indexOf(path) === 0 && !f.tempFile).length; + state.changedFiles.filter(f => f.path.replace(new RegExp(`/${f.name}$`), '') === path).length; diff --git a/app/assets/stylesheets/pages/repo.scss b/app/assets/stylesheets/pages/repo.scss index d9dc2bfbefc..12a61c66685 100644 --- a/app/assets/stylesheets/pages/repo.scss +++ b/app/assets/stylesheets/pages/repo.scss @@ -66,10 +66,6 @@ } } - .ide-file-changed-icon { - margin-left: auto; - } - .ide-new-btn { display: none; margin-bottom: -4px; @@ -909,3 +905,9 @@ background: transparent; resize: none; } + +.ide-tree-changes { + display: flex; + align-items: center; + font-size: 12px; +} diff --git a/spec/javascripts/ide/stores/getters_spec.js b/spec/javascripts/ide/stores/getters_spec.js index 33733b97dff..dc5b437473e 100644 --- a/spec/javascripts/ide/stores/getters_spec.js +++ b/spec/javascripts/ide/stores/getters_spec.js @@ -72,4 +72,37 @@ describe('IDE store getters', () => { expect(getters.currentMergeRequest(localState)).toBeNull(); }); }); + + describe('getChangesInFolder', () => { + it('returns length of changed files for a path', () => { + localState.changedFiles.push( + { + path: 'test/index', + name: 'index', + }, + { + path: 'testing/123', + name: '123', + }, + ); + + expect(getters.getChangesInFolder(localState)('test')).toBe(1); + }); + + it('returns length of changed & tempFiles files for a path', () => { + localState.changedFiles.push( + { + path: 'test/index', + name: 'index', + }, + { + path: 'test/newfile', + name: 'newfile', + tempFile: true, + }, + ); + + expect(getters.getChangesInFolder(localState)('test')).toBe(2); + }); + }); }); |