diff --git a/frontend/src/admin.js b/frontend/src/admin.js index a266da8f..831279b5 100644 --- a/frontend/src/admin.js +++ b/frontend/src/admin.js @@ -6,7 +6,7 @@ import ElementWrapper from './components/elementWrapper'; import AdminHome from './pages/admin/home'; import { UserList } from './pages/admin/user-list'; import UserEdit from './pages/admin/user-edit'; -import { ProjectList } from './pages/admin/project-list'; +import ProjectList from './pages/admin/project-list'; import ProjectEdit from './pages/admin/project-edit'; import { AuthService } from './services/auth'; @@ -29,7 +29,6 @@ const Admin = () => { } }, [isSuper]); - return ( { } /> } /> } /> - } /> + } /> } /> }/> diff --git a/frontend/src/pages/admin/project-list.js b/frontend/src/pages/admin/project-list.js index a7917049..5fe3f9ae 100644 --- a/frontend/src/pages/admin/project-list.js +++ b/frontend/src/pages/admin/project-list.js @@ -1,5 +1,4 @@ -import React from 'react'; -import PropTypes from 'prop-types'; +import React, { useEffect, useState } from 'react'; import { Button, @@ -19,13 +18,29 @@ import { Link } from 'react-router-dom'; import { HttpClient } from '../../services/http'; import { Settings } from '../../settings'; -import { debounce, getSpinnerRow } from '../../utilities'; +import { getSpinnerRow } from '../../utilities'; import { FilterTable } from '../../components/filtertable'; +import { EmptyObject } from '../../components'; +const COLUMNS = ['Title', 'Name', 'Owner', '']; -function projectToRow (project, onDeleteClick) { - return { - cells: [ +const ProjectList = () => { + const [filterText, setFilterText] = useState(''); + const [filteredProjects, setFilteredProjects] = useState([]); + const [activeFilters, setActiveFilters] = useState({}); + const [page, setPage] = useState(1); + const [pageSize, setPageSize] = useState(20); + + const [projects, setProjects] = useState([]); + + const [totalItems, setTotalItems] = useState(0); + const [isError, setIsError] = useState(false); + const [selectedProject, setSelectedProject] = useState(); + const [isDeleting, setIsDeleting] = useState(false); + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); + + const projectToRow = (project) => { + const shutupEslint = {'cells': [ {title: project.title}, {title: project.name}, {title: project.owner && project.owner.name}, @@ -44,7 +59,10 @@ function projectToRow (project, onDeleteClick) { - - + document.title = 'Projects - Administration | Ibutsu'; + return ( + + + + + + + Projects + + - - - - - - - - - - {this.state.isDeleting ? 'Deleting...' : 'Delete'} - , - - ]} - > - Are you sure you want to delete “{this.state.selectedProject && this.state.selectedProject.title}”? This cannot be undone! - - - ); - } -} + + + + + + + + + {projects.length > 0 && + + + projectToRow(p)) : [getSpinnerRow(4)]} + activeFilters={activeFilters} + filters={[ + + ]} + pagination={{ + pageSize: pageSize, + page: page, + totalItems: totalItems + }} + onRemoveFilter={onRemoveFilter} + isEmpty={filteredProjects.length === 0} + isError={isError} + onSetPage={(_event, value) => {setPage(value);}} + onSetPageSize={(_event, value) => {setPageSize(value);}} + /> + + + } + {projects.length === 0 && } + + + {isDeleting ? 'Deleting...' : 'Delete'} + , + + ]} + > + Are you sure you want to delete “{selectedProject && selectedProject.title}”? This cannot be undone! + + + ); +}; + +ProjectList.propTypes = {}; + +export default ProjectList;