@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
102 lines (101 loc) • 4.94 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RcsbGroupMembersComponent = void 0;
exports.searchRequest = searchRequest;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = tslib_1.__importDefault(require("react"));
const classes = tslib_1.__importStar(require("../../../scss/bootstrap-group-display.module.scss"));
const GroupMembersGrid_1 = require("./GroupMembersGrid");
const SearchQueryTools_1 = require("../../../RcsbSeacrh/SearchQueryTools");
const SearchEnums_1 = require("@rcsb/rcsb-api-tools/lib/RcsbSearch/Types/SearchEnums");
const Slider_1 = require("./Components/Slider");
const DwEnums_1 = require("@rcsb/rcsb-api-tools/lib/RcsbDw/Types/DwEnums");
const SearchQueryContextManager_1 = require("../RcsbGroupSeacrhQuery/SearchQueryContextManager");
const RcsbRequestContextManager_1 = require("../../../RcsbRequest/RcsbRequestContextManager");
class RcsbGroupMembersComponent extends react_1.default.Component {
constructor(props) {
super(props);
this.state = {
nPages: 0,
selectedIndex: 0,
searchQuery: this.props.searchQuery,
minHeight: 458
};
this.groupMembersDiv = "groupMembersDiv";
}
render() {
if (this.state.nPages > 0)
return ((0, jsx_runtime_1.jsx)("div", { id: this.groupMembersDiv, style: { minHeight: 627 }, className: `${classes.bootstrapGroupComponentScope}`, children: (0, jsx_runtime_1.jsx)(Slider_1.Slider, { slide: this.slide.bind(this), pages: this.state.nPages, currentPage: this.state.selectedIndex + 1, children: (0, jsx_runtime_1.jsx)(GroupMembersGrid_1.GroupMembersGrid, { groupProvenanceId: this.props.groupProvenanceId, groupId: this.props.groupId, nRows: this.props.nRows, nColumns: this.props.nColumns, index: this.state.selectedIndex, searchQuery: this.state.searchQuery, minHeight: this.state.minHeight, setMinHeight: this.setMinHeight.bind(this) }) }) }));
else
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
}
componentDidMount() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
this.subscribe();
if (this.state.nPages === 0)
yield this.loadPages();
});
}
componentDidUpdate(prevProps, prevState, snapshot) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
if (this.state.nPages === 0)
yield this.loadPages();
});
}
subscribe() {
SearchQueryContextManager_1.SearchQueryContextManager.subscribe((o) => {
this.updateSearchQuery(o);
});
}
updateSearchQuery(sqData) {
this.setState({ searchQuery: sqData.searchQuery, nPages: 0, selectedIndex: 0 });
}
loadPages() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const searchResult = yield this.searchRequest();
if (!searchResult)
return;
const nPages = Math.ceil(searchResult.total_count / (this.props.nRows * this.props.nColumns));
this.setState({
nPages: nPages,
selectedIndex: 0
});
});
}
searchRequest() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return yield searchRequest(this.props.groupProvenanceId, this.props.groupId, this.state.searchQuery);
});
}
slide(action) {
switch (action) {
case "next":
this.setState({ selectedIndex: mod(this.state.selectedIndex + 1, this.state.nPages) });
break;
case "prev":
this.setState({ selectedIndex: mod(this.state.selectedIndex - 1, this.state.nPages) });
break;
}
}
setMinHeight(minHeight) {
this.setState({ minHeight: minHeight });
}
}
exports.RcsbGroupMembersComponent = RcsbGroupMembersComponent;
function searchRequest(groupProvenanceId, groupId, searchQuery) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return yield RcsbRequestContextManager_1.rcsbRequestCtxManager.getSearchQuery({
query: searchQuery && searchQuery.query ? SearchQueryTools_1.SearchQueryTools.addGroupNodeToSearchQuery(groupProvenanceId, groupId, searchQuery.query) : SearchQueryTools_1.SearchQueryTools.searchGroupQuery(groupProvenanceId, groupId),
request_options: {
return_counts: true,
results_content_type: SearchQueryTools_1.SearchQueryTools.searchContentType(searchQuery)
},
return_type: groupProvenanceId === DwEnums_1.GroupProvenanceId.ProvenanceMatchingDepositGroupId ? SearchEnums_1.ReturnType.Entry : SearchEnums_1.ReturnType.PolymerEntity
});
});
}
function mod(n, p) {
const r = n % p;
return r < 0 ? p + r : r;
}