Skip to content

Commit edb4074

Browse files
Dan editable header update (#1061)
1 parent ff02581 commit edb4074

File tree

6 files changed

+66
-17
lines changed

6 files changed

+66
-17
lines changed
Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
import { Controller } from '@hotwired/stimulus'
22

33
export default class extends Controller {
4-
static targets = ["input", "header"]
4+
static targets = ["input", "header", "error"]
55

6-
initialize() {
7-
this.inputTarget.addEventListener("focusout", (e) => {
8-
this.headerTarget.innerHTML = e.target.value
9-
this.toggleEditor()
10-
})
6+
focusout(e) {
7+
this.headerTarget.innerHTML = e.target.value
8+
this.toggleEditor()
9+
}
1110

12-
// blur input on enter
13-
this.inputTarget.addEventListener("keydown", (e) => {
14-
if(e.key == "Enter") {
15-
this.inputTarget.blur()
16-
}
17-
})
11+
blur() {
12+
this.inputTarget.blur()
1813
}
1914

2015
toggleEditor(e) {
@@ -32,4 +27,13 @@ export default class extends Controller {
3227
this.headerTarget.style.display = "flex"
3328
}
3429
}
30+
31+
error(e) {
32+
this.errorTarget.innerHTML = e.detail
33+
this.errorTarget.style.display = "block"
34+
}
35+
36+
clear() {
37+
this.errorTarget.style.display = "none"
38+
}
3539
}

pgml-dashboard/src/components/inputs/text/editable_header/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub struct EditableHeader {
3232
header_type: Headers,
3333
input_target: StimulusTarget,
3434
input_name: Option<String>,
35+
id: String,
3536
}
3637

3738
impl EditableHeader {
@@ -41,6 +42,7 @@ impl EditableHeader {
4142
header_type: Headers::H3,
4243
input_target: StimulusTarget::new(),
4344
input_name: None,
45+
id: String::from(""),
4446
}
4547
}
4648

@@ -63,6 +65,11 @@ impl EditableHeader {
6365
self.input_name = Some(input_name.to_string());
6466
self
6567
}
68+
69+
pub fn id(mut self, id: &str) -> Self {
70+
self.id = id.to_string();
71+
self
72+
}
6673
}
6774

6875
component!(EditableHeader);

pgml-dashboard/src/components/inputs/text/editable_header/template.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
<div data-controller="inputs-text-editable-header">
1+
<div
2+
id="<%= id %>"
3+
data-controller="inputs-text-editable-header"
4+
data-action="error->inputs-text-editable-header#error clear->inputs-text-editable-header#clear">
25
<div class="editable-header-container" style="display: block"
36
data-action="click->inputs-text-editable-header#toggleEditor">
47
<<%= header_type.to_string() %> class="align-items-center <%= header_type.to_string() %> d-flex gap-3">
@@ -9,6 +12,7 @@
912
<input type="text" class="form-control" value="<%= value %>" style="display: none" maxlength="50" autocomplete="off"
1013
name='<%= input_name.unwrap_or_else(|| "".to_string()) %>'
1114
data-inputs-text-editable-header-target="input"
15+
data-action="keydown.enter->inputs-text-editable-header#blur focusout->inputs-text-editable-header#focusout"
1216
<%- input_target %> >
1317

1418
<div>
@@ -17,6 +21,7 @@
1721
</span>
1822
</div>
1923
</<%= header_type.to_string() %>>
24+
<div class="text-legal text-error" style="margin-top: -0.5rem; display: none" data-inputs-text-editable-header-target="error">error message</div>
2025
</div>
2126

2227

pgml-dashboard/static/css/scss/base/_typography.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
line-height: 16px;
2727
}
2828

29+
.text-error {
30+
color: #{$error} !important;
31+
}
2932
.text-black {
3033
color: #{$gray-900} !important;
3134
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,34 @@
11
import { Controller } from '@hotwired/stimulus'
22

33
export default class extends Controller {
4+
static targets = ["test"]
5+
6+
initialize() {
7+
this.errorH3 = new CustomEvent("error", { detail: "message passed through event h3" })
8+
this.clearH3 = new Event("clear")
9+
this.errorH2 = new CustomEvent("error", { detail: "message passed through event h2" })
10+
this.clearH2 = new Event("clear")
11+
}
12+
13+
414
selectRow(event) {
515
console.log('dataset: ', event.currentTarget.dataset)
616
}
17+
18+
addError(event) {
19+
document.getElementById("header-3").dispatchEvent(this.errorH3)
20+
}
21+
22+
clearError(event) {
23+
document.getElementById("header-3").dispatchEvent(this.clearH3)
24+
}
25+
26+
addErrorH2() {
27+
document.getElementById("header-2").dispatchEvent(this.errorH2)
28+
}
29+
30+
clearErrorH2() {
31+
document.getElementById("header-2").dispatchEvent(this.clearH2)
32+
}
33+
734
}

pgml-dashboard/templates/content/playground.html

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,11 @@ <h3 class="h3">Inputs</h3>
133133
<div class="d-flex flex-row justify-content-between">
134134
<%+ EditableHeader::new()
135135
.value("Size H2")
136-
.header_type(Headers::H2) %>
136+
.header_type(Headers::H2)
137+
.id("header-2") %>
137138
<div>
138-
this is a thing that takes up space
139+
<button data-action="playground#addErrorH2">Add an Error</button>
140+
<button data-action="playground#clearErrorH2">Clear Error</button>
139141
</div>
140142
</div>
141143
<div class="d-flex flex-row justify-content-between">
@@ -147,9 +149,10 @@ <h3 class="h3">Inputs</h3>
147149
StimulusTarget::new()
148150
.controller("some-existing-controller")
149151
.name("desired-target-name")
150-
) %>
152+
).id("header-3") %>
151153
<div>
152-
this is a thing that takes up space
154+
<button data-action="playground#addError">Add an Error</button>
155+
<button data-action="playground#clearError">Clear Error</button>
153156
</div>
154157
</div>
155158
</div>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy