Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-09 20:02:54 +01:00
Add custom field validators
Dieser Commit ist enthalten in:
Ursprung
ac9ed0ef2f
Commit
b6c26b43a7
1 geänderte Dateien mit 21 neuen und 2 gelöschten Zeilen
|
@ -25,6 +25,19 @@ class CustomWizard::Builder
|
||||||
@sorted_handlers.sort_by! { |h| -h[:priority] }
|
@sorted_handlers.sort_by! { |h| -h[:priority] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.sorted_field_validators
|
||||||
|
@sorted_field_validators ||= []
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.field_validators
|
||||||
|
sorted_field_validators.map { |h| { type: h[:type], block: h[:block] } }
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.add_field_validator(priority = 0, type, &block)
|
||||||
|
sorted_field_validators << { priority: priority, type: type, block: block }
|
||||||
|
@sorted_field_validators.sort_by! { |h| -h[:priority] }
|
||||||
|
end
|
||||||
|
|
||||||
USER_FIELDS = ['name', 'username', 'email', 'date_of_birth', 'title', 'locale']
|
USER_FIELDS = ['name', 'username', 'email', 'date_of_birth', 'title', 'locale']
|
||||||
PROFILE_FIELDS = ['location', 'website', 'bio_raw', 'profile_background', 'card_background']
|
PROFILE_FIELDS = ['location', 'website', 'bio_raw', 'profile_background', 'card_background']
|
||||||
|
|
||||||
|
@ -60,7 +73,7 @@ class CustomWizard::Builder
|
||||||
|
|
||||||
if step_template['fields'] && step_template['fields'].length
|
if step_template['fields'] && step_template['fields'].length
|
||||||
step_template['fields'].each do |field|
|
step_template['fields'].each do |field|
|
||||||
validate_field(field, updater) if field['type'] != 'text-only'
|
validate_field(field, updater, step_template) if field['type'] != 'text-only'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -209,7 +222,7 @@ class CustomWizard::Builder
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_field(field, updater)
|
def validate_field(field, updater, step_template)
|
||||||
value = updater.fields[field['id']]
|
value = updater.fields[field['id']]
|
||||||
min_length = field['min_length']
|
min_length = field['min_length']
|
||||||
|
|
||||||
|
@ -222,6 +235,12 @@ class CustomWizard::Builder
|
||||||
if field['type'] === 'checkbox'
|
if field['type'] === 'checkbox'
|
||||||
updater.fields[field['id']] = standardise_boolean(value)
|
updater.fields[field['id']] = standardise_boolean(value)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
CustomWizard::Builder.field_validators.each do |validator|
|
||||||
|
if field['type'] === validator[:type]
|
||||||
|
validator[:block].call(field, updater, step_template)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def standardise_boolean(value)
|
def standardise_boolean(value)
|
||||||
|
|
Laden …
In neuem Issue referenzieren