Fix compact and reloading

This commit is contained in:
Joey Yakimowich-Payne 2020-02-17 21:01:47 -07:00 • committed by Andreas Rumpf
commit 433a21aa87
2 changed files with 19 additions and 14 deletions

View file

@ -32,36 +32,41 @@ when defined(js):
var var
state = newState() state = newState()
proc getStatus(logout: bool=false) proc getStatus(logout=false, reload=false)
proc newState(): State = proc newState(): State =
State( State(
data: none[UserStatus](), data: none[UserStatus](),
loading: false, loading: false,
status: Http200, status: Http200,
loginModal: newLoginModal( loginModal: newLoginModal(
() => (state.lastUpdate = fromUnix(0); getStatus(); window.location.reload()), () => (state.lastUpdate = fromUnix(0); getStatus(reload=true)),
() => state.signupModal.show() () => state.signupModal.show()
), ),
signupModal: newSignupModal( signupModal: newSignupModal(
() => (state.lastUpdate = fromUnix(0); getStatus(); window.location.reload()), () => (state.lastUpdate = fromUnix(0); getStatus(reload=true)),
() => state.loginModal.show() () => state.loginModal.show()
), ),
userMenu: newUserMenu( userMenu: newUserMenu(
() => (state.lastUpdate = fromUnix(0); getStatus(logout=true); window.location.reload()) () => (state.lastUpdate = fromUnix(0); getStatus(logout=true, reload=true))
) )
) )
proc onStatus(httpStatus: int, response: kstring) = proc onStatus(reload: bool=false): proc (httpStatus: int, response: kstring) =
state.loading = false result =
state.status = httpStatus.HttpCode proc (httpStatus: int, response: kstring) =
if state.status != Http200: return state.loading = false
state.status = httpStatus.HttpCode
if state.status != Http200: return
let parsed = parseJson($response) let parsed = parseJson($response)
state.data = some(to(parsed, UserStatus)) state.data = some(to(parsed, UserStatus))
state.lastUpdate = getTime() state.lastUpdate = getTime()
proc getStatus(logout: bool=false) = if reload:
window.location.reload()
proc getStatus(logout=false, reload=false) =
if state.loading: return if state.loading: return
let diff = getTime() - state.lastUpdate let diff = getTime() - state.lastUpdate
if diff.inMinutes < 5: if diff.inMinutes < 5:
@ -69,7 +74,7 @@ when defined(js):
state.loading = true state.loading = true
let uri = makeUri("status.json", [("logout", $logout)]) let uri = makeUri("status.json", [("logout", $logout)])
ajaxGet(uri, @[], onStatus) ajaxGet(uri, @[], onStatus(reload))
proc getLoggedInUser*(): Option[User] = proc getLoggedInUser*(): Option[User] =
state.data.map(x => x.user).flatten state.data.map(x => x.user).flatten

View file

@ -65,7 +65,7 @@ when defined(js):
tdiv(): tdiv():
label(class="d-inline-block form-label"): label(class="d-inline-block form-label"):
text "Category" text "Category"
render(state.categoryPicker, currentUser) render(state.categoryPicker, currentUser, compact=false)
renderContent(state.replyBox, none[Thread](), none[Post]()) renderContent(state.replyBox, none[Thread](), none[Post]())
tdiv(class="footer"): tdiv(class="footer"):