add textarea emails autocomplete

pull/133/head
Alex Turchyn 2 years ago
parent cf85bea0df
commit 7ba3a604bd

@ -19,21 +19,32 @@ export default class extends HTMLElement {
fields.forEach((field) => { fields.forEach((field) => {
const input = submitterItemEl.querySelector(`submitters-autocomplete[data-field="${field}"] input`) const input = submitterItemEl.querySelector(`submitters-autocomplete[data-field="${field}"] input`)
const textarea = submitterItemEl.querySelector(`submitters-autocomplete[data-field="${field}"] textarea`)
if (input && item[field]) { if (input && item[field]) {
input.value = item[field] input.value = item[field]
} }
if (textarea && item[field]) {
textarea.value = textarea.value.replace(/[^;,\s]+$/, item[field] + ' ')
}
}) })
} }
fetch = (text, resolve) => { fetch = (text, resolve) => {
if (text) { const q = text.split(/[;,\s]+/).pop().trim()
const queryParams = new URLSearchParams({ q: text, field: this.dataset.field })
if (q) {
const queryParams = new URLSearchParams({ q, field: this.dataset.field })
fetch('/api/submitters_autocomplete?' + queryParams).then(async (resp) => { fetch('/api/submitters_autocomplete?' + queryParams).then(async (resp) => {
const items = await resp.json() const items = await resp.json()
if (q.length < 3) {
resolve(items.filter((e) => e[this.dataset.field].startsWith(q)))
} else {
resolve(items) resolve(items)
}
}).catch(() => { }).catch(() => {
resolve([]) resolve([])
}) })
@ -51,6 +62,6 @@ export default class extends HTMLElement {
} }
get input () { get input () {
return this.querySelector('input') return this.querySelector('input') || this.querySelector('textarea')
} }
} }

@ -1,10 +1,12 @@
<%= form_for '', url: template_submissions_path(template), html: { class: 'space-y-4', autocomplete: 'off' }, data: { turbo_frame: :_top } do |f| %> <%= form_for '', url: template_submissions_path(template), html: { class: 'space-y-4', autocomplete: 'off' }, data: { turbo_frame: :_top } do |f| %>
<% if template.submitters.size == 1 %> <% if template.submitters.size == 1 %>
<div class="form-control"> <submitter-item class="form-control">
<submitters-autocomplete data-field="email">
<autoresize-textarea> <autoresize-textarea>
<%= f.text_area :emails, required: true, class: 'base-textarea w-full', placeholder: 'Type emails here...' %> <%= f.text_area :emails, required: true, class: 'base-textarea w-full', placeholder: 'Type emails here...' %>
</autoresize-textarea> </autoresize-textarea>
</div> </submitters-autocomplete>
</submitter-item>
<% else %> <% else %>
<dynamic-list class="space-y-4"> <dynamic-list class="space-y-4">
<div class="space-y-4"> <div class="space-y-4">

@ -30,7 +30,7 @@ module Submissions
def create_from_emails(template:, user:, emails:, source:, mark_as_sent: false) def create_from_emails(template:, user:, emails:, source:, mark_as_sent: false)
emails = emails.to_s.scan(User::EMAIL_REGEXP) unless emails.is_a?(Array) emails = emails.to_s.scan(User::EMAIL_REGEXP) unless emails.is_a?(Array)
emails.map do |email| emails.uniq.map do |email|
submission = template.submissions.new(created_by_user: user, source:, template_submitters: template.submitters) submission = template.submissions.new(created_by_user: user, source:, template_submitters: template.submitters)
submission.submitters.new(email: normalize_email(email), submission.submitters.new(email: normalize_email(email),
uuid: template.submitters.first['uuid'], uuid: template.submitters.first['uuid'],

Loading…
Cancel
Save