diff --git a/code/frontend/src/components/interactive/BoxRepositoriesActive.js b/code/frontend/src/components/interactive/BoxRepositoriesActive.js index e4cecf7..7389589 100644 --- a/code/frontend/src/components/interactive/BoxRepositoriesActive.js +++ b/code/frontend/src/components/interactive/BoxRepositoriesActive.js @@ -1,51 +1,38 @@ import React, { useContext } from "react" import BoxFull from "../base/BoxFull" -import ContextUser from "../../contexts/ContextUser" -import useData from "../../hooks/useData" import RepositorySummaryBase from "./RepositorySummaryBase" -import Loading from "../base/Loading" -import BoxAlert from "../base/BoxAlert" import { faSearch } from "@fortawesome/free-solid-svg-icons" -import useDataImmediately from "../../hooks/useDataImmediately" +import ContextUser from "../../contexts/ContextUser" /** * A {@link BoxFull} listing all the user's active repositories. * + * @param repositories - Array of repositories to display in the box. + * @param refresh - Function that can be called to refresh the repositories list. * @param props - Additional props to pass to the box. * @returns {JSX.Element} * @constructor */ -export default function BoxRepositoriesActive({ ...props }) { - const {user, fetchDataAuth} = useContext(ContextUser) - const {data, error} = useDataImmediately(fetchDataAuth, "GET", "/api/v1/repositories/", { - "onlyActive": true, - }) +export default function BoxRepositoriesActive({ repositories, refresh, ...props }) { + const {user} = useContext(ContextUser) let contents; - if(error) { - contents = {error.toString()} - } - else if(data) { - let repositories = [...data["owner"], ...data["spectator"]] - if(repositories.length > 0) { - contents = repositories.map(repo => ( - - )) - } - else { - contents = There's nothing here. - } + if(repositories.length > 0) { + contents = repositories.map(repo => ( + + )) } else { - contents = + contents = There's nothing here. } return ( diff --git a/code/frontend/src/components/interactive/BoxRepositoriesArchived.js b/code/frontend/src/components/interactive/BoxRepositoriesArchived.js index 8416b9b..6398c07 100644 --- a/code/frontend/src/components/interactive/BoxRepositoriesArchived.js +++ b/code/frontend/src/components/interactive/BoxRepositoriesArchived.js @@ -2,49 +2,37 @@ import React, { useContext } from "react" import BoxFull from "../base/BoxFull" import ContextUser from "../../contexts/ContextUser" import RepositorySummaryBase from "./RepositorySummaryBase" -import Loading from "../base/Loading" -import BoxAlert from "../base/BoxAlert" import { faSearch } from "@fortawesome/free-solid-svg-icons" -import useDataImmediately from "../../hooks/useDataImmediately" /** * A {@link BoxFull} listing all the user's archived repositories. * + * @param repositories - Array of repositories to display in the box. + * @param refresh - Function that can be called to refresh the repositories list. * @param props - Additional props to pass to the box. * @returns {JSX.Element} * @constructor */ -export default function BoxRepositoriesArchived({ ...props }) { - const {user, fetchDataAuth} = useContext(ContextUser) - const {data, error} = useDataImmediately(fetchDataAuth, "GET", "/api/v1/repositories/", { - "onlyDead": true, - }) +export default function BoxRepositoriesArchived({ repositories, refresh, ...props }) { + const {user} = useContext(ContextUser) let contents; - if(error) { - contents = {error.toString()} - } - else if(data) { - let repositories = [...data["owner"], ...data["spectator"]] - if(repositories.length > 0) { - contents = repositories.map(repo => ( - - )) - } - else { - contents = There's nothing here. - } + if(repositories.length > 0) { + contents = repositories.map(repo => ( + + )) } else { - contents = + contents = There's nothing here. } return ( diff --git a/code/frontend/src/components/interactive/RepositorySummaryBase.js b/code/frontend/src/components/interactive/RepositorySummaryBase.js index 23a0277..dbba1f0 100644 --- a/code/frontend/src/components/interactive/RepositorySummaryBase.js +++ b/code/frontend/src/components/interactive/RepositorySummaryBase.js @@ -13,12 +13,13 @@ import ContextUser from "../../contexts/ContextUser" * A long line representing a repository in a list. * * @param id - The id of the repository. + * @param refresh - Function that can be called to refresh the repositories list. * @param owner - The owner of the repository. * @param icon - The FontAwesome IconDefinition that represents the repository. * @param name - The title of the repository. * @param start - The start date of the repository. * @param end - The end date of the repository. - * @param isActive - Whether the repository is active or not. + * @param is_active - Whether the repository is active or not. * @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. @@ -28,7 +29,7 @@ import ContextUser from "../../contexts/ContextUser" * @constructor */ export default function RepositorySummaryBase( - { id, owner, icon, name, start, end, isActive, canDelete, canEdit, canArchive, className, ...props } + { id, refresh, owner, icon, name, start, end, is_active, canDelete, canEdit, canArchive, className, ...props } ) { const {fetchDataAuth} = useContext(ContextUser) const history = useHistory() @@ -36,6 +37,25 @@ export default function RepositorySummaryBase( const {fetchNow: unarchiveThis} = useData(fetchDataAuth, "PATCH", `/api/v1/repositories/${id}`, {"open": true}) const {fetchNow: deletThis} = useData(fetchDataAuth, "DELETE", `/api/v1/repositories/${id}`) + 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() + } + return (
@@ -62,7 +82,7 @@ export default function RepositorySummaryBase( @@ -71,7 +91,7 @@ export default function RepositorySummaryBase( @@ -80,9 +100,9 @@ export default function RepositorySummaryBase( : null}
diff --git a/code/frontend/src/routes/PageRepositories.js b/code/frontend/src/routes/PageRepositories.js index c064790..f44ac3c 100644 --- a/code/frontend/src/routes/PageRepositories.js +++ b/code/frontend/src/routes/PageRepositories.js @@ -1,15 +1,38 @@ -import React from "react" +import React, { useContext } from "react" import Style from "./PageRepositories.module.css" import classNames from "classnames" import BoxRepositoriesActive from "../components/interactive/BoxRepositoriesActive" import BoxRepositoriesArchived from "../components/interactive/BoxRepositoriesArchived" +import useDataImmediately from "../hooks/useDataImmediately" +import ContextUser from "../contexts/ContextUser" +import BoxAlert from "../components/base/BoxAlert" +import Loading from "../components/base/Loading" export default function PageRepositories({ children, className, ...props }) { + const {fetchDataAuth} = useContext(ContextUser) + const {data, error, fetchNow: refresh} = useDataImmediately(fetchDataAuth, "GET", "/api/v1/repositories/") + + let contents; + if(error) { + contents = {error} + } + else if(data) { + const repositories = [...data["owner"], ...data["spectator"]] + const active = repositories.filter(r => r.is_active) + const archived = repositories.filter(r => !r.is_active) + contents = <> + + + + } + else { + contents = + } + return (
- - + {contents}
) }