File tree Expand file tree Collapse file tree 6 files changed +66
-17
lines changed Expand file tree Collapse file tree 6 files changed +66
-17
lines changed Original file line number Diff line number Diff line change 1
1
import { Controller } from '@hotwired/stimulus'
2
2
3
3
export default class extends Controller {
4
- static targets = [ "input" , "header" ]
4
+ static targets = [ "input" , "header" , "error" ]
5
5
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
+ }
11
10
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 ( )
18
13
}
19
14
20
15
toggleEditor ( e ) {
@@ -32,4 +27,13 @@ export default class extends Controller {
32
27
this . headerTarget . style . display = "flex"
33
28
}
34
29
}
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
+ }
35
39
}
Original file line number Diff line number Diff line change @@ -32,6 +32,7 @@ pub struct EditableHeader {
32
32
header_type : Headers ,
33
33
input_target : StimulusTarget ,
34
34
input_name : Option < String > ,
35
+ id : String ,
35
36
}
36
37
37
38
impl EditableHeader {
@@ -41,6 +42,7 @@ impl EditableHeader {
41
42
header_type : Headers :: H3 ,
42
43
input_target : StimulusTarget :: new ( ) ,
43
44
input_name : None ,
45
+ id : String :: from ( "" ) ,
44
46
}
45
47
}
46
48
@@ -63,6 +65,11 @@ impl EditableHeader {
63
65
self . input_name = Some ( input_name. to_string ( ) ) ;
64
66
self
65
67
}
68
+
69
+ pub fn id ( mut self , id : & str ) -> Self {
70
+ self . id = id. to_string ( ) ;
71
+ self
72
+ }
66
73
}
67
74
68
75
component ! ( EditableHeader ) ;
Original file line number Diff line number Diff line change 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 ">
2
5
< div class ="editable-header-container " style ="display: block "
3
6
data-action ="click->inputs-text-editable-header#toggleEditor ">
4
7
< < %= header_type.to_string() %> class="align-items-center < %= header_type.to_string() %> d-flex gap-3">
9
12
< input type ="text " class ="form-control " value ="<%= value %> " style ="display: none " maxlength ="50 " autocomplete ="off "
10
13
name ='<%= input_name.unwrap_or_else(|| "".to_string()) %> '
11
14
data-inputs-text-editable-header-target ="input "
15
+ data-action ="keydown.enter->inputs-text-editable-header#blur focusout->inputs-text-editable-header#focusout "
12
16
< %- input_target %> >
13
17
14
18
< div >
17
21
</ span >
18
22
</ div >
19
23
</ < %= 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 >
20
25
</ div >
21
26
22
27
Original file line number Diff line number Diff line change 26
26
line-height : 16px ;
27
27
}
28
28
29
+ .text-error {
30
+ color : #{$error } !important ;
31
+ }
29
32
.text-black {
30
33
color : #{$gray-900 } !important ;
31
34
}
Original file line number Diff line number Diff line change 1
1
import { Controller } from '@hotwired/stimulus'
2
2
3
3
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
+
4
14
selectRow ( event ) {
5
15
console . log ( 'dataset: ' , event . currentTarget . dataset )
6
16
}
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
+
7
34
}
Original file line number Diff line number Diff line change @@ -133,9 +133,11 @@ <h3 class="h3">Inputs</h3>
133
133
< div class ="d-flex flex-row justify-content-between ">
134
134
< %+ EditableHeader::new()
135
135
.value("Size H2")
136
- .header_type(Headers::H2) %>
136
+ .header_type(Headers::H2)
137
+ .id("header-2") %>
137
138
< 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 >
139
141
</ div >
140
142
</ div >
141
143
< div class ="d-flex flex-row justify-content-between ">
@@ -147,9 +149,10 @@ <h3 class="h3">Inputs</h3>
147
149
StimulusTarget::new()
148
150
.controller("some-existing-controller")
149
151
.name("desired-target-name")
150
- ) %>
152
+ ).id("header-3") %>
151
153
< 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 >
153
156
</ div >
154
157
</ div >
155
158
</ div >
You can’t perform that action at this time.
0 commit comments