Skip to content

Commit 2b314db

Browse files
committed
Add support for using enter to accept models
1 parent 7d5c460 commit 2b314db

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

src/UI/Modal.elm

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module UI.Modal exposing
88
, modal
99
, modal_
1010
, view
11+
, withAccept
1112
, withActions
1213
, withActionsIf
1314
, withAttributes
@@ -35,6 +36,7 @@ type Content msg
3536
type alias Modal msg =
3637
{ id : String
3738
, closeMsg : Maybe msg
39+
, acceptMsg : Maybe msg
3840
, attributes : List (Attribute msg)
3941
, header : Maybe (Html msg)
4042
, footer :
@@ -59,6 +61,7 @@ modal_ : String -> Content msg -> Modal msg
5961
modal_ id content_ =
6062
{ id = id
6163
, closeMsg = Nothing
64+
, acceptMsg = Nothing
6265
, attributes = []
6366
, header = Nothing
6467
, footer = { leftSide = [], actions = [] }
@@ -109,6 +112,7 @@ map : (a -> b) -> Modal a -> Modal b
109112
map f m =
110113
{ id = m.id
111114
, closeMsg = Maybe.map f m.closeMsg
115+
, acceptMsg = Maybe.map f m.acceptMsg
112116
, attributes = List.map (Attributes.map f) m.attributes
113117
, header = Maybe.map (Html.map f) m.header
114118
, footer =
@@ -129,6 +133,11 @@ withClose closeMsg modal__ =
129133
{ modal__ | closeMsg = Just closeMsg }
130134

131135

136+
withAccept : msg -> Modal msg -> Modal msg
137+
withAccept acceptMsg modal__ =
138+
{ modal__ | acceptMsg = Just acceptMsg }
139+
140+
132141
withHeader : String -> Modal msg -> Modal msg
133142
withHeader title modal__ =
134143
{ modal__ | header = Just (text title) }
@@ -231,6 +240,7 @@ view modal__ =
231240
in
232241
view_
233242
modal__.closeMsg
243+
modal__.acceptMsg
234244
(id modal__.id
235245
:: classList [ ( "modal_dim-overlay", modal__.dimOverlay ) ]
236246
:: modal__.attributes
@@ -242,8 +252,8 @@ view modal__ =
242252
-- INTERNALS
243253

244254

245-
view_ : Maybe msg -> List (Attribute msg) -> List (Html msg) -> Html msg
246-
view_ closeMsg attrs content_ =
255+
view_ : Maybe msg -> Maybe msg -> List (Attribute msg) -> List (Html msg) -> Html msg
256+
view_ closeMsg acceptMsg attrs content_ =
247257
let
248258
( modalContent, onEsc ) =
249259
case closeMsg of
@@ -264,7 +274,7 @@ view_ closeMsg attrs content_ =
264274
, Nothing
265275
)
266276
in
267-
modalOverlay onEsc modalContent
277+
modalOverlay onEsc acceptMsg modalContent
268278

269279

270280
overlayId : String

src/UI/ModalOverlay.elm

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@ module UI.ModalOverlay exposing (modalOverlay)
33
import Html exposing (Html, node)
44
import Html.Events exposing (on)
55
import Json.Decode as Decode
6+
import Maybe.Extra as MaybeE
67

78

8-
modalOverlay : Maybe msg -> Html msg -> Html msg
9-
modalOverlay onEscape content =
9+
modalOverlay : Maybe msg -> Maybe msg -> Html msg -> Html msg
10+
modalOverlay onEscape onEnter content =
1011
let
1112
attrs =
12-
case onEscape of
13-
Just onEsc ->
14-
[ on "escape" (Decode.succeed onEsc) ]
15-
16-
Nothing ->
17-
[]
13+
[ onEscape |> Maybe.map (\onEsc -> on "escape" (Decode.succeed onEsc))
14+
, onEnter |> Maybe.map (\onEnt -> on "enter" (Decode.succeed onEnt))
15+
]
1816
in
19-
node "modal-overlay" attrs [ content ]
17+
node "modal-overlay" (MaybeE.values attrs) [ content ]

src/UI/ModalOverlay.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ class ModalOverlay extends HTMLElement {
3232

3333
this.dispatchEvent(new CustomEvent("escape"));
3434
}
35+
36+
if (ev.key === "Enter") {
37+
ev.preventDefault();
38+
ev.stopPropagation();
39+
40+
this.dispatchEvent(new CustomEvent("enter"));
41+
}
3542
};
3643

3744
window.addEventListener("keydown", this.onKeydown);

0 commit comments

Comments
 (0)