Skip to content
This repository has been archived by the owner on Jan 23, 2021. It is now read-only.

Commit

Permalink
Enabled to select and applied watcher. (#302)
Browse files Browse the repository at this point in the history
  • Loading branch information
akiko-pusu committed Jul 5, 2020
1 parent 7808d41 commit 2f25230
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 14 deletions.
11 changes: 11 additions & 0 deletions app/controllers/concerns/issue_templates_common.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ def core_fields_map_by_tracker_id(tracker_id: nil, project_id: nil)
return {} unless builtin_fields_enabled?

fields = %w[status_id priority_id]
fields << 'watcher_user_ids' if project_id.present?

# exclude "description"
tracker = Tracker.find_by(id: tracker_id)
Expand All @@ -106,6 +107,16 @@ def core_fields_map_by_tracker_id(tracker_id: nil, project_id: nil)
value[:field_format] = 'list'
end

if field == 'watcher_user_ids' && project_id.present?
issue = Issue.new(tracker_id: tracker_id, project_id: project_id)
watchers = helpers.users_for_new_issue_watchers(issue)
value[:field_format] = 'list'

value[:possible_values] = watchers.map { |user| "#{user.name} :#{user.id}" }
value[:name] = I18n.t('field_watcher')
value[:multiple] = true
end

value[:field_format] = 'date' if %(start_date due_date).include?(field)

value[:field_format] = 'ratio' if field == 'done_ratio'
Expand Down
7 changes: 4 additions & 3 deletions app/views/issue_templates/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -220,11 +220,12 @@
<!-- tooltip content -->
<script>
const baseUrl = "<%= url_for(controller: 'issue_templates', action: 'load_selectable_fields') %>"
const template_id = "<%= issue_template&.id || '' %>"
const template_type = 'issue_template'
const tracker_pulldown_id = template_type + '_tracker_id'
const templateId = "<%= issue_template&.id || '' %>"
const templateType = 'issue_template'
const trackerPulldownId = templateType + '_tracker_id'
const base_builtin_fields = <%= issue_template.builtin_fields.html_safe %>
const base_custom_fields = <%= custom_fields.html_safe %>
const projectId = "<%= project.id %>"
</script>

<% if builtin_fields_enable %>
Expand Down
14 changes: 14 additions & 0 deletions assets/javascripts/issue_templates.js
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,11 @@ ISSUE_TEMPLATE.prototype = {
return ns.updateFieldValues(elements, value)
}
}

if (/issue_watcher_user_ids/.test(key)) {
return ns.checkSelectedWatchers(value)
}

if (element == null) {
return
}
Expand Down Expand Up @@ -439,6 +444,15 @@ ISSUE_TEMPLATE.prototype = {
let changeEvent = new Event('change')
document.getElementById('issue_template').dispatchEvent(changeEvent)
},
checkSelectedWatchers: function (values) {
let targets = document.querySelectorAll('input[name="issue[watcher_user_ids][]"]')
for (let i = 0; i < targets.length; i++) {
let target = targets[i]
if (values.includes(target.value)) {
target.checked = true
}
}
},
filterTemplate: function (event) {
let cols = document.getElementsByClassName('template_data')
let searchWord = event.target.value
Expand Down
32 changes: 22 additions & 10 deletions assets/javascripts/template_fields.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const vm = new Vue({
deleteField: function (target) {
this.items = this.items.filter(function (item) {
return item !== target
});
})
},
loadField: function () {
this.api_builtin_fields = base_builtin_fields
Expand Down Expand Up @@ -75,20 +75,23 @@ const vm = new Vue({
}
},
mounted: function () {
const tracker_pulldown = document.getElementById(tracker_pulldown_id)
if (tracker_pulldown) {
if (tracker_pulldown.value === '') {
const trackerPulldown = document.getElementById(trackerPulldownId)
if (trackerPulldown) {
if (trackerPulldown.value === '') {
this.$el.style.display = 'none'
}
tracker_pulldown.addEventListener('change', event => {
trackerPulldown.addEventListener('change', event => {
if (event.target.value === '') {
this.$el.style.display = 'none'
return
}
this.$el.style.display = 'block'
const tracker_id = event.target.value
let url = baseUrl + '?tracker_id=' + tracker_id + '&template_id=' + template_id
fetch(url)
const trackerId = event.target.value
let url = baseUrl + '?tracker_id=' + trackerId + '&template_id=' + templateId
if (projectId) {
url += '&project_id=' + projectId
}
window.fetch(url)
.then((response) => {
return response.text()
})
Expand All @@ -112,8 +115,17 @@ if (copyJson) {
const text = data.innerText
let jsonObj = JSON.parse(text)
let convertObj = {}
jsonObj.forEach(item => { convertObj[item.title] = item.value })
document.getElementById(template_type + '_builtin_fields').value = JSON.stringify(convertObj)
jsonObj.forEach(item => {
let value = item.value
if (item.title === 'issue_watcher_user_ids') {
value = item.value.map(user => {
let idx = user.lastIndexOf(':')
return user.substring(idx + 1)
})
}
convertObj[item.title] = value
})
document.getElementById(templateType + '_builtin_fields').value = JSON.stringify(convertObj)
}
})
}
5 changes: 4 additions & 1 deletion spec/features/issue_template_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,15 @@
scenario 'form for builtin_fields are shown' do
select 'Bug', from: 'issue_template[tracker_id]'

wait_for_ajax
expect(page).to have_selector('div#json_generator')
expect(page).to have_selector('select#field_selector')

select 'Priority', from: 'field_selector'

expect(page).to have_select('Value', options: IssuePriority.active.pluck(:name))

select 'Watcher', from: 'field_selector'
expect(page).to have_select('Value', options: ['Dave Lopper :3', 'John Smith :2'])
end
end
end
Expand Down

0 comments on commit 2f25230

Please sign in to comment.