Make Screens an enum
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
e06b5f8cf3
commit
f64929187a
1 changed files with 179 additions and 147 deletions
|
@ -103,6 +103,22 @@ export enum Views {
|
||||||
SOFT_LOGOUT = 9,
|
SOFT_LOGOUT = 9,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum Screens {
|
||||||
|
REGISTER = "register",
|
||||||
|
LOGIN = "login",
|
||||||
|
FORGOT_PASSWORD = "forgot_password",
|
||||||
|
SOFT_LOGOUT = "soft_logout",
|
||||||
|
NEW = "new", // new room
|
||||||
|
SETTINGS = "settings",
|
||||||
|
WELCOME = "welcome",
|
||||||
|
HOME = "home",
|
||||||
|
START = "start",
|
||||||
|
DIRECTORY = "directory",
|
||||||
|
GROUPS = "groups",
|
||||||
|
COMPLETE_SECURITY = "complete_security",
|
||||||
|
POST_REGISTRATION = "post_registration",
|
||||||
|
}
|
||||||
|
|
||||||
// Actions that are redirected through the onboarding process prior to being
|
// Actions that are redirected through the onboarding process prior to being
|
||||||
// re-dispatched. NOTE: some actions are non-trivial and would require
|
// re-dispatched. NOTE: some actions are non-trivial and would require
|
||||||
// re-factoring to be included in this list in future.
|
// re-factoring to be included in this list in future.
|
||||||
|
@ -114,7 +130,7 @@ const ONBOARDING_FLOW_STARTERS = [
|
||||||
];
|
];
|
||||||
|
|
||||||
interface IScreen {
|
interface IScreen {
|
||||||
screen: string;
|
screen: Screens | string;
|
||||||
params?: object;
|
params?: object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,9 +339,9 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
// the old creds, but rather go straight to the relevant page
|
// the old creds, but rather go straight to the relevant page
|
||||||
const firstScreen = this.screenAfterLogin ? this.screenAfterLogin.screen : null;
|
const firstScreen = this.screenAfterLogin ? this.screenAfterLogin.screen : null;
|
||||||
|
|
||||||
if (firstScreen === 'login' ||
|
if (firstScreen === Screens.LOGIN ||
|
||||||
firstScreen === 'register' ||
|
firstScreen === Screens.REGISTER ||
|
||||||
firstScreen === 'forgot_password') {
|
firstScreen === Screens.FORGOT_PASSWORD) {
|
||||||
this.showScreenAfterLogin();
|
this.showScreenAfterLogin();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -539,7 +555,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
this.setStateForNewView({
|
this.setStateForNewView({
|
||||||
view: Views.LOGIN,
|
view: Views.LOGIN,
|
||||||
});
|
});
|
||||||
this.notifyNewScreen('login');
|
this.notifyNewScreen(Screens.LOGIN);
|
||||||
ThemeController.isLogin = true;
|
ThemeController.isLogin = true;
|
||||||
this.themeWatcher.recheck();
|
this.themeWatcher.recheck();
|
||||||
break;
|
break;
|
||||||
|
@ -552,7 +568,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
this.setStateForNewView({
|
this.setStateForNewView({
|
||||||
view: Views.FORGOT_PASSWORD,
|
view: Views.FORGOT_PASSWORD,
|
||||||
});
|
});
|
||||||
this.notifyNewScreen('forgot_password');
|
this.notifyNewScreen(Screens.FORGOT_PASSWORD);
|
||||||
break;
|
break;
|
||||||
case 'start_chat':
|
case 'start_chat':
|
||||||
createRoom({
|
createRoom({
|
||||||
|
@ -803,7 +819,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
this.setStateForNewView(newState);
|
this.setStateForNewView(newState);
|
||||||
ThemeController.isLogin = true;
|
ThemeController.isLogin = true;
|
||||||
this.themeWatcher.recheck();
|
this.themeWatcher.recheck();
|
||||||
this.notifyNewScreen('register');
|
this.notifyNewScreen(Screens.REGISTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Move to RoomViewStore
|
// TODO: Move to RoomViewStore
|
||||||
|
@ -1282,7 +1298,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
* Called when the session is logged out
|
* Called when the session is logged out
|
||||||
*/
|
*/
|
||||||
private onLoggedOut() {
|
private onLoggedOut() {
|
||||||
this.notifyNewScreen('login');
|
this.notifyNewScreen(Screens.LOGIN);
|
||||||
this.setStateForNewView({
|
this.setStateForNewView({
|
||||||
view: Views.LOGIN,
|
view: Views.LOGIN,
|
||||||
ready: false,
|
ready: false,
|
||||||
|
@ -1299,7 +1315,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
* Called when the session is softly logged out
|
* Called when the session is softly logged out
|
||||||
*/
|
*/
|
||||||
private onSoftLogout() {
|
private onSoftLogout() {
|
||||||
this.notifyNewScreen('soft_logout');
|
this.notifyNewScreen(Screens.SOFT_LOGOUT);
|
||||||
this.setStateForNewView({
|
this.setStateForNewView({
|
||||||
view: Views.SOFT_LOGOUT,
|
view: Views.SOFT_LOGOUT,
|
||||||
ready: false,
|
ready: false,
|
||||||
|
@ -1588,152 +1604,168 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
showScreen(screen: string, params?: {[key: string]: any}) {
|
showScreen(screen: Screens | string, params?: {[key: string]: any}) {
|
||||||
if (screen === 'register') {
|
switch (screen) {
|
||||||
dis.dispatch({
|
case Screens.REGISTER:
|
||||||
action: 'start_registration',
|
dis.dispatch({
|
||||||
params: params,
|
action: 'start_registration',
|
||||||
});
|
params: params,
|
||||||
} else if (screen === 'login') {
|
});
|
||||||
dis.dispatch({
|
break;
|
||||||
action: 'start_login',
|
case Screens.LOGIN:
|
||||||
params: params,
|
|
||||||
});
|
|
||||||
} else if (screen === 'forgot_password') {
|
|
||||||
dis.dispatch({
|
|
||||||
action: 'start_password_recovery',
|
|
||||||
params: params,
|
|
||||||
});
|
|
||||||
} else if (screen === 'soft_logout') {
|
|
||||||
if (MatrixClientPeg.get() && MatrixClientPeg.get().getUserId() && !Lifecycle.isSoftLogout()) {
|
|
||||||
// Logged in - visit a room
|
|
||||||
this.viewLastRoom();
|
|
||||||
} else {
|
|
||||||
// Ultimately triggers soft_logout if needed
|
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'start_login',
|
action: 'start_login',
|
||||||
params: params,
|
params: params,
|
||||||
});
|
});
|
||||||
}
|
break;
|
||||||
} else if (screen === 'new') {
|
case Screens.FORGOT_PASSWORD:
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'view_create_room',
|
action: 'start_password_recovery',
|
||||||
});
|
params: params,
|
||||||
} else if (screen === 'settings') {
|
});
|
||||||
dis.dispatch({
|
break;
|
||||||
action: 'view_user_settings',
|
case Screens.SOFT_LOGOUT:
|
||||||
});
|
if (MatrixClientPeg.get() && MatrixClientPeg.get().getUserId() && !Lifecycle.isSoftLogout()) {
|
||||||
} else if (screen === 'welcome') {
|
// Logged in - visit a room
|
||||||
dis.dispatch({
|
this.viewLastRoom();
|
||||||
action: 'view_welcome_page',
|
} else {
|
||||||
});
|
// Ultimately triggers soft_logout if needed
|
||||||
} else if (screen === 'home') {
|
dis.dispatch({
|
||||||
dis.dispatch({
|
action: 'start_login',
|
||||||
action: 'view_home_page',
|
params: params,
|
||||||
});
|
});
|
||||||
} else if (screen === 'start') {
|
}
|
||||||
this.showScreen('home');
|
break;
|
||||||
dis.dispatch({
|
case Screens.NEW:
|
||||||
action: 'require_registration',
|
dis.dispatch({
|
||||||
});
|
action: 'view_create_room',
|
||||||
} else if (screen === 'directory') {
|
});
|
||||||
dis.dispatch({
|
break;
|
||||||
action: 'view_room_directory',
|
case Screens.SETTINGS:
|
||||||
});
|
dis.dispatch({
|
||||||
} else if (screen === 'groups') {
|
action: 'view_user_settings',
|
||||||
dis.dispatch({
|
});
|
||||||
action: 'view_my_groups',
|
break;
|
||||||
});
|
case Screens.WELCOME:
|
||||||
} else if (screen === 'complete_security') {
|
dis.dispatch({
|
||||||
dis.dispatch({
|
action: 'view_welcome_page',
|
||||||
action: 'start_complete_security',
|
});
|
||||||
});
|
break;
|
||||||
} else if (screen === 'post_registration') {
|
case Screens.HOME:
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'start_post_registration',
|
action: 'view_home_page',
|
||||||
});
|
});
|
||||||
} else if (screen.indexOf('room/') === 0) {
|
break;
|
||||||
// Rooms can have the following formats:
|
case Screens.START:
|
||||||
// #room_alias:domain or !opaque_id:domain
|
this.showScreen(Screens.HOME);
|
||||||
const room = screen.substring(5);
|
dis.dispatch({
|
||||||
const domainOffset = room.indexOf(':') + 1; // 0 in case room does not contain a :
|
action: 'require_registration',
|
||||||
let eventOffset = room.length;
|
});
|
||||||
// room aliases can contain slashes only look for slash after domain
|
break;
|
||||||
if (room.substring(domainOffset).indexOf('/') > -1) {
|
case Screens.DIRECTORY:
|
||||||
eventOffset = domainOffset + room.substring(domainOffset).indexOf('/');
|
dis.dispatch({
|
||||||
}
|
action: 'view_room_directory',
|
||||||
const roomString = room.substring(0, eventOffset);
|
});
|
||||||
let eventId = room.substring(eventOffset + 1); // empty string if no event id given
|
break;
|
||||||
|
case Screens.GROUPS:
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'view_my_groups',
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Screens.COMPLETE_SECURITY:
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'start_complete_security',
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Screens.POST_REGISTRATION:
|
||||||
|
dis.dispatch({
|
||||||
|
action: 'start_post_registration',
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (screen.startsWith('room/')) {
|
||||||
|
// Rooms can have the following formats:
|
||||||
|
// #room_alias:domain or !opaque_id:domain
|
||||||
|
const room = screen.substring(5);
|
||||||
|
const domainOffset = room.indexOf(':') + 1; // 0 in case room does not contain a :
|
||||||
|
let eventOffset = room.length;
|
||||||
|
// room aliases can contain slashes only look for slash after domain
|
||||||
|
if (room.substring(domainOffset).indexOf('/') > -1) {
|
||||||
|
eventOffset = domainOffset + room.substring(domainOffset).indexOf('/');
|
||||||
|
}
|
||||||
|
const roomString = room.substring(0, eventOffset);
|
||||||
|
let eventId = room.substring(eventOffset + 1); // empty string if no event id given
|
||||||
|
|
||||||
// Previously we pulled the eventID from the segments in such a way
|
// Previously we pulled the eventID from the segments in such a way
|
||||||
// where if there was no eventId then we'd get undefined. However, we
|
// where if there was no eventId then we'd get undefined. However, we
|
||||||
// now do a splice and join to handle v3 event IDs which results in
|
// now do a splice and join to handle v3 event IDs which results in
|
||||||
// an empty string. To maintain our potential contract with the rest
|
// an empty string. To maintain our potential contract with the rest
|
||||||
// of the app, we coerce the eventId to be undefined where applicable.
|
// of the app, we coerce the eventId to be undefined where applicable.
|
||||||
if (!eventId) eventId = undefined;
|
if (!eventId) eventId = undefined;
|
||||||
|
|
||||||
// TODO: Handle encoded room/event IDs: https://github.com/vector-im/riot-web/issues/9149
|
// TODO: Handle encoded room/event IDs: https://github.com/vector-im/riot-web/issues/9149
|
||||||
|
|
||||||
// FIXME: sort_out caseConsistency
|
// FIXME: sort_out caseConsistency
|
||||||
const thirdPartyInvite = {
|
const thirdPartyInvite = {
|
||||||
inviteSignUrl: params.signurl,
|
inviteSignUrl: params.signurl,
|
||||||
invitedEmail: params.email,
|
invitedEmail: params.email,
|
||||||
};
|
};
|
||||||
const oobData = {
|
const oobData = {
|
||||||
name: params.room_name,
|
name: params.room_name,
|
||||||
avatarUrl: params.room_avatar_url,
|
avatarUrl: params.room_avatar_url,
|
||||||
inviterName: params.inviter_name,
|
inviterName: params.inviter_name,
|
||||||
};
|
};
|
||||||
|
|
||||||
// on our URLs there might be a ?via=matrix.org or similar to help
|
// on our URLs there might be a ?via=matrix.org or similar to help
|
||||||
// joins to the room succeed. We'll pass these through as an array
|
// joins to the room succeed. We'll pass these through as an array
|
||||||
// to other levels. If there's just one ?via= then params.via is a
|
// to other levels. If there's just one ?via= then params.via is a
|
||||||
// single string. If someone does something like ?via=one.com&via=two.com
|
// single string. If someone does something like ?via=one.com&via=two.com
|
||||||
// then params.via is an array of strings.
|
// then params.via is an array of strings.
|
||||||
let via = [];
|
let via = [];
|
||||||
if (params.via) {
|
if (params.via) {
|
||||||
if (typeof(params.via) === 'string') via = [params.via];
|
if (typeof(params.via) === 'string') via = [params.via];
|
||||||
else via = params.via;
|
else via = params.via;
|
||||||
}
|
}
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
action: 'view_room',
|
action: 'view_room',
|
||||||
event_id: eventId,
|
event_id: eventId,
|
||||||
via_servers: via,
|
via_servers: via,
|
||||||
// If an event ID is given in the URL hash, notify RoomViewStore to mark
|
// If an event ID is given in the URL hash, notify RoomViewStore to mark
|
||||||
// it as highlighted, which will propagate to RoomView and highlight the
|
// it as highlighted, which will propagate to RoomView and highlight the
|
||||||
// associated EventTile.
|
// associated EventTile.
|
||||||
highlighted: Boolean(eventId),
|
highlighted: Boolean(eventId),
|
||||||
third_party_invite: thirdPartyInvite,
|
third_party_invite: thirdPartyInvite,
|
||||||
oob_data: oobData,
|
oob_data: oobData,
|
||||||
room_alias: undefined,
|
room_alias: undefined,
|
||||||
room_id: undefined,
|
room_id: undefined,
|
||||||
};
|
};
|
||||||
if (roomString[0] === '#') {
|
if (roomString[0] === '#') {
|
||||||
payload.room_alias = roomString;
|
payload.room_alias = roomString;
|
||||||
} else {
|
} else {
|
||||||
payload.room_id = roomString;
|
payload.room_id = roomString;
|
||||||
}
|
}
|
||||||
|
|
||||||
dis.dispatch(payload);
|
dis.dispatch(payload);
|
||||||
} else if (screen.indexOf('user/') === 0) {
|
} else if (screen.startsWith('user/')) {
|
||||||
const userId = screen.substring(5);
|
const userId = screen.substring(5);
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'view_user_info',
|
action: 'view_user_info',
|
||||||
userId: userId,
|
userId: userId,
|
||||||
subAction: params.action,
|
subAction: params.action,
|
||||||
});
|
});
|
||||||
} else if (screen.indexOf('group/') === 0) {
|
} else if (screen.startsWith('group/')) {
|
||||||
const groupId = screen.substring(6);
|
const groupId = screen.substring(6);
|
||||||
|
|
||||||
// TODO: Check valid group ID
|
// TODO: Check valid group ID
|
||||||
|
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'view_group',
|
action: 'view_group',
|
||||||
group_id: groupId,
|
group_id: groupId,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
console.info("Ignoring showScreen for '%s'", screen);
|
console.info("Ignoring showScreen for '%s'", screen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1800,15 +1832,15 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
onRegisterClick = () => {
|
onRegisterClick = () => {
|
||||||
this.showScreen("register");
|
this.showScreen(Screens.REGISTER);
|
||||||
};
|
};
|
||||||
|
|
||||||
onLoginClick = () => {
|
onLoginClick = () => {
|
||||||
this.showScreen("login");
|
this.showScreen(Screens.LOGIN);
|
||||||
};
|
};
|
||||||
|
|
||||||
onForgotPasswordClick = () => {
|
onForgotPasswordClick = () => {
|
||||||
this.showScreen("forgot_password");
|
this.showScreen(Screens.FORGOT_PASSWORD);
|
||||||
};
|
};
|
||||||
|
|
||||||
onRegisterFlowComplete = (credentials: object, password: string) => {
|
onRegisterFlowComplete = (credentials: object, password: string) => {
|
||||||
|
@ -1825,7 +1857,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
this.setState({
|
this.setState({
|
||||||
view: Views.LOGGED_IN,
|
view: Views.LOGGED_IN,
|
||||||
});
|
});
|
||||||
this.showScreen("settings");
|
this.showScreen(Screens.SETTINGS);
|
||||||
};
|
};
|
||||||
|
|
||||||
onVersion(current: string, latest: string, releaseNotes?: string) {
|
onVersion(current: string, latest: string, releaseNotes?: string) {
|
||||||
|
|
Loading…
Reference in a new issue