Add bridged share button to board and card permas

This commit is contained in:
Adrien Maston
2026-02-20 12:49:00 +01:00
parent 1ee37f046c
commit 069e165b43
4 changed files with 59 additions and 0 deletions
+10
View File
@@ -10,4 +10,14 @@ module BridgeHelper
bridge_title: "Go to #{board.name}"
}
end
def bridged_share_button(type = nil)
tag.button "Share", hidden: true, data: {
controller: "bridge--share",
action: "bridge--share#share",
bridge__overflow_menu_target: "item",
bridge_title: "Share",
bridge_share_type: type
}
end
end
@@ -0,0 +1,45 @@
import { BridgeComponent } from "@hotwired/hotwire-native-bridge"
export default class extends BridgeComponent {
static component = "share"
share() {
const type = this.bridgeElement.bridgeAttribute("share-type")
switch (type) {
case "card-url":
this.send("shareCardUrl", this.#data(type))
break
default:
this.send("shareUrl", this.#data(type))
}
}
#data(type) {
return {
title: document.title,
url: window.location.href,
...this.#additionalDataFor(type)
}
}
#additionalDataFor(type) {
switch (type) {
case "card-url":
return {
author: this.#author,
dateAdded: this.#dateAdded
}
default:
return null
}
}
get #author() {
return document.querySelector(".card__meta-text--author strong")?.textContent?.trim() ?? null
}
get #dateAdded() {
const timestamp = document.querySelector(".card__meta-text--added time")?.dateTime
return parseInt(timestamp) || null
}
}
+2
View File
@@ -30,3 +30,5 @@
<%= render "boards/show/columns", page: @page, board: @board %>
<% end %>
<% end %>
<%= bridged_share_button() %>
+2
View File
@@ -23,3 +23,5 @@
<%= button_to_remove_card_image(@card) if @card.image.attached? %>
<% end %>
</div>
<%= bridged_share_button("card-url") %>