Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-13 21:42:53 +01:00
ceef3f4bc9
* Re structure builder logic to allow for step conditionality Concerns - Performance. Look at whether the additional build in the steps controller can be reduced - Does not work if applied to the last step. - Certain conditions will not work with the first step(?) - How should this be scoped to known functionality? * Add indexes and conditions to steps and fields * Complete and add spec * Complete backend * Complete step conditionality and field indexing * Fix failing spec * Update coverage * Apply rubocop * Apply prettier * Apply prettier to wizard js * Fix schema issues created in merge * Remove setting label for force_final * Improve client wizard cache naming * Improve steps controller and spec conditionality * Improve final step attribute naming * Fix failing spec * Linting * Add one more final step test * Linting * Fix eslint issues * Apply prettier * Linting, syntax, merge and copy cleanups * Update wizard-admin.scss * Fix template linting * Rubocop fixes
128 Zeilen
2,6 KiB
Ruby
128 Zeilen
2,6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class CustomWizard::Field
|
|
include ActiveModel::SerializerSupport
|
|
|
|
attr_reader :raw,
|
|
:id,
|
|
:type,
|
|
:required,
|
|
:value,
|
|
:label,
|
|
:description,
|
|
:image,
|
|
:key,
|
|
:validations,
|
|
:min_length,
|
|
:max_length,
|
|
:char_counter,
|
|
:file_types,
|
|
:format,
|
|
:limit,
|
|
:property,
|
|
:content
|
|
|
|
attr_accessor :index,
|
|
:step
|
|
|
|
def initialize(attrs)
|
|
@raw = attrs || {}
|
|
@id = attrs[:id]
|
|
@index = attrs[:index]
|
|
@type = attrs[:type]
|
|
@required = !!attrs[:required]
|
|
@value = attrs[:value]
|
|
@description = attrs[:description]
|
|
@image = attrs[:image]
|
|
@key = attrs[:key]
|
|
@validations = attrs[:validations]
|
|
@min_length = attrs[:min_length]
|
|
@max_length = attrs[:max_length]
|
|
@char_counter = attrs[:char_counter]
|
|
@file_types = attrs[:file_types]
|
|
@format = attrs[:format]
|
|
@limit = attrs[:limit]
|
|
@property = attrs[:property]
|
|
@content = attrs[:content]
|
|
end
|
|
|
|
def label
|
|
@label ||= PrettyText.cook(@raw[:label])
|
|
end
|
|
|
|
def self.types
|
|
@types ||= {
|
|
text: {
|
|
min_length: nil,
|
|
max_length: nil,
|
|
prefill: nil,
|
|
char_counter: nil,
|
|
validations: nil
|
|
},
|
|
textarea: {
|
|
min_length: nil,
|
|
max_length: nil,
|
|
prefill: nil,
|
|
char_counter: nil
|
|
},
|
|
composer: {
|
|
min_length: nil,
|
|
max_length: nil,
|
|
char_counter: nil
|
|
},
|
|
text_only: {},
|
|
date: {
|
|
format: "YYYY-MM-DD"
|
|
},
|
|
time: {
|
|
format: "HH:mm"
|
|
},
|
|
date_time: {
|
|
format: ""
|
|
},
|
|
number: {},
|
|
checkbox: {},
|
|
url: {
|
|
min_length: nil
|
|
},
|
|
upload: {
|
|
file_types: '.jpg,.jpeg,.png'
|
|
},
|
|
dropdown: {
|
|
prefill: nil,
|
|
content: nil
|
|
},
|
|
tag: {
|
|
limit: nil,
|
|
prefill: nil,
|
|
content: nil
|
|
},
|
|
category: {
|
|
limit: 1,
|
|
property: 'id',
|
|
prefill: nil,
|
|
content: nil
|
|
},
|
|
group: {
|
|
prefill: nil,
|
|
content: nil
|
|
},
|
|
user_selector: {}
|
|
}
|
|
end
|
|
|
|
def self.require_assets
|
|
@require_assets ||= {}
|
|
end
|
|
|
|
def self.register(type, plugin = nil, asset_paths = [], opts = {})
|
|
if type
|
|
types[type.to_sym] ||= {}
|
|
types[type.to_sym] = opts[:type_opts] if opts[:type_opts].present?
|
|
end
|
|
|
|
if plugin && asset_paths
|
|
require_assets[plugin] = asset_paths
|
|
end
|
|
end
|
|
end
|