@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
129 lines • 6.73 kB
JavaScript
import { __awaiter } from "tslib";
import { Operator, Service } from "@rcsb/rcsb-api-tools/lib/RcsbSearch/Types/SearchEnums";
import { SearchQueryTools as SQT } from "../../../RcsbSeacrh/SearchQueryTools";
import resource from "../../../RcsbServerConfig/web.resources.json";
import { SearchQueryContextManager as SQCM } from "../RcsbGroupSeacrhQuery/SearchQueryContextManager";
import { ChartType } from "@rcsb/rcsb-charts/lib/RcsbChartComponent/ChartConfigInterface";
import { ChartTools } from "@rcsb/rcsb-charts/lib/RcsbChartDataProvider/ChartTools";
export var GroupChartEvents;
(function (GroupChartEvents) {
function addBarClickCallback(chart, returnType) {
if (!chart.chartConfig)
chart.chartConfig = {};
switch (chart.chartType) {
case ChartType.barplot:
addBarChartClick(chart, returnType);
break;
case 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.digitGrouping(d.y) + (sum > 0 ? (" of " + sum) : ""),
"Click to refine group",
"Shift-click to search"
];
return [
tooltipTitle(d),
ChartTools.digitGrouping(d.y) + (sum > 0 ? (" of " + sum) : "")
];
} });
}
GroupChartEvents.addTooltipText = addTooltipText;
function addBarChartClick(chart, returnType) {
if (chart.chartConfig)
chart.chartConfig.barClickCallback = (datum, data, e) => __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 = SQT.searchAttributeQuery(chart.attribute, datum.x, Operator.ExactMatch, Service.Text);
if (chart.filters)
chart.filters.forEach(f => {
query = SQT.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) => __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 = SQT.searchAttributeQuery(chart.attribute, chart.facetConfig.mergeDomainMaxValue, Operator.GreaterOrEqual, Service.Text);
yield clickEvent(e !== null && e !== void 0 ? e : { shiftKey: false }, chart, query, returnType);
}
else {
const range = formatRange(chart, datum);
const query = SQT.searchAttributeQuery(chart.attribute, range, Operator.Range, Service.Text);
yield clickEvent(e !== null && e !== void 0 ? e : { shiftKey: false }, chart, query, returnType);
}
});
}
function clickEvent(e, chart, query, returnType) {
return __awaiter(this, void 0, void 0, function* () {
const newQuery = yield SQCM.updateSearchQuery(chart.attributeName, query, returnType);
if (e.shiftKey) {
location.href = resource.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 || (GroupChartEvents = {}));
//# sourceMappingURL=GroupChartEvents.js.map