import * as React from 'react'; import styles from './styles/styles.module.scss'; import { Modal } from 'react-bootstrap'; import { observer } from 'mobx-react'; import { computed, makeObservable } from 'mobx'; import { FlexRow, FlexCol } from '../flexbox/FlexBox'; import gene_lists from './gene_lists'; import classNames from 'classnames'; import { QueryStoreComponent, Focus } from './QueryStore'; import GenesetsHierarchySelector from './GenesetsHierarchySelector'; import GenesetsVolcanoSelector from './GenesetsVolcanoSelector'; import SectionHeader from '../sectionHeader/SectionHeader'; import { getServerConfig } from 'config/config'; import { ServerConfigHelpers } from '../../../config/config'; export interface GenesetsSelectorProps {} @observer export default class GenesetsSelector extends QueryStoreComponent< GenesetsSelectorProps, {} > { constructor(props: any) { super(props); makeObservable(this); } @computed get selectedGeneListOption() { const option = this.geneListOptions.find( opt => opt.value === this.store.geneQuery ); return option ? option.value : ''; } @computed get geneListOptions() { let geneList: { id: string; genes: string[] }[] = gene_lists; if (getServerConfig().query_sets_of_genes) { const parsed = ServerConfigHelpers.parseQuerySetsOfGenes( getServerConfig().query_sets_of_genes! ); if (parsed) { geneList = parsed; } } return [ { label: 'User-defined List', value: '', }, ...geneList.map(item => ({ label: `${item.id} (${item.genes.length} genes)`, value: item.genes.join(' '), })), ]; } @computed get textAreaRef() { if (this.store.geneQueryErrorDisplayStatus === Focus.ShouldFocus) return (textArea: HTMLTextAreaElement) => { const { error } = this.store.oql; if (textArea && error) { textArea.focus(); textArea.setSelectionRange(error.start, error.end); this.store.geneQueryErrorDisplayStatus = Focus.Focused; } }; } render() { return ( Enter Gene Sets: