1
Fork 0
mirror of https://github.com/pds-nest/nest.git synced 2024-11-24 14:04:19 +00:00
pds-2021-g2-nest/nest_frontend/components/interactive/BoxRepositories.js

69 lines
2.5 KiB
JavaScript
Raw Normal View History

2021-05-23 15:56:25 +00:00
import React, { useContext } from "react"
import BoxFullScrollable from "../base/BoxFullScrollable"
import Loading from "../base/Loading"
import SummaryRepository from "./SummaryRepository"
2021-05-20 09:39:40 +00:00
import Empty from "./Empty"
2021-05-23 15:56:25 +00:00
import ContextUser from "../../contexts/ContextUser"
/**
* A {@link BoxFullScrollable} listing some repositories.
*
* @param repositories - The repositories to list.
* @param view - Function with a single "id" parameter to call when the view repository button is clicked.
2021-05-24 01:42:30 +00:00
* @param alerts - Function with a single "id" parameter to call when the alerts button is clicked.
* @param archive - Function with a single "id" parameter to call when the archive repository button is clicked.
* @param edit - Function with a single "id" parameter to call when the edit repository button is clicked.
* @param destroy - Function with a single "id" parameter to call when the delete repository button is clicked.
* @param firstLoad - If the repositories are loading and a loading message should be displayed.
* @param running - If an action is running on the viewset.
* @param props - Additional props to pass to the box.
* @returns {JSX.Element}
* @constructor
*/
export default function BoxRepositories(
{
repositories,
view,
2021-05-24 01:42:30 +00:00
alerts,
share,
archive,
edit,
destroy,
loading,
running,
...props
})
{
2021-05-23 15:56:25 +00:00
const {user} = useContext(ContextUser)
let contents
if(loading) {
contents = <Loading/>
}
else if(repositories.length === 0) {
2021-05-20 09:39:40 +00:00
contents = <Empty/>
}
else {
contents = repositories.map(repo => (
<SummaryRepository
key={repo["id"]}
repo={repo}
view={view ? () => view(repo["id"]) : null}
alerts={(alerts && user["email"] === repo["owner"]["email"]) ? () => alerts(repo["id"]) : null}
2021-05-23 15:56:25 +00:00
share={(share && user["email"] === repo["owner"]["email"]) ? () => share(repo["id"]) : null}
archive={(archive && user["email"] === repo["owner"]["email"]) ? () => archive(repo["id"]) : null}
edit={(edit && user["email"] === repo["owner"]["email"]) ? () => edit(repo["id"]) : null}
destroy={(destroy && user["email"] === repo["owner"]["email"]) ? () => destroy(repo["id"]) : null}
running={running}
/>
))
}
return (
<BoxFullScrollable {...props}>
{contents}
</BoxFullScrollable>
)
}