Newer
Older
import { Backdrop, Box, Button, CircularProgress, TextField, List, ListItem, ListItemButton, ListItemText, ListItemIcon, Select, MenuItem } from '@mui/material';
import { dbGetCollection, dbGetItems, dbUpdateCollectionGlob, dbUpdateCollectionSummary, dbUpdateCollectionSummaryNLTK, dbUpdateCollectionSummaryBERT } from './database_util';
const [summarizer, setSummarizer] = useState('');
const updateGlob = (event) => {
// console.log();
let copy = JSON.parse(JSON.stringify(props.collection))
copy["collection_data"]["glob"] = event.target.value
props.onCollectionUpdate(copy)
// console.log(copy);
}
const [summaries, setSummaries] = useState([]);
const generateSummary = async () => {
if (summarizer === '') {
return;
}
setOpen(true);
let id = props.collection["collection_id"]
let newSummary = "";
const existingIndex = summaries.findIndex(summary => {
if (summary && summary.key.startsWith(summarizer.replace(" ", ""))) {
return true;
}
return false;
});
let newTextField;
if (existingIndex !== -1) {
// Update the existing summary
const existingSummary = summaries[existingIndex];
await updateCollectionSummary(id);
props.onCollectionUpdate(await dbGetCollection(id));
setOpen(false);
newTextField = <TextField disabled multiline maxRows={20} fullWidth label="Summary:" value={props.collection[`${summarizer}_summary`]} />;
newSummary = React.cloneElement(existingSummary, {}, [<h3>{summarizer.toUpperCase()} Summary:</h3>, newTextField]);
const updatedSummaries = [...summaries];
updatedSummaries[existingIndex] = newSummary;
setSummaries(updatedSummaries);
} else {
// Create a new summary
await updateCollectionSummary(id);
props.onCollectionUpdate(await dbGetCollection(id));
setOpen(false);
newTextField = <TextField disabled multiline maxRows={20} fullWidth label="Summary:" value={props.collection[`${summarizer}_summary`]} />;
newSummary = <div key={`${summarizer.replace(" ", "")}Summary`}><h3>{summarizer.toUpperCase()} Summary:</h3>{newTextField}</div>;
setSummaries([...summaries, newSummary]);
}
}
const updateCollectionSummary = async (id) => {
switch (summarizer) {
case "t5":
await dbUpdateCollectionSummary(id);
break;
case "bert":
await dbUpdateCollectionSummaryBERT(id);
break;
case "nltk":
await dbUpdateCollectionSummaryNLTK(id);
break;
default:
break;
// console.log("loadedRawFiles", props.loadedRawFiles)
<h1>{props.collection["collection_name"]}</h1>
<h3>Loaded Files</h3>
<List sx={{boxShadow:1}}>
{
props.loadedRawFiles.map((f) => {
return (
<ListItem>
<ListItemButton>
<ListItemText>
</ListItemText>
</ListItemButton>
</ListItem>
);
})
}
</List>
<List sx={{boxShadow:1}}>
<ListItem>
<ListItemText>
Please select which summarizer you would like to use to generate the summary
</ListItemText>
<Select
value={summarizer}
onChange={(e) => setSummarizer(e.target.value)}
sx={{ width: "300px" }}
>
<MenuItem value="t5">T5 Summarizer</MenuItem>
<MenuItem value="nltk">NLTK Summarizer</MenuItem>
<MenuItem value="bert">BERT Summarizer</MenuItem>
</Select>
</ListItem>
</List>
{/* <h3>Generated Summary:</h3>
<TextField disabled multiline maxRows={20} fullWidth label="Summary:" value={props.collection["collection_summary"]}/> */}
<Button onClick={generateSummary}>Generate Summary</Button>
{summaries.map((summary) => summary)}
<Backdrop
open={open}
>
<CircularProgress/>
</Backdrop>
</Box>
);
}
export default CollectionEditor;