Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor screen set after login #3385

Merged
merged 3 commits into from Mar 14, 2017
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file or symbol
Failed to load files and symbols.

Always

Just for now

@@ -101,15 +101,24 @@ var validBrowser = checkBrowserFeatures([
"objectfit"
]);

// Parse the given window.location and return parameters that can be used when calling
// MatrixChat.showScreen(screen, params)
function getScreenFromLocation(location) {
const fragparts = parseQsFromFragment(location);
return {
screen: fragparts.location.substring(1),
params: fragparts.params,
}
}

// Here, we do some crude URL analysis to allow
// deep-linking.
function routeUrl(location) {
if (!window.matrixChat) return;

console.log("Routing URL "+location);
var fragparts = parseQsFromFragment(location);
window.matrixChat.showScreen(fragparts.location.substring(1),
fragparts.params);
console.log("Routing URL ", location.href);
const s = getScreenFromLocation(location);
window.matrixChat.showScreen(s.screen, s.params);
}

function onHashChange(ev) {
@@ -120,22 +129,13 @@ function onHashChange(ev) {
routeUrl(window.location);
}

var loaded = false;
var lastLoadedScreen = null;

// This will be called whenever the SDK changes screens,
// so a web page can update the URL bar appropriately.
var onNewScreen = function(screen) {
console.log("newscreen "+screen);
// just remember the most recent screen while we are loading, so that the
// user doesn't see the URL bar doing a dance
if (!loaded) {
lastLoadedScreen = screen;
} else {
var hash = '#/' + screen;
lastLocationHashSet = hash;
window.location.hash = hash;
}
var hash = '#/' + screen;
lastLocationHashSet = hash;
window.location.hash = hash;
}

// We use this to work out what URL the SDK should
@@ -255,6 +255,11 @@ async function loadApp() {

var MatrixChat = sdk.getComponent('structures.MatrixChat');

// Clone the current location before MatrixChat gets a chance to change it. This
// can be used to go to the correct screen after login
const entryLocation = {};
Object.keys(window.location).forEach((k) => {entryLocation[k] = window.location[k]});

This comment has been minimized.

Copy link
@dbkr

dbkr Mar 8, 2017

Member

Object.assign is what you want :)

This comment has been minimized.

Copy link
@dbkr

dbkr Mar 8, 2017

Member

Although this doesn't seem to be used anywhere?


window.matrixChat = ReactDOM.render(
<MatrixChat
onNewScreen={onNewScreen}
@@ -265,19 +270,11 @@ async function loadApp() {
startingFragmentQueryParams={fragparts.params}
enableGuest={true}
onLoadCompleted={onLoadCompleted}
initialScreenAfterLogin={getScreenFromLocation(window.location)}
defaultDeviceDisplayName={PlatformPeg.get().getDefaultDeviceDisplayName()}
/>,
document.getElementById('matrixchat')
);

routeUrl(window.location);

// we didn't propagate screen changes to the URL bar while we were loading; do it now.
loaded = true;
if (lastLoadedScreen) {
onNewScreen(lastLoadedScreen);
lastLoadedScreen = null;
}
}
else {
console.error("Browser is missing required features.");
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.