private bool TryMakeBubblingEvent(ViewManagerExportedBubblingEventTypeConstantAttribute attribute, MemberInfo memberInfo, Type memberType, IJSValueWriter constantWriter, out Delegate memberValue)
        {
            if (null != attribute && null != memberInfo && TryGetEventDataType(memberType, out Type eventDataType))
            {
                var eventName   = attribute.EventName ?? "top" + memberInfo.Name;
                var bubbleName  = attribute.BubbleCallbackName ?? "on" + memberInfo.Name;
                var captureName = attribute.CaptureCallbackName ?? bubbleName + "Capture";

                constantWriter.WritePropertyName(eventName);

                constantWriter.WriteObjectBegin();

                constantWriter.WritePropertyName("phasedRegistrationNames");
                constantWriter.WriteObjectBegin();
                constantWriter.WriteObjectProperty("bubbled", bubbleName);
                constantWriter.WriteObjectProperty("captured", captureName);
                constantWriter.WriteObjectEnd();

                constantWriter.WriteObjectEnd();

                memberValue = MakeEventDelegate(eventName, memberType, eventDataType);

                return(true);
            }

            memberValue = default(Delegate);

            return(false);
        }
Esempio n. 2
0
 public static void WriteObject(IJSValueWriter writer, IEnumerable <KeyValuePair <string, JSValue> > value)
 {
     writer.WriteObjectBegin();
     foreach (var keyValue in value)
     {
         writer.WritePropertyName(keyValue.Key);
         keyValue.Value.WriteTo(writer);
     }
     writer.WriteObjectEnd();
 }
 // Writing discriminating union is simpler than reading.
 public static void WriteValue(this IJSValueWriter writer, OneOf2 <T2Extra, R2D2Extra> value)
 {
     writer.WriteObjectBegin();
     if (value.TryGet(out T2Extra t2))
     {
         writer.WriteObjectProperty("Kind", RobotModel.T2);
         writer.WriteObjectProperties(t2);
     }
     else if (value.TryGet(out R2D2Extra r2d2))
     {
         writer.WriteObjectProperty("Kind", RobotModel.R2D2);
         writer.WriteObjectProperties(r2d2);
     }
     writer.WriteObjectEnd();
 }
Esempio n. 4
0
 public static void WriteValue <T>(this IJSValueWriter writer, IEnumerable <KeyValuePair <string, T> > value)
 {
     if (value != null)
     {
         writer.WriteObjectBegin();
         foreach (var pair in value)
         {
             writer.WriteObjectProperty(pair.Key, pair.Value);
         }
         writer.WriteObjectEnd();
     }
     else
     {
         writer.WriteNull();
     }
 }
Esempio n. 5
0
        public static void WriteError(
            IJSValueWriter writer,
            string code,
            string message,
            IReadOnlyDictionary <string, JSValue> userInfo,
            string stackTrace)
        {
            writer.WriteArrayBegin();
            {
                writer.WriteObjectBegin();
                {
                    writer.WritePropertyName(ReactErrorConstants.Code);
                    writer.WriteString(code ?? ReactErrorConstants.DefaultCode);

                    writer.WritePropertyName(ReactErrorConstants.Message);
                    writer.WriteString(message ?? ReactErrorConstants.DefaultMessage);

                    // For consistency with iOS ensure userInfo key exists, even if we null it.
                    // iOS: /React/Base/RCTUtils.m -> RCTJSErrorFromCodeMessageAndNSError
                    writer.WritePropertyName(ReactErrorConstants.UserInfo);
                    if (userInfo == null)
                    {
                        writer.WriteNull();
                    }
                    else
                    {
                        writer.WriteValue(userInfo);
                    }

                    // Attach a nativeStackWindows string if an exception was passed.
                    // This matches iOS behavior - iOS adds a `nativeStackIOS` property
                    // iOS: /React/Base/RCTUtils.m -> RCTJSErrorFromCodeMessageAndNSError
                    writer.WritePropertyName(ReactErrorConstants.NativeStack);
                    writer.WriteString(stackTrace ?? string.Empty);
                }
                writer.WriteObjectEnd();
            }
            writer.WriteArrayEnd();
        }
 // Writing RobotInfo value. It could be generated instead.
 public static void WriteValue(this IJSValueWriter writer, RobotInfo value)
 {
     if (value != null)
     {
         writer.WriteObjectBegin();
         writer.WriteObjectProperty(nameof(value.Model), value.Model);
         writer.WriteObjectProperty(nameof(value.Name), value.Name);
         writer.WriteObjectProperty(nameof(value.Age), value.Age);
         writer.WriteObjectProperty(nameof(value.Shape), value.Shape);
         writer.WriteObjectProperty(nameof(value.Shape2), value.Shape2);
         writer.WriteObjectProperty(nameof(value.Shape3), value.Shape3);
         writer.WriteObjectProperty(nameof(value.Steps), value.Steps);
         writer.WriteObjectProperty(nameof(value.Dimensions), value.Dimensions);
         writer.WriteObjectProperty(nameof(value.Badges), value.Badges);
         writer.WriteObjectProperty(nameof(value.Tools), value.Tools);
         writer.WriteObjectProperty(nameof(value.Path), value.Path);
         writer.WriteObjectProperty(nameof(value.Extra), value.Extra);
         writer.WriteObjectEnd();
     }
     else
     {
         writer.WriteNull();
     }
 }