@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
132 lines (131 loc) • 7.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GroupChartEvents = void 0;
const tslib_1 = require("tslib");
const SearchEnums_1 = require("@rcsb/rcsb-api-tools/lib/RcsbSearch/Types/SearchEnums");
const SearchQueryTools_1 = require("../../../RcsbSeacrh/SearchQueryTools");
const web_resources_json_1 = tslib_1.__importDefault(require("../../../RcsbServerConfig/web.resources.json"));
const SearchQueryContextManager_1 = require("../RcsbGroupSeacrhQuery/SearchQueryContextManager");
const ChartConfigInterface_1 = require("@rcsb/rcsb-charts/lib/RcsbChartComponent/ChartConfigInterface");
const ChartTools_1 = require("@rcsb/rcsb-charts/lib/RcsbChartDataProvider/ChartTools");
var GroupChartEvents;
(function (GroupChartEvents) {
function addBarClickCallback(chart, returnType) {
if (!chart.chartConfig)
chart.chartConfig = {};
switch (chart.chartType) {
case ChartConfigInterface_1.ChartType.barplot:
addBarChartClick(chart, returnType);
break;
case ChartConfigInterface_1.ChartType.histogram:
addHistogramChartClick(chart, returnType);
break;
}
}
GroupChartEvents.addBarClickCallback = addBarClickCallback;
function addTooltipText(chart) {
var _a;
const tooltipText = (_a = chart.chartConfig) === null || _a === void 0 ? void 0 : _a.tooltipText;
const tooltipTitle = (d) => {
const tt = tooltipText === null || tooltipText === void 0 ? void 0 : tooltipText(d);
if (!tt)
return d.x.toString();
if (Array.isArray(tt))
return tt.join(" ");
return tt;
};
chart.chartConfig = Object.assign(Object.assign({}, chart.chartConfig), { tooltipText: (d) => {
const sum = d.values.reduce((prev, curr) => prev + curr.value, 0);
if (d.id == "included")
return [
tooltipTitle(d),
ChartTools_1.ChartTools.digitGrouping(d.y) + (sum > 0 ? (" of " + sum) : ""),
"Click to refine group",
"Shift-click to search"
];
return [
tooltipTitle(d),
ChartTools_1.ChartTools.digitGrouping(d.y) + (sum > 0 ? (" of " + sum) : "")
];
} });
}
GroupChartEvents.addTooltipText = addTooltipText;
function addBarChartClick(chart, returnType) {
if (chart.chartConfig)
chart.chartConfig.barClickCallback = (datum, data, e) => tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a, _b;
if (datum.id === "excluded")
return;
if ((_a = chart.facetConfig) === null || _a === void 0 ? void 0 : _a.bucketClickSearchQuery) {
const query = (_b = chart.facetConfig) === null || _b === void 0 ? void 0 : _b.bucketClickSearchQuery(datum, data, e);
yield clickEvent(e !== null && e !== void 0 ? e : { shiftKey: false }, chart, query, returnType);
}
else {
let query = SearchQueryTools_1.SearchQueryTools.searchAttributeQuery(chart.attribute, datum.x, SearchEnums_1.Operator.ExactMatch, SearchEnums_1.Service.Text);
if (chart.filters)
chart.filters.forEach(f => {
query = SearchQueryTools_1.SearchQueryTools.addNewNodeToAttributeSearchQuery(f.attribute, f.value, f.operator, query, f.service);
});
yield clickEvent(e !== null && e !== void 0 ? e : { shiftKey: false }, chart, query, returnType);
}
});
}
function addHistogramChartClick(chart, returnType) {
if (chart.chartConfig)
chart.chartConfig.barClickCallback = (datum, data, e) => tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a, _b, _c;
if (datum.id === "excluded")
return;
if ((_a = chart.facetConfig) === null || _a === void 0 ? void 0 : _a.bucketClickSearchQuery) {
const query = (_b = chart.facetConfig) === null || _b === void 0 ? void 0 : _b.bucketClickSearchQuery(datum, data, e);
yield clickEvent(e !== null && e !== void 0 ? e : { shiftKey: false }, chart, query, returnType);
}
else if (((_c = chart.facetConfig) === null || _c === void 0 ? void 0 : _c.mergeDomainMaxValue) && parseFloat(datum.x.toString()) >= chart.facetConfig.mergeDomainMaxValue) {
const query = SearchQueryTools_1.SearchQueryTools.searchAttributeQuery(chart.attribute, chart.facetConfig.mergeDomainMaxValue, SearchEnums_1.Operator.GreaterOrEqual, SearchEnums_1.Service.Text);
yield clickEvent(e !== null && e !== void 0 ? e : { shiftKey: false }, chart, query, returnType);
}
else {
const range = formatRange(chart, datum);
const query = SearchQueryTools_1.SearchQueryTools.searchAttributeQuery(chart.attribute, range, SearchEnums_1.Operator.Range, SearchEnums_1.Service.Text);
yield clickEvent(e !== null && e !== void 0 ? e : { shiftKey: false }, chart, query, returnType);
}
});
}
function clickEvent(e, chart, query, returnType) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const newQuery = yield SearchQueryContextManager_1.SearchQueryContextManager.updateSearchQuery(chart.attributeName, query, returnType);
if (e.shiftKey) {
location.href = web_resources_json_1.default.rcsb_search.url + encodeURI(JSON.stringify(newQuery));
}
});
}
function formatRange(chart, datum) {
var _a, _b, _c, _d;
const from = formatValue((parseFloat(datum.x.toString())) - ((_b = (_a = chart.chartConfig) === null || _a === void 0 ? void 0 : _a.histogramBinIncrement) !== null && _b !== void 0 ? _b : 0) * 0.5, chart.contentType);
const to = formatValue((parseFloat(datum.x.toString())) + ((_d = (_c = chart.chartConfig) === null || _c === void 0 ? void 0 : _c.histogramBinIncrement) !== null && _d !== void 0 ? _d : 0) * 0.5, chart.contentType);
switch (chart.contentType) {
case "date":
return {
from: from,
to: to,
include_lower: true,
include_upper: from == to
};
default:
return {
from: from,
to: to,
include_lower: true,
include_upper: from == to
};
}
}
function formatValue(value, contentType) {
switch (contentType) {
case "date":
return `${value}-01-01`;
default:
return value;
}
}
})(GroupChartEvents || (exports.GroupChartEvents = GroupChartEvents = {}));