50 lines
1.9 KiB
Ruby
50 lines
1.9 KiB
Ruby
module ColumnsHelper
|
|
def button_to_set_column(card, column)
|
|
button_to \
|
|
tag.span(column.name, class: "overflow-ellipsis"),
|
|
card_triage_path(card, column_id: column),
|
|
method: :post,
|
|
class: [ "card__column-name btn", { "card__column-name--current": column == card.column && card.open? } ],
|
|
form_class: "flex align-center gap-half",
|
|
data: { turbo_frame: "_top" }
|
|
end
|
|
|
|
def column_tag(id:, name:, drop_url:, collapsed: true, selected: nil, data: {}, **properties, &block)
|
|
classes = token_list("cards", properties.delete(:class), "is-collapsed": collapsed)
|
|
|
|
data = {
|
|
drag_and_drop_target: "container",
|
|
navigable_list_target: "item",
|
|
column_name: name,
|
|
drag_and_drop_url: drop_url
|
|
}.merge(data)
|
|
|
|
data[:action] = token_list(
|
|
"turbo:before-morph-attribute->collapsible-columns#preventToggle",
|
|
"focus->navigable-list#select",
|
|
data.delete(:action)
|
|
)
|
|
|
|
tag.section(id: id, class: classes, tabindex: "0", "aria-selected": selected, data: data, **properties) do
|
|
tag.div(class: "cards__transition-container", data: {
|
|
controller: "navigable-list",
|
|
navigable_list_supports_horizontal_navigation_value: "false",
|
|
navigable_list_prevent_handled_keys_value: "true",
|
|
navigable_list_auto_select_value: "false",
|
|
navigable_list_actionable_items_value: "true",
|
|
navigable_list_only_act_on_focused_items_value: "true",
|
|
action: "keydown->navigable-list#navigate"
|
|
}, &block)
|
|
end
|
|
end
|
|
|
|
def column_frame_tag(id, src: nil, data: {}, **options, &block)
|
|
data = data.reverse_merge \
|
|
drag_and_drop_refresh: true,
|
|
controller: "frame",
|
|
action: "turbo:before-frame-render->frame#morphRender turbo:before-morph-element->frame#morphReload"
|
|
options[:refresh] = :morph if src.present?
|
|
turbo_frame_tag(id, src: src, data: data, **options, &block)
|
|
end
|
|
end
|