UNPKG

@rcsb/rcsb-saguaro-app

Version:
102 lines (101 loc) 4.94 kB
"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; }