UNPKG

electrode-electrify-react-component

Version:
64 lines (56 loc) 1.91 kB
import React, {PropTypes} from "react"; import {List, ListItem} from "material-ui/List"; import formatSize from "prettysize"; /* eslint-disable max-statements, react/jsx-indent-props, no-magic-numbers */ const listPkg = (totalSize, pkg, key) => { const nestModules = (modules) => Object.keys(modules).map((name, i) => { const m = modules[name]; const pt = `${name} [${formatSize(m.size)}]`; return <ListItem key={i} primaryText={pt}/>; }); const parentsStr = (parents) => parents.substr(1).split(":").join("/"); const byParents = Object.keys(pkg).filter((k) => k.startsWith("$")); const $ = pkg[byParents[0]]; let dups = ""; let nestedItems; let size = 0; if (byParents.length > 1) { dups = <span> [{byParents.length} dups] </span>; size = byParents.reduce((acc, k) => acc + pkg[k].size, 0); nestedItems = byParents.sort().map((p, i) => { const pt = p === "$" ? "at top level" : `under ${parentsStr(p)}`; return (<ListItem key={i} primaryText={pt} primaryTogglesNestedList={true} nestedItems={nestModules(pkg[p].modules)}/>); }); } else { nestedItems = nestModules($.modules); size = $.size; } const pct = (size / totalSize) * 100; const name = $.name === "." ? "under app CWD" : $.name; const primaryText = (<div> <span>{name}</span> {dups} <span> [{formatSize(size)}]</span> <span> [{pct.toFixed(2)}%]</span> </div>); return (<ListItem key={key} primaryText={primaryText} primaryTogglesNestedList={true} nestedItems={nestedItems}/>); }; const ModulesByPkg = (props) => { return (<List> {Object.keys(props.modulesByPkg).sort().map((name, key) => listPkg(props.totalSize, props.modulesByPkg[name], key))} </List>); }; ModulesByPkg.propTypes = { totalSize: PropTypes.number, modulesByPkg: PropTypes.object }; export default ModulesByPkg;