@@ -16,6 +16,7 @@ import "package:react/react_client/js_interop_helpers.dart";
16
16
import 'package:react/react_client/react_interop.dart' ;
17
17
import "package:react/react_dom.dart" ;
18
18
import "package:react/react_dom_server.dart" ;
19
+ import "package:react/src/react_client/event_prop_key_to_event_factory.dart" ;
19
20
import "package:react/src/react_client/synthetic_event_wrappers.dart" as events;
20
21
import 'package:react/src/typedefs.dart' ;
21
22
import 'package:react/src/ddc_emulated_function_name_bug.dart'
@@ -510,6 +511,28 @@ _convertBoundValues(Map args) {
510
511
/// to the original Dart functions (the input of [_convertEventHandlers] ).
511
512
final Expando <Function > _originalEventHandlers = new Expando ();
512
513
514
+ /// Returns the props for a [ReactElement] or composite [ReactComponent] [instance] ,
515
+ /// shallow-converted to a Dart Map for convenience.
516
+ ///
517
+ /// If `style` is specified in props, then it too is shallow-converted and included
518
+ /// in the returned Map.
519
+ Map unconvertJsProps (/* ReactElement|ReactComponent */ instance) {
520
+ var props = _dartifyJsMap (instance.props);
521
+ eventPropKeyToEventFactory.keys.forEach ((key) {
522
+ if (props.containsKey (key)) {
523
+ props[key] = unconvertJsEventHandler (props[key]);
524
+ }
525
+ });
526
+
527
+ // Convert the nested style map so it can be read by Dart code.
528
+ var style = props['style' ];
529
+ if (style != null ) {
530
+ props['style' ] = _dartifyJsMap (style);
531
+ }
532
+
533
+ return props;
534
+ }
535
+
513
536
/// Returns the original Dart handler function that, within [_convertEventHandlers] ,
514
537
/// was converted/wrapped into the function [jsConvertedEventHandler] to be passed to the JS.
515
538
///
@@ -529,7 +552,7 @@ Function unconvertJsEventHandler(Function jsConvertedEventHandler) {
529
552
_convertEventHandlers (Map args) {
530
553
var zone = Zone .current;
531
554
args.forEach ((propKey, value) {
532
- var eventFactory = _eventPropKeyToEventFactory [propKey];
555
+ var eventFactory = eventPropKeyToEventFactory [propKey];
533
556
if (eventFactory != null && value != null ) {
534
557
// Apply allowInterop here so that the function we store in [_originalEventHandlers]
535
558
// is the same one we'll retrieve from the JS props.
@@ -544,72 +567,12 @@ _convertEventHandlers(Map args) {
544
567
});
545
568
}
546
569
547
- /// A mapping from event prop keys to their respective event factories.
548
- ///
549
- /// Used in [_convertEventHandlers] for efficient event handler conversion.
550
- final Map <String , Function > _eventPropKeyToEventFactory = (() {
551
- var eventPropKeyToEventFactory = < String , Function > {
552
- // SyntheticClipboardEvent
553
- 'onCopy' : syntheticClipboardEventFactory,
554
- 'onCut' : syntheticClipboardEventFactory,
555
- 'onPaste' : syntheticClipboardEventFactory,
556
-
557
- // SyntheticKeyboardEvent
558
- 'onKeyDown' : syntheticKeyboardEventFactory,
559
- 'onKeyPress' : syntheticKeyboardEventFactory,
560
- 'onKeyUp' : syntheticKeyboardEventFactory,
561
-
562
- // SyntheticFocusEvent
563
- 'onFocus' : syntheticFocusEventFactory,
564
- 'onBlur' : syntheticFocusEventFactory,
565
-
566
- // SyntheticFormEvent
567
- 'onChange' : syntheticFormEventFactory,
568
- 'onInput' : syntheticFormEventFactory,
569
- 'onSubmit' : syntheticFormEventFactory,
570
- 'onReset' : syntheticFormEventFactory,
571
-
572
- // SyntheticMouseEvent
573
- 'onClick' : syntheticMouseEventFactory,
574
- 'onContextMenu' : syntheticMouseEventFactory,
575
- 'onDoubleClick' : syntheticMouseEventFactory,
576
- 'onDrag' : syntheticMouseEventFactory,
577
- 'onDragEnd' : syntheticMouseEventFactory,
578
- 'onDragEnter' : syntheticMouseEventFactory,
579
- 'onDragExit' : syntheticMouseEventFactory,
580
- 'onDragLeave' : syntheticMouseEventFactory,
581
- 'onDragOver' : syntheticMouseEventFactory,
582
- 'onDragStart' : syntheticMouseEventFactory,
583
- 'onDrop' : syntheticMouseEventFactory,
584
- 'onMouseDown' : syntheticMouseEventFactory,
585
- 'onMouseEnter' : syntheticMouseEventFactory,
586
- 'onMouseLeave' : syntheticMouseEventFactory,
587
- 'onMouseMove' : syntheticMouseEventFactory,
588
- 'onMouseOut' : syntheticMouseEventFactory,
589
- 'onMouseOver' : syntheticMouseEventFactory,
590
- 'onMouseUp' : syntheticMouseEventFactory,
591
-
592
- // SyntheticTouchEvent
593
- 'onTouchCancel' : syntheticTouchEventFactory,
594
- 'onTouchEnd' : syntheticTouchEventFactory,
595
- 'onTouchMove' : syntheticTouchEventFactory,
596
- 'onTouchStart' : syntheticTouchEventFactory,
597
-
598
- // SyntheticUIEvent
599
- 'onScroll' : syntheticUIEventFactory,
600
-
601
- // SyntheticWheelEvent
602
- 'onWheel' : syntheticWheelEventFactory,
603
- };
604
-
605
- // Add support for capturing variants; e.g., onClick/onClickCapture
606
- for (var key in eventPropKeyToEventFactory.keys.toList ()) {
607
- eventPropKeyToEventFactory[key + 'Capture' ] =
608
- eventPropKeyToEventFactory[key];
609
- }
610
-
611
- return eventPropKeyToEventFactory;
612
- })();
570
+ /// Returns a Dart Map copy of the JS property key-value pairs in [jsMap] .
571
+ Map _dartifyJsMap (jsMap) {
572
+ return new Map .fromIterable (_objectKeys (jsMap),
573
+ value: (key) => getProperty (jsMap, key)
574
+ );
575
+ }
613
576
614
577
/// Wrapper for [SyntheticEvent] .
615
578
SyntheticEvent syntheticEventFactory (events.SyntheticEvent e) {
0 commit comments