module Spree module Admin module BaseHelper def flash_alert(flash) if flash.present? close_button = button_tag(class: 'close', 'data-dismiss' => 'alert', 'aria-label' => Spree.t(:close)) do content_tag('span', '×'.html_safe, 'aria-hidden' => true) end message = flash[:error] || flash[:notice] || flash[:success] flash_class = 'danger' if flash[:error] flash_class = 'info' if flash[:notice] flash_class = 'success' if flash[:success] flash_div = content_tag(:div, (close_button + message), class: "alert alert-#{flash_class} alert-auto-disappear") content_tag(:div, flash_div, class: 'col-12') end end def field_container(model, method, options = {}, &block) css_classes = options[:class].to_a css_classes << 'field' css_classes << 'withError' if error_message_on(model, method).present? content_tag( :div, capture(&block), options.merge(class: css_classes.join(' '), id: "#{model}_#{method}_field") ) end def error_message_on(object, method, _options = {}) object = convert_to_model(object) obj = object.respond_to?(:errors) ? object : instance_variable_get("@#{object}") if obj && obj.errors[method].present? errors = safe_join(obj.errors[method], '
'.html_safe) content_tag(:span, errors, class: 'formError') else '' end end def datepicker_field_value(date) unless date.blank? l(date, format: Spree.t('date_picker.format', default: '%Y/%m/%d')) end end def preference_field_tag(name, value, options) case options[:type] when :integer text_field_tag(name, value, preference_field_options(options)) when :boolean hidden_field_tag(name, 0, id: "#{name}_hidden") + check_box_tag(name, 1, value, preference_field_options(options)) when :string text_field_tag(name, value, preference_field_options(options)) when :password password_field_tag(name, value, preference_field_options(options)) when :text text_area_tag(name, value, preference_field_options(options)) else text_field_tag(name, value, preference_field_options(options)) end end def preference_field_for(form, field, options) case options[:type] when :integer form.text_field(field, preference_field_options(options)) when :boolean form.check_box(field, preference_field_options(options)) when :string form.text_field(field, preference_field_options(options)) when :password form.password_field(field, preference_field_options(options)) when :text form.text_area(field, preference_field_options(options)) else form.text_field(field, preference_field_options(options)) end end def preference_field_options(options) field_options = case options[:type] when :integer { size: 10, class: 'input_integer form-control' } when :boolean {} when :string { size: 10, class: 'input_string form-control' } when :password { size: 10, class: 'password_string form-control' } when :text { rows: 15, cols: 85, class: 'form-control' } else { size: 10, class: 'input_string form-control' } end field_options.merge!(readonly: options[:readonly], disabled: options[:disabled], size: options[:size]) end def preference_fields(object, form) return unless object.respond_to?(:preferences) fields = object.preferences.keys.map do |key| if object.has_preference?(key) form.label("preferred_#{key}", Spree.t(key) + ': ') + preference_field_for(form, "preferred_#{key}", type: object.preference_type(key)) end end safe_join(fields, '
'.html_safe) end # renders hidden field and link to remove record using nested_attributes def link_to_icon_remove_fields(form) url = form.object.persisted? ? [:admin, form.object] : '#' link_to_with_icon('delete', '', url, class: 'spree_remove_fields btn btn-sm btn-danger', data: { action: 'remove' }, title: Spree.t(:remove), no_text: true ) + form.hidden_field(:_destroy) end def spree_dom_id(record) dom_id(record, 'spree') end I18N_PLURAL_MANY_COUNT = 2.1 def plural_resource_name(resource_class) resource_class.model_name.human(count: I18N_PLURAL_MANY_COUNT) end def order_time(time) return '' if time.blank? [I18n.l(time.to_date), time.strftime('%l:%M %p').strip].join(' ') end def required_span_tag content_tag(:span, ' *', class: 'required') end def product_preview_link(product) return unless frontend_available? button_link_to( Spree.t(:preview_product), spree.product_url(product), class: 'btn-outline-secondary', icon: 'eye-open', id: 'admin_preview_product', target: :blank ) end end end end