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