Skip to content
This repository was archived by the owner on Apr 5, 2024. It is now read-only.

Commit 8d4f7a7

Browse files
committed
Added redux stuff for edit user
1 parent 0c0c327 commit 8d4f7a7

File tree

10 files changed

+130
-31
lines changed

10 files changed

+130
-31
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import Axios, { AxiosResponse } from "axios";
2+
3+
import { hostname, userPath } from "./api";
4+
5+
import { UserState } from "../redux/actions/userTypes";
6+
import store from "../redux/store";
7+
import {updateUser} from "../redux/actions/user";
8+
9+
export const changeUserInformation = (userWithNewInformation: any): Promise<UserState> => {
10+
console.log("[userInformations] changeUserInformations: user: ", userWithNewInformation);
11+
return new Promise<any>((resolve, reject) => {
12+
return Axios.put<any>(`${hostname}${userPath}/${userWithNewInformation.userId}/edit`, userWithNewInformation)
13+
.then((response: AxiosResponse<UserState>) => {
14+
console.log("answer: ", response.data)
15+
store.dispatch(updateUser(response.data));
16+
})
17+
.catch((error) => {
18+
console.log(error);
19+
reject(error);
20+
});
21+
})
22+
23+
};
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
import {ADD_USER, AddUser, UserState} from "./userTypes";
1+
import {ADD_USER, AddUser, UPDATE_USER, UpdateUser, UserState} from "./userTypes";
22

33
export const addUser = (content: UserState):AddUser => ({
44
type: ADD_USER,
55
payload: content
66
});
7+
8+
export const updateUser = (content: UserState):UpdateUser => ({
9+
type: UPDATE_USER,
10+
payload: content
11+
})

src/background/redux/actions/userTypes.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export const ADD_USER = "ADD_USER";
2+
export const UPDATE_USER = "UPDATE_USER";
23

34
export interface UserState {
45
id: number | null;
@@ -11,4 +12,9 @@ export interface AddUser {
1112
payload: UserState;
1213
}
1314

14-
export type UserActionTypes = AddUser;
15+
export interface UpdateUser {
16+
type: typeof UPDATE_USER;
17+
payload: UserState;
18+
}
19+
20+
export type UserActionTypes = AddUser | UpdateUser;
Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
1-
import { ADD_USER, UserActionTypes, UserState } from "../actions/userTypes";
1+
import {ADD_USER, UPDATE_USER, UserActionTypes, UserState} from "../actions/userTypes";
22

33
const initialState: UserState = {
4-
groups: [],
5-
id: null,
6-
username: null
4+
groups: [],
5+
id: null,
6+
username: null
77
};
88

99
export default function users(state = initialState, action: UserActionTypes) {
10-
switch (action.type) {
11-
case ADD_USER: {
12-
console.log("[Redux] adding user");
13-
return action.payload;
10+
switch (action.type) {
11+
case ADD_USER: {
12+
console.log("[Redux] adding user");
13+
return action.payload;
14+
}
15+
case UPDATE_USER: {
16+
console.log("[Redux] updating user");
17+
return action.payload;
18+
}
19+
20+
default:
21+
return state;
1422
}
15-
default:
16-
return state;
17-
}
1823
}

src/components/Router/Router.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import {Redirect, Route, Switch} from "react-router-dom";
33
import Health from "../pages/Health";
44
import Error404 from "../pages/errors/Error404";
55
import Login from "../basicElements/Login";
6-
import Registration from "../pages/Registration";
6+
import Registration from "../pages/User/Registration";
77
import FileSystem, {filesBaseUrl} from "../pages/filesytem/Filesystem";
8-
import Profile from "../pages/profile/Profile";
8+
import Profile from "../pages/User/Profile";
99

1010
export default function Router(): ReactElement {
1111

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import React from "react";
2+
import { storiesOf } from "@storybook/react";
3+
import { BrowserRouter } from "react-router-dom";
4+
import "../../../style/custom.scss";
5+
import Profile from "./Profile";
6+
import { Provider } from "react-redux";
7+
import store from "../../../background/redux/store";
8+
import { hostname } from "../../../background/api/api";
9+
import MockAdapter from "axios-mock-adapter";
10+
import axios from "axios";
11+
12+
// const mock = new MockAdapter(axios);
13+
// const API_REQUEST = hostname;// + filesystemPath + "/contents";
14+
15+
storiesOf("Profile", module)
16+
.add("default", () =>
17+
<Provider store={store}>
18+
<BrowserRouter>
19+
<Profile />
20+
</BrowserRouter>
21+
</Provider>
22+
)

src/components/pages/profile/Profile.tsx renamed to src/components/pages/User/Profile.tsx

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,62 @@
1-
import React, {ReactElement, useState} from "react";
1+
import React, {ChangeEvent, ReactElement, useState} from "react";
22
import {Button, Container, Form, Row} from "react-bootstrap";
33
import {useSelector} from "react-redux";
44
import {RootState} from "../../../background/redux/store";
5+
import {changeUserInformation} from "../../../background/api/userInformations";
6+
import {notMinStrLength} from "../../../background/methods/checkInput";
57

68

79
export default function Profile(): ReactElement {
810
const [isEditing, setIsEditing] = useState<boolean>(false);
911
const user = useSelector((state: RootState) => state.user);
1012

13+
/*const handlePasswordChange = (event: ChangeEvent<HTMLInputElement>) => {
14+
event.preventDefault();
15+
let value: [string, boolean] | string = makePasswordInputFitRules(event.target.value);
16+
if (!value[1]) {
17+
value = password;
18+
} else {
19+
value = value[0]
20+
}
21+
setPasswordInformationLength(!notMinStrLength(value, MIN_PASSWORD_LENGTH));
22+
setPasswordInformationLowercase(value.match(/[a-z]/) !== null);
23+
setPasswordInformationUppercase(value.match(/[A-Z]/) !== null);
24+
setPasswordInformationNumber(value.match(/\d/) !== null);
25+
setPassword(value)
26+
}
27+
28+
const handlePasswordConfirmationChange = async (event: ChangeEvent<HTMLInputElement>) => {
29+
event.preventDefault();
30+
let value: [string, boolean] | string = makePasswordInputFitRules(event.target.value);
31+
if (!value[1]) {
32+
value = passwordConfirmation;
33+
} else {
34+
value = value[0]
35+
}
36+
setPasswordConfirmation(value);
37+
}*/
38+
1139
function handleEditModeChange(): void {
12-
console.log("[PROFILE] hi")
13-
setIsEditing(!isEditing)
40+
if (isEditing) {
41+
let newUser = JSON.parse(JSON.stringify(user))
42+
let usernameInput = document.getElementById("editProfileForm-Username")
43+
if (usernameInput) {
44+
console.log((usernameInput as HTMLInputElement).value)
45+
newUser.username = (usernameInput as HTMLInputElement).value
46+
console.log(changeUserInformation(newUser))
47+
}
48+
} else {
49+
console.log("[PROFILE] changedEditMode")
50+
setIsEditing(!isEditing)
51+
}
1452
}
1553

1654
function EditProfile(): ReactElement {
1755
return (
1856
<Form>
19-
<Form.Group controlId="editProfileForm.Username">
57+
<Form.Group controlId="editProfileForm-Username">
2058
<Form.Label>Your Username</Form.Label>
21-
<Form.Control type="text" placeholder="Enter username" value={user.username ?? ""}/>
59+
<Form.Control type="text" placeholder="Enter username" defaultValue={user.username ?? ""}/>
2260
<Form.Text>
2361
Your username will be visible to anyone using this system.
2462
</Form.Text>
@@ -45,7 +83,7 @@ export default function Profile(): ReactElement {
4583
<dt>Username</dt>
4684
<dd>{user.username}</dd>
4785
<dt>Groups</dt>
48-
<dd>{user.groups.map((value: number, index: number, array: number[]) => {
86+
<dd>{user.groups.map((value: number) => {
4987
return value + " "
5088
})}
5189
</dd>

src/components/pages/Registration.stories.tsx renamed to src/components/pages/User/Registration.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from "react";
22
import {storiesOf} from "@storybook/react";
33
import Registration from "./Registration";
44
import {BrowserRouter} from "react-router-dom";
5-
import '../../style/custom.scss';
5+
import '../../../style/custom.scss';
66

77
storiesOf("Registration", module)
88
.add("default", () =>

src/components/pages/Registration.tsx renamed to src/components/pages/User/Registration.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import React, {ChangeEvent, FormEvent, ReactElement, useCallback, useEffect, useState} from "react";
22
import {Container, Row, Col, Form, FormGroup, Button, Alert} from "react-bootstrap";
3-
import {deleteSpaces} from "../../background/methods/strings";
4-
import {biggerMaxStrLength, notMinStrLength} from "../../background/methods/checkInput";
5-
import info_svg from "../../assets/images/icons/material.io/info-24px.svg";
6-
import check_svg from "../../assets/images/icons/material.io/check_circle-24px.svg";
7-
import error_svg from "../../assets/images/icons/material.io/error-24px.svg";
8-
import fileFighter from "../../assets/images/logos/adventurer-run.gif";
9-
import {registerNewUser} from "../../background/api/registration";
10-
import {getWindowSize, getWindowSize_Interface} from "../../background/methods/windowSize";
11-
import {getStyleValue} from "../../background/methods/style";
3+
import {deleteSpaces} from "../../../background/methods/strings";
4+
import {biggerMaxStrLength, notMinStrLength} from "../../../background/methods/checkInput";
5+
import info_svg from "../../../assets/images/icons/material.io/info-24px.svg";
6+
import check_svg from "../../../assets/images/icons/material.io/check_circle-24px.svg";
7+
import error_svg from "../../../assets/images/icons/material.io/error-24px.svg";
8+
import fileFighter from "../../../assets/images/logos/adventurer-run.gif";
9+
import {registerNewUser} from "../../../background/api/registration";
10+
import {getWindowSize, getWindowSize_Interface} from "../../../background/methods/windowSize";
11+
import {getStyleValue} from "../../../background/methods/style";
1212

1313
export default function Registration(): ReactElement {
1414
const MIN_PASSWORD_LENGTH = 8;

src/components/pages/User/UserInformationInput.tsx

Whitespace-only changes.

0 commit comments

Comments
 (0)