add fields configs param to submissions api
This commit is contained in:
@@ -107,7 +107,8 @@ module Api
|
|||||||
def submissions_params
|
def submissions_params
|
||||||
params.permit(submission: [{
|
params.permit(submission: [{
|
||||||
submitters: [[:uuid, :name, :email, :role, :completed, :phone,
|
submitters: [[:uuid, :name, :email, :role, :completed, :phone,
|
||||||
{ values: {}, readonly_fields: [] }]]
|
{ values: {}, readonly_fields: [],
|
||||||
|
fields: [%i[name default_value readonly validation_pattern invalid_message]] }]]
|
||||||
}])
|
}])
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -116,11 +117,15 @@ module Api
|
|||||||
|
|
||||||
Array.wrap(submissions_params).each do |submission|
|
Array.wrap(submissions_params).each do |submission|
|
||||||
submission[:submitters].each_with_index do |submitter, index|
|
submission[:submitters].each_with_index do |submitter, index|
|
||||||
next if submitter[:values].blank?
|
default_values = submitter[:values] || {}
|
||||||
|
|
||||||
|
submitter[:fields]&.each { |f| default_values[f[:name]] = f[:default_value] if f[:default_value].present? }
|
||||||
|
|
||||||
|
next if default_values.blank?
|
||||||
|
|
||||||
values, new_attachments =
|
values, new_attachments =
|
||||||
Submitters::NormalizeValues.call(template,
|
Submitters::NormalizeValues.call(template,
|
||||||
submitter[:values],
|
default_values,
|
||||||
submitter[:role] || template.submitters[index]['name'])
|
submitter[:role] || template.submitters[index]['name'])
|
||||||
|
|
||||||
attachments.push(*new_attachments)
|
attachments.push(*new_attachments)
|
||||||
|
|||||||
@@ -75,6 +75,9 @@
|
|||||||
v-model="values[currentField.uuid]"
|
v-model="values[currentField.uuid]"
|
||||||
class="base-input !text-2xl w-full"
|
class="base-input !text-2xl w-full"
|
||||||
:required="currentField.required"
|
:required="currentField.required"
|
||||||
|
:pattern="currentField.validation?.pattern"
|
||||||
|
:oninvalid="currentField.validation?.message ? `this.setCustomValidity(${JSON.stringify(currentField.validation.message)})` : ''"
|
||||||
|
:oninput="currentField.validation?.message ? `this.setCustomValidity('')` : ''"
|
||||||
:placeholder="`${t('type_here')}...${currentField.required ? '' : ` (${t('optional')})`}`"
|
:placeholder="`${t('type_here')}...${currentField.required ? '' : ` (${t('optional')})`}`"
|
||||||
type="text"
|
type="text"
|
||||||
:name="`values[${currentField.uuid}]`"
|
:name="`values[${currentField.uuid}]`"
|
||||||
|
|||||||
@@ -29,17 +29,11 @@ module Submissions
|
|||||||
template_fields = submission.template.fields.deep_dup
|
template_fields = submission.template.fields.deep_dup
|
||||||
|
|
||||||
submitters_attrs.each_with_index do |submitter_attrs, index|
|
submitters_attrs.each_with_index do |submitter_attrs, index|
|
||||||
next if submitter_attrs[:readonly_fields].blank?
|
submitter_uuid = find_submitter_uuid(submission.template, submitter_attrs, index)
|
||||||
|
|
||||||
uuid = find_submitter_uuid(submission.template, submitter_attrs, index)
|
process_readonly_fields_param(submitter_attrs[:readonly_fields], template_fields, submitter_uuid)
|
||||||
|
|
||||||
template_fields.each do |f|
|
process_fields_param(submitter_attrs[:fields], template_fields, submitter_uuid)
|
||||||
next if f['submitter_uuid'] != uuid ||
|
|
||||||
(!f['name'].in?(submitter_attrs[:readonly_fields]) &&
|
|
||||||
!f['name'].parameterize.underscore.in?(submitter_attrs[:readonly_fields]))
|
|
||||||
|
|
||||||
f['readonly'] = true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if template_fields != submission.template.fields
|
if template_fields != submission.template.fields
|
||||||
@@ -50,6 +44,39 @@ module Submissions
|
|||||||
submission
|
submission
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def process_readonly_fields_param(readonly_fields, template_fields, submitter_uuid)
|
||||||
|
return if readonly_fields.blank?
|
||||||
|
|
||||||
|
template_fields.each do |f|
|
||||||
|
next if f['submitter_uuid'] != submitter_uuid ||
|
||||||
|
(!f['name'].in?(readonly_fields) &&
|
||||||
|
!f['name'].parameterize.underscore.in?(readonly_fields))
|
||||||
|
|
||||||
|
f['readonly'] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def process_fields_param(fields, template_fields, submitter_uuid)
|
||||||
|
return if fields.blank?
|
||||||
|
|
||||||
|
template_fields.each do |f|
|
||||||
|
next if f['submitter_uuid'] != submitter_uuid
|
||||||
|
|
||||||
|
field_configs = fields.find { |e| e['name'] == f['name'] || e['name'] == f['name'].parameterize.underscore }
|
||||||
|
|
||||||
|
next if field_configs.blank?
|
||||||
|
|
||||||
|
f['readonly'] = field_configs['readonly'] if field_configs['readonly'].present?
|
||||||
|
|
||||||
|
next if field_configs['validation_pattern'].blank?
|
||||||
|
|
||||||
|
f['validation'] = {
|
||||||
|
'pattern' => field_configs['validation_pattern'],
|
||||||
|
'message' => field_configs['invalid_message']
|
||||||
|
}.compact_blank
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def find_submitter_uuid(template, attrs, index)
|
def find_submitter_uuid(template, attrs, index)
|
||||||
attrs[:uuid].presence ||
|
attrs[:uuid].presence ||
|
||||||
template.submitters.find { |e| e['name'] == attrs[:role] }&.dig('uuid') ||
|
template.submitters.find { |e| e['name'] == attrs[:role] }&.dig('uuid') ||
|
||||||
|
|||||||
Reference in New Issue
Block a user