Skip to content
Snippets Groups Projects
collection_editor.js 4.92 KiB
Newer Older
  • Learn to ignore specific revisions
  • fcrisafulli-dev's avatar
    fcrisafulli-dev committed
    // import './login.css';
    
    import { Backdrop, Box, Button, CircularProgress, TextField, List, ListItem, ListItemButton, ListItemText, ListItemIcon, Select, MenuItem } from '@mui/material';
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
    import React, { useState, useEffect } from 'react'
    
    import { dbGetCollection, dbGetItems, dbUpdateCollectionGlob, dbUpdateCollectionSummary, dbUpdateCollectionSummaryNLTK, dbUpdateCollectionSummaryBERT } from './database_util';
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
    
    import AddIcon from '@mui/icons-material/Add';
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
    
    const CollectionEditor = (props) => {
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
        const [open, setOpen] = useState(false);
    
        const [summarizer, setSummarizer] = useState('');
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
    
    
        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 () => {
    
            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;
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
    
        // console.log("loadedRawFiles", props.loadedRawFiles)
    
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
        return (
            <Box>
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
                <h1>{props.collection["collection_name"]}</h1>
    
                <h3>Loaded Files</h3>
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
                
                <List sx={{boxShadow:1}}>
                {
                    props.loadedRawFiles.map((f) => {
                        return (
                            <ListItem>
                                <ListItemButton>
                                    <ListItemText>
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
                                        {f}
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
                                    </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)}
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
    
                <Backdrop
                    open={open}
                >
                    <CircularProgress/>
                </Backdrop>
    
    fcrisafulli-dev's avatar
    fcrisafulli-dev committed
            </Box>
        );
    }
    
    export default CollectionEditor;