// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import { ResourcesDataActions, resourcesDataActions } from "~/store/resources-data/resources-data-actions"; import { getNodeDescendantsIds, TREE_ROOT_ID } from "~/models/tree"; import { CollectionFileType } from "~/models/collection-file"; export interface ResourceData { fileCount: number; fileSize: number; } export type ResourcesDataState = { [key: string]: ResourceData }; export const resourcesDataReducer = (state: ResourcesDataState = {}, action: ResourcesDataActions) => resourcesDataActions.match(action, { SET_FILES: ({uuid, files}) => { const flattenFiles = getNodeDescendantsIds(TREE_ROOT_ID)(files).map(id => files[id]); const [fileSize, fileCount] = flattenFiles.reduce(([size, cnt], f) => f && f.value.type === CollectionFileType.FILE ? [size + f.value.size, cnt + 1] : [size, cnt] , [0, 0]); return { ...state, [uuid]: { fileCount, fileSize } }; }, default: () => state, });