본문 바로가기
개발/React

리액트 - 파일 브라우저 만들기 (React File Browser with chonky)

by 피로물든딸기 2024. 3. 16.
반응형

리액트 전체 링크

 

참고

- https://chonky.io/docs/2.x/

- https://chonky.io/storybook/2.x/?path=/story/file-browser-demos--mutable-virtual-file-system

- Mui로 파일 브라우저 만들기 (React File Browser with Mui)

 

- 파일 브라우저 만들기
- chonky 기본 설정 확인하기
- 액션 추가하고 다크 모드 구현하기
커스텀 액션 추가하기
- Chonky 파일 맵 만들기
- 리포지토리의 폴더 정보 저장하기
- 깃허브 리포지토리를 파일 브라우저로 불러오기
useNavigate로 Toast UI Editor 이동하기

 

아래 결과는 링크에서 확인할 수 있다

 

chonky를 이용해서 파일 브라우저를 만들어보자.

 

먼저 chonkyicon을 설치하자.

npm install chonky chonky-icon-fontawesome

 

예시 코드는 다음과 같다.

import React, { useState, useCallback, useEffect, useRef, useMemo} from "react";
import { setChonkyDefaults, ChonkyActions, FileHelper, FullFileBrowser} from "chonky";
import { ChonkyIconFA } from "chonky-icon-fontawesome";

import Box from "@mui/material/Box";

const demoMap = require("./demo.json");

const prepareCustomFileMap = () => {
  const baseFileMap = demoMap.fileMap;
  const rootFolderId = demoMap.rootFolderId;
  return { baseFileMap, rootFolderId };
};

const useCustomFileMap = () => {
  const { baseFileMap, rootFolderId } = useMemo(prepareCustomFileMap, []);

  const [fileMap, setFileMap] = useState(baseFileMap);
  const [currentFolderId, setCurrentFolderId] = useState(rootFolderId);

  const resetFileMap = useCallback(() => {
    setFileMap(baseFileMap);
    setCurrentFolderId(rootFolderId);
  }, [baseFileMap, rootFolderId]);

  const currentFolderIdRef = useRef(currentFolderId);
  useEffect(() => {
    currentFolderIdRef.current = currentFolderId;
  }, [currentFolderId]);

  const deleteFiles = useCallback((files) => {
    setFileMap((currentFileMap) => {
      const newFileMap = { ...currentFileMap };
      files.forEach((file) => {
        delete newFileMap[file.id];

        if (file.parentId) {
          const parent = newFileMap[file.parentId];
          const newChildrenIds = parent.childrenIds.filter(
            (id) => id !== file.id
          );
          newFileMap[file.parentId] = {
            ...parent,
            childrenIds: newChildrenIds,
            childrenCount: newChildrenIds.length,
          };
        }
      });

      return newFileMap;
    });
  }, []);

  const moveFiles = useCallback((files, source, destination) => {
    setFileMap((currentFileMap) => {
      const newFileMap = { ...currentFileMap };
      const moveFileIds = new Set(files.map((f) => f.id));

      const newSourceChildrenIds = source.childrenIds.filter(
        (id) => !moveFileIds.has(id)
      );
      newFileMap[source.id] = {
        ...source,
        childrenIds: newSourceChildrenIds,
        childrenCount: newSourceChildrenIds.length,
      };

      const newDestinationChildrenIds = [
        ...destination.childrenIds,
        ...files.map((f) => f.id),
      ];
      newFileMap[destination.id] = {
        ...destination,
        childrenIds: newDestinationChildrenIds,
        childrenCount: newDestinationChildrenIds.length,
      };

      files.forEach((file) => {
        newFileMap[file.id] = {
          ...file,
          parentId: destination.id,
        };
      });

      return newFileMap;
    });
  }, []);

  const idCounter = useRef(0);
  const createFolder = useCallback((folderName) => {
    setFileMap((currentFileMap) => {
      const newFileMap = { ...currentFileMap };

      const newFolderId = `new-folder-${idCounter.current++}`;
      newFileMap[newFolderId] = {
        id: newFolderId,
        name: folderName,
        isDir: true,
        modDate: new Date(),
        parentId: currentFolderIdRef.current,
        childrenIds: [],
        childrenCount: 0,
      };

      const parent = newFileMap[currentFolderIdRef.current];
      newFileMap[currentFolderIdRef.current] = {
        ...parent,
        childrenIds: [...parent.childrenIds, newFolderId],
      };

      return newFileMap;
    });
  }, []);

  return {
    fileMap,
    currentFolderId,
    setCurrentFolderId,
    resetFileMap,
    deleteFiles,
    moveFiles,
    createFolder,
  };
};

const useFiles = (fileMap, currentFolderId) => {
  return useMemo(() => {
    const currentFolder = fileMap[currentFolderId];
    const childrenIds = currentFolder.childrenIds;
    const files = childrenIds.map((fileId) => fileMap[fileId]);
    return files;
  }, [currentFolderId, fileMap]);
};

const useFolderChain = (fileMap, currentFolderId) => {
  return useMemo(() => {
    const currentFolder = fileMap[currentFolderId];
    const folderChain = [currentFolder];
    let parentId = currentFolder.parentId;
    while (parentId) {
      const parentFile = fileMap[parentId];
      if (parentFile) {
        folderChain.unshift(parentFile);
        parentId = parentFile.parentId;
      } else {
        break;
      }
    }
    return folderChain;
  }, [currentFolderId, fileMap]);
};

const useFileActionHandler = (
  setCurrentFolderId,
  deleteFiles,
  moveFiles,
  createFolder
) => {
  return useCallback(
    (data) => {
      if (data.id === ChonkyActions.OpenFiles.id) {
        const { targetFile, files } = data.payload;
        const fileToOpen = targetFile || files[0];
        if (fileToOpen && FileHelper.isDirectory(fileToOpen)) {
          setCurrentFolderId(fileToOpen.id);
          return;
        }
      } else if (data.id === ChonkyActions.DeleteFiles.id) {
        deleteFiles(data.state.selectedFilesForAction);
      } else if (data.id === ChonkyActions.MoveFiles.id) {
        moveFiles(
          data.payload.files,
          data.payload.source,
          data.payload.destination
        );
      } else if (data.id === ChonkyActions.CreateFolder.id) {
        const folderName = prompt("Provide the name for your new folder:");
        if (folderName) createFolder(folderName);
      }
    },
    [createFolder, deleteFiles, moveFiles, setCurrentFolderId]
  );
};

const ChonkyBrowser = React.memo((props) => {
  const {
    fileMap,
    currentFolderId,
    setCurrentFolderId,
    deleteFiles,
    moveFiles,
    createFolder,
  } = useCustomFileMap();
  
  setChonkyDefaults({ iconComponent: ChonkyIconFA });
  
  const files = useFiles(fileMap, currentFolderId);
  const folderChain = useFolderChain(fileMap, currentFolderId);
  const handleFileAction = useFileActionHandler(
    setCurrentFolderId,
    deleteFiles,
    moveFiles,
    createFolder
  );
  
  const fileActions = useMemo(
    () => [ChonkyActions.CreateFolder, ChonkyActions.DeleteFiles],
    []
  );
  
  const thumbnailGenerator = useCallback(
    (file) =>
      file.thumbnailUrl ? `https://chonky.io${file.thumbnailUrl}` : null,
    []
  );

  return (
    <Box sx={{ m: 2 }}>
      <div style={{ height: 400 }}>
        <FullFileBrowser
          files={files}
          folderChain={folderChain}
          fileActions={fileActions}
          onFileAction={handleFileAction}
          thumbnailGenerator={thumbnailGenerator}
          disableDefaultFileActions={false}
          {...props}
        />
      </div>
    </Box>
  );
});

export default ChonkyBrowser;

 

demo.json은 다음과 같다.

{
    "rootFolderId": "qwerty123456",
    "fileMap": {
        "qwerty123456": {
            "id": "qwerty123456",
            "name": "Chonkyz Demo",
            "isDir": true,
            "childrenIds": [
                "e598a85f843c",
                "b53aa057fad1",
                "b6667221f24b",
                "002705459ca4",
                "a9fd7c8a04db",
                "549c1f93247a",
                "zFe",
                "zJr",
                "zHy",
                "vCt"
            ],
            "childrenCount": 6
        },
        "e598a85f843c": {
            "id": "e598a85f843c",
            "name": "Chonky Source Code",
            "isDir": true,
            "modDate": "2020-10-24T17:48:39.866Z",
            "childrenIds": [
                "9514a3d74d57",
                "ed918037b975",
                "c21e08daf308",
                "0729af954fe6",
                "a1361e98e01d",
                "12dd195bb146",
                "f9b3b8472664",
                "998c5fed54dc",
                "e6b2e6181d54",
                "24c33e69f0f1",
                "a3a6f4860f0a",
                "b4344ec9eb06",
                "0b05bc983fd9"
            ],
            "childrenCount": 13,
            "parentId": "qwerty123456"
        },
        "9514a3d74d57": {
            "id": "9514a3d74d57",
            "name": ".eslintrc.js",
            "isHidden": true,
            "size": 2293,
            "modDate": "2020-10-20T03:11:50.570Z",
            "parentId": "e598a85f843c"
        },
        "ed918037b975": {
            "id": "ed918037b975",
            "name": ".gitignore",
            "isHidden": true,
            "size": 347,
            "modDate": "2020-10-20T13:22:59.144Z",
            "parentId": "e598a85f843c"
        },
        "c21e08daf308": {
            "id": "c21e08daf308",
            "name": ".prettierrc.js",
            "isHidden": true,
            "size": 144,
            "modDate": "2020-10-20T03:11:50.570Z",
            "parentId": "e598a85f843c"
        },
        "0729af954fe6": {
            "id": "0729af954fe6",
            "name": ".travis.yml",
            "isHidden": true,
            "size": 191,
            "modDate": "2020-10-24T16:43:46.520Z",
            "parentId": "e598a85f843c"
        },
        "a1361e98e01d": {
            "id": "a1361e98e01d",
            "name": "LICENSE",
            "size": 1103,
            "modDate": "2020-10-22T04:05:02.289Z",
            "parentId": "e598a85f843c"
        },
        "12dd195bb146": {
            "id": "12dd195bb146",
            "name": "README.md",
            "size": 1457,
            "modDate": "2020-10-22T04:17:54.294Z",
            "parentId": "e598a85f843c"
        },
        "f9b3b8472664": {
            "id": "f9b3b8472664",
            "name": "lerna-debug.log",
            "size": 1119,
            "modDate": "2020-10-24T17:48:39.866Z",
            "parentId": "e598a85f843c"
        },
        "998c5fed54dc": {
            "id": "998c5fed54dc",
            "name": "lerna.json",
            "size": 71,
            "modDate": "2020-10-20T04:15:42.657Z",
            "parentId": "e598a85f843c"
        },
        "e6b2e6181d54": {
            "id": "e6b2e6181d54",
            "name": "logo",
            "isDir": true,
            "modDate": "2020-10-21T15:59:46.786Z",
            "parentId": "e598a85f843c",
            "childrenIds": [
                "148ffc6cc2e0",
                "02c01aedf901",
                "0a7e2fce8e7a",
                "7bcecbc35fda",
                "6adc7b20c64b",
                "e977504c47b7"
            ],
            "childrenCount": 6
        },
        "148ffc6cc2e0": {
            "id": "148ffc6cc2e0",
            "name": "chonky-logo-v2.png",
            "size": 74588,
            "modDate": "2020-10-21T15:55:52.555Z",
            "parentId": "e6b2e6181d54",
            "thumbnailUrl": "/thumbnails/148ffc6cc2e0.jpg"
        },
        "02c01aedf901": {
            "id": "02c01aedf901",
            "name": "chonky-logo-v2.svg",
            "size": 157045,
            "modDate": "2020-10-21T15:55:52.611Z",
            "parentId": "e6b2e6181d54"
        },
        "0a7e2fce8e7a": {
            "id": "0a7e2fce8e7a",
            "name": "chonky-logo.ai",
            "size": 91103,
            "modDate": "2020-10-21T15:55:52.455Z",
            "parentId": "e6b2e6181d54"
        },
        "7bcecbc35fda": {
            "id": "7bcecbc35fda",
            "name": "chonky-logo.svg",
            "size": 156620,
            "modDate": "2020-10-21T15:55:52.519Z",
            "parentId": "e6b2e6181d54"
        },
        "6adc7b20c64b": {
            "id": "6adc7b20c64b",
            "name": "chonky-sphere-v2.png",
            "size": 63043,
            "modDate": "2020-10-21T15:59:46.806Z",
            "parentId": "e6b2e6181d54",
            "thumbnailUrl": "/thumbnails/6adc7b20c64b.jpg"
        },
        "e977504c47b7": {
            "id": "e977504c47b7",
            "name": "chonky-sphere.svg",
            "size": 155078,
            "modDate": "2020-10-21T15:55:52.667Z",
            "parentId": "e6b2e6181d54"
        },
        "24c33e69f0f1": {
            "id": "24c33e69f0f1",
            "name": "package-lock.json",
            "size": 671832,
            "modDate": "2020-10-24T17:45:53.305Z",
            "parentId": "e598a85f843c"
        },
        "a3a6f4860f0a": {
            "id": "a3a6f4860f0a",
            "name": "package.json",
            "size": 1003,
            "modDate": "2020-10-24T17:45:52.745Z",
            "parentId": "e598a85f843c"
        },
        "b4344ec9eb06": {
            "id": "b4344ec9eb06",
            "name": "packages",
            "isDir": true,
            "modDate": "2020-10-20T04:16:50.196Z",
            "parentId": "e598a85f843c",
            "childrenIds": [
                "08e9a34357a0",
                "43d749c47bbe"
            ],
            "childrenCount": 2
        },
        "08e9a34357a0": {
            "id": "08e9a34357a0",
            "name": "chonky",
            "isDir": true,
            "modDate": "2020-10-24T18:33:09.643Z",
            "parentId": "b4344ec9eb06",
            "childrenIds": [
                "8e6390f5ce3c",
                "36659b55f402",
                "5ca005a238ee",
                "ccaeef8ef43f",
                "232ab2ded9a2",
                "efaae6261dd2",
                "d3e4ad8b7899",
                "f22891ef4c60",
                "543d473f1c38",
                "684400d53b85",
                "8296bba42999"
            ],
            "childrenCount": 11
        },
        "8e6390f5ce3c": {
            "id": "8e6390f5ce3c",
            "name": ".npmignore",
            "isHidden": true,
            "size": 19,
            "modDate": "2020-10-20T04:14:20.462Z",
            "parentId": "08e9a34357a0"
        },
        "36659b55f402": {
            "id": "36659b55f402",
            "name": "LICENSE",
            "size": 1103,
            "modDate": "2020-10-22T04:05:02.189Z",
            "parentId": "08e9a34357a0"
        },
        "5ca005a238ee": {
            "id": "5ca005a238ee",
            "name": "README.md",
            "size": 3304,
            "modDate": "2020-10-22T04:13:22.234Z",
            "parentId": "08e9a34357a0"
        },
        "ccaeef8ef43f": {
            "id": "ccaeef8ef43f",
            "name": "jest.config.js",
            "size": 108,
            "modDate": "2020-10-24T17:50:59.584Z",
            "parentId": "08e9a34357a0"
        },
        "232ab2ded9a2": {
            "id": "232ab2ded9a2",
            "name": "package-lock.json",
            "size": 58201,
            "modDate": "2020-10-24T17:55:57.396Z",
            "parentId": "08e9a34357a0"
        },
        "efaae6261dd2": {
            "id": "efaae6261dd2",
            "name": "package.json",
            "size": 2504,
            "modDate": "2020-10-24T18:33:09.643Z",
            "parentId": "08e9a34357a0"
        },
        "d3e4ad8b7899": {
            "id": "d3e4ad8b7899",
            "name": "src",
            "isDir": true,
            "modDate": "2020-10-24T15:43:58.573Z",
            "parentId": "08e9a34357a0",
            "childrenIds": [
                "e63419ad8876",
                "bbc23e48013e",
                "0fc90868914b",
                "1f5e98ca265e",
                "757357e35eb9",
                "4f0514c89627"
            ],
            "childrenCount": 6
        },
        "e63419ad8876": {
            "id": "e63419ad8876",
            "name": "action-definitions",
            "isDir": true,
            "modDate": "2020-10-24T16:49:22.927Z",
            "parentId": "d3e4ad8b7899",
            "childrenIds": [
                "c340af44766a",
                "d9e86056caed",
                "1cadbc6ac017",
                "2a064b95ddd2"
            ],
            "childrenCount": 4
        },
        "c340af44766a": {
            "id": "c340af44766a",
            "name": "default.ts",
            "size": 4680,
            "modDate": "2020-10-24T18:25:34.649Z",
            "parentId": "e63419ad8876"
        },
        "d9e86056caed": {
            "id": "d9e86056caed",
            "name": "essential.ts",
            "size": 10794,
            "modDate": "2020-10-24T18:20:31.266Z",
            "parentId": "e63419ad8876"
        },
        "1cadbc6ac017": {
            "id": "1cadbc6ac017",
            "name": "index.ts",
            "size": 976,
            "modDate": "2020-10-24T17:02:06.892Z",
            "parentId": "e63419ad8876"
        },
        "2a064b95ddd2": {
            "id": "2a064b95ddd2",
            "name": "other.ts",
            "size": 1706,
            "modDate": "2020-10-24T18:26:38.828Z",
            "parentId": "e63419ad8876"
        },
        "bbc23e48013e": {
            "id": "bbc23e48013e",
            "name": "components",
            "isDir": true,
            "modDate": "2020-10-22T16:12:57.200Z",
            "parentId": "d3e4ad8b7899",
            "childrenIds": [
                "ebb33a8320b7",
                "f792cce1f126",
                "acac9b332214",
                "16df703a0e34"
            ],
            "childrenCount": 4
        },
        "ebb33a8320b7": {
            "id": "ebb33a8320b7",
            "name": "external",
            "isDir": true,
            "modDate": "2020-10-23T23:50:58.325Z",
            "parentId": "bbc23e48013e",
            "childrenIds": [
                "6492307a5acd",
                "1f1e663f7a95",
                "17467a52f595",
                "90de868d6c92",
                "b4ceb816ab04",
                "0e586e88b821",
                "4a13651533aa",
                "32236429b973",
                "4fb825f757d8",
                "03c6919c4be0",
                "b0761f6e733c",
                "aa98fe4152a7",
                "7f90887a0b55"
            ],
            "childrenCount": 13
        },
        "6492307a5acd": {
            "id": "6492307a5acd",
            "name": "ChonkyIcon.tsx",
            "size": 7875,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "ebb33a8320b7"
        },
        "1f1e663f7a95": {
            "id": "1f1e663f7a95",
            "name": "FileBrowser.tsx",
            "size": 2578,
            "modDate": "2020-10-23T21:37:02.606Z",
            "parentId": "ebb33a8320b7"
        },
        "17467a52f595": {
            "id": "17467a52f595",
            "name": "FileContextMenu-hooks.ts",
            "size": 1746,
            "modDate": "2020-10-24T16:26:47.115Z",
            "parentId": "ebb33a8320b7"
        },
        "90de868d6c92": {
            "id": "90de868d6c92",
            "name": "FileContextMenu.tsx",
            "size": 3080,
            "modDate": "2020-10-24T16:28:45.473Z",
            "parentId": "ebb33a8320b7"
        },
        "b4ceb816ab04": {
            "id": "b4ceb816ab04",
            "name": "FileNavbar-hooks.ts",
            "size": 1602,
            "modDate": "2020-10-24T15:02:21.169Z",
            "parentId": "ebb33a8320b7"
        },
        "0e586e88b821": {
            "id": "0e586e88b821",
            "name": "FileNavbar.tsx",
            "size": 3122,
            "modDate": "2020-10-24T15:02:21.213Z",
            "parentId": "ebb33a8320b7"
        },
        "4a13651533aa": {
            "id": "4a13651533aa",
            "name": "FileToolbar.tsx",
            "size": 2163,
            "modDate": "2020-10-24T00:31:44.378Z",
            "parentId": "ebb33a8320b7"
        },
        "32236429b973": {
            "id": "32236429b973",
            "name": "TextPlaceholder.tsx",
            "size": 752,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "ebb33a8320b7"
        },
        "4fb825f757d8": {
            "id": "4fb825f757d8",
            "name": "ToolbarButton.tsx",
            "size": 3856,
            "modDate": "2020-10-22T19:33:01.267Z",
            "parentId": "ebb33a8320b7"
        },
        "03c6919c4be0": {
            "id": "03c6919c4be0",
            "name": "ToolbarDropdown.tsx",
            "size": 1955,
            "modDate": "2020-10-24T16:28:45.465Z",
            "parentId": "ebb33a8320b7"
        },
        "b0761f6e733c": {
            "id": "b0761f6e733c",
            "name": "ToolbarDropdownButton.tsx",
            "size": 3549,
            "modDate": "2020-10-24T01:01:02.195Z",
            "parentId": "ebb33a8320b7"
        },
        "aa98fe4152a7": {
            "id": "aa98fe4152a7",
            "name": "ToolbarInfo.tsx",
            "size": 1481,
            "modDate": "2020-10-22T00:28:16.619Z",
            "parentId": "ebb33a8320b7"
        },
        "7f90887a0b55": {
            "id": "7f90887a0b55",
            "name": "ToolbarSearch.tsx",
            "size": 1710,
            "modDate": "2020-10-21T00:50:23.792Z",
            "parentId": "ebb33a8320b7"
        },
        "f792cce1f126": {
            "id": "f792cce1f126",
            "name": "file-entry",
            "isDir": true,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "bbc23e48013e",
            "childrenIds": [
                "ea363491e29c",
                "8a0dd72dc223",
                "836d378b2fb4",
                "b303b40eba33",
                "3df2618f8ea1",
                "869fadc64ed3",
                "374a4778152a",
                "1953147eee99",
                "e805e42f66fa"
            ],
            "childrenCount": 9
        },
        "ea363491e29c": {
            "id": "ea363491e29c",
            "name": "ClickableFileEntry-hooks.tsx",
            "size": 2142,
            "modDate": "2020-10-24T15:02:21.193Z",
            "parentId": "f792cce1f126"
        },
        "8a0dd72dc223": {
            "id": "8a0dd72dc223",
            "name": "ClickableFileEntry.tsx",
            "size": 1242,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "f792cce1f126"
        },
        "836d378b2fb4": {
            "id": "836d378b2fb4",
            "name": "DnDFileEntry.tsx",
            "size": 4443,
            "modDate": "2020-10-24T15:02:21.197Z",
            "parentId": "f792cce1f126"
        },
        "b303b40eba33": {
            "id": "b303b40eba33",
            "name": "DnDFileListDragLayer.tsx",
            "size": 2853,
            "modDate": "2020-10-22T00:08:59.184Z",
            "parentId": "f792cce1f126"
        },
        "3df2618f8ea1": {
            "id": "3df2618f8ea1",
            "name": "FileEntry-hooks.tsx",
            "size": 6272,
            "modDate": "2020-10-24T18:04:18.416Z",
            "parentId": "f792cce1f126"
        },
        "869fadc64ed3": {
            "id": "869fadc64ed3",
            "name": "FileEntry.tsx",
            "size": 432,
            "modDate": "2020-10-24T17:15:16.388Z",
            "parentId": "f792cce1f126"
        },
        "374a4778152a": {
            "id": "374a4778152a",
            "name": "FileEntryGrid.tsx",
            "size": 3559,
            "modDate": "2020-10-24T17:20:45.191Z",
            "parentId": "f792cce1f126"
        },
        "1953147eee99": {
            "id": "1953147eee99",
            "name": "FileEntryList.tsx",
            "size": 3165,
            "modDate": "2020-10-24T17:20:45.191Z",
            "parentId": "f792cce1f126"
        },
        "e805e42f66fa": {
            "id": "e805e42f66fa",
            "name": "SmartFileEntry.tsx",
            "size": 1230,
            "modDate": "2020-10-22T01:09:57.186Z",
            "parentId": "f792cce1f126"
        },
        "acac9b332214": {
            "id": "acac9b332214",
            "name": "file-list",
            "isDir": true,
            "modDate": "2020-10-22T17:06:35.681Z",
            "parentId": "bbc23e48013e",
            "childrenIds": [
                "3ec0fdc85293",
                "07c1b362ab80",
                "ed52b1577cbd",
                "f73e6e5fc3ac",
                "20ac09e4b8c0"
            ],
            "childrenCount": 5
        },
        "3ec0fdc85293": {
            "id": "3ec0fdc85293",
            "name": "FileList-hooks.tsx",
            "size": 892,
            "modDate": "2020-10-24T17:23:15.113Z",
            "parentId": "acac9b332214"
        },
        "07c1b362ab80": {
            "id": "07c1b362ab80",
            "name": "FileList.tsx",
            "size": 2007,
            "modDate": "2020-10-24T19:04:16.476Z",
            "parentId": "acac9b332214"
        },
        "ed52b1577cbd": {
            "id": "ed52b1577cbd",
            "name": "FileListEmpty.tsx",
            "size": 961,
            "modDate": "2020-10-22T16:30:27.040Z",
            "parentId": "acac9b332214"
        },
        "f73e6e5fc3ac": {
            "id": "f73e6e5fc3ac",
            "name": "FileListGrid.tsx",
            "size": 5471,
            "modDate": "2020-10-22T17:23:26.674Z",
            "parentId": "acac9b332214"
        },
        "20ac09e4b8c0": {
            "id": "20ac09e4b8c0",
            "name": "FileListList.tsx",
            "size": 1959,
            "modDate": "2020-10-22T16:30:39.684Z",
            "parentId": "acac9b332214"
        },
        "16df703a0e34": {
            "id": "16df703a0e34",
            "name": "internal",
            "isDir": true,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "bbc23e48013e",
            "childrenIds": [
                "bae240ccdb0d",
                "0517169a653e",
                "0929ebecda08",
                "15fb0260468b",
                "767d14961ba2",
                "6823f91fbd62",
                "d1b0d830ccfc"
            ],
            "childrenCount": 7
        },
        "bae240ccdb0d": {
            "id": "bae240ccdb0d",
            "name": "ChonkyBusinessLogic.tsx",
            "size": 2189,
            "modDate": "2020-10-23T21:29:58.392Z",
            "parentId": "16df703a0e34"
        },
        "0517169a653e": {
            "id": "0517169a653e",
            "name": "ChonkyPresentationLayer.tsx",
            "size": 4073,
            "modDate": "2020-10-24T01:27:15.160Z",
            "parentId": "16df703a0e34"
        },
        "0929ebecda08": {
            "id": "0929ebecda08",
            "name": "ClickableWrapper-hooks.tsx",
            "size": 2874,
            "modDate": "2020-10-22T01:17:59.838Z",
            "parentId": "16df703a0e34"
        },
        "15fb0260468b": {
            "id": "15fb0260468b",
            "name": "ClickableWrapper.tsx",
            "size": 1895,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "16df703a0e34"
        },
        "767d14961ba2": {
            "id": "767d14961ba2",
            "name": "ErrorMessage.tsx",
            "size": 787,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "16df703a0e34"
        },
        "6823f91fbd62": {
            "id": "6823f91fbd62",
            "name": "FileThumbnail.tsx",
            "size": 711,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "16df703a0e34"
        },
        "d1b0d830ccfc": {
            "id": "d1b0d830ccfc",
            "name": "HotkeyListener.tsx",
            "size": 1250,
            "modDate": "2020-10-23T21:22:54.374Z",
            "parentId": "16df703a0e34"
        },
        "0fc90868914b": {
            "id": "0fc90868914b",
            "name": "index.ts",
            "size": 1289,
            "modDate": "2020-10-24T15:02:21.201Z",
            "parentId": "d3e4ad8b7899"
        },
        "1f5e98ca265e": {
            "id": "1f5e98ca265e",
            "name": "redux",
            "isDir": true,
            "modDate": "2020-10-23T15:12:22.151Z",
            "parentId": "d3e4ad8b7899",
            "childrenIds": [
                "8f24e9d3c3d9",
                "b993f382ec52",
                "4a3b28a83369",
                "f8c35945417a",
                "c81dbb9abcc0",
                "3bc086273549",
                "0b415f2bdc4d",
                "7703a3d450bb"
            ],
            "childrenCount": 8
        },
        "8f24e9d3c3d9": {
            "id": "8f24e9d3c3d9",
            "name": "files-transforms.ts",
            "size": 2985,
            "modDate": "2020-10-24T14:59:09.588Z",
            "parentId": "1f5e98ca265e"
        },
        "b993f382ec52": {
            "id": "b993f382ec52",
            "name": "reducers.ts",
            "size": 7691,
            "modDate": "2020-10-24T15:06:10.670Z",
            "parentId": "1f5e98ca265e"
        },
        "4a3b28a83369": {
            "id": "4a3b28a83369",
            "name": "selectors.ts",
            "size": 4766,
            "modDate": "2020-10-24T02:35:09.515Z",
            "parentId": "1f5e98ca265e"
        },
        "f8c35945417a": {
            "id": "f8c35945417a",
            "name": "state.ts",
            "size": 1133,
            "modDate": "2020-10-24T15:02:21.193Z",
            "parentId": "1f5e98ca265e"
        },
        "c81dbb9abcc0": {
            "id": "c81dbb9abcc0",
            "name": "store.ts",
            "size": 1990,
            "modDate": "2020-10-23T17:03:59.027Z",
            "parentId": "1f5e98ca265e"
        },
        "3bc086273549": {
            "id": "3bc086273549",
            "name": "thunks",
            "isDir": true,
            "modDate": "2020-10-23T21:13:15.091Z",
            "parentId": "1f5e98ca265e",
            "childrenIds": [
                "a2db415a6e18",
                "65238c94e4e6",
                "93e6d0a7b61b"
            ],
            "childrenCount": 3
        },
        "a2db415a6e18": {
            "id": "a2db415a6e18",
            "name": "dispatchers.thunks.ts",
            "size": 5790,
            "modDate": "2020-10-24T16:26:47.115Z",
            "parentId": "3bc086273549"
        },
        "65238c94e4e6": {
            "id": "65238c94e4e6",
            "name": "file-actions.thunks.ts",
            "size": 6552,
            "modDate": "2020-10-24T16:26:47.115Z",
            "parentId": "3bc086273549"
        },
        "93e6d0a7b61b": {
            "id": "93e6d0a7b61b",
            "name": "files.thunks.ts",
            "size": 4200,
            "modDate": "2020-10-24T15:02:21.205Z",
            "parentId": "3bc086273549"
        },
        "0b415f2bdc4d": {
            "id": "0b415f2bdc4d",
            "name": "types.ts",
            "size": 2433,
            "modDate": "2020-10-24T16:26:47.115Z",
            "parentId": "1f5e98ca265e"
        },
        "7703a3d450bb": {
            "id": "7703a3d450bb",
            "name": "watchers.ts",
            "size": 2955,
            "modDate": "2020-10-24T15:02:21.189Z",
            "parentId": "1f5e98ca265e"
        },
        "757357e35eb9": {
            "id": "757357e35eb9",
            "name": "types",
            "isDir": true,
            "modDate": "2020-10-24T15:00:36.227Z",
            "parentId": "d3e4ad8b7899",
            "childrenIds": [
                "b7a2a86f17af",
                "a5845a192903",
                "278b8e70fd00",
                "335428d20376",
                "1b4ae6757e66",
                "bac1fc5d2348",
                "76f7cdfe3e4e",
                "7ad6dbf5bde1",
                "135e7f4a6fd4",
                "fc916f7048fa",
                "2b8624bab96b",
                "5acb74d37cbb",
                "718a4c2e24dd",
                "cdf88bda378f"
            ],
            "childrenCount": 14
        },
        "b7a2a86f17af": {
            "id": "b7a2a86f17af",
            "name": "action-handler.types.ts",
            "size": 669,
            "modDate": "2020-10-24T15:00:13.051Z",
            "parentId": "757357e35eb9"
        },
        "a5845a192903": {
            "id": "a5845a192903",
            "name": "action-menus.types.ts",
            "size": 144,
            "modDate": "2020-10-24T15:00:36.227Z",
            "parentId": "757357e35eb9"
        },
        "278b8e70fd00": {
            "id": "278b8e70fd00",
            "name": "action-payloads.types.ts",
            "size": 1089,
            "modDate": "2020-10-24T14:49:34.381Z",
            "parentId": "757357e35eb9"
        },
        "335428d20376": {
            "id": "335428d20376",
            "name": "action.types.ts",
            "size": 3650,
            "modDate": "2020-10-24T18:27:59.783Z",
            "parentId": "757357e35eb9"
        },
        "1b4ae6757e66": {
            "id": "1b4ae6757e66",
            "name": "context-menu.types.ts",
            "size": 79,
            "modDate": "2020-10-23T23:19:40.211Z",
            "parentId": "757357e35eb9"
        },
        "bac1fc5d2348": {
            "id": "bac1fc5d2348",
            "name": "file-browser.types.ts",
            "size": 4697,
            "modDate": "2020-10-24T16:26:47.115Z",
            "parentId": "757357e35eb9"
        },
        "76f7cdfe3e4e": {
            "id": "76f7cdfe3e4e",
            "name": "file-view.types.ts",
            "size": 217,
            "modDate": "2020-10-21T23:04:47.359Z",
            "parentId": "757357e35eb9"
        },
        "7ad6dbf5bde1": {
            "id": "7ad6dbf5bde1",
            "name": "files.types.ts",
            "size": 1457,
            "modDate": "2020-10-23T20:34:53.649Z",
            "parentId": "757357e35eb9"
        },
        "135e7f4a6fd4": {
            "id": "135e7f4a6fd4",
            "name": "icons.types.ts",
            "size": 2008,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "757357e35eb9"
        },
        "fc916f7048fa": {
            "id": "fc916f7048fa",
            "name": "options.types.ts",
            "size": 53,
            "modDate": "2020-10-21T22:58:06.758Z",
            "parentId": "757357e35eb9"
        },
        "2b8624bab96b": {
            "id": "2b8624bab96b",
            "name": "selection.types.ts",
            "size": 295,
            "modDate": "2020-10-22T02:20:14.005Z",
            "parentId": "757357e35eb9"
        },
        "5acb74d37cbb": {
            "id": "5acb74d37cbb",
            "name": "sort.types.ts",
            "size": 210,
            "modDate": "2020-10-21T22:58:06.754Z",
            "parentId": "757357e35eb9"
        },
        "718a4c2e24dd": {
            "id": "718a4c2e24dd",
            "name": "thumbnails.types.ts",
            "size": 180,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "757357e35eb9"
        },
        "cdf88bda378f": {
            "id": "cdf88bda378f",
            "name": "validation.types.ts",
            "size": 82,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "757357e35eb9"
        },
        "4f0514c89627": {
            "id": "4f0514c89627",
            "name": "util",
            "isDir": true,
            "modDate": "2020-10-23T14:02:20.974Z",
            "parentId": "d3e4ad8b7899",
            "childrenIds": [
                "7db03dc4e3bb",
                "78be7381a930",
                "9389a5c0e0b4",
                "05999054fe1e",
                "bbdb776662a9",
                "cc3291b04d93",
                "5e89ab628fca",
                "87692dd3f70c",
                "9f44137375e8",
                "fccc459d5c10"
            ],
            "childrenCount": 10
        },
        "7db03dc4e3bb": {
            "id": "7db03dc4e3bb",
            "name": "file-actions-definitions.ts",
            "size": 1877,
            "modDate": "2020-10-24T14:59:09.600Z",
            "parentId": "4f0514c89627"
        },
        "78be7381a930": {
            "id": "78be7381a930",
            "name": "file-actions.ts",
            "size": 3433,
            "modDate": "2020-10-24T15:06:31.894Z",
            "parentId": "4f0514c89627"
        },
        "9389a5c0e0b4": {
            "id": "9389a5c0e0b4",
            "name": "file-browser-handle.ts",
            "size": 1022,
            "modDate": "2020-10-24T15:06:31.902Z",
            "parentId": "4f0514c89627"
        },
        "05999054fe1e": {
            "id": "05999054fe1e",
            "name": "file-helper.ts",
            "size": 3269,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "4f0514c89627"
        },
        "bbdb776662a9": {
            "id": "bbdb776662a9",
            "name": "file-icon-helper.ts",
            "size": 8403,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "4f0514c89627"
        },
        "cc3291b04d93": {
            "id": "cc3291b04d93",
            "name": "helpers.ts",
            "size": 2433,
            "modDate": "2020-10-24T14:59:09.604Z",
            "parentId": "4f0514c89627"
        },
        "5e89ab628fca": {
            "id": "5e89ab628fca",
            "name": "hooks-helpers.ts",
            "size": 962,
            "modDate": "2020-10-24T15:06:31.974Z",
            "parentId": "4f0514c89627"
        },
        "87692dd3f70c": {
            "id": "87692dd3f70c",
            "name": "logger.ts",
            "size": 617,
            "modDate": "2020-10-20T03:15:57.395Z",
            "parentId": "4f0514c89627"
        },
        "9f44137375e8": {
            "id": "9f44137375e8",
            "name": "styles.ts",
            "size": 1113,
            "modDate": "2020-10-22T13:19:22.779Z",
            "parentId": "4f0514c89627"
        },
        "fccc459d5c10": {
            "id": "fccc459d5c10",
            "name": "validation.ts",
            "size": 12340,
            "modDate": "2020-10-24T14:59:09.588Z",
            "parentId": "4f0514c89627"
        },
        "f22891ef4c60": {
            "id": "f22891ef4c60",
            "name": "style",
            "isDir": true,
            "modDate": "2020-10-22T11:47:46.053Z",
            "parentId": "08e9a34357a0",
            "childrenIds": [
                "e7920873e598",
                "32d418cfcd2c",
                "7f7937a9431a",
                "02f6b6ea7336",
                "66c055cedf5d",
                "98c35be5a56e",
                "07150c45bc8a",
                "ca1a85cd8053",
                "4ea5c40da335",
                "b965a53e37bd"
            ],
            "childrenCount": 10
        },
        "e7920873e598": {
            "id": "e7920873e598",
            "name": "_file-entry-grid.scss",
            "size": 6486,
            "modDate": "2020-10-20T03:15:57.399Z",
            "parentId": "f22891ef4c60"
        },
        "32d418cfcd2c": {
            "id": "32d418cfcd2c",
            "name": "_file-entry-list.scss",
            "size": 2644,
            "modDate": "2020-10-20T03:15:57.399Z",
            "parentId": "f22891ef4c60"
        },
        "7f7937a9431a": {
            "id": "7f7937a9431a",
            "name": "_file-entry.scss",
            "size": 505,
            "modDate": "2020-10-20T03:15:57.399Z",
            "parentId": "f22891ef4c60"
        },
        "02f6b6ea7336": {
            "id": "02f6b6ea7336",
            "name": "_file-list.scss",
            "size": 401,
            "modDate": "2020-10-20T03:15:57.399Z",
            "parentId": "f22891ef4c60"
        },
        "66c055cedf5d": {
            "id": "66c055cedf5d",
            "name": "_shared.scss",
            "size": 448,
            "modDate": "2020-10-22T13:08:29.133Z",
            "parentId": "f22891ef4c60"
        },
        "98c35be5a56e": {
            "id": "98c35be5a56e",
            "name": "_text-placeholder.scss",
            "size": 462,
            "modDate": "2020-10-20T03:15:57.399Z",
            "parentId": "f22891ef4c60"
        },
        "07150c45bc8a": {
            "id": "07150c45bc8a",
            "name": "_util.scss",
            "size": 3522,
            "modDate": "2020-10-20T03:15:57.399Z",
            "parentId": "f22891ef4c60"
        },
        "ca1a85cd8053": {
            "id": "ca1a85cd8053",
            "name": "main.css",
            "size": 10305,
            "modDate": "2020-10-22T13:08:29.489Z",
            "parentId": "f22891ef4c60"
        },
        "4ea5c40da335": {
            "id": "4ea5c40da335",
            "name": "main.css.map",
            "size": 2243,
            "modDate": "2020-10-22T13:08:29.489Z",
            "parentId": "f22891ef4c60"
        },
        "b965a53e37bd": {
            "id": "b965a53e37bd",
            "name": "main.scss",
            "size": 159,
            "modDate": "2020-10-22T11:47:50.757Z",
            "parentId": "f22891ef4c60"
        },
        "543d473f1c38": {
            "id": "543d473f1c38",
            "name": "test",
            "isDir": true,
            "modDate": "2020-10-24T18:32:19.055Z",
            "parentId": "08e9a34357a0",
            "childrenIds": [
                "d9bcd9d845fe",
                "3c9c725386fd",
                "d6143c55b442",
                "e9d658e3bd16"
            ],
            "childrenCount": 4
        },
        "d9bcd9d845fe": {
            "id": "d9bcd9d845fe",
            "name": "__snapshots__",
            "isDir": true,
            "modDate": "2020-10-24T18:12:45.201Z",
            "parentId": "543d473f1c38",
            "childrenIds": [
                "d832ee48342e"
            ],
            "childrenCount": 1
        },
        "d832ee48342e": {
            "id": "d832ee48342e",
            "name": "component-hierarchy.test.tsx.snap",
            "size": 52337,
            "modDate": "2020-10-24T18:14:54.631Z",
            "parentId": "d9bcd9d845fe"
        },
        "3c9c725386fd": {
            "id": "3c9c725386fd",
            "name": "component-hierarchy.test.tsx",
            "size": 1095,
            "modDate": "2020-10-24T18:14:42.335Z",
            "parentId": "543d473f1c38"
        },
        "d6143c55b442": {
            "id": "d6143c55b442",
            "name": "file-action-handler.test.tsx",
            "size": 1519,
            "modDate": "2020-10-24T18:06:46.018Z",
            "parentId": "543d473f1c38"
        },
        "e9d658e3bd16": {
            "id": "e9d658e3bd16",
            "name": "test-util.ts",
            "size": 102,
            "modDate": "2020-10-24T17:52:08.507Z",
            "parentId": "543d473f1c38"
        },
        "684400d53b85": {
            "id": "684400d53b85",
            "name": "tsconfig.build.json",
            "size": 132,
            "modDate": "2020-10-24T16:47:15.589Z",
            "parentId": "08e9a34357a0"
        },
        "8296bba42999": {
            "id": "8296bba42999",
            "name": "tsconfig.json",
            "size": 156,
            "modDate": "2020-10-24T17:51:48.111Z",
            "parentId": "08e9a34357a0"
        },
        "43d749c47bbe": {
            "id": "43d749c47bbe",
            "name": "chonky-icon-fontawesome",
            "isDir": true,
            "modDate": "2020-10-24T18:33:09.643Z",
            "parentId": "b4344ec9eb06",
            "childrenIds": [
                "a4c13c4816f4",
                "b2007bcba768",
                "70543cbe2624",
                "e9e4f67dc916",
                "56cb4f7c8489",
                "51e3d64a108a"
            ],
            "childrenCount": 6
        },
        "a4c13c4816f4": {
            "id": "a4c13c4816f4",
            "name": "LICENSE",
            "size": 1103,
            "modDate": "2020-10-22T04:05:02.193Z",
            "parentId": "43d749c47bbe"
        },
        "b2007bcba768": {
            "id": "b2007bcba768",
            "name": "README.md",
            "size": 160,
            "modDate": "2020-10-20T04:16:50.196Z",
            "parentId": "43d749c47bbe"
        },
        "70543cbe2624": {
            "id": "70543cbe2624",
            "name": "package-lock.json",
            "size": 60041,
            "modDate": "2020-10-24T17:55:59.632Z",
            "parentId": "43d749c47bbe"
        },
        "e9e4f67dc916": {
            "id": "e9e4f67dc916",
            "name": "package.json",
            "size": 1235,
            "modDate": "2020-10-24T18:33:09.643Z",
            "parentId": "43d749c47bbe"
        },
        "56cb4f7c8489": {
            "id": "56cb4f7c8489",
            "name": "src",
            "isDir": true,
            "modDate": "2020-10-20T13:09:34.294Z",
            "parentId": "43d749c47bbe",
            "childrenIds": [
                "3c8091a3c0ab",
                "456be3cd3136"
            ],
            "childrenCount": 2
        },
        "3c8091a3c0ab": {
            "id": "3c8091a3c0ab",
            "name": "ChonkyIconFA.tsx",
            "size": 311,
            "modDate": "2020-10-24T16:39:43.439Z",
            "parentId": "56cb4f7c8489"
        },
        "456be3cd3136": {
            "id": "456be3cd3136",
            "name": "index.ts",
            "size": 47,
            "modDate": "2020-10-20T13:09:44.914Z",
            "parentId": "56cb4f7c8489"
        },
        "51e3d64a108a": {
            "id": "51e3d64a108a",
            "name": "tsconfig.json",
            "size": 132,
            "modDate": "2020-10-20T13:13:55.871Z",
            "parentId": "43d749c47bbe"
        },
        "0b05bc983fd9": {
            "id": "0b05bc983fd9",
            "name": "react.tsconfig.json",
            "size": 648,
            "modDate": "2020-10-20T13:13:02.620Z",
            "parentId": "e598a85f843c"
        },
        "b53aa057fad1": {
            "id": "b53aa057fad1",
            "name": "Images with thumbnails",
            "isDir": true,
            "modDate": "2020-06-27T12:28:53.648Z",
            "childrenIds": [
                "353f63dbd169",
                "28f0f5f391eb",
                "d1b9dc5457b8",
                "0c8fa73e4685",
                "0b74a148c890",
                "7cd701884c5d",
                "6655c71cdc8d",
                "653f1108cf87"
            ],
            "childrenCount": 8,
            "parentId": "qwerty123456"
        },
        "353f63dbd169": {
            "id": "353f63dbd169",
            "name": "Dotonbori.jpg",
            "size": 212024,
            "modDate": "2020-06-27T12:16:46.392Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/353f63dbd169.jpg"
        },
        "28f0f5f391eb": {
            "id": "28f0f5f391eb",
            "name": "Itsukushima.jpg",
            "size": 90820,
            "modDate": "2020-06-27T12:14:34.529Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/28f0f5f391eb.jpg"
        },
        "d1b9dc5457b8": {
            "id": "d1b9dc5457b8",
            "name": "Kyoto Station.jpg",
            "size": 204463,
            "modDate": "2020-06-27T12:21:44.549Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/d1b9dc5457b8.jpg"
        },
        "0c8fa73e4685": {
            "id": "0c8fa73e4685",
            "name": "Mount Fuji.jpg",
            "size": 62851,
            "modDate": "2020-06-27T12:13:19.034Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/0c8fa73e4685.jpg"
        },
        "0b74a148c890": {
            "id": "0b74a148c890",
            "name": "Osaka Castle.jpg",
            "size": 87531,
            "modDate": "2020-06-27T12:15:28.237Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/0b74a148c890.jpg"
        },
        "7cd701884c5d": {
            "id": "7cd701884c5d",
            "name": "Tokyo Skytree.jpg",
            "size": 164850,
            "modDate": "2020-06-27T12:21:21.209Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/7cd701884c5d.jpg"
        },
        "6655c71cdc8d": {
            "id": "6655c71cdc8d",
            "name": "Tokyo.jpg",
            "size": 109441,
            "modDate": "2020-06-27T12:17:34.935Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/6655c71cdc8d.jpg"
        },
        "653f1108cf87": {
            "id": "653f1108cf87",
            "name": "Yoshinoyama.jpg",
            "size": 201866,
            "modDate": "2020-06-27T12:22:07.869Z",
            "parentId": "b53aa057fad1",
            "thumbnailUrl": "/thumbnails/653f1108cf87.jpg"
        },
        "b6667221f24b": {
            "id": "b6667221f24b",
            "name": "Files with long names",
            "isDir": true,
            "modDate": "2020-06-27T13:38:08.776Z",
            "childrenIds": [
                "8d6a608dbd08",
                "6b8711a21780",
                "4a2c1afcc755"
            ],
            "childrenCount": 3,
            "parentId": "qwerty123456"
        },
        "8d6a608dbd08": {
            "id": "8d6a608dbd08",
            "name": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas quis nunc diam. Etiam accumsan, diam non sodales sollicitudin.txt",
            "size": 0,
            "modDate": "2020-06-27T13:38:08.776Z",
            "parentId": "b6667221f24b"
        },
        "6b8711a21780": {
            "id": "6b8711a21780",
            "name": "Sed at tempus arcu. Vestibulum viverra nisl eget mi porta sodales. In suscipit luctus vestibulum.pdf",
            "size": 0,
            "modDate": "2020-06-27T13:35:40.786Z",
            "parentId": "b6667221f24b"
        },
        "4a2c1afcc755": {
            "id": "4a2c1afcc755",
            "name": "this_is_a_python_script_with_an_extremely_long_name_that_tries_to_be_descriptive_but_ends_up_being_too_verbose.py",
            "size": 0,
            "modDate": "2020-06-27T13:31:15.978Z",
            "parentId": "b6667221f24b"
        },
        "002705459ca4": {
            "id": "002705459ca4",
            "name": "Empty folder",
            "isDir": true,
            "modDate": "2020-07-18T22:27:23.864Z",
            "childrenIds": [],
            "childrenCount": 0,
            "parentId": "qwerty123456"
        },
        "a9fd7c8a04db": {
            "id": "a9fd7c8a04db",
            "name": "15 nested folders",
            "isDir": true,
            "modDate": "2020-06-27T13:32:07.253Z",
            "childrenIds": [
                "e3bcade90390"
            ],
            "childrenCount": 1,
            "parentId": "qwerty123456"
        },
        "e3bcade90390": {
            "id": "e3bcade90390",
            "name": "Level 1",
            "isDir": true,
            "modDate": "2020-06-27T13:32:10.805Z",
            "parentId": "a9fd7c8a04db",
            "childrenIds": [
                "99a4ce856444"
            ],
            "childrenCount": 1
        },
        "99a4ce856444": {
            "id": "99a4ce856444",
            "name": "Level 2",
            "isDir": true,
            "modDate": "2020-06-27T13:32:14.109Z",
            "parentId": "e3bcade90390",
            "childrenIds": [
                "7263c24adb31"
            ],
            "childrenCount": 1
        },
        "7263c24adb31": {
            "id": "7263c24adb31",
            "name": "Level 3",
            "isDir": true,
            "modDate": "2020-06-27T13:32:17.225Z",
            "parentId": "99a4ce856444",
            "childrenIds": [
                "ca1a1fd357a3"
            ],
            "childrenCount": 1
        },
        "ca1a1fd357a3": {
            "id": "ca1a1fd357a3",
            "name": "Level 4",
            "isDir": true,
            "modDate": "2020-06-27T13:32:20.329Z",
            "parentId": "7263c24adb31",
            "childrenIds": [
                "f5962105e6bf"
            ],
            "childrenCount": 1
        },
        "f5962105e6bf": {
            "id": "f5962105e6bf",
            "name": "Level 5",
            "isDir": true,
            "modDate": "2020-06-27T13:32:24.209Z",
            "parentId": "ca1a1fd357a3",
            "childrenIds": [
                "eb99622b6bf7"
            ],
            "childrenCount": 1
        },
        "eb99622b6bf7": {
            "id": "eb99622b6bf7",
            "name": "Level 6",
            "isDir": true,
            "modDate": "2020-06-27T13:32:28.661Z",
            "parentId": "f5962105e6bf",
            "childrenIds": [
                "eb6ef39dcf7e"
            ],
            "childrenCount": 1
        },
        "eb6ef39dcf7e": {
            "id": "eb6ef39dcf7e",
            "name": "Level 7",
            "isDir": true,
            "modDate": "2020-06-27T13:32:33.273Z",
            "parentId": "eb99622b6bf7",
            "childrenIds": [
                "a09fd90e8a3e"
            ],
            "childrenCount": 1
        },
        "a09fd90e8a3e": {
            "id": "a09fd90e8a3e",
            "name": "Level 8",
            "isDir": true,
            "modDate": "2020-06-27T13:32:36.993Z",
            "parentId": "eb6ef39dcf7e",
            "childrenIds": [
                "8e7120860c41"
            ],
            "childrenCount": 1
        },
        "8e7120860c41": {
            "id": "8e7120860c41",
            "name": "Level 9",
            "isDir": true,
            "modDate": "2020-06-27T13:32:40.877Z",
            "parentId": "a09fd90e8a3e",
            "childrenIds": [
                "3dc12662a950"
            ],
            "childrenCount": 1
        },
        "3dc12662a950": {
            "id": "3dc12662a950",
            "name": "Level 10",
            "isDir": true,
            "modDate": "2020-06-27T13:32:44.009Z",
            "parentId": "8e7120860c41",
            "childrenIds": [
                "1062ab9dec65"
            ],
            "childrenCount": 1
        },
        "1062ab9dec65": {
            "id": "1062ab9dec65",
            "name": "Level 11",
            "isDir": true,
            "modDate": "2020-06-27T13:32:46.497Z",
            "parentId": "3dc12662a950",
            "childrenIds": [
                "ca09fe075bf4"
            ],
            "childrenCount": 1
        },
        "ca09fe075bf4": {
            "id": "ca09fe075bf4",
            "name": "Level 12",
            "isDir": true,
            "modDate": "2020-06-27T13:32:49.597Z",
            "parentId": "1062ab9dec65",
            "childrenIds": [
                "29fda22251ec"
            ],
            "childrenCount": 1
        },
        "29fda22251ec": {
            "id": "29fda22251ec",
            "name": "Level 13",
            "isDir": true,
            "modDate": "2020-06-27T13:32:52.861Z",
            "parentId": "ca09fe075bf4",
            "childrenIds": [
                "8270c2231d78"
            ],
            "childrenCount": 1
        },
        "8270c2231d78": {
            "id": "8270c2231d78",
            "name": "Level 14",
            "isDir": true,
            "modDate": "2020-06-27T13:32:56.657Z",
            "parentId": "29fda22251ec",
            "childrenIds": [
                "e3c798d6abf7"
            ],
            "childrenCount": 1
        },
        "e3c798d6abf7": {
            "id": "e3c798d6abf7",
            "name": "Level 15",
            "isDir": true,
            "modDate": "2020-06-27T13:34:35.083Z",
            "parentId": "8270c2231d78",
            "childrenIds": [
                "d2551145553d"
            ],
            "childrenCount": 1
        },
        "d2551145553d": {
            "id": "d2551145553d",
            "name": "Bigfoot Footage.avi",
            "size": 3601921,
            "modDate": "2020-06-27T13:34:35.083Z",
            "parentId": "e3c798d6abf7"
        },
        "549c1f93247a": {
            "id": "549c1f93247a",
            "name": "Files that load forever",
            "isDir": true,
            "modDate": "2020-06-27T13:58:16.428Z",
            "childrenIds": [
                "34308fe0264f",
                "79e0e1372800",
                "a358142e72e3"
            ],
            "childrenCount": 3,
            "parentId": "qwerty123456"
        },
        "34308fe0264f": null,
        "79e0e1372800": null,
        "a358142e72e3": null,
        "zFe": {
            "id": "zFe",
            "name": ".hidden.txt",
            "isHidden": true,
            "modDate": "1997-04-26T11:00:00.000Z",
            "size": 42,
            "parentId": "qwerty123456"
        },
        "zJr": {
            "id": "zJr",
            "name": "encrypted.zip",
            "isEncrypted": true,
            "modDate": "2020-10-24T19:10:17.659Z",
            "size": 1337,
            "parentId": "qwerty123456"
        },
        "zHy": {
            "id": "zHy",
            "name": "chonky-sphere-v2.png",
            "thumbnailUrl": "/chonky-sphere-v2.png",
            "modDate": "2020-10-24T19:10:17.659Z",
            "size": 322,
            "parentId": "qwerty123456"
        },
        "vCt": {
            "id": "vCt",
            "name": "nyan-cat.gif",
            "thumbnailUrl": "/nyan-cat.gif",
            "size": 9001,
            "modDate": "2020-10-24T19:10:17.659Z",
            "parentId": "qwerty123456"
        }
    }
}
반응형

댓글