@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
97 lines • 4.37 kB
JavaScript
import { __awaiter } from "tslib";
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
import React from "react";
import * as classes from "../../../scss/bootstrap-group-display.module.scss";
import { GroupMembersGrid } from "./GroupMembersGrid";
import { SearchQueryTools as SQT } from "../../../RcsbSeacrh/SearchQueryTools";
import { ReturnType } from "@rcsb/rcsb-api-tools/lib/RcsbSearch/Types/SearchEnums";
import { Slider } from "./Components/Slider";
import { GroupProvenanceId } from "@rcsb/rcsb-api-tools/lib/RcsbDw/Types/DwEnums";
import { SearchQueryContextManager as SQCM } from "../RcsbGroupSeacrhQuery/SearchQueryContextManager";
import { rcsbRequestCtxManager } from "../../../RcsbRequest/RcsbRequestContextManager";
export class RcsbGroupMembersComponent extends React.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 (_jsx("div", { id: this.groupMembersDiv, style: { minHeight: 627 }, className: `${classes.bootstrapGroupComponentScope}`, children: _jsx(Slider, { slide: this.slide.bind(this), pages: this.state.nPages, currentPage: this.state.selectedIndex + 1, children: _jsx(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 _jsx(_Fragment, {});
}
componentDidMount() {
return __awaiter(this, void 0, void 0, function* () {
this.subscribe();
if (this.state.nPages === 0)
yield this.loadPages();
});
}
componentDidUpdate(prevProps, prevState, snapshot) {
return __awaiter(this, void 0, void 0, function* () {
if (this.state.nPages === 0)
yield this.loadPages();
});
}
subscribe() {
SQCM.subscribe((o) => {
this.updateSearchQuery(o);
});
}
updateSearchQuery(sqData) {
this.setState({ searchQuery: sqData.searchQuery, nPages: 0, selectedIndex: 0 });
}
loadPages() {
return __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 __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 });
}
}
export function searchRequest(groupProvenanceId, groupId, searchQuery) {
return __awaiter(this, void 0, void 0, function* () {
return yield rcsbRequestCtxManager.getSearchQuery({
query: searchQuery && searchQuery.query ? SQT.addGroupNodeToSearchQuery(groupProvenanceId, groupId, searchQuery.query) : SQT.searchGroupQuery(groupProvenanceId, groupId),
request_options: {
return_counts: true,
results_content_type: SQT.searchContentType(searchQuery)
},
return_type: groupProvenanceId === GroupProvenanceId.ProvenanceMatchingDepositGroupId ? ReturnType.Entry : ReturnType.PolymerEntity
});
});
}
function mod(n, p) {
const r = n % p;
return r < 0 ? p + r : r;
}
//# sourceMappingURL=RcsbGroupMembersComponent.js.map