import React from "react"; import { connect } from "react-redux"; import { Tooltip2 } from "@blueprintjs/popover2"; import { Button, AnchorButton, Menu, MenuItem, Popover, Position, Icon, PopoverInteractionKind, } from "@blueprintjs/core"; import { createColorQuery } from "../../../util/stateManager/colorHelpers"; import * as globals from "../../../globals"; import actions from "../../../actions"; import AddGeneToGenesetDialogue from "./addGeneToGenesetDialogue"; @connect((state) => ({ annoMatrix: state.annoMatrix, schema: state.annoMatrix?.schema, genesetsUI: state.genesetsUI, colorAccessor: state.colors.colorAccessor, genesets: state.genesets.genesets, })) class GenesetMenus extends React.PureComponent { constructor(props) { super(props); this.state = { dataIsFetching: false, }; } fetchOurData = () => { /* fetch our data. serves two purposes: a) preload upon initial render, and b) set busy/loading indicator on any controls that require the data to be present, such as the color-by component. */ const { geneset, schema, annoMatrix, genesets } = this.props; this.setState({ dataIsFetching: true }); annoMatrix .fetch( ...createColorQuery( "color by geneset mean expression", geneset, schema, genesets ) ) .then(() => this.setState({ dataIsFetching: false })); }; activateAddGeneToGenesetMode = () => { const { dispatch, geneset } = this.props; dispatch({ type: "geneset: activate add new genes mode", geneset, }); }; activateEditGenesetNameMode = () => { const { dispatch, geneset } = this.props; dispatch({ type: "geneset: activate rename geneset mode", data: geneset, }); }; handleColorByEntireGeneset = () => { const { dispatch, geneset } = this.props; this.fetchOurData(); // just in case data was flushed from cache dispatch({ type: "color by geneset mean expression", geneset, }); }; handleDeleteGeneset = () => { const { dispatch, geneset } = this.props; dispatch(actions.genesetDelete(geneset)); }; render() { const { geneset, genesetsEditable, createText, colorAccessor } = this.props; const { dataIsFetching } = this.state; const isColorBy = geneset === colorAccessor; return ( <> {genesetsEditable && ( <>