diff --git a/src/src/components/collections/collections.jsx b/src/src/components/collections/collections.jsx index 22a2d282..fb829b3b 100644 --- a/src/src/components/collections/collections.jsx +++ b/src/src/components/collections/collections.jsx @@ -4,6 +4,7 @@ import "../../App.css"; import SearchComponent from "../search/SearchComponent"; import {COLUMN_DEF_MIXED,COLUMN_DEF_MIXED_SM} from "../search/table_constants"; import { entity_api_get_entity,entity_api_create_entity, entity_api_update_entity} from '../../service/entity_api'; +import {ingest_api_publish_collection,ingest_api_user_admin} from '../../service/ingest_api'; import { getPublishStatusColor } from "../../utils/badgeClasses"; import { generateDisplaySubtypeSimple_UBKG } from "../../utils/display_subtypes"; import Papa from 'papaparse'; @@ -15,7 +16,7 @@ import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; import DialogContent from "@material-ui/core/DialogContent"; import GroupModal from "../uuid/groupModal"; - +import LoadingButton from '@mui/lab/LoadingButton'; import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableCell from '@mui/material/TableCell'; @@ -23,7 +24,7 @@ import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; import TableRow from '@mui/material/TableRow'; import {DataGrid,GridToolbar} from "@mui/x-data-grid"; - +import {ErrBox} from "../../utils/ui_elements"; import Alert from '@mui/material/Alert'; import Collapse from '@mui/material/Collapse'; import LinearProgress from '@material-ui/core/LinearProgress'; @@ -48,20 +49,29 @@ export function CollectionForm (props){ var [associatedEntities, setassociatedEntities] = useState([]); var [associatedEntitiesInitial, setassociatedEntitiesInitial] = useState([]); var [selectedSources, setSelectedSources] = useState([]); + var [publishing, setPublishing] = useState(false); var [fileDetails, setFileDetails] = useState(); var [buttonState, setButtonState] = useState(''); var [warningOpen, setWarningOpen] = React.useState(false); - var [openGroupModal, setOpenGroupModal] = useState(false - - - ); + var [openGroupModal, setOpenGroupModal] = useState(false); var [lookupShow, setLookupShow] = useState(false); var [loadingDatasets, setLoadingDatasets] = useState(true); var [hideUUIDList, setHideUUIDList] = useState(true); var [loadUUIDList, setLoadUUIDList] = useState(false); var [validatingSubmitForm, setValidatingSubmitForm] = useState(false); var [entityInfo, setEntityInfo] = useState(); + var [userAdmin, setUserAdmin] = useState(false); var [pageError, setPageError] = useState(""); + // var [publishError, setPublishError] = useState({ + // status:"", + // message:"", + // }); + // @TODO: See what we can globalize/memoize/notize here + var [errorHandler, setErrorHandler] = useState({ + status: "", + message: "", + isError: null + }); var [formWarnings, setFormWarnings] = useState({ bulk_dataset_uuids:"" }); @@ -87,6 +97,18 @@ export function CollectionForm (props){ var [datatypeList] = useState(props.dtl_all); var [editingCollection] = useState(props.editingCollection); + + useEffect(() => { + ingest_api_user_admin(JSON.parse(localStorage.getItem("info")).groups_token) + .then((results) => { + console.debug('%c◉ ADMINCHECK ', 'color:#3F007b', results); + setUserAdmin(results) + }) + .catch((err) => { + console.debug('%c⭗', 'color:#1f005d', "ingest_api_user_admin ERR", err ); + }) + }, []); + useEffect(() => { if (editingCollection) { setassociatedEntities([]) @@ -456,6 +478,27 @@ export function CollectionForm (props){ }); } + const handlePublish = () => { + setPublishing(true) + ingest_api_publish_collection(props.authToken,editingCollection.uuid) + .then((response) => { + if(response.status === 200){ + console.debug('%c◉ Good ingest_api_publish_collection ', 'color:#00ff7b', response); + props.onProcessed(response.results); + }else{ + console.debug('%c◉ ingest_api_publish_collection Bad result', 'color:#ff337b', response); + setPublishing(false) + let authMessage = response.status === 401 ? "User must be Authorized" : response.results.error.toString(); + setPageError(response.status + " | " + authMessage); + } + }) + .catch((error) => { + console.debug('%c⭗ handlePublishErr Broken Result', 'color:#ff005d', error); + setPageError(error.status + " | " + error.message); + setPublishing(false); + }); + } + const handleUpdate = (formSubmit) => { // Need to only pass what's changed now console.debug('%c◉ formSubmit ', 'color:#00ff7b',formSubmit ); @@ -876,6 +919,18 @@ export function CollectionForm (props){ value={formValues.title} /> + {editingCollection && editingCollection.doi_url && ( + + + + )} - Contributors @@ -899,7 +953,6 @@ export function CollectionForm (props){ {formValues.contributors && formValues.contributors.length > 0 && ( <>{renderContribTable()} )} -
Please refer to the contributor file schema information, and this Example TSV File
@@ -926,6 +979,15 @@ export function CollectionForm (props){
+ {userAdmin === true && !editingCollection.doi_url && ( + handlePublish()} + variant="contained"> + Publish + + )} +