diff options
author | Fatih Acet <acetfatih@gmail.com> | 2018-03-19 15:32:16 +0300 |
---|---|---|
committer | Fatih Acet <acetfatih@gmail.com> | 2018-03-19 15:32:16 +0300 |
commit | 25e42c3f975587a73bd384a664b012d628e32b69 (patch) | |
tree | a193b2b72ac6e6ced767c076cd551d6a5467549e | |
parent | e1739e47c5664c93c66dd58ded59f9d79cd8a426 (diff) | |
download | gitlab-ce-25e42c3f975587a73bd384a664b012d628e32b69.tar.gz |
MR Diffs Refactor Part 05: New getters for notes store._mr-refactor-part-5
-rw-r--r-- | app/assets/javascripts/notes/components/notes_app.vue | 15 | ||||
-rw-r--r-- | app/assets/javascripts/notes/mixins/resolvable.js | 6 | ||||
-rw-r--r-- | app/assets/javascripts/notes/stores/actions.js | 8 | ||||
-rw-r--r-- | app/assets/javascripts/notes/stores/getters.js | 27 |
4 files changed, 45 insertions, 11 deletions
diff --git a/app/assets/javascripts/notes/components/notes_app.vue b/app/assets/javascripts/notes/components/notes_app.vue index a90c6d6381d..570166b0f7b 100644 --- a/app/assets/javascripts/notes/components/notes_app.vue +++ b/app/assets/javascripts/notes/components/notes_app.vue @@ -47,15 +47,12 @@ export default { }; }, computed: { - ...mapGetters(['notes', 'getNotesDataByProp', 'discussionCount']), - noteableType() { - // FIXME -- @fatihacet Get this from JSON data. - const { ISSUE_NOTEABLE_TYPE, MERGE_REQUEST_NOTEABLE_TYPE } = constants; - - return this.noteableData.merge_params - ? MERGE_REQUEST_NOTEABLE_TYPE - : ISSUE_NOTEABLE_TYPE; - }, + ...mapGetters([ + 'notes', + 'getNotesDataByProp', + 'discussionCount', + 'noteableType', + ]), allNotes() { if (this.isLoading) { const totalNotes = parseInt(this.notesData.totalNotes, 10) || 0; diff --git a/app/assets/javascripts/notes/mixins/resolvable.js b/app/assets/javascripts/notes/mixins/resolvable.js index f79049b85f6..a7684cc5659 100644 --- a/app/assets/javascripts/notes/mixins/resolvable.js +++ b/app/assets/javascripts/notes/mixins/resolvable.js @@ -35,9 +35,13 @@ export default { methods: { resolveHandler(resolvedState = false) { this.isResolving = true; - const endpoint = this.note.resolve_path || `${this.note.path}/resolve`; const isResolved = this.discussionResolved || resolvedState; const discussion = this.resolveAsThread; + let endpoint = `${this.note.path}/resolve`; + + if (discussion) { + endpoint = this.note.resolve_path; + } this.toggleResolveNote({ endpoint, isResolved, discussion }) .then(() => { diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js index 244a6980b5a..c2ce453d34a 100644 --- a/app/assets/javascripts/notes/stores/actions.js +++ b/app/assets/javascripts/notes/stores/actions.js @@ -14,16 +14,22 @@ let eTagPoll; export const setNotesData = ({ commit }, data) => commit(types.SET_NOTES_DATA, data); + export const setNoteableData = ({ commit }, data) => commit(types.SET_NOTEABLE_DATA, data); + export const setUserData = ({ commit }, data) => commit(types.SET_USER_DATA, data); + export const setLastFetchedAt = ({ commit }, data) => commit(types.SET_LAST_FETCHED_AT, data); + export const setInitialNotes = ({ commit }, data) => commit(types.SET_INITIAL_NOTES, data); + export const setTargetNoteHash = ({ commit }, data) => commit(types.SET_TARGET_NOTE_HASH, data); + export const toggleDiscussion = ({ commit }, data) => commit(types.TOGGLE_DISCUSSION, data); @@ -134,7 +140,7 @@ export const toggleIssueLocalState = ({ commit }, newState) => { }; export const saveNote = ({ commit, dispatch }, noteData) => { - const { note } = noteData.data.note; + const note = noteData.data['note[note]'] || noteData.data.note.note; let placeholderText = note; const hasQuickActions = utils.hasQuickActions(placeholderText); const replyId = noteData.data.in_reply_to_discussion_id; diff --git a/app/assets/javascripts/notes/stores/getters.js b/app/assets/javascripts/notes/stores/getters.js index f89591a54d6..718634595e3 100644 --- a/app/assets/javascripts/notes/stores/getters.js +++ b/app/assets/javascripts/notes/stores/getters.js @@ -1,16 +1,22 @@ import _ from 'underscore'; +import * as constants from '../constants'; export const notes = state => state.notes; + export const targetNoteHash = state => state.targetNoteHash; export const getNotesData = state => state.notesData; + export const getNotesDataByProp = state => prop => state.notesData[prop]; export const getNoteableData = state => state.noteableData; + export const getNoteableDataByProp = state => prop => state.noteableData[prop]; + export const openState = state => state.noteableData.state; export const getUserData = state => state.userData || {}; + export const getUserDataByProp = state => prop => state.userData && state.userData[prop]; @@ -20,7 +26,28 @@ export const notesById = state => return acc; }, {}); +export const discussionsByLineCode = state => + state.notes.reduce((acc, note) => { + if (note.diff_discussion) { + // For context line notes, there might be multiple notes with the same line code + const items = acc[note.line_code] || []; + items.push(note); + + Object.assign(acc, { [note.line_code]: items }); + } + return acc; + }, {}); + +export const noteableType = state => { + const { ISSUE_NOTEABLE_TYPE, MERGE_REQUEST_NOTEABLE_TYPE } = constants; + + return state.noteableData.merge_params + ? MERGE_REQUEST_NOTEABLE_TYPE + : ISSUE_NOTEABLE_TYPE; +}; + const reverseNotes = array => array.slice(0).reverse(); + const isLastNote = (note, state) => !note.system && state.userData && |