@rcsb/rcsb-charts
Version:
46 lines • 2.19 kB
JavaScript
import { ChartTools } from "./ChartTools";
export class BarChartDataProvider {
setData(chartData, config) {
var _a, _b, _c;
const data = ChartTools.normalizeData(ChartTools.labelsAsString(chartData));
const subData = (_a = data.filter(d => d.y[0].value == 0)) !== null && _a !== void 0 ? _a : [];
const mergedValues = new Map();
const subValues = new Map();
data.forEach(d => {
mergedValues.set(d.x, d.y[0].value);
});
subData.forEach((d) => {
subValues.set(d.x, d.y.reduce((prev, curr) => (prev + curr.value), 0));
});
const allowedCategories = new Set([...mergedValues.entries()]
.sort((a, b) => (b[1] - a[1]))
.slice(0, (_b = config === null || config === void 0 ? void 0 : config.mostPopulatedGroups) !== null && _b !== void 0 ? _b : mergedValues.size)
.map(e => e[0]));
const sort = (_c = config === null || config === void 0 ? void 0 : config.sort) !== null && _c !== void 0 ? _c : ((b, a) => {
var _a, _b, _c, _d, _e;
if (mergedValues.get(b.x) != mergedValues.get(a.x))
return ((_a = mergedValues.get(b.x)) !== null && _a !== void 0 ? _a : 0) - ((_b = mergedValues.get(a.x)) !== null && _b !== void 0 ? _b : 0);
else if (((_c = mergedValues.get(b.x)) !== null && _c !== void 0 ? _c : 0) > 0)
return a.x.toString().localeCompare(b.x.toString());
else
return ((_d = subValues.get(b.x)) !== null && _d !== void 0 ? _d : 0) - ((_e = subValues.get(a.x)) !== null && _e !== void 0 ? _e : 0);
});
const barOut = data.sort((a, b) => sort(a, b)).filter(d => (allowedCategories.has(d.x)));
this.stringTicks = barOut.map(d => d.x);
this.excludedData = data.filter(d => (!allowedCategories.has(d.x)));
this.data = barOut;
}
getChartData() {
return {
data: this.data,
excludedData: this.excludedData
};
}
tickValues() {
return this.stringTicks;
}
xDomain() {
return;
}
}
//# sourceMappingURL=BarChartDataProvider.js.map