1
Fork 0
mirror of https://github.com/pds-nest/nest.git synced 2024-11-22 04:54:18 +00:00

Add Create user

This commit is contained in:
Stefano Pigozzi 2021-05-11 23:27:42 +02:00
parent 244ea525ad
commit 1abf0d0dc9
Signed by untrusted user who does not match committer: steffo
GPG key ID: 6965406171929D01
5 changed files with 128 additions and 12 deletions

View file

@ -8,16 +8,20 @@ import PageSandbox from "./routes/PageSandbox"
import PageDashboard from "./routes/PageDashboard" import PageDashboard from "./routes/PageDashboard"
import PageRoot from "./routes/PageRoot" import PageRoot from "./routes/PageRoot"
import PageEdit from "./routes/PageEdit" import PageEdit from "./routes/PageEdit"
import PageUsers from "./routes/PageUsers"
export default function PageSwitcher({ ...props }) { export default function PageSwitcher({ ...props }) {
return ( return (
<Switch {...props}> <Switch {...props}>
<Route path={"/repositories/:id/edit"} exact={true}>
<PageEdit/>
</Route>
<Route path={"/login"} exact={true}> <Route path={"/login"} exact={true}>
<PageLogin/> <PageLogin/>
</Route> </Route>
<Route path={"/repositories/:id/edit"} exact={true}> <Route path={"/users"} exact={true}>
<PageEdit/> <PageUsers/>
</Route> </Route>
<Route path={"/repositories"} exact={true}> <Route path={"/repositories"} exact={true}>
<PageRepositories/> <PageRepositories/>

View file

@ -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 (
<BoxFull header={"Crea utente"} {...props}>
<FormLabelled>
<FormLabel text={"Username"}>
<InputWithIcon
icon={faUser}
type={"text"}
value={username}
onChange={event => setUsername(event.target.value)}
/>
</FormLabel>
<FormLabel text={"Email"}>
<InputWithIcon
icon={faEnvelope}
type={"text"}
value={email}
onChange={event => setEmail(event.target.value)}
/>
</FormLabel>
<FormLabel text={"Password"}>
<InputWithIcon
icon={faKey}
type={"password"}
value={password}
onChange={event => setPassword(event.target.value)}
/>
</FormLabel>
{error ?
<FormAlert color={"Red"}>
{error.toString()}
</FormAlert>
: null}
<FormButton
color={"Green"}
icon={faPlus}
onClick={() => createNow()}
>
Create
</FormButton>
</FormLabelled>
{children}
</BoxFull>
)
}

View file

@ -1,9 +1,17 @@
import React, { Fragment, useContext } from "react" import React, { useContext } from "react"
import Style from "./Sidebar.module.css" import Style from "./Sidebar.module.css"
import classNames from "classnames" import classNames from "classnames"
import Logo from "../interactive/Logo" import Logo from "../interactive/Logo"
import ButtonSidebar from "../base/ButtonSidebar" 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" import ContextUser from "../../contexts/ContextUser"
@ -24,16 +32,24 @@ export default function Sidebar({ className, ...props }) {
<Logo/> <Logo/>
{ {
user ? user ?
<Fragment> <>
<ButtonSidebar to={"/dashboard"} icon={faHome}>Dashboard</ButtonSidebar> <ButtonSidebar to={"/dashboard"} icon={faHome}>Dashboard</ButtonSidebar>
<ButtonSidebar to={"/repositories"} icon={faFolder}>Repositories</ButtonSidebar> <ButtonSidebar to={"/repositories"} icon={faFolder}>Repositories</ButtonSidebar>
<ButtonSidebar to={"/alerts"} icon={faExclamationTriangle}>Alerts</ButtonSidebar> <ButtonSidebar to={"/alerts"} icon={faExclamationTriangle}>Alerts</ButtonSidebar>
<ButtonSidebar to={"/settings"} icon={faCog}>Settings</ButtonSidebar> <ButtonSidebar to={"/settings"} icon={faCog}>Settings</ButtonSidebar>
</Fragment> </>
: :
<Fragment> <>
<ButtonSidebar to={"/login"} icon={faKey}>Login</ButtonSidebar> <ButtonSidebar to={"/login"} icon={faKey}>Login</ButtonSidebar>
</Fragment> </>
}
{
user.isAdmin ?
<>
<ButtonSidebar to={"/users"} icon={faUser}>Users</ButtonSidebar>
</>
:
null
} }
{ {
process.env.NODE_ENV === "development" ? process.env.NODE_ENV === "development" ?

View file

@ -1,15 +1,29 @@
import React from "react" import React, { useContext } from "react"
import Style from "./PageDashboard.module.css" import Style from "./PageDashboard.module.css"
import classNames from "classnames" import classNames from "classnames"
import BoxHeader from "../components/base/BoxHeader" 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 (
<BoxAlert color={"Red"}>
Non sei un amministratore, pertanto non puoi gestire gli utenti della piattaforma.
</BoxAlert>
)
}
return ( return (
<div className={classNames(Style.PageHome, className)} {...props}> <div className={classNames(Style.PageHome, className)} {...props}>
<BoxHeader className={Style.Header}> <BoxHeader className={Style.Header}>
Manage users Gestisci utenti
</BoxHeader> </BoxHeader>
<BoxUserCreate/>
</div> </div>
) )
} }

View file

@ -18,6 +18,14 @@
grid-area: a; grid-area: a;
} }
.RepositoryEditor { .CreateUser {
grid-area: b; grid-area: b;
} }
.DeleteUser {
grid-area: c;
}
.UserList {
grid-area: d;
}