Skip to content
Snippets Groups Projects
index.tsx 3.29 KiB
Newer Older
  • Learn to ignore specific revisions
  • import React, { useEffect, useState } from "react";
    
    import styles from "./style.module.scss";
    
    
    danieldeng2's avatar
    danieldeng2 committed
    // import { request } from "../../../utils/api"
    // import { api } from "../../../constants/routes"
    
    import MyBreadcrumbs from "components/atoms/MyBreadcrumbs";
    
    import InputGroup from "react-bootstrap/InputGroup";
    import FormControl from "react-bootstrap/FormControl";
    
    import Button from "react-bootstrap/Button";
    
    import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
    
    import { faInfoCircle } from "@fortawesome/free-solid-svg-icons";
    
    import QuickAccessView from "components/molecules/QuickAccessView";
    import ResourcesFolderView from "components/molecules/ResourcesFolderView";
    
    danieldeng2's avatar
    danieldeng2 committed
    import CurrentDirectoryView from "components/molecules/CurrentDirectoryView";
    import { useParams } from "react-router-dom";
    
    export interface Resource {
      title: string;
      type: string;
      tags: string[];
      folder: string;
      id: number;
    }
    
    
    danieldeng2's avatar
    danieldeng2 committed
    const ModuleResources: React.FC<{ year: string}> = ({year}) => {
      let {id, scope } = useParams();
    
    danieldeng2's avatar
    danieldeng2 committed
      scope = scope === undefined ? "" : scope;
    
    	
    	const module_code = id.startsWith("CO") ? id.slice(2) : id;
    
    	//maybe refactor into class?
    	const [error, setError] = useState(null);
      const [isLoaded, setIsLoaded] = useState(false);
      const [resources, setResources] = useState<Resource[]>([]);
    
      const quickAccessItems = resources.filter(
    
    danieldeng2's avatar
    danieldeng2 committed
        ({ tags, folder }) =>
          tags.includes("new") && (scope === "" || scope === folder)
      );
    
    
      const currentDirectoryFiles = resources.filter(
    
    danieldeng2's avatar
    danieldeng2 committed
        ({ folder }) => folder === scope
    
      let folders: { title: string; id: number;}[] = Array.from(new Set<string>(resources.map((res: Resource) => { 
        return res.folder; }))).map((title: string) => {
          return {
            title: title,
            id: 0,
          };
        })
    
      useEffect(() => {
        setIsLoaded(false);
        const onSuccess = (data: { json: () => any[]; }) => {
          var resourceArr = [];
          var json = data.json()
          for (const key in json) {
            let resource = json[key]
            resourceArr.push({
              title: resource.title,
              type: resource.type,
              tags: resource.tags,
              folder: resource.category,
              id: resource.id,
            } as Resource);
          }
          setResources(resourceArr);
          console.log(resources);
          setIsLoaded(true);
        }
        const onFailure = (error: any) => {
          setError(error);
          setIsLoaded(true);
        }
    
        request(api.MATERIALS_RESOURCES, "GET", onSuccess, onFailure, {
          "year": year,
          "course": module_code
        })
      }, [year, module_code]);
    
          <InputGroup>
            <FormControl
              className={styles.searchBar}
              aria-label="Search"
              placeholder="Search..."
            />
            <InputGroup.Append>
              <Button className={styles.searchBarIcon}>
                <FontAwesomeIcon size="1x" icon={faInfoCircle} />
              </Button>
            </InputGroup.Append>
    
          {scope === "" && folders.length > 0 ? <ResourcesFolderView folderItems={folders} /> : null}
    
          {scope !== "" && currentDirectoryFiles.length > 0 ? <CurrentDirectoryView documentItems={currentDirectoryFiles} /> : null}
    			{scope === "" && quickAccessItems.length > 0 ? <QuickAccessView quickAccessItems={quickAccessItems} /> : null}
    
    		</>
    
    danieldeng2's avatar
    danieldeng2 committed
    export default ModuleResources;