adjust import
This commit is contained in:
@@ -124,6 +124,7 @@ safeRegisterElement('import-list', class extends HTMLElement {
|
|||||||
|
|
||||||
this.app = createApp(ImportList, {
|
this.app = createApp(ImportList, {
|
||||||
template: JSON.parse(this.dataset.template),
|
template: JSON.parse(this.dataset.template),
|
||||||
|
multitenant: this.dataset.multitenant === 'true',
|
||||||
authenticityToken: document.querySelector('meta[name="csrf-token"]')?.content
|
authenticityToken: document.querySelector('meta[name="csrf-token"]')?.content
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -146,14 +146,14 @@
|
|||||||
<input
|
<input
|
||||||
name="submissions_json"
|
name="submissions_json"
|
||||||
hidden
|
hidden
|
||||||
:value="JSON.stringify(submissionsData.slice(0, 1100))"
|
:value="multitenant ? JSON.stringify(submissionsData.slice(0, 1100)) : JSON.stringify(submissionsData)"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="px-3 border-y py-2 border-base-300 text-center w-full text-sm font-semibold"
|
class="px-3 border-y py-2 border-base-300 text-center w-full text-sm font-semibold"
|
||||||
>
|
>
|
||||||
Total entries: {{ submissionsData.length }}
|
Total entries: {{ submissionsData.length }}
|
||||||
<template v-if="submissionsData.length >= 1000">
|
<template v-if="multitenant && submissionsData.length >= 1000">
|
||||||
/ 1000
|
/ 1000
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
@@ -239,6 +239,11 @@ export default {
|
|||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
|
multitenant: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
authenticityToken: {
|
authenticityToken: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
@@ -269,7 +274,11 @@ export default {
|
|||||||
|
|
||||||
if (['name', 'email', 'phone', 'external_id'].includes(mapping.field_name.toLowerCase())) {
|
if (['name', 'email', 'phone', 'external_id'].includes(mapping.field_name.toLowerCase())) {
|
||||||
submittersIndex[mapping.submitter_uuid][mapping.field_name.toLowerCase()] = row[mapping.column_index]
|
submittersIndex[mapping.submitter_uuid][mapping.field_name.toLowerCase()] = row[mapping.column_index]
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
const fieldType = this.fieldTypesIndex[mapping.submitter_uuid][mapping.field_name]
|
||||||
|
|
||||||
|
if (fieldType && fieldType !== 'phone') {
|
||||||
submittersIndex[mapping.submitter_uuid].fields.push({
|
submittersIndex[mapping.submitter_uuid].fields.push({
|
||||||
name: mapping.field_name, default_value: row[mapping.column_index], readonly: true
|
name: mapping.field_name, default_value: row[mapping.column_index], readonly: true
|
||||||
})
|
})
|
||||||
@@ -306,6 +315,17 @@ export default {
|
|||||||
submitters () {
|
submitters () {
|
||||||
return this.template.submitters
|
return this.template.submitters
|
||||||
},
|
},
|
||||||
|
fieldTypesIndex () {
|
||||||
|
return this.template.fields.reduce((acc, field) => {
|
||||||
|
acc[field.submitter_uuid] ||= {}
|
||||||
|
|
||||||
|
if (field.name) {
|
||||||
|
acc[field.submitter_uuid][field.name] = field.type
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc
|
||||||
|
}, {})
|
||||||
|
},
|
||||||
columns () {
|
columns () {
|
||||||
return this.table[0]
|
return this.table[0]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ module Submitters
|
|||||||
UnknownSubmitterName = Class.new(BaseError)
|
UnknownSubmitterName = Class.new(BaseError)
|
||||||
UnableToDownload = Class.new(BaseError)
|
UnableToDownload = Class.new(BaseError)
|
||||||
|
|
||||||
|
TRUE_VALUES = ['1', 'true', true, 'TRUE', 'True', 'yes', 'YES', 'Yes'].freeze
|
||||||
|
FALSE_VALUES = ['0', 'false', false, 'FALSE', 'False', 'no', 'NO', 'No'].freeze
|
||||||
|
|
||||||
module_function
|
module_function
|
||||||
|
|
||||||
def call(template, values, submitter_name: nil, for_submitter: nil, throw_errors: false)
|
def call(template, values, submitter_name: nil, for_submitter: nil, throw_errors: false)
|
||||||
@@ -50,21 +53,32 @@ module Submitters
|
|||||||
end
|
end
|
||||||
|
|
||||||
def normalize_value(field, value)
|
def normalize_value(field, value)
|
||||||
if field['type'] == 'text' && value.present?
|
if field['type'] == 'checkbox'
|
||||||
|
return true if TRUE_VALUES.include?(value)
|
||||||
|
return false if FALSE_VALUES.include?(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil if value.blank?
|
||||||
|
|
||||||
|
if field['type'] == 'text'
|
||||||
value.to_s
|
value.to_s
|
||||||
elsif field['type'] == 'number' && value.present?
|
elsif field['type'] == 'number'
|
||||||
(value.to_f % 1).zero? ? value.to_i : value.to_f
|
(value.to_f % 1).zero? ? value.to_i : value.to_f
|
||||||
elsif field['type'] == 'date' && value.present? && value != '{{date}}'
|
elsif field['type'] == 'date' && value != '{{date}}'
|
||||||
if value.is_a?(Integer)
|
normalize_date(field, value)
|
||||||
Time.zone.at(value.to_s.first(10).to_i).to_date.to_s
|
|
||||||
elsif value.gsub(/\w/, '0') == field.dig('preferences', 'format').to_s.gsub(/\w/, '0')
|
|
||||||
TimeUtils.parse_date_string(value, field.dig('preferences', 'format')).to_s
|
|
||||||
else
|
|
||||||
Date.parse(value).to_s
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
value
|
value
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def normalize_date(field, value)
|
||||||
|
if value.is_a?(Integer)
|
||||||
|
Time.zone.at(value.to_s.first(10).to_i).to_date.to_s
|
||||||
|
elsif value.gsub(/\w/, '0') == field.dig('preferences', 'format').to_s.gsub(/\w/, '0')
|
||||||
|
TimeUtils.parse_date_string(value, field.dig('preferences', 'format')).to_s
|
||||||
|
else
|
||||||
|
Date.parse(value).to_s
|
||||||
|
end
|
||||||
rescue Date::Error => e
|
rescue Date::Error => e
|
||||||
Rollbar.warning(e) if defined?(Rollbar)
|
Rollbar.warning(e) if defined?(Rollbar)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user