Skip to content

Commit

Permalink
Fix allowing user to change email (#959)
Browse files Browse the repository at this point in the history
* Update signature of getCurrentUser() to return undefined instead of null

* Fix user settings to allow users to change their email address
  • Loading branch information
johnthagen authored Jan 29, 2021
1 parent c8dcb13 commit 6d86398
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 15 deletions.
4 changes: 2 additions & 2 deletions src/backend/localStorage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ export function setAvatar(src: string) {
localStorage.setItem(LocalStorageKey.Avatar, src);
}

export function getCurrentUser(): User | null {
export function getCurrentUser(): User | undefined {
const userString = localStorage.getItem(LocalStorageKey.User);
return userString ? JSON.parse(userString) : null;
return userString ? JSON.parse(userString) : undefined;
}
export function setCurrentUser(user: User) {
const userString = JSON.stringify(user);
Expand Down
2 changes: 1 addition & 1 deletion src/backend/tests/localStorage.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ afterAll(() => {

function expectAllEmpty() {
expect(LocalStorage.getAvatar()).toEqual("");
expect(LocalStorage.getCurrentUser()).toEqual(null);
expect(LocalStorage.getCurrentUser()).toEqual(undefined);
expect(LocalStorage.getMergeDupsBlacklist()).toEqual({});
expect(LocalStorage.getProjectId()).toEqual("");
expect(LocalStorage.getUserId()).toEqual("");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ let mockGoalData: MergeDupData;
const createMockStore = configureMockStore([thunk]);
let mockStore: MockStoreEnhanced<unknown, {}>;
let oldProjectId: string;
let oldUser: User | null;
let oldUser: User | undefined;

const mockProjectId = "123";
const mockUserEditId = "456";
Expand Down
3 changes: 1 addition & 2 deletions src/components/Login/AuthHeaders.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { getCurrentUser } from "backend/localStorage";
import { User } from "types/user";

export interface AuthHeader {
authorization?: string;
Expand All @@ -15,7 +14,7 @@ export interface AuthHeader {
*/

export default function authHeader(): AuthHeader {
const user: User | null = getCurrentUser();
const user = getCurrentUser();
if (user && user.token) {
return { authorization: "Bearer " + user.token };
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/components/Login/LoginActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export function loginReset(): UserAction {

export function logoutAndResetStore() {
return (dispatch: StoreStateDispatch) => {
const user: User | null = LocalStorage.getCurrentUser();
const user = LocalStorage.getCurrentUser();
if (user) {
dispatch(logout(user.username));
}
Expand Down
2 changes: 1 addition & 1 deletion src/components/Login/tests/AuthHeaders.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as LocalStorage from "backend/localStorage";
import { User } from "types/user";
import authHeader from "components/Login/AuthHeaders";

let oldUser: User | null;
let oldUser: User | undefined;

beforeAll(() => {
oldUser = LocalStorage.getCurrentUser();
Expand Down
17 changes: 11 additions & 6 deletions src/components/UserSettings/UserSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ class UserSettings extends React.Component<
> {
constructor(props: LocalizeContextProps) {
super(props);
const potentialUser: User | null = getCurrentUser();
const user: User = potentialUser ? potentialUser : new User("", "", "");
const potentialUser = getCurrentUser();
const user = potentialUser ? potentialUser : new User("", "", "");
this.state = {
user: user,
name: user.name,
Expand All @@ -123,15 +123,20 @@ class UserSettings extends React.Component<
this.setState({ [field]: value } as Pick<UserSettingsState, K>);
}

isEmailOkay() {
async isEmailOkay(): Promise<boolean> {
const emailUnchanged =
this.state.email.toLowerCase() === this.state.user.email.toLowerCase();
return emailUnchanged || !isEmailTaken(this.state.email);

if (emailUnchanged) {
return true;
}

return !(await isEmailTaken(this.state.email));
}

onSubmit(e: React.FormEvent<HTMLFormElement>) {
async onSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
if (this.isEmailOkay()) {
if (await this.isEmailOkay()) {
const newUser: User = this.state.user;
newUser.name = this.state.name;
newUser.phone = this.state.phone;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ const MOCK_STATE = {
};

let oldProjectId: string;
let oldUser: User | null;
let oldUser: User | undefined;
const mockProjectId = "123";
const mockUserEditId = "456";
const mockUserId = "789";
Expand Down

0 comments on commit 6d86398

Please sign in to comment.