import * as Optics from "monocle-ts"; import * as Traversal from "monocle-ts/Traversal"; import * as Array from "fp-ts/Array"; import { Document, File, OfficeFolder } from "le-coffre-resources/dist/Notary"; /** * Lenses */ export const folderDocumentsLens = Optics.Lens.fromNullableProp()("documents", []); export const documentFilesLens = Optics.Lens.fromNullableProp()("files", []); export const fileHashLens = Optics.Lens.fromProp()("hash"); export const fileUidLens = Optics.Lens.fromProp()("uid"); /** * Traversals */ export const documentsTraversal = Optics.fromTraversable(Array.Traversable)(); export const filesTraversal = Optics.fromTraversable(Array.Traversable)(); export const folderFilesTraversal = folderDocumentsLens .composeTraversal(documentsTraversal) .composeLens(documentFilesLens) .composeTraversal(filesTraversal); export const folderHashesTraversal = folderFilesTraversal.composeLens(fileHashLens); export const folderFilesUidTraversal = folderFilesTraversal.composeLens(fileUidLens); /** * Getters */ export const getFolderFiles = (folder: OfficeFolder) => Traversal.getAll(folder)(folderFilesTraversal); export const getFolderHashes = (folder: OfficeFolder) => Traversal.getAll(folder)(folderHashesTraversal); export const getFolderFilesUid = (folder: OfficeFolder) => Traversal.getAll(folder)(folderFilesUidTraversal);