From 8d3d7afa3d99b2cff2b5feba1e5a6d58e503c1e0 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi <256895@studenti.unimore.it> Date: Tue, 11 May 2021 18:35:44 +0200 Subject: [PATCH 01/14] =?UTF-8?q?=F0=9F=90=9B=20Fix=20owner=20not=20displa?= =?UTF-8?q?ying=20in=20summaries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/frontend/src/components/interactive/SummaryRepository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/frontend/src/components/interactive/SummaryRepository.js b/code/frontend/src/components/interactive/SummaryRepository.js index aa39343..ff724be 100644 --- a/code/frontend/src/components/interactive/SummaryRepository.js +++ b/code/frontend/src/components/interactive/SummaryRepository.js @@ -82,7 +82,7 @@ export default function SummaryRepository( Date: Tue, 11 May 2021 19:42:04 +0200 Subject: [PATCH 02/14] =?UTF-8?q?=F0=9F=92=A5=20stuff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interactive/BoxRepositoriesArchived.js | 2 +- .../interactive/SummaryRepository.js | 14 ++++------- .../components/providers/RepositoryEditor.js | 8 +++---- code/frontend/src/routes/PageUsers.js | 15 ++++++++++++ code/frontend/src/routes/PageUsers.module.css | 23 +++++++++++++++++++ 5 files changed, 47 insertions(+), 15 deletions(-) create mode 100644 code/frontend/src/routes/PageUsers.js create mode 100644 code/frontend/src/routes/PageUsers.module.css diff --git a/code/frontend/src/components/interactive/BoxRepositoriesArchived.js b/code/frontend/src/components/interactive/BoxRepositoriesArchived.js index af504c5..9e59b6e 100644 --- a/code/frontend/src/components/interactive/BoxRepositoriesArchived.js +++ b/code/frontend/src/components/interactive/BoxRepositoriesArchived.js @@ -25,7 +25,7 @@ export default function BoxRepositoriesArchived({ repositories, refresh, ...prop repo={repo} icon={faSearch} refresh={refresh} - canArchive={true} + canArchive={false} canEdit={false} canDelete={repo["owner"]["username"] === user["username"]} /> diff --git a/code/frontend/src/components/interactive/SummaryRepository.js b/code/frontend/src/components/interactive/SummaryRepository.js index ff724be..cb73f5f 100644 --- a/code/frontend/src/components/interactive/SummaryRepository.js +++ b/code/frontend/src/components/interactive/SummaryRepository.js @@ -26,7 +26,6 @@ export default function SummaryRepository( const { fetchDataAuth } = useContext(ContextUser) const history = useHistory() const { fetchNow: archiveThis } = useBackend(fetchDataAuth, "PATCH", `/api/v1/repositories/${repo.id}`, { "close": true }) - const { fetchNow: unarchiveThis } = useBackend(fetchDataAuth, "PATCH", `/api/v1/repositories/${repo.id}`, { "open": true }) const { fetchNow: deletThis } = useBackend(fetchDataAuth, "DELETE", `/api/v1/repositories/${repo.id}`) const onEditClick = () => { @@ -38,11 +37,6 @@ export default function SummaryRepository( await refresh() } - const onUnarchiveClick = async () => { - await unarchiveThis() - await refresh() - } - const onDeleteClick = async () => { await deletThis() await refresh() @@ -71,9 +65,9 @@ export default function SummaryRepository( : null} @@ -83,9 +77,9 @@ export default function SummaryRepository( icon={repo.is_active ? faFolderOpen : faFolder} title={repo.name} subtitle={repo.owner ? repo.owner.username : null} - upperLabel={"Start"} + upperLabel={"Created"} upperValue={repo.start ? new Date(repo.start).toLocaleString() : null} - lowerLabel={"End"} + lowerLabel={"Archived"} lowerValue={repo.end ? new Date(repo.end).toLocaleString() : null} buttons={buttons} {...props} diff --git a/code/frontend/src/components/providers/RepositoryEditor.js b/code/frontend/src/components/providers/RepositoryEditor.js index aa3fdc1..793fe3f 100644 --- a/code/frontend/src/components/providers/RepositoryEditor.js +++ b/code/frontend/src/components/providers/RepositoryEditor.js @@ -55,13 +55,13 @@ export default function RepositoryEditor({ () => { return { "conditions": _conditions, - "end": _end, + "end": null, "evaluation_mode": _evaluationMode, "id": id, "is_active": true, "name": _name, "owner": user, - "start": _start, + "start": null, } }, [_conditions, _end, _evaluationMode, id, _name, user, _start], @@ -69,14 +69,14 @@ export default function RepositoryEditor({ const { error, loading, fetchNow } = useBackend(fetchDataAuth, method, path, body) const save = useCallback( - () => { + async () => { if(!id) { console.info("Creating new repository with body: ", body) } else { console.info("Editing repository ", id, " with body: ", body) } - fetchNow() + await fetchNow() }, [id, body, fetchNow], ) diff --git a/code/frontend/src/routes/PageUsers.js b/code/frontend/src/routes/PageUsers.js new file mode 100644 index 0000000..d70f7b3 --- /dev/null +++ b/code/frontend/src/routes/PageUsers.js @@ -0,0 +1,15 @@ +import React from "react" +import Style from "./PageDashboard.module.css" +import classNames from "classnames" +import BoxHeader from "../components/base/BoxHeader" + + +export default function PageDashboard({ children, className, ...props }) { + return ( +
+ + Manage users + +
+ ) +} diff --git a/code/frontend/src/routes/PageUsers.module.css b/code/frontend/src/routes/PageUsers.module.css new file mode 100644 index 0000000..4d65253 --- /dev/null +++ b/code/frontend/src/routes/PageUsers.module.css @@ -0,0 +1,23 @@ +.PageUsers { + display: grid; + + grid-template-areas: + "a a" + "b c" + "d d"; + grid-template-rows: auto auto 1fr; + grid-template-columns: 1fr 1fr; + + grid-gap: 10px; + + width: 100%; + height: 100%; +} + +.Header { + grid-area: a; +} + +.RepositoryEditor { + grid-area: b; +} From d9ce27ac63a113a391ae2c2231084a708a9e0102 Mon Sep 17 00:00:00 2001 From: stefanogoldoni Date: Tue, 11 May 2021 23:06:38 +0200 Subject: [PATCH 03/14] prima versione test repository --- .../nest_backend/test/test_zrepository.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 code/backend/nest_backend/test/test_zrepository.py diff --git a/code/backend/nest_backend/test/test_zrepository.py b/code/backend/nest_backend/test/test_zrepository.py new file mode 100644 index 0000000..ba9b619 --- /dev/null +++ b/code/backend/nest_backend/test/test_zrepository.py @@ -0,0 +1,19 @@ +from flask.testing import Client + +'''A file that contains tests of classes and methods for all the requests concerning an user.''' + + +class TestRepositoryGetAll: + def test_get_all_user_repositories(self, flask_client: Client, user_headers): + r = flask_client.get(f'/api/v1/repositories/', headers=user_headers) + assert r.json["result"] == "success" + # assert r.json["data"]["email"] == "admin@admin.com" + # assert r.json["data"]["isAdmin"] is True + + def test_get_all_admin_repositories(self, flask_client: Client, admin_headers): + r = flask_client.get(f'/api/v1/repositories/', headers=admin_headers) + assert r.json["result"] == "success" + # assert r.json["data"]["email"] == "admin@admin.com" + # assert r.json["data"]["isAdmin"] is True + + From 4efc58940ebbc3cf1a72568f02be5518abe5aaeb Mon Sep 17 00:00:00 2001 From: stefanogoldoni Date: Tue, 11 May 2021 23:08:07 +0200 Subject: [PATCH 04/14] viene cancellato utente1 invece di utente, che serve anche nei test successivi --- code/backend/nest_backend/test/test_user.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/backend/nest_backend/test/test_user.py b/code/backend/nest_backend/test/test_user.py index db8572e..9c8379a 100644 --- a/code/backend/nest_backend/test/test_user.py +++ b/code/backend/nest_backend/test/test_user.py @@ -16,6 +16,7 @@ class TestUserGet: assert r.json["result"] == "failure" assert r.json["msg"] == "Could not locate the user." + # ritorna i dati di tutti gli utenti registrati class TestUserGetAll: def test_for_success(self, flask_client: Client, admin_headers): @@ -47,7 +48,7 @@ class TestUserAdd: class TestUserDelete: def test_for_success(self, flask_client: Client, admin_headers): - r = flask_client.delete(f'/api/v1/users/utente_test@nest.com', headers=admin_headers) + r = flask_client.delete(f'/api/v1/users/utente1_test@nest.com', headers=admin_headers) assert b'success' in r.data # the admin tries to commit suicide From 8ca659f1244e8280cde172e8b616744c182be316 Mon Sep 17 00:00:00 2001 From: stefanogoldoni Date: Tue, 11 May 2021 23:47:47 +0200 Subject: [PATCH 05/14] modificate le risposte patch e delete, adeguati di conseguenza i test --- .../backend/nest_backend/routes/users/user.py | 4 +-- code/backend/nest_backend/test/test_user.py | 27 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/code/backend/nest_backend/routes/users/user.py b/code/backend/nest_backend/routes/users/user.py index e8c684d..c8d8ee8 100644 --- a/code/backend/nest_backend/routes/users/user.py +++ b/code/backend/nest_backend/routes/users/user.py @@ -133,7 +133,7 @@ def page_user(email): except Exception: ext.session.rollback() return json_error("Could not delete the user."), 500 - return json_success("The user has been deleted."), 204 + return json_success(""), 204 # "The user has been deleted." elif request.method == "PATCH": if not email == user.email and not user.isAdmin: return json_error("Thou art not authorized."), 403 @@ -143,4 +143,4 @@ def page_user(email): if request.json.get("password"): target.password = gen_password(request.json.get("password")) ext.session.commit() - return json_success(target.to_json()), 204 + return json_success(target.to_json()), 200 # 204 diff --git a/code/backend/nest_backend/test/test_user.py b/code/backend/nest_backend/test/test_user.py index 9c8379a..38cf6b2 100644 --- a/code/backend/nest_backend/test/test_user.py +++ b/code/backend/nest_backend/test/test_user.py @@ -21,40 +21,40 @@ class TestUserGet: class TestUserGetAll: def test_for_success(self, flask_client: Client, admin_headers): r = flask_client.get(f'/api/v1/users/', headers=admin_headers) - assert b'success' in r.data + assert r.json["result"] == "success" def test_for_failure(self, flask_client: Client, user_headers): r = flask_client.get(f'/api/v1/users/', headers=user_headers) - assert b'failure' in r.data + assert r.json["result"] == "failure" class TestUserAdd: - def test_for_success(self, flask_client: Client, admin_headers): + def test_valid_user(self, flask_client: Client, admin_headers): r = flask_client.post(f'/api/v1/users/', headers=admin_headers, json={ 'email': 'utente1_test@nest.com', 'password': 'password', 'username': 'utente_test' }) - assert b'success' in r.data + assert r.json["result"] == "success" - def test_for_failure(self, flask_client: Client, user_headers): + def test_existing_user(self, flask_client: Client, user_headers): r = flask_client.post(f'/api/v1/users/', headers=user_headers, json={ 'email': 'utente_test@nest.com', 'password': 'password', 'username': 'utente_test' }) - assert b'failure' in r.data + assert r.json["result"] == "failure" class TestUserDelete: - def test_for_success(self, flask_client: Client, admin_headers): + def test_valid_user(self, flask_client: Client, admin_headers): r = flask_client.delete(f'/api/v1/users/utente1_test@nest.com', headers=admin_headers) - assert b'success' in r.data + assert r.status_code == 204 # the admin tries to commit suicide - def test_for_failure(self, flask_client: Client, admin_headers): + def test_himself(self, flask_client: Client, admin_headers): r = flask_client.delete(f'/api/v1/users/admin@admin.com', headers=admin_headers) - assert b'failure' in r.data + assert r.json["result"] == "failure" class TestUserPatch: @@ -62,11 +62,10 @@ class TestUserPatch: r = flask_client.patch(f'/api/v1/users/admin@admin.com', headers=admin_headers, json={ 'username': 'admin_patched' }) - assert b'success' in r.data + assert r.json["result"] == "success" - # FIXME AssertionError in flask_client at line 63. Il test non riesce ad andare a buon fine - def test_for_failure(self, flask_client: Client, user_headers): + def test_not_authorized(self, flask_client: Client, user_headers): r = flask_client.patch(f'/api/v1/users/admin@admin.com', headers=user_headers, json={ 'username': 'admin_patched' }) - assert b'failure' in r.data + assert r.json["result"] == "failure" From b9de4000ba80fe7c4811ae0400c406b24d5657c1 Mon Sep 17 00:00:00 2001 From: stefanogoldoni Date: Tue, 11 May 2021 23:53:36 +0200 Subject: [PATCH 06/14] aggiunta creazione repository --- code/backend/nest_backend/test/conftest.py | 5 ++++- code/backend/nest_backend/test/fixtures/flask_client.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/code/backend/nest_backend/test/conftest.py b/code/backend/nest_backend/test/conftest.py index 8d964cd..fb407cc 100644 --- a/code/backend/nest_backend/test/conftest.py +++ b/code/backend/nest_backend/test/conftest.py @@ -4,4 +4,7 @@ Pytest configuration file. Import global fixtures here. """ -from fixtures.flask_client import flask_client, admin_access_token, admin_headers, user_access_token, user_headers, user_exists +from fixtures.flask_client import flask_client, \ + admin_access_token, admin_headers, \ + user_access_token, user_headers, user_exists, \ + repository_exists diff --git a/code/backend/nest_backend/test/fixtures/flask_client.py b/code/backend/nest_backend/test/fixtures/flask_client.py index 27bfd1e..a760ea3 100644 --- a/code/backend/nest_backend/test/fixtures/flask_client.py +++ b/code/backend/nest_backend/test/fixtures/flask_client.py @@ -64,6 +64,13 @@ def user_exists(admin_headers, flask_client): }) +@pytest.fixture(scope="package") +def repository_exists(admin_headers, flask_client): + flask_client.post(f'/api/v1/repository/', headers=admin_headers, json={ + 'name': 'repo1' + }) + + @pytest.fixture(scope="package") def user_access_token(flask_client, user_exists): response = flask_client.post("/api/v1/login", json={ From 244ea525ad26c5fee8983ade215fbbe413d89b1e Mon Sep 17 00:00:00 2001 From: stefanogoldoni Date: Tue, 11 May 2021 23:55:35 +0200 Subject: [PATCH 07/14] test repository --- .../nest_backend/test/test_zrepository.py | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/code/backend/nest_backend/test/test_zrepository.py b/code/backend/nest_backend/test/test_zrepository.py index ba9b619..ff61e59 100644 --- a/code/backend/nest_backend/test/test_zrepository.py +++ b/code/backend/nest_backend/test/test_zrepository.py @@ -5,15 +5,67 @@ from flask.testing import Client class TestRepositoryGetAll: def test_get_all_user_repositories(self, flask_client: Client, user_headers): - r = flask_client.get(f'/api/v1/repositories/', headers=user_headers) + r = flask_client.get(f'/api/v1/repositories/', headers=user_headers, + json={'owner_id': 'utente_test@nest.com', 'isActive': False}) assert r.json["result"] == "success" # assert r.json["data"]["email"] == "admin@admin.com" # assert r.json["data"]["isAdmin"] is True def test_get_all_admin_repositories(self, flask_client: Client, admin_headers): - r = flask_client.get(f'/api/v1/repositories/', headers=admin_headers) + r = flask_client.get(f'/api/v1/repositories/', headers=admin_headers, + json={'owner_id': 'admin@admin.com', 'isActive': False}) assert r.json["result"] == "success" # assert r.json["data"]["email"] == "admin@admin.com" # assert r.json["data"]["isAdmin"] is True +''' + def test_non_existing_user(self, flask_client: Client, admin_headers): + r = flask_client.get(f'/api/v1/users/ciccio@dev.com', headers=admin_headers) + assert r.json["result"] == "failure" + assert r.json["msg"] == "Could not locate the user." + +class TestUserAdd: + def test_for_success(self, flask_client: Client, admin_headers): + r = flask_client.post(f'/api/v1/users/', headers=admin_headers, json={ + 'email': 'utente1_test@nest.com', + 'password': 'password', + 'username': 'utente_test' + }) + assert b'success' in r.data + + def test_for_failure(self, flask_client: Client, user_headers): + r = flask_client.post(f'/api/v1/users/', headers=user_headers, json={ + 'email': 'utente_test@nest.com', + 'password': 'password', + 'username': 'utente_test' + }) + assert b'failure' in r.data + + +class TestUserDelete: + def test_for_success(self, flask_client: Client, admin_headers): + r = flask_client.delete(f'/api/v1/users/utente_test@nest.com', headers=admin_headers) + assert b'success' in r.data + + # the admin tries to commit suicide + def test_for_failure(self, flask_client: Client, admin_headers): + r = flask_client.delete(f'/api/v1/users/admin@admin.com', headers=admin_headers) + assert b'failure' in r.data + + +class TestUserPatch: + def test_for_success(self, flask_client: Client, admin_headers): + r = flask_client.patch(f'/api/v1/users/admin@admin.com', headers=admin_headers, json={ + 'username': 'admin_patched' + }) + assert b'success' in r.data + + # FIXME AssertionError in flask_client at line 63. Il test non riesce ad andare a buon fine + def test_for_failure(self, flask_client: Client, user_headers): + r = flask_client.patch(f'/api/v1/users/admin@admin.com', headers=user_headers, json={ + 'username': 'admin_patched' + }) + assert b'failure' in r.data + +''' From 1abf0d0dc95e1f02f5a31821a0f9399b1a2b1f78 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi <256895@studenti.unimore.it> Date: Tue, 11 May 2021 23:27:42 +0200 Subject: [PATCH 08/14] =?UTF-8?q?=E2=9C=A8=20Add=20Create=20user?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/frontend/src/PageSwitcher.js | 8 +- .../components/interactive/BoxUserCreate.js | 74 +++++++++++++++++++ .../src/components/interactive/Sidebar.js | 28 +++++-- code/frontend/src/routes/PageUsers.js | 20 ++++- code/frontend/src/routes/PageUsers.module.css | 10 ++- 5 files changed, 128 insertions(+), 12 deletions(-) create mode 100644 code/frontend/src/components/interactive/BoxUserCreate.js diff --git a/code/frontend/src/PageSwitcher.js b/code/frontend/src/PageSwitcher.js index bb070b0..bde5261 100644 --- a/code/frontend/src/PageSwitcher.js +++ b/code/frontend/src/PageSwitcher.js @@ -8,16 +8,20 @@ import PageSandbox from "./routes/PageSandbox" import PageDashboard from "./routes/PageDashboard" import PageRoot from "./routes/PageRoot" import PageEdit from "./routes/PageEdit" +import PageUsers from "./routes/PageUsers" export default function PageSwitcher({ ...props }) { return ( + + + - - + + diff --git a/code/frontend/src/components/interactive/BoxUserCreate.js b/code/frontend/src/components/interactive/BoxUserCreate.js new file mode 100644 index 0000000..0d5fc8a --- /dev/null +++ b/code/frontend/src/components/interactive/BoxUserCreate.js @@ -0,0 +1,74 @@ +import React, { useContext, useMemo, useState } from "react" +import FormLabelled from "../base/FormLabelled" +import FormLabel from "../base/formparts/FormLabel" +import InputWithIcon from "../base/InputWithIcon" +import { faEnvelope, faKey, faPlus, faUser } from "@fortawesome/free-solid-svg-icons" +import FormButton from "../base/formparts/FormButton" +import BoxFull from "../base/BoxFull" +import useBackend from "../../hooks/useBackend" +import ContextUser from "../../contexts/ContextUser" +import FormAlert from "../base/formparts/FormAlert" + + +export default function BoxUserCreate({ children, ...props }) { + const { fetchDataAuth } = useContext(ContextUser) + const [username, setUsername] = useState("") + const [email, setEmail] = useState("") + const [password, setPassword] = useState("") + + const body = useMemo( + () => { + return { + "email": email, + "username": username, + "password": password, + } + }, + [email, username, password], + ) + const { error, fetchNow: createNow } = useBackend(fetchDataAuth, "POST", "/api/v1/users/", body) + + return ( + + + + setUsername(event.target.value)} + /> + + + setEmail(event.target.value)} + /> + + + setPassword(event.target.value)} + /> + + {error ? + + {error.toString()} + + : null} + createNow()} + > + Create + + + {children} + + ) +} diff --git a/code/frontend/src/components/interactive/Sidebar.js b/code/frontend/src/components/interactive/Sidebar.js index 31ab185..a527e02 100644 --- a/code/frontend/src/components/interactive/Sidebar.js +++ b/code/frontend/src/components/interactive/Sidebar.js @@ -1,9 +1,17 @@ -import React, { Fragment, useContext } from "react" +import React, { useContext } from "react" import Style from "./Sidebar.module.css" import classNames from "classnames" import Logo from "../interactive/Logo" import ButtonSidebar from "../base/ButtonSidebar" -import { faCog, faExclamationTriangle, faFolder, faHome, faKey, faWrench } from "@fortawesome/free-solid-svg-icons" +import { + faCog, + faExclamationTriangle, + faFolder, + faHome, + faKey, + faUser, + faWrench, +} from "@fortawesome/free-solid-svg-icons" import ContextUser from "../../contexts/ContextUser" @@ -24,16 +32,24 @@ export default function Sidebar({ className, ...props }) { { user ? - + <> Dashboard Repositories Alerts Settings - + : - + <> Login - + + } + { + user.isAdmin ? + <> + Users + + : + null } { process.env.NODE_ENV === "development" ? diff --git a/code/frontend/src/routes/PageUsers.js b/code/frontend/src/routes/PageUsers.js index d70f7b3..4dc66bf 100644 --- a/code/frontend/src/routes/PageUsers.js +++ b/code/frontend/src/routes/PageUsers.js @@ -1,15 +1,29 @@ -import React from "react" +import React, { useContext } from "react" import Style from "./PageDashboard.module.css" import classNames from "classnames" import BoxHeader from "../components/base/BoxHeader" +import BoxUserCreate from "../components/interactive/BoxUserCreate" +import ContextUser from "../contexts/ContextUser" +import BoxAlert from "../components/base/BoxAlert" -export default function PageDashboard({ children, className, ...props }) { +export default function PageUsers({ children, className, ...props }) { + const { user } = useContext(ContextUser) + + if(!user.isAdmin) { + return ( + + Non sei un amministratore, pertanto non puoi gestire gli utenti della piattaforma. + + ) + } + return (
- Manage users + Gestisci utenti +
) } diff --git a/code/frontend/src/routes/PageUsers.module.css b/code/frontend/src/routes/PageUsers.module.css index 4d65253..83b0a1a 100644 --- a/code/frontend/src/routes/PageUsers.module.css +++ b/code/frontend/src/routes/PageUsers.module.css @@ -18,6 +18,14 @@ grid-area: a; } -.RepositoryEditor { +.CreateUser { grid-area: b; } + +.DeleteUser { + grid-area: c; +} + +.UserList { + grid-area: d; +} \ No newline at end of file From abac554e95859b0d5c8e8741517ce4efd1db6034 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi <256895@studenti.unimore.it> Date: Tue, 11 May 2021 23:44:14 +0200 Subject: [PATCH 09/14] =?UTF-8?q?=F0=9F=90=9B=20Fix=20possible=20bug=20in?= =?UTF-8?q?=20useArrayState?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/frontend/src/hooks/useArrayState.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/frontend/src/hooks/useArrayState.js b/code/frontend/src/hooks/useArrayState.js index d52daf8..e150ef3 100644 --- a/code/frontend/src/hooks/useArrayState.js +++ b/code/frontend/src/hooks/useArrayState.js @@ -25,9 +25,8 @@ export default function useArrayState(def) { console.debug("Splicing ", position, " from ArrayState") setValue( oldArray => { - // TODO: Hope this doesn't break anything... oldArray.splice(position, 1) - return oldArray + return [...oldArray] }, ) }, From 460da4fadd317c21211a8cf5265840bc041a0c3c Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi <256895@studenti.unimore.it> Date: Wed, 12 May 2021 04:10:36 +0200 Subject: [PATCH 10/14] =?UTF-8?q?=F0=9F=92=A5=20Refactor=20quite=20a=20lot?= =?UTF-8?q?=20of=20things?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/inspectionProfiles/Project_Default.xml | 3 +- .../src/components/base/Button.module.css | 4 + .../components/interactive/BoxUserCreate.js | 24 +-- .../src/components/interactive/BoxUserList.js | 22 ++ .../src/components/interactive/Sidebar.js | 4 +- ...odule.css => SummaryRepository.module.css} | 0 .../src/components/interactive/SummaryUser.js | 38 ++++ .../components/providers/RepositoryEditor.js | 2 +- code/frontend/src/hooks/useBackendViewset.js | 204 ++++++++++++++++++ code/frontend/src/routes/PageUsers.js | 23 +- code/frontend/src/routes/PageUsers.module.css | 18 +- .../frontend/src/utils/makeURLSearchParams.js | 19 ++ 12 files changed, 318 insertions(+), 43 deletions(-) create mode 100644 code/frontend/src/components/interactive/BoxUserList.js rename code/frontend/src/components/interactive/{RepositorySummaryBase.module.css => SummaryRepository.module.css} (100%) create mode 100644 code/frontend/src/components/interactive/SummaryUser.js create mode 100644 code/frontend/src/hooks/useBackendViewset.js create mode 100644 code/frontend/src/utils/makeURLSearchParams.js diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index deb8f11..98762f0 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -13,6 +13,7 @@ +