Skip to content
Snippets Groups Projects
Commit 9e4164d4 authored by Filipa Lacerda's avatar Filipa Lacerda
Browse files

Keep the replies when the user leaves the page

parent b5b562a3
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -2,6 +2,11 @@
import AccessorUtilities from './lib/utils/accessor';
 
window.Autosave = (function() {
/**
*
* @param {*} field the textarea
* @param {Array} key Array with: ['Note', type, id, ]
*/
function Autosave(field, key) {
this.field = field;
this.isLocalStorageAvailable = AccessorUtilities.isLocalStorageAccessSafe();
Loading
Loading
<script>
/* global Flash */
/* global Flash, Autosave */
 
import { mapActions, mapGetters } from 'vuex';
import userAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue';
Loading
Loading
@@ -7,6 +7,7 @@
import issueNoteSignedOutWidget from './issue_note_signed_out_widget.vue';
import eventHub from '../event_hub';
import * as constants from '../constants';
import '../../autosave';
 
export default {
data() {
Loading
Loading
@@ -153,15 +154,17 @@
}
}
},
initAutoSave() {
return new Autosave($(this.$refs.textarea), ['Note', 'Issue', this.getIssueData.id]);
},
},
mounted() {
eventHub.$on('issueStateChanged', (isClosed) => {
// jQuery is needed here because it is a custom event being dispatched with jQuery.
$(document).on('issuable:change', (e, isClosed) => {
this.issueState = isClosed ? constants.CLOSED : constants.REOPENED;
});
},
 
destroyed() {
eventHub.$off('issueStateChanged');
this.initAutoSave();
},
};
</script>
Loading
Loading
<script>
/* global Flash */
/* global Flash, Autosave */
import { mapActions, mapGetters } from 'vuex';
import { SYSTEM_NOTE } from '../constants';
import issueNote from './issue_note.vue';
Loading
Loading
@@ -11,6 +11,7 @@
import issueNoteForm from './issue_note_form.vue';
import placeholderNote from './issue_placeholder_note.vue';
import placeholderSystemNote from './issue_placeholder_system_note.vue';
import '../../autosave';
 
export default {
props: {
Loading
Loading
@@ -107,6 +108,19 @@
})
.catch(() => Flash('Something went wrong while adding your reply. Please try again.'));
},
initAutoSave() {
return new Autosave($(this.$refs.noteForm.$refs.textarea), ['Note', 'Issue', this.note.id]);
},
},
mounted() {
if (this.isReplying) {
this.initAutoSave();
}
},
updated() {
if (this.isReplying) {
this.initAutoSave();
}
},
};
</script>
Loading
Loading
Loading
Loading
@@ -39,7 +39,6 @@
return {
'is-editing': this.isEditing,
'disabled-content': this.isDeleting,
//'js-my-note': this.author.id === this.currentUserId,
target: this.targetNoteHash === this.noteAnchorId,
};
},
Loading
Loading
<script>
/* global Autosave */
import issueNoteEditedText from './issue_note_edited_text.vue';
import issueNoteAwardsList from './issue_note_awards_list.vue';
import issueNoteForm from './issue_note_form.vue';
import TaskList from '../../task_list';
import '../../autosave';
 
export default {
props: {
Loading
Loading
@@ -49,13 +51,22 @@
formCancelHandler(shouldConfirm, isDirty) {
this.$emit('cancelFormEdition', shouldConfirm, isDirty);
},
initAutoSave() {
return new Autosave($(this.$refs.noteForm.$refs.textarea), ['Note', 'Issue', this.note.id]);
},
},
mounted() {
this.renderGFM();
this.initTaskList();
if (this.isEditing) {
this.initAutoSave();
}
},
updated() {
this.initTaskList();
if (this.isEditing) {
this.initAutoSave();
}
},
};
</script>
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@
import { mapGetters, mapActions } from 'vuex';
import store from '../stores/';
import * as constants from '../constants';
import eventHub from '../event_hub';
import issueNote from './issue_note.vue';
import issueDiscussion from './issue_discussion.vue';
import issueSystemNote from './issue_system_note.vue';
Loading
Loading
@@ -96,17 +95,6 @@
 
this.poll();
},
bindEventHubListeners() {
this.$el.parentElement.addEventListener('toggleAward', (event) => {
const { awardName, noteId } = event.detail;
this.actionToggleAward({ awardName, noteId });
});
// JQuery is needed here because it is a custom event being dispatched with jQuery.
$(document).on('issuable:change', (e, isClosed) => {
eventHub.$emit('issueStateChanged', isClosed);
});
},
checkLocationHash() {
const hash = gl.utils.getLocationHash();
const $el = $(`#${hash}`);
Loading
Loading
@@ -125,7 +113,11 @@
mounted() {
this.fetchNotes();
this.initPolling();
this.bindEventHubListeners();
this.$el.parentElement.addEventListener('toggleAward', (event) => {
const { awardName, noteId } = event.detail;
this.actionToggleAward({ awardName, noteId });
});
},
};
</script>
Loading
Loading
Loading
Loading
@@ -179,7 +179,7 @@ module NotesActions
def set_polling_interval_header
return unless noteable.is_a?(Issue)
 
Gitlab::PollingInterval.set_header(response, interval: 3_000)
Gitlab::PollingInterval.set_header(response, interval: 6_000)
end
 
def noteable
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment