Class: HakumiComponents::Progress::StepsRenderer
- Inherits:
-
Object
- Object
- HakumiComponents::Progress::StepsRenderer
- Extended by:
- T::Sig
- Defined in:
- app/components/hakumi_components/progress/steps_renderer.rb
Constant Summary collapse
- ProgressValue =
T.type_alias { Numeric }
- StrokeGradient =
T.type_alias { T::Hash[String, String] }
- StrokeColor =
T.type_alias { T.nilable(T.any(String, StrokeGradient)) }
- StepStateValue =
T.type_alias { Types::HtmlPrimitive }
- StepState =
T.type_alias { T::Hash[Symbol, StepStateValue] }
- CIRCLE_STEP_GAP =
T.let(2, Integer)
Instance Method Summary collapse
- #circle_steps ⇒ Object
- #circle_steps? ⇒ Boolean
-
#initialize(type:, percent:, steps:, stroke_color:, circle_geometry: nil, gradient_id: nil) ⇒ StepsRenderer
constructor
A new instance of StepsRenderer.
- #line_steps ⇒ Object
Constructor Details
#initialize(type:, percent:, steps:, stroke_color:, circle_geometry: nil, gradient_id: nil) ⇒ StepsRenderer
Returns a new instance of StepsRenderer.
27 28 29 30 31 32 33 34 |
# File 'app/components/hakumi_components/progress/steps_renderer.rb', line 27 def initialize(type:, percent:, steps:, stroke_color:, circle_geometry: nil, gradient_id: nil) @type = T.let(type, Symbol) @percent = T.let(percent, ProgressValue) @steps = T.let(steps, T.nilable(Integer)) @stroke_color = T.let(stroke_color, StrokeColor) @circle_geometry = T.let(circle_geometry, T.nilable(CircleGeometry)) @gradient_id = T.let(gradient_id, T.nilable(String)) end |
Instance Method Details
#circle_steps ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'app/components/hakumi_components/progress/steps_renderer.rb', line 59 def circle_steps return [] unless circle_steps? geometry = @circle_geometry return [] if geometry.nil? total = step_count effective = geometry.effective_length segment_length = (effective - (CIRCLE_STEP_GAP * total)) / total.to_f progress_units = (@percent.to_f / 100.0) * total base_offset = format_float(geometry.dashoffset).to_f (0...total).map do |index| active = progress_units > index current = index == progress_units.floor && progress_units < total offset = base_offset + ((segment_length + CIRCLE_STEP_GAP) * index) { index: index, active: active, current: current, dasharray: geometry.dasharray(segment_length), dashoffset: format_float(offset), stroke: circle_step_stroke(active) } end end |
#circle_steps? ⇒ Boolean
37 38 39 |
# File 'app/components/hakumi_components/progress/steps_renderer.rb', line 37 def circle_steps? (circle? || dashboard?) && steps? end |
#line_steps ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/components/hakumi_components/progress/steps_renderer.rb', line 42 def line_steps return [] unless line? && steps? total = step_count progress_units = (@percent.to_f / 100.0) * total (0...total).map do |index| { active: progress_units > index, current: index == progress_units.floor && progress_units < total, width: "#{(100.0 / total).round(2)}%", custom_color: line_custom_color } end end |