• Robert Knight's avatar
    Initialize route state in store before fetching groups · 25358a00
    Robert Knight authored
    The behavior of `GroupsService.load` varies depending on whether the current
    route is the sidebar or not. During sidebar startup, `GroupsService.load` was
    called before `RouterService.sync`. As a result the route was `null` during the
    initial call to `GroupsService._loadGroupsForUserAndDocument` and hence the
    service did not execute the sidebar-specific code path to wait for the document
    URI to become known at that point.
    
    During the first `GroupsService._loadGroupsForUserAndDocument` call,
    `_setupAutoReload` would set up a watcher that would react to changes in
    `store.mainURI()`. This watcher would fire after the main guest frame connects.
    Depending on when that happens, requests from the initial `GroupsService.load`
    request could still be in-flight. If the second set of groups API calls
    completed first, followed by the first set of groups API calls, then the final
    set of loaded groups might reflect the _first_ call to `GroupsService.load`,
    where the document URI was not used (because the route was unknown).
    
    This commit fixes the issue by re-arranging the sidebar startup sequence to
    initialize the router service before other services.
    
    Fixes https://github.com/hypothesis/support/issues/79
    25358a00
index.tsx 7.29 KB