2021-05-10 14:21:19 +00:00
|
|
|
import React, { useContext } from "react"
|
2021-04-26 16:37:14 +00:00
|
|
|
import Style from "./RepositorySummaryBase.module.css"
|
2021-04-24 02:23:23 +00:00
|
|
|
import classNames from "classnames"
|
2021-05-11 14:37:15 +00:00
|
|
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
|
2021-04-29 14:58:31 +00:00
|
|
|
import Button from "../base/Button"
|
2021-04-24 02:23:23 +00:00
|
|
|
import { faArchive, faPencilAlt, faTrash } from "@fortawesome/free-solid-svg-icons"
|
2021-05-10 13:22:07 +00:00
|
|
|
import { useHistory } from "react-router"
|
2021-05-11 14:38:56 +00:00
|
|
|
import useBackend from "../../hooks/useBackend"
|
2021-05-10 14:21:19 +00:00
|
|
|
import ContextUser from "../../contexts/ContextUser"
|
2021-04-24 02:23:23 +00:00
|
|
|
|
|
|
|
|
2021-04-25 15:22:52 +00:00
|
|
|
/**
|
|
|
|
* A long line representing a repository in a list.
|
|
|
|
*
|
2021-05-10 13:22:07 +00:00
|
|
|
* @param id - The id of the repository.
|
2021-05-11 14:33:12 +00:00
|
|
|
* @param refresh - Function that can be called to refresh the repositories list.
|
2021-05-10 13:22:07 +00:00
|
|
|
* @param owner - The owner of the repository.
|
2021-04-25 15:22:52 +00:00
|
|
|
* @param icon - The FontAwesome IconDefinition that represents the repository.
|
2021-05-02 16:10:09 +00:00
|
|
|
* @param name - The title of the repository.
|
|
|
|
* @param start - The start date of the repository.
|
|
|
|
* @param end - The end date of the repository.
|
2021-05-11 14:33:12 +00:00
|
|
|
* @param is_active - Whether the repository is active or not.
|
2021-04-25 15:22:52 +00:00
|
|
|
* @param canDelete - If the Delete button should be displayed or not.
|
|
|
|
* @param canEdit - If the Edit button should be displayed or not.
|
|
|
|
* @param canArchive - If the Archive button should be displayed or not.
|
|
|
|
* @param className - Additional class(es) to be added to the outer box.
|
|
|
|
* @param props - Additional props to pass to the outer box.
|
|
|
|
* @returns {JSX.Element}
|
|
|
|
* @constructor
|
|
|
|
*/
|
|
|
|
export default function RepositorySummaryBase(
|
2021-05-11 14:37:15 +00:00
|
|
|
{ id, refresh, owner, icon, name, start, end, is_active, canDelete, canEdit, canArchive, className, ...props },
|
2021-04-25 15:22:52 +00:00
|
|
|
) {
|
2021-05-11 14:37:15 +00:00
|
|
|
const { fetchDataAuth } = useContext(ContextUser)
|
2021-05-10 15:17:16 +00:00
|
|
|
const history = useHistory()
|
2021-05-11 14:38:56 +00:00
|
|
|
const { fetchNow: archiveThis } = useBackend(fetchDataAuth, "PATCH", `/api/v1/repositories/${id}`, { "close": true })
|
|
|
|
const { fetchNow: unarchiveThis } = useBackend(fetchDataAuth, "PATCH", `/api/v1/repositories/${id}`, { "open": true })
|
|
|
|
const { fetchNow: deletThis } = useBackend(fetchDataAuth, "DELETE", `/api/v1/repositories/${id}`)
|
2021-05-10 13:22:07 +00:00
|
|
|
|
2021-05-11 14:33:12 +00:00
|
|
|
const onEditClick = event => {
|
|
|
|
history.push(`/repositories/${id}/edit`)
|
|
|
|
}
|
|
|
|
|
|
|
|
const onArchiveClick = async event => {
|
|
|
|
await archiveThis()
|
|
|
|
await refresh()
|
|
|
|
}
|
|
|
|
|
|
|
|
const onUnarchiveClick = async event => {
|
|
|
|
await unarchiveThis()
|
|
|
|
await refresh()
|
|
|
|
}
|
|
|
|
|
|
|
|
const onDeleteClick = async event => {
|
|
|
|
await deletThis()
|
|
|
|
await refresh()
|
|
|
|
}
|
|
|
|
|
2021-04-24 02:23:23 +00:00
|
|
|
return (
|
|
|
|
<div className={classNames(Style.RepositorySummary, className)} {...props}>
|
|
|
|
<div className={Style.Left}>
|
|
|
|
<div className={Style.IconContainer}>
|
|
|
|
<FontAwesomeIcon icon={icon}/>
|
|
|
|
</div>
|
|
|
|
<div className={Style.Title}>
|
2021-05-02 16:10:09 +00:00
|
|
|
{name}
|
2021-04-24 02:23:23 +00:00
|
|
|
</div>
|
2021-05-10 13:22:07 +00:00
|
|
|
<div className={Style.Author}>
|
|
|
|
{owner["username"]}
|
2021-04-24 02:23:23 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className={Style.Middle}>
|
2021-05-11 16:05:01 +00:00
|
|
|
<div className={classNames(Style.MiddleLabel, Style.MiddleTop)}>
|
|
|
|
Start:
|
2021-05-10 13:22:07 +00:00
|
|
|
</div>
|
2021-05-11 16:05:01 +00:00
|
|
|
<div className={classNames(Style.MiddleValue, Style.MiddleTop)}>
|
|
|
|
{start}
|
|
|
|
</div>
|
|
|
|
<div className={classNames(Style.MiddleLabel, Style.MiddleBot)}>
|
|
|
|
End:
|
|
|
|
</div>
|
|
|
|
<div className={classNames(Style.MiddleValue, Style.MiddleBot)}>
|
|
|
|
{end}
|
2021-05-10 13:22:07 +00:00
|
|
|
</div>
|
2021-04-24 02:23:23 +00:00
|
|
|
</div>
|
|
|
|
<div className={Style.Right}>
|
|
|
|
{canDelete ?
|
2021-05-11 14:37:15 +00:00
|
|
|
<Button
|
|
|
|
color={"Red"}
|
|
|
|
icon={faTrash}
|
|
|
|
onClick={onDeleteClick}
|
|
|
|
>
|
|
|
|
Delete
|
|
|
|
</Button>
|
|
|
|
: null}
|
2021-04-24 02:23:23 +00:00
|
|
|
{canEdit ?
|
2021-05-11 14:37:15 +00:00
|
|
|
<Button
|
|
|
|
color={"Yellow"}
|
|
|
|
icon={faPencilAlt}
|
|
|
|
onClick={onEditClick}
|
|
|
|
>
|
|
|
|
Edit
|
|
|
|
</Button>
|
|
|
|
: null}
|
2021-04-24 02:23:23 +00:00
|
|
|
{canArchive ?
|
2021-05-11 14:37:15 +00:00
|
|
|
<Button
|
|
|
|
color={"Grey"}
|
|
|
|
icon={faArchive}
|
|
|
|
onClick={is_active ? onArchiveClick : onUnarchiveClick}
|
|
|
|
>
|
|
|
|
{is_active ? "Archive" : "Unarchive"}
|
|
|
|
</Button>
|
|
|
|
: null}
|
2021-04-24 02:23:23 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|