Skip to content

Commit

Permalink
setUrlFromNavRoute can be static
Browse files Browse the repository at this point in the history
  • Loading branch information
handstandsam committed Jan 24, 2025
1 parent e03f5ad commit 7f45498
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 38 deletions.
2 changes: 1 addition & 1 deletion invert-report/src/jsMain/kotlin/MainComposables.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ fun setupNavigation(routeManager: NavRouteManager, navRouteRepo: NavRouteRepo) {
val javaScriptNavigationAndHistory = JavaScriptNavigationAndHistory(routeManager, navRouteRepo)
// Update Route on Every Change
navRouteRepo.navRoute.onEach {
javaScriptNavigationAndHistory.setUrlFromNavRoute(it)
JavaScriptNavigationAndHistory.setUrlFromNavRoute(it)
}.launchIn(GlobalScope)

// Register for Browser Back/Forward Button Events
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,43 @@ class JavaScriptNavigationAndHistory(
keysForObject(this).forEach { map[it] = this.get(it) }
return map
}

fun setUrlFromNavRoute(navRoute: NavRoute) {
val newUrl = URL(window.location.toString())

val currUrlParamsMap = mutableMapOf<String, String>().also { urlParamsMap ->
keysForObject(newUrl.searchParams).forEach { key ->
newUrl.searchParams.get(key)?.let { value ->
if (value.isNotBlank()) {
urlParamsMap[key] = value
}
}
}
}

val newNavRouteParamsMap = navRoute.toSearchParams()
if (currUrlParamsMap != newNavRouteParamsMap) {
// Clear current params from Current URL Search Params
newUrl.search = ""

// Populate Search Params with key/values
newNavRouteParamsMap.forEach { (key, value) ->
if (value.isNotBlank()) {
newUrl.searchParams.set(key, value)
}
}

// Convert params to JSON
val jsonState = InvertJson.encodeToString(HistoryState.serializer(), HistoryState(navRoute.toSearchParams()))
val isNewPage =
currUrlParamsMap[BaseNavRoute.PAGE_ID_PARAM] != newNavRouteParamsMap[BaseNavRoute.PAGE_ID_PARAM]
if (isNewPage) {
window.history.pushState(jsonState, "", newUrl.toString())
} else {
window.history.replaceState(jsonState, "", newUrl.toString())
}
}
}
}

fun registerForPopstate() {
Expand All @@ -51,41 +88,4 @@ class JavaScriptNavigationAndHistory(
}
}, false)
}

fun setUrlFromNavRoute(navRoute: NavRoute) {
val newUrl = URL(window.location.toString())

val currUrlParamsMap = mutableMapOf<String, String>().also { urlParamsMap ->
keysForObject(newUrl.searchParams).forEach { key ->
newUrl.searchParams.get(key)?.let { value ->
if (value.isNotBlank()) {
urlParamsMap[key] = value
}
}
}
}

val newNavRouteParamsMap = navRoute.toSearchParams()
if (currUrlParamsMap != newNavRouteParamsMap) {
// Clear current params from Current URL Search Params
newUrl.search = ""

// Populate Search Params with key/values
newNavRouteParamsMap.forEach { (key, value) ->
if (value.isNotBlank()) {
newUrl.searchParams.set(key, value)
}
}

// Convert params to JSON
val jsonState = InvertJson.encodeToString(HistoryState.serializer(), HistoryState(navRoute.toSearchParams()))
val isNewPage =
currUrlParamsMap[BaseNavRoute.PAGE_ID_PARAM] != newNavRouteParamsMap[BaseNavRoute.PAGE_ID_PARAM]
if (isNewPage) {
window.history.pushState(jsonState, "", newUrl.toString())
} else {
window.history.replaceState(jsonState, "", newUrl.toString())
}
}
}
}

0 comments on commit 7f45498

Please sign in to comment.