Skip to content
Snippets Groups Projects

Createfolder

Merged Nidharshan A requested to merge createfolder into master
11 files
+ 827
26
Compare changes
  • Side-by-side
  • Inline
Files
11
+ 101
0
 
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
Loading