From 82ba95d00d4b0bc156a51e0873a20c4c20b9981b Mon Sep 17 00:00:00 2001
From: Nidharshan A <cb.en.u4cse18036@cb.students.amrita.edu>
Date: Wed, 3 Mar 2021 13:54:23 +0000
Subject: [PATCH] Upload New File

---
 digital-course-file/src/hooks/useFolder.js | 101 +++++++++++++++++++++
 1 file changed, 101 insertions(+)
 create mode 100644 digital-course-file/src/hooks/useFolder.js

diff --git a/digital-course-file/src/hooks/useFolder.js b/digital-course-file/src/hooks/useFolder.js
new file mode 100644
index 0000000..228d3e7
--- /dev/null
+++ b/digital-course-file/src/hooks/useFolder.js
@@ -0,0 +1,101 @@
+import { useState,useReducer, useEffect } from "react";
+import { database } from '../fire.js'
+import firebase from 'firebase'
+
+export const ROOT_FOLDER = {name: 'Root', id : null , path : [] };
+
+export function useFolder( folderId = null, folder= null) {
+
+    // const {currentUser} = firebase.auth.currentUser;
+
+    const ACTIONS = {
+        SELECT_FOLDER : 'select-folder',
+        UPDATE_FOLDER : 'update-folder',
+        SET_CHILD_FOLDERS : 'set_child_folders',
+    }
+
+    function reducer( state, { type,payload } ){
+        
+        switch(type){
+            case ACTIONS.SELECT_FOLDER:
+                return{
+                    folderId : payload.folderId,
+                    folder : payload.folder,
+                    childFiles : [],
+                    childFolders : [],
+                };
+
+            case ACTIONS.UPDATE_FOLDER:
+                return{
+                    ...state,
+                    folder : payload.folder,
+                };
+
+             case ACTIONS.SET_CHILD_FOLDERS:
+                return{
+                    ...state,
+                    childFolders : payload.childFolders,
+                };    
+
+            default:
+                return state;
+
+        }
+
+    }
+
+
+    const[state,dispatch] = useReducer( reducer,{
+        folderId,
+        folder,
+        childFolders : [],
+        childFiles : []
+        } 
+    );
+
+    useEffect( () => {
+        dispatch({ type : ACTIONS.SELECT_FOLDER, payload : { folderId,folder }})
+    } ,[folderId,folder])
+
+
+    useEffect( ()=> {
+        if(folderId==null){
+            return dispatch({
+                type:  ACTIONS.UPDATE_FOLDER,
+                payload: {folder : ROOT_FOLDER},              
+            })
+        }
+
+        database.folders.doc(folderId).get()
+        .then(doc => {
+            dispatch({
+                type: ACTIONS.UPDATE_FOLDER,
+                payload : {folder: database.formatDoc(doc)}
+            })
+        })
+        .catch( ()=> {
+            dispatch({
+                type: ACTIONS.UPDATE_FOLDER,
+                payload : {folder: ROOT_FOLDER}
+            })
+        }) 
+
+        return state;
+    },[folderId])
+
+    
+    useEffect( () => {
+        return database.folders
+            .where("parentId", "==" ,folderId)
+            .where("userId","==", firebase.auth().currentUser.uid)
+            .orderBy("createdAt")
+            .onSnapshot(snapshot => {
+                dispatch({
+                    type: ACTIONS.SET_CHILD_FOLDERS,
+                    payload : { childFolders : snapshot.docs.map(database.formatDoc) }
+                })
+            })
+    },[folderId])
+
+    return state;
+}
\ No newline at end of file
-- 
GitLab