@atomist/sdm-pack-aspect
Version:
an Atomist SDM Extension Pack for visualizing drift across an organization
81 lines • 3.28 kB
JavaScript
;
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