www/secretary/workbench/views/forms/withdrawal-request.js.rb (79 lines of code) (raw):
class WithdrawalRequest < Vue
def initialize
# TODO: update @filed = true on submit and related reset
@filed = false
@filename = ''
@disabled = false
@search = ''
@members = []
@availid = ''
end
def mounted
jQuery('input[name=selected]').val(decodeURIComponent(@@selected))
jQuery('input[name=message]').val(window.parent.location.pathname)
if not @members.empty?
@disabled = false
else
@disabled = true
fetch('../../members.json', {method: 'get', credentials: 'include', headers: {accept: 'application/json'}})
.then do |response|
response.json().then do |json|
@members = json
@disabled = true
end
end
end
name = @@headers.name || ''
# reorder name if there is a single comma present
parts = name.split(',')
if parts.length == 2 and parts[1] !~ /^\s*(jr|ph\.d)\.?$/i
name = "#{parts[1].strip()} #{parts[0]}"
end
@search = name
end
def render
_h4 'Member Withdrawal Request'
_form.form do
_h5 'Search'
_table.form do
_tr do
_input value: @search
end
end
end
if @search.length >= 3 and not @members.empty?
search = @search.downcase().split(' ')
_ul.icla_search do
@members.each do |member|
availid = member.id
name = member.name
names = name.downcase().split(' ') # N.B. split parameter is required by JavaScript
if search.any? { |part| names.include? part or availid == part}
_li do
_input type: :radio, name: 'search', id: availid, onClick: lambda {
@availid = availid
@filename = availid
@disabled = false
}
_label name + " (#{availid})", for: availid
end
end
end
end
end
_form method: 'post', action: '../../tasklist/withdrawal-request', target: 'content' do
_input type: :hidden, name: 'message'
_input type: :hidden, name: 'selected'
_input type: :hidden, name: 'signature', value: @@signature
_input type: :hidden, name: 'availid', value: @availid
_table.form do
_tr do
_th 'ASF id (used for file name)'
_td do
_input type: :text, name: 'filename', value: @filename, required: true, disabled: @filed || @availid.empty?,
pattern: '[a-zA-Z][\-\w]+(\.[a-z]+)?' # bare '-' not allowed in v-mode character classes
end
end
end
_input.btn.btn_primary value: 'File', type: :submit, disabled: @disabled
end
end
end