UNPKG

@atomist/sdm-pack-aspect

Version:

an Atomist SDM Extension Pack for visualizing drift across an organization

81 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _ = require("lodash"); const React = require("react"); const bands_1 = require("../lib/util/bands"); const utils_1 = require("./utils"); function toRepoListItem(category, rfd) { let linkToIndividualProjectPage = `/repository?id=${encodeURI(rfd.id)}`; if (category && category !== "*") { linkToIndividualProjectPage += `&category=${category}`; } return React.createElement("li", { key: rfd.url }, rfd.showFullPath && `${rfd.owner} / `, rfd.repo, " ", rfd.score && `(${rfd.score.toFixed(2)})`, ":", " ", React.createElement("a", { href: rfd.url }, "Source"), " ", React.createElement("a", { href: linkToIndividualProjectPage }, "Insights")); } function displayProjects(owner, repos, props) { const sorted = _.sortBy(repos, p => props.sortOrder === "score" ? p.score : p.repo.toLowerCase()); return utils_1.collapsible(owner, `${owner} (${repos.length} repositories)`, React.createElement("ul", null, sorted.map(r => toRepoListItem(props.category, r))), repos.length === 1 || props.expand); } function RepoList(props) { const projectsByOrg = _.groupBy(props.repos, p => p.owner); const orgCount = Object.entries(projectsByOrg).length; const categoryDescription = props.category === "*" ? undefined : React.createElement("h3", null, "Scoring by category: ", React.createElement("span", { className: "scoreCategoryName" }, props.category)); return React.createElement("div", null, React.createElement("h2", null, orgCount, " organizations: ", " ", props.repos.length, " repositories, ", " ", props.virtualProjectCount, " virtual projects, ", " ", props.orgScore.weightedScore.toFixed(2), " / 5"), React.createElement("h3", null, "Workspace Summary"), Object.keys(props.orgScore.weightedScores).map(k => explainScore(props.orgScore.weightedScores[k])), React.createElement("h3", null, categoryDescription || "Repositories"), props.byOrg ? reposByOrg(props) : reposRanked(props)); } exports.RepoList = RepoList; function explainScore(score) { const conclusion = bands_1.bandFor({ horrible: { upTo: 1 }, poor: { upTo: 2 }, disappointing: { upTo: 3 }, satisfactory: { upTo: 4 }, good: { upTo: 4.5 }, great: bands_1.Default, }, score.score); return React.createElement("li", null, React.createElement("i", null, score.description || score.name), " is ", conclusion, " at ", score.score.toFixed(2), ": ", _.lowerFirst(score.reason)); } exports.explainScore = explainScore; function reposByOrg(props) { const projectsByOrg = _.groupBy(props.repos, p => p.owner); return React.createElement("ul", null, Object.entries(projectsByOrg).map(kv => displayProjects(kv[0], kv[1], props))); } function reposRanked(props) { return React.createElement("ul", null, displayProjects("Ranked", props.repos, props)); } //# sourceMappingURL=repoList.js.map