Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import io.ionic.portals.WebVitals
private data class PortalViewState(
var fragment: PortalFragment?,
var portal: RNPortal?,
var initialContext: HashMap<String, Any>?
var initialContext: HashMap<String, Any?>?
)

internal class PortalViewManager(private val context: ReactApplicationContext) :
Expand All @@ -30,11 +30,16 @@ internal class PortalViewManager(private val context: ReactApplicationContext) :
@ReactProp(name = "portal")
fun setPortal(viewGroup: ViewGroup, portal: ReadableMap) {
val name = portal.getString("name") ?: return

// React Native 0.77 changed ReadableMap.toHashMap() from HashMap<String, Any> to HashMap<String, Any?>
// Casting is safe and keeps old versions compatible
val initialContext = portal.getMap("initialContext")?.toHashMap() as HashMap<String, Any?>?

when (fragmentMap[viewGroup.id]) {
null -> fragmentMap[viewGroup.id] = PortalViewState(
fragment = null,
portal = RNPortalManager.createPortal(portal),
initialContext = portal.getMap("initialContext")?.toHashMap()
initialContext
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,11 @@ internal object RNPortalManager {
?.let { rnArray ->
val list = mutableListOf<PortalPlugin>()
for (idx in 0 until rnArray.size()) {
rnArray.getMap(idx)
.let(PortalPlugin.Companion::fromReadableMap)
?.let(list::add)
rnArray.getMap(idx)?.let { map ->
PortalPlugin.fromReadableMap(map)?.let { plugin ->
list.add(plugin)
}
}
}
return@let list
} ?: listOf()
Expand All @@ -83,16 +85,16 @@ internal object RNPortalManager {
val list = mutableListOf<AssetMap>()

for (idx in 0 until rnArray.size()) {
rnArray.getMap(idx)
.let assetMap@{ map ->
val name = map.getString("name") ?: return@assetMap null
rnArray.getMap(idx)?.let { map ->
val assetMapName = map.getString("name") ?: return@let
list.add(
AssetMap(
name = name,
virtualPath = map.getString("virtualPath") ?: "/$name",
name = assetMapName,
virtualPath = map.getString("virtualPath") ?: "/$assetMapName",
path = map.getString("startDir") ?: ""
)
}
?.let(list::add)
)
}
}

return@let list
Expand All @@ -115,16 +117,17 @@ internal object RNPortalManager {
)
}

portalBuilder
portalBuilder
.addPlugin(PortalsPlugin::class.java)

val vitals = map.getArray("webVitals")
val maybeList = if (vitals != null) {
val size = vitals.size()
(0 until size).fold(mutableListOf<String>()) { list, next ->
val vital = vitals.getString(next)
list.add(vital)
return@fold list
vitals.getString(next)?.let { vital ->
list.add(vital)
}
list
}
} else {
null
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ionic/portals-react-native",
"version": "0.8.2",
"version": "0.8.3",
"description": "Portals for React Native",
"main": "lib/commonjs/index",
"module": "lib/module/index",
Expand Down