Class: Fluxbit::Component
- Inherits:
-
ViewComponent::Base
- Object
- ViewComponent::Base
- Fluxbit::Component
show all
- Includes:
- IconHelpers
- Defined in:
- app/components/fluxbit/component.rb
Direct Known Subclasses
AccordionComponent, AccordionComponent::Panel, AlertComponent, AvatarComponent, AvatarGroupComponent, BadgeComponent, BannerComponent, BottomNavigationComponent, BottomNavigationComponent::ButtonGroup, BottomNavigationComponent::ButtonGroup::Button, BottomNavigationComponent::CTA, BottomNavigationComponent::Item, BottomNavigationComponent::Pagination, BreadcrumbComponent, BreadcrumbComponent::Item, ButtonComponent, ButtonGroupComponent, CardComponent, CarouselComponent, DrawerComponent, DropdownComponent, DropdownItemComponent, FlexComponent, Form::Component, Form::FormBuilderComponent, HeadingComponent, LinkComponent, ModalComponent, PaginationComponent, PopoverComponent, ProgressComponent, SkeletonComponent, SpeedDialActionComponent, SpeedDialComponent, SpinnerComponent, SpinnerPercentComponent, StepperComponent, StepperComponent::Step, TabComponent, TableComponent, TableGroupComponent, TextComponent, TimelineComponent, TimelineItemComponent, TooltipComponent
Defined Under Namespace
Classes: ComponentObj
Instance Method Summary
collapse
#chevron_double_left, #chevron_double_right, #chevron_down, #chevron_left, #chevron_right, #chevron_up, #close_icon, #ellipsis_horizontal, #eye_icon, #eye_slash_icon, #plus_icon
Constructor Details
#initialize(**props) ⇒ Component
Returns a new instance of Component.
11
12
13
14
15
16
17
18
19
|
# File 'app/components/fluxbit/component.rb', line 11
def initialize(**props)
@popover_placement = props.delete(:popover_placement) || :right
@popover_trigger = props.delete(:popover_trigger) || :hover
@popover_text = props.delete(:popover_text)
@tooltip_placement = props.delete(:tooltip_placement) || :right
@tooltip_trigger = props.delete(:tooltip_trigger) || :hover
@tooltip_text = props.delete(:tooltip_text)
end
|
Instance Method Details
#add(to:, first_element: false, **props) ⇒ Object
21
22
23
24
25
26
27
28
29
|
# File 'app/components/fluxbit/component.rb', line 21
def add(to:, first_element: false, **props)
unless props[:class].nil?
to[:class] = (to[:class] || "")
.split
.insert((first_element ? 0 : -1), props[:class])
.join(" ")
end
to
end
|
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'app/components/fluxbit/component.rb', line 65
def add_popover_or_tooltip
if popover? || @popover_text.present?
@props["data-popover-placement"] = @popover_placement
@props["data-popover-trigger"] = @popover_trigger unless @popover_trigger == :hover
@props["data-popover-target"] = target
end
if tooltip? || @tooltip_text.present?
@props["data-tooltip-placement"] = @tooltip_placement
@props["data-tooltip-trigger"] = @tooltip_trigger unless @tooltip_trigger == :hover
@props["data-tooltip-target"] = target
end
end
|
#anyicon(icon, **props) ⇒ Object
86
87
88
|
# File 'app/components/fluxbit/component.rb', line 86
def anyicon(icon, **props)
Anyicon::Icon.render(icon, **props)
end
|
#element_name ⇒ Object
102
103
104
105
106
|
# File 'app/components/fluxbit/component.rb', line 102
def element_name
self.class.to_s.match(/Fluxbit::(\w+)Component/)[1].underscore
rescue
"any"
end
|
#fx_id ⇒ Object
98
99
100
|
# File 'app/components/fluxbit/component.rb', line 98
def fx_id
@fx_id ||= "#{element_name}-#{random_id}"
end
|
#icon(icon_name, **props) ⇒ Object
90
91
92
|
# File 'app/components/fluxbit/component.rb', line 90
def icon(icon_name, **props)
anyicon(icon_name, **props)
end
|
#options(value, collection: nil, default: nil) ⇒ Object
42
43
44
45
46
47
48
|
# File 'app/components/fluxbit/component.rb', line 42
def options(value, collection: nil, default: nil)
if collection.nil?
value.nil? ? default : value
else
value.in?(collection) ? value : default
end
end
|
#popover? ⇒ Boolean
57
58
59
|
# File 'app/components/fluxbit/component.rb', line 57
def popover?
false
end
|
#random_id ⇒ Object
94
95
96
|
# File 'app/components/fluxbit/component.rb', line 94
def random_id
(0...30).map { ("a".."z").to_a[rand(26)] }.join
end
|
#remove_class(elements, from) ⇒ Object
31
32
33
34
35
36
|
# File 'app/components/fluxbit/component.rb', line 31
def remove_class(elements, from)
return "" if from.blank?
return from if elements.blank?
from.split.reject { |c| c.in?((elements || "").split) }.join(" ")
end
|
#remove_class_from_props(props) ⇒ Object
38
39
40
|
# File 'app/components/fluxbit/component.rb', line 38
def remove_class_from_props(props)
props[:class] = remove_class(props.delete(:remove_class) || "", props[:class])
end
|
50
51
52
53
54
55
|
# File 'app/components/fluxbit/component.rb', line 50
def render_popover_or_tooltip
safe_join [
(@popover_text.nil? ? "" : Fluxbit::PopoverComponent.new(id: target, **(@popover_props || {})).with_content(@popover_text).render_in(view_context)),
(@tooltip_text.nil? ? "" : Fluxbit::TooltipComponent.new(id: target, **(@tooltip_props || {})).with_content(@tooltip_text).render_in(view_context))
]
end
|
#target ⇒ Object
79
80
81
82
83
84
|
# File 'app/components/fluxbit/component.rb', line 79
def target
@popover_target ||= "#{
@props.try('for') ||
@props.try(:for) ||
(0...10).map { ('a'..'z').to_a[rand(26)] }.join}_target"
end
|
61
62
63
|
# File 'app/components/fluxbit/component.rb', line 61
def tooltip?
false
end
|