summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryce Johnson <bryce@gitlab.com>2016-11-10 18:36:19 +0100
committerBryce Johnson <bryce@gitlab.com>2016-11-10 18:36:19 +0100
commitccc5c1558a9facd593c92b49f1ad9d04d4782300 (patch)
tree8c6e7e26a5516e6af6b1055b1c59be1d0528c24c
parent8bd03e1dbcfc14b56831c8b00625ed870b148aab (diff)
downloadgitlab-ce-milestone-select-refactor.tar.gz
-rw-r--r--.eslintrc1
-rw-r--r--app/assets/javascripts/milestone_select.js.es657
2 files changed, 27 insertions, 31 deletions
diff --git a/.eslintrc b/.eslintrc
index fd26215b843..d5cabbe4fd9 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -7,6 +7,7 @@
"filenames/match-regex": [2, "^[a-z0-9_]+(.js)?$"]
},
"globals": {
+ "Vue": false,
"$": false,
"_": false,
"beforeEach": false,
diff --git a/app/assets/javascripts/milestone_select.js.es6 b/app/assets/javascripts/milestone_select.js.es6
index 94114d22a38..c43a397182b 100644
--- a/app/assets/javascripts/milestone_select.js.es6
+++ b/app/assets/javascripts/milestone_select.js.es6
@@ -1,5 +1,5 @@
-/* eslint-disable */
-(function (global) {
+/* eslint-disable no-undef */
+(() => {
class MilestoneSelect {
constructor(currentProject) {
this.$el = null;
@@ -50,11 +50,11 @@
this.config.context = {
isIssue,
isMergeRequest,
- isBoardSidebar: $dropdown.hasClass('js-issue-board-sidebar'),
+ isBoardSidebar: $dropdown.hasClass('js-issue-board-sidebar'),
isSubmittableNonIndex: $dropdown.hasClass('js-filter-submit'),
isSubmittableIndex: $dropdown.hasClass('js-filter-submit') && (isIssue || isMergeRequest),
isBoard: this.$el.html.hasClass('issue-boards-page') && !$dropdown.hasClass('js-issue-board-sidebar'),
- shouldPreventSubmission: $dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown'),
+ shouldPreventSubmission: $dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown'),
};
const dataset = this.config.dataset = this.$el.dropdown.get(0).dataset;
@@ -64,7 +64,7 @@
showNo: dataset.showNo,
showAny: dataset.showAny,
showUpcoming: dataset.showUpcoming,
- extraOptions: []
+ extraOptions: [],
};
}
@@ -83,7 +83,7 @@
data-container='body' title='<%- remaining %>'><%- title %>
</a>
`),
- milestoneLinkNone: `<span class='no-value'>None</span>`,
+ milestoneLinkNone: '<span class="no-value">None</span>',
collapsedSidebarLabel: _.template(`
<span class='has-tooltip' data-container='body' title='<%- remaining %>'
data-placement='left'> <%- title %>
@@ -108,11 +108,11 @@
defaultLabel: dataset.defaultLabel,
vue: this.config.context.isBoardSidebar,
showMenuAbove: this.config.display.showMenuAbove,
- text: item => this.escapeText(item),
+ text: milestone => _.escape(milestone.title),
hidden: () => this.renderDisplayState(),
id: milestone => this.displaySelected(milestone),
data: (term, callback) => this.fetchMilestones(term, callback),
- toggleLabel: (selected, $el, e) => this.toggleLabel(selected, $el, e),
+ toggleLabel: (selected, $el) => this.toggleLabel(selected, $el),
clicked: (selected, $el, e) => this.handleDropdownClick(selected, $el, e),
});
@@ -127,7 +127,7 @@
fetchMilestones(term, callback) {
const milestonesUrl = this.config.dataset.milestones;
return $.ajax({ url: milestonesUrl })
- .done((milestones, callback) => this.handleFetchSuccess(milestones, callback));
+ .done(milestones => this.handleFetchSuccess(milestones, callback));
}
handleFetchSuccess(milestones, callback) {
@@ -176,15 +176,9 @@
return this.putGeneric(selected, $el, e);
}
- toggleLabel(selected, $el, e) {
+ toggleLabel(selected, $el) {
const defaultLabel = this.config.dataset.defaultLabel;
-
- return (selected, el, e) => (selected && selected.id && el.hasClass('is-active')) ?
- selected.title : defaultLabel;
- }
-
- escapeText(milestone) {
- return _.escape(milestone.title);
+ return (selected && selected.id && $el.hasClass('is-active')) ? selected.title : defaultLabel;
}
renderDisplayState() {
@@ -206,7 +200,7 @@
if (milestoneData != null) {
$valueDisplay.html(this.templates.milestoneLink(milestoneData));
$collapsedValue.find('span').html(this.templates.collapsedSidebarLabel(milestoneData));
- } else {
+ } else {
$valueDisplay.html(this.templates.milestoneLinkNone);
$collapsedValue.find('span').text('No');
}
@@ -228,7 +222,7 @@
}
}
- putGeneric(selected, $el, e) {
+ putGeneric(selected) {
const selectedMilestone = this.$el.dropdownSelectBox.find('input[type="hidden"]').val() || selected.id;
const milestonePayload = {};
const abilityName = this.config.dataset.abilityName;
@@ -237,17 +231,18 @@
milestonePayload[abilityName].milestone_id = selectedMilestone;
const issueUpdateURL = this.config.dataset.issueUpdate;
+
// TODO: Use issuable pub/sub resource method to propagate changes
this.renderLoadingState();
$.ajax({ type: 'PUT', url: issueUpdateURL, data: milestonePayload })
- .done(issuableData => {
- this.handlePutSuccess(issuableData);
- });
+ .done(issuableData => this.handlePutSuccess(issuableData));
}
- handlePutSuccess(issuableData) {
+ handlePutSuccess(data) {
this.renderLoadedState();
+ const issuableData = data;
+
issuableData.milestone = this.parsePutValue(issuableData);
this.renderUpdatedState(issuableData);
}
@@ -263,17 +258,17 @@
return milestoneData;
}
- putIssueBoardPage(selected, $el, e) {
+ putIssueBoardPage(selected, e) {
gl.issueBoards.BoardsStore.state.filters[this.config.dataset.fieldName] = selected.name;
gl.issueBoards.BoardsStore.updateFiltersUrl();
e.preventDefault();
}
- putIssueBoardSidebar(selected, $el, e) {
+ putIssueBoardSidebar(selected) {
if (selected.id !== -1) {
Vue.set(gl.issueBoards.BoardsStore.detail.issue, 'milestone', new ListMilestone({
id: selected.id,
- title: selected.name
+ title: selected.name,
}));
} else {
Vue.delete(gl.issueBoards.BoardsStore.detail.issue, 'milestone');
@@ -282,17 +277,17 @@
this.renderLoadingState();
gl.issueBoards.BoardsStore.detail.issue.update(this.config.dataset.issueUpdate)
- .then(() => this.renderLoadedState());
+ .then(() => this.renderLoadedState());
}
- putSubmittableIndex(selected, $el, e) {
+ putSubmittableIndex() {
return Issuable.filterResults(this.$el.form);
}
- putSubmittableNonIndex(selected, $el, e) {
+ putSubmittableNonIndex() {
return this.$el.form.submit();
}
}
- global.MilestoneSelect = MilestoneSelect;
-})(window);
+ window.MilestoneSelect = MilestoneSelect;
+})();