pdbe-molstar
Version:
Molstar implementation for PDBe
55 lines (54 loc) • 2.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SuperpositionModelExportUI = void 0;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const base_1 = require("molstar/lib/mol-plugin-ui/base");
const common_1 = require("molstar/lib/mol-plugin-ui/controls/common");
const icons_1 = require("molstar/lib/mol-plugin-ui/controls/icons");
const parameters_1 = require("molstar/lib/mol-plugin-ui/controls/parameters");
const use_behavior_1 = require("molstar/lib/mol-plugin-ui/hooks/use-behavior");
const param_definition_1 = require("molstar/lib/mol-util/param-definition");
const react_1 = tslib_1.__importDefault(require("react"));
const superposition_export_1 = require("../superposition-export");
class SuperpositionModelExportUI extends base_1.CollapsableControls {
defaultState() {
return {
header: 'Export Models',
isCollapsed: true,
brand: { accent: 'cyan', svg: icons_1.GetAppSvg },
};
}
renderControls() {
return (0, jsx_runtime_1.jsx)(SuperpositionExportControls, { plugin: this.plugin });
}
}
exports.SuperpositionModelExportUI = SuperpositionModelExportUI;
const Params = {
format: param_definition_1.ParamDefinition.Select('cif', [['cif', 'mmCIF'], ['bcif', 'Binary mmCIF']]),
};
const DefaultParams = param_definition_1.ParamDefinition.getDefaultValues(Params);
function SuperpositionExportControls({ plugin }) {
const [params, setParams] = react_1.default.useState(DefaultParams);
const [exporting, setExporting] = react_1.default.useState(false);
(0, use_behavior_1.useBehavior)(plugin.managers.structure.hierarchy.behaviors.selection); // triggers UI update
const isBusy = (0, use_behavior_1.useBehavior)(plugin.behaviors.state.isBusy);
const hierarchy = plugin.managers.structure.hierarchy.current;
let label = 'Nothing to Export';
if (hierarchy.structures.length === 1) {
label = 'Export';
}
if (hierarchy.structures.length > 1) {
label = 'Export (as ZIP)';
}
const onExport = () => tslib_1.__awaiter(this, void 0, void 0, function* () {
setExporting(true);
try {
yield (0, superposition_export_1.superpositionExportHierarchy)(plugin, { format: params.format });
}
finally {
setExporting(false);
}
});
return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(parameters_1.ParameterControls, { params: Params, values: params, onChangeValues: setParams, isDisabled: isBusy || exporting }), (0, jsx_runtime_1.jsx)(common_1.Button, { onClick: onExport, style: { marginTop: 1 }, disabled: isBusy || hierarchy.structures.length === 0 || exporting, commit: hierarchy.structures.length > 0 ? 'on' : 'off', children: label })] });
}