Skip to content
Snippets Groups Projects
App.js 6.11 KiB
Newer Older
fcrisafulli-dev's avatar
fcrisafulli-dev committed
import './App.css';
import './login'
import Home from './Home.js';
import React, { useState, useEffect } from 'react'
fcrisafulli-dev's avatar
fcrisafulli-dev committed

fcrisafulli-dev's avatar
fcrisafulli-dev committed
// MUI imports
import Typography from '@mui/material/Typography';
import Toolbar from '@mui/material/Toolbar';
import AppBar from '@mui/material/AppBar';
fcrisafulli-dev's avatar
fcrisafulli-dev committed
import Box from '@mui/material/Box';
fcrisafulli-dev's avatar
fcrisafulli-dev committed
import Button from '@mui/material/Button';
import Divider from '@mui/material/Divider';
import Grid from '@mui/material/Grid';

import CollectionList from './collection_list';
import CollectionEditor from './collection_editor';
fcrisafulli-dev's avatar
fcrisafulli-dev committed
import { dbGetCollections, dbGetItems } from './database_util';
fcrisafulli-dev's avatar
fcrisafulli-dev committed
function App() {
  const [foo, setFoo] = useState('');
  const [authenticated, setAuthenticated] = useState(false);
Tarek Shah's avatar
Tarek Shah committed
  const [username, setUsername] = useState(""); //test_user
  const [password, setPassword] = useState(""); //CETSp@ssword!

  useEffect(() => {
    // Check if user is already authenticated from sessionStorage
    const isAuthenticated = sessionStorage.getItem('authenticated');
    if (isAuthenticated === 'true') {
        setAuthenticated(true);
    }
  }, []);

  useEffect(() => {
    if (authenticated) {
        // If user is authenticated, save the state in sessionStorage
        sessionStorage.setItem('authenticated', 'true');
    } else {
        // If user is not authenticated, remove the state from sessionStorage
        sessionStorage.removeItem('authenticated');
    }
  }, [authenticated]);
fcrisafulli-dev's avatar
fcrisafulli-dev committed

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const [loadedCollections, setLoadedCollections] = useState([]);
fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const [selectedCollection, setSelectedCollection] = useState(null);
fcrisafulli-dev's avatar
fcrisafulli-dev committed
  
  const [loadedRawFiles, setLoadedRawFiles] = useState([]);
  const [loadedLinkFiles, setLoadedLinkFiles] = useState([]);
  const [loadedXMLFiles, setLoadedXMLFiles] = useState([]);
fcrisafulli-dev's avatar
fcrisafulli-dev committed

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const [collectionFileCache, setCollectionFileCache] = useState(null);

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const updateCollectionList = async () => {
    let r = await dbGetCollections(0);
    setLoadedCollections(r)
  }
fcrisafulli-dev's avatar
fcrisafulli-dev committed

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const updateFileLists = async () => {
fcrisafulli-dev's avatar
fcrisafulli-dev committed
    let r = await dbGetItems(selectedCollection.collection_id);
fcrisafulli-dev's avatar
fcrisafulli-dev committed
    setLoadedRawFiles(r)
  }

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  useEffect(
    () => {
fcrisafulli-dev's avatar
fcrisafulli-dev committed
      updateCollectionList();
fcrisafulli-dev's avatar
fcrisafulli-dev committed
  );

  useEffect(
    () => {
fcrisafulli-dev's avatar
fcrisafulli-dev committed
    },[loadedRawFiles,loadedLinkFiles,loadedXMLFiles]
fcrisafulli-dev's avatar
fcrisafulli-dev committed
  );

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  useEffect(
    () => {
      console.log("Updated loaded collections",loadedCollections);
fcrisafulli-dev's avatar
fcrisafulli-dev committed
    },[loadedCollections]
  );
  
fcrisafulli-dev's avatar
fcrisafulli-dev committed
  useEffect(
    () => {
      console.log("collectionFileCache Changed: ", collectionFileCache);
    },[collectionFileCache]
  );
  
fcrisafulli-dev's avatar
fcrisafulli-dev committed
  useEffect(
    () => {
      console.log("update: selectedCollection");
      if (selectedCollection != null){
        updateFileLists();
      }
    },[selectedCollection]
fcrisafulli-dev's avatar
fcrisafulli-dev committed
  );

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const showEditor= () => {
    if (selectedCollection == null) {
      return (<Home></Home>); // Landing page
fcrisafulli-dev's avatar
fcrisafulli-dev committed
    } else {
fcrisafulli-dev's avatar
fcrisafulli-dev committed
      return (<CollectionEditor collection={selectedCollection} onCollectionUpdate={setSelectedCollection} onFileSelect={onFileChange} loadedRawFiles={loadedRawFiles}/>);
fcrisafulli-dev's avatar
fcrisafulli-dev committed
    }
  }
fcrisafulli-dev's avatar
fcrisafulli-dev committed

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const onFileSelect = async (e) => {
    var formData = new FormData();
    formData.append(e.target.files[0].name, e.target.files[0]);
    setCollectionFileCache(formData); 
  }

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  const onFileChange = async (e) => {
    var formData = new FormData();
    formData.append(e.target.files[0].name, e.target.files[0]);

    await fetch('http://127.0.0.1:5000//api/v1/upload_raw_text?collection=0', {
    // content-type header should not be specified!
      method: 'POST',
      body: formData,
    })
    .then(response => response.json())
    .then(success => {
      console.log(success)
      // Do something with the successful response
    })
    .catch(error => console.log(error)
  );

  updateFileLists();
  }

  const handleDeletedCollection = () => {
    setSelectedCollection(null);
    showEditor();
  }

    setAuthenticated(false);
    sessionStorage.setItem('authenticated', 'false');
Tarek Shah's avatar
Tarek Shah committed
  if (!authenticated) {
    return (
      <div
        style={{
          backgroundImage: 'url(/images/login_background.jpg)',
          backgroundSize: 'cover',
          backgroundPosition: 'center',
          minHeight: '100vh',
Tarek Shah's avatar
Tarek Shah committed
          display: 'flex',
          alignItems: 'center',
Tarek Shah's avatar
Tarek Shah committed
        }}
      >
        <Login
          username={username}
          password={password}
          authenticated={authenticated}
          setUsername={setUsername}
          setPassword={setPassword}
          setAuthenticated={setAuthenticated}
          setFoo={setFoo}
        ></Login>
      </div>
    )
Tarek Shah's avatar
Tarek Shah committed
  }
fcrisafulli-dev's avatar
fcrisafulli-dev committed

fcrisafulli-dev's avatar
fcrisafulli-dev committed
  return (
    <div className="App">
      <Box sx={{paddingTop: '50px', paddingLeft: '30px'}}>
        {/* <Box sx={{textAlign:"left", padding:3}}> */}
          <AppBar>
            <Toolbar>
              <Button 
                style={{border: '1px solid white', color: 'white', width: '100px'}}
                onClick={() => {
                  setSelectedCollection(null);
                  showEditor();
                }}
              >
                Home
              </Button>
              <Typography variant="h6" component="div" sx={{ flexGrow: 1, textAlign: 'center' }}>
                Crisis Events Text Summarization (CETS)
              </Typography>
              <Button 
                style={{border: '1px solid white', color: 'white', width: '100px'}}
                onClick={logoutFunction}
              >
                Logout
              </Button>
            </Toolbar>
          </AppBar>
fcrisafulli-dev's avatar
fcrisafulli-dev committed
          <br/>
fcrisafulli-dev's avatar
fcrisafulli-dev committed
        
        <Divider orientation="horizontal" flexItem />

        {/* <Box sx={{border: '1px dashed grey', padding:1}}> */}
fcrisafulli-dev's avatar
fcrisafulli-dev committed
          <Grid container spacing={2}>
            <Grid item xs={2}>
              <CollectionList collections={loadedCollections} onSelectCollection={setSelectedCollection} onListUpdate={updateCollectionList} onFileSelect={onFileSelect} collectionFileCache={collectionFileCache} onDeletedCollection={handleDeletedCollection}/>
fcrisafulli-dev's avatar
fcrisafulli-dev committed
            </Grid>
            <Grid item xs={10}>
fcrisafulli-dev's avatar
fcrisafulli-dev committed
              {
                showEditor()
              }
fcrisafulli-dev's avatar
fcrisafulli-dev committed
            </Grid>
          </Grid>
fcrisafulli-dev's avatar
fcrisafulli-dev committed
      </Box>
fcrisafulli-dev's avatar
fcrisafulli-dev committed
    </div>
  );
}