Skip to content

Commit e1ef189

Browse files
committed
Ensure button dropdowns are correctly updated sfter navigation
1 parent adaae6d commit e1ef189

File tree

6 files changed

+121
-137
lines changed

6 files changed

+121
-137
lines changed
Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
<%= lookbook_render button_component.new(
2-
id: id,
3-
icon: icon,
4-
**button_attrs,
5-
"x-on:keydown.esc.stop.document": "hideDropdown",
6-
"x-on:navigation:complete.window": "updateDropdown") do %>
7-
<%= content %>
8-
<% end %>
1+
<div class="contents" key="<%= key %>">
2+
<%= lookbook_render button_component.new(
3+
id: id,
4+
icon: icon,
5+
**button_attrs,
6+
"x-on:keydown.esc.stop.document": "hideDropdown") do %>
7+
<%= content %>
8+
<% end %>
99

10-
<% if dropdown? %>
11-
<% content_for :dropdowns do %>
12-
<div data-dropdown-id="<%= id %>">
10+
<% if dropdown? %>
11+
<div data-dropdown-id="<%= id %>" hidden>
1312
<div class="divide-y divide-lookbook-divider text-left">
1413
<%= dropdown %>
1514
</div>
1615
</div>
1716
<% end %>
18-
<% end %>
17+
</div>

app/components/lookbook/button/component.js

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,36 @@ export default function buttonComponent() {
66
let dropdown = null;
77

88
return {
9-
updateAfterNavigate: true,
10-
119
init() {
12-
this.updateAfterNavigate =
13-
this.$el.dataset.updateAfterNavigate !== "false";
14-
1510
if (this.$refs.tooltip) {
1611
tooltip = initTooltip(this, {
1712
target: this.$refs.icon,
1813
});
1914
}
2015

2116
if (this.dropdownContent) {
22-
dropdown = tippy(this.$el, {
23-
content: this.dropdownContent,
24-
trigger: "click",
25-
theme: "menu",
26-
triggerTarget: this.$el,
27-
interactive: true,
28-
zIndex: 99999,
29-
onShow: () => {
30-
if (!this.$store.settings.showTooltips) {
31-
return false;
32-
}
33-
this.$dispatch("dropdown:show", { dropdown: this });
34-
},
35-
onHide: () => this.$dispatch("dropdown:hide", { dropdown: this }),
36-
});
17+
this.initDropdown();
3718
}
3819
},
3920

21+
initDropdown() {
22+
dropdown = tippy(this.$el, {
23+
content: this.dropdownContent,
24+
trigger: "click",
25+
theme: "menu",
26+
triggerTarget: this.$el,
27+
interactive: true,
28+
zIndex: 99999,
29+
onShow: () => {
30+
if (!this.$store.settings.showTooltips) {
31+
return false;
32+
}
33+
this.$dispatch("dropdown:show", { dropdown: this });
34+
},
35+
onHide: () => this.$dispatch("dropdown:hide", { dropdown: this }),
36+
});
37+
},
38+
4039
get dropdownContent() {
4140
if (this.$root && this.$root.id) {
4241
const dropdown = document.querySelector(
@@ -53,17 +52,6 @@ export default function buttonComponent() {
5352
}
5453
},
5554

56-
updateDropdown() {
57-
if (dropdown) {
58-
dropdown.hide();
59-
if (this.updateAfterNavigate) {
60-
this.$nextTick(() => {
61-
dropdown.setContent(this.dropdownContent);
62-
});
63-
}
64-
}
65-
},
66-
6755
startSpin() {
6856
this._spinning = true;
6957
},

app/components/lookbook/button/component.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ def initialize(id: nil, icon: nil, **html_attrs)
1010
@button_attrs = html_attrs
1111
end
1212

13+
def key
14+
Digest::SHA256.hexdigest(icon.to_s + dropdown.to_s + @button_attrs.to_json)
15+
end
16+
1317
def dropdown?
1418
dropdown.present?
1519
end

app/components/lookbook/display_options/editor/component.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<%= render_component_tag class: "px-2" do %>
22
<% if fields.many? %>
3-
<%= lookbook_render :button, id: "display-options-dropdown-button", icon: :settings, tooltip: "Display options", data: {update_after_navigate: false} do |button| %>
3+
<%= lookbook_render :button, id: "display-options-dropdown-button", icon: :settings, tooltip: "Display options" do |button| %>
44
<% button.with_dropdown do %>
55
<div class="p-3 space-y-3">
66
<%= safe_join(fields) %>

public/lookbook-assets/js/index.js

Lines changed: 85 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -8159,17 +8159,7 @@ function $12b7aa006b8a97e1$var$toCamel(s) {
81598159
}
81608160

81618161

8162-
var $aaa28690e7544346$exports = {};
8163-
var $99486586f6691564$exports = {};
8164-
8165-
$parcel$defineInteropFlag($99486586f6691564$exports);
8166-
8167-
$parcel$export($99486586f6691564$exports, "default", () => $99486586f6691564$export$2e2bcd8739ae039);
8168-
function $99486586f6691564$export$2e2bcd8739ae039() {
8169-
return {};
8170-
}
8171-
8172-
8162+
var $fc302d8526a036f0$exports = {};
81738163
var $cbd28b10fa9798c7$exports = {};
81748164

81758165
$parcel$defineInteropFlag($cbd28b10fa9798c7$exports);
@@ -11634,13 +11624,14 @@ function $cbd28b10fa9798c7$export$2e2bcd8739ae039() {
1163411624
let tooltip = null;
1163511625
let dropdown = null;
1163611626
return {
11637-
updateAfterNavigate: true,
1163811627
init () {
11639-
this.updateAfterNavigate = this.$el.dataset.updateAfterNavigate !== "false";
1164011628
if (this.$refs.tooltip) tooltip = (0, $7a759511c361f2bd$export$353372104066311a)(this, {
1164111629
target: this.$refs.icon
1164211630
});
11643-
if (this.dropdownContent) dropdown = (0, $789b7d27a7c715a6$export$2e2bcd8739ae039)(this.$el, {
11631+
if (this.dropdownContent) this.initDropdown();
11632+
},
11633+
initDropdown () {
11634+
dropdown = (0, $789b7d27a7c715a6$export$2e2bcd8739ae039)(this.$el, {
1164411635
content: this.dropdownContent,
1164511636
trigger: "click",
1164611637
theme: "menu",
@@ -11668,14 +11659,6 @@ function $cbd28b10fa9798c7$export$2e2bcd8739ae039() {
1166811659
hideDropdown () {
1166911660
if (dropdown) dropdown.hide();
1167011661
},
11671-
updateDropdown () {
11672-
if (dropdown) {
11673-
dropdown.hide();
11674-
if (this.updateAfterNavigate) this.$nextTick(()=>{
11675-
dropdown.setContent(this.dropdownContent);
11676-
});
11677-
}
11678-
},
1167911662
startSpin () {
1168011663
this._spinning = true;
1168111664
},
@@ -11690,6 +11673,16 @@ function $cbd28b10fa9798c7$export$2e2bcd8739ae039() {
1169011673
}
1169111674

1169211675

11676+
var $99486586f6691564$exports = {};
11677+
11678+
$parcel$defineInteropFlag($99486586f6691564$exports);
11679+
11680+
$parcel$export($99486586f6691564$exports, "default", () => $99486586f6691564$export$2e2bcd8739ae039);
11681+
function $99486586f6691564$export$2e2bcd8739ae039() {
11682+
return {};
11683+
}
11684+
11685+
1169311686
var $e398acaded942bbe$exports = {};
1169411687

1169511688
$parcel$defineInteropFlag($e398acaded942bbe$exports);
@@ -12408,6 +12401,33 @@ function $506dabb2bf255b38$var$sizeSplits(sizes) {
1240812401
}
1240912402

1241012403

12404+
var $a87dacf5139b5e2f$exports = {};
12405+
12406+
$parcel$defineInteropFlag($a87dacf5139b5e2f$exports);
12407+
12408+
$parcel$export($a87dacf5139b5e2f$exports, "default", () => $a87dacf5139b5e2f$export$2e2bcd8739ae039);
12409+
function $a87dacf5139b5e2f$export$2e2bcd8739ae039(store) {
12410+
return {
12411+
get store () {
12412+
return store || this;
12413+
},
12414+
get id () {
12415+
return this.$root.id;
12416+
},
12417+
get panels () {
12418+
return Array.from(this.$refs.panels.children);
12419+
},
12420+
isActive (el) {
12421+
return this.store.activeTab === this._getRef(el);
12422+
},
12423+
// protected
12424+
_getRef (el) {
12425+
return el.getAttribute("x-ref");
12426+
}
12427+
};
12428+
}
12429+
12430+
1241112431
var $0db07828cadc68e0$exports = {};
1241212432

1241312433
$parcel$defineInteropFlag($0db07828cadc68e0$exports);
@@ -12501,33 +12521,6 @@ function $0db07828cadc68e0$export$2e2bcd8739ae039(store) {
1250112521
}
1250212522

1250312523

12504-
var $a87dacf5139b5e2f$exports = {};
12505-
12506-
$parcel$defineInteropFlag($a87dacf5139b5e2f$exports);
12507-
12508-
$parcel$export($a87dacf5139b5e2f$exports, "default", () => $a87dacf5139b5e2f$export$2e2bcd8739ae039);
12509-
function $a87dacf5139b5e2f$export$2e2bcd8739ae039(store) {
12510-
return {
12511-
get store () {
12512-
return store || this;
12513-
},
12514-
get id () {
12515-
return this.$root.id;
12516-
},
12517-
get panels () {
12518-
return Array.from(this.$refs.panels.children);
12519-
},
12520-
isActive (el) {
12521-
return this.store.activeTab === this._getRef(el);
12522-
},
12523-
// protected
12524-
_getRef (el) {
12525-
return el.getAttribute("x-ref");
12526-
}
12527-
};
12528-
}
12529-
12530-
1253112524
var $6d64716f0b34fdf4$exports = {};
1253212525

1253312526
$parcel$defineInteropFlag($6d64716f0b34fdf4$exports);
@@ -12655,22 +12648,22 @@ function $6d64716f0b34fdf4$export$2e2bcd8739ae039(store) {
1265512648
}
1265612649

1265712650

12658-
$aaa28690e7544346$exports = {
12659-
"code": $99486586f6691564$exports,
12651+
$fc302d8526a036f0$exports = {
1266012652
"button": $cbd28b10fa9798c7$exports,
12653+
"code": $99486586f6691564$exports,
1266112654
"dimensions_display": $e398acaded942bbe$exports,
1266212655
"copy_button": $47a1c62621be0c54$exports,
1266312656
"embed_code_dropdown": $216ef7001f59f21d$exports,
1266412657
"filter": $e9904a14dabf652d$exports,
1266512658
"nav": $d92d9d5253f84566$exports,
1266612659
"split_layout": $506dabb2bf255b38$exports,
12667-
"tabs": $0db07828cadc68e0$exports,
1266812660
"tab_panels": $a87dacf5139b5e2f$exports,
12661+
"tabs": $0db07828cadc68e0$exports,
1266912662
"viewport": $6d64716f0b34fdf4$exports
1267012663
};
1267112664

1267212665

12673-
var $5d1c9207cb730903$exports = {};
12666+
var $3821a3a183a9a321$exports = {};
1267412667
var $6a9b69d9cc7f810f$exports = {};
1267512668

1267612669
$parcel$defineInteropFlag($6a9b69d9cc7f810f$exports);
@@ -13699,38 +13692,6 @@ function $c299e36fa9e271bc$export$2e2bcd8739ae039(id, embedStore) {
1369913692
}
1370013693

1370113694

13702-
var $1a7a7298eec5b755$exports = {};
13703-
13704-
$parcel$defineInteropFlag($1a7a7298eec5b755$exports);
13705-
13706-
$parcel$export($1a7a7298eec5b755$exports, "default", () => $1a7a7298eec5b755$export$2e2bcd8739ae039);
13707-
13708-
function $1a7a7298eec5b755$export$2e2bcd8739ae039() {
13709-
return {
13710-
narrow: false,
13711-
init () {
13712-
(0, $7ecd1fc3a6b35e5c$export$a2214cc2adb2dc44)(this.$el, ({ width: width })=>{
13713-
this.narrow = width < 500;
13714-
});
13715-
}
13716-
};
13717-
}
13718-
13719-
13720-
var $e773f8ef556b41ff$exports = {};
13721-
13722-
$parcel$defineInteropFlag($e773f8ef556b41ff$exports);
13723-
13724-
$parcel$export($e773f8ef556b41ff$exports, "default", () => $e773f8ef556b41ff$export$2e2bcd8739ae039);
13725-
function $e773f8ef556b41ff$export$2e2bcd8739ae039() {
13726-
return {
13727-
get isNarrowLayout () {
13728-
return this.narrow || false;
13729-
}
13730-
};
13731-
}
13732-
13733-
1373413695
var $9b24cbeb3a465447$exports = {};
1373513696

1373613697
$parcel$defineInteropFlag($9b24cbeb3a465447$exports);
@@ -13788,19 +13749,51 @@ function $9b24cbeb3a465447$export$2e2bcd8739ae039({ id: id, matchers: matchers }
1378813749
}
1378913750

1379013751

13791-
$5d1c9207cb730903$exports = {
13752+
var $e773f8ef556b41ff$exports = {};
13753+
13754+
$parcel$defineInteropFlag($e773f8ef556b41ff$exports);
13755+
13756+
$parcel$export($e773f8ef556b41ff$exports, "default", () => $e773f8ef556b41ff$export$2e2bcd8739ae039);
13757+
function $e773f8ef556b41ff$export$2e2bcd8739ae039() {
13758+
return {
13759+
get isNarrowLayout () {
13760+
return this.narrow || false;
13761+
}
13762+
};
13763+
}
13764+
13765+
13766+
var $1a7a7298eec5b755$exports = {};
13767+
13768+
$parcel$defineInteropFlag($1a7a7298eec5b755$exports);
13769+
13770+
$parcel$export($1a7a7298eec5b755$exports, "default", () => $1a7a7298eec5b755$export$2e2bcd8739ae039);
13771+
13772+
function $1a7a7298eec5b755$export$2e2bcd8739ae039() {
13773+
return {
13774+
narrow: false,
13775+
init () {
13776+
(0, $7ecd1fc3a6b35e5c$export$a2214cc2adb2dc44)(this.$el, ({ width: width })=>{
13777+
this.narrow = width < 500;
13778+
});
13779+
}
13780+
};
13781+
}
13782+
13783+
13784+
$3821a3a183a9a321$exports = {
1379213785
"display_options": {
1379313786
"field": $6a9b69d9cc7f810f$exports
1379413787
},
1379513788
"embed": {
1379613789
"inspector": $c299e36fa9e271bc$exports
1379713790
},
13798-
"params": {
13799-
"editor": $1a7a7298eec5b755$exports,
13800-
"field": $e773f8ef556b41ff$exports
13801-
},
1380213791
"nav": {
1380313792
"item": $9b24cbeb3a465447$exports
13793+
},
13794+
"params": {
13795+
"field": $e773f8ef556b41ff$exports,
13796+
"editor": $1a7a7298eec5b755$exports
1380413797
}
1380513798
};
1380613799

@@ -13868,8 +13861,8 @@ const $22969b543678f572$var$prefix = window.APP_NAME;
1386813861
// Components
1386913862
(0, $caa9439642c6336c$export$2e2bcd8739ae039).data("app", (0, $5792afa4170ed552$export$2e2bcd8739ae039));
1387013863
[
13871-
$aaa28690e7544346$exports,
13872-
$5d1c9207cb730903$exports,
13864+
$fc302d8526a036f0$exports,
13865+
$3821a3a183a9a321$exports,
1387313866
$d56e5cced44001d2$exports
1387413867
].forEach((scripts)=>{
1387513868
const components = (0, $12b7aa006b8a97e1$export$4e811121b221213b)(scripts);

public/lookbook-assets/js/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)