UNPKG

@excentone/spfx-react

Version:

Contains custom ReactJs components and hooks intended to use when developing SharePoint Framework (SPFx) Web components.

47 lines (45 loc) 2 kB
import { useSpClient } from "../useSpClient"; import { useCallback, useMemo } from "react"; import { useScopedService } from "../../contexts"; import { ConsoleLogger } from "@excentone/spfx-core-lib"; export const useSPFolder = ({ rootFolderName, subFolderNames }) => { const sp = useSpClient(); const logger = useScopedService(ConsoleLogger.serviceKey); const subFolders = useMemo(() => subFolderNames || [], subFolderNames); const getOrCreateSPFolder = useCallback((getFolder, subDir) => getFolder .then(async ({ folders }) => { const folderName = typeof subDir === 'string' ? subDir : subDir(); const targetOrCreateFolder = folders.getByName(folderName); const createFolder = async () => { logger.debug(`Creating subfolder "${folderName}"`); const result = await folders.add(folderName); return result.folder; }; try { const existence = await targetOrCreateFolder(); if (existence && existence.Exists) return targetOrCreateFolder; return await createFolder(); } catch (err) { console.error(err); return await createFolder(); } }), [logger]); const getSPFolder = useCallback(async (...subDirectories) => { const root = sp.web.lists.getByTitle(rootFolderName).rootFolder; const subPaths = [...subFolders, ...subDirectories]; if (subPaths && subPaths.length) return await subPaths.reduce(getOrCreateSPFolder, Promise.resolve(root)); return root; }, [subFolders]); const getSPFileByName = useCallback(async (fileName, ...subDirectories) => { const spFolder = await getSPFolder(...subDirectories); return spFolder.files.getByName(fileName); }, [getSPFolder]); return useMemo(() => ({ getSPFolder, getSPFileByName }), [getSPFolder, getSPFileByName]); }; //# sourceMappingURL=useSPFolder.js.map