Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-29 20:20:29 +01:00
Merge pull request #63 from paviliondev/max-length
FEATURE: added max length setting for text type fields
Dieser Commit ist enthalten in:
Commit
2177f8e837
11 geänderte Dateien mit 84 neuen und 5 gelöschten Zeilen
|
@ -21,7 +21,7 @@ export default Component.extend(UndoChanges, {
|
||||||
showPrefill: or('isText', 'isCategory', 'isTag', 'isGroup', 'isDropdown'),
|
showPrefill: or('isText', 'isCategory', 'isTag', 'isGroup', 'isDropdown'),
|
||||||
showContent: or('isCategory', 'isTag', 'isGroup', 'isDropdown'),
|
showContent: or('isCategory', 'isTag', 'isGroup', 'isDropdown'),
|
||||||
showLimit: or('isCategory', 'isTag'),
|
showLimit: or('isCategory', 'isTag'),
|
||||||
showMinLength: or('isText', 'isTextarea', 'isComposer'),
|
showLengthControls: or('isText', 'isTextarea', 'isComposer'),
|
||||||
categoryPropertyTypes: selectKitContent(['id', 'slug']),
|
categoryPropertyTypes: selectKitContent(['id', 'slug']),
|
||||||
showAdvanced: alias('field.type'),
|
showAdvanced: alias('field.type'),
|
||||||
messageUrl: 'https://thepavilion.io/t/2809',
|
messageUrl: 'https://thepavilion.io/t/2809',
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
url=messageUrl
|
url=messageUrl
|
||||||
component='field'}}
|
component='field'}}
|
||||||
|
|
||||||
{{#if showMinLength}}
|
{{#if showLengthControls}}
|
||||||
<div class="setting">
|
<div class="setting">
|
||||||
<div class="setting-label">
|
<div class="setting-label">
|
||||||
<label>{{i18n 'admin.wizard.field.min_length'}}</label>
|
<label>{{i18n 'admin.wizard.field.min_length'}}</label>
|
||||||
|
@ -84,6 +84,20 @@
|
||||||
class="small"}}
|
class="small"}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="setting full">
|
||||||
|
<div class="setting-label">
|
||||||
|
<label>{{i18n 'admin.wizard.field.max_length'}}</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-value">
|
||||||
|
{{input
|
||||||
|
type="number"
|
||||||
|
name="max_length"
|
||||||
|
value=field.max_length
|
||||||
|
class="small"}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if isUpload}}
|
{{#if isUpload}}
|
||||||
|
|
|
@ -164,6 +164,8 @@ en:
|
||||||
required_label: "Field is Required"
|
required_label: "Field is Required"
|
||||||
min_length: "Min Length"
|
min_length: "Min Length"
|
||||||
min_length_placeholder: "Minimum length in characters"
|
min_length_placeholder: "Minimum length in characters"
|
||||||
|
max_length: "Max Length"
|
||||||
|
max_length_placeholder: "Maximum length in characters"
|
||||||
file_types: "File Types"
|
file_types: "File Types"
|
||||||
limit: "Limit"
|
limit: "Limit"
|
||||||
property: "Property"
|
property: "Property"
|
||||||
|
|
|
@ -20,6 +20,7 @@ en:
|
||||||
|
|
||||||
field:
|
field:
|
||||||
too_short: "%{label} must be at least %{min} characters"
|
too_short: "%{label} must be at least %{min} characters"
|
||||||
|
too_long: "%{label} must not be more than %{max} characters"
|
||||||
required: "%{label} is required."
|
required: "%{label} is required."
|
||||||
not_url: "%{label} must be a valid url"
|
not_url: "%{label} must be a valid url"
|
||||||
invalid_file: "%{label} must be a %{types}"
|
invalid_file: "%{label} must be a %{types}"
|
||||||
|
|
|
@ -97,6 +97,7 @@ class CustomWizard::AdminWizardController < CustomWizard::AdminController
|
||||||
:key,
|
:key,
|
||||||
:type,
|
:type,
|
||||||
:min_length,
|
:min_length,
|
||||||
|
:max_length,
|
||||||
:file_types,
|
:file_types,
|
||||||
:format,
|
:format,
|
||||||
:limit,
|
:limit,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"result": {
|
"result": {
|
||||||
"covered_percent": 89.41
|
"covered_percent": 89.45
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ module CustomWizardFieldExtension
|
||||||
:image,
|
:image,
|
||||||
:key,
|
:key,
|
||||||
:min_length,
|
:min_length,
|
||||||
|
:max_length,
|
||||||
:file_types,
|
:file_types,
|
||||||
:format,
|
:format,
|
||||||
:limit,
|
:limit,
|
||||||
|
@ -18,6 +19,7 @@ module CustomWizardFieldExtension
|
||||||
@image = attrs[:image]
|
@image = attrs[:image]
|
||||||
@key = attrs[:key]
|
@key = attrs[:key]
|
||||||
@min_length = attrs[:min_length]
|
@min_length = attrs[:min_length]
|
||||||
|
@max_length = attrs[:max_length]
|
||||||
@file_types = attrs[:file_types]
|
@file_types = attrs[:file_types]
|
||||||
@format = attrs[:format]
|
@format = attrs[:format]
|
||||||
@limit = attrs[:limit]
|
@limit = attrs[:limit]
|
||||||
|
|
|
@ -158,6 +158,7 @@ class CustomWizard::Builder
|
||||||
params[:image] = field_template['image'] if field_template['image']
|
params[:image] = field_template['image'] if field_template['image']
|
||||||
params[:key] = field_template['key'] if field_template['key']
|
params[:key] = field_template['key'] if field_template['key']
|
||||||
params[:min_length] = field_template['min_length'] if field_template['min_length']
|
params[:min_length] = field_template['min_length'] if field_template['min_length']
|
||||||
|
params[:max_length] = field_template['max_length'] if field_template['max_length']
|
||||||
params[:value] = prefill_field(field_template, step_template)
|
params[:value] = prefill_field(field_template, step_template)
|
||||||
|
|
||||||
if !build_opts[:reset] && (submission = @wizard.current_submission)
|
if !build_opts[:reset] && (submission = @wizard.current_submission)
|
||||||
|
|
|
@ -3,14 +3,17 @@ class CustomWizard::Field
|
||||||
@types ||= {
|
@types ||= {
|
||||||
text: {
|
text: {
|
||||||
min_length: nil,
|
min_length: nil,
|
||||||
|
max_length: nil,
|
||||||
prefill: nil
|
prefill: nil
|
||||||
},
|
},
|
||||||
textarea: {
|
textarea: {
|
||||||
min_length: nil,
|
min_length: nil,
|
||||||
|
max_length: nil,
|
||||||
prefill: nil
|
prefill: nil
|
||||||
},
|
},
|
||||||
composer: {
|
composer: {
|
||||||
min_length: nil
|
min_length: nil,
|
||||||
|
max_length: nil,
|
||||||
},
|
},
|
||||||
text_only: {},
|
text_only: {},
|
||||||
date: {
|
date: {
|
||||||
|
|
|
@ -21,6 +21,7 @@ class ::CustomWizard::UpdateValidator
|
||||||
type = field.type
|
type = field.type
|
||||||
required = field.required
|
required = field.required
|
||||||
min_length = field.min_length if is_text_type(field)
|
min_length = field.min_length if is_text_type(field)
|
||||||
|
max_length = field.max_length if is_text_type(field)
|
||||||
file_types = field.file_types
|
file_types = field.file_types
|
||||||
format = field.format
|
format = field.format
|
||||||
|
|
||||||
|
@ -32,6 +33,10 @@ class ::CustomWizard::UpdateValidator
|
||||||
@updater.errors.add(field_id, I18n.t('wizard.field.too_short', label: label, min: min_length.to_i))
|
@updater.errors.add(field_id, I18n.t('wizard.field.too_short', label: label, min: min_length.to_i))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if max_length && value.is_a?(String) && value.strip.length > max_length.to_i
|
||||||
|
@updater.errors.add(field_id, I18n.t('wizard.field.too_long', label: label, max: max_length.to_i))
|
||||||
|
end
|
||||||
|
|
||||||
if is_url_type(field) && !check_if_url(value)
|
if is_url_type(field) && !check_if_url(value)
|
||||||
@updater.errors.add(field_id, I18n.t('wizard.field.not_url', label: label))
|
@updater.errors.add(field_id, I18n.t('wizard.field.not_url', label: label))
|
||||||
end
|
end
|
||||||
|
|
|
@ -50,6 +50,56 @@ describe CustomWizard::UpdateValidator do
|
||||||
).to eq(I18n.t('wizard.field.too_short', label: 'Composer', min: min_length))
|
).to eq(I18n.t('wizard.field.too_short', label: 'Composer', min: min_length))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'prevents submission if the length is over the max length' do
|
||||||
|
max_length = 100
|
||||||
|
|
||||||
|
@template[:steps][0][:fields][0][:max_length] = max_length
|
||||||
|
@template[:steps][0][:fields][1][:max_length] = max_length
|
||||||
|
@template[:steps][0][:fields][2][:max_length] = max_length
|
||||||
|
|
||||||
|
CustomWizard::Template.save(@template)
|
||||||
|
long_string = "Our Competitive Capability solution offers platforms a suite of wholesale offerings. In the future, will you be able to effectively revolutionize synergies in your business? In the emerging market space, industry is ethically investing its mission critical executive searches. Key players will take ownership of their capabilities by iteratively right-sizing world-class visibilities. "
|
||||||
|
updater = perform_validation('step_1', step_1_field_1: long_string)
|
||||||
|
expect(
|
||||||
|
updater.errors.messages[:step_1_field_1].first
|
||||||
|
).to eq(I18n.t('wizard.field.too_long', label: 'Text', max: max_length))
|
||||||
|
|
||||||
|
updater = perform_validation('step_1', step_1_field_2: long_string)
|
||||||
|
expect(
|
||||||
|
updater.errors.messages[:step_1_field_2].first
|
||||||
|
).to eq(I18n.t('wizard.field.too_long', label: 'Textarea', max: max_length))
|
||||||
|
|
||||||
|
updater = perform_validation('step_1', step_1_field_3: long_string)
|
||||||
|
expect(
|
||||||
|
updater.errors.messages[:step_1_field_3].first
|
||||||
|
).to eq(I18n.t('wizard.field.too_long', label: 'Composer', max: max_length))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "allows submission if the length is under or equal to the max length" do
|
||||||
|
max_length = 100
|
||||||
|
|
||||||
|
@template[:steps][0][:fields][0][:max_length] = max_length
|
||||||
|
@template[:steps][0][:fields][1][:max_length] = max_length
|
||||||
|
@template[:steps][0][:fields][2][:max_length] = max_length
|
||||||
|
|
||||||
|
CustomWizard::Template.save(@template)
|
||||||
|
hundred_chars_string = "This is a line, exactly hundred characters long and not more even a single character more than that."
|
||||||
|
updater = perform_validation('step_1', step_1_field_1: hundred_chars_string)
|
||||||
|
expect(
|
||||||
|
updater.errors.messages[:step_1_field_1].first
|
||||||
|
).to eq(nil)
|
||||||
|
|
||||||
|
updater = perform_validation('step_1', step_1_field_2: hundred_chars_string)
|
||||||
|
expect(
|
||||||
|
updater.errors.messages[:step_1_field_2].first
|
||||||
|
).to eq(nil)
|
||||||
|
|
||||||
|
updater = perform_validation('step_1', step_1_field_3: hundred_chars_string)
|
||||||
|
expect(
|
||||||
|
updater.errors.messages[:step_1_field_3].first
|
||||||
|
).to eq(nil)
|
||||||
|
end
|
||||||
|
|
||||||
it 'standardises boolean entries' do
|
it 'standardises boolean entries' do
|
||||||
updater = perform_validation('step_2', step_2_field_5: 'false')
|
updater = perform_validation('step_2', step_2_field_5: 'false')
|
||||||
expect(updater.submission['step_2_field_5']).to eq(false)
|
expect(updater.submission['step_2_field_5']).to eq(false)
|
||||||
|
|
Laden …
In neuem Issue referenzieren