package com.reactnativenavigation.bridge;
import android.os.Bundle;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableMapKeySetIterator;
public class BundleConverter {
public static Bundle toBundle(ReadableMap map) {
Bundle bundle = new Bundle();
ReadableMapKeySetIterator it = map.keySetIterator();
while (it.hasNextKey()) {
String key = it.nextKey();
switch (map.getType(key)) {
case Null:
break;
case Boolean:
bundle.putBoolean(key, map.getBoolean(key));
break;
case Number:
putNumber(bundle, map, key);
break;
case String:
bundle.putString(key, map.getString(key));
break;
case Map:
bundle.putBundle(key, toBundle(map.getMap(key)));
break;
case Array:
bundle.putBundle(key, toBundle(map.getArray(key)));
break;
default:
break;
}
}
return bundle;
}
private static void putNumber(Bundle bundle, ReadableMap map, String key) {
try {
bundle.putInt(key, map.getInt(key));
} catch (Exception e) {
bundle.putDouble(key, map.getDouble(key));
}
}
public static Bundle toBundle(ReadableArray array) {
Bundle bundle = new Bundle();
for (int i = 0; i < array.size(); i++) {
String key = String.valueOf(i);
switch (array.getType(i)) {
case Null:
break;
case Boolean:
bundle.putBoolean(key, array.getBoolean(i));
break;
case Number:
bundle.putDouble(key, array.getDouble(i));
break;
case String:
bundle.putString(key, array.getString(i));
break;
case Map:
bundle.putBundle(key, toBundle(array.getMap(i)));
break;
case Array:
bundle.putBundle(key, toBundle(array.getArray(i)));
break;
default:
break;
}
}
return bundle;
}
}