gramene-search 2.0.5 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.parcel-cache/83e7562660f7cc15-BundleGraph +0 -0
- package/.parcel-cache/d3a1b9507cb44047-AssetGraph +0 -0
- package/.parcel-cache/data.mdb +0 -0
- package/.parcel-cache/dc1da35000e13623-RequestGraph +0 -0
- package/.parcel-cache/lock.mdb +0 -0
- package/.parcel-cache/snapshot-dc1da35000e13623.txt +2 -2
- package/dist/index.js +62 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/bundles/swaggerFields.js +5 -6
- package/src/components/exporter/expressionResolver.js +2 -2
- package/src/components/exprViz/ExprTable.js +13 -2
- package/src/components/exprViz/ExprVizView.js +43 -5
- package/src/fieldCatalog.overlay.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/components/results/Study.js","src/index.js","src/bundles/index.js","src/bundles/api.js","src/bundles/filters.js","src/bundles/views.js","src/bundles/docs.js","src/bundles/genomes.js","src/bundles/swaggerFields.js","src/fieldCatalog.overlay.json","src/vepStudyInfo.js","src/bundles/exporter.js","src/components/exporter/downloadRunner.js","src/components/exporter/formatters.js","src/components/exporter/expressionResolver.js","src/components/exporter/ancestorsResolver.js","src/bundles/ontologies.js","src/bundles/exprViz.js","src/components/resultList.js","src/components/resultSummary.js","src/components/suggestions.js","src/components/geneSearchUI.js","src/components/results/GeneList.js","src/components/results/details/Expression.js","src/components/results/details/Homology.js","src/components/results/details/generic.js","src/components/utils.js","src/components/results/details/Location.js","src/components/results/details/location/browser.js","src/components/results/details/location/dallianceBrowser.js","src/components/results/details/Pathways.js","src/components/results/details/VEP.js","src/components/results/details/Xrefs.js","src/components/results/details/Publications.js","src/components/results/details/Sequences.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/results/StatsByGroup.js","src/components/TaxonomyModal.js","src/components/results/Expression.js","src/components/results/UserGeneLists.js","src/components/exporter/ExporterView.js","src/components/exporter/FieldTree.js","src/components/exporter/Preview.js","src/components/exporter/CutoffsModal.js","src/components/exporter/ExportFooter.js","src/components/exprViz/ExprVizView.js","src/components/exprViz/FieldsModal.js","src/components/exprViz/ExprTable.js","src/components/exprViz/ParallelCoordsPlot.js","src/components/Auth.js"],"sourcesContent":["import React, { useState, useMemo } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\n\nconst metaRenderer = params => {\n if (params.value.ontology) {\n return <a href={`http://purl.obolibrary.org/obo/${params.value.id.replace(\":\",\"_\")}`} target='_blank'>{params.value.label}</a>\n }\n return params.value.label\n}\nconst sampleRenderer = params => {\n const sampleMeta = params.value;\n return (\n <label>\n <input\n type=\"checkbox\"\n checked={params.desiredSamples.hasOwnProperty(sampleMeta._id)}\n onChange={() => params.doToggleExpressionSample(sampleMeta._id)}\n />\n {sampleMeta.experiment}-{sampleMeta.group}\n </label>\n );\n // return JSON.stringify(sampleMeta,null,2);\n}\nconst connectedSampleRenderer = connect(\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n 'doToggleExpressionSample',\n sampleRenderer\n);\nconst Study = props => {\n let samples = props.expressionSamples[props.id];\n let sampleMetadata = [];\n let metadataFields = [{ field: \"sampleId\", cellRenderer: connectedSampleRenderer }];\n let isFactor={};\n samples.forEach((sample, idx) => {\n if (idx === 0) {\n let factors = {\n headerName: 'Experimental Variables',\n children: []\n }\n sample.factor.forEach(factor => {\n factors.children.push({field: factor.type, cellRenderer: metaRenderer})\n isFactor[factor.type] = true;\n });\n metadataFields.push(factors);\n let characteristics = {\n headerName: 'Sample Characteristics',\n children: []\n }\n sample.characteristic.forEach(ch => {\n if (!isFactor[ch.type]) {\n characteristics.children.push({field: ch.type, cellRenderer: metaRenderer})\n }\n });\n metadataFields.push(characteristics)\n }\n let s_info = {sampleId: sample}\n sample.factor.forEach(factor => {\n s_info[factor.type] = {label: factor.label};\n if (factor.ontology) {\n s_info[factor.type]['ontology'] = factor.ontology\n s_info[factor.type]['id'] = factor.id;\n }\n })\n sample.characteristic.forEach(ch => {\n s_info[ch.type] = {label: ch.label};\n if (ch.ontology) {\n s_info[ch.type]['ontology'] = ch.ontology\n s_info[ch.type]['id'] = ch.id;\n }\n })\n sampleMetadata.push(s_info)\n })\n const [rowData, setRowData] = useState(sampleMetadata);\n const [colDefs, setColDefs] = useState(metadataFields);\n const defaultColDef = useMemo(() => {\n return {\n filter: true\n }\n }, []);\n return (\n <div>\n <div className=\"ag-theme-quartz\" style={{height: `${44 * (samples.length + 2)}px`}}>\n <AgGridReact rowData={rowData} columnDefs={colDefs} defaultColDef={defaultColDef}/>\n </div>\n <a href={`https://www.ebi.ac.uk/gxa/experiments/${props.id}`}>EBI Atlas Experiment: {props.id}</a>\n </div>\n );\n};\nexport default connect(\n 'selectExpressionSamples',\n Study);\n","import bundles from './bundles';\nimport resultList from './components/resultList';\nimport resultSummary from './components/resultSummary';\nimport suggestions from './components/suggestions';\nimport {Status, Filters, Results, Views, Auth} from './components/geneSearchUI';\n\nexport { bundles, resultList, resultSummary, suggestions, Status, Filters, Results, Views, Auth };\n","import apiBundles from './api'\nimport filterBundle from './filters'\nimport viewsBundle from './views'\nimport docsBundle from './docs'\nimport genomesBundle from './genomes'\nimport fieldCatalogBundle from './swaggerFields'\nimport exporterBundle from './exporter'\nimport ontologiesBundle from './ontologies'\nimport exprVizBundle from './exprViz'\n\nexport default [...apiBundles, docsBundle, filterBundle, viewsBundle, genomesBundle, fieldCatalogBundle, exporterBundle, ontologiesBundle, exprVizBundle];\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler'\nimport _ from 'lodash'\nimport binsClient from \"gramene-bins-client\";\nimport treesClient from \"gramene-trees-client\";\nimport {build} from \"gramene-taxonomy-with-genomes\";\n\nconst facets = [\n \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\",\n // \"{!facet.limit='100' facet.mincount='1' key='genetree'}gene_tree\",\n // \"{!facet.limit='100' facet.mincount='1' key='pathways'}pathways__ancestors\",\n // \"{!facet.limit='100' facet.mincount='1' key='domains'}domain_roots\",\n \"{!facet.limit='-1' facet.mincount='1' key='fixed_1000__bin'}fixed_1000__bin\",\n \"{!facet.limit='100' facet.mincount='0' key='AED' type='range' start=0 end=1.0 gap=0.01}MAKER__AED__attr_f\"\n];\nconst genomesOfInterest = '(taxon_id:2769) OR (taxon_id:3055) OR (taxon_id:3218) OR (taxon_id:3702) OR (taxon_id:3847) OR (taxon_id:4555) OR (taxon_id:4558) OR (taxon_id:4577) OR (taxon_id:13333) OR (taxon_id:15368) OR (taxon_id:29760) OR (taxon_id:39947) OR (taxon_id:55577) OR (taxon_id:88036) OR (taxon_id:214687)';\nconst sites = ['main','oryza','maize','sorghum','grapevine'];\nconst grameneSuggestions = createAsyncResourceBundle( {\n name: 'grameneSuggestions',\n actionBaseType: 'GRAMENE_SUGGESTIONS',\n persist: false,\n getPromise: ({store}) => {\n const t = store.selectSuggestionsQuery().replaceAll(':',' ').trim();\n const g = store.selectGrameneGenomes();\n const q = `/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`;\n // const promises = sites.map(site => fetch(`https://data.gramene.org/${site}${q}`));\n // return Promise.all(promises)\n return fetch(store.selectGrameneAPI() + q)\n .then(res => {\n return res.json()\n })\n .then(suggestions => {\n if (Object.keys(g.active).length > 0) {\n suggestions.grouped.category.groups.forEach(group => {\n group.doclist.docs.forEach(sugg => {\n sugg.num_genes = 0;\n sugg.taxon_id.forEach((id,idx) => {\n if (g.active[id] && !g.active[id].hidden) {\n sugg.num_genes += sugg.taxon_freq[idx]\n }\n })\n })\n })\n }\n return suggestions\n })\n }\n});\n\ngrameneSuggestions.reactGrameneSuggestions = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectSuggestionsQuery',\n (shouldUpdate, queryString) => {\n if (shouldUpdate && queryString) {\n return { actionCreator: 'doFetchGrameneSuggestions' }\n }\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsStatus = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectGrameneSuggestionsIsLoading',\n 'selectGrameneSuggestionsRaw',\n 'selectSuggestionsQuery',\n (shouldUpdate, isLoading, suggestionsRaw, queryString) => {\n if (!queryString) return '';\n if (shouldUpdate) return 'update needed';\n if (isLoading) return 'loading';\n if (suggestionsRaw.data) return suggestionsRaw.data.grouped.category.matches + ' terms';\n console.error(suggestionsRaw)\n return 'error';\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsReady = createSelector(\n 'selectGrameneSuggestionsStatus',\n (status) => {\n const regex = RegExp('terms$');\n return regex.test(status);\n }\n);\n\ngrameneSuggestions.doFocusFirstGrameneSuggestion = arg => ({dispatch, getState}) => {\n console.log('inside doFocusFirstGrameneSuggestion');\n};\n\nfunction compressLongTaxonName(node) {\n const fullName = node.name;\n const removedExtraineousWords = fullName.replace(/( Group$| subsp\\.| ssp\\.| var\\.| strain)/, '');\n let finalVersion;\n if (removedExtraineousWords.length > 20) {\n let words = removedExtraineousWords.split(' ');\n if (words.length === 2) {\n // abrreviate first word.\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+/, '$1.')\n }\n if (words.length > 2) {\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+\\s([a-z])[a-z]+/, '$1$2.')\n }\n }\n else {\n finalVersion = removedExtraineousWords;\n }\n node.short_name = finalVersion;\n}\n\nconst grameneTaxonomy = createAsyncResourceBundle({\n name: 'grameneTaxonomy',\n actionBaseType: 'GRAMENE_TAXONOMY',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/taxonomy?subset=gramene&rows=-1`)\n .then(res => res.json())\n .then(taxNodes => {\n let taxonomy = _.keyBy(taxNodes, '_id');\n taxNodes.forEach(t => {\n t._id = +t._id; // ensure taxonomy id is a number\n compressLongTaxonName(t);\n if (t.hasOwnProperty(\"is_a\")) {\n t.is_a.forEach(p_id => {\n const p = taxonomy[p_id];\n if (!p.hasOwnProperty('children')) p.children = [];\n p.children.push(t._id)\n })\n }\n });\n return taxonomy\n })\n }\n});\ngrameneTaxonomy.reactGrameneTaxonomy = createSelector(\n 'selectGrameneTaxonomyShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneTaxonomy' }\n }\n }\n);\nconst grameneMaps = createAsyncResourceBundle({\n name: 'grameneMaps',\n actionBaseType: 'GRAMENE_MAPS',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/maps?rows=-1`)\n .then(res => res.json())\n .then(maps => {\n maps.forEach(m => {\n m.regionLength = {};\n m.regions.names.forEach((rname,idx) => {\n m.regionLength[rname] = m.regions.lengths[idx]\n })\n })\n return _.keyBy(maps, 'taxon_id');\n })\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\n }\n);\n\nconst expressionStudies = createAsyncResourceBundle( {\n name: 'expressionStudies',\n actionBaseType: 'EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.groupBy(res, 'taxon_id'))\n }\n});\n// Only fetch when a view that consumes expression studies is enabled.\nconst EXPRESSION_VIEWS = ['exprViz', 'expression', 'export'];\nexpressionStudies.reactExpressionStudies = createSelector(\n 'selectExpressionStudiesShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !EXPRESSION_VIEWS.some(id => viewsOn.has(id))) return;\n return { actionCreator: 'doFetchExpressionStudies' }\n }\n);\n\nconst expressionSamples = createAsyncResourceBundle( {\n name: 'expressionSamples',\n actionBaseType: 'EXPRESSION_SAMPLES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n .then(res => res.json())\n .then(samples => _.groupBy(samples, 'experiment'))\n .then(studies => {\n Object.keys(studies).forEach(study => {\n studies[study].forEach(sample => {\n sample.order = +sample.group.replace('g','')\n });\n studies[study].sort((a,b) => a.order - b.order);\n })\n return studies\n })\n }\n});\nexpressionSamples.reactExpressionSamples = createSelector(\n 'selectExpressionSamplesShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !EXPRESSION_VIEWS.some(id => viewsOn.has(id))) return;\n return { actionCreator: 'doFetchExpressionSamples' }\n }\n);\n\nconst curatedGenes = createAsyncResourceBundle( {\n name: 'curatedGenes',\n actionBaseType: 'CURATED_GENES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`https://devdata.gramene.org/curation/curations?rows=0&minFlagged=0&since=12-12-2029`)\n .then(res => res.json())\n .then(curation => _.keyBy(curation.genes, 'gene_id'))\n }\n});\n// Curated annotations are consumed by GeneList rows and Homology details,\n// both inside the gene-list view.\ncuratedGenes.reactCuratedGenes = createSelector(\n 'selectCuratedGenesShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !viewsOn.has('list')) return;\n return { actionCreator: 'doFetchCuratedGenes' }\n }\n);\n\nconst grameneGermplasm = createAsyncResourceBundle( {\n name: 'grameneGermplasm',\n actionBaseType: 'GRAMENE_GERMPLASM',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/germplasm?rows=-1`)\n .then(res => res.json())\n .then(res => {\n res.forEach(g => {\n if (!g.subpop) {\n g.subpop = \"?\"\n }\n });\n return _.groupBy(res, 'ens_id')\n })\n }\n});\n// Germplasm metadata is consumed by the VEP detail panel inside the gene list.\ngrameneGermplasm.reactGrameneGermplasm = createSelector(\n 'selectGrameneGermplasmShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !viewsOn.has('list')) return;\n return { actionCreator: 'doFetchGrameneGermplasm' }\n }\n);\n//\n// const grameneExpressionAssays = createAsyncResourceBundle( {\n// name: 'grameneExpressionAssays',\n// actionBaseType: 'GRAMENE_EXPRESSION_ASSAYS',\n// persist: true,\n// getPromise: ({store}) => {\n// return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n// .then(res => res.json())\n// .then(res => {\n// let expr={};\n// res.forEach(assay => {\n// if (!expr.hasOwnProperty(assay.taxon_id)) {\n// expr[assay.taxon_id] = {};\n// }\n// if (!expr[assay.taxon_id].hasOwnProperty(assay.experiment)) {\n// expr[assay.taxon_id][assay.experiment] = [];\n// }\n// assay.order = +assay.group.replace('g','');\n// expr[assay.taxon_id][assay.experiment].push(assay);\n// });\n// // sort each experiment\n// for (const tid in expr) {\n// for (const exp in expr[tid]) {\n// expr[tid][exp].sort((a,b) => a.order - b.order);\n// }\n// }\n// return expr;\n// })\n// }\n// });\n// grameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n// 'selectGrameneExpressionAssaysShouldUpdate',\n// (shouldUpdate) => {\n// if (shouldUpdate) {\n// return { actionCreator: 'doFetchGrameneExpressionAssays' }\n// }\n// }\n// );\n\nconst MAKERAttribs = [\n 'MAKER__AED__attr_f',\n 'MAKER__QI1__attr_i',\n 'MAKER__QI2__attr_f',\n 'MAKER__QI3__attr_f',\n 'MAKER__QI4__attr_f',\n 'MAKER__QI5__attr_f',\n 'MAKER__QI6__attr_f',\n 'MAKER__QI7__attr_i',\n 'MAKER__QI8__attr_i',\n 'MAKER__QI9__attr_i'\n];\nconst geneAttribs = {\n \"MAKER transcript metrics\" : [\n { name: \"AED\", description: \"Annotation Edit Distance\", dtype: \"f\", fieldName: \"MAKER__AED__attr_f\" },\n { name: \"QI1\", description: \"Length of the 5' UTR\", dtype: \"i\", fieldName: \"MAKER__QI1__attr_i\" },\n { name: \"QI2\", description: \"Fraction of splice sites confirmed by an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI2__attr_f\" },\n { name: \"QI3\", description: \"Fraction of exons that overlap an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI3__attr_f\" },\n { name: \"QI4\", description: \"Fraction of exons that overlap EST or Protein alignments\", dtype: \"f\", fieldName: \"MAKER__QI4__attr_f\" },\n // { name: \"QI5\", description: \"Fraction of splice sites confirmed by a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI5__attr_f\" },\n // { name: \"QI6\", description: \"Fraction of exons that overlap a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI6__attr_f\" },\n { name: \"QI7\", description: \"Number of exons in the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI7__attr_i\" },\n { name: \"QI8\", description: \"Length of the 3' UTR\", dtype: \"i\", fieldName: \"MAKER__QI8__attr_i\" },\n { name: \"QI9\", description: \"Length of the protein sequence produced by the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI9__attr_i\" }\n ]\n}\nconst statsFields = geneAttribs['MAKER transcript metrics'].map(\n // (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='20,40,60,80,90,95,99'}${f}`\n (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='10,20,30,40,50,60,70,80,90,99.99'}${f.fieldName}`\n);\n\nconst grameneGeneAttribs = createAsyncResourceBundle( {\n name: 'grameneGeneAttribs',\n actionBaseType: 'GRAMENE_GENE_ATTRIBS',\n persist: false,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/geneAttributes`).then(res => geneAttribs)\n }\n});\ngrameneGeneAttribs.reactGrameneGeneAttribs = createSelector(\n 'selectGrameneGeneAttribsShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViewsOn',\n (shouldUpdate, status, viewsOn) => {\n if (!shouldUpdate) return;\n if (status !== 'finished' && status !== 'ready') return;\n if (!viewsOn || !viewsOn.has('attribs')) return;\n return { actionCreator: 'doFetchGrameneGeneAttribs' }\n }\n);\n\nconst grameneSearch = createAsyncResourceBundle({\n name: 'grameneSearch',\n actionBaseType: 'GRAMENE_SEARCH',\n persist: false,\n getPromise: ({store}) => {\n const offset = store.selectGrameneSearchOffset();\n const rows = store.selectGrameneSearchRows();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => m[tid] && !m[tid].hidden);\n let fq='';\n if (taxa.length) {\n console.log('search add a fq for ',taxa);\n fq = `&fq=taxon_id:(${taxa.join(' OR ')})`;\n }\n // return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}&stats=true&${statsFields.join('&')}`)\n return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}`)\n .then(res => res.json())\n .then(res => {\n res.response.docs.forEach(d => {\n d.can_show = {};\n d.capabilities.forEach(c => {\n d.can_show[c]=true;\n })\n });\n return res;\n })\n }\n});\ngrameneSearch.reactGrameneSearch = createSelector(\n 'selectGrameneSearchShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneGenomes',\n (shouldUpdate, status, genomes) => {\n if (shouldUpdate && status === 'search' && genomes) {\n return { actionCreator: 'doFetchGrameneSearch' }\n }\n }\n);\n\nfunction formatFacetCountsForViz(a) {\n let res = {\n count: a.length/2,\n displayName: \"fixed_1000__bin\",\n data: {},\n sorted: []\n };\n let counts = [];\n for(let i=0;i<a.length;i+=2) {\n const fc = {\n id: +a[i],\n count: +a[i+1]\n };\n res.data[a[i]] = fc;\n counts.push(fc);\n }\n res.sorted = counts.sort((a,b) => a.id - b.id);\n return res;\n}\n\n// bundle to prepare data for the TaxDist component\nconst grameneTaxDist = {\n name: 'grameneTaxDist',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n return state;\n }\n },\n selectGrameneTaxDist: createSelector(\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n (grameneSearch,grameneTaxonomy,grameneMaps) => {\n if (grameneSearch && grameneTaxonomy && grameneMaps) {\n _.forIn(grameneMaps, (map, tid) => {\n grameneTaxonomy[tid].name = map.display_name;\n });\n const binnedResults = formatFacetCountsForViz(grameneSearch.facet_counts.facet_fields.fixed_1000__bin);\n let speciesTree = treesClient.taxonomy.tree(Object.values(grameneTaxonomy));\n let binMapper = binsClient.bins(grameneMaps);\n let taxDist = build(binMapper, speciesTree);\n taxDist.setBinType('fixed',1000);\n taxDist.setResults(binnedResults);\n return taxDist;\n }\n return null;\n }\n )\n};\n\n// this query will give the sorghum orthologs of AT1G01260\n// want to provide these on non-sorghum genes if available\n// http://data.gramene.org/search?q=homology__all_orthologs:AT1G01260&fq=taxon_id:4558&fl=id\nconst grameneOrthologs = {\n name: 'grameneOrthologs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_ORTHOLOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_ORTHOLOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestOrthologs: geneId => ({dispatch, store}) => {\n const orthologs = store.selectGrameneOrthologs();\n if (!orthologs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_ORTHOLOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const taxonId = store.selectTargetTaxonId();\n fetch(`${API}/search?q=homology__all_orthologs:${geneId}&fq=taxon_id:${taxonId}&fl=id`)\n .then(res => res.json())\n .then(res => {\n let newOrthologs = {};\n newOrthologs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_ORTHOLOGS_RECEIVED', payload: newOrthologs})\n })\n }\n },\n selectGrameneOrthologs: state => state.grameneOrthologs\n};\n\nconst grameneParalogs = {\n name: 'grameneParalogs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_PARALOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_PARALOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestParalogs: (geneId,supertree,taxon_id) => ({dispatch, store}) => {\n const paralogs = store.selectGrameneParalogs();\n if (!paralogs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_PARALOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const q= supertree ? `supertree_attr_s:${supertree}` : `homology__within_species_paralog:${geneId}`;\n fetch(`${API}/search?q=${q}&rows=1000&fq=taxon_id:${taxon_id}`)\n .then(res => res.json())\n .then(res => {\n let newParalogs = {};\n newParalogs[geneId] = res.response.numFound > 0 ? res.response.docs.map(d => d.id) : [geneId];\n dispatch({type: 'GRAMENE_PARALOGS_RECEIVED', payload: newParalogs})\n })\n }\n },\n selectGrameneParalogs: state => state.grameneParalogs\n};\n\n// function selectFacetIDs(store, field) {\n// const path = `grameneGenes.data.facet_counts.facet_fields.${field}`;\n// if (_.has(store,path)) {\n// const flat_facets = _.get(store,path);\n// let idList = [];\n// if (isNaN(+flat_facets[0])) {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(flat_facets[i])\n// }\n// }\n// else {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(+flat_facets[i])\n// }\n// if (idList.length === 1) idList.push(0);\n// }\n// return idList;\n// }\n// }\n//\n// grameneGenes.selectDomainFacets = store => selectFacetIDs(store, 'domains');\n// grameneGenes.selectPathwayFacets = store => selectFacetIDs(store, 'pathways');\n// grameneGenes.selectTaxonomyFacets = store => selectFacetIDs(store, 'taxon_id');\n//\n// const grameneDomains = createAsyncResourceBundle({\n// name: 'grameneDomains',\n// actionBaseType: 'GRAMENE_DOMAINS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/domains?rows=-1&idList=${store.selectDomainFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {domains: docs, numFound: docs.length}})\n// });\n//\n// const gramenePathways = createAsyncResourceBundle({\n// name: 'gramenePathways',\n// actionBaseType: 'GRAMENE_PATHWAYS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/pathways?rows=-1&idList=${store.selectPathwayFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {pathways: docs, numFound: docs.length}})\n// });\n//\n// const grameneTaxonomy = createAsyncResourceBundle({\n// name: 'grameneTaxonomy',\n// actionBaseType: 'GRAMENE_TAXONOMY',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/taxonomy?rows=-1&idList=${store.selectTaxonomyFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {taxonomy: docs, numFound: docs.length}})\n// });\n\n\nexport default [grameneSuggestions, grameneSearch, grameneGeneAttribs, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, grameneParalogs, curatedGenes, grameneGermplasm, expressionSamples, expressionStudies];\n","import {createSelector} from \"redux-bundler\";\nimport _ from 'lodash';\nimport ReactGA from 'react-ga4'\nconst MAX_IDLIST_LENGTH = 20;\n\nfunction findNodeWithLeftIdx(node, idx) {\n if (node.leftIdx === idx) {\n return node;\n }\n let result=null;\n if (node.leftIdx < idx && node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n if (child.rightIdx > idx) {\n child.parentIdx = node.leftIdx;\n const res = findNodeWithLeftIdx(child, idx);\n if (res) result = res;\n }\n })\n }\n return result;\n}\n\nfunction markSubtree(node, source, invert) {\n node.marked = (node.leftIdx >= source.leftIdx && node.rightIdx <= source.rightIdx);\n if (invert) node.marked = !node.marked;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n markSubtree(child, source, invert);\n })\n }\n}\n\nfunction reindexTree(node, idx) {\n node.leftIdx = idx;\n idx++;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n idx = reindexTree(child, idx);\n });\n }\n node.rightIdx = idx;\n idx++;\n return idx;\n}\n\nconst grameneFilters = {\n name: 'grameneFilters',\n getReducer: () => {\n const initialState = {\n status: 'init', // others include 'search', 'waiting' and 'ready'\n operation: 'AND',\n negate: false,\n marked: false,\n leftIdx: 0,\n rightIdx: 1,\n children: [],\n showMarked: false,\n showMenu: false,\n moveCopyMode: '',\n searchOffset: 0,\n rows: 20\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_FILTERS_CLEARED': {\n newState = Object.assign({}, initialState, {\n status: 'search',\n children: []\n });\n return newState;\n }\n case 'GRAMENE_FILTER_ADDED': {\n const idx = state.rightIdx;\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: idx + 2,\n searchOffset: 0\n });\n let child = _.pick(payload, ['fq_field', 'fq_value', 'name', 'category']);\n child.leftIdx = idx;\n child.rightIdx = idx + 1;\n child.negate = false;\n child.showMenu = false;\n newState.children.push(child);\n markSubtree(newState, child, false);\n return newState;\n }\n case 'GRAMENE_FILTER_TREE_ADDED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: payload.rightIdx + 1,\n searchOffset: 0\n });\n newState.children.push(payload);\n markSubtree(newState, payload, false);\n return newState;\n }\n case 'GRAMENE_FILTER_SET_ADDED': {\n // create a filter with the payload.operation and children payload.filters\n let filter = {\n leftIdx: state.rightIdx,\n rightIdx: state.rightIdx + (payload.filters.length) * 2 + 1,\n operation: payload.operation,\n negate: false,\n showMenu: false,\n children: payload.filters\n };\n if (payload.warning) {\n filter.warning = payload.warning\n }\n let nextIdx = filter.leftIdx+1;\n payload.filters.forEach(f => {\n f.leftIdx = nextIdx++;\n f.rightIdx = nextIdx++;\n f.negate = false;\n f.showMenu = false;\n });\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0,\n rightIdx: filter.rightIdx + 1\n });\n newState.children.push(filter);\n markSubtree(newState, filter, false);\n return newState;\n }\n case 'GRAMENE_FILTER_NEGATED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n node.negate = !node.negate;\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_DELETED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n let parent = findNodeWithLeftIdx(newState, node.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== node.leftIdx);\n reindexTree(newState, 0);\n markSubtree(newState, parent, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_OPERATION_CHANGED': {\n if (payload.hasOwnProperty('operation')) {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n node.operation = node.operation === 'AND' ? 'OR' : 'AND';\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_MOVED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n let parent = findNodeWithLeftIdx(newState, source.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== source.leftIdx);\n target.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n target.children.push(source);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_COPIED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n let sourceCopy = Object.assign({}, source);\n target.children.push(sourceCopy);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_TARGETS_MARKED':\n newState = Object.assign({}, state, {\n showMarked: true,\n moveCopyMode: payload.mode,\n moveCopySource: payload.source\n });\n markSubtree(newState, payload.source, true);\n return newState;\n case 'GRAMENE_FILTER_TARGETS_UNMARKED':\n newState = Object.assign({}, state, {\n showMarked: false\n });\n return newState;\n case 'GRAMENE_FILTERS_REPLACED':\n payload.status = 'search';\n payload.searchOffset = 0;\n return payload;\n case 'GRAMENE_FILTERS_STATUS_CHANGED':\n if (!(state.status === 'ready' && payload === 'waiting')) {\n return Object.assign({}, state, {status: payload})\n }\n break;\n case 'GRAMENE_FILTERS_SET_SHOW_MARKED':\n return Object.assign({}, state, {showMarked: payload});\n case 'GRAMENE_FILTER_MENU_TOGGLED':\n payload.showMenu = !payload.showMenu;\n return Object.assign({}, state);\n case 'GRAMENE_SEARCH_PAGE_REQUESTED':\n return Object.assign({}, state, {status: 'search', searchOffset: payload * state.rows});\n case 'GRAMENE_SEARCH_FETCH_STARTED':\n return Object.assign({}, state, {status: 'loading'});\n case 'GRAMENE_SEARCH_FETCH_FINISHED':\n return Object.assign({}, state, {status: 'finished'});\n case 'GRAMENE_GENOMES_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, state, {status: 'search'});\n }\n case 'URL_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, initialState, {children:[]})\n }\n break;\n case 'APP_IDLE':\n if (state.showMarked) {\n return Object.assign({}, state, {showMarked: false})\n }\n }\n return state;\n }\n },\n doNegateGrameneFilter: filter => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_NEGATED', payload: filter}\n ]\n })\n },\n doDeleteGrameneFilter: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_TAXONOMY_CLEARED'},\n {type: 'GRAMENE_FILTER_DELETED', payload: filter}\n ]\n })\n },\n doChangeGrameneFilterOperation: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_OPERATION_CHANGED', payload: filter}\n ]\n })\n },\n doMoveOrCopyGrameneFilter: (target) => ({dispatch, getState}) => {\n const state = getState();\n if (state.grameneFilters.moveCopyMode) {\n const source = state.grameneFilters.moveCopySource;\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: `GRAMENE_FILTER_${state.grameneFilters.moveCopyMode.toUpperCase()}D`, payload: {source, target}}\n ]\n })\n }\n },\n doCopyGrameneFilter: (source, target) => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_COPIED', payload: {source, target}}\n ]\n })\n },\n doMarkGrameneFilterTargets: (source, mode) => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_MARKED', payload: {source:source, mode:mode}})\n },\n doUnmarkGrameneFilterTargets: () => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_UNMARKED'})\n },\n doAcceptGrameneSuggestion: suggestion => ({dispatch, getState}) => {\n if (!suggestion.name) {\n suggestion.name = suggestion.display_name;\n }\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: suggestion}\n ]\n })\n },\n doAddGrameneRangeQuery: terms => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'AND', filters: terms}}\n ]\n })\n },\n doToggleGrameneFilterMenu: node => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_MENU_TOGGLED', payload: node})\n },\n doRequestResultsPage: page => ({dispatch}) => {\n dispatch(\n {type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_SEARCH_PAGE_REQUESTED', payload: page}\n ]\n })\n },\n doReplaceGrameneFilters: filters => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: filters}\n ]\n })\n },\n doClearGrameneFilters: () => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_CLEARED'}\n ]\n })\n },\n selectGrameneFilters: state => state.grameneFilters,\n selectGrameneFiltersStatus: state => state.grameneFilters.status,\n selectGrameneFiltersQueryString: state => {\n const hasSpaces = new RegExp(/^[^\\[\\(].*\\s/);\n const isQuery = new RegExp(/\\([a-zA-Z0-9_]+:[a-zA-Z0-9_]+\\s/);\n const isRegionQuery = new RegExp(/^\\(map:/);\n const idWithColon = new RegExp(/^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+$/);\n function getQuery(node) {\n const negate = node.negate ? 'NOT ' : '';\n if (node.hasOwnProperty('children')) {\n // do some recursion\n return `${negate}(${node.children.map(c => getQuery(c)).sort().join(` ${node.operation} `)})`\n }\n else {\n // this node is a suggestion\n if (node.fq_field === 'location' && isRegionQuery.test(node.fq_value))\n return `${negate}${node.fq_value}`\n if (isQuery.test(node.fq_value))\n return `${negate}${node.fq_value.replace(/:/g,'\\\\:')}`;\n if (hasSpaces.test(node.fq_value))\n return `${negate}${node.fq_field}:\"${node.fq_value}\"`;\n else if (idWithColon.test(node.fq_value))\n return `${negate}${node.fq_field}:${node.fq_value.replace(/:/g,'\\\\:')}`;\n else\n return `${negate}${node.fq_field}:${node.fq_value}`\n }\n }\n if (state.grameneFilters.rightIdx === 1) {\n return '*:*';\n }\n return `*:* AND (${getQuery(state.grameneFilters)})`;\n },\n selectGrameneSearchOffset: state => state.grameneFilters.searchOffset,\n selectGrameneSearchRows: state => state.grameneFilters.rows\n};\n\nconst handleIdList = (queryObject) => {\n let actions = [{type: 'GRAMENE_SEARCH_CLEARED'}];\n let ids = _.uniq(queryObject.idList.split(','));\n let warning = null;\n if (ids.length > MAX_IDLIST_LENGTH) {\n ids = _.slice(ids, 0, MAX_IDLIST_LENGTH);\n warning = `The idList query parameter is limited to ${MAX_IDLIST_LENGTH} genes`\n }\n let filters = ids.map((id,idx) => {\n return {\n category: 'Gene',\n name: id,\n fq_field: 'id',\n fq_value: id\n }\n });\n if (filters.length === 1) {\n actions.push({type: 'GRAMENE_FILTER_ADDED', payload: filters[0]})\n }\n else {\n let action = {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'OR', filters:filters}};\n if (warning) {\n action.payload.warning = warning\n }\n actions.push(action)\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n};\n\ngrameneFilters.reactGrameneFilters = createSelector(\n 'selectQueryObject',\n 'selectGrameneFilters',\n 'selectActiveGenomes',\n 'selectUrlObject',\n (queryObject, filters, genomes, myUrl) => {\n if (filters.status === 'init') {\n if (queryObject.filters) {\n const newFilters = JSON.parse(queryObject.filters);\n let actions = [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: newFilters}\n ];\n if (queryObject.genomes) {\n let active={};\n queryObject.genomes.split(',').forEach(t => {\n active[t]=true\n });\n actions.push({type: 'GRAMENE_GENOMES_UPDATED', payload: active});\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n }\n if (queryObject.hasOwnProperty('sugg')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(queryObject.sugg)}\n ]\n };\n }\n if (queryObject.hasOwnProperty('suggestion')) {\n const url = new URL(myUrl.href);\n url.search = '';\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'SUGGESTIONS_QUERY_CHANGED', payload: {query: queryObject.suggestion}}\n ]\n };\n }\n if (queryObject.hasOwnProperty('idList')) {\n return handleIdList(queryObject);\n }\n if (queryObject.hasOwnProperty('fq_field') && queryObject.hasOwnProperty('fq_value')\n && queryObject.hasOwnProperty('category') && queryObject.hasOwnProperty('name')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: queryObject}\n ]\n };\n }\n const url = new URL(myUrl.href);\n if (url.pathname === '/genes') {\n return {type: 'GRAMENE_FILTERS_CLEARED'}\n }\n }\n if (filters.status === 'finished') {\n const url = new URL(myUrl.href);\n url.search = `filters=${JSON.stringify(Object.assign({}, filters, {status: 'init'}))}&genomes=${genomes.join(',')}`;\n ReactGA.event({\n category: \"Gene Search\",\n action: \"filter finished\",\n label: url.search\n });\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_FILTERS_STATUS_CHANGED', payload: 'ready'}\n ]\n }\n }\n }\n);\n\nexport default grameneFilters;\n","import { createSelector } from 'redux-bundler';\n\nconst grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'exprViz',\n name: 'Expression visualization',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'userLists',\n name: 'User Gene Lists',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'export',\n name: 'Data exporter',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'expression',\n name: 'Gene expression',\n show: 'off',\n shouldScroll: false,\n desiredSamples: {}\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'off',\n shouldScroll: false\n }\n // {\n // id: 'domains',\n // name: 'Domains',\n // show: 'disabled'\n // },\n // {\n // id: 'go',\n // name: 'GO terms',\n // show: 'disabled'\n // }\n ],\n touched: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_VIEW_TOGGLED':\n newState = Object.assign({},state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'off' : 'on'\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_CLICKED':\n newState = Object.assign({}, state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'on' : 'on';\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_SCROLLED':\n newState = Object.assign({}, state);\n newState.options.forEach(v => v.shouldScroll = false)\n return newState;\n default:\n return state;\n }\n }\n },\n doToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_TOGGLED', payload: idx})\n },\n dontToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_CLICKED', payload: idx})\n },\n doCancelShouldScroll: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_SCROLLED', payload: null})\n },\n selectRawGrameneViews: state => state.grameneViews,\n selectGrameneViews: createSelector(\n 'selectRawGrameneViews',\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneFilters',\n (raw, config, search, filters) => {\n const overrides = (config && config.views) || null;\n const touched = raw.touched || {};\n const numFound = (search && search.response && search.response.numFound) || 0;\n const hasFilters = !!(filters && filters.rightIdx > 1);\n const resultDependentIds = new Set(['taxonomy', 'list', 'export']);\n const autoDisable = (numFound === 0) || !hasFilters;\n const hasFirebase = !!(config && config.firebaseConfig);\n\n let options = raw.options;\n if (!hasFirebase) {\n options = options.filter(v => v.id !== 'userLists');\n }\n if (overrides) {\n options = options.filter(v => overrides[v.id] !== 'hidden');\n }\n options = options.map(v => {\n if (resultDependentIds.has(v.id) && autoDisable) {\n return { ...v, show: 'off' };\n }\n if (!overrides) return v;\n const o = overrides[v.id];\n if (!o) return v;\n if (o === 'disabled') return { ...v, show: 'disabled' };\n if (touched[v.id]) return v;\n return { ...v, show: o };\n });\n const anyOtherOn = options.some(v => v.id !== 'help' && v.show === 'on');\n if (!anyOtherOn) {\n options = options.map(v => v.id === 'help' ? { ...v, show: 'on' } : v);\n }\n return { ...raw, options };\n }\n ),\n // Set of view ids whose `show` is currently 'on'. Used by data bundles to\n // gate their auto-fetch reactors so we don't pay the cost of loading data\n // for views the user has turned off.\n selectGrameneViewsOn: createSelector(\n 'selectGrameneViews',\n (views) => {\n const ids = new Set();\n const opts = (views && views.options) || [];\n for (const v of opts) if (v && v.show === 'on') ids.add(v.id);\n return ids;\n }\n )\n};\n\nexport default grameneViews;\n","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {},\n sequences: {},\n rnaSequences: {},\n pepSequences: {},\n studies: {},\n desiredSamples: {},\n consequences: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_CONSEQUENCES_REQUESTED':\n if (!state.consequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.consequences[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_CONSEQUENCES_RECEIVED':\n newState = Object.assign({}, state);\n newState.consequences = Object.assign({}, state.consequences, payload);\n return newState;\n case 'GRAMENE_GENE_REQUESTED':\n if (!state.genes.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.genes[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_GENE_RECEIVED':\n newState = Object.assign({}, state);\n newState.genes = Object.assign({}, state.genes, payload);\n return newState;\n case 'GRAMENE_TREE_REQUESTED':\n if (!state.trees.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.trees[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_TREE_RECEIVED':\n newState = Object.assign({}, state);\n newState.trees = Object.assign({}, state.trees, payload);\n return newState;\n case 'GRAMENE_PATHWAYS_RECEIVED':\n newState = Object.assign({}, state);\n newState.pathways = Object.assign({}, state.pathways, payload);\n return newState;\n case 'ATLAS_STUDIES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies = Object.assign({}, state.studies, payload);\n return newState;\n case 'ATLAS_SAMPLES_REQUESTED':\n if (!state.studies.byID[payload].hasOwnProperty('samples')) {\n newState = Object.assign({},state);\n newState.studies.byID[payload].samples = [];\n return newState;\n }\n break;\n case 'ATLAS_SAMPLES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies.byID[payload.id].samples = payload.samples;\n return newState;\n case 'GENE_SEQUENCE_REQUESTED':\n if (!state.sequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.sequences[payload] = {};\n return newState;\n }\n break;\n case 'RNA_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.rnaSequences[payload] = {};\n return newState;\n }\n break;\n case 'PEP_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.pepSequences[payload] = {};\n return newState;\n }\n break;\n case 'GENE_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.sequences = Object.assign({}, state.sequences);\n newState.sequences[payload.id] = payload.geneSeq;\n return newState;\n case 'RNA_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.rnaSequences = Object.assign({}, state.rnaSequences);\n newState.rnaSequences[payload.id] = payload.RnaSeq;\n return newState;\n case 'PEP_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.pepSequences = Object.assign({}, state.pepSequences);\n newState.pepSequences[payload.id] = payload.PepSeq;\n return newState;\n case 'PARALOG_EXPRESSION_REQUESTED':\n if (!state.expression.hasOwnProperty(payload)) {\n newState = Object.assign({},state);\n newState.expression[payload] = [];\n return newState;\n }\n break;\n case 'PARALOG_EXPRESSION_RECEIVED':\n newState = Object.assign({}, state);\n newState.expression = Object.assign({}, state.expression);\n newState.expression[payload.id] = payload.paralogs;\n return newState;\n case 'EXPRESSION_SAMPLE_TOGGLED':\n newState = Object.assign({}, state);\n newState.desiredSamples = Object.assign({}, state.desiredSamples);\n if (newState.desiredSamples.hasOwnProperty(payload)) {\n delete newState.desiredSamples[payload]\n }\n else {\n newState.desiredSamples[payload] = {status: 'need'}\n }\n return newState;\n }\n return state;\n }\n },\n doToggleExpressionSample: id => ({dispatch}) => {\n dispatch({type: 'EXPRESSION_SAMPLE_TOGGLED', payload: id});\n },\n doRequestVEP: id => ({dispatch, store}) => {\n const consequences = store.selectGrameneConsequences();\n if (!consequences.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_CONSEQUENCES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=id:${id}&fl=id,VEP__*`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.response.docs.forEach(g => {\n genes[g.id] = g;\n });\n dispatch({type: 'GRAMENE_CONSEQUENCES_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneGene: id => ({dispatch, store}) => {\n const genes = store.selectGrameneGenes();\n if (!genes.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_GENE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genes?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.forEach(g => {\n genes[g._id] = g;\n });\n dispatch({type: 'GRAMENE_GENE_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneTree: id => ({dispatch, store}) => {\n const trees = store.selectGrameneTrees();\n const maps = store.selectGrameneMaps();\n if (!trees.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_TREE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genetrees?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let trees = {};\n res.forEach(t => {\n function update_taxon_name(node) {\n if (maps.hasOwnProperty(node.taxon_id)) {\n node.taxon_name = maps[node.taxon_id].display_name\n }\n else if (node.taxon_id === 1100004558) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45580023 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45770001 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Zea mays\"\n }\n if (node.taxon_id === 297600009 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Vitis vinifera\"\n }\n if (node.hasOwnProperty('children')) {\n node.children.forEach(c => update_taxon_name(c))\n }\n }\n update_taxon_name(t);\n trees[t._id] = t;\n });\n dispatch({type: 'GRAMENE_TREE_RECEIVED', payload: trees})\n })\n }\n },\n doRequestGramenePathways: ids => ({dispatch, store}) => {\n const pathways = store.selectGramenePathways();\n let newIds = ids.filter(id => !pathways.hasOwnProperty(id));\n if (newIds) {\n dispatch({type: 'GRAMENE_PATHWAYS_REQUESTED', payload: newIds});\n if (newIds.length === 1) newIds.push(0);\n fetch(`${store.selectGrameneAPI()}/pathways?idList=${newIds.join(',')}`)\n .then(res => res.json())\n .then(res => {\n let pathways = {};\n res.forEach(p => {\n pathways[p._id] = p;\n });\n dispatch({type: 'GRAMENE_PATHWAYS_RECEIVED', payload: pathways})\n })\n }\n },\n doRequestExpressionStudies: id => ({dispatch, store}) => {\n fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => {\n let studies = {byID:{},byTaxon:{}};\n res.forEach(s => {\n studies.byID[s._id] = s;\n if (! studies.byTaxon.hasOwnProperty(s.taxon_id)) {\n studies.byTaxon[s.taxon_id] = []\n }\n studies.byTaxon[s.taxon_id].push(s._id)\n })\n dispatch({type: 'ATLAS_STUDIES_RECEIVED', payload: studies})\n })\n },\n doRequestStudyMetadata: id => ({dispatch, store}) => {\n const studies = store.selectAtlasStudies();\n if (!studies.byID[id].hasOwnProperty('samples')) {\n dispatch({type: 'ATLAS_SAMPLES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/assays?experiment=${id}&rows=-1`)\n .then(res => res.json())\n .then(samples => {\n dispatch({type: 'ATLAS_SAMPLES_RECEIVED', payload: {id, samples}})\n })\n }\n },\n doRequestGeneSequence: gene => ({dispatch, store}) => {\n const maps = store.selectGrameneMaps();\n const seqs = store.selectGeneSequences();\n const id = gene._id;\n const MAX_FLANK = 2000;\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'GENE_SEQUENCE_REQUESTED', payload: id});\n const start = gene.location.start > MAX_FLANK ? gene.location.start - MAX_FLANK : 1;\n const dnaLength = maps[gene.taxon_id].regionLength[gene.location.region];\n const end = gene.location.end + MAX_FLANK > dnaLength ? dnaLength : gene.location.end + MAX_FLANK;\n fetch(`${store.selectEnsemblAPI()}/sequence/region/${gene.system_name}/${gene.location.region}:${start}..${end}:${gene.location.strand}?content-type=application/json`)\n .then(res => res.json())\n .then(geneSeq => {\n const x = geneSeq.id.split(':');\n geneSeq.genome = x[1];\n geneSeq.start = +x[3];\n geneSeq.end = +x[4];\n dispatch({type: 'GENE_SEQUENCE_RECEIVED', payload: {id, geneSeq}});\n })\n }\n },\n doRequestRnaSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectRnaSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'RNA_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=cdna&content-type=application/json`)\n .then(res => res.json())\n .then(RnaSeq => {\n dispatch({type: 'RNA_SEQUENCE_RECEIVED', payload: {id, RnaSeq}});\n })\n }\n },\n doRequestPepSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectPepSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'PEP_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=protein&content-type=application/json`)\n .then(res => res.json())\n .then(PepSeq => {\n dispatch({type: 'PEP_SEQUENCE_RECEIVED', payload: {id, PepSeq}});\n })\n }\n },\n doRequestParalogExpression: id => ({dispatch, store}) => {\n const expr = store.selectParalogExpression();\n if (!expr.hasOwnProperty(id)) {\n dispatch({type: 'PARALOG_EXPRESSION_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=homology__within_species_paralog:${id}&fl=id,atlas_id,name,*__expr&rows=100`)\n .then(res => res.json())\n .then(res => {\n const assay_re = /(.+)_g(\\d+)/;\n const paralogs = res.response.docs.map(d => {\n let p = {\n id: d.id,\n name: d.name,\n experiments: {},\n min:1000,\n max:0\n };\n if (d.atlas_id) {\n p.atlas_id = d.atlas_id;\n delete d.atlas_id;\n }\n delete d.id;\n delete d.name;\n Object.entries(d).forEach(assay => {\n const parsed = assay[0].match(assay_re);\n const expr = parsed[1].replace('_','-').replace('-tpms','');\n if (! p.experiments.hasOwnProperty(expr)) {\n p.experiments[expr] = [];\n }\n const g = parsed[2] - 1;\n const e = d[assay[0]];\n if (e < p.min) p.min = e;\n if (e > p.max) p.max = e;\n p.experiments[expr][g] = e;\n });\n return p;\n }).map(p => {\n for (const expr in p.experiments) {\n p.experiments[expr] = p.experiments[expr].filter(e => e >= 0);\n }\n return p;\n });\n dispatch({type: 'PARALOG_EXPRESSION_RECEIVED', payload: {id, paralogs}});\n })\n }\n },\n selectGrameneGenes: state => state.grameneDocs.genes,\n selectGrameneConsequences: state => state.grameneDocs.consequences,\n selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression,\n selectGeneSequences: state => state.grameneDocs.sequences,\n selectRnaSequences: state => state.grameneDocs.rnaSequences,\n selectPepSequences: state => state.grameneDocs.pepSequences,\n selectAtlasStudies: state => state.grameneDocs.studies,\n selectDesiredSamples: state => state.grameneDocs.desiredSamples\n};\n\nexport default grameneDocs;\n","import {createSelector} from \"redux-bundler\";\nconst grameneGenomes = {\n name: 'grameneGenomes',\n getReducer: () => {\n const initialState = {\n show: false,\n active: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_GENOMES_TOGGLED':\n newState = Object.assign({},state);\n newState.show = !newState.show;\n return newState;\n case 'GRAMENE_GENOMES_UPDATED':\n newState = Object.assign({}, state);\n newState.active = payload;\n return newState;\n case 'GRAMENE_MAPS_FETCH_FINISHED':\n newState = Object.assign({}, state);\n Object.keys(payload).forEach(key => {newState.active[key] = true;});\n return newState;\n default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doInitializeGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes},\n {type: 'GRAMENE_GENOMES_TOGGLED'},\n {type: 'GRAMENE_SEARCH_CLEARED'}]})\n },\n doEnsureGrameneGenome: genome => ({dispatch, getState}) => {\n const state = getState();\n if (Object.keys(state.grameneGenomes.active).length > 0 && !state.grameneGenomes.active.hasOwnProperty(genome)) {\n let active = Object.assign({}, state.grameneGenomes.active);\n active[genome]=true;\n dispatch({type: 'GRAMENE_GENOMES_UPDATED', payload: active})\n }\n },\n selectGrameneGenomes: state => state.grameneGenomes,\n selectActiveGenomes: state => {\n return Object.keys(state.grameneGenomes.active)\n },\n selectActiveGenomeCount: createSelector(\n 'selectGrameneMaps',\n 'selectGrameneGenomes',\n (maps,genomes) => {\n if (maps && genomes) {\n return Object.keys(genomes.active).length || Object.keys(maps).length;\n }\n return 0;\n }\n )\n};\n\nexport default grameneGenomes;\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler';\nimport overlay from '../fieldCatalog.overlay.json';\nimport { study_info as VEP_STUDY_INFO } from '../vepStudyInfo';\n\n// Fields matched by these globs are multi-valued in Solr.\nconst MULTIVALUED_PATTERNS = [\n /__expr$/,\n /__ancestors$/,\n /__xrefs$/,\n /^VEP__/,\n /^homology__/\n];\n\nfunction parseCsvHeader(text) {\n if (!text) return [];\n const line = text.split(/\\r?\\n/, 1)[0] || '';\n return line\n .split(',')\n .map(s => s.trim().replace(/^\"|\"$/g, ''))\n .filter(Boolean);\n}\n\nfunction synthesizedValue(name) {\n return MULTIVALUED_PATTERNS.some(re => re.test(name)) ? [0] : 0;\n}\n\nfunction applyTemplate(tpl, match) {\n if (!tpl) return null;\n return tpl.replace(/\\$(\\d+)/g, (_, n) => match[+n] || '');\n}\n\nfunction vepDetailLabel(matchGroups) {\n const [, , system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n if (info) return info.label;\n return `${system}/${sid}`;\n}\n\nfunction vepDetailTsvHeader(matchGroups) {\n const [conseq, zyg, system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const type = (info && info.type) || '?';\n const study = (info && info.label) || `${system}/${sid}`;\n return `${type}·${conseq}·${zyg}·${study}`;\n}\n\nfunction vepMergedLabel(matchGroups) {\n const [kind] = matchGroups || [];\n if (kind === 'NAT') return 'Merged natural population accessions';\n if (kind === 'EMS') return 'Merged EMS mutant accessions';\n return `Merged ${kind} accessions`;\n}\n\nfunction vepMergedTsvHeader(matchGroups) {\n const [kind] = matchGroups || [];\n return `merged·${kind}`;\n}\n\nfunction classifyKey(name, patterns) {\n for (const p of patterns) {\n const re = new RegExp(p.match);\n const m = name.match(re);\n if (m) {\n return {\n patternId: p.id,\n group: p.group,\n label: applyTemplate(p.labelTemplate, m) || name,\n multiValued: !!p.multiValued,\n expression: !!p.expression,\n isHidden: !!p.is_hidden,\n matchGroups: m.slice(1)\n };\n }\n }\n return null;\n}\n\nfunction inferType(value) {\n if (value === null || value === undefined) return 'unknown';\n if (Array.isArray(value)) {\n return 'array<' + (value.length ? inferType(value[0]) : 'unknown') + '>';\n }\n return typeof value;\n}\n\nfunction buildCatalog(sampleDocs) {\n const hidden = new Set(overlay.hidden || []);\n const overlayFields = overlay.fields || {};\n const patterns = overlay.patterns || [];\n const groupsMeta = overlay.groups || {};\n\n // Union keys from overlay.fields (hardcoded catalog entries) and sample docs.\n const keys = new Set(Object.keys(overlayFields));\n const sampleValues = {};\n for (const doc of (sampleDocs || [])) {\n for (const [k, v] of Object.entries(doc)) {\n keys.add(k);\n if (!(k in sampleValues)) sampleValues[k] = v;\n }\n }\n\n const fields = {};\n for (const name of keys) {\n if (hidden.has(name)) continue;\n\n const overlayEntry = overlayFields[name];\n const classified = overlayEntry ? null : classifyKey(name, patterns);\n if (classified && classified.isHidden) continue;\n const sampleVal = sampleValues[name];\n const sampleType = sampleVal !== undefined ? inferType(sampleVal) : null;\n\n const group = (overlayEntry && overlayEntry.group)\n || (classified && classified.group)\n || 'other';\n\n let label = (overlayEntry && overlayEntry.label)\n || (classified && classified.label)\n || name;\n let tsvHeader = null;\n if (classified && classified.patternId === 'vep_detail') {\n label = vepDetailLabel(classified.matchGroups);\n tsvHeader = vepDetailTsvHeader(classified.matchGroups);\n } else if (classified && classified.patternId === 'vep_merged') {\n label = vepMergedLabel(classified.matchGroups);\n tsvHeader = vepMergedTsvHeader(classified.matchGroups);\n }\n\n const multiValued = (overlayEntry && overlayEntry.multiValued)\n || (classified && classified.multiValued)\n || (sampleType && sampleType.startsWith('array<'))\n || false;\n\n fields[name] = {\n name,\n label,\n tsvHeader,\n group,\n order: overlayEntry && overlayEntry.order != null ? overlayEntry.order : null,\n description: (overlayEntry && overlayEntry.description) || '',\n type: sampleType || 'unknown',\n multiValued,\n patternId: classified ? classified.patternId : null,\n matchGroups: classified ? classified.matchGroups : null,\n expression: !!(classified && classified.expression),\n source: overlayEntry ? 'overlay' : 'sample'\n };\n }\n\n // Build groups (explicit overlay.order first, then natural sort by label)\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const compareFields = (a, b) => {\n const ao = a.order, bo = b.order;\n if (ao != null && bo != null && ao !== bo) return ao - bo;\n if (ao != null && bo == null) return -1;\n if (ao == null && bo != null) return 1;\n return collator.compare(a.label, b.label);\n };\n const groupIds = new Set(Object.values(fields).map(f => f.group));\n const groups = Array.from(groupIds).map(id => ({\n id,\n label: (groupsMeta[id] && groupsMeta[id].label) || id,\n order: (groupsMeta[id] && groupsMeta[id].order) != null ? groupsMeta[id].order : 50,\n fields: Object.values(fields)\n .filter(f => f.group === id)\n .sort(compareFields)\n .map(f => f.name)\n })).sort((a, b) => a.order - b.order);\n\n return {\n fetchedAt: Date.now(),\n groups,\n fields\n };\n}\n\nconst grameneFieldCatalog = createAsyncResourceBundle({\n name: 'grameneFieldCatalog',\n actionBaseType: 'GRAMENE_FIELD_CATALOG',\n persist: true,\n staleAfter: 5 * 60 * 1000,\n getPromise: ({ store }) => {\n const api = store.selectGrameneAPI();\n const url = `${api}/search?q=*:*&rows=0&wt=csv&fl=*`;\n return fetch(url)\n .then(r => r.text())\n .then(text => parseCsvHeader(text))\n .catch(() => null);\n }\n});\n\n// Auto-fetch the field catalog only when a view that needs it (exprViz fields\n// modal, exporter field tree) is enabled. Other views never read it.\nconst FIELD_CATALOG_VIEWS = ['exprViz', 'export'];\ngrameneFieldCatalog.reactGrameneFieldCatalog = createSelector(\n 'selectGrameneFieldCatalogShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !FIELD_CATALOG_VIEWS.some(id => viewsOn.has(id))) return;\n return { actionCreator: 'doFetchGrameneFieldCatalog' };\n }\n);\n\nfunction assayFactorLabel(assay) {\n if (!assay) return '';\n const factors = Array.isArray(assay.factor) ? assay.factor : [];\n const labels = factors.map(f => f && f.label).filter(Boolean);\n if (labels.length) return labels.join('; ');\n const chars = Array.isArray(assay.characteristic) ? assay.characteristic : [];\n const organ = chars.find(c => c && c.type === 'organism part');\n return (organ && organ.label) || '';\n}\n\nfunction parseTaxonFacet(grameneSearch, grameneMaps) {\n const arr = grameneSearch\n && grameneSearch.facet_counts\n && grameneSearch.facet_counts.facet_fields\n && grameneSearch.facet_counts.facet_fields.taxon_id;\n if (!Array.isArray(arr) || !arr.length) return null;\n // Search taxon_ids are strain-specific (e.g. 3702001); experiments use\n // species-level NCBI taxon_ids (e.g. 3702). Map via grameneMaps.anchor_taxon_id.\n // If maps aren't loaded yet, skip filtering rather than drop everything.\n if (!grameneMaps || !Object.keys(grameneMaps).length) return null;\n const speciesTaxa = new Set();\n for (let i = 0; i < arr.length; i += 2) {\n const tid = arr[i];\n if (arr[i + 1] <= 0) continue;\n const map = grameneMaps[tid];\n const anchor = map && map.anchor_taxon_id;\n speciesTaxa.add(Number(anchor || tid));\n }\n return speciesTaxa.size ? speciesTaxa : null;\n}\n\nfunction buildExperimentTaxonIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const [taxon, arr] of Object.entries(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = Number(taxon);\n }\n return index;\n}\n\nfunction buildExperimentTitleIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) {\n if (e && e._id) index[e._id] = e.description || e.title || '';\n }\n }\n return index;\n}\n\nfunction buildSpeciesNameIndex(grameneMaps) {\n const idx = {};\n if (!grameneMaps) return idx;\n for (const m of Object.values(grameneMaps)) {\n if (m && m.anchor_taxon_id && !idx[m.anchor_taxon_id]) {\n idx[m.anchor_taxon_id] = m.display_name || String(m.anchor_taxon_id);\n }\n }\n return idx;\n}\n\nfunction fieldExperimentId(name) {\n let m = name.match(/^(\\w+?)_g\\d+__expr$/);\n if (m) return m[1].replace(/_/g, '-');\n m = name.match(/^(\\w+?)_g\\d+_g\\d+_(pval|logfc|l2fc)_attr_[a-z]$/);\n if (m) return m[1].replace(/_/g, '-');\n return null;\n}\n\nconst STAT_RANK = { l2fc: 0, logfc: 1, pval: 2 };\n\nfunction collapseDiffExprInSubgroups(subgroups, fieldsOut, collator) {\n for (const taxGroup of subgroups) {\n for (const expGroup of (taxGroup.subgroups || [])) {\n const contrastMap = new Map();\n const others = [];\n for (const name of (expGroup.fields || [])) {\n const f = fieldsOut[name];\n if (!f || f.patternId !== 'diffexpr') { others.push(name); continue; }\n const mg = f.matchGroups || [];\n const key = `${mg[1]}|${mg[2]}`;\n let arr = contrastMap.get(key);\n if (!arr) { arr = []; contrastMap.set(key, arr); }\n arr.push(name);\n }\n const newFields = [...others];\n for (const names of contrastMap.values()) {\n if (names.length === 1) { newFields.push(names[0]); continue; }\n names.sort((a, b) => {\n const ra = STAT_RANK[(fieldsOut[a].matchGroups || [])[3]] ?? 99;\n const rb = STAT_RANK[(fieldsOut[b].matchGroups || [])[3]] ?? 99;\n if (ra !== rb) return ra - rb;\n return collator.compare(a, b);\n });\n const rep = names[0];\n const repEntry = fieldsOut[rep];\n const label = (repEntry.label || rep).replace(/\\s+\\((?:pval|logfc|l2fc)\\)/, '');\n fieldsOut[rep] = { ...repEntry, label, linkedFields: names.slice() };\n newFields.push(rep);\n }\n expGroup.fields = newFields;\n }\n }\n}\n\nfunction buildExpressionSubgroups(fieldNames, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator) {\n const byTaxon = new Map();\n const orphans = [];\n const studiesLoaded = Object.keys(experimentTaxa).length > 0;\n for (const name of fieldNames) {\n const expId = fieldExperimentId(name);\n if (!expId) { orphans.push(name); continue; }\n const taxon = experimentTaxa[expId];\n if (!taxon) {\n if (studiesLoaded) continue;\n orphans.push(name);\n continue;\n }\n let taxonEntry = byTaxon.get(taxon);\n if (!taxonEntry) {\n taxonEntry = new Map();\n byTaxon.set(taxon, taxonEntry);\n }\n let expEntry = taxonEntry.get(expId);\n if (!expEntry) {\n expEntry = [];\n taxonEntry.set(expId, expEntry);\n }\n expEntry.push(name);\n }\n\n const taxonGroups = [];\n for (const [taxon, expMap] of byTaxon) {\n const experiments = [];\n for (const [expId, names] of expMap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n const title = experimentTitles && experimentTitles[expId];\n experiments.push({\n id: 'exp-' + expId,\n label: title ? `${expId} — ${title}` : expId,\n fields: names\n });\n }\n experiments.sort((a, b) => collator.compare(a.label, b.label));\n taxonGroups.push({\n id: 'tax-' + taxon,\n label: speciesNames[taxon] || `taxon ${taxon}`,\n taxon,\n subgroups: experiments\n });\n }\n taxonGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n return { subgroups: taxonGroups, orphans };\n}\n\nfunction buildVepSubgroups(fieldNames, fieldsOut, collator) {\n const buckets = {\n NAT: { merged: [], byConseq: new Map() },\n EMS: { merged: [], byConseq: new Map() }\n };\n const orphans = [];\n\n for (const name of fieldNames) {\n const f = fieldsOut[name];\n if (!f) { orphans.push(name); continue; }\n if (f.patternId === 'vep_merged') {\n const kind = (f.matchGroups && f.matchGroups[0]) || '';\n if (buckets[kind]) buckets[kind].merged.push(name);\n else orphans.push(name);\n } else if (f.patternId === 'vep_detail') {\n const mg = f.matchGroups || [];\n const [conseq, zyg, system, sid] = mg;\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const kind = info && info.type;\n if (!buckets[kind]) { orphans.push(name); continue; }\n let zmap = buckets[kind].byConseq.get(conseq);\n if (!zmap) {\n zmap = new Map();\n buckets[kind].byConseq.set(conseq, zmap);\n }\n let arr = zmap.get(zyg);\n if (!arr) {\n arr = [];\n zmap.set(zyg, arr);\n }\n arr.push(name);\n } else {\n orphans.push(name);\n }\n }\n\n const kindLabels = { NAT: 'Natural populations', EMS: 'Mutant populations' };\n const subgroups = [];\n for (const kind of ['NAT', 'EMS']) {\n const bucket = buckets[kind];\n if (!bucket.merged.length && bucket.byConseq.size === 0) continue;\n\n const conseqGroups = [];\n for (const [conseq, zmap] of bucket.byConseq) {\n const zygGroups = [];\n for (const [zyg, names] of zmap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n zygGroups.push({\n id: `lof-${kind}-${conseq}-${zyg}`,\n label: zyg === 'het' ? 'heterozygous' : 'homozygous',\n fields: names\n });\n }\n zygGroups.sort((a, b) => collator.compare(a.label, b.label));\n conseqGroups.push({\n id: `lof-${kind}-${conseq}`,\n label: conseq.replace(/_/g, ' '),\n subgroups: zygGroups\n });\n }\n conseqGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n bucket.merged.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n\n subgroups.push({\n id: `lof-${kind}`,\n label: kindLabels[kind],\n fields: bucket.merged,\n subgroups: conseqGroups\n });\n }\n\n return { subgroups, orphans };\n}\n\nfunction enrichLabels(catalog, expressionStudies, expressionSamples, grameneSearch, grameneMaps) {\n if (!catalog || !catalog.fields) return catalog;\n if (!expressionSamples) return catalog;\n\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const taxaInResults = parseTaxonFacet(grameneSearch, grameneMaps);\n const experimentTaxa = buildExperimentTaxonIndex(expressionStudies);\n const experimentTitles = buildExperimentTitleIndex(expressionStudies);\n const dropped = new Set();\n const fieldsOut = {};\n\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (f.patternId !== 'expr' && f.patternId !== 'diffexpr') {\n fieldsOut[name] = f;\n continue;\n }\n const mg = f.matchGroups || [];\n const experimentSolr = mg[0];\n if (!experimentSolr) { fieldsOut[name] = f; continue; }\n const experimentId = experimentSolr.replace(/_/g, '-');\n\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) {\n dropped.add(name);\n continue;\n }\n }\n\n const assays = expressionSamples[experimentId] || [];\n let newLabel = f.label;\n if (f.patternId === 'expr') {\n const g = 'g' + mg[1];\n const assay = assays.find(a => a && a.group === g);\n const desc = assayFactorLabel(assay);\n newLabel = desc ? `${experimentId} ${g}: ${desc}` : `${experimentId} ${g}`;\n } else {\n const gA = 'g' + mg[1];\n const gB = 'g' + mg[2];\n const metric = mg[3];\n const aA = assays.find(a => a && a.group === gA);\n const aB = assays.find(a => a && a.group === gB);\n const dA = assayFactorLabel(aA);\n const dB = assayFactorLabel(aB);\n const pair = dA && dB ? `: ${dA} vs ${dB}` : '';\n newLabel = `${experimentId} ${gA} vs ${gB} (${metric})${pair}`;\n }\n\n fieldsOut[name] = newLabel !== f.label ? { ...f, label: newLabel } : f;\n }\n\n // Synthesize any expr fields missing from catalog.fields using the complete\n // assays collection. The doc-sample only surfaces expr keys that happened to\n // appear in the sampled genes; assays is authoritative per-experiment.\n const synthesized = [];\n for (const [experimentId, assays] of Object.entries(expressionSamples)) {\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) continue;\n }\n const solrPrefix = experimentId.replace(/-/g, '_');\n for (const assay of assays) {\n if (!assay || !assay.group) continue;\n const name = `${solrPrefix}_${assay.group}__expr`;\n if (fieldsOut[name]) continue;\n const desc = assayFactorLabel(assay);\n fieldsOut[name] = {\n name,\n label: desc ? `${experimentId} ${assay.group}: ${desc}` : `${experimentId} ${assay.group}`,\n group: 'expression',\n description: '',\n type: 'array<float>',\n multiValued: true,\n patternId: 'expr',\n matchGroups: [solrPrefix, assay.group.replace(/^g/, '')],\n expression: true,\n source: 'assays'\n };\n synthesized.push(name);\n }\n }\n\n const speciesNames = buildSpeciesNameIndex(grameneMaps);\n\n const groups = catalog.groups.map(g => {\n let list = dropped.size ? g.fields.filter(n => !dropped.has(n)) : g.fields;\n if (g.id === 'expression' && synthesized.length) {\n const existing = new Set(list);\n list = [...list, ...synthesized.filter(n => !existing.has(n))];\n }\n if (g.id === 'lof') {\n const { subgroups, orphans } = buildVepSubgroups(list, fieldsOut, collator);\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n }\n if (g.id !== 'expression' && g.id !== 'differential') {\n return list === g.fields ? g : { ...g, fields: list };\n }\n const { subgroups, orphans } = buildExpressionSubgroups(\n list, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator\n );\n if (g.id === 'differential') {\n collapseDiffExprInSubgroups(subgroups, fieldsOut, collator);\n }\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n });\n\n return { ...catalog, fields: fieldsOut, groups };\n}\n\nfunction filterCatalogByPresentFields(catalog, present) {\n if (!catalog || !catalog.fields || !present) return catalog;\n const filteredFields = {};\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (present.has(name)) filteredFields[name] = f;\n }\n const hasContent = (g) =>\n (g.fields && g.fields.length > 0) ||\n (g.subgroups && g.subgroups.some(hasContent));\n const filterGroup = (g) => {\n const fields = (g.fields || []).filter(n => present.has(n));\n const subgroups = (g.subgroups || [])\n .map(filterGroup)\n .filter(hasContent);\n return { ...g, fields, subgroups };\n };\n const groups = (catalog.groups || []).map(filterGroup).filter(hasContent);\n return { ...catalog, fields: filteredFields, groups };\n}\n\ngrameneFieldCatalog.selectFieldCatalog = createSelector(\n 'selectGrameneFieldCatalog',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n (fieldNames, studies, samples, search, maps) => {\n if (!fieldNames || !fieldNames.length) return null;\n const present = new Set(fieldNames);\n // Build a synthetic doc from the discovered field names; values carry the\n // right JS type so inferType picks the correct multiValued/type (arrays\n // for multi-valued fields, scalars otherwise). Derive pval/logfc\n // companions from every l2fc field.\n const doc = {};\n for (const name of present) {\n doc[name] = synthesizedValue(name);\n if (/_l2fc_attr_f$/.test(name)) {\n doc[name.replace('_l2fc_', '_pval_')] = 0;\n doc[name.replace('_l2fc_', '_logfc_')] = 0;\n }\n }\n const catalog = buildCatalog([doc]);\n const enriched = enrichLabels(catalog, studies, samples, search, maps);\n return filterCatalogByPresentFields(enriched, present);\n }\n);\n\ngrameneFieldCatalog.selectFieldCatalogGroups = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.groups) || []\n);\n\ngrameneFieldCatalog.selectFieldCatalogByName = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.fields) || {}\n);\n\nexport default grameneFieldCatalog;\n","{\n \"groups\": {\n \"core\": { \"label\": \"Core identifiers\", \"order\": 0 },\n \"location\": { \"label\": \"Genomic location\", \"order\": 1 },\n \"structure\": { \"label\": \"Gene structure\", \"order\": 2 },\n \"homology\": { \"label\": \"Homology\", \"order\": 3 },\n \"expression\": { \"label\": \"Gene expression\", \"order\": 4 },\n \"differential\": { \"label\": \"Differential expression\",\"order\": 5 },\n \"hierarchical\": { \"label\": \"Hierarchical annotations\",\"order\": 6 },\n \"pathways\": { \"label\": \"Pathways\", \"order\": 7 },\n \"GO\": { \"label\": \"Gene Ontology\", \"order\": 7 },\n \"PO\": { \"label\": \"Plant Ontology\", \"order\": 8 },\n \"lof\": { \"label\": \"Loss of function alleles\",\"order\": 9 },\n \"MAKER\": { \"label\": \"MAKER transcript metrics\",\"order\": 10 },\n \"xrefs\": { \"label\": \"External references\", \"order\": 11 },\n \"other\": { \"label\": \"Other\", \"order\": 99 }\n },\n\n \"patterns\": [\n {\n \"id\": \"homology\",\n \"match\": \"^homology__(.+)$\",\n \"group\": \"homology\",\n \"multiValued\": true,\n \"labelTemplate\": \"Homology: $1\"\n },\n {\n \"id\": \"pathways\",\n \"match\": \"^pathways__(.+)$\",\n \"group\": \"pathways\",\n \"multiValued\": true,\n \"labelTemplate\": \"Pathway: $1\"\n },\n {\n \"id\": \"maker\",\n \"match\": \"^MAKER__(.+)__attr_([a-z])$\",\n \"group\": \"MAKER\",\n \"labelTemplate\": \"MAKER: $1\"\n },\n {\n \"id\": \"xrefs\",\n \"match\": \"^(.+)__xrefs$\",\n \"group\": \"xrefs\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 (xrefs)\"\n },\n {\n \"id\": \"expr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)__expr$\",\n \"group\": \"expression\",\n \"expression\": true,\n \"labelTemplate\": \"$1 · g$2\"\n },\n {\n \"id\": \"diffexpr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)_g(\\\\d+)_(pval|logfc|l2fc)_attr_([a-z])$\",\n \"group\": \"differential\",\n \"diffExpression\": true,\n \"labelTemplate\": \"$1 · g$2 vs g$3 · $4\"\n },\n {\n \"id\": \"bins\",\n \"match\": \"^(fixed|uniform)_([0-9a-zA-Z]+)__bin$\",\n \"group\": \"bins\",\n \"is_hidden\": true,\n \"labelTemplate\": \"$1 bin ($2)\"\n },\n {\n \"id\": \"neighbors\",\n \"match\": \".*neighbors_[0-9]+$\",\n \"group\": \"neighbors\",\n \"is_hidden\": true,\n \"labelTemplate\": \"neighbors\"\n },\n {\n \"id\": \"vep_merged\",\n \"match\": \"^VEP__merged__(NAT|EMS)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"Merged $1 accessions\"\n },\n {\n \"id\": \"vep_detail\",\n \"match\": \"^VEP__(.+?)__(homo|het)__(.+?)__(\\\\d+)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 ($2) $3/$4\"\n },\n {\n \"id\": \"generic_attr\",\n \"match\": \"^(.+)__attr_([a-z])$\",\n \"group\": \"other\",\n \"labelTemplate\": \"$1\"\n }\n ],\n\n \"fields\": {\n \"id\": { \"group\": \"core\", \"label\": \"Gene ID\", \"order\": 1 },\n \"name\": { \"group\": \"core\", \"label\": \"Name\", \"order\": 2 },\n \"description\": { \"group\": \"core\", \"label\": \"Description\", \"order\": 4 },\n \"summary\": { \"group\": \"core\", \"label\": \"Summary\", \"order\": 5 },\n \"synonyms\": { \"group\": \"core\", \"label\": \"Synonyms\", \"multiValued\": true, \"order\": 3 },\n \"biotype\": { \"group\": \"core\", \"label\": \"Biotype\", \"order\": 6 },\n \"taxon_id\": { \"group\": \"core\", \"label\": \"Taxon ID\", \"order\": 8 },\n \"system_name\": { \"group\": \"core\", \"label\": \"System name\", \"order\": 7 },\n \"db_type\": { \"group\": \"core\", \"label\": \"DB type\", \"order\": 9 },\n\n \"closest_rep_id\": { \"group\": \"homology\", \"label\": \"Closest representative ID\", \"order\": 1 },\n \"closest_rep_name\": { \"group\": \"homology\", \"label\": \"Closest representative name\", \"order\": 2 },\n \"closest_rep_identity\": { \"group\": \"homology\", \"label\": \"Closest representative identity\", \"order\": 3 },\n \"closest_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Closest representative taxon\", \"order\": 4 },\n \"closest_rep_description\": { \"group\": \"homology\", \"label\": \"Closest representative description\", \"order\": 5 },\n \"model_rep_id\": { \"group\": \"homology\", \"label\": \"Model representative ID\", \"order\": 6 },\n \"model_rep_name\": { \"group\": \"homology\", \"label\": \"Model representative name\", \"order\": 7 },\n \"model_rep_identity\": { \"group\": \"homology\", \"label\": \"Model representative identity\", \"order\": 8 },\n \"model_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Model representative taxon\", \"order\": 9 },\n \"model_rep_description\": { \"group\": \"homology\", \"label\": \"Model representative description\", \"order\": 10 },\n\n \"gene_tree\": { \"group\": \"homology\", \"label\": \"Gene tree ID\", \"order\": 11 },\n \"pan_tree\": { \"group\": \"homology\", \"label\": \"Pan-gene tree ID\", \"order\": 14 },\n\n \"capabilities\": { \"group\": \"other\", \"label\": \"Capabilities\", \"multiValued\": true },\n\n \"map\": { \"group\": \"location\", \"label\": \"Map\", \"order\": 1 },\n \"region\": { \"group\": \"location\", \"label\": \"Region\", \"order\": 2 },\n \"start\": { \"group\": \"location\", \"label\": \"Start\", \"order\": 3 },\n \"end\": { \"group\": \"location\", \"label\": \"End\", \"order\": 4 },\n \"strand\": { \"group\": \"location\", \"label\": \"Strand\", \"order\": 5 },\n\n \"GO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"GO terms\", \"multiValued\": true, \"order\": 1 },\n \"PO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"PO terms\", \"multiValued\": true, \"order\": 2 },\n \"TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"TO terms\", \"multiValued\": true, \"order\": 3 },\n \"QTL_TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"QTL traits (TO)\", \"multiValued\": true, \"order\": 7 },\n \"domains__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Domains\", \"multiValued\": true, \"order\": 4 },\n \"taxonomy__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Taxonomy\", \"multiValued\": true, \"order\": 6 },\n \"supertree_attr_s\": { \"group\": \"homology\", \"label\": \"Supertree\", \"order\": 13 },\n \"gene_tree_root_taxon_id\": { \"group\": \"homology\", \"label\": \"Gene tree root taxon\", \"order\": 12 },\n \"protein__length\": { \"group\": \"structure\", \"label\": \"Protein length\" },\n \"transcript__count\": { \"group\": \"structure\", \"label\": \"Transcript count\" },\n \"transcript__exons\": { \"group\": \"structure\", \"label\": \"Exon count\" },\n \"transcript__length\": { \"group\": \"structure\", \"label\": \"Transcript length\" },\n \"expressed_in_gxa_attr_ss\": { \"group\": \"expression\", \"label\": \"Expressed in GXA\", \"multiValued\": true },\n\n \"MAKER__AED__attr_f\": { \"group\": \"MAKER\", \"label\": \"AED\", \"description\": \"Annotation Edit Distance\" },\n \"MAKER__QI1__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI1: Length of the 5' UTR\" },\n \"MAKER__QI2__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI2: Fraction of splice sites confirmed by EST\" },\n \"MAKER__QI3__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI3: Fraction of exons overlapping an EST\" },\n \"MAKER__QI4__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI4: Fraction of exons overlapping EST or protein\" },\n \"MAKER__QI5__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI5: Fraction of splice sites confirmed by SNAP\" },\n \"MAKER__QI6__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI6: Fraction of exons overlapping a SNAP\" },\n \"MAKER__QI7__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI7: Number of exons in the mRNA\" },\n \"MAKER__QI8__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI8: Length of the 3' UTR\" },\n \"MAKER__QI9__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI9: Length of the protein sequence\" },\n\n \"homology__all_orthologs\": { \"group\": \"homology\", \"label\": \"All orthologs\", \"multiValued\": true, \"order\": 15 },\n \"homology__ortholog_one2one\": { \"group\": \"homology\", \"label\": \"1:1 orthologs\", \"multiValued\": true, \"order\": 16 },\n \"homology__ortholog_one2many\": { \"group\": \"homology\", \"label\": \"1:many orthologs\", \"multiValued\": true, \"order\": 17 },\n \"homology__ortholog_many2many\": { \"group\": \"homology\", \"label\": \"Many:many orthologs\", \"multiValued\": true, \"order\": 18 },\n \"homology__syntenic_ortholog_one2one\":{ \"group\": \"homology\", \"label\": \"Syntenic 1:1 orthologs\", \"multiValued\": true, \"order\": 19 },\n \"homology__within_species_paralog\": { \"group\": \"homology\", \"label\": \"Within-species paralogs\", \"multiValued\": true, \"order\": 20 },\n\n \"pathways__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Pathways\", \"multiValued\": true, \"order\": 5 },\n\n \"canonical_transcript__attr_s\": { \"group\": \"structure\", \"label\": \"Canonical transcript ID\" }\n },\n\n \"hidden\": [\n \"_version_\", \"_terms\", \"score\",\n \"gene_idx\", \"gene_idx_multi\", \"species_idx\",\n \"compara_idx\", \"compara_idx_multi\",\n \"_id\", \"annotations\", \"bins\", \"gene_structure\",\n \"homology\", \"location\", \"xrefs\",\n \"domain_roots\", \"familyRoot__ancestors\", \"taxonomy__ancestors\", \"capabilities\",\n \"saved_search\"\n ]}\n","export const study_info = {\n 'sorghum_bicolor': {\n '1': { label: 'Purdue EMS', type: 'EMS' },\n '2': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '3': { label: 'Lozano', type: 'NAT' },\n '4': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '5': { label: 'Boatwright SAP', type: 'NAT' },\n '7': { label: 'Kumar BAP', type: 'NAT' },\n '8': { label: 'Lasky landraces', type: 'NAT' },\n '9': { label: 'Sorghum Genomics Toolbox', type: 'NAT' }\n },\n 'zea_maysb73': {\n '15': { label: 'MaizeGDB 2024', type: 'NAT' }\n },\n 'oryza_sativa': {\n '7': { label: 'Rice 3K', type: 'NAT' },\n '20': { label: '19K-RGP', type: 'NAT' },\n '29': { label: 'Rice USDA mini core', type: 'NAT' },\n '38': { label: 'RAPDB 2024', type: 'NAT' }\n },\n 'oryza_aus': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativa117425': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativair64rs2': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativamh63': { '20': { label: '19K-RGP', type: 'NAT' } }\n};\n","import { createSelector } from 'redux-bundler';\nimport { runExporterDownload } from '../components/exporter/downloadRunner';\n\nconst DEFAULT_FIELDS = ['id', 'name', 'system_name', 'biotype'];\nconst PREVIEW_ROWS = 20;\nconst PREVIEW_DEBOUNCE_MS = 250;\n\nfunction computePreviewSignature(store) {\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n return `${q}|${taxa.sort().join(',')}`;\n}\n\nlet debounceTimer = null;\nlet pendingRequestId = 0;\nlet pendingDownloadId = 0;\nlet currentDownloadController = null;\n\nconst markStale = (preview) => ({ ...preview, status: 'stale' });\n\nconst exporter = {\n name: 'exporter',\n\n getReducer: () => {\n const initialState = {\n selectedFields: DEFAULT_FIELDS,\n format: 'tsv',\n cutoffs: { exprMinTPM: 0.5, diffMaxPval: 0.05 },\n preview: { status: 'stale', data: null, error: null, requestId: 0, signature: null },\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: 0 }\n };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'EXPORTER_FIELD_TOGGLED': {\n const idx = state.selectedFields.indexOf(payload);\n const selectedFields = idx === -1\n ? [...state.selectedFields, payload]\n : state.selectedFields.filter(f => f !== payload);\n return { ...state, selectedFields };\n }\n case 'EXPORTER_FIELDS_REORDERED':\n return { ...state, selectedFields: payload };\n case 'EXPORTER_FIELDS_BULK_SET': {\n const { names, selected } = payload;\n if (!Array.isArray(names) || names.length === 0) return state;\n if (selected) {\n const existing = new Set(state.selectedFields);\n const additions = names.filter(n => !existing.has(n));\n if (additions.length === 0) return state;\n return { ...state, selectedFields: [...state.selectedFields, ...additions] };\n }\n const remove = new Set(names);\n const next = state.selectedFields.filter(n => !remove.has(n));\n if (next.length === state.selectedFields.length) return state;\n return { ...state, selectedFields: next };\n }\n case 'EXPORTER_FORMAT_SET':\n return { ...state, format: payload };\n case 'EXPORTER_CUTOFFS_SET':\n return { ...state, cutoffs: { ...state.cutoffs, ...(payload || {}) } };\n case 'EXPORTER_FIELDS_CLEARED':\n return { ...state, selectedFields: [] };\n case 'EXPORTER_PREVIEW_INVALIDATED':\n return { ...state, preview: markStale(state.preview) };\n\n case 'EXPORTER_PREVIEW_STARTED':\n return {\n ...state,\n preview: { ...state.preview, status: 'loading', requestId: payload.requestId, error: null, signature: payload.signature }\n };\n case 'EXPORTER_PREVIEW_SUCCEEDED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { status: 'ready', data: payload.data, error: null, requestId: payload.requestId, signature: state.preview.signature }\n };\n case 'EXPORTER_PREVIEW_FAILED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { ...state.preview, status: 'error', error: payload.error }\n };\n\n case 'EXPORTER_DOWNLOAD_REQUESTED':\n return {\n ...state,\n download: { status: 'preparing', progress: 0, total: 0, error: null, requestId: payload.requestId }\n };\n case 'EXPORTER_DOWNLOAD_STARTED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'downloading', total: payload.total }\n };\n case 'EXPORTER_DOWNLOAD_PROGRESS':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, progress: payload.progress }\n };\n case 'EXPORTER_DOWNLOAD_COMPLETED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'done', progress: payload.written || state.download.progress }\n };\n case 'EXPORTER_DOWNLOAD_CANCELLED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'cancelled' }\n };\n case 'EXPORTER_DOWNLOAD_FAILED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'error', error: payload.error }\n };\n case 'EXPORTER_DOWNLOAD_RESET':\n return {\n ...state,\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: state.download.requestId }\n };\n default:\n return state;\n }\n };\n },\n\n doToggleExporterField: fieldName => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELD_TOGGLED', payload: fieldName }),\n\n doReorderExporterFields: fieldList => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_REORDERED', payload: fieldList }),\n\n doBulkSetExporterFields: (names, selected) => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_BULK_SET', payload: { names, selected } }),\n\n doSetExporterFormat: fmt => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FORMAT_SET', payload: fmt }),\n\n doSetExporterCutoffs: cutoffs => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_CUTOFFS_SET', payload: cutoffs }),\n\n doClearExporterFields: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_CLEARED' }),\n\n doFetchExporterPreview: () => ({ dispatch, store }) => {\n clearTimeout(debounceTimer);\n const requestId = ++pendingRequestId;\n const signature = computePreviewSignature(store);\n dispatch({ type: 'EXPORTER_PREVIEW_STARTED', payload: { requestId, signature } });\n debounceTimer = setTimeout(() => {\n if (requestId !== pendingRequestId) return;\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const url = `${api}/search?q=${q}&fl=*&rows=${PREVIEW_ROWS}${fq}`;\n\n fetch(url)\n .then(r => r.json())\n .then(json => {\n const docs = (json && json.response && json.response.docs) || [];\n dispatch({ type: 'EXPORTER_PREVIEW_SUCCEEDED', payload: { requestId, data: docs } });\n })\n .catch(err => {\n dispatch({ type: 'EXPORTER_PREVIEW_FAILED', payload: { requestId, error: String(err) } });\n });\n }, PREVIEW_DEBOUNCE_MS);\n },\n\n reactExporterPreview: createSelector(\n 'selectExporter',\n 'selectGrameneFiltersStatus',\n 'selectGrameneFiltersQueryString',\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'selectGrameneViewsOn',\n (exp, filtersStatus, q, g, m, viewsOn) => {\n if (!exp || !exp.preview) return;\n if (filtersStatus === 'init') return;\n if (exp.preview.status === 'loading') return;\n // Don't run the preview query unless the user has the exporter view open.\n if (!viewsOn || !viewsOn.has('export')) return;\n const maps = m || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => maps[tid] && !maps[tid].hidden);\n const sig = `${q}|${taxa.sort().join(',')}`;\n if (exp.preview.signature === sig && exp.preview.status !== 'stale') return;\n return { actionCreator: 'doFetchExporterPreview' };\n }\n ),\n\n doStartExporterDownload: () => ({ dispatch, store }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n }\n const requestId = ++pendingDownloadId;\n const controller = new AbortController();\n currentDownloadController = controller;\n dispatch({ type: 'EXPORTER_DOWNLOAD_REQUESTED', payload: { requestId } });\n\n const isSuperseded = () => requestId !== pendingDownloadId;\n\n runExporterDownload({\n dispatch,\n store,\n requestId,\n signal: controller.signal,\n isSuperseded\n }).catch(err => {\n if (err && err.name === 'AbortError') {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n } else {\n dispatch({ type: 'EXPORTER_DOWNLOAD_FAILED', payload: { requestId, error: String(err) } });\n }\n });\n },\n\n doCancelExporterDownload: () => ({ dispatch }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n currentDownloadController = null;\n }\n pendingDownloadId++;\n },\n\n doResetExporterDownload: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_DOWNLOAD_RESET' }),\n\n selectExporter: state => state.exporter,\n selectExporterSelectedFields: state => state.exporter.selectedFields,\n selectExporterFormat: state => state.exporter.format,\n selectExporterCutoffs: state => state.exporter.cutoffs,\n selectExporterPreview: state => state.exporter.preview,\n selectExporterDownload: state => state.exporter.download\n};\n\nexport default exporter;\n","import { buildTableData, toJSONRows } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\n\nconst PAGE_SIZE = 1000;\n\nfunction buildSearchURL(api, q, fl, rows, start, fq) {\n const params = [\n `q=${q}`,\n `rows=${rows}`,\n `start=${start}`,\n 'facet=false'\n ];\n if (fl) params.push(`fl=${encodeURIComponent(fl)}`);\n return `${api}/search?${params.join('&')}${fq}`;\n}\n\nfunction triggerBrowserSave(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 2000);\n}\n\nexport async function runExporterDownload({ dispatch, store, requestId, signal, isSuperseded }) {\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const fields = store.selectExporterSelectedFields();\n const fl = fields.join(',');\n const format = store.selectExporterFormat();\n const catalog = store.selectFieldCatalog();\n const expressionStudies = store.selectExpressionStudies();\n const expressionSamples = store.selectExpressionSamples();\n const ancestorFields = fields.filter(n => ANCESTOR_FIELD_MAP[n]);\n\n const cutoffs = store.selectExporterCutoffs && store.selectExporterCutoffs();\n const buildResolverCtx = () => ({\n expressionStudies,\n expressionSamples,\n taxonomy: store.selectGrameneTaxonomy(),\n pathways: store.selectGramenePathways(),\n ontologies: store.selectOntologies(),\n cutoffs\n });\n\n const ensureAncestorRecords = async (docs) => {\n if (ancestorFields.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFields);\n const waits = [];\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue;\n if (ontKey === 'pathways') {\n const pathwaysCache = store.selectGramenePathways() || {};\n const missing = ids.filter(id => !pathwaysCache.hasOwnProperty(id));\n if (missing.length) store.doRequestGramenePathways(missing);\n continue;\n }\n const p = store.doEnsureOntologyRecords(ontKey, ids);\n if (p && typeof p.then === 'function') waits.push(p);\n }\n if (waits.length) await Promise.all(waits);\n };\n\n const fetchJSON = (url) => fetch(url, { signal }).then(r => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.json();\n });\n\n const countUrl = buildSearchURL(api, q, 'id', 0, 0, fq);\n const countResp = await fetchJSON(countUrl);\n const total = (countResp && countResp.response && countResp.response.numFound) || 0;\n\n dispatch({ type: 'EXPORTER_DOWNLOAD_STARTED', payload: { requestId, total } });\n\n if (total === 0) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: 0 } });\n return;\n }\n\n const tsvPieces = [];\n const jsonRows = [];\n let progress = 0;\n\n if (format === 'tsv') {\n const { header } = buildTableData([], fields, catalog, buildResolverCtx());\n tsvPieces.push(header.join('\\t') + '\\n');\n }\n\n let start = 0;\n while (start < total) {\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n const url = buildSearchURL(api, q, fl, PAGE_SIZE, start, fq);\n const resp = await fetchJSON(url);\n const docs = (resp && resp.response && resp.response.docs) || [];\n if (docs.length === 0) break;\n\n await ensureAncestorRecords(docs);\n const resolverCtx = buildResolverCtx();\n\n if (format === 'tsv') {\n const { rows } = buildTableData(docs, fields, catalog, resolverCtx);\n for (const row of rows) tsvPieces.push(row.join('\\t') + '\\n');\n } else {\n const rows = toJSONRows(docs, fields, resolverCtx);\n for (const r of rows) jsonRows.push(r);\n }\n\n start += docs.length;\n progress = start;\n dispatch({ type: 'EXPORTER_DOWNLOAD_PROGRESS', payload: { requestId, progress } });\n }\n\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n\n const stamp = new Date().toISOString().slice(0, 19).replace(/[:T]/g, '-');\n let blob;\n let filename;\n if (format === 'tsv') {\n blob = new Blob(tsvPieces, { type: 'text/tab-separated-values' });\n filename = `gramene-export-${stamp}.tsv`;\n } else {\n blob = new Blob([JSON.stringify(jsonRows, null, 2)], { type: 'application/json' });\n filename = `gramene-export-${stamp}.json`;\n }\n\n triggerBrowserSave(blob, filename);\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: progress } });\n}\n","import {\n partitionFields,\n resolveExpressionForDoc,\n resolveDiffExpressionForDoc,\n EXPRESSION_EXTRA_COLUMNS,\n DIFFEXPRESSION_EXTRA_COLUMNS\n} from './expressionResolver';\nimport {\n ANCESTOR_FIELD_MAP,\n isAncestorField,\n formatAncestorsCellTSV,\n formatAncestorsJSON,\n resolveAncestorsForDoc,\n ANCESTOR_EXTRA_COLUMNS\n} from './ancestorsResolver';\n\nfunction scrubTSV(s) {\n return String(s).replace(/[\\t\\r\\n]/g, ' ');\n}\n\nfunction formatCellTSV(value) {\n if (value === null || value === undefined) return '';\n if (Array.isArray(value)) return value.map(formatCellTSV).join('|');\n if (typeof value === 'object') return JSON.stringify(value);\n return scrubTSV(value);\n}\n\nfunction formatDocFieldTSV(doc, name, resolverCtx) {\n if (isAncestorField(name)) {\n const ontKey = ANCESTOR_FIELD_MAP[name];\n const ids = Array.isArray(doc[name]) ? doc[name] : [];\n return scrubTSV(formatAncestorsCellTSV(ontKey, ids, doc.taxon_id, resolverCtx));\n }\n return formatCellTSV(doc[name]);\n}\n\nexport function buildTSVHeader(fieldNames, catalog) {\n return fieldNames.map(n => {\n const f = catalog && catalog.fields && catalog.fields[n];\n if (!f) return n;\n return f.tsvHeader || f.label;\n });\n}\n\nexport function buildTSVRow(doc, fieldNames, resolverCtx) {\n return fieldNames.map(n => formatDocFieldTSV(doc, n, resolverCtx));\n}\n\nconst EMPTY_EXPR_ROW = EXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_DIFF_ROW = DIFFEXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_ANC_ROW = ANCESTOR_EXTRA_COLUMNS.map(() => '');\n\nfunction exprRowToCells(er) {\n return [\n scrubTSV(er.experiment),\n scrubTSV(er.experiment_name),\n scrubTSV(er.assay),\n scrubTSV(er.sample),\n scrubTSV(er.value)\n ];\n}\n\nfunction diffRowToCells(dr) {\n return [\n scrubTSV(dr.diff_experiment),\n scrubTSV(dr.diff_experiment_name),\n scrubTSV(dr.group1_factors),\n scrubTSV(dr.group2_factors),\n scrubTSV(dr.l2fc),\n scrubTSV(dr.pval)\n ];\n}\n\nfunction ancRowToCells(ar) {\n return [\n scrubTSV(ar.hierarchy),\n scrubTSV(ar.term_id),\n scrubTSV(ar.term_name),\n scrubTSV(ar.term_type)\n ];\n}\n\nfunction splitPlainAndAncestor(nonExpressionFields) {\n const ancestorFields = [];\n const plainFields = [];\n for (const n of nonExpressionFields) {\n if (isAncestorField(n)) ancestorFields.push(n);\n else plainFields.push(n);\n }\n return { ancestorFields, plainFields };\n}\n\nfunction buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx) {\n const expressionStudies = resolverCtx && resolverCtx.expressionStudies;\n const expressionSamples = resolverCtx && resolverCtx.expressionSamples;\n const cutoffs = resolverCtx && resolverCtx.cutoffs;\n const hasExpr = expressionFields.length > 0;\n const hasDiff = diffExpressionFields.length > 0;\n const hasAnc = ancestorFields.length > 0;\n const rows = [];\n for (const doc of (docs || [])) {\n const baseCells = buildTSVRow(doc, plainFields, resolverCtx);\n const ancRows = hasAnc\n ? resolveAncestorsForDoc(doc, ancestorFields, resolverCtx)\n : [];\n const exprRows = hasExpr\n ? resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const diffRows = hasDiff\n ? resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const ancCells = ancRows.length ? ancRows.map(ancRowToCells) : (hasAnc ? [EMPTY_ANC_ROW] : [null]);\n const exprCells = exprRows.length ? exprRows.map(exprRowToCells) : (hasExpr ? [EMPTY_EXPR_ROW] : [null]);\n const diffCells = diffRows.length ? diffRows.map(diffRowToCells) : (hasDiff ? [EMPTY_DIFF_ROW] : [null]);\n for (const a of ancCells) {\n for (const e of exprCells) {\n for (const d of diffCells) {\n const out = [...baseCells];\n if (a) out.push(...a);\n if (e) out.push(...e);\n if (d) out.push(...d);\n rows.push(out);\n }\n }\n }\n }\n return rows;\n}\n\nexport function toTSV(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n const header = buildTSVHeader(fieldNames, catalog).join('\\t');\n const rows = (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx).join('\\t'));\n return [header, ...rows].join('\\n');\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ].join('\\t');\n\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return [header, ...rows.map(r => r.join('\\t'))].join('\\n');\n}\n\nexport function buildTableData(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n return {\n header: buildTSVHeader(fieldNames, catalog),\n headerKeys: fieldNames.slice(),\n rows: (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx))\n };\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const headerKeys = [\n ...plainFields,\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return { header, headerKeys, rows };\n}\n\nexport function toJSONRows(docs, fieldNames, resolverCtx) {\n return (docs || []).map(d => {\n const row = {};\n for (const n of fieldNames) {\n if (isAncestorField(n)) {\n const ontKey = ANCESTOR_FIELD_MAP[n];\n const ids = Array.isArray(d[n]) ? d[n] : [];\n row[n] = formatAncestorsJSON(ontKey, ids, d.taxon_id, resolverCtx);\n } else {\n row[n] = d[n] !== undefined ? d[n] : null;\n }\n }\n return row;\n });\n}\n\nexport function toJSON(docs, fieldNames, resolverCtx) {\n return JSON.stringify(toJSONRows(docs, fieldNames, resolverCtx), null, 2);\n}\n","const EXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)__expr$/;\nconst DIFFEXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)_g(\\d+)_(pval|logfc|l2fc)_attr_([a-z])$/;\n\nexport const EXPRESSION_EXTRA_COLUMNS = [\n 'experiment',\n 'experiment_name',\n 'assay',\n 'sample',\n 'value'\n];\n\nexport const DIFFEXPRESSION_EXTRA_COLUMNS = [\n 'diff_experiment',\n 'diff_experiment_name',\n 'group1_factors',\n 'group2_factors',\n 'l2fc',\n 'pval'\n];\n\nexport function parseExprFieldName(name) {\n const m = name.match(EXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group: 'g' + m[2],\n solrField: name\n };\n}\n\nexport function parseDiffExprFieldName(name) {\n const m = name.match(DIFFEXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group1: 'g' + m[2],\n group2: 'g' + m[3],\n stat: m[4],\n solrField: name\n };\n}\n\nexport function isExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.expression) return true;\n return parseExprFieldName(name) !== null;\n}\n\nexport function isDiffExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.diffExpression) return true;\n return parseDiffExprFieldName(name) !== null;\n}\n\nexport function partitionFields(fieldNames, catalog) {\n const expressionFields = [];\n const diffExpressionFields = [];\n const nonExpressionFields = [];\n for (const n of fieldNames) {\n if (isDiffExpressionField(n, catalog)) diffExpressionFields.push(n);\n else if (isExpressionField(n, catalog)) expressionFields.push(n);\n else nonExpressionFields.push(n);\n }\n return { expressionFields, diffExpressionFields, nonExpressionFields };\n}\n\nfunction joinLabels(arr) {\n if (!Array.isArray(arr)) return '';\n return arr.map(f => f && f.label).filter(Boolean).join('; ');\n}\n\nexport function buildExperimentIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = e;\n }\n return index;\n}\n\nfunction findAssay(expressionSamples, experimentId, group) {\n if (!expressionSamples) return null;\n const arr = expressionSamples[experimentId];\n if (!arr) return null;\n return arr.find(a => a.group === group) || null;\n}\n\nexport function resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs) {\n const rows = [];\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const minTPM = cutoffs && cutoffs.exprMinTPM;\n const minTPMActive = minTPM !== null && minTPM !== undefined && minTPM !== '' && Number.isFinite(+minTPM);\n for (const fieldName of expressionFields) {\n const parsed = parseExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n if (minTPMActive && (!Number.isFinite(+val) || +val < +minTPM)) continue;\n const exp = experimentIndex[parsed.experimentId];\n const assay = findAssay(expressionSamples, parsed.experimentId, parsed.group);\n rows.push({\n field: fieldName,\n experiment: parsed.experimentId,\n experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n assay: parsed.group,\n sample: assay ? joinLabels(assay.factor) || joinLabels(assay.characteristic) : '',\n value: val\n });\n }\n return rows;\n}\n\nexport function resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs) {\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const byContrast = new Map();\n for (const fieldName of diffExpressionFields) {\n const parsed = parseDiffExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n const key = `${parsed.experimentId}|${parsed.group1}|${parsed.group2}`;\n let entry = byContrast.get(key);\n if (!entry) {\n entry = {\n experimentId: parsed.experimentId,\n group1: parsed.group1,\n group2: parsed.group2,\n pval: '',\n l2fc: ''\n };\n byContrast.set(key, entry);\n }\n if (parsed.stat === 'pval') entry.pval = val;\n else entry.l2fc = val; // l2fc or logfc\n }\n const maxPval = cutoffs && cutoffs.diffMaxPval;\n const maxPvalActive = maxPval !== null && maxPval !== undefined && maxPval !== '' && Number.isFinite(+maxPval);\n const rows = [];\n for (const entry of byContrast.values()) {\n if (maxPvalActive) {\n const pv = +entry.pval;\n if (!Number.isFinite(pv) || pv > +maxPval) continue;\n }\n const exp = experimentIndex[entry.experimentId];\n const assay1 = findAssay(expressionSamples, entry.experimentId, entry.group1);\n const assay2 = findAssay(expressionSamples, entry.experimentId, entry.group2);\n rows.push({\n diff_experiment: entry.experimentId,\n diff_experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n group1_factors: assay1 ? joinLabels(assay1.factor) || joinLabels(assay1.characteristic) : entry.group1,\n group2_factors: assay2 ? joinLabels(assay2.factor) || joinLabels(assay2.characteristic) : entry.group2,\n l2fc: entry.l2fc,\n pval: entry.pval\n });\n }\n return rows;\n}\n","// Maps gene-doc field name -> ontology key used for resolution.\nexport const ANCESTOR_FIELD_MAP = {\n GO__ancestors: 'GO',\n PO__ancestors: 'PO',\n TO__ancestors: 'TO',\n QTL_TO__ancestors: 'TO',\n domains__ancestors: 'domains',\n pathways__ancestors: 'pathways',\n taxonomy__ancestors: 'taxonomy'\n};\n\n// Display label used in the \"hierarchy\" column.\nexport const ANCESTOR_HIERARCHY_LABEL = {\n GO__ancestors: 'Gene Ontology',\n PO__ancestors: 'Plant Ontology',\n TO__ancestors: 'Trait Ontology',\n QTL_TO__ancestors: 'Trait Ontology',\n domains__ancestors: 'InterPro',\n pathways__ancestors: 'Plant Reactome',\n taxonomy__ancestors: 'Taxonomy'\n};\n\nexport const ANCESTOR_EXTRA_COLUMNS = [\n 'hierarchy',\n 'term_id',\n 'term_name',\n 'term_type'\n];\n\nexport function isAncestorField(name) {\n return Object.prototype.hasOwnProperty.call(ANCESTOR_FIELD_MAP, name);\n}\n\nexport function partitionAncestorFields(fieldNames) {\n const ancestor = [];\n const plain = [];\n for (const n of fieldNames) {\n if (isAncestorField(n)) ancestor.push(n);\n else plain.push(n);\n }\n return { ancestor, plain };\n}\n\n// Gather the ids referenced across docs for each ontology/field.\nexport function collectAncestorIds(docs, fieldNames) {\n const byOnt = {};\n for (const name of fieldNames) {\n const ont = ANCESTOR_FIELD_MAP[name];\n if (!ont) continue;\n if (!byOnt[ont]) byOnt[ont] = new Set();\n for (const d of (docs || [])) {\n const v = d && d[name];\n if (!Array.isArray(v)) continue;\n for (const id of v) if (id != null) byOnt[ont].add(+id);\n }\n }\n const out = {};\n for (const k of Object.keys(byOnt)) out[k] = Array.from(byOnt[k]);\n return out;\n}\n\nfunction getOntologyRecord(ontKey, id, ctx) {\n if (!ctx) return null;\n const idNum = +id;\n if (ontKey === 'taxonomy') {\n const t = ctx.taxonomy;\n return (t && t[idNum]) || null;\n }\n if (ontKey === 'pathways') {\n const p = ctx.pathways;\n return (p && p[idNum]) || null;\n }\n const bucket = ctx.ontologies && ctx.ontologies[ontKey];\n return (bucket && bucket[idNum]) || null;\n}\n\n// Returns list of ancestor ids *excluding* self.\nfunction ancestorsOfRecord(ontKey, record, docTaxonId, ctx) {\n if (!record) return null;\n if (ontKey === 'taxonomy') {\n const visited = new Set();\n const stack = Array.isArray(record.is_a) ? record.is_a.slice() : [];\n const taxonomy = (ctx && ctx.taxonomy) || {};\n while (stack.length) {\n const pid = +stack.pop();\n if (visited.has(pid)) continue;\n visited.add(pid);\n const parent = taxonomy[pid];\n if (parent && Array.isArray(parent.is_a)) {\n for (const g of parent.is_a) if (!visited.has(+g)) stack.push(g);\n }\n }\n return Array.from(visited);\n }\n if (ontKey === 'pathways') {\n const taxonKey = docTaxonId != null ? `ancestors_${docTaxonId}` : null;\n let arr = taxonKey && record[taxonKey];\n if (!Array.isArray(arr)) {\n const collected = new Set();\n for (const k of Object.keys(record)) {\n if (k.startsWith('ancestors_') && Array.isArray(record[k])) {\n for (const a of record[k]) collected.add(+a);\n }\n }\n arr = Array.from(collected);\n }\n return arr.filter(x => +x !== +record._id);\n }\n // GO / PO / TO / domains — `ancestors` already includes self\n if (Array.isArray(record.ancestors)) {\n return record.ancestors.filter(x => +x !== +record._id);\n }\n return [];\n}\n\nexport function mostSpecific(ontKey, ids, docTaxonId, ctx) {\n if (!Array.isArray(ids) || ids.length === 0) return [];\n const ancestorSet = new Set();\n let anyResolved = false;\n for (const id of ids) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) continue;\n anyResolved = true;\n const anc = ancestorsOfRecord(ontKey, rec, docTaxonId, ctx);\n if (!anc) continue;\n for (const a of anc) ancestorSet.add(+a);\n }\n if (!anyResolved) return ids.slice();\n return ids.filter(id => !ancestorSet.has(+id));\n}\n\nfunction displayIdAndName(ontKey, id, ctx) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) return { id: String(id), name: '' };\n const displayId = rec.id != null ? String(rec.id) : String(rec._id != null ? rec._id : id);\n let name = rec.name || '';\n if (ontKey === 'taxonomy' && !name) name = rec.display_name || '';\n return { id: displayId, name: String(name) };\n}\n\nexport function formatAncestorsCellTSV(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => {\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n return name ? `${disp} ${name}` : disp;\n }).join(';');\n}\n\nexport function formatAncestorsJSON(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => displayIdAndName(ontKey, id, ctx));\n}\n\nfunction termTypeForRecord(ontKey, rec) {\n if (!rec) return '';\n if (ontKey === 'GO') return rec.namespace || rec.type || '';\n if (ontKey === 'taxonomy') return rec.rank || '';\n return rec.type || rec.namespace || '';\n}\n\n// Expand a doc's selected ancestor fields into rows of\n// { hierarchy, term_id, term_name, term_type }, one per most-specific term.\nexport function resolveAncestorsForDoc(doc, ancestorFields, ctx) {\n const rows = [];\n for (const fieldName of ancestorFields) {\n const ontKey = ANCESTOR_FIELD_MAP[fieldName];\n if (!ontKey) continue;\n const ids = Array.isArray(doc[fieldName]) ? doc[fieldName] : [];\n if (!ids.length) continue;\n const specific = mostSpecific(ontKey, ids, doc.taxon_id, ctx);\n const hierarchy = ANCESTOR_HIERARCHY_LABEL[fieldName] || fieldName;\n for (const id of specific) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n rows.push({\n hierarchy,\n term_id: disp,\n term_name: name,\n term_type: termTypeForRecord(ontKey, rec)\n });\n }\n }\n return rows;\n}\n","const ONT_KEYS = ['GO', 'PO', 'TO', 'domains'];\nconst BATCH_SIZE = 200;\n\nconst inflight = {};\n\nconst ontologies = {\n name: 'ontologies',\n getReducer: () => {\n const initialState = { GO: {}, PO: {}, TO: {}, domains: {} };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'ONTOLOGY_RECORDS_REQUESTED': {\n const { key, ids } = payload;\n const bucket = { ...state[key] };\n for (const id of ids) {\n if (!bucket.hasOwnProperty(id)) bucket[id] = null;\n }\n return { ...state, [key]: bucket };\n }\n case 'ONTOLOGY_RECORDS_RECEIVED': {\n const { key, records } = payload;\n return { ...state, [key]: { ...state[key], ...records } };\n }\n default:\n return state;\n }\n };\n },\n\n doEnsureOntologyRecords: (key, ids) => ({ dispatch, store }) => {\n if (!ONT_KEYS.includes(key)) return Promise.resolve();\n if (!Array.isArray(ids) || ids.length === 0) return Promise.resolve();\n const existing = store.selectOntologies()[key] || {};\n const missing = [];\n for (const id of ids) {\n if (id == null) continue;\n const idNum = +id;\n if (!existing.hasOwnProperty(idNum) && !(inflight[key] && inflight[key].has(idNum))) {\n missing.push(idNum);\n }\n }\n if (missing.length === 0) return Promise.resolve();\n\n if (!inflight[key]) inflight[key] = new Set();\n for (const id of missing) inflight[key].add(id);\n dispatch({ type: 'ONTOLOGY_RECORDS_REQUESTED', payload: { key, ids: missing } });\n\n const api = store.selectGrameneAPI();\n const batches = [];\n for (let i = 0; i < missing.length; i += BATCH_SIZE) {\n batches.push(missing.slice(i, i + BATCH_SIZE));\n }\n\n const fetchBatch = (batch) => {\n const idList = batch.length === 1 ? `${batch[0]},0` : batch.join(',');\n return fetch(`${api}/${key}?idList=${idList}&rows=${batch.length + 1}`)\n .then(r => r.json())\n .then(docs => {\n const records = {};\n for (const d of (docs || [])) {\n if (d && d._id != null) records[d._id] = d;\n }\n for (const id of batch) {\n if (!records.hasOwnProperty(id)) records[id] = { _id: id, missing: true };\n }\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .catch(() => {\n const records = {};\n for (const id of batch) records[id] = { _id: id, missing: true };\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .finally(() => {\n for (const id of batch) inflight[key].delete(id);\n });\n };\n\n return Promise.all(batches.map(fetchBatch));\n },\n\n selectOntologies: state => state.ontologies\n};\n\nexport default ontologies;\n","import { createSelector } from 'redux-bundler';\n\n// State shape:\n// {\n// pivot: { status, signature, data: { [taxon_id]: <gene count> }, error, requestId },\n// activeTaxon: <taxon_id|null>,\n// byTaxon: {\n// [taxon_id]: {\n// selectedFields: [<solr field name>...],\n// fieldsModalOpen: <bool>,\n// fetch: { status, offset, total, signature, requestId, error },\n// rows: [<doc>...]\n// }\n// }\n// }\n// Per-taxon study lists are derived in the view layer from expressionStudies.\n\nconst PAGE_SIZE = 200;\n\nlet pivotPendingId = 0;\nconst fetchPending = {}; // per-taxon request id\nconst attrsPending = {}; // per-taxon request id for available attrs\nconst existencePending = {}; // per-taxon request id for field-existence check\n\nfunction pivotSignature(store) {\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n return `${q}|${taxa.sort().join(',')}`;\n}\n\nfunction fetchSignature(store, taxon) {\n const q = store.selectGrameneFiltersQueryString();\n const ev = store.selectExprViz();\n const sel = (ev.byTaxon[taxon] && ev.byTaxon[taxon].selectedFields) || [];\n return `${q}|${taxon}|${sel.slice().sort().join(',')}`;\n}\n\nconst ALWAYS_FL = ['id', 'name', 'system_name', 'taxon_id'];\n\nconst exprViz = {\n name: 'exprViz',\n\n getReducer: () => {\n const initialState = {\n pivot: { status: 'idle', signature: null, data: {}, error: null, requestId: 0 },\n activeTaxon: null,\n byTaxon: {}\n };\n\n function ensureTaxon(state, taxon) {\n if (state.byTaxon[taxon]) return state.byTaxon[taxon];\n return {\n selectedFields: [],\n fieldsModalOpen: false,\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null },\n rows: [],\n availableAttrs: null,\n attrsSignature: null,\n attrsRequestId: 0,\n fieldExistence: null,\n existenceStatus: 'idle',\n existenceSignature: null,\n existenceRequestId: 0\n };\n }\n\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'EXPRVIZ_PIVOT_STARTED':\n return { ...state, pivot: { status: 'loading', signature: payload.signature, data: state.pivot.data, error: null, requestId: payload.requestId } };\n case 'EXPRVIZ_PIVOT_SUCCEEDED':\n if (payload.requestId !== state.pivot.requestId) return state;\n return { ...state, pivot: { status: 'ready', signature: state.pivot.signature, data: payload.data, error: null, requestId: payload.requestId } };\n case 'EXPRVIZ_PIVOT_FAILED':\n if (payload.requestId !== state.pivot.requestId) return state;\n return { ...state, pivot: { ...state.pivot, status: 'error', error: payload.error } };\n\n case 'EXPRVIZ_ACTIVE_TAXON_SET':\n return { ...state, activeTaxon: payload };\n\n case 'EXPRVIZ_FIELDS_MODAL_TOGGLED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: { ...state.byTaxon, [payload.taxon]: { ...t, fieldsModalOpen: payload.open } }\n };\n }\n case 'EXPRVIZ_FIELDS_SET': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n selectedFields: payload.fields,\n rows: [],\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null }\n }\n }\n };\n }\n case 'EXPRVIZ_FIELDS_REORDERED': {\n const t = state.byTaxon[payload.taxon];\n if (!t) return state;\n // Same set of fields — preserve rows; only the column/axis order changes.\n const setA = new Set(t.selectedFields);\n const setB = new Set(payload.fields);\n if (setA.size !== setB.size || ![...setA].every(f => setB.has(f))) {\n return state;\n }\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, selectedFields: payload.fields }\n }\n };\n }\n\n case 'EXPRVIZ_FETCH_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n fetch: { ...t.fetch, status: 'loading', signature: payload.signature, requestId: payload.requestId, error: null }\n }\n }\n };\n }\n case 'EXPRVIZ_FETCH_BATCH': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.fetch.requestId) return state;\n const rows = t.rows.concat(payload.docs);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n rows,\n fetch: { ...t.fetch, offset: rows.length, total: payload.total, status: rows.length >= payload.total ? 'done' : 'loading' }\n }\n }\n };\n }\n case 'EXPRVIZ_FETCH_FAILED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.fetch.requestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, fetch: { ...t.fetch, status: 'error', error: payload.error } }\n }\n };\n }\n\n case 'EXPRVIZ_ATTRS_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, attrsRequestId: payload.requestId, attrsSignature: payload.signature }\n }\n };\n }\n case 'EXPRVIZ_ATTRS_SUCCEEDED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.attrsRequestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, availableAttrs: payload.attrs }\n }\n };\n }\n\n case 'EXPRVIZ_EXISTENCE_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n existenceStatus: 'loading',\n existenceRequestId: payload.requestId,\n existenceSignature: payload.signature\n }\n }\n };\n }\n case 'EXPRVIZ_EXISTENCE_SUCCEEDED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.existenceRequestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, existenceStatus: 'ready', fieldExistence: payload.counts }\n }\n };\n }\n\n case 'GRAMENE_SEARCH_CLEARED': {\n // Search context changed — invalidate pivot and any loaded rows.\n // Selected fields are kept so the user can re-run the load.\n const newByTaxon = {};\n for (const tid of Object.keys(state.byTaxon)) {\n newByTaxon[tid] = {\n ...state.byTaxon[tid],\n rows: [],\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null },\n availableAttrs: null,\n attrsSignature: null,\n fieldExistence: null,\n existenceStatus: 'idle',\n existenceSignature: null\n };\n }\n return {\n ...state,\n pivot: { status: 'idle', signature: null, data: {}, error: null, requestId: 0 },\n byTaxon: newByTaxon\n };\n }\n\n default:\n return state;\n }\n };\n },\n\n doFetchExprVizPivot: () => ({ dispatch, store }) => {\n const requestId = ++pivotPendingId;\n const signature = pivotSignature(store);\n dispatch({ type: 'EXPRVIZ_PIVOT_STARTED', payload: { requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const facetField = \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\";\n const url = `${api}/search?q=${q}${fq}&fq=expressed_in_gxa_attr_ss:*&rows=0&facet=true&facet.field=${facetField}`;\n\n fetch(url)\n .then(r => r.json())\n .then(json => {\n const arr = (json && json.facet_counts && json.facet_counts.facet_fields && json.facet_counts.facet_fields.taxon_id) || [];\n const data = {};\n for (let i = 0; i < arr.length; i += 2) {\n data[arr[i]] = arr[i + 1];\n }\n if (Object.keys(data).length === 0) {\n console.warn('[exprViz] no taxon_ids found with expression', { url, json });\n }\n dispatch({ type: 'EXPRVIZ_PIVOT_SUCCEEDED', payload: { requestId, data } });\n })\n .catch(err => {\n dispatch({ type: 'EXPRVIZ_PIVOT_FAILED', payload: { requestId, error: String(err) } });\n });\n },\n\n doSetExprVizActiveTaxon: tid => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_ACTIVE_TAXON_SET', payload: tid }),\n\n doToggleExprVizFieldsModal: (taxon, open) => ({ dispatch, store }) => {\n dispatch({ type: 'EXPRVIZ_FIELDS_MODAL_TOGGLED', payload: { taxon, open: !!open } });\n if (open) store.doFetchExprVizAvailableAttrs(taxon);\n },\n\n doFetchExprVizAvailableAttrs: taxon => ({ dispatch, store }) => {\n const q = store.selectGrameneFiltersQueryString();\n const signature = `${q}|${taxon}`;\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (t && t.availableAttrs && t.attrsSignature === signature) return;\n const requestId = (attrsPending[taxon] = (attrsPending[taxon] || 0) + 1);\n dispatch({ type: 'EXPRVIZ_ATTRS_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const facetField = \"{!facet.limit='2000' facet.mincount='1' key='attrs'}expressed_in_gxa_attr_ss\";\n const url = `${api}/search?q=${q}&fq=taxon_id:${taxon}&fq=expressed_in_gxa_attr_ss:*&rows=0&facet=true&facet.field=${facetField}`;\n fetch(url)\n .then(r => r.json())\n .then(json => {\n if (requestId !== attrsPending[taxon]) return;\n const arr = (json && json.facet_counts && json.facet_counts.facet_fields && json.facet_counts.facet_fields.attrs) || [];\n const attrs = [];\n for (let i = 0; i < arr.length; i += 2) attrs.push(arr[i]);\n dispatch({ type: 'EXPRVIZ_ATTRS_SUCCEEDED', payload: { taxon, requestId, attrs } });\n })\n .catch(() => { /* swallow — non-fatal; modal still works without filtering */ });\n },\n\n doSetExprVizFields: (taxon, fields) => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_FIELDS_SET', payload: { taxon, fields } }),\n\n doReorderExprVizFields: (taxon, fields) => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_FIELDS_REORDERED', payload: { taxon, fields } }),\n\n doFetchExprVizData: taxon => ({ dispatch, store }) => {\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (!t || t.selectedFields.length === 0) return;\n const requestId = (fetchPending[taxon] = (fetchPending[taxon] || 0) + 1);\n const signature = fetchSignature(store, taxon);\n dispatch({ type: 'EXPRVIZ_FETCH_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const fl = [...new Set([...ALWAYS_FL, ...t.selectedFields])].join(',');\n\n const fetchPage = (offset) => {\n if (requestId !== fetchPending[taxon]) return; // superseded\n const url = `${api}/search?q=${q}&fq=taxon_id:${taxon}&fl=${fl}&rows=${PAGE_SIZE}&start=${offset}`;\n fetch(url)\n .then(r => r.json())\n .then(json => {\n if (requestId !== fetchPending[taxon]) return;\n const docs = (json.response && json.response.docs) || [];\n const total = (json.response && json.response.numFound) || 0;\n dispatch({ type: 'EXPRVIZ_FETCH_BATCH', payload: { taxon, requestId, docs, total } });\n const next = offset + docs.length;\n if (docs.length > 0 && next < total) {\n fetchPage(next);\n }\n })\n .catch(err => {\n dispatch({ type: 'EXPRVIZ_FETCH_FAILED', payload: { taxon, requestId, error: String(err) } });\n });\n };\n fetchPage(0);\n },\n\n // Per-candidate-field non-null counts under the current q + taxon. Used by\n // FieldsModal to hide fields that have no data in the current result set\n // before the user picks. Uses stats.field (the swagger whitelist drops\n // facet.query) batched across multiple GETs to stay under URL limits.\n doFetchExprVizFieldExistence: (taxon, fields) => ({ dispatch, store }) => {\n if (!fields || fields.length === 0) return;\n const q = store.selectGrameneFiltersQueryString();\n const fieldsKey = fields.slice().sort().join(',');\n const signature = `${q}|${taxon}|${fieldsKey}`;\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (t && t.fieldExistence && t.existenceSignature === signature) return;\n\n const requestId = (existencePending[taxon] = (existencePending[taxon] || 0) + 1);\n dispatch({ type: 'EXPRVIZ_EXISTENCE_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const BATCH_SIZE = 40;\n const batches = [];\n for (let i = 0; i < fields.length; i += BATCH_SIZE) {\n batches.push(fields.slice(i, i + BATCH_SIZE));\n }\n\n Promise.all(batches.map(batch => {\n const params = new URLSearchParams();\n params.append('q', q);\n params.append('fq', `taxon_id:${taxon}`);\n params.append('rows', '0');\n params.append('stats', 'true');\n batch.forEach(f => params.append('stats.field', f));\n return fetch(`${api}/search?${params.toString()}`)\n .then(r => r.json())\n .then(json => {\n const sf = (json && json.stats && json.stats.stats_fields) || {};\n const out = {};\n for (const f of Object.keys(sf)) {\n const s = sf[f];\n out[f] = s && typeof s.count === 'number' ? s.count : 0;\n }\n return out;\n });\n }))\n .then(results => {\n if (requestId !== existencePending[taxon]) return;\n const counts = Object.assign({}, ...results);\n dispatch({ type: 'EXPRVIZ_EXISTENCE_SUCCEEDED', payload: { taxon, requestId, counts } });\n })\n .catch(() => { /* swallow — non-fatal; modal falls back to showing all */ });\n },\n\n reactExprVizPivot: createSelector(\n 'selectExprViz',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViews',\n 'selectGrameneFiltersQueryString',\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n (ev, filtersStatus, views, q, g, m) => {\n if (!ev || filtersStatus === 'init') return;\n const onView = views && views.options && views.options.find(v => v.id === 'exprViz');\n if (!onView || onView.show !== 'on') return;\n const maps = m || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => maps[tid] && !maps[tid].hidden);\n const sig = `${q}|${taxa.sort().join(',')}`;\n if (ev.pivot.status === 'loading') return;\n if (ev.pivot.signature === sig && ev.pivot.status === 'ready') return;\n return { actionCreator: 'doFetchExprVizPivot' };\n }\n ),\n\n selectExprViz: state => state.exprViz,\n selectExprVizPivot: state => state.exprViz.pivot,\n selectExprVizActiveTaxon: state => state.exprViz.activeTaxon,\n selectExprVizByTaxon: state => state.exprViz.byTaxon\n};\n\nexport default exprViz;\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst Gene = ({gene}) => {\n return <div className=\"row\">{gene.id}</div>\n};\n\nconst Genes = (results, rows, doChangeQuantity) => {\n if (results && results.numFound > 0) {\n const moreButton = (results.numFound > rows)\n ? <button onClick={e => doChangeQuantity('Genes',20)}>more</button>\n : '';\n const fewerButton = (rows > 20)\n ? <button onClick={e => doChangeQuantity('Genes',-20)}>fewer</button>\n : '';\n const docsToShow = results.response.docs.slice(0,rows);\n return (\n <div id=\"Genes\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Genes</h4>\n </div>\n {docsToShow.map((doc,idx) => <Gene key={idx} gene={doc}/>)}\n {fewerButton}{moreButton}\n </div>\n );\n }\n};\n\nconst Pathway = ({pathway}) => {\n return <div className=\"row\">{pathway.name}</div>\n};\nconst Pathways = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Pathways\" className=\"container mb40 anchor\">\n <div className=\"fancy-title\">\n <h4>Pathways</h4>\n </div>\n {results.pathways.map((doc,idx) => (<Pathway key={idx} pathway={doc}/>))}\n </div>\n );\n }\n};\n\nconst Domain = ({domain}) => {\n return <div className=\"row\">{domain.id}</div>\n};\nconst Domains = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Domains\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Domains</h4>\n </div>\n {results.domains.map((doc,idx) => (<Domain key={idx} domain={doc}/>))}\n </div>\n );\n }\n};\n\nconst Taxon = ({taxon}) => {\n return <div className=\"row\">{taxon.id}</div>\n};\nconst Species = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Species\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Species</h4>\n </div>\n {results.taxonomy.map((doc,idx) => (<Taxon key={idx} taxon={doc}/>))}\n </div>\n );\n }\n};\n\nconst ResultList = ({grameneGenes, grameneDomains, gramenePathways, grameneTaxonomy, searchUI, searchUpdated, doChangeQuantity}) => {\n if (searchUI.Gramene) {\n return (\n <div id=\"gramene\" className=\"row\">\n <div className=\"fancy-title pt50\">\n <h3>Gramene search results</h3>\n </div>\n {searchUI.Genes && Genes(grameneGenes, searchUI.rows.Genes, doChangeQuantity)}\n {searchUI.Domains && Domains(grameneDomains)}\n {searchUI.Pathways && Pathways(gramenePathways)}\n {searchUI.Species && Species(grameneTaxonomy)}\n </div>\n )\n }\n else {\n return null;\n }\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGrameneDomains',\n 'selectGramenePathways',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doChangeQuantity',\n ResultList\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst getStatus = (cat, results, isChecked, toggle) => {\n const tally = results ? results.numFound : <img src=\"/static/images/dna_spinner.svg\"/>;\n return (\n <li className='category-leaf'>\n <input type=\"checkbox\" checked={isChecked} onChange={e => toggle(cat)}/>\n <a data-scroll href={`#${cat}`} className=\"nav-link active\">{cat}<span style={{float:\"right\"}}>{tally}</span></a>\n </li>\n )\n};\n\nconst ResultSummary = ({grameneGenes, gramenePathways, grameneDomains, grameneTaxonomy, searchUI, searchUpdated, doToggleCategory}) => {\n const status = grameneGenes ?\n grameneGenes.numFound:\n<img src=\"/static/images/dna_spinner.svg\"/>;\n if (searchUI.Gramene) return (\n <li className=\"active category-expanded\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span style={{float:\"right\"}}>{status}</span>\n </a>\n <ul className=\"list-unstyled\">\n {getStatus('Genes', grameneGenes, searchUI.Genes, doToggleCategory)}\n {getStatus('Domains', grameneDomains, searchUI.Domains, doToggleCategory)}\n {getStatus('Pathways', gramenePathways, searchUI.Pathways, doToggleCategory)}\n {getStatus('Species', grameneTaxonomy, searchUI.Species, doToggleCategory)}\n</ul>\n </li>\n);\nelse return (\n <li className=\"active category-collapsed\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span\n style={{float:\"right\"}}>{status}</span>\n </a>\n </li>\n);\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGramenePathways',\n 'selectGrameneDomains',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doToggleCategory',\n ResultSummary\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\nimport ReactGA from 'react-ga4'\nimport { Button, Badge, Alert } from 'react-bootstrap'\nimport './styles.css'\n\nfunction showMatches(text, x) {\n let re = new RegExp(`(${x})`, 'ig');\n let match = text.split(re);\n return <span>\n {match.map((str, idx) => {\n if (idx % 2 === 1) {\n return <span key={idx} style={{fontWeight:'bolder'}}>{str}</span>\n }\n return <span key={idx}>{str}</span>\n })}\n </span>\n}\n\nfunction logAction(sugg) {\n ReactGA.event({\n category: 'Search',\n action: 'SetFilter',\n label: sugg.name\n })\n}\nfunction getLowestCommonAncestorName(tids, taxonomy) {\n let lca;\n tids.forEach(tid => {\n if (!lca) {\n lca = [...taxonomy[tid].ancestors];\n } else {\n let ancestors = new Set(taxonomy[tid].ancestors);\n while (!ancestors.has(lca[0])) {\n lca.shift();\n }\n }\n });\n return taxonomy[lca[0]].short_name;\n}\n\nconst TryPan = (props) => {\n const query = props.query;\n const pan = props.pan;\n return <div className=\"suggestion-panlink\">\n <a target=\"_blank\" href={pan.url + \"?suggestion=\" + query}>\n <img src={pan.svg} title={`Search at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst TryAnotherSite = props => {\n const query = props.query;\n const config = props.config;\n let sites = Object.keys(config.panSite);\n return <div>\n <Alert variant={'info'}>Don't see what you're looking for? Search for <b>{query}</b> on one of our sister sites</Alert>\n {sites.map((p, idx) => <TryPan key={idx} query={query} pan={config.panSite[p]}/>)}\n </div>\n}\n\nconst Suggestions = props => {\n let suggestions = props.grameneSuggestions;\n if (suggestions && suggestions.grouped) {\n if (suggestions.grouped.category.matches === 0) {\n let sugg1 = {\n fq_field: 'text',\n fq_value: props.suggestionsQuery,\n name: `Genes containing \"${props.suggestionsQuery}\"`,\n category: 'Gene',\n };\n let sugg2 = {\n fq_field: 'text',\n fq_value: `${props.suggestionsQuery}*`,\n name: `Genes matching \"${props.suggestionsQuery}*\"`,\n category: 'Gene',\n };\n return (\n <div style={{margin: '10px', maxWidth: '820px'}}>\n <Alert variant={'info'}><em>No suggestions found.</em> You may still attempt a full text search, though it is unlikely to find any genes for you.</Alert>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg1); props.doAcceptSuggestion(sugg1); props.doAcceptGrameneSuggestion(sugg1)}}>\n {`All genes that contain the word \"${props.suggestionsQuery}\"`}\n </Button>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg2); props.doAcceptSuggestion(sugg2); props.doAcceptGrameneSuggestion(sugg2)}}>\n {`All genes that contain a word that starts with \"${props.suggestionsQuery}\"`}\n </Button>\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n else {\n return (\n <div style={{margin: '10px'}}>\n {suggestions.grouped.category.groups.map((g,idx) => {\n return <div key={idx} id='gramene-suggestion'>\n <h4 className=\"mt10\">{g.groupValue}</h4>\n {g.doclist.docs.map((sugg,jdx) =>\n <Button id={`${idx}-${jdx}`}\n key={jdx}\n disabled={sugg.num_genes === 0}\n size='sm'\n variant=\"outline-secondary\"\n onClick={() => {logAction(sugg); props.doAcceptSuggestion(sugg); props.doAcceptGrameneSuggestion(sugg)}}>\n {showMatches(sugg.display_name,props.suggestionsQuery)}{' '}\n <Badge bg=\"secondary\">{sugg.num_genes}</Badge>\n <i> {getLowestCommonAncestorName(sugg.taxon_id, props.grameneTaxonomy)}</i>\n </Button>\n )}\n </div>\n })}\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'selectGrameneTaxonomy',\n 'selectConfiguration',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React, { useState, useRef, useEffect } from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { Navbar, Nav, NavDropdown, Container, OverlayTrigger, Popover} from 'react-bootstrap'\nimport Switch from 'react-switch'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash,BsChevronDown,BsChevronRight } from 'react-icons/bs'\nimport GeneList from './results/GeneList'\nimport TaxDist from './results/TaxDist'\nimport HelpDemo from './results/HelpDemo'\nimport GeneAttribs from './results/GeneAttribs'\nimport TaxonomyModal from './TaxonomyModal'\nimport Expression from './results/Expression'\nimport UserGeneLists from './results/UserGeneLists'\nimport ExporterView from './exporter/ExporterView'\nimport ExprVizView from './exprViz/ExprVizView'\nimport Auth from './Auth'\nimport ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst CollapsibleSection = ({ title, defaultOpen = true, extra, children }) => {\n const [open, setOpen] = useState(defaultOpen);\n return (\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>{title}</b>\n <span className=\"sidebar-section-actions\">\n {extra}\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">{children}</div>}\n </div>\n );\n};\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs,\n expression: Expression,\n exprViz: ExprVizView,\n userLists: UserGeneLists,\n export: ExporterView\n};\n\nconst StatusCmp = props => {\n let content = props.grameneFiltersStatus;\n // if (props.grameneFiltersStatus === 'init') {\n // props.doClearGrameneFilters();\n // }\n if (props.grameneFiltersStatus === 'ready') {\n let tally = <span>Ready</span>;\n if (props.grameneSearch) {\n let genes = props.grameneSearch.response.numFound;\n let genomes = props.grameneSearch.facet_counts.facet_fields.taxon_id.length / 2;\n tally = <span><b>{genes}</b> genes in <b>{genomes}</b> genomes</span>;\n }\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Genomes Filter</Popover.Header>\n <Popover.Body>Searching {props.activeGenomeCount} genomes</Popover.Body>\n </Popover>\n );\n\n content = <span>\n {tally}\n <OverlayTrigger placement=\"auto\" overlay={popover}>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doShowGrameneGenomes}><BsGearFill/></span>\n </OverlayTrigger>\n <TaxonomyModal/>\n </span>;\n }\n return <div style={{padding:'5px', color:'cornsilk', fontSize:'small'}}>{content}</div>\n};\n\nconst Status = connect(\n 'selectGrameneSearch',\n 'selectGrameneFiltersStatus',\n 'selectActiveGenomeCount',\n 'doShowGrameneGenomes',\n 'doClearGrameneFilters',\n StatusCmp\n);\n\nconst handleClick = (e, moveCopyMode, showMarked, node, actions) => {\n if (!e) e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n\n if (showMarked && moveCopyMode) {\n if (node.marked) {\n actions.selectTarget(node);\n }\n else {\n actions.unmarkTargets()\n }\n }\n console.log(node, showMarked);\n};\nfunction logAction(action) {\n ReactGA.event({\n category: 'Search',\n action: action\n })\n}\nconst Filter = ({node,moveCopyMode,showMarked,actions}) => {\n let classes = 'gramene-filter gramene-filter';\n if (node.operation) {\n classes = `${classes}-${node.operation}`\n }\n if (node.negate) {\n classes = `${classes} gramene-filter-NOT`\n }\n if (showMarked && node.marked) {\n classes = `${classes} gramene-filter-marked`\n }\n let content = '';\n let menu = '';\n let children = [];\n\n if (node.showMenu) {\n let key=1;\n let menuItems = [];\n if (node.hasOwnProperty('operation')) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Change to ${node.operation}`); actions.changeOperation(node)}}>convert to <i>{node.operation === 'AND' ? 'OR' : 'AND'}</i></li>);\n }\n if (node.leftIdx > 0) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Delete filter`); actions.deleteNode(node)}}>delete</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Move filter`); actions.markTargets(node,'move')}}>move{node.isSource && ' select destination'}</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Copy filter`); actions.markTargets(node,'copy')}}>copy{node.isSource && ' select destination'}</li>)\n }\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Negate filter`); actions.negate(node)}}>negate</li>);\n menu = <div className='gramene-filter-menu'><ul>{menuItems}</ul></div>;\n }\n let warning;\n if (node.warning) {\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Warning</Popover.Header>\n <Popover.Body>{node.warning}</Popover.Body>\n </Popover>\n );\n warning = (\n <OverlayTrigger placement=\"auto\" overlay={popover}><span style={{float:'right', color:'red', cursor:'pointer'}}><IoAlertCircle/></span></OverlayTrigger>\n )\n }\n if (node.operation) {\n children = node.children.map((child,idx) => <Filter key={idx} moveCopyMode={moveCopyMode} node={child} showMarked={showMarked} actions={actions}/>);\n content = (\n <div>\n <span className='gramene-filter-operation'\n onClick={()=>actions.toggleMenu(node)}>{node.operation}</span>\n {warning}\n </div>\n );\n }\n else {\n content = <span className='gramene-filter-text'\n onClick={()=>actions.toggleMenu(node)}>{node.category} | {node.name}</span>;\n }\n return (\n <div key={node.leftIdx} className={classes} onClick={(e)=>handleClick(e,moveCopyMode, showMarked,node,actions)}>\n {content}{menu}{children}\n </div>\n )\n};\n\nconst FiltersCmp = props => {\n const actions = {\n negate: props.doNegateGrameneFilter,\n deleteNode: props.doDeleteGrameneFilter,\n changeOperation: props.doChangeGrameneFilterOperation,\n selectTarget: props.doMoveOrCopyGrameneFilter,\n markTargets: props.doMarkGrameneFilterTargets,\n unmarkTargets: props.doUnmarkGrameneFilterTargets,\n toggleMenu: props.doToggleGrameneFilterMenu\n };\n const containerClass = props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': 'gramene-filter-container';\n if (props.grameneFilters.rightIdx > 1) {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\"\n extra={<span style={{cursor:'pointer', marginRight:'0.5rem'}} onClick={(e)=>{e.stopPropagation(); props.doClearGrameneFilters()}}><BsTrash/></span>}>\n <Filter node={props.grameneFilters}\n moveCopyMode={props.grameneFilters.moveCopyMode}\n showMarked={props.grameneFilters.showMarked}\n actions={actions}/>\n </CollapsibleSection>\n </div>\n }\n else {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\">\n <div className='gramene-filter gramene-filter-AND'>No filters defined</div>\n </CollapsibleSection>\n </div>\n }\n};\n\nconst Filters = connect(\n 'selectGrameneFilters',\n 'selectConfiguration',\n 'doNegateGrameneFilter',\n 'doDeleteGrameneFilter',\n 'doChangeGrameneFilterOperation',\n 'doMoveOrCopyGrameneFilter',\n 'doMarkGrameneFilterTargets',\n 'doUnmarkGrameneFilterTargets',\n 'doToggleGrameneFilterMenu',\n 'doClearGrameneFilters',\n FiltersCmp\n);\n\nconst ResultsCmp = props => {\n let activeViews = props.grameneViews.options;\n return props.grameneFilters.rightIdx > 0 ? (\n <div>\n {activeViews.map((v,idx) => {\n let p = Object.assign({}, props);\n const divRef = useRef(null);\n useEffect(() => {\n if (v.shouldScroll) {\n const navBarHeight=0;\n const scrollPosition = divRef.current.offsetTop - navBarHeight;\n window.scrollTo({\n top: scrollPosition,\n behavior: 'smooth'\n })\n props.doCancelShouldScroll();\n }\n }, [v.shouldScroll]);\n return (\n <div key={idx} ref={divRef}>\n {v.show === 'on' && <div style={{borderTopWidth:'medium'}} className='gramene-view-header'>{v.name}</div>}\n {v.show === 'on' && React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doCancelShouldScroll',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <CollapsibleSection title=\"Views\">\n {props.grameneViews.options.filter(view => view.show !== 'disabled').map((view,idx) => (\n <div style={{textWrap:'nowrap'}} key={idx}>\n <Switch onChange={()=>props.doToggleGrameneView(view.id)} checked={view.show === 'on'}\n height={18}\n width={30}\n handleDiameter={16}\n checkedIcon={false}\n uncheckedIcon={false}\n />\n <span className={`gramene-view-span-${view.show}`} onClick={(e) => {\n props.dontToggleGrameneView(view.id)\n }}>{view.name}</span>\n </div>\n ))}\n </CollapsibleSection>\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n 'dontToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views, Auth};\n","import React from 'react'\nimport ReactGA from 'react-ga4'\nimport { connect } from 'redux-bundler-react'\nimport './genes.css'\nimport Expression from './details/Expression'\nimport Homology from './details/Homology'\nimport Location from './details/Location'\nimport Pathways from \"./details/Pathways\"\nimport VEP from \"./details/VEP\"\nimport Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\nimport Sequences from \"./details/Sequences\"\nimport {suggestionToFilters} from \"../utils\";\nimport {GrFormPrevious, GrFormNextLink, GrFormNext, GrHpe} from 'react-icons/gr'\nimport { Badge, OverlayTrigger, Tooltip } from 'react-bootstrap'\n\nlet external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n\nlet inventory = {\n sequences: Sequences,\n location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\n VEP: VEP,\n xrefs: Xrefs,\n pubs: Publications\n};\n\nfunction renderTairSummary(searchResult) {\n const summary = searchResult.summary;\n if(summary && summary !== \"NULL\" && searchResult.system_name === \"arabidopsis_thaliana\") {\n return (\n <div className=\"gene-summary-tair\">\n {trimSummary(summary)}\n </div>\n )\n }\n}\n\nfunction trimSummary(summary) {\n if(summary.length > 160) {\n const start = summary.substr(0, 150);\n const rest = summary.substr(150);\n return <p>{start}<span className=\"ellipsis\">…</span><span className=\"rest\">{rest}</span></p>\n }\n else {\n return <p>{summary}</p>\n }\n}\nconst PanLink = (props) => {\n const gene = props.gene;\n const pan = props.pan;\n return <div className=\"gene-panlink\">\n <a target=\"_blank\" href={pan.url + \"?idList=\" + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst CurationComponent1 = ({ curation }) => {\n return (\n <div className=\"gene-curation\">\n <span>Curated gene structure</span>\n {curation.okay > 0 && <span className=\"status\">✔️ {curation.okay}</span>}\n {curation.flagged > -10 && <span className=\"status\">⚠️ {curation.flagged}</span>}\n </div>\n );\n};\nconst CurationComponent = ({ curation, gene }) => {\n const total = curation.okay + curation.flagged;\n const okayRatio = (curation.okay / total);\n const flaggedRatio = (curation.flagged / total);\n const tooltip = (\n <Tooltip id=\"tooltip\">\n <strong>Gene structure</strong><br/>\n Okay: {curation.okay} \n Flagged: {curation.flagged}\n </Tooltip>\n );\n return (\n <OverlayTrigger placement=\"left\" overlay={tooltip}>\n <a className=\"gene-curation\" target=\"_blank\" href={`https://devdata.gramene.org/curation/curations?idList=${gene.id}`}>\n <span className=\"okay\" style={{opacity: okayRatio}}>☑</span>\n <span className=\"flagged\" style={{opacity: flaggedRatio}}>⚠</span>\n </a>\n </OverlayTrigger>\n )\n};\n\nconst ClosestOrthologCmp = (props) => {\n let id, taxon_id, name, desc, species, className, identity;\n const gene = props.gene;\n\n if (gene.closest_rep_id) {\n name = gene.closest_rep_name || gene.closest_rep_id;\n desc = gene.closest_rep_description;\n species = gene.closest_rep_species_name;\n id = gene.closest_rep_id;\n taxon_id = gene.closest_rep_taxon_id;\n className = \"closest-ortholog\";\n identity = gene.closest_rep_identity || 0;\n }\n else if (gene.model_rep_id) {\n name = gene.model_rep_name || gene.model_rep_id;\n desc = gene.model_rep_description;\n species = gene.model_rep_species_name;\n id = gene.model_rep_id;\n taxon_id = gene.model_rep_taxon_id;\n className = \"model-ortholog\";\n identity = gene.model_rep_identity || 0;\n }\n var isZm = new RegExp(/^Zm00001e/);\n if (isZm.test(desc)) {\n desc='';\n }\n\n return (\n <div className={className} onClick={() => {\n props.doEnsureGrameneGenome(taxon_id);\n props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene',\n fq_field: 'id',\n fq_value: id,\n name: name\n }))\n }}>\n <div className=\"gene-species\">{species}</div>\n {identity > 0 && <div className=\"rep-identity\">{Math.round(identity*100)}</div>}\n <h3 className=\"gene-id\">{name}</h3>\n <p>{desc}</p>\n </div>\n );\n};\n\nconst ClosestOrtholog = connect(\n 'doReplaceGrameneFilters','doEnsureGrameneGenome',\n ClosestOrthologCmp\n);\n\nfunction renderClosestOrtholog(gene) {\n\n if (shouldShowClosestOrtholog(gene)) {\n\n // we used to not add the closest ortholog to the DOM if the homology detail was visible.\n // however, that could cause the height of the result to change. Instead we set visibility:hidden\n // so that the renderer takes into account the height of the ortholog even if not shown.\n return (\n <ClosestOrtholog gene={gene}/>\n );\n }\n}\n\n// show closest ortholog prominently if we have data to show:-\n// a. either there's a closest ortholog (determined by traversing the gene tree until an id or description looks\n// curated) b. or there's a model ortholog (traverse tree to find an ortholog in arabidopsis)\nfunction shouldShowClosestOrtholog(searchResult) {\n return (\n searchResult.closest_rep_id || (\n searchResult.model_rep_id &&\n searchResult.model_rep_id !== searchResult.id\n )\n );\n}\n\nconst allDetails = [\n {\n id: 'VEP',\n label: 'Germplasm',\n popup: 'Germplasm with protein truncating variants (PTVs)',\n available: false\n },\n {\n id: 'sequences',\n label: 'Sequences',\n popup: 'Gene/cDNA/protein fasta',\n available: true\n },\n {\n id: 'location',\n label: 'Location',\n popup: 'Genome Browser',\n available: false\n },\n {\n id: 'expression',\n label: 'Expression',\n popup: 'Gene Expression Atlas',\n available: false\n },\n {\n id: 'homology',\n label: 'Homology',\n popup: 'Gene Family Tree',\n available: false\n },\n {\n id: 'pathways',\n label: 'Pathways',\n popup: 'Plant Reactome Pathways',\n available: false\n },\n {\n id: 'pubs',\n label: 'Papers',\n popup: 'Curated Publications',\n available: false\n },\n {\n id: 'xrefs',\n label: 'Xrefs',\n popup: 'Database Cross-references',\n available: false\n }\n];\n\n\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: allDetails.map(o => ({...o})).filter(d => props.config.details[d.id]),\n expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => {\n hasData[c] = true;\n if (c === 'PanOryza') {\n hasData.xrefs = true;\n }\n });\n this.state.details.forEach(d => d.available |= hasData.hasOwnProperty(d.id));\n }\n getDetailStatus(d) {\n if (this.state.expandedDetail === d.id) return 'expanded';\n if (d.available) return 'closed'\n return d.id === \"pubs\" ? 'empty' : 'disabled';\n }\n setExpanded(d) {\n if (d.available || d.id === \"pubs\") {\n if (this.state.expandedDetail === d.id) {\n this.setState({expandedDetail: null})\n }\n else {\n const geneId = this.props.searchResult.id;\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(geneId))) {\n this.props.requestGene(geneId)\n }\n ReactGA.event({\n category: 'Search',\n action: 'Details',\n label: d.label\n });\n this.setState({expandedDetail: d.id})\n }\n }\n }\n ensureGene(id) {\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(id))) {\n this.props.requestGene(id);\n return false;\n }\n return this.props.geneDocs[id].hasOwnProperty('taxon_id')\n }\n renderMetadata() {\n let gene = this.props.searchResult;\n if (gene.model_rep_taxon_id) {\n gene.model_rep_species_name = this.props.taxLut[gene.model_rep_taxon_id].short_name;\n }\n if (gene.closest_rep_taxon_id) {\n gene.closest_rep_species_name = this.props.taxLut[gene.closest_rep_taxon_id].short_name;\n }\n return renderTairSummary(gene) || renderClosestOrtholog(gene);\n }\n render() {\n const panSite = this.props.config.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\n const curation = this.props.curation;\n // let orthologs='';\n // if (this.props.orthologs && this.props.orthologs.hasOwnProperty(searchResult.id)) {\n // orthologs = this.props.orthologs[searchResult.id].join(', ');\n // }\n const numWordsInDescription = searchResult.description.split(' ').length;\n return (\n <div className=\"result-gene\">\n <div className=\"result-gene-summary\">\n <div className=\"result-gene-title-body\">\n {panSite.hasOwnProperty(searchResult.system_name) && <PanLink pan={panSite[searchResult.system_name]} gene={searchResult}/>}\n {curation && <CurationComponent curation={curation} gene={searchResult}/> }\n <div className=\"gene-title\">\n <div className=\"gene-species\">{taxName}</div>\n <h3 className=\"gene-name\">{searchResult.name}\n {searchResult.id !== searchResult.name && <small className=\"gene-id\"> {searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {searchResult.description !== \"unknown\" && (numWordsInDescription > 1 || searchResult.can_show.pubs) && <p className=\"gene-description\">{searchResult.description}</p>}\n </div>\n {this.renderMetadata()}\n </div>\n <div className=\"gene-detail-tabs\">\n {this.state.details.map((d,idx) => (\n <OverlayTrigger\n key={idx}\n placement={'bottom'}\n overlay={\n <Tooltip id={`tooltip`}>{d.popup}</Tooltip>\n }\n >\n <div key={idx}\n className={`col-md-1 text-center gene-detail-tab-${this.getDetailStatus(d)}`}\n onClick={()=>this.setExpanded(d)}\n >{d.label}</div>\n </OverlayTrigger>\n ))}\n </div>\n {this.state.expandedDetail && this.ensureGene(searchResult.id) && <div className=\"visible-detail\">{React.createElement(inventory[this.state.expandedDetail], this.props)}</div>}\n </div>\n )\n }\n}\n\nconst GeneList = props => {\n if (props.grameneSearch && props.grameneSearch.response && props.grameneTaxonomy) {\n let prev,page,next;\n const numFound = props.grameneSearch.response.numFound;\n if (numFound > props.grameneSearchRows) {\n const pageNum = props.grameneSearchOffset/props.grameneSearchRows;\n page = <span style={{padding:'10px'}}>page <b>{pageNum + 1}</b> of <b>{Math.ceil(numFound/props.grameneSearchRows)}</b></span>;\n prev = <GrHpe/>;\n if (pageNum > 0) {\n prev = <Badge onClick={()=>props.doRequestResultsPage(pageNum - 1)}><GrFormPrevious/></Badge>\n }\n next = <GrHpe/>;\n if (numFound > props.grameneSearchOffset + props.grameneSearchRows) {\n next = <Badge onClick={()=>props.doRequestResultsPage(pageNum + 1)}><GrFormNext/></Badge>\n }\n }\n return <div>\n <div>{prev}{page}{next}</div>\n {props.grameneSearch.response.docs.map((g,idx) => (\n <Gene key={idx}\n searchResult={g}\n config={props.configuration}\n taxName={props.grameneTaxonomy[g.taxon_id].name}\n geneDocs={props.grameneGenes}\n requestGene={props.doRequestGrameneGene}\n requestOrthologs={props.doRequestOrthologs}\n orthologs={props.grameneOrthologs}\n taxLut={props.grameneTaxonomy}\n curation={props.curatedGenes ? props.curatedGenes[g.id] : null}\n expandedDetail={props.grameneSearch.response.numFound === 1 && g.can_show.homology ? 'homology' : null}\n />\n ))}\n {prev}{page}{next}\n </div>\n }\n return null;\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneGenes',\n 'selectGrameneOrthologs',\n 'selectGrameneSearchOffset',\n 'selectGrameneSearchRows',\n 'selectCuratedGenes',\n 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React, { useRef, useEffect, useState } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Row, Col} from 'react-bootstrap';\nimport BAR, {haveBAR} from \"gramene-efp-browser\";\n\nfunction DynamicIframe(props) {\n // Create a ref for the iframe element\n const iframeRef = useRef(null);\n const [iframeHeight, setIframeHeight] = useState(500); // Default height\n\n useEffect(() => {\n const handleMessage = (event) => {\n if (event.data.type === 'heightChange') {\n setIframeHeight(event.data.height + 44);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n src={props.url}\n title=\"Dynamic Iframe\"\n style={{ width: '100%', height: `${iframeHeight}px`, border: 'none' }}\n />\n );\n}\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [atlasExperiment, setAtlasExperiment] = useState(null);\n const [atlasExperimentList, setAtlasExperimentList] = useState([]);\n const [atlasFacets, setAtlasFacets] = useState(null);\n const [isLocal, setIsLocal] = useState(false);\n const [activeTab, setActiveTab] = useState('gene');\n\n const handleLocalAPIChange = (event) => {\n setIsLocal(event.target.checked);\n };\n useEffect(() => {\n const tid = Math.floor(gene.taxon_id / 1000);\n if (props.expressionStudies[tid]) {\n let facets={Differential: {}, Baseline: {}};\n let eList = props.expressionStudies[tid].sort((a,b) => {\n const a_name = `${a.type}:${a.description || a._id}`;\n const b_name = `${b.type}:${b.description || b._id}`;\n return a_name < b_name ? -1 : 1;\n });\n if (props.searchResult.hasOwnProperty('expressed_in_gxa_attr_ss')) {\n const in_gxa = new Set(props.searchResult.expressed_in_gxa_attr_ss);\n eList = eList.filter(e => in_gxa.has(e._id))\n }\n eList.forEach(e => {e.factors.forEach(factor => facets[e.type][factor] = 1);});\n setAtlasExperimentList(eList);\n setAtlasFacets(facets);\n let refExp = eList.filter(e => e.isRef);\n if (refExp.length === 1) {\n setAtlasExperiment(refExp[0]._id);\n } else {\n // no reference experiment - choose first\n setAtlasExperiment(eList[0]._id);\n }\n }\n }, [props.expressionStudies]);\n\n let paralogs_url;\n let gene_url = `https://dev.gramene.org/static/atlasWidget.html?genes=${gene.atlas_id || gene._id}&localAPI=${isLocal}`;\n let paralogs = [];\n if (props.grameneParalogs && props.grameneParalogs[gene._id]) {\n paralogs = props.grameneParalogs[gene._id];\n } else if (gene.homology) {\n props.doRequestParalogs(gene._id, gene.homology.supertree, gene.taxon_id);\n }\n // if (gene.homology && gene.homology.homologous_genes && gene.homology.homologous_genes.within_species_paralog) {\n // paralogs = gene.homology.homologous_genes.within_species_paralog;\n // }\n if (paralogs.length > 0 && atlasExperiment) {\n paralogs_url= `https://dev.gramene.org/static/atlasWidget.html?genes=${paralogs.join(' ')}&experiment=${atlasExperiment}&localAPI=${isLocal}`;\n }\n return <Tabs activeKey={activeTab} onSelect={(k) => setActiveTab(k)}>\n {paralogs_url &&\n <Tab tabClassName=\"gxa\" eventKey=\"paralogs\" title={`Paralogs`} key=\"gxaparalogs\">\n <Form.Select aria-label='experiment selector'\n placeholder='Select experiment'\n onChange={(e) => setAtlasExperiment(e.target.value)}>\n { atlasExperimentList.map((e,idx) =>\n <option key={idx} value={e._id}>{e.type}: {e.description || e._id}</option>\n )}\n </Form.Select>\n {activeTab === \"paralogs\" && <DynamicIframe url={paralogs_url}/> }\n </Tab>\n }\n <Tab tabClassName=\"gxa\" eventKey=\"gene\" title=\"All Studies\" key=\"gxa\">\n {/*<Form.Check*/}\n {/* type=\"switch\"*/}\n {/* id=\"localAPI\"*/}\n {/* label=\"Local API\"*/}\n {/* checked={isLocal}*/}\n {/* onChange={handleLocalAPIChange}*/}\n {/*/>*/}\n {activeTab === \"gene\" && <DynamicIframe url={gene_url}/> }\n </Tab>\n {haveBAR(gene) &&\n <Tab tabClassName=\"eFP\" eventKey=\"eFP\" title=\"eFP Browser\" key=\"bar\"><BAR gene={gene}/></Tab>\n }\n </Tabs>\n};\n\nexport default connect(\n 'selectGrameneParalogs',\n 'selectExpressionStudies',\n 'doRequestParalogs',\n //'doRequestParalogExpression',\n Detail\n);\n\n","import React from 'react'\nimport _ from 'lodash';\nimport {connect} from \"redux-bundler-react\";\nimport TreeVis from \"gramene-genetree-vis\";\nimport treesClient from \"gramene-trees-client\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport {suggestionToFilters} from \"../../utils\";\nimport {Spinner, Alert} from \"react-bootstrap\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Homology extends React.Component {\n constructor(props) {\n super(props);\n if (!props.geneDocs.hasOwnProperty(props.searchResult.id)) {\n props.requestGene(props.searchResult.id)\n }\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n }\n renderTreeVis() {\n return (\n <div className=\"gene-genetree\">\n <TreeVis genetree={this.tree}\n initialGeneOfInterest={this.gene}\n genomesOfInterest={this.props.grameneGenomes.active}\n taxonomy={this.taxonomy}\n allowGeneSelection={true}\n pivotTree={true}\n enableCuration={false}\n enablePhyloview={true}\n numberOfNeighbors={10}\n ensemblUrl={this.props.configuration.ensemblURL}/>\n </div>\n )\n }\n filterAllHomologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'gene_tree',\n fq_value: this.tree._id,\n name: `Homologs of ${this.gene.name}`\n }))\n }\n filterOrthologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__all_orthologs',\n fq_value: this.gene._id,\n name: `Orthologs of ${this.gene.name}`\n }))\n }\n filterParalogs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__within_species_paralog',\n fq_value: this.gene._id,\n name: `Paralogs of ${this.gene.name}`\n }))\n }\n searchSupertree() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'supertree_attr_s',\n fq_value: this.gene.homology.supertree,\n name: this.gene.homology.supertree\n }))\n }\n orthologList() {\n return this.orthoParaList('ortholog');\n }\n\n paralogList() {\n return this.orthoParaList('within_species_paralog');\n }\n\n orthoParaList(type) {\n var homology, thisGeneId;\n homology = _.get(this.gene, 'homology.homologous_genes');\n thisGeneId = this.gene._id;\n\n if (homology) {\n var homologs = _(homology)\n .pickBy(function filterCategories(thing, name) {\n return name.indexOf(type) === 0;\n })\n .values()\n .flatten()\n .uniq()\n .value();\n\n if (!_.isEmpty(homologs)) {\n if (!homologs.includes(thisGeneId)) {\n console.log(\"add to homologs list\",thisGeneId);\n homologs.push(thisGeneId);\n }\n return homologs; // only return something if we have something. We're testing for truthiness later.\n }\n }\n }\n explorations() {\n let x = [{\n name: 'Homologs',\n category: 'Gene Tree',\n count: this.tree.geneCount,\n handleClick: this.filterAllHomologs.bind(this)\n }];\n if (this.orthologs) {\n x.push({\n name: 'Orthologs',\n category: 'Gene Tree',\n count: this.orthologs.length,\n handleClick: this.filterOrthologs.bind(this)\n });\n }\n if (this.paralogs) {\n x.push({\n name: 'Paralogs',\n category: 'Gene Tree',\n count: this.paralogs.length,\n handleClick: this.filterParalogs.bind(this)\n });\n }\n if (this.gene.homology.supertree) {\n x.push({\n name: `Supertree`,\n category: `Gene Tree`,\n count: this.gene.homology.supertree,\n handleClick: this.searchSupertree.bind(this)\n })\n }\n return x;\n }\n links() {\n let links = [\n {\n name: 'Ensembl Gene Tree view',\n url: `${this.props.configuration.ensemblURL}/${this.gene.system_name}/Gene/Compara_Tree?g=${this.gene._id}`\n }\n ];\n if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n links.push({\n name: 'Curate',\n url: this.props.curation.url + this.gene._id\n })\n }\n return links;\n }\n render() {\n const id = this.props.searchResult.id;\n if (!this.props.geneDocs.hasOwnProperty(id)) {\n return <Spinner/>\n }\n this.gene = this.props.geneDocs[id];\n const treeId = this.gene.homology.gene_tree.id;\n if (! this.props.grameneTrees.hasOwnProperty(treeId)) {\n this.props.doRequestGrameneTree(treeId);\n }\n else {\n const tree = this.props.grameneTrees[treeId];\n if (tree.hasOwnProperty('taxon_id')) {\n this.tree = treesClient.genetree.tree([this.props.grameneTrees[treeId]]);\n this.orthologs = this.orthologList();\n this.paralogs = this.paralogList();\n }\n }\n let flagged=0;\n // if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n // flagged = this.props.curatedGenes && this.props.curatedGenes[id] ? this.props.curatedGenes[id].flagged : 0;\n // }\n return (\n <Detail>\n <Title key=\"title\">Compara Gene Tree</Title>\n <Description key=\"description\">\n This phylogram shows the relationships between this gene and others similar to it, as determined by Ensembl Compara.\n {flagged > 1 && <Alert variant={'warning'}>This gene was flagged for potential gene structural annotation issues by {flagged} curators</Alert>}\n </Description>\n {this.tree && <Content key=\"content\">{this.renderTreeVis()}</Content>}\n {this.tree && <Explore key=\"explore\" explorations={this.explorations()}/>}\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n )\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGrameneTrees',\n 'selectGrameneGenomes',\n 'selectConfiguration',\n 'selectCuration',\n 'selectCuratedGenes',\n 'doRequestGrameneTree',\n 'doAcceptGrameneSuggestion',\n 'doReplaceGrameneFilters',\n Homology\n);\n\n","import React from 'react';\nimport keyBy from 'lodash/keyBy';\nimport _ from \"lodash\";\nimport ReactGA from \"react-ga4\";\nimport { BiLinkExternal } from \"react-icons/bi\";\nimport { Button, Badge } from \"react-bootstrap\";\n\nexport const Detail = props => {\n let subComponents = keyBy(props.children, 'key');\n return (\n <div className=\"detail\">\n <div className=\"intro\">\n {subComponents.title}\n {subComponents.description}\n </div>\n <div className=\"content-wrapper\">\n {subComponents.content}\n </div>\n <div className=\"actions\">\n <div className=\"action-wrapper\" xs={12} sm={5}>\n {subComponents.explore}\n </div>\n <div className=\"action-wrapper\" xs={12} sm={7}>\n {subComponents.links}\n </div>\n </div>\n </div>\n )\n};\n\nexport const Title = props => <h4>{props.children}</h4>;\nexport const Description = props => <p className=\"description\">{props.children}</p>;\nexport const Content = props => <div className=\"content\">{props.children}</div>;\n\nconst QueryTerm = props => {\n let category, name, badge;\n name = props.name;\n if (props.category) {\n category = props.category + ' | ';\n }\n if (_.isNumber(props.count)) {\n badge = <Badge style={{marginLeft: \"0.5rem\"}} bg='secondary'>{props.count}</Badge>\n }\n return (\n <Button variant='outline-dark' onClick={props.handleClick}>\n {category}{name}{badge}\n </Button>\n )\n};\n\nfunction renderExplorations(explorations) {\n return explorations.map(\n (exploration, idx) =>\n <QueryTerm key={idx} {...exploration} />\n );\n}\nexport const Explore = props => (\n <div className=\"explore\">\n <h5>Search Filters</h5>\n <div>\n {renderExplorations(props.explorations)}\n </div>\n </div>\n);\n\nfunction renderLinks(links) {\n let external = <small title=\"This link opens a page from an external site\"> <BiLinkExternal/></small>;\n return links.map((link, idx) =>\n <li key={idx}>\n <a href={link.url} target=\"_blank\" className=\"external-link\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: link.name\n })\n }}>{link.name}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={link.name}*/}\n {/* to={link.url}*/}\n {/* target=\"_blank\"*/}\n {/* className=\"external-link\"*/}\n {/*>*/}\n {/* {link.name}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n}\n\nexport const Links = props => (\n <div className=\"links\">\n <h5>Links to other resources</h5>\n <ul>\n {renderLinks(props.links)}\n </ul>\n </div>\n);\n","import { initializeApp, getApps, getApp } from \"firebase/app\";\n\nexport const getFirebaseApp = (config) => {\n if (!config) return null;\n const name = config.projectId || '[DEFAULT]';\n if (getApps().some(a => a.name === name)) return getApp(name);\n return initializeApp(config, name);\n};\n\nexport const suggestionToFilters = (suggestion) => {\n return {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 3,\n children: [\n {\n fq_field: suggestion.fq_field,\n fq_value: suggestion.fq_value,\n name: suggestion.name,\n category: suggestion.category,\n leftIdx: 1,\n rightIdx: 2,\n negate: false,\n marked: false\n }\n ]\n }\n}\n","import React from 'react'\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport {Button} from \"react-bootstrap\";\nimport Browser from \"./location/browser\";\nimport {connect} from \"redux-bundler-react\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Location extends React.Component {\n constructor(props) {\n super(props);\n this.gene = this.props.geneDocs[this.props.searchResult.id];\n this.initRegion();\n this.state = {\n visibleRange: this.initVisibleRange()\n };\n }\n\n initVisibleRange() {\n var location, span, padding, result;\n location = this.gene.location;\n if(!location) {\n throw new Error(`Could not find the location of the gene in props.`);\n }\n\n span = location.end - location.start + 1;\n padding = Math.floor(.1 * span);\n\n result = {\n chr: location.region,\n start: location.start - padding,\n end: location.end + padding\n };\n\n result.displayName = `${result.chr}:${result.start}-${result.end}`;\n\n return result;\n }\n\n initRegion() {\n var region, isChromosome, regionType, regionName;\n region = this.gene.location.region;\n if (region) {\n isChromosome = /^\\d+$/.test(region);\n if (isChromosome) {\n regionType = 'chromosome';\n regionName = 'Chromosome ' + region;\n }\n else {\n regionType = 'scaffold';\n regionName = region;\n }\n this.region = {\n isChromsome: isChromosome,\n name: regionName,\n type: regionType\n };\n }\n }\n\n\n handleViewChange(chr, start, end) {\n var visibleRange = {\n chr: chr,\n start: start,\n end: end,\n displayName: `${chr}:${start}-${end}`\n };\n\n if(!isEqual(visibleRange, this.state.visibleRange)) {\n this.setState({\n visibleRange: visibleRange\n });\n }\n }\n\n updateQuery(restrictToVisibleRange) {\n var location, geneName, visibleRange, filter, filterDisplayName, fq;\n location = this.gene.location;\n geneName = this.gene.name;\n // category: 'Gene Tree',\n // fq_field: 'gene_tree',\n // fq_value: this.tree._id,\n // name: `Homologs of ${this.gene.name}`\n\n let terms = [\n {\n category: \"Map\",\n name: location.map,\n fq_field: 'map',\n fq_value: location.map\n },\n {\n category: \"Region\",\n name: location.region,\n fq_field: 'region',\n fq_value: location.region\n }\n ];\n fq = `map:${location.map} AND region:${location.region}`;\n\n if (restrictToVisibleRange) {\n visibleRange = this.state.visibleRange;\n\n terms.push({\n category: \"Interval\",\n name: `${visibleRange.start}-${visibleRange.end}`,\n fq_field: 'start',\n fq_value: `[${visibleRange.start} TO ${visibleRange.end}]`\n });\n fq += ` AND (start:[${visibleRange.start} TO ${visibleRange.end}]`\n + ` OR end:[${visibleRange.start} TO ${visibleRange.end}])`;\n\n filterDisplayName = visibleRange.displayName;\n } else {\n filterDisplayName = \"Shares \" + this.region.type + \" with \" + geneName;\n }\n\n console.log(\"User asked to filter by location\");\n filter = {\n category: 'Location',\n id: fq,\n fq: fq,\n display_name: filterDisplayName\n };\n\n // QueryActions.removeAllFilters();\n // QueryActions.setFilter(filter);\n this.props.doAddGrameneRangeQuery(terms);\n if (this.props.closeModal) this.props.closeModal();\n }\n\n explorations() {\n var visible, result;\n visible = this.state.visibleRange;\n result = [\n {\n name: `All on ${this.region.name}`,\n handleClick: ()=>this.updateQuery(false)\n }\n ];\n if (visible) {\n result.push({\n name: `All within ${getProp(visible, 'displayName')}`,\n handleClick: ()=>this.updateQuery(true)\n });\n }\n return result;\n }\n\n links() {\n function jgiify(id) {\n return id.replace('SORBI_3','Sobic.').replace(/\\.v[0-9]\\.[0-9]$/,'');\n }\n var gene = this.gene;\n let links = [\n {name: 'Ensembl Browser', url: `${this.props.config.ensemblURL}/${gene.system_name}/Gene/Summary?g=${gene._id}`}\n ];\n if (gene.annotations.taxonomy.ancestors.includes(4557))\n links.push({name: 'Phytozome', url: `https://phytozome-next.jgi.doe.gov/report/gene/Sbicolor_v5_1/${jgiify(gene._id)}`})\n if (gene.taxon_id === 3702)\n links.push(\n {name: 'tair', url: `https://www.arabidopsis.org/servlets/TairObject?name=${gene._id}&type=locus`},\n {name: 'ThaleMine', url: `https://bar.utoronto.ca/thalemine/keywordSearchResults.do?searchTerm=${gene._id}&searchSubmit=search`}\n );\n if (gene.taxon_id === 39947)\n links.push({name: 'RAP-DB', url: `https://rapdb.dna.affrc.go.jp/locus/?name=${gene._id}`});\n const isMaize = new RegExp(/^Zm[0-9]+/);\n if (isMaize.test(gene._id))\n links.push({name: 'MaizeGDB', url: `http://www.maizegdb.org/gene_center/gene/${gene._id}`});\n return links;\n }\n\n render() {\n return (\n <Detail>\n {/*<Title key=\"title\">Genome location: {this.renderGenePosition()}</Title>*/}\n <Description key=\"description\">Currently viewing: {this.renderLocation()} {this.renderResetButton()}</Description>\n <Content key=\"content\">\n {this.renderBrowser()}\n </Content>\n <Explore key=\"explore\" explorations={this.explorations()}/>\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n );\n }\n\n\n renderBrowser() {\n return (\n <Browser gene={this.gene} {...this.props} {...this.state} onViewChange={ this.handleViewChange.bind(this) }/>\n );\n }\n\n renderGenePosition() {\n var location = this.gene.location;\n return (\n <span className=\"location\">\n <span className=\"region\">{this.region.name}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n renderLocation() {\n var location = this.state.visibleRange;\n return (\n <span className=\"location\">\n <span className=\"region\">{location.chr}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n resetVisibleRange() {\n const {chr, start, end} = this.initVisibleRange();\n this.handleViewChange(chr, start, end);\n }\n\n renderResetButton() {\n // let active=isEqual(this.props.visibleRange, this.state.visibleRange);\n return (\n <Button\n size=\"sm\"\n variant=\"outline-dark\"\n onClick={() => this.resetVisibleRange()}>\n Reset\n </Button>\n )\n }\n}\n\nexport default connect('doAddGrameneRangeQuery',Location);\n\n","import React from \"react\";\nimport DallianceBrowser from \"./dallianceBrowser.js\";\n\nexport default class Browser extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n <div className=\"location-browser\">\n <DallianceBrowser {...this.props} expanded={!!this.props.closeModal} />\n </div>\n )\n }\n\n}\n\n// Browser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// visibleRange: React.PropTypes.object.isRequired,\n// onViewChange: React.PropTypes.func.isRequired\n// };","import React from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n// var ensemblREST = require('../../../../../package.json').gramene.ensemblREST;\n//const ensemblREST = 'http://data.gramene.org/ensembl63';\n// const ensemblREST = 'https://data.sorghumbase.org/ensembl2';\n// const ensemblREST = 'https://data.gramene.org/vitis-ensembl1';\n// const ensemblREST = 'https://data.gramene.org/pansite-ensembl';\n\n// calculate this once.\nconst PREFIX = '/static/gramene-dalliance/';\n\nexport default class DallianceBrowser extends React.Component {\n\n constructor(props) {\n super(props);\n this.initialVisibleRange = props.visibleRange;\n }\n\n shouldComponentUpdate(newProps) {\n // should we reset the view to initial state?\n if(isEqual(newProps.visibleRange, this.initialVisibleRange)) {\n this.browser.setLocation(newProps.visibleRange.chr, newProps.visibleRange.start, newProps.visibleRange.end);\n }\n\n return false;\n }\n\n biodallianceElementId() {\n return this.props.gene._id + 'Browser';\n }\n\n browser() {\n var g, view, start, end, browser;\n g = this.props.gene;\n view = this.props.visibleRange;\n start = view.start;\n end = view.end;\n\n this.browser = browser = new Browser(\n {\n pageName: this.biodallianceElementId(),\n chr: g.location.region,\n viewStart: start,\n viewEnd: end,\n cookieKey: g._id + 'BrowserCookie',\n prefix: PREFIX,\n\n coordSystem: {\n speciesName: g.system_name,\n taxon: g.taxon_id,\n auth: 'Gramene',\n version: '3',\n ucscName: 'IRGSP-1.0'\n },\n\n sources: [\n {\n name: 'DNA',\n ensemblURI: this.props.config.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.config.ensemblRest,\n tier_type: 'ensembl',\n species: g.system_name,\n type: ['gene', 'transcript', 'exon', 'cds']\n }\n ],\n\n // hubs: ['/Track_Hubs/DRP000315/hub.txt'],\n disablePoweredBy: true,\n setDocumentTitle: false,\n noDefaultLabels: true,//!this.props.expanded,\n noPersist: true,\n noPersistView: true,\n maxWorkers: 2,\n noTitle: true,\n noLocationField: false,\n noLeapButtons: true,//!this.props.expanded,\n noZoomSlider: false, //!this.props.expanded,\n noTrackAdder: true,//!this.props.expanded,\n noTrackEditor: true,//!this.props.expanded,\n noExport: true,//!this.props.expanded,\n noOptions: true,//!this.props.expanded,\n noHelp: true,\n maxViewWidth: 1000000\n }\n );\n\n browser.addViewListener(this.props.onViewChange);\n }\n\n cancel() {\n if (typeof this.timeoutID == \"number\") {\n window.clearTimeout(this.timeoutID);\n delete this.timeoutID;\n }\n }\n\n componentDidMount() {\n // this.browser();\n this.cancel();\n var self = this;\n this.timeoutID = window.setTimeout(function () {self.browser();}, 0);\n }\n\n componentWillUnmount() {\n this.cancel();\n }\n\n render() {\n return (\n <div id={this.biodallianceElementId()}/>\n );\n }\n}\n\n// DallianceBrowser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// visibleRange: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// onViewChange: React.PropTypes.func.isRequired\n// };\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport FlatToNested from 'flat-to-nested';\nimport {Explore, Links} from \"./generic\";\nimport treesClient from \"gramene-trees-client\";\n// import {TreeMenu} from \"react-tree-menu\";\nimport TreeMenu from \"react-simple-tree-menu\";\nimport '../../../../node_modules/react-simple-tree-menu/dist/main.css';\n\nimport {Spinner} from \"react-bootstrap\";\nimport _ from 'lodash'\nimport \"./tree-view.css\"\n\nvar reactomeURL = \"https://plantreactome.gramene.org\";\n\nclass Pathways extends React.Component {\n constructor(props) {\n super(props);\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n this.gene = props.geneDocs[props.searchResult.id];\n this.holderId = 'displayHolder' + this.gene._id;\n this.state = { treeVisible: true, height: 500 };\n }\n\n getTreeWidth() {\n return this.state.treeVisible ? 250 : 0;\n }\n\n getDiagramWidth() {\n // Account for toggle button (24px) and 1px border\n const toggleWidth = 25;\n const treeWidth = this.getTreeWidth();\n return this.divWrapper.clientWidth - treeWidth - toggleWidth - 1;\n }\n\n initDiagram() {\n this.diagram = Reactome.Diagram.create({\n proxyPrefix: reactomeURL,\n placeHolder: this.holderId,\n width: this.getDiagramWidth(),\n height: this.state.height\n });\n }\n\n startResize(e) {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = this.state.height;\n\n const onMouseMove = (moveEvent) => {\n const newHeight = Math.max(200, startHeight + (moveEvent.clientY - startY));\n this.setState({ height: newHeight });\n };\n\n const onMouseUp = () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n // Recreate diagram at new height\n if (this.currentPathwayId && this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n this.loadDiagram(this.currentPathwayId);\n }\n };\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n }\n\n toggleTree() {\n // Use the synchronously-tracked ID, not the async onDiagramLoaded one\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.setState({ treeVisible: !this.state.treeVisible }, () => {\n // Use requestAnimationFrame to ensure DOM has updated before\n // reinitializing the diagram with the new available width\n requestAnimationFrame(() => {\n if (savedDiagram) {\n this.loadDiagram(savedDiagram);\n }\n });\n });\n }\n\n stableId(dbId) {\n let prefix = this.taxonomy.indices.id[this.gene.taxon_id].model.reactomePrefix || 'OSA';\n return `R-${prefix}-${dbId}`;\n }\n\n loadDiagram(pathwayId, reactionId) {\n this.currentPathwayId = pathwayId;\n if (!this.diagram) this.initDiagram();\n this.diagram.loadDiagram(pathwayId);\n\n this.diagram.onDiagramLoaded(function (loaded) {\n this.loadedDiagram = loaded;\n if (reactionId) {\n this.diagram.selectItem(reactionId);\n }\n // var xref = _.find(this.props.gene.xrefs,{db : 'Gramene_Plant_Reactome'}).ids[0];\n this.diagram.flagItems(this.gene._id);\n }.bind(this));\n }\n\n componentDidMount() {\n if (Reactome && Reactome.Diagram) {\n // this.initDiagram();\n }\n else {\n window.addEventListener('launchDiagram', function (e) {\n // this.initDiagram()\n }.bind(this));\n }\n this._handleResize = _.debounce(() => {\n if (this.currentPathwayId && this.divWrapper) {\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.loadDiagram(savedDiagram);\n }\n }, 300);\n window.addEventListener('resize', this._handleResize);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.hierarchy && ! this.state.selectedNode) {\n let node = this.state.hierarchy[0];\n let path = [0];\n let parent = node;\n while (node.nodes) {\n path.push(0);\n parent = node;\n node = node.nodes[0];\n }\n console.log(parent,node,path);\n this.loadNodes(path);\n }\n if (!this.state.hierarchy && this.pathwayIds) {\n const haveDocs = this.pathwayIds.filter(id => this.props.gramenePathways.hasOwnProperty(id));\n if (haveDocs.length === this.pathwayIds.length) {\n const docs = this.pathwayIds.map(id => this.props.gramenePathways[id]);\n this.getHierarchy(this.makeTaxonSpecific(docs,this.gene.taxon_id));\n }\n }\n }\n\n componentWillMount() {\n var pathways, reactionId, ancestorIds;\n pathways = this.gene.annotations.pathways;\n if(!pathways) {\n throw new Error(\"No pathway annotation present for \" + this.gene._id);\n }\n\n this.pathwayIds = _.clone(pathways.ancestors);\n pathways.entries.forEach(function(reaction) {\n let [r,speciesCode,id] = reaction.id.split('-');\n\n this.pathwayIds.push(+id);\n }.bind(this));\n\n this.props.doRequestGramenePathways(this.pathwayIds);\n\n // DocActions.needDocs('pathways', this.pathwayIds, (docs) => { return this.makeTaxonSpecific(docs,this.props.gene.taxon_id)}, this.getHierarchy);\n }\n\n makeTaxonSpecific(docs,taxon_id) {\n let lineageField = 'lineage_'+taxon_id;\n if (! docs[0].hasOwnProperty(lineageField)) {\n let tid = Math.floor(taxon_id / 1000);\n lineageField = 'lineage_'+tid;\n }\n let tsDocs = docs.map(function(doc) {\n let tsDoc = _.pick(doc,['_id','name','type']);\n tsDoc.lineage = doc[lineageField];\n return tsDoc;\n });\n console.log(tsDocs);\n return tsDocs;\n }\n\n componentWillUnmount() {\n // DocActions.noLongerNeedDocs('pathways', this.pathwayIds);\n if (this.diagram) this.diagram.detach();\n if (this._handleResize) {\n window.removeEventListener('resize', this._handleResize);\n this._handleResize.cancel();\n }\n }\n\n getHierarchy(docs) {\n let pathways = _.keyBy(docs,'_id');\n let nodes = [];\n this.pathwayIds.forEach(function (pwyId) {\n if (pathways[pwyId]) {\n let pwy = pathways[pwyId];\n pwy.lineage.forEach(function(line) {\n let parentOffset = line.length - 2;\n nodes.push({\n id: pwyId,\n key: pwyId,\n label: pwy.name,\n type: pwy.type,\n checkbox: false,\n selected: false,\n parent: parentOffset >=0 ? line[parentOffset] : undefined\n });\n });\n }\n });\n\n let nested = new FlatToNested({\n children: 'nodes'\n }).convert(nodes);\n\n this.setState({hierarchy: [nested], selectedNode: undefined});\n }\n possiblyLoadNodes(node) {\n if (!node.selected) {\n let selectedNode = this.state.selectedNode;\n selectedNode.selected = false;\n node.selected = true;\n selectedNode = node;\n if (node.type === \"Pathway\") {\n let pathway = this.stableId(node.id);\n this.loadDiagram(pathway);\n }\n else {\n let reaction = this.stableId(node.id);\n let pathway = this.stableId(node.parent.split(\"/\").pop());\n if (this.loadedDiagram === pathway) {\n this.diagram.selectItem(reaction);\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway,reaction);\n }\n }\n this.setState({selectedNode})\n }\n }\n loadNodes(nodes) {\n let hierarchy = this.state.hierarchy;\n let selectedNode = this.state.selectedNode;\n let offset = nodes.shift();\n let nodeRef = hierarchy[offset];\n let lineage = [nodeRef];\n while (nodeRef.nodes) {\n nodeRef = nodeRef.nodes[0];\n lineage.unshift(nodeRef);\n }\n if (lineage[0].id !== 2894885) {\n let pathway = this.stableId(lineage[0].id);\n let reaction = undefined;\n if (lineage[0].type === \"Reaction\") {\n reaction = pathway;\n pathway = this.stableId(lineage[1].id);\n }\n if (lineage[0].selected) {\n selectedNode = undefined;\n lineage[0].selected = false;\n if (this.loadedDiagram === pathway) {\n this.diagram.resetSelection();\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway);\n }\n }\n else {\n if (selectedNode) {\n selectedNode.selected = false;\n }\n selectedNode = lineage[0];\n lineage[0].selected = true;\n if (this.loadedDiagram === pathway) {\n if (reaction) {\n this.diagram.selectItem(reaction);\n }\n else {\n this.diagram.resetSelection();\n }\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n if (reaction) {\n this.loadDiagram(pathway, reaction);\n }\n else {\n this.loadDiagram(pathway);\n }\n }\n }\n this.setState({hierarchy: hierarchy, selectedNode: selectedNode});\n }\n }\n\n renderHierarchy() {\n if (this.state.hierarchy) {\n let path = [];\n let allPaths = [];\n let nodes = this.state.hierarchy;\n while (nodes) {\n path.push(nodes[0].key);\n allPaths.push(path.join('/'));\n if (nodes[0].hasOwnProperty('nodes')) {\n nodes = nodes[0].nodes;\n }\n else {\n nodes = undefined;\n }\n }\n // console.log(path);\n return <TreeMenu\n data={this.state.hierarchy}\n hasSearch={false}\n onClickItem={(item) => this.possiblyLoadNodes(item)}\n onClickItemx={(item) => console.log('onClickItem', item)}\n initialActiveKey={path.join('/')}\n initialOpenNodes={allPaths}\n />;\n // return (\n // <TreeMenu\n // data={this.state.hierarchy}\n // expandIconClass=\"fa fa-chevron-right\"\n // collapseIconClass=\"fa fa-chevron-down\"\n // stateful={true}\n // collapsible={true}\n // onTreeNodeClick={this.loadNodes.bind(this)}\n // />\n // );\n }\n return <Spinner/>\n }\n\n updateQuery() {\n console.log(\"User asked to filter by \"+ this.state.selectedNode.type);\n\n this.props.doAcceptGrameneSuggestion({\n category: 'Plant Reactome',\n fq_field: 'pathways__ancestors',\n fq_value: this.state.selectedNode.id,\n name: this.state.selectedNode.label\n })\n }\n\n render() {\n let reactomeLink,searchFilter;\n\n if (this.state.selectedNode) {\n let xrefLUT = _.keyBy(this.gene.xrefs,'db');\n let links = [\n {name: 'Plant Reactome '+this.state.selectedNode.type, url: `${reactomeURL}/content/detail/${this.stableId(this.state.selectedNode.id)}`}\n ];\n if (xrefLUT.hasOwnProperty('notGramene_Plant_Reactome')) {\n links.push({name: 'Plant Reactome Gene', url: `${reactomeURL}/content/detail/${xrefLUT.notGramene_Plant_Reactome.ids[0]}`});\n }\n reactomeLink = <Links key=\"links\" links={links}/>;\n let filters = [\n {\n name: `All genes in this ${this.state.selectedNode.type}`,\n handleClick: ()=>this.updateQuery()\n }\n ];\n searchFilter = <Explore key=\"explore\" explorations={filters}/>;\n }\n const treeWidth = this.getTreeWidth();\n return (\n <div ref={(div) => {this.divWrapper = div;}} className=\"pathways-container\">\n <div className=\"pathways-layout\" style={{height: this.state.height}}>\n <button\n className=\"pathways-tree-toggle\"\n onClick={() => this.toggleTree()}\n title={this.state.treeVisible ? 'Hide pathway hierarchy' : 'Show pathway hierarchy'}\n >\n {this.state.treeVisible ? '◀' : '▶'}\n </button>\n {this.state.treeVisible && (\n <div className=\"pathways-tree-panel\">\n {this.renderHierarchy()}\n </div>\n )}\n <div className=\"pathways-diagram-panel\" id={this.holderId}/>\n </div>\n <div\n className=\"pathways-resize-handle\"\n onMouseDown={(e) => this.startResize(e)}\n title=\"Drag to resize\"\n />\n {searchFilter}\n {reactomeLink}\n </div>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'doRequestGramenePathways',\n 'doAcceptGrameneSuggestion',\n Pathways\n);\n","import React, {useState, useEffect, useRef, useCallback} from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Button} from 'react-bootstrap';\nimport { AgGridReact } from \"ag-grid-react\";\nimport _ from 'lodash';\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport \"./VEP.css\";\nimport { study_info } from '../../../vepStudyInfo';\n\nconst ggURL = {\n xIRRI: 'https://gringlobal.irri.org/gringlobal/accessiondetail?id=',\n IRRI: 'https://www.irri.org/genesys-rice#/a/',\n ARS: 'https://npgsweb.ars-grin.gov/gringlobal/accessiondetail.aspx?id=',\n ICRISAT: 'https://genebank.icrisat.org/IND/PassportSummary?ID=',\n sorbmutdb: 'https://www.depts.ttu.edu/igcast/sorbmutdb.php',\n maizeGDB: 'https://wgs.maizegdb.org/',\n NCBI: 'https://www.ncbi.nlm.nih.gov/biosample/?term='\n};\n\nconst rice_studies = {'1': {label: 'Rice 3K', type: 'NAT'}};\nconst AccessionLink = ({germplasm, gene_id}) => {\n const genebank = germplasm.stock_center;\n const url = ggURL[genebank];\n if (germplasm.germplasm_dbid) { // link to stock center\n const germ_id = germplasm.germplasm_dbid;\n if (germ_id && url && germ_id !== \"0\") {\n return <a target=\"_blank\" href={`${url}${germ_id}`}>\n {germplasm.pub_id} ({genebank})</a>;\n }\n }\n if (genebank === \"sorbmutdb\") {\n return (\n <form id={germplasm.pub_id} action={url} method=\"post\" target=\"_blank\">\n <input type=\"hidden\" name=\"search\" value={gene_id.replace('SORBI_3','Sobic.')} />\n <input type=\"hidden\" name=\"submit\" value=\"Search\" />\n <button type=\"submit\" className=\"button-like-link\">SorbMutDB</button>\n </form>\n );\n }\n if (germplasm.pop_id === '15' && germplasm.stock_center === 'NOT FOUND') {\n return <a target=\"_blank\" href={ggURL['maizeGDB']}>{germplasm.pub_id} (SNPVersity)</a>\n }\n return <span>{germplasm.pub_id}</span>\n}\nfunction compareGermplasm(a, b) {\n const aSub = a?.germplasm?.subpop ?? '';\n const bSub = b?.germplasm?.subpop ?? '';\n const subCmp = aSub.localeCompare(bSub, 'en', { sensitivity: 'accent' });\n if (subCmp !== 0) return subCmp;\n\n const aPub = a?.germplasm?.pub_id ?? '';\n const bPub = b?.germplasm?.pub_id ?? '';\n return aPub.localeCompare(bPub, 'en', { sensitivity: 'accent' });\n}\nfunction group_germplasm(gene, germplasmLUT, vep_obj) {\n let accessionTable = [];\n Object.entries(vep_obj).forEach(([key,accessions]) => {\n const parts = key.split(\"__\");\n if (parts[0] === \"VEP\") {\n if (parts[1] !== \"merged\") {\n accessions.filter(ens_id => germplasmLUT.hasOwnProperty(ens_id)).forEach(ens_id => {\n const germplasm = germplasmLUT[ens_id][0];\n const pop = study_info[parts[3]][parts[4]];\n const conseq = parts[1].replaceAll(\"_\",\" \");\n const status = parts[2] === \"het\" ? \"heterozygous\" : \"homozygous\";\n const accInfo = {\n key: [pop.label,conseq,status].join('%%%'),\n germplasm: germplasm,\n pop: pop\n };\n accessionTable.push(accInfo);\n });\n }\n }\n });\n // group accessionTable by key field\n const groups = _.groupBy(accessionTable, 'key');\n let grouped = [];\n let id=0;\n Object.keys(groups).sort().forEach((group) => {\n const [pop,conseq,status] = group.split('%%%');\n id++;\n const tally = groups[group].length;\n grouped.push({\n id: id,\n group: group,\n summary: true,\n pop: pop,\n conseq: conseq,\n status: status,\n tally: tally\n });\n groups[group].sort(compareGermplasm).forEach(acc => {\n id++;\n grouped.push({\n id: id,\n group: group,\n summary: false,\n pop:pop,\n conseq: conseq,\n status: status,\n accession: acc,\n tally: tally\n })\n })\n })\n return grouped;\n}\nconst THRESHOLD = 5;\nconst GridWithGroups = ({groups,gene_id,doGrin}) => {\n const [rowData, setRowData] = useState(groups);\n\n const initialExpanded = {};\n rowData.forEach((row) => {\n if (row.summary) {\n initialExpanded[row.group] = (row.tally < THRESHOLD);\n }\n });\n const [expandedGroups, setExpandedGroups] = useState(initialExpanded);\n\n\n // Toggle group visibility\n const toggleGroup = (group) => {\n setExpandedGroups((prevExpandedGroups) => ({\n ...prevExpandedGroups,\n [group]: !prevExpandedGroups[group], // Toggle the group's state\n }));\n };\n\n // Filter the data to show/hide rows based on the expanded group state\n const getVisibleRowData = () => {\n const visibleRows = [];\n rowData.forEach((row) => {\n if (row.summary) {\n if (row.tally > 1) {\n visibleRows.push(row);\n }\n } else if (expandedGroups[row.group]) {\n visibleRows.push(row); // Show non-summary rows if the group is expanded\n }\n });\n return visibleRows;\n };\n\n // Define columns with a custom renderer for the summary rows\n const columnDefs = [\n { field: 'pop', headerName: 'Study/Population', flex: 1, minWidth: 120,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'conseq', headerName: 'VEP consequence', flex: 1, minWidth: 130,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'status', headerName: 'Allele status', flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'accession', headerName: doGrin ? 'Order Germplasm' : 'Accession', flex: 1, minWidth: 140,\n headerComponent: (props) => {\n return (\n <div style={{display: 'flex', alignItems: 'center'}}>\n {doGrin && <i className=\"fas fa-shopping-cart\"> </i>}\n <span>{props.displayName}</span>\n </div>\n );\n }, // Use the custom header with the shopping cart icon\n cellRenderer: (params) => {\n if (params.value) {\n return <AccessionLink germplasm={params.value.germplasm} gene_id={gene_id} />;\n }\n if (params.data.summary) {\n return (\n <span\n onClick={() => toggleGroup(params.data.group)}\n >\n {params.data.tally} Accessions {expandedGroups[params.data.group] ? '▼' : '▶'}\n </span>\n );\n }\n return null;\n }\n },\n { field: 'synonym', headerName: 'Synonym', filter:false, sortable:false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession) {\n return params.data.accession.germplasm.ens_id\n }\n return null;\n }},\n { field: 'subpop', headerName: 'Subpopulation', filter:false, sortable: false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession && params.data.accession.germplasm.subpop && params.data.accession.germplasm.subpop !== \"?\") {\n return params.data.accession.germplasm.subpop\n }\n return null;\n }},\n { field: 'search', headerName: 'All LOF Genes', sortable:false, filter:false, flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.accession) {\n const currentURL = new URL(window.location.href);\n const accession = params.data.accession;\n currentURL.search = '';\n currentURL.searchParams.set('category', 'Germplasm');\n currentURL.searchParams.set('fq_field', `VEP__merged__${accession.pop.type}__attr_ss`);\n currentURL.searchParams.set('fq_value', accession.germplasm.ens_id);\n currentURL.searchParams.set('name', accession.germplasm.ens_id);\n\n return <Button size='sm' href={currentURL.toString()}>Search</Button>\n\n }\n return null;\n }\n }\n ];\n\n const defaultColDef = {\n sortable: true,\n filter: \"agTextColumnFilter\",\n cellStyle: (params) => {\n if (params.data.summary) {\n return {cursor: 'pointer'};\n }\n return null;\n }\n };\n\n const nVisible = getVisibleRowData().length;\n const tableHeight = 50 + Math.min(nVisible, 10) * 42;\n return (\n <div style={{ overflowX: \"auto\", width: \"100%\", maxWidth: \"1200px\" }}>\n <div\n className=\"ag-theme-quartz\"\n style={{ height: tableHeight, minWidth: \"810px\", width: \"100%\" }}\n >\n <AgGridReact\n rowData={getVisibleRowData()}\n columnDefs={columnDefs}\n getRowNodeId={(data) => data.id}\n animateRows={true}\n defaultColDef={defaultColDef}\n />\n </div>\n </div>\n );\n};\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n if (props.grameneConsequences && props.grameneConsequences[gene._id] && props.grameneGermplasm) {\n const groups = group_germplasm(gene, props.grameneGermplasm, props.grameneConsequences[gene._id]);\n\n return <div>\n <h5>Predicted loss-of-function alleles were detected in these germplasm.</h5>\n <div >Explore other variants within this gene in the <a target=\"_blank\"\n href={`${props.configuration.ensemblURL}/${gene.system_name}/Gene/Variation_Gene/Image?db=core;g=${props.searchResult.id}`}>\n Variant image</a> page in the Ensembl genome browser.</div>\n <GridWithGroups groups={...groups} gene_id={gene._id} doGrin={!props.configuration.hasOwnProperty('noGRIN')}/>\n </div>\n } else {\n props.doRequestVEP(gene._id);\n return <pre>loading</pre>;\n }\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneConsequences',\n 'selectGrameneGermplasm',\n 'doRequestVEP',\n Detail\n);\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n <td className=\"xref-name-col\">{db}</td>\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n </tr>\n );\n }\n}\n\nfunction formatXrefsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n return gene.xrefs\n .filter(xr => dbxrefs.isKnown(xr.db) && xr.db !== \"PUBMED\")\n .sort()\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\n\nconst Xrefs = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Cross-references</Title>\n <Description key=\"description\">References to this gene in other databases:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-name-col\">Database</th>\n <th className=\"xref-value-col\">IDs and links</th>\n </tr>\n </thead>\n <tbody>\n {formatXrefsForGene(geneDocs[searchResult.id])}\n </tbody>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Xrefs;\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n {/*<td className=\"xref-name-col\">{db}</td>*/}\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n <td className=\"xref-name-col\">{this.props.source}</td>\n <td className=\"xref-value-col\">{this.props.text}</td>\n </tr>\n );\n }\n}\n\nfunction formatPubsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n let pubs = gene.xrefs.filter(xr => xr.db === \"PUBMED\");\n if (pubs.length === 0) {\n return <tr><td colSpan={3}>No publications found.</td></tr>\n }\n return pubs.sort((a,b) => {\n if (a.source) {\n if (b.source) {\n if (a.source < b.source) {\n return -1;\n }\n if (a.source > b.source) {\n return 1;\n }\n }\n else {\n return -1;\n }\n }\n else if (b.source) {\n return 1;\n }\n if (a.db < b.db) {\n return -1;\n }\n if (a.db > b.db) {\n return 1;\n }\n return 0;\n })\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\nconst formURL = 'https://docs.google.com/forms/d/e/1FAIpQLSey-xPyTysdd9c2phXT6kcbjEDeCppG4dLG7LjZCeLpx_KGog/viewform?usp=pp_url&entry.1266455249=';\nconst Publications = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Curated publications</Title>\n <Description key=\"description\">Functions described in the literature:</Description>\n <Content key=\"content\">\n <table className=\"xrefs xrefs-pubs table\">\n <thead>\n <tr>\n <th className=\"xref-10-col\">PubMed link</th>\n <th className=\"xref-10-col\">Curation source</th>\n <th className=\"xref-80-col\">Title/Description</th>\n </tr>\n </thead>\n <tbody>\n {formatPubsForGene(geneDocs[searchResult.id])}\n </tbody>\n <tfoot>\n <tr>\n <th colSpan={3}>Submit a gene function <a target=\"_blank\" href={formURL + searchResult.id}>here</a></th>\n </tr>\n </tfoot>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Publications;\n\n","import React, { useState, useEffect } from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Container, Row, Col, ToggleButton, ButtonGroup } from 'react-bootstrap';\nimport { AiOutlineCopy } from 'react-icons/ai';\nimport './sequences.css';\nimport keyBy from \"lodash/keyBy\";\n\nconst CodeBlock = props => {\n const plainFasta = `>${props.id}\\n${props.seq}`\n\n const [showNotification, setShowNotification] = useState(false);\n\n const copyCode = () => {\n // Use the Clipboard API to write text to the clipboard\n navigator.clipboard.writeText(plainFasta)\n .then(() => {\n setShowNotification(true);\n })\n .catch((err) => {\n console.error('Unable to copy to clipboard', err);\n });\n };\n\n useEffect(() => {\n if (showNotification) {\n const notificationTimeout = setTimeout(() => {\n setShowNotification(false);\n }, 2000); // Hide the notification after 2 seconds\n\n return () => clearTimeout(notificationTimeout);\n }\n }, [showNotification]);\n\n return (\n <div className=\"fasta-container\">\n <code className=\"fasta\"><span className=\"header\">>{props.id}</span><br/>{\n props.blocks.map((block,idx) =>\n <span key={idx} className={block.kind}>{block.seq}</span>\n )\n }</code>\n <p className=\"fasta-key\">\n <b>Key:</b> 5'UTR \n <span className=\"square-utr5\"> </span>\n CDS \n <span className=\"square-cds\"> </span>\n 3'UTR \n <span className=\"square-utr3\"> </span>\n </p>\n <button className=\"copy-button\" onClick={copyCode}><AiOutlineCopy /></button>\n {showNotification && <div className=\"notification\">Sequence copied</div>}\n </div>\n );\n};\n\nconst decoratePeptide = (seq, transcript) => {\n let junctions = [];\n if (transcript.exon_junctions) {\n transcript.exon_junctions.forEach((ej, idx) => {\n if (ej > transcript.cds.start && ej <= transcript.cds.end) {\n junctions.push(Math.floor((ej - transcript.cds.start) / 3));\n }\n });\n }\n if (junctions.length === 0) {\n return [{kind:'cds', seq:seq}];\n }\n let offset = 0;\n let blocks = [];\n junctions.forEach((j, idx) => {\n let kind = idx % 2 === 0 ? \"cds\" : \"cds-other\";\n blocks.push({kind: kind, seq: seq.substring(offset, j)});\n offset = j;\n });\n blocks.push({kind: junctions.length % 2 === 0 ? \"cds\" : \"cds-other\", seq: seq.substring(junctions.pop())});\n return blocks;\n}\nconst decorateSeq = (geneSeq, gene, up, down, tid, mode) => {\n // return a list of blocks with kind and seq properties\n let blocks = [];\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n const offset = gene.location.strand === 1\n ? gene.location.start - geneSeq.start\n : geneSeq.end - gene.location.end\n if (up > 0) {\n const TSS = gene.gene_structure.exons.find(exon => exon.id === transcript.exons[0]).start;\n blocks.push({\n kind:'upstream',\n seq: geneSeq.seq.substring(offset - up + TSS - 1, offset + TSS - 1).toLowerCase()\n })\n }\n // add exons and introns based on tid\n let pos_in_transcript = 0;\n let pos_in_gene = 0;\n let blockType = 'utr5';\n let extra = '';\n transcript.exons.forEach((eid, e_idx) => {\n const exon = gene.gene_structure.exons.find(exon => exon.id === eid);\n if (e_idx > 0 && mode === \"dna\") {\n blocks.push({\n kind: 'intron',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + exon.start - 1).toLowerCase()\n });\n pos_in_gene = exon.start-1;\n }\n if (mode === \"rna\") {\n extra = e_idx % 2 === 1 ? '-other' : '';\n }\n let exon_length = exon.end - exon.start + 1;\n if (transcript.cds && pos_in_transcript < transcript.cds.start && pos_in_transcript + exon_length >= transcript.cds.start) {\n // CDS starts in this exon\n const utr5_len = transcript.cds.start - pos_in_transcript - 1;\n if (utr5_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + utr5_len)\n });\n exon_length -= utr5_len;\n pos_in_gene += utr5_len;\n pos_in_transcript = transcript.cds.start - 1;\n }\n blockType = 'cds';\n }\n if (blockType === 'cds' && pos_in_transcript + exon_length >= transcript.cds.end) {\n // CDS ends in this exon\n const cds_len = transcript.cds.end - pos_in_transcript;\n if (cds_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + cds_len)\n });\n exon_length -= cds_len;\n pos_in_gene += cds_len;\n pos_in_transcript = transcript.cds.end;\n }\n blockType = 'utr3';\n }\n if (exon_length > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + exon_length)\n })\n }\n pos_in_gene = exon.end;\n pos_in_transcript += exon_length;\n })\n // check if there's more to the gene locus after end of transcript?\n // downstream is currently relative to end of transcript but upstream is relative to first TSS\n if (down > 0) {\n blocks.push({\n kind:'downstream',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + down).toLowerCase()\n })\n }\n return blocks;\n};\nconst buildId = (gene, geneSeq, up, down) => {\n let gs = gene.location.strand === 1 ? gene.location.start - up : gene.location.start - down;\n let ge = gene.location.strand === 1 ? gene.location.end + down : gene.location.end + up;\n let extras = [];\n if (gene.location.strand === -1) {\n extras.push('reverse')\n }\n if (up > 0) {\n extras.push(`upstream=${up}`)\n }\n if (down > 0) {\n extras.push(`downstream=${down}`)\n }\n return `${geneSeq.genome}|${gene._id}|${gene.location.region}:${gs}..${ge} ${extras.join('|')}`\n};\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [tab, setTab] = useState('dna');\n const [upstream, setUpstream] = useState(0);\n const [downstream, setDownstream] = useState(0);\n const [tid, setTid] = useState(gene.gene_structure.canonical_transcript);\n let geneSeq;\n let rnaSeq;\n let pepSeq;\n if (props.geneSequences && props.geneSequences[gene._id]) {\n geneSeq = props.geneSequences[gene._id];\n }\n else {\n props.doRequestGeneSequence(gene)\n return <pre>loading</pre>;\n }\n if (props.rnaSequences && props.rnaSequences[tid]) {\n rnaSeq = props.rnaSequences[tid]\n }\n else {\n props.doRequestRnaSequence(tid, gene)\n return <pre>loading</pre>;\n }\n const maxUp = gene.location.strand === 1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const maxDown = gene.location.strand === -1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n let tl_id;\n if (transcript.translation) {\n tl_id = transcript.translation.id;\n if (props.pepSequences && props.pepSequences[tl_id]) {\n pepSeq = props.pepSequences[tl_id];\n }\n else {\n props.doRequestPepSequence(tl_id, gene);\n return <pre>loading</pre>;\n }\n }\n return <Tabs activeKey={tab}\n onSelect={(k) => setTab(k)}\n >\n <Tab tabClassName=\"dna\" eventKey=\"dna\" title=\"Genomic sequence\">\n <Container style={{ maxWidth: '100ch', marginLeft: 0}}>\n <Row>\n <Col><b><i>Show flanking sequence</i></b></Col>\n </Row>\n <div className=\"flanking-guide\">\n <span className=\"flanking-label-left\">Upstream</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-center-label\">Transcript (unspliced)</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-label-right\">Downstream</span>\n\n <span className=\"flanking-value-left\">{upstream}</span>\n <Form.Range\n className=\"reverse-slide\"\n style={{width: '60px'}}\n value={upstream}\n onChange={(e) => setUpstream(e.target.value)}\n min={0}\n max={maxUp}\n step={10}\n />\n <span/>\n <Form.Range\n style={{width: '60px'}}\n value={downstream}\n onChange={(e) => setDownstream(e.target.value)}\n min={0}\n max={maxDown}\n step={10}\n />\n <span className=\"flanking-value-right\">{downstream}</span>\n </div>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Highlight transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={buildId(gene,geneSeq,+upstream,+downstream)} seq={geneSeq.seq.substring(maxUp - +upstream, maxUp + gene.location.end - gene.location.start + 1 + +downstream)} blocks={decorateSeq(geneSeq,gene,+upstream,+downstream,tid,\"dna\")}/>}\n </Tab>\n <Tab tabClassName=\"rna\" eventKey=\"rna\" title=\"Transcript sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tid} seq={rnaSeq.seq} blocks={decorateSeq(geneSeq,gene,0,0,tid,\"rna\")}/>}\n </Tab>\n {gene.biotype === \"protein_coding\" &&\n <Tab tabClassName=\"pep\" eventKey=\"pep\" title=\"Peptide sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tl_id} seq={pepSeq.seq} blocks={decoratePeptide(pepSeq.seq,transcript)}/>}\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGeneSequences',\n 'selectRnaSequences',\n 'selectPepSequences',\n 'doRequestGeneSequence',\n 'doRequestRnaSequence',\n 'doRequestPepSequence',\n Detail\n);\n\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport Vis from \"gramene-search-vis\"\nimport Selection from './selection.js'\nimport '../../../node_modules/gramene-search-vis/styles/main.less';\n\nclass TaxDist extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapseEmpties: true,\n comparaOnly: true,\n showCompara: props.configuration.hasOwnProperty('partialCompara')\n };\n }\n handleSelection(selections) {\n this.setState({selections})\n }\n handleHighlight(highlight) {\n this.setState({highlight})\n }\n handleFilter() {\n this.setState({selections:null})\n }\n toggleEmpties() {\n this.setState({collapseEmpties: !this.state.collapseEmpties})\n }\n toggleCompara() {\n this.setState({comparaOnly: !this.state.comparaOnly})\n }\n render() {\n let selectedTaxa = {};\n if (this.props.grameneSearch) {\n if (this.state.collapseEmpties) {\n this.props.grameneSearch.facet_counts.facet_fields.taxon_id.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n selectedTaxa[tid] = true;\n })\n } else {\n if (Object.keys(this.props.grameneGenomes.active).length === 0 && this.props.grameneMaps) {\n Object.keys(this.props.grameneMaps).forEach(tid => selectedTaxa[tid] = true);\n } else {\n Object.keys(this.props.grameneGenomes.active).forEach(tid => selectedTaxa[tid]= true);\n }\n }\n if (this.state.showCompara && this.state.comparaOnly && this.props.grameneMaps) {\n Object.keys(selectedTaxa).forEach(tid => {\n if (!this.props.grameneMaps[tid].in_compara) {\n delete selectedTaxa[tid];\n }\n })\n }\n }\n return (\n <div className=\"results-vis big-vis\">\n {this.props.grameneTaxDist && <span>\n <button type=\"button\"\n className=\"btn btn-outline-primary btn-sm\"\n onClick={this.toggleEmpties.bind(this)}>\n {this.state.collapseEmpties ? 'Expand' : 'Collapse'} empty branches\n </button>\n {this.state.showCompara && <button type=\"button\"\n className=\"btn btn-outline-success btn-sm\"\n onClick={this.toggleCompara.bind(this)}>\n Show {this.state.comparaOnly ? 'all genomes' : 'only genomes in gene trees'}\n </button>\n }\n </span>}\n {this.props.grameneTaxDist && <Vis taxonomy={this.props.grameneTaxDist}\n selectedTaxa={selectedTaxa}\n onSelection={this.handleSelection.bind(this)}\n onHighlight={this.handleHighlight.bind(this)}\n />}\n {this.renderSelection()}\n </div>\n );\n }\n renderSelection() {\n if (this.state.selections && this.props.grameneTaxDist) {\n return <Selection taxonomy={this.props.grameneTaxDist}\n selectedTaxa={{}}\n selections={this.state.selections}\n onFilter={this.handleFilter.bind(this)}/>\n }\n }\n}\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneTaxDist',\n 'selectGrameneGenomes',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n TaxDist\n);\n","import React from 'react';\nimport numeral from 'numeral';\nimport _ from \"lodash\";\n\nimport {Table, Button, Badge} from 'react-bootstrap';\nimport {connect} from \"redux-bundler-react\";\n\nfunction selectionStats(selections, taxonomy) {\n const selectionData = getSelectionData(selections, taxonomy);\n const totalGeneResults = taxonomy.model.results.count;\n const fq = fqFromSelections(selections);\n\n return {\n selectedGenes: selectionData.resultsCount,\n totalGeneResults,\n fq,\n numSelectedBins: selectionData.binsCount,\n proportionGenesSelected: selectionData.resultsCount / totalGeneResults\n }\n}\n\nfunction getSelectionData(selection, taxonomy) {\n return _.reduce(selection, (countAcc, sel) => {\n const bins = taxonomy.getBins(sel.binFrom.idx, sel.binTo.idx);\n countAcc.binsCount += bins.length;\n countAcc.resultsCount += _.reduce(bins, (acc, bin) => acc + bin.results.count, 0);\n return countAcc;\n }, {resultsCount: 0, binsCount: 0});\n}\n\nconst selectionToSolrRange = (sel)=>`[${sel.binFrom.idx} TO ${sel.binTo.idx}]`;\n\nfunction fqFromSelections(selections) {\n const rangeStrings = selections.map(selectionToSolrRange);\n return `fixed_1000__bin:(${rangeStrings.join(' ')})`;\n}\n\nconst Selections = ({selections, taxonomy, doAcceptGrameneSuggestion, onFilter}) => {\n const stats = selectionStats(selections, taxonomy);\n\n const setFilter = () => {\n doAcceptGrameneSuggestion({\n category: 'Selections',\n fq_field: 'fixed_1000__bin',\n fq_value: `(${selections.map(selectionToSolrRange).join(' ')})`,\n name: `${selections.length} region${selections.length === 1 ? '':'s'}`\n });\n onFilter();\n };\n\n const formatProportion = (prop) => '(' + (_.isFinite(prop) ? numeral(prop).format('0.0%') : undefined) + ')';\n\n return (\n <div>\n <Table>\n <tbody>\n <tr>\n <th>Number of selected genes</th>\n <td>{stats.selectedGenes} {formatProportion(stats.proportionGenesSelected)}</td>\n <td><Button size='sm' onClick={setFilter}>selections |<Badge>{stats.selectedGenes}</Badge></Button>\n </td>\n </tr>\n </tbody>\n </Table>\n </div>\n )\n};\n\nexport default connect(\n 'doAcceptGrameneSuggestion',\n Selections\n);\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Alert, Container, Row, Card, CardGroup} from 'react-bootstrap'\nimport './genes.css'\n\nconst examples = [\n {\n subsite: {\n maize:1,\n sorghum:1,\n main:1,\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in Andropogoneae?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 147429,\n name: 'Andropogoneae',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n },\n {\n subsite: {\n grapevine:1\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in rosids?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 71275,\n name: 'rosids',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n }\n];\nconst HelpDemo = ({configuration,doReplaceGrameneFilters}) => (\n <Container fluid style={{padding: '40px'}}>\n <Row>\n <h3>Search Features</h3>\n </Row>\n <Row>\n <CardGroup style={{width:'80%'}}>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Suggestions</Card.Title>\n <Card.Text>Matching terms are provided as you type:</Card.Text>\n <div className='gene-search-pic-sugg'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Visualization</Card.Title>\n <Card.Text>See the distribution of results across all genomes:</Card.Text>\n <div className='gene-search-pic-results'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Gene tree view</Card.Title>\n <Card.Text>Explore evolutionary history of a gene family:</Card.Text>\n <div className='gene-search-pic-genetree'/>\n </Card.Body>\n </Card>\n </CardGroup>\n </Row>\n <Row>\n <h4>For Example</h4>\n </Row>\n <Row>\n <small>\n You can ask sophisticated questions about the genes:<br/>\n <ul>\n {examples.filter(e => !!e.subsite[configuration.id]).map((e,idx) => (\n <li key={idx}><a onClick={() => doReplaceGrameneFilters(e.filters)}>{e.text}</a></li>\n ))}\n </ul>\n </small>\n </Row>\n </Container>\n);\n\nexport default connect(\n 'selectConfiguration',\n 'doReplaceGrameneFilters',\n HelpDemo\n);\n\n","import { connect } from 'redux-bundler-react'\n\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport StatsByGroup from \"./StatsByGroup\";\n\n\nclass GeneAttribs extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n render() {\n if (this.props.grameneGeneAttribs && this.props.grameneSearch) {\n const groups = this.props.grameneGeneAttribs;\n const stats = this.props.grameneSearch.stats;\n return <StatsByGroup groups={groups} stats={stats} />;\n }\n return null;\n }\n}\n\nexport default connect(\n 'selectGrameneSearch',\n 'selectGrameneGeneAttribs',\n GeneAttribs\n);\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\n\n/**\n * StatsByGroup\n *\n * Props:\n * - groups: {\n * [groupName: string]: Array<{\n * name: string,\n * description: string,\n * dtype: \"i\" | \"f\",\n * fieldName: string\n * }>\n * }\n * - stats: {\n * stats_fields: {\n * [fieldName: string]: {\n * min?: number,\n * max?: number,\n * count?: number,\n * mean?: number,\n * stddev?: number,\n * percentiles?: (string | number)[] // [\"10.0\", v10, \"20.0\", v20, ...] (order preserved)\n * }\n * }\n * }\n *\n * Columns: attr, desc, mean, stddev, min, max, count, dist\n */\nexport default function StatsByGroup({ groups, stats }) {\n const fields = stats?.stats_fields || {};\n\n return (\n <div style={{ fontFamily: \"system-ui, -apple-system, Segoe UI, Roboto, sans-serif\", lineHeight: 1.35 }}>\n {Object.entries(groups).map(([groupName, attrs]) => (\n <GroupTable\n key={groupName}\n groupName={groupName}\n attributes={attrs}\n fields={fields}\n />\n ))}\n </div>\n );\n}\n\nfunction GroupTable({ groupName, attributes, fields }) {\n const hasAny = attributes?.some((a) => fields[a.fieldName]);\n\n const columns = useMemo(\n () => [\n { key: \"attr\", label: \"Attribute\", min: 120 },\n { key: \"desc\", label: \"Description\", min: 380, flex: true },\n { key: \"mean\", label: \"Mean\", min: 100 },\n { key: \"stddev\", label: \"Std Dev\", min: 110 },\n { key: \"min\", label: \"Min\", min: 90 },\n { key: \"max\", label: \"Max\", min: 90 },\n { key: \"count\", label: \"Count\", min: 90 },\n { key: \"dist\", label: \"Distribution\",min: 220 },\n ],\n []\n );\n\n const initial = useMemo(\n () => columns.map((c) => (c.flex ? Math.max(380, c.min) : c.min)),\n [columns]\n );\n\n const { colWidths, startResize, resizing } = useResizableColumns({\n initialWidths: initial,\n minWidths: columns.map((c) => c.min || 60),\n });\n\n const nfInt = useMemo(() => new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 0 }), []);\n const nfFloat = useMemo(\n () => new Intl.NumberFormat(\"en-US\", { minimumFractionDigits: 0, maximumFractionDigits: 3 }),\n []\n );\n\n return (\n <section style={{ marginBottom: 24 }}>\n <header style={{ display: \"flex\", alignItems: \"baseline\", gap: 12, marginBottom: 8 }}>\n <h2 style={{ margin: 0, fontSize: 18 }}>{groupName}</h2>\n {!hasAny && <span style={{ fontSize: 12, color: \"#666\" }}>No stats available for this group.</span>}\n </header>\n\n <div\n style={{\n overflowX: \"auto\",\n border: \"1px solid #eee\",\n borderRadius: 8,\n boxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\n }}\n >\n <table style={tableStyle}>\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n\n <thead>\n <tr>\n {columns.map((col, i) => (\n <ResizableTh\n key={col.key}\n label={col.label}\n index={i}\n onResizeStart={startResize}\n />\n ))}\n </tr>\n </thead>\n\n <tbody>\n {attributes.map((a) => {\n const s = fields[a.fieldName] || {};\n return (\n <tr key={a.fieldName}>\n <Td mono title={a.fieldName}>{a.name}</Td>\n <Td title={a.description}>{a.description}</Td>\n <Td align=\"right\">{fmtValue(s.mean, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.stddev, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.min, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.max, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtCount(s.count, nfInt)}</Td>\n <Td>\n <PercentileHeatmapNormalized\n percentilesArr={s.percentiles}\n min={s.min}\n max={s.max}\n />\n </Td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#666\" }}>\n <em>Tip:</em> Drag the divider at the right edge of any header to resize.\n {resizing && <span style={{ marginLeft: 8, color: \"#999\" }}>(resizing…)</span>}\n </div>\n </section>\n );\n}\n\n/* ===================== Percentiles / Heatmap ===================== */\n\n/**\n * Convert alternating array into ordered pairs: [[\"10.0\", v10], [\"20.0\", v20], ...]\n * - Preserves the exact order provided by Solr\n */\nfunction percentilesArrayToPairs(arr) {\n if (!Array.isArray(arr)) return [];\n const out = [];\n for (let i = 0; i < arr.length - 1; i += 2) {\n out.push([String(arr[i]), arr[i + 1]]);\n }\n return out;\n}\n\nfunction normalizeBetween(value, min, max) {\n if (!isFinite(min) || !isFinite(max) || max <= min || !isFinite(value)) return null;\n return (value - min) / (max - min);\n}\n\n// White -> Blue (0 -> 1)\nfunction rgbWhiteToBlue(vNorm) {\n const t = clamp01(vNorm);\n const rg = Math.round(255 * (1 - t));\n return `rgb(${rg}, ${rg}, 255)`;\n}\nfunction clamp01(x) {\n if (typeof x !== \"number\" || !isFinite(x)) return 0;\n return Math.max(0, Math.min(1, x));\n}\nfunction fmtFloat(v) {\n if (v == null || !isFinite(v)) return \"n/a\";\n return v.toFixed(3);\n}\n\n/**\n * PercentileHeatmapNormalized\n * - Infers bins from percentilesArr (order preserved)\n * - Colors normalized by row min/max\n */\nfunction PercentileHeatmapNormalized({ percentilesArr, min, max }) {\n const pairs = useMemo(() => percentilesArrayToPairs(percentilesArr), [percentilesArr]);\n const n = pairs.length || 1; // avoid zero columns\n const validScale = isFinite(min) && isFinite(max) && max > min;\n\n return (\n <div style={{ ...heatRowDynamic, gridTemplateColumns: `repeat(${n}, 1fr)` }}>\n {pairs.map(([pStr, raw], idx) => {\n const rawNum = typeof raw === \"number\" && isFinite(raw) ? raw : null;\n const norm = rawNum == null ? null : (validScale ? normalizeBetween(rawNum, min, max) : null);\n const bg = norm == null ? \"#f2f2f2\" : rgbWhiteToBlue(norm);\n const label = `${pStr} → raw ${fmtFloat(rawNum)} (norm ${fmtFloat(norm)})`;\n return <HeatCell key={`${pStr}-${idx}`} background={bg} label={label} />;\n })}\n </div>\n );\n}\n\nfunction HeatCell({ background, label }) {\n const [hover, setHover] = useState(false);\n return (\n <div\n style={{ ...heatCell, background }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n title={label}\n >\n {hover && <span style={popover}>{label}</span>}\n </div>\n );\n}\n\n/* ===================== Resizable columns ===================== */\n\nfunction useResizableColumns({ initialWidths, minWidths }) {\n const [colWidths, setColWidths] = useState(initialWidths);\n const [resizing, setResizing] = useState(false);\n const activeRef = useRef(null); // { index, startX, startW }\n\n useEffect(() => {\n if (initialWidths?.length) setColWidths(initialWidths);\n }, [initialWidths?.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onMouseMove = (e) => {\n if (!activeRef.current) return;\n const { index, startX, startW } = activeRef.current;\n const dx = e.clientX - startX;\n const next = [...colWidths];\n const minW = minWidths?.[index] ?? 60;\n next[index] = Math.max(minW, startW + dx);\n setColWidths(next);\n };\n\n const endResize = () => {\n activeRef.current = null;\n setResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n\n const startResize = (index, ev) => {\n const startX = ev.clientX;\n const startW = colWidths[index];\n activeRef.current = { index, startX, startW };\n setResizing(true);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", endResize);\n };\n\n useEffect(() => {\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return { colWidths, setColWidths, startResize, resizing };\n}\n\nfunction ResizableTh({ label, index, onResizeStart }) {\n return (\n <th style={thStyle}>\n <div style={{ position: \"relative\", width: \"100%\" }}>\n <span>{label}</span>\n <span\n onMouseDown={(e) => onResizeStart(index, e)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize column\"\n style={resizerStyle}\n />\n </div>\n </th>\n );\n}\n\n/* ===================== Formatting helpers ===================== */\n\nfunction fmtCount(v, nfInt) {\n if (v === null || v === undefined) return \"—\";\n return nfInt.format(v);\n}\n\nfunction fmtValue(v, dtype = \"f\", isStat = false, nfInt, nfFloat) {\n if (v === null || v === undefined || Number.isNaN(v)) return \"—\";\n const isIntType = dtype === \"i\";\n return isIntType && !isStat ? nfInt.format(v) : nfFloat.format(v);\n}\n\n/* ===================== Cells & Styles ===================== */\n\nfunction Td({ children, align = \"left\", mono = false, title }) {\n return (\n <td\n title={title}\n style={{\n ...cellBase,\n textAlign: align,\n borderBottom: \"1px solid #eee\",\n padding: \"8px 10px\",\n fontFamily: mono ? \"ui-monospace, SFMono-Regular, Menlo, monospace\" : undefined,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n verticalAlign: \"top\",\n }}\n >\n {children}\n </td>\n );\n}\n\nconst tableStyle = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n tableLayout: \"fixed\",\n minWidth: 980,\n};\n\nconst cellBase = {\n fontSize: 13,\n lineHeight: 1.35,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst thStyle = {\n ...cellBase,\n textAlign: \"left\",\n borderBottom: \"1px solid #ddd\",\n background: \"#fafafa\",\n fontWeight: 600,\n padding: \"10px 10px\",\n position: \"relative\",\n};\n\nconst resizerStyle = {\n position: \"absolute\",\n right: -5,\n top: 0,\n height: \"100%\",\n width: 10,\n cursor: \"col-resize\",\n boxShadow: \"inset -1px 0 0 rgba(0,0,0,0.08)\",\n};\n\nconst heatRowDynamic = {\n display: \"grid\",\n gap: 2,\n alignItems: \"center\",\n width: \"100%\",\n minWidth: 200,\n};\n\nconst heatCell = {\n height: 16,\n borderRadius: 3,\n position: \"relative\",\n boxShadow: \"inset 0 0 0 1px rgba(0,0,0,0.06)\",\n};\n\nconst popover = {\n position: \"absolute\",\n left: \"50%\",\n top: -26,\n transform: \"translateX(-50%)\",\n padding: \"2px 6px\",\n fontSize: 11,\n background: \"rgba(0,0,0,0.8)\",\n color: \"#fff\",\n borderRadius: 4,\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n};\n","import React from \"react\";\nimport { connect } from 'redux-bundler-react'\nimport { Modal, Button } from \"react-bootstrap\";\nimport { BsChevronDown, BsChevronRight } from \"react-icons/bs\";\n\n// name → subtle background colour. Checked against node.name at render time.\nconst CLADE_COLORS = {\n \"Chlorophyta\": \"#e8f5e9\",\n \"Bryophyta\": \"#f1f8e9\",\n \"Liliopsida\": \"#fff8e1\", // monocots\n \"eudicotyledons\": \"#fce4ec\",\n \"Poaceae\": \"#fff3e0\",\n \"Fabaceae\": \"#ede7f6\",\n \"Brassicaceae\": \"#e1f5fe\",\n \"Solanaceae\": \"#ffebee\",\n};\n\nfunction findRoots(tax) {\n return Object.values(tax).filter(n =>\n !n.is_a || n.is_a.length === 0 || !n.is_a.some(p => tax[p])\n );\n}\n\n// Post-order: attach .leafIds (taxon_ids of maps in subtree) and .isLeaf\nfunction annotate(node, tax, maps) {\n const leafIds = [];\n if (maps[node._id]) { node.isLeaf = true; leafIds.push(node._id); }\n (node.children || []).forEach(cid => {\n const child = tax[cid];\n if (!child) return;\n annotate(child, tax, maps);\n child.leafIds.forEach(id => leafIds.push(id));\n });\n node.leafIds = leafIds;\n}\n\n// Walk down the spine through single-child internals until a branch point,\n// leaf, or node that is itself a genome.\nfunction compressChain(node, tax, maps) {\n const chain = [node];\n let cur = node;\n while (true) {\n const kids = (cur.children || [])\n .map(cid => tax[cid])\n .filter(c => c && c.leafIds && c.leafIds.length > 0);\n if (kids.length !== 1) break;\n if (maps[cur._id]) break;\n cur = kids[0];\n chain.push(cur);\n }\n return { chain, terminal: cur };\n}\n\n// Render a breadcrumb chain. If the chain has more than 3 nodes, collapse the\n// middle into a hoverable ellipsis that reveals the hidden names on hover.\nconst CHAIN_DISPLAY_MAX = 3;\nfunction renderChain(chain) {\n const nameOf = n => n.short_name || n.name;\n if (chain.length <= CHAIN_DISPLAY_MAX) {\n return chain.map((n, i) => (\n <React.Fragment key={n._id}>\n {i > 0 && <span className=\"tax-sep\"> › </span>}\n {nameOf(n)}\n </React.Fragment>\n ));\n }\n const first = chain[0];\n const last = chain[chain.length - 1];\n const middle = chain.slice(1, -1);\n const fullTitle = chain.map(nameOf).join(' › ');\n return (\n <>\n {nameOf(first)}\n <span className=\"tax-sep\"> › </span>\n <span className=\"tax-ellipsis\" title={fullTitle}>\n <span className=\"tax-ellipsis-short\">…</span>\n <span className=\"tax-ellipsis-full\">\n {middle.map(n => (\n <React.Fragment key={n._id}>\n {nameOf(n)}\n <span className=\"tax-sep\"> › </span>\n </React.Fragment>\n ))}\n </span>\n </span>\n <span className=\"tax-sep\"> › </span>\n {nameOf(last)}\n </>\n );\n}\n\n// Drop a parent when its single child has the same name (e.g. species node\n// above a subspecies-less record that repeats the species name). The terminal\n// (last element) is always preserved; only redundant ancestors are removed.\nfunction dedupAdjacent(chain) {\n const out = [];\n for (const n of chain) {\n if (out.length && out[out.length - 1].name === n.name) {\n out[out.length - 1] = n; // keep the child, drop the parent\n } else {\n out.push(n);\n }\n }\n return out;\n}\n\n// Use the node's direct `rank` field when it carries a real value.\nfunction getRank(node) {\n const r = node && node.rank;\n return r && r !== 'no rank' ? r : null;\n}\n\n// Search nodes whose name or a synonym contains the query. Prefix matches rank higher.\nfunction searchTaxonomy(query, tax) {\n const q = query.trim().toLowerCase();\n if (!q) return [];\n const out = [];\n Object.values(tax).forEach(n => {\n const name = n.name || '';\n const nameLc = name.toLowerCase();\n if (nameLc.includes(q)) {\n out.push({ node: n, matched: name, via: 'name', prefix: nameLc.startsWith(q) });\n return;\n }\n const syns = n.synonym || [];\n for (const s of syns) {\n const sLc = s.toLowerCase();\n if (sLc.includes(q)) {\n out.push({ node: n, matched: s, via: 'synonym', prefix: sLc.startsWith(q) });\n return;\n }\n }\n });\n out.sort((a, b) =>\n (a.prefix === b.prefix ? 0 : a.prefix ? -1 : 1)\n || a.node.name.localeCompare(b.node.name)\n );\n return out.slice(0, 20);\n}\n\n// Compute the { selected, expanded } pair for a fresh modal opening:\n// selection is seeded from active genomes (or everything non-hidden),\n// and every ancestor of a selected genome is pre-expanded so the user sees\n// all of their current selections without manually drilling in.\nfunction computeOpenState(props) {\n const { grameneMaps, grameneTaxonomy, grameneGenomes } = props;\n const activeKeys = Object.keys(grameneGenomes.active || {});\n const seedAll = activeKeys.length === 0;\n const selected = new Set();\n Object.values(grameneMaps || {}).forEach(m => {\n if (m.hidden) return;\n if (seedAll || grameneGenomes.active[m.taxon_id]) selected.add(m.taxon_id);\n });\n const expanded = new Set();\n if (grameneTaxonomy) {\n selected.forEach(tid => {\n let cur = grameneTaxonomy[tid];\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n });\n }\n return { selected, expanded };\n}\n\nclass TaxonomyModal extends React.Component {\n constructor(props) {\n super(props);\n const { grameneMaps, grameneTaxonomy } = props;\n\n let roots = [];\n if (grameneTaxonomy) {\n roots = findRoots(grameneTaxonomy);\n roots.forEach(r => annotate(r, grameneTaxonomy, grameneMaps));\n }\n\n const { selected, expanded } = computeOpenState(props);\n this.state = {\n selected,\n expanded,\n roots,\n query: '',\n highlightId: null,\n activeIdx: 0,\n };\n this.rowRefs = {};\n this._matches = [];\n this._activeHitEl = null;\n }\n\n handleQueryChange(e) {\n this.setState({ query: e.target.value, activeIdx: 0 });\n }\n\n handleSearchKeyDown(e) {\n const n = this._matches.length;\n if (e.key === 'ArrowDown') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.min(this.state.activeIdx + 1, n - 1) });\n } else if (e.key === 'ArrowUp') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.max(this.state.activeIdx - 1, 0) });\n } else if (e.key === 'Enter') {\n if (n === 0) return;\n e.preventDefault();\n const hit = this._matches[this.state.activeIdx] || this._matches[0];\n if (hit) this.pickMatch(hit.node);\n } else if (e.key === 'Escape') {\n if (this.state.query) {\n e.preventDefault();\n this.setState({ query: '', activeIdx: 0 });\n }\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // On each hidden→shown transition, reseed selection from current active\n // genomes and expand every ancestor so selected taxa are visible.\n const wasShown = prevProps.grameneGenomes && prevProps.grameneGenomes.show;\n const isShown = this.props.grameneGenomes && this.props.grameneGenomes.show;\n if (!wasShown && isShown) {\n const { selected, expanded } = computeOpenState(this.props);\n this.setState({ selected, expanded, query: '', activeIdx: 0, highlightId: null });\n }\n // Keep the highlighted hit scrolled into view inside the dropdown.\n if (prevState.activeIdx !== this.state.activeIdx && this._activeHitEl) {\n this._activeHitEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n pickMatch(node) {\n // Expand every ancestor so the node is visible, then scroll + flash.\n const { grameneTaxonomy } = this.props;\n const expanded = new Set(this.state.expanded);\n let cur = node;\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n this.setState({ expanded, query: '', highlightId: node._id }, () => {\n const el = this.rowRefs[node._id];\n if (el && el.scrollIntoView) el.scrollIntoView({ block: 'center', behavior: 'smooth' });\n clearTimeout(this._hlTimer);\n this._hlTimer = setTimeout(() => this.setState({ highlightId: null }), 1800);\n });\n }\n\n toggleExpand(id) {\n const expanded = new Set(this.state.expanded);\n expanded.has(id) ? expanded.delete(id) : expanded.add(id);\n this.setState({ expanded });\n }\n\n toggleLeaf(taxonId) {\n const selected = new Set(this.state.selected);\n selected.has(taxonId) ? selected.delete(taxonId) : selected.add(taxonId);\n this.setState({ selected });\n }\n\n toggleSubtree(terminal) {\n const selected = new Set(this.state.selected);\n const allOn = terminal.leafIds.every(id => selected.has(id));\n terminal.leafIds.forEach(id => allOn ? selected.delete(id) : selected.add(id));\n this.setState({ selected });\n }\n\n selectAll() {\n const s = new Set();\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) s.add(m.taxon_id);\n });\n this.setState({ selected: s });\n }\n\n selectNone() {\n this.setState({ selected: new Set() });\n }\n\n handleClose() {\n const active = {};\n this.state.selected.forEach(id => { active[id] = true; });\n if (Object.keys(active).length === 0) {\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) active[m.taxon_id] = true;\n });\n }\n this.props.doUpdateGrameneGenomes(active);\n }\n\n renderNode(node, depth, inheritedColor) {\n const { grameneTaxonomy, grameneMaps } = this.props;\n const { selected, expanded } = this.state;\n\n const { chain: rawChain, terminal } = compressChain(node, grameneTaxonomy, grameneMaps);\n const chain = dedupAdjacent(rawChain);\n const leafIds = terminal.leafIds;\n if (leafIds.length === 0) return null;\n\n const selCount = leafIds.reduce((n, id) => n + (selected.has(id) ? 1 : 0), 0);\n const total = leafIds.length;\n const allOn = selCount === total;\n const someOn = selCount > 0 && !allOn;\n\n const visibleKids = (terminal.children || [])\n .map(cid => grameneTaxonomy[cid])\n .filter(c => c && c.leafIds.length > 0);\n const hasKids = visibleKids.length > 0;\n const terminalIsGenome = !!grameneMaps[terminal._id];\n\n const isOpen = expanded.has(terminal._id);\n\n // Deepest clade colour in the chain wins; falls back to inherited.\n const color = chain.reduce(\n (acc, n) => CLADE_COLORS[n.name] || acc,\n inheritedColor\n );\n\n const isHighlighted = rawChain.some(n => n._id === this.state.highlightId);\n\n return (\n <div\n key={terminal._id}\n className={\"tax-node\" + (isHighlighted ? \" tax-node-highlight\" : \"\")}\n style={{ background: color }}\n ref={el => {\n // Register every traversed node (including dedupped-away parents) so\n // search results targeting any ancestor still scroll to this row.\n rawChain.forEach(n => { this.rowRefs[n._id] = el; });\n }}\n >\n <div className=\"tax-row\" style={{ paddingLeft: depth * 7 }}>\n {hasKids ? (\n <span\n className=\"tax-chevron\"\n onClick={() => this.toggleExpand(terminal._id)}\n >\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n ) : (\n <span className=\"tax-chevron-spacer\"/>\n )}\n\n <input\n type=\"checkbox\"\n checked={allOn}\n ref={el => { if (el) el.indeterminate = someOn; }}\n onChange={() => {\n if (hasKids) this.toggleSubtree(terminal);\n else if (terminalIsGenome) this.toggleLeaf(terminal._id);\n }}\n />\n {' '}\n <span className={hasKids ? \"tax-label tax-label-internal\" : \"tax-label\"}>\n {renderChain(chain)}\n </span>\n\n {(hasKids || terminalIsGenome) && (\n <span className=\"tax-count\"> ({selCount} / {total})</span>\n )}\n\n {hasKids && terminalIsGenome && (\n <label className=\"tax-self-leaf\">\n <input\n type=\"checkbox\"\n checked={selected.has(terminal._id)}\n onChange={() => this.toggleLeaf(terminal._id)}\n />\n <em>this genome</em>\n </label>\n )}\n </div>\n\n {hasKids && isOpen && (\n <div className=\"tax-children\">\n {visibleKids.map(c => this.renderNode(c, depth + 1, color))}\n </div>\n )}\n </div>\n );\n }\n\n render() {\n const { roots } = this.state;\n const { grameneTaxonomy, grameneMaps } = this.props;\n\n // Hide the root spine: start rendering at the first real branch point.\n const topLevel = [];\n roots.forEach(r => {\n const { terminal } = compressChain(r, grameneTaxonomy || {}, grameneMaps || {});\n (terminal.children || []).forEach(cid => {\n const child = grameneTaxonomy && grameneTaxonomy[cid];\n if (child && child.leafIds && child.leafIds.length > 0) {\n topLevel.push(child);\n }\n });\n });\n\n return (\n <Modal\n show={this.props.grameneGenomes.show}\n onHide={this.handleClose.bind(this)}\n size='lg'\n >\n <Modal.Header closeButton>\n <Modal.Title>Select Genomes of Interest</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Button variant=\"outline-secondary\" onClick={this.selectAll.bind(this)}>All</Button>{' '}\n <Button variant=\"outline-secondary\" onClick={this.selectNone.bind(this)}>None</Button>\n\n {(() => {\n this._matches = this.state.query\n ? searchTaxonomy(this.state.query, grameneTaxonomy || {})\n : [];\n const matches = this._matches;\n const activeIdx = Math.min(this.state.activeIdx, Math.max(0, matches.length - 1));\n return (\n <div className=\"tax-search\">\n <input\n type=\"text\"\n className=\"tax-search-input\"\n placeholder=\"Find taxon by name or synonym…\"\n value={this.state.query}\n onChange={this.handleQueryChange.bind(this)}\n onKeyDown={this.handleSearchKeyDown.bind(this)}\n />\n {this.state.query && (\n <div className=\"tax-search-results\">\n {matches.length === 0 ? (\n <div className=\"tax-search-empty\">No matches</div>\n ) : matches.map(({ node, matched, via }, i) => {\n const rank = getRank(node);\n const count = (node.leafIds && node.leafIds.length) || 0;\n const isLeaf = !!(grameneMaps && grameneMaps[node._id]);\n const isActive = i === activeIdx;\n return (\n <div\n key={node._id}\n ref={el => { if (isActive) this._activeHitEl = el; }}\n className={\"tax-search-hit\" + (isActive ? \" tax-search-hit-active\" : \"\")}\n onMouseDown={e => e.preventDefault()}\n onMouseEnter={() => this.setState({ activeIdx: i })}\n onClick={() => this.pickMatch(node)}\n >\n <span className=\"tax-search-name\">{node.name}</span>\n {via === 'synonym' && (\n <span className=\"tax-search-syn\"> {matched} <em>syn.</em></span>\n )}\n {rank && <span className=\"tax-search-rank\"> {rank}</span>}\n {!isLeaf && (\n <span className=\"tax-search-count\"> · {count} genome{count === 1 ? '' : 's'}</span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n })()}\n\n <div className=\"tax-tree\">\n {topLevel.map(n => this.renderNode(n, 0, null))}\n </div>\n <Button onClick={this.handleClose.bind(this)}>Submit</Button>\n </Modal.Body>\n </Modal>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'selectGrameneTaxonomy',\n 'doUpdateGrameneGenomes',\n TaxonomyModal\n)\n","import React, { useState, Suspense } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { Accordion, Button } from 'react-bootstrap';\nimport \"./expression.css\";\nimport Study from './Study';\nconst LazyStudy = React.lazy(() => import('./Study'));\n\nconst StudyList = props => {\n return <Accordion alwaysOpen defaultActiveKey={props.studies.length === 1 ? \"study_0\" : undefined}>\n {props.studies.map((study, idx) => {\n return (\n <Accordion.Item key={idx} eventKey={'study_'+idx}>\n <Accordion.Header>{study.description}</Accordion.Header>\n <Accordion.Body>\n {/*<Suspense fallback={<div>Loading...</div>}>*/}\n {/* <LazyStudy id={study._id}/>*/}\n {/*</Suspense>*/}\n <Study id={study._id}/>\n </Accordion.Body>\n </Accordion.Item>\n )\n })}\n </Accordion>\n};\n\nconst Expression = props => {\n let searchTaxa = {};\n if (props.grameneSearch) {\n const taxon_id_facet = props.grameneSearch.facet_counts.facet_fields.taxon_id;\n taxon_id_facet.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n if (tid > 1000000) {\n const tid2 = Math.floor(tid / 1000);\n if (props.expressionStudies[tid2]) {\n searchTaxa[tid2] = tid;\n }\n }\n else {\n searchTaxa[tid] = tid;\n }\n });\n }\n const availableTaxa = Object.keys(props.expressionStudies)\n .filter(tid => searchTaxa[tid])\n .sort((a,b) => props.grameneMaps[searchTaxa[a]].left_index - props.grameneMaps[searchTaxa[b]].left_index);\n return availableTaxa && props.grameneTaxonomy &&\n <div>\n <div>This is where you can launch a component for the selected samples. props.desiredSamples lists them.\n This component can request the data from the API\n organize samples by factor metadata? One big table with all the studies?\n <Button\n onClick={console.log(Object.keys(props.desiredSamples))}\n >Show Samples ({Object.keys(props.desiredSamples).length} selected)</Button>\n </div>\n <Accordion alwaysOpen defaultActiveKey={availableTaxa.length === 1 ? \"tax_0\" : undefined}>\n {availableTaxa.map((tid, idx) => {\n const baselineStudies = props.expressionStudies[tid].filter(study => study.type === 'Baseline');\n const n = baselineStudies.length;\n return <Accordion.Item key={idx} eventKey={'tax_'+idx}>\n <Accordion.Header>{props.grameneTaxonomy[tid].name} - {n} {n === 1 ? 'study' : 'studies'}</Accordion.Header>\n <Accordion.Body><StudyList studies={baselineStudies}/></Accordion.Body>\n </Accordion.Item>\n })}\n </Accordion>\n </div>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n Expression\n);\n","import {connect} from \"redux-bundler-react\";\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {Table, Form, Button, Alert, Spinner, Container, Row, Col, Modal} from 'react-bootstrap';\nimport { getFirebaseApp } from \"../utils\";\nimport {getAuth, onAuthStateChanged} from \"firebase/auth\";\n\nconst MAX_GENE_IDS = 1000; // Define the maximum number of gene IDs allowed\n\nconst formatCreatedAt = (value) => {\n if (!value) return '';\n const d = new Date(value);\n if (isNaN(d.getTime())) return '';\n return d.toLocaleDateString();\n};\n\nconst applySortFilter = (lists, search, sort) => {\n const s = search.trim().toLowerCase();\n let result = s\n ? lists.filter(l => (l.label || '').toLowerCase().includes(s))\n : lists.slice();\n const { key, dir } = sort;\n const mult = dir === 'asc' ? 1 : -1;\n result.sort((a, b) => {\n let av = a[key], bv = b[key];\n if (key === 'createdAt') {\n av = av ? new Date(av).getTime() : 0;\n bv = bv ? new Date(bv).getTime() : 0;\n } else if (key === 'n_genes') {\n av = av || 0;\n bv = bv || 0;\n } else {\n av = (av || '').toString().toLowerCase();\n bv = (bv || '').toString().toLowerCase();\n }\n if (av < bv) return -1 * mult;\n if (av > bv) return 1 * mult;\n return 0;\n });\n return result;\n};\n\nconst SortHeader = ({ label, sortKey, sort, onToggle }) => {\n const active = sort.key === sortKey;\n const indicator = active ? (sort.dir === 'asc' ? ' ▲' : ' ▼') : '';\n return (\n <th\n style={{ cursor: 'pointer', userSelect: 'none', position: 'sticky', top: 0, background: '#fff', zIndex: 1 }}\n onClick={() => onToggle(sortKey)}\n >\n {label}{indicator}\n </th>\n );\n};\n\nconst stickyHeaderStyle = { position: 'sticky', top: 0, background: '#fff', zIndex: 1 };\n\nconst GeneListDisplayComponent = props => {\n const [publicGeneLists, setPublicGeneLists] = useState([]);\n const [privateGeneLists, setPrivateGeneLists] = useState([]);\n const [error, setError] = useState(null);\n const [notice, setNotice] = useState(null);\n const [user, setUser] = useState({});\n const [editingId, setEditingId] = useState(null);\n const [editLabel, setEditLabel] = useState('');\n const [editIsPublic, setEditIsPublic] = useState(false);\n const [deleteTarget, setDeleteTarget] = useState(null);\n const [search, setSearch] = useState('');\n const [sort, setSort] = useState({ key: 'createdAt', dir: 'desc' });\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n const toggleSort = (key) => setSort(s =>\n s.key === key ? { key, dir: s.dir === 'asc' ? 'desc' : 'asc' } : { key, dir: 'asc' }\n );\n\n const currentUid = user && user.uid;\n const mergedLists = useMemo(() => {\n const byId = new Map();\n [...publicGeneLists, ...privateGeneLists].forEach(l => byId.set(l._id, l));\n return Array.from(byId.values());\n }, [publicGeneLists, privateGeneLists]);\n\n const displayedLists = useMemo(\n () => applySortFilter(mergedLists, search, sort),\n [mergedLists, search, sort]\n );\n\n const fetchPrivateGeneLists = async () => {\n if (!auth) {\n setPrivateGeneLists([]);\n setError(null);\n setNotice(null);\n return;\n }\n if (!user || typeof user.getIdToken !== 'function') {\n setPrivateGeneLists([]);\n setError(null);\n setNotice('Log in to create and manage your personal gene lists.');\n return;\n }\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=false`, {\n method: 'GET',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n const result = await response.json();\n\n if (response.ok) {\n setError(null);\n setNotice(null);\n setPrivateGeneLists(result);\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch private gene lists. Please try again later.');\n }\n };\n // Fetch saved gene lists from a backend or local storage\n const fetchPublicGeneLists = async () => {\n try {\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=true`);\n const result = await response.json();\n\n if (response.ok) {\n setPublicGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch gene lists. Please try again later.');\n }\n };\n\n // Example functions for viewing and deleting lists\n const viewGeneList = (list) => {\n props.addFilter({\n category: 'Gene List',\n fq_field: 'saved_search',\n fq_value: list.hash,\n name: list.label\n })\n };\n\n const startEdit = (list) => {\n setEditingId(list._id);\n setEditLabel(list.label || '');\n setEditIsPublic(!!list.isPublic);\n };\n\n const cancelEdit = () => {\n setEditingId(null);\n setEditLabel('');\n setEditIsPublic(false);\n };\n\n const saveEdit = async (listId) => {\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'PATCH',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n },\n body: JSON.stringify({ label: editLabel, isPublic: editIsPublic })\n });\n if (response.ok) {\n cancelEdit();\n setError(null);\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n setError('You must be signed in to edit a gene list.');\n } else if (response.status === 404) {\n setError('Gene list not found or you do not own it.');\n } else if (response.status === 400) {\n setError('Nothing to update — please enter a label.');\n } else {\n setError('Failed to update gene list.');\n }\n } catch (err) {\n setError('Failed to update gene list.');\n }\n };\n\n const requestDelete = (list) => setDeleteTarget(list);\n const cancelDelete = () => setDeleteTarget(null);\n\n const confirmDelete = async () => {\n if (!deleteTarget) return;\n const listId = deleteTarget._id;\n setDeleteTarget(null);\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'DELETE',\n headers: { \"Authorization\": `Bearer ${token}` }\n });\n if (response.ok) {\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n alert('You must be signed in to delete a gene list.');\n } else if (response.status === 404) {\n alert('Gene list not found or you do not own it.');\n } else {\n alert('Failed to delete gene list.');\n }\n } catch (err) {\n alert('Failed to delete gene list.');\n }\n };\n\n // Fetch data when the component is mounted or after a save\n useEffect(() => {\n fetchPublicGeneLists();\n }, [props.refreshKey]);\n useEffect(() => {\n fetchPrivateGeneLists();\n }, [user, props.refreshKey]);\n\n return (\n <div className=\"gene-list-display-component\">\n {error && (\n <Alert variant=\"danger\">\n {error}\n </Alert>\n )}\n\n {notice && (\n <Alert variant=\"info\">\n {notice}\n </Alert>\n )}\n\n {mergedLists.length > 0 ? (\n <div className=\"mt-4\">\n <div className=\"d-flex justify-content-end mb-2\">\n <Form.Control\n type=\"search\"\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{ maxWidth: 220 }}\n size=\"sm\"\n />\n </div>\n <div style={{ maxHeight: 500, overflowY: 'auto', border: '1px solid #dee2e6', borderRadius: 4 }}>\n <Table striped hover className=\"mb-0\">\n <thead>\n <tr>\n <SortHeader label=\"List Name\" sortKey=\"label\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Owner\" sortKey=\"owner\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Genes\" sortKey=\"n_genes\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Created\" sortKey=\"createdAt\" sort={sort} onToggle={toggleSort} />\n <th style={stickyHeaderStyle}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {displayedLists.map((list, index) => {\n const isMine = currentUid && list.uid === currentUid;\n const ownerLabel = isMine ? 'You' : (list.owner || 'Unknown');\n return editingId === list._id ? (\n <tr key={index}>\n <td>\n <Form.Control\n type=\"text\"\n value={editLabel}\n onChange={(e) => setEditLabel(e.target.value)}\n placeholder=\"List name\"\n />\n <Form.Check\n type=\"switch\"\n id={`edit-public-${list._id}`}\n label=\"Public\"\n checked={editIsPublic}\n onChange={() => setEditIsPublic(!editIsPublic)}\n className=\"mt-2\"\n />\n </td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"primary\" size=\"sm\" onClick={() => saveEdit(list._id)}>\n Save\n </Button>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={cancelEdit} className=\"ml-2\">\n Cancel\n </Button>\n </td>\n </tr>\n ) : (\n <tr key={index}>\n <td>{list.label}{list.isPublic ? ' (public)' : ''}</td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n {isMine && (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => startEdit(list)} className=\"ml-2\">\n Edit\n </Button>\n )}\n {isMine && (\n <Button variant=\"outline-danger\" size=\"sm\" onClick={() => requestDelete(list)} className=\"ml-2\">\n Delete\n </Button>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n </div>\n </div>\n ) : (\n <Alert variant=\"warning\" className=\"mt-4\">\n No saved gene lists found.\n </Alert>\n )}\n\n <Modal show={!!deleteTarget} onHide={cancelDelete} centered>\n <Modal.Header closeButton>\n <Modal.Title>Delete gene list?</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n Are you sure you want to delete\n {deleteTarget ? <> <strong>{deleteTarget.label}</strong></> : ' this gene list'}?\n This action cannot be undone.\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={cancelDelete} autoFocus>\n Cancel\n </Button>\n <Button variant=\"danger\" onClick={confirmDelete}>\n Delete\n </Button>\n </Modal.Footer>\n </Modal>\n </div>\n );\n};\n\nconst GeneListComponent = props => {\n const [geneList, setGeneList] = useState('');\n const [listHash, setListHash] = useState(null);\n const [validationError, setValidationError] = useState([]);\n const [listName, setListName] = useState('');\n const [listIsPublic, setListIsPublic] = useState(false);\n const [validatedList, setValidatedList] = useState([]);\n const [errorMessage, setErrorMessage] = useState('');\n const [loading, setLoading] = useState(false); // New loading state\n const [user, setUser] = useState({});\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n // Function to handle gene list input\n const handleGeneListChange = (event) => {\n setGeneList(event.target.value);\n };\n\n // Function to handle drag and drop of gene list\n const handleDrop = (event) => {\n event.preventDefault();\n const geneData = event.dataTransfer.getData('text');\n setGeneList(geneData);\n };\n\n // Function to handle drag over (needed for drop)\n const handleDragOver = (event) => {\n event.preventDefault();\n };\n\n // Function to submit gene list for validation\n const handleSubmit = async () => {\n const geneArray = geneList.split('\\n').filter(Boolean); // Convert the gene list into an array and filter out empty values\n\n if (geneArray.length > MAX_GENE_IDS) {\n setErrorMessage(`You have exceeded the maximum limit of ${MAX_GENE_IDS} gene IDs.`);\n return;\n }\n\n setErrorMessage(''); // Reset error message if validation passes\n setLoading(true); // Set loading state to true to show progress\n\n try {\n const response = await fetch(`${props.api}/gene_lists/validate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(geneArray),\n });\n\n const result = await response.json();\n\n if (result.hash) {\n setListHash(result.hash);\n setValidatedList(result.ids);\n setValidationError(result.missing);\n } else {\n // Handle errors from validation\n alert('Error during validation.');\n }\n } catch (error) {\n alert('There was an error with the validation service.',error);\n } finally {\n setLoading(false); // Set loading to false when the request is complete\n }\n };\n\n // Function to save the validated gene list\n const handleSaveList = async () => {\n const queryParams = {\n label: listName,\n hash: listHash,\n site: props.site,\n n_genes: validatedList.length,\n isPublic: listIsPublic\n };\n const queryString = new URLSearchParams(queryParams).toString();\n\n const token = await user.getIdToken();\n try {\n const response = await fetch(`${props.api}/gene_lists?${queryString}`, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n if (!response.ok) {\n throw new Error('Failed to save list');\n }\n const result = await response.json();\n console.log(result);\n setGeneList('');\n setListHash(null);\n setValidatedList([]);\n setValidationError([]);\n setListName('');\n setListIsPublic(false);\n if (props.onListSaved) props.onListSaved();\n\n } catch (error) {\n console.error(\"There was an problem with fetch\", error)\n }\n };\n\n return (\n <div className=\"gene-list-component\">\n <Form>\n {/* Input for Gene List */}\n <Form.Group controlId=\"geneList\">\n <Form.Label>Paste or drop your gene list here:</Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={10}\n value={geneList}\n onChange={handleGeneListChange}\n placeholder={`Paste or drop your gene list here (Maximum: ${MAX_GENE_IDS} IDs)`}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n </Form.Group>\n\n {/* Display error if gene list exceeds limit */}\n {errorMessage && (\n <Alert variant=\"danger\">\n {errorMessage}\n </Alert>\n )}\n\n {/* Button to submit for validation */}\n <Button variant=\"primary\" onClick={handleSubmit}>\n Validate Gene List\n </Button>\n </Form>\n\n {/* Display validation in progress */}\n {loading && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation in Progress...</h3>\n <Spinner animation=\"border\" role=\"status\">\n <span className=\"sr-only\">Validating...</span>\n </Spinner>\n </div>\n )}\n\n\n {/* Display validation summary */}\n {!loading && listHash && (\n <div className=\"validation-summary mt-3 p-3 border rounded bg-light\">\n <div>\n <span className=\"text-success\">\n <strong>{validatedList.length}</strong> valid\n </span>\n {validationError.length > 0 && (\n <div className=\"text-danger mt-1\">\n <strong>{validationError.length}</strong> not found\n </div>\n )}\n </div>\n {validationError.length > 0 && (\n <details className=\"mt-2\">\n <summary style={{cursor: 'pointer'}}>Show unrecognized IDs</summary>\n <pre className=\"small mt-2 mb-0\" style={{maxHeight: 150, overflow: 'auto'}}>\n {validationError.join('\\n')}\n </pre>\n </details>\n )}\n </div>\n )}\n\n {/* Input for saving validated gene list */}\n {!loading && validatedList.length > 0 && (\n <div className=\"save-list mt-4\">\n <Form.Group controlId=\"listName\">\n <Form.Label>Save Validated Gene List</Form.Label>\n <Form.Control\n type=\"text\"\n value={listName}\n onChange={(e) => setListName(e.target.value)}\n placeholder=\"Enter list name\"\n />\n <Form.Check\n type='switch'\n id='listIsPublic'\n label='Public'\n onChange={(e) => setListIsPublic(!listIsPublic)}\n />\n </Form.Group>\n {user ?\n <Button variant=\"primary\" onClick={handleSaveList}>\n Save Gene List\n </Button>\n : <Button variant=\"secondary\" disabled>Login Required</Button> }\n </div>\n )}\n </div>\n );\n};\n\nconst UserGeneListsComponent = props => {\n const [refreshKey, setRefreshKey] = useState(0);\n const handleListSaved = () => setRefreshKey(k => k + 1);\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n if (!auth) {\n return (\n <Alert variant=\"info\">\n User gene lists are not available on this site.\n </Alert>\n );\n }\n return (\n <Container fluid>\n <Row>\n <Col><GeneListComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} onListSaved={handleListSaved}/></Col>\n <Col><GeneListDisplayComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} addFilter={props.doAcceptGrameneSuggestion} refreshKey={refreshKey}/></Col>\n </Row>\n </Container>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n 'doAcceptGrameneSuggestion',\n UserGeneListsComponent\n);\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport FieldTree from './FieldTree';\nimport Preview from './Preview';\nimport ExportFooter from './ExportFooter';\nimport './styles.css';\n\nconst MIN_LEFT_PCT = 15;\nconst MAX_LEFT_PCT = 85;\n\nconst ExporterViewCmp = props => {\n const {\n fieldCatalog: catalog,\n grameneFieldCatalogIsLoading: isLoading,\n grameneFieldCatalogRaw: raw,\n grameneFieldCatalogShouldUpdate: shouldUpdate,\n doFetchGrameneFieldCatalog\n } = props;\n const [fieldQuery, setFieldQuery] = useState('');\n const [leftPct, setLeftPct] = useState(50);\n const [dragging, setDragging] = useState(false);\n const containerRef = useRef(null);\n\n useEffect(() => {\n if (shouldUpdate) doFetchGrameneFieldCatalog();\n }, [shouldUpdate, doFetchGrameneFieldCatalog]);\n\n const onPointerMove = useCallback((e) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const pct = ((e.clientX - rect.left) / rect.width) * 100;\n if (!Number.isFinite(pct)) return;\n setLeftPct(Math.max(MIN_LEFT_PCT, Math.min(MAX_LEFT_PCT, pct)));\n }, []);\n\n useEffect(() => {\n if (!dragging) return;\n const onUp = () => setDragging(false);\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n const prev = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n return () => {\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = prev;\n };\n }, [dragging, onPointerMove]);\n\n if (!catalog || !catalog.groups) {\n const msg = isLoading ? 'Loading…' : (raw && raw.error) ? `error: ${String(raw.error)}` : 'init';\n return (\n <div className=\"exporter-view\">\n <em style={{padding: '1rem'}}>Loading field catalog… ({msg})</em>\n </div>\n );\n }\n\n const gridStyle = {\n gridTemplateColumns: `${leftPct}% 8px ${100 - leftPct}%`\n };\n\n return (\n <div className=\"exporter-view\" ref={containerRef} style={gridStyle}>\n <div className=\"exporter-pane\">\n <div className=\"exporter-pane-header exporter-pane-header-row\">\n <b>Available fields</b>\n <small style={{color: '#888', marginLeft: '0.5rem'}}>\n {Object.keys(catalog.fields).length} total\n </small>\n <input\n type=\"search\"\n className=\"form-control exporter-field-search exporter-field-search-inline\"\n placeholder=\"Search fields…\"\n value={fieldQuery}\n onChange={e => setFieldQuery(e.target.value)}\n />\n </div>\n <div className=\"exporter-pane-body\">\n <FieldTree query={fieldQuery}/>\n </div>\n </div>\n\n <div\n className={'exporter-divider' + (dragging ? ' dragging' : '')}\n onPointerDown={e => { e.preventDefault(); setDragging(true); }}\n onDoubleClick={() => setLeftPct(50)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize · double-click to reset\"\n />\n\n <div className=\"exporter-pane exporter-right-pane\">\n <div className=\"exporter-right-split\">\n <div className=\"exporter-preview-section\">\n <Preview/>\n </div>\n <ExportFooter/>\n </div>\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectGrameneFieldCatalogIsLoading',\n 'selectGrameneFieldCatalogRaw',\n 'selectGrameneFieldCatalogShouldUpdate',\n 'doFetchGrameneFieldCatalog',\n ExporterViewCmp\n);\n","import React, { useState, useMemo } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst MAX_VISIBLE_PER_GROUP = 200;\n\nfunction collectFieldNames(group) {\n const names = [...(group.fields || [])];\n for (const s of group.subgroups || []) names.push(...collectFieldNames(s));\n return names;\n}\n\nfunction collectMatchingFieldNames(group) {\n const names = [...(group.matchingFields || [])];\n for (const s of group.subgroups || []) names.push(...collectMatchingFieldNames(s));\n return names;\n}\n\nfunction filterGroup(group, q, catalog) {\n const matchingFields = (group.fields || []).filter(name => {\n if (!q) return true;\n const f = catalog.fields[name];\n return name.toLowerCase().includes(q) || (f && f.label.toLowerCase().includes(q));\n });\n const groupLabelMatches = q && group.label && group.label.toLowerCase().includes(q);\n const subgroups = (group.subgroups || [])\n .map(s => filterGroup(s, groupLabelMatches ? '' : q, catalog))\n .filter(s => s);\n if (!q) return { ...group, matchingFields, subgroups };\n if (groupLabelMatches) {\n return {\n ...group,\n matchingFields: group.fields || [],\n subgroups: (group.subgroups || []).map(s => filterGroup(s, '', catalog))\n };\n }\n if (matchingFields.length === 0 && subgroups.length === 0) return null;\n return { ...group, matchingFields, subgroups };\n}\n\nconst FieldRow = ({ name, catalog, selectedSet, onToggle }) => {\n const f = catalog.fields[name];\n if (!f) return null;\n const linked = f.linkedFields;\n const checked = linked\n ? linked.every(n => selectedSet.has(n))\n : selectedSet.has(name);\n return (\n <li>\n <label title={name + (f.description ? '\\n' + f.description : '')}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => onToggle(name)}\n />\n <span className=\"exporter-field-label\">{f.label}</span>\n {f.multiValued && <span className=\"exporter-field-badge\">[]</span>}\n </label>\n </li>\n );\n};\n\nconst GroupNode = ({ group, depth, catalog, selectedSet, onToggle, onBulkSet, openMap, setOpen, forceOpen }) => {\n const matchingNames = collectMatchingFieldNames(group);\n const total = matchingNames.length;\n const isAllLinkedSelected = (name) => {\n const f = catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) return linked.every(n => selectedSet.has(n));\n return selectedSet.has(name);\n };\n const selectedCount = matchingNames.reduce((n, name) => n + (isAllLinkedSelected(name) ? 1 : 0), 0);\n const allSelected = total > 0 && selectedCount === total;\n const noneSelected = selectedCount === 0;\n const isOpen = forceOpen || openMap[group.id] || false;\n const visible = (group.matchingFields || []).slice(0, MAX_VISIBLE_PER_GROUP);\n const truncated = (group.matchingFields || []).length - visible.length;\n\n const expandLinked = (names) => {\n const out = [];\n for (const n of names) {\n const f = catalog.fields[n];\n if (f && f.linkedFields) out.push(...f.linkedFields);\n else out.push(n);\n }\n return out;\n };\n\n const handleBulk = (e, selected) => {\n e.stopPropagation();\n if (matchingNames.length === 0) return;\n onBulkSet(expandLinked(matchingNames), selected);\n };\n\n return (\n <div className=\"exporter-group\" style={{ marginLeft: depth > 0 ? '0.75rem' : 0 }}>\n <div className=\"exporter-group-header\" onClick={() => setOpen(group.id, !isOpen)}>\n <span className=\"exporter-group-chevron\">\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n <b>{group.label}</b>\n <span className=\"exporter-group-actions\">\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={allSelected || total === 0}\n onClick={e => handleBulk(e, true)}\n title=\"Select all fields in this group\"\n >All</button>\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={noneSelected}\n onClick={e => handleBulk(e, false)}\n title=\"Deselect all fields in this group\"\n >None</button>\n </span>\n <span className=\"exporter-group-count\">{selectedCount}/{total}</span>\n </div>\n {isOpen && (\n <>\n {(group.subgroups || []).map(sub => (\n <GroupNode\n key={sub.id}\n group={sub}\n depth={depth + 1}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n onBulkSet={onBulkSet}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {visible.length > 0 && (\n <ul className=\"exporter-group-fields\">\n {visible.map(name => (\n <FieldRow\n key={name}\n name={name}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n />\n ))}\n {truncated > 0 && (\n <li className=\"exporter-group-truncated\">\n <em>… {truncated} more. Refine search to see.</em>\n </li>\n )}\n </ul>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst FieldTreeCmp = props => {\n const { fieldCatalog: catalog, exporterSelectedFields, doToggleExporterField, doBulkSetExporterFields, query = '' } = props;\n const [openMap, setOpenMap] = useState({});\n\n const selectedSet = useMemo(() => new Set(exporterSelectedFields), [exporterSelectedFields]);\n\n const handleToggle = (name) => {\n const f = catalog && catalog.fields && catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) {\n const allSelected = linked.every(n => selectedSet.has(n));\n doBulkSetExporterFields(linked, !allSelected);\n } else {\n doToggleExporterField(name);\n }\n };\n\n const q = query.trim().toLowerCase();\n\n const filtered = useMemo(() => {\n if (!catalog || !catalog.groups) return [];\n return catalog.groups\n .map(g => filterGroup(g, q, catalog))\n .filter(g => g && ((g.matchingFields && g.matchingFields.length) || (g.subgroups && g.subgroups.length)));\n }, [catalog, q]);\n\n if (!catalog || !catalog.groups) {\n return <div className=\"exporter-panel-empty\">Loading field catalog…</div>;\n }\n\n const setOpen = (id, val) => setOpenMap(s => ({ ...s, [id]: val }));\n const forceOpen = !!q;\n\n return (\n <div className=\"exporter-field-tree\">\n <div className=\"exporter-field-tree-body\">\n {filtered.map(group => (\n <GroupNode\n key={group.id}\n group={group}\n depth={0}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={handleToggle}\n onBulkSet={doBulkSetExporterFields}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {filtered.length === 0 && (\n <div className=\"exporter-panel-empty\">No fields match \"{query}\".</div>\n )}\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'doToggleExporterField',\n 'doBulkSetExporterFields',\n FieldTreeCmp\n);\n","import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsArrowLeftShort, BsArrowRightShort, BsSliders } from 'react-icons/bs';\nimport { buildTableData, toJSON } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\nimport CutoffsModal from './CutoffsModal';\n\nconst PreviewCmp = props => {\n const {\n fieldCatalog: catalog,\n exporterSelectedFields: fields,\n exporterFormat: format,\n exporterPreview: preview,\n expressionStudies,\n expressionSamples,\n grameneTaxonomy,\n gramenePathways,\n ontologies,\n exporterCutoffs,\n doSetExporterFormat,\n doReorderExporterFields,\n doClearExporterFields,\n doSetExporterCutoffs,\n doEnsureOntologyRecords,\n doRequestGramenePathways\n } = props;\n\n const [showCutoffs, setShowCutoffs] = useState(false);\n const docs = preview.data || [];\n\n const ancestorFieldsSelected = useMemo(\n () => fields.filter(n => ANCESTOR_FIELD_MAP[n]),\n [fields]\n );\n\n useEffect(() => {\n if (ancestorFieldsSelected.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFieldsSelected);\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue; // already cached globally\n if (ontKey === 'pathways') {\n if (doRequestGramenePathways) doRequestGramenePathways(ids);\n continue;\n }\n if (doEnsureOntologyRecords) doEnsureOntologyRecords(ontKey, ids);\n }\n }, [docs, ancestorFieldsSelected, doEnsureOntologyRecords, doRequestGramenePathways]);\n\n if (fields.length === 0) {\n return (\n <div className=\"exporter-preview-empty\">\n <em>Select at least one field to preview.</em>\n </div>\n );\n }\n\n const renderStatus = () => {\n if (preview.status === 'loading') return <small className=\"exporter-preview-status\">Loading…</small>;\n if (preview.status === 'error') return <small className=\"exporter-preview-status error\">Error: {preview.error}</small>;\n if (preview.status === 'stale') return <small className=\"exporter-preview-status\">Refreshing…</small>;\n if (preview.status === 'idle') return <small className=\"exporter-preview-status\">Idle</small>;\n return null;\n };\n\n const resolverCtx = {\n expressionStudies,\n expressionSamples,\n taxonomy: grameneTaxonomy,\n pathways: gramenePathways,\n ontologies,\n cutoffs: exporterCutoffs\n };\n\n const moveField = (name, delta) => {\n const idx = fields.indexOf(name);\n if (idx === -1) return;\n const target = idx + delta;\n if (target < 0 || target >= fields.length) return;\n const next = [...fields];\n [next[idx], next[target]] = [next[target], next[idx]];\n doReorderExporterFields(next);\n };\n\n return (\n <div className=\"exporter-preview\">\n <div className=\"exporter-preview-toolbar\">\n <span className=\"exporter-preview-title\"><b>Preview</b> (first 20 genes)</span>\n <span className=\"exporter-preview-fields-count\">\n {fields.length} field{fields.length === 1 ? '' : 's'}\n {fields.length > 0 && (\n <button\n className=\"btn btn-sm btn-link exporter-clear-btn\"\n onClick={doClearExporterFields}\n >clear</button>\n )}\n </span>\n <span className=\"exporter-preview-format\">\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"tsv\"\n checked={format === 'tsv'}\n onChange={() => doSetExporterFormat('tsv')}\n /> TSV\n </label>\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"json\"\n checked={format === 'json'}\n onChange={() => doSetExporterFormat('json')}\n /> JSON\n </label>\n </span>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-light exporter-cutoffs-btn\"\n onClick={() => setShowCutoffs(true)}\n title=\"Expression cutoffs\"\n >\n <BsSliders/> Cutoffs\n </button>\n {renderStatus()}\n </div>\n {showCutoffs && (\n <CutoffsModal\n cutoffs={exporterCutoffs}\n onApply={doSetExporterCutoffs}\n onClose={() => setShowCutoffs(false)}\n />\n )}\n <div className=\"exporter-preview-body\">\n {format === 'tsv' ? (\n <TSVTable\n docs={docs}\n fields={fields}\n catalog={catalog}\n resolverCtx={resolverCtx}\n onMoveField={moveField}\n />\n ) : (\n <pre className=\"exporter-preview-json\">{toJSON(docs, fields, resolverCtx)}</pre>\n )}\n </div>\n </div>\n );\n};\n\nconst MIN_COL_WIDTH = 40;\n\nconst TSVTable = ({ docs, fields, catalog, resolverCtx, onMoveField }) => {\n const { header, headerKeys, rows } = buildTableData(docs, fields, catalog, resolverCtx);\n const reorderableCount = fields.length;\n const [colWidths, setColWidths] = useState({});\n const thRefs = useRef({});\n\n const startResize = (key) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n const th = thRefs.current[key];\n const startWidth = (th && th.getBoundingClientRect().width) || 100;\n const startX = e.clientX;\n const onMove = (ev) => {\n const delta = ev.clientX - startX;\n const next = Math.max(MIN_COL_WIDTH, startWidth + delta);\n setColWidths(prev => ({ ...prev, [key]: next }));\n };\n const onUp = () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = '';\n };\n document.body.style.userSelect = 'none';\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n };\n\n return (\n <div className=\"exporter-preview-tsv-scroll\">\n <table className=\"exporter-preview-tsv\">\n <thead>\n <tr>\n {header.map((h, i) => {\n const key = headerKeys[i];\n const fieldIdx = fields.indexOf(key);\n const reorderable = fieldIdx !== -1;\n const w = colWidths[key];\n const thStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <th key={key} title={key} style={thStyle} ref={el => { thRefs.current[key] = el; }}>\n <div className=\"exporter-preview-th-inner\">\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === 0}\n onClick={() => onMoveField(key, -1)}\n title=\"Move left\"\n ><BsArrowLeftShort/></button>\n <span className=\"exporter-preview-th-label\">{h}</span>\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === reorderableCount - 1}\n onClick={() => onMoveField(key, 1)}\n title=\"Move right\"\n ><BsArrowRightShort/></button>\n </div>\n <span\n className=\"exporter-preview-col-resizer\"\n onPointerDown={startResize(key)}\n onDoubleClick={() => setColWidths(prev => { const n = { ...prev }; delete n[key]; return n; })}\n title=\"Drag to resize · double-click to reset\"\n />\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, r) => (\n <tr key={r}>\n {row.map((c, i) => {\n const key = headerKeys[i];\n const w = colWidths[key];\n const tdStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <td key={key} title={c} style={tdStyle}>{c}</td>\n );\n })}\n </tr>\n ))}\n {rows.length === 0 && (\n <tr>\n <td colSpan={header.length} className=\"exporter-preview-empty-row\">\n <em>No rows.</em>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterPreview',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'selectOntologies',\n 'selectExporterCutoffs',\n 'doSetExporterFormat',\n 'doReorderExporterFields',\n 'doClearExporterFields',\n 'doSetExporterCutoffs',\n 'doEnsureOntologyRecords',\n 'doRequestGramenePathways',\n PreviewCmp\n);\n","import React, { useState, useEffect } from 'react';\n\nconst parseNumberOrNull = (v) => {\n if (v === '' || v === null || v === undefined) return null;\n const n = +v;\n return Number.isFinite(n) ? n : null;\n};\n\nconst CutoffsModal = ({ cutoffs, onApply, onClose }) => {\n const [exprMinTPM, setExprMinTPM] = useState(\n cutoffs && cutoffs.exprMinTPM != null ? String(cutoffs.exprMinTPM) : ''\n );\n const [diffMaxPval, setDiffMaxPval] = useState(\n cutoffs && cutoffs.diffMaxPval != null ? String(cutoffs.diffMaxPval) : ''\n );\n\n useEffect(() => {\n const onKey = (e) => { if (e.key === 'Escape') onClose(); };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n const apply = () => {\n onApply({\n exprMinTPM: parseNumberOrNull(exprMinTPM),\n diffMaxPval: parseNumberOrNull(diffMaxPval)\n });\n onClose();\n };\n\n return (\n <div className=\"exporter-modal-backdrop\" onClick={onClose}>\n <div className=\"exporter-modal\" onClick={e => e.stopPropagation()} role=\"dialog\" aria-modal=\"true\">\n <div className=\"exporter-modal-header\">\n <b>Expression cutoffs</b>\n <button type=\"button\" className=\"exporter-modal-close\" onClick={onClose} aria-label=\"Close\">×</button>\n </div>\n <div className=\"exporter-modal-body\">\n <div className=\"exporter-modal-field\">\n <label>\n Minimum TPM (gene expression)\n <input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n value={exprMinTPM}\n onChange={e => setExprMinTPM(e.target.value)}\n placeholder=\"no minimum\"\n />\n </label>\n <small>Exclude expression rows with TPM below this value. Blank disables the cutoff.</small>\n </div>\n <div className=\"exporter-modal-field\">\n <label>\n Maximum p-value (differential expression)\n <input\n type=\"number\"\n step=\"0.001\"\n min=\"0\"\n max=\"1\"\n value={diffMaxPval}\n onChange={e => setDiffMaxPval(e.target.value)}\n placeholder=\"no maximum\"\n />\n </label>\n <small>Exclude diff-expression contrasts with p-value above this. Blank disables the cutoff.</small>\n </div>\n </div>\n <div className=\"exporter-modal-footer\">\n <button type=\"button\" className=\"btn btn-sm btn-link\" onClick={onClose}>Cancel</button>\n <button type=\"button\" className=\"btn btn-sm btn-primary\" onClick={apply}>Apply</button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default CutoffsModal;\n","import React from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Modal, Button, ProgressBar } from 'react-bootstrap';\n\nconst ExportFooterCmp = props => {\n const {\n exporterSelectedFields,\n exporterFormat,\n exporterDownload: dl,\n doStartExporterDownload,\n doCancelExporterDownload,\n doResetExporterDownload\n } = props;\n\n const inFlight = dl.status === 'preparing' || dl.status === 'downloading';\n const pct = dl.total > 0\n ? Math.min(100, Math.round((dl.progress / dl.total) * 100))\n : 0;\n\n const canStart = !inFlight && exporterSelectedFields.length > 0;\n\n return (\n <>\n <div className=\"exporter-footer\">\n <div className=\"exporter-footer-summary\">\n <small>\n {exporterSelectedFields.length} field{exporterSelectedFields.length === 1 ? '' : 's'} selected\n · format: <b>{exporterFormat.toUpperCase()}</b>\n </small>\n </div>\n <Button\n variant=\"primary\"\n size=\"sm\"\n disabled={!canStart}\n onClick={doStartExporterDownload}\n >\n Download {exporterFormat.toUpperCase()}\n </Button>\n </div>\n\n <Modal show={dl.status !== 'idle'} onHide={doResetExporterDownload} centered backdrop=\"static\">\n <Modal.Header closeButton={!inFlight}>\n <Modal.Title>\n {dl.status === 'preparing' && 'Preparing export…'}\n {dl.status === 'downloading' && 'Exporting…'}\n {dl.status === 'done' && 'Export complete'}\n {dl.status === 'cancelled' && 'Export cancelled'}\n {dl.status === 'error' && 'Export failed'}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {inFlight && (\n <>\n <ProgressBar\n now={pct}\n label={dl.total > 0 ? `${dl.progress.toLocaleString()} / ${dl.total.toLocaleString()}` : 'Counting…'}\n striped\n animated\n />\n <div style={{ marginTop: '0.5rem', fontSize: '0.85rem', color: '#666' }}>\n Fetching genes in pages of 1000. This may take a while for large result sets.\n </div>\n </>\n )}\n {dl.status === 'done' && (\n <div>\n Wrote <b>{dl.progress.toLocaleString()}</b> genes to disk.\n </div>\n )}\n {dl.status === 'cancelled' && (\n <div>\n Stopped at <b>{dl.progress.toLocaleString()}</b> / {dl.total.toLocaleString()} genes. No file was saved.\n </div>\n )}\n {dl.status === 'error' && (\n <div className=\"text-danger\">{dl.error}</div>\n )}\n </Modal.Body>\n <Modal.Footer>\n {inFlight ? (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={doCancelExporterDownload}>\n Cancel\n </Button>\n ) : (\n <Button variant=\"secondary\" size=\"sm\" onClick={doResetExporterDownload}>\n Close\n </Button>\n )}\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nexport default connect(\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterDownload',\n 'doStartExporterDownload',\n 'doCancelExporterDownload',\n 'doResetExporterDownload',\n ExportFooterCmp\n);\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Tabs, Tab, Button, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\nimport FieldsModal from './FieldsModal';\nimport ExprTable from './ExprTable';\nimport ParallelCoordsPlot from './ParallelCoordsPlot';\nimport './styles.css';\n\nfunction speciesTaxonId(tid) {\n const n = +tid;\n return n > 1000000 ? Math.floor(n / 1000) : n;\n}\n\nfunction genomeName(grameneMaps, tid) {\n if (!grameneMaps) return tid;\n const direct = grameneMaps[tid];\n if (direct && direct.display_name) return direct.display_name;\n const sp = grameneMaps[speciesTaxonId(tid)];\n if (sp && sp.display_name) return sp.display_name;\n return tid;\n}\n\nconst ExprVizViewCmp = props => {\n const {\n exprVizPivot: pivot,\n exprViz,\n exprVizActiveTaxon: activeTaxon,\n grameneMaps,\n expressionStudies,\n expressionSamples,\n doSetExprVizActiveTaxon,\n doToggleExprVizFieldsModal,\n doFetchExprVizData\n } = props;\n\n const studiesFor = tid => {\n if (!expressionStudies) return [];\n return expressionStudies[tid] || expressionStudies[speciesTaxonId(tid)] || [];\n };\n\n const taxa = useMemo(() => {\n const ids = Object.keys(pivot.data || {});\n if (!grameneMaps) return ids;\n return ids.sort((a, b) => {\n const ma = grameneMaps[a] || grameneMaps[speciesTaxonId(a)];\n const mb = grameneMaps[b] || grameneMaps[speciesTaxonId(b)];\n return ((ma && ma.left_index) || 0) - ((mb && mb.left_index) || 0);\n });\n }, [pivot.data, grameneMaps]);\n\n useEffect(() => {\n if (taxa.length === 0) return;\n if (!activeTaxon || !taxa.includes(String(activeTaxon))) {\n doSetExprVizActiveTaxon(taxa[0]);\n }\n }, [taxa, activeTaxon, doSetExprVizActiveTaxon]);\n\n if (pivot.status === 'loading') {\n return <div className=\"exprviz-view\"><em>Loading studies…</em></div>;\n }\n if (pivot.status === 'error') {\n return <div className=\"exprviz-view\"><em>Error: {pivot.error}</em></div>;\n }\n if (taxa.length === 0) {\n return <div className=\"exprviz-view\"><em>No expression studies for current results.</em></div>;\n }\n\n return (\n <div className=\"exprviz-view\">\n <Tabs\n activeKey={activeTaxon || taxa[0]}\n onSelect={k => doSetExprVizActiveTaxon(k)}\n className=\"exprviz-tabs\"\n >\n {taxa.map(tid => {\n const studies = studiesFor(tid);\n const taxName = genomeName(grameneMaps, tid);\n const geneCount = pivot.data[tid] || 0;\n return (\n <Tab\n key={tid}\n eventKey={tid}\n title={`${taxName} (${studies.length} studies · ${geneCount} genes)`}\n >\n <TaxonPanel\n taxon={tid}\n studies={studies}\n expressionSamples={expressionSamples}\n tabState={exprViz.byTaxon[tid]}\n onOpenFields={() => doToggleExprVizFieldsModal(tid, true)}\n onLoad={() => doFetchExprVizData(tid)}\n onReorder={(next) => props.doReorderExprVizFields(tid, next)}\n onAddRangeQuery={props.doAddGrameneRangeQuery}\n />\n </Tab>\n );\n })}\n </Tabs>\n <FieldsModal/>\n </div>\n );\n};\n\n// Compact axis labels for the parallel-coords plot. The raw Solr field name\n// (e.g. \"E_CURD_148_g5__expr\") is uninformative; we prefer the assay's\n// factor labels, falling back to \"organism part\" then to the group id.\n// `full` is exposed via an SVG <title> so the user can hover to see study,\n// group, and every factor/characteristic.\nconst AXIS_LABEL_MAX = 22;\n\nfunction truncateLabel(s, n) {\n if (!s) return '';\n return s.length > n ? s.slice(0, n - 1) + '…' : s;\n}\n\nfunction compactAssayLabel(assay, group) {\n if (!assay) return group || '';\n const factorVals = (assay.factor || []).map(f => f && f.label).filter(Boolean);\n if (factorVals.length) return factorVals.join('; ');\n const chars = assay.characteristic || [];\n const organ = chars.find(c => c && c.type === 'organism part');\n if (organ && organ.label) return organ.label;\n const firstChar = chars.find(c => c && c.label);\n if (firstChar) return firstChar.label;\n return group || '';\n}\n\nfunction assayPairs(list) {\n return (list || [])\n .filter(x => x && x.label)\n .map(x => ({ name: x.type || '', value: x.label }));\n}\n\nfunction buildAxisLabels(fields, studies, expressionSamples) {\n const labels = {};\n if (!fields) return labels;\n const studyById = {};\n (studies || []).forEach(s => { if (s && s._id) studyById[s._id] = s; });\n const findAssay = (studyId, group) => {\n const arr = expressionSamples && expressionSamples[studyId];\n return arr ? arr.find(a => a.group === group) : null;\n };\n for (const f of fields) {\n const m = f.match(/^(.+?)_g(\\d+)__expr$/);\n if (!m) {\n labels[f] = {\n short: truncateLabel(f.replace(/__expr$/, ''), AXIS_LABEL_MAX),\n structured: { studyTitle: f, group: '', factors: [], characteristics: [] }\n };\n continue;\n }\n const expId = m[1].replace(/_/g, '-');\n const group = 'g' + m[2];\n const assay = findAssay(expId, group);\n const study = studyById[expId];\n const studyName = (study && study.description) || expId;\n labels[f] = {\n short: truncateLabel(compactAssayLabel(assay, group), AXIS_LABEL_MAX),\n structured: {\n studyTitle: studyName,\n group,\n factors: assayPairs(assay && assay.factor),\n characteristics: assayPairs(assay && assay.characteristic)\n }\n };\n }\n return labels;\n}\n\nfunction rowMatchesSelections(row, selections) {\n for (const f of Object.keys(selections)) {\n const v = row[f];\n if (v == null || Array.isArray(v)) return false;\n const n = +v;\n if (!Number.isFinite(n)) return false;\n const [lo, hi] = selections[f];\n if (n < lo || n > hi) return false;\n }\n return true;\n}\n\nfunction fmt(n) {\n if (!Number.isFinite(n)) return String(n);\n const a = Math.abs(n);\n if (a !== 0 && (a < 0.001 || a >= 1e6)) return n.toExponential(3);\n return Number(n.toFixed(4)).toString();\n}\n\nfunction tsvCell(v) {\n if (v == null) return '';\n if (Array.isArray(v)) return v.join(',');\n const s = typeof v === 'object' ? JSON.stringify(v) : String(v);\n return s.replace(/[\\t\\r\\n]+/g, ' ');\n}\n\nfunction downloadTsv(filename, rows, fields) {\n const cols = ['id', 'name', ...fields];\n const headerLabels = ['id', 'name', ...fields.map(f => f.replace(/__expr$/, ''))];\n const lines = [headerLabels.join('\\t')];\n for (const r of rows) lines.push(cols.map(c => tsvCell(r[c])).join('\\t'));\n const blob = new Blob([lines.join('\\n') + '\\n'], { type: 'text/tab-separated-values' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\nconst TaxonPanel = ({ taxon, studies, expressionSamples, tabState, onOpenFields, onLoad, onReorder, onAddRangeQuery }) => {\n const selected = (tabState && tabState.selectedFields) || [];\n const rows = (tabState && tabState.rows) || [];\n const fetchInfo = (tabState && tabState.fetch) || { status: 'idle', total: 0 };\n const [scale, setScale] = useState('linear');\n const [selections, setSelections] = useState({});\n const [clearVersion, setClearVersion] = useState(0);\n const [hoveredId, setHoveredId] = useState(null);\n const [plotHeight, setPlotHeight] = useState(320);\n const resizeStateRef = useRef(null);\n\n // Drag the horizontal separator between the plot and the table to retune\n // their relative sizes. Bounded so neither pane disappears entirely.\n const startResize = (e) => {\n e.preventDefault();\n resizeStateRef.current = { startY: e.clientY, startHeight: plotHeight };\n const onMove = (ev) => {\n const s = resizeStateRef.current;\n if (!s) return;\n const next = Math.max(120, Math.min(1200, s.startHeight + (ev.clientY - s.startY)));\n setPlotHeight(next);\n };\n const onUp = () => {\n resizeStateRef.current = null;\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n document.body.style.cursor = 'row-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n };\n\n const hasBrush = Object.keys(selections).length > 0;\n const filteredRows = useMemo(() => {\n if (!hasBrush) return rows;\n return rows.filter(r => rowMatchesSelections(r, selections));\n }, [rows, selections, hasBrush]);\n\n // Drop fields with no numeric data in the loaded rows so empty axes/columns\n // don't clutter the visualization. Selected-but-empty fields stay in the\n // underlying selection so a future load can repopulate them.\n const visibleFields = useMemo(() => {\n if (rows.length === 0 || selected.length === 0) return selected;\n return selected.filter(f => rows.some(r => {\n const v = r[f];\n return v != null && !Array.isArray(v) && Number.isFinite(+v);\n }));\n }, [rows, selected]);\n\n const handleReorder = onReorder\n ? (newVisibleOrder) => {\n const visibleSet = new Set(newVisibleOrder);\n const hidden = selected.filter(f => !visibleSet.has(f));\n onReorder([...newVisibleOrder, ...hidden]);\n }\n : undefined;\n\n const axisLabels = useMemo(\n () => buildAxisLabels(visibleFields, studies, expressionSamples),\n [visibleFields, studies, expressionSamples]\n );\n\n useEffect(() => {\n if (rows.length === 0 && hasBrush) {\n setSelections({});\n setClearVersion(v => v + 1);\n }\n }, [rows.length, hasBrush]);\n\n return (\n <div className=\"exprviz-tab-panel\">\n <div className=\"exprviz-toolbar\">\n <Button size=\"sm\" onClick={onOpenFields}>\n Select fields ({selected.length} selected, {studies.length} studies)\n </Button>\n <Button\n size=\"sm\"\n variant=\"primary\"\n disabled={selected.length === 0 || fetchInfo.status === 'loading'}\n onClick={onLoad}\n >\n {fetchInfo.status === 'loading' ? 'Loading…' : 'Load data'}\n </Button>\n <ToggleButtonGroup\n type=\"radio\"\n name={`exprviz-scale-${taxon}`}\n size=\"sm\"\n value={scale}\n onChange={setScale}\n >\n <ToggleButton id={`exprviz-scale-${taxon}-lin`} value=\"linear\" variant=\"outline-secondary\">Linear</ToggleButton>\n <ToggleButton id={`exprviz-scale-${taxon}-log`} value=\"log\" variant=\"outline-secondary\">Log</ToggleButton>\n </ToggleButtonGroup>\n <Button\n size=\"sm\"\n variant=\"outline-secondary\"\n disabled={!hasBrush}\n onClick={() => { setClearVersion(v => v + 1); setSelections({}); }}\n >\n Clear brushes\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline-secondary\"\n disabled={filteredRows.length === 0 || visibleFields.length === 0}\n onClick={() => downloadTsv(`expression_${taxon}.tsv`, filteredRows, visibleFields)}\n title=\"Download the visible rows and columns as tab-delimited text\"\n >\n Download TSV\n </Button>\n <Button\n size=\"sm\"\n variant=\"success\"\n disabled={!hasBrush || !onAddRangeQuery}\n onClick={() => {\n const terms = Object.keys(selections).map(field => {\n const [lo, hi] = selections[field];\n return {\n category: 'Expression',\n name: `${field}: ${fmt(lo)}–${fmt(hi)}`,\n fq_field: field,\n fq_value: `[${lo} TO ${hi}]`\n };\n });\n onAddRangeQuery(terms);\n }}\n title=\"Add brush ranges as an AND-conjunction filter on the search\"\n >\n Apply as filter\n </Button>\n <span className=\"exprviz-status\">\n {hasBrush ? `${filteredRows.length} of ${rows.length}` : rows.length}\n {fetchInfo.total ? ` / ${fetchInfo.total}` : ''} genes\n {hasBrush ? ' (brushed)' : ' loaded'}\n </span>\n </div>\n <div className=\"exprviz-body\">\n <div className=\"exprviz-plot\" style={{ height: plotHeight }}>\n <ParallelCoordsPlot\n rows={rows}\n fields={visibleFields}\n scale={scale}\n onBrushChange={setSelections}\n onReorder={handleReorder}\n clearVersion={clearVersion}\n hoveredId={hoveredId}\n axisLabels={axisLabels}\n />\n </div>\n <div\n className=\"exprviz-resizer\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-label=\"Resize plot\"\n onMouseDown={startResize}\n title=\"Drag to resize\"\n />\n <div className=\"exprviz-table\">\n <ExprTable\n rows={filteredRows}\n fields={visibleFields}\n onReorder={handleReorder}\n studies={studies}\n expressionSamples={expressionSamples}\n onHoverRow={setHoveredId}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectExprViz',\n 'selectExprVizPivot',\n 'selectExprVizActiveTaxon',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'doSetExprVizActiveTaxon',\n 'doToggleExprVizFieldsModal',\n 'doFetchExprVizData',\n 'doReorderExprVizFields',\n 'doAddGrameneRangeQuery',\n ExprVizViewCmp\n);\n","import React, { useState, useMemo, useEffect } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Modal, Button, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\n\nfunction speciesTaxonId(tid) {\n const n = +tid;\n return n > 1000000 ? Math.floor(n / 1000) : n;\n}\n\nconst EXPERIMENT_KEYS = [\n { key: 'exp:study', label: 'Study' },\n { key: 'exp:type', label: 'Study type' },\n { key: 'exp:organism', label: 'Organism' }\n];\n\n// One record per expression field (one sample group within one study).\n// `props` is a flat map of property-key → value used for filtering and display.\nfunction buildFieldRecords(taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps) {\n const records = [];\n const factorTypes = new Set();\n const charTypes = new Set();\n if (!expressionSamples || !expressionStudies) return { records, factorTypes: [], charTypes: [] };\n\n const studyById = {};\n const list = expressionStudies[taxon] || expressionStudies[speciesTaxonId(taxon)] || [];\n list.forEach(s => { studyById[s._id] = s; });\n\n for (const studyId of studyIds) {\n const study = studyById[studyId];\n if (!study) continue;\n const samples = expressionSamples[studyId];\n if (!samples) continue;\n\n const byGroup = {};\n for (const s of samples) if (!byGroup[s.group]) byGroup[s.group] = s;\n\n for (const group of Object.keys(byGroup)) {\n const sample = byGroup[group];\n const fieldName = `${studyId.replace(/-/g, '_')}_${group}__expr`;\n if (fieldCatalog && fieldCatalog.fields && !fieldCatalog.fields[fieldName]) continue;\n\n const props = {};\n props['exp:study'] = study.description || studyId;\n props['exp:type'] = study.type || '(unknown)';\n const taxon_id = study.taxon_id;\n const taxName = grameneMaps && (grameneMaps[taxon_id] || grameneMaps[speciesTaxonId(taxon_id)]);\n props['exp:organism'] = (taxName && taxName.display_name) || String(taxon_id);\n\n const usedFactorTypes = new Set();\n (sample.factor || []).forEach(f => {\n props[`fac:${f.type}`] = f.label;\n factorTypes.add(f.type);\n usedFactorTypes.add(f.type);\n });\n (sample.characteristic || []).forEach(c => {\n if (usedFactorTypes.has(c.type)) return; // factor takes precedence\n props[`char:${c.type}`] = c.label;\n charTypes.add(c.type);\n });\n\n records.push({ fieldName, studyId, group, props });\n }\n }\n return {\n records,\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n}\n\nfunction fieldMatches(field, selections, excludeKey) {\n for (const key of Object.keys(selections)) {\n if (key === excludeKey) continue;\n const values = selections[key];\n if (!values || values.size === 0) continue;\n const v = field.props[key];\n if (v == null || !values.has(v)) return false;\n }\n return true;\n}\n\nfunction valueCounts(records, key, selections) {\n const counts = new Map();\n for (const f of records) {\n if (!fieldMatches(f, selections, key)) continue;\n const v = f.props[key];\n if (v == null) continue;\n counts.set(v, (counts.get(v) || 0) + 1);\n }\n return counts;\n}\n\nfunction labelForKey(key, tree) {\n for (const grp of tree) {\n for (const t of grp.types) if (t.key === key) return t.label;\n }\n return key;\n}\n\nconst FieldsModalCmp = props => {\n const {\n fieldCatalog,\n exprViz,\n expressionStudies,\n expressionSamples,\n grameneMaps,\n doToggleExprVizFieldsModal,\n doSetExprVizFields,\n doFetchExprVizFieldExistence\n } = props;\n\n const taxon = Object.keys(exprViz.byTaxon).find(t => exprViz.byTaxon[t].fieldsModalOpen);\n const open = !!taxon;\n const availableAttrs = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].availableAttrs;\n\n const studyIds = useMemo(() => {\n if (!taxon || !expressionStudies) return [];\n const list = expressionStudies[taxon] || expressionStudies[speciesTaxonId(taxon)] || [];\n let ids = list.map(s => s._id);\n if (availableAttrs) {\n const allow = new Set(availableAttrs);\n ids = ids.filter(id => allow.has(id));\n }\n return ids;\n }, [taxon, expressionStudies, availableAttrs]);\n\n const allRecords = useMemo(\n () => buildFieldRecords(taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps),\n [taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps]\n );\n\n const candidateFields = useMemo(\n () => allRecords.records.map(r => r.fieldName),\n [allRecords]\n );\n\n // Trigger the field-existence facet check whenever the modal is open and\n // the candidate field list is known. The bundle caches per (q, taxon, fields).\n useEffect(() => {\n if (open && taxon && candidateFields.length > 0) {\n doFetchExprVizFieldExistence(taxon, candidateFields);\n }\n }, [open, taxon, candidateFields, doFetchExprVizFieldExistence]);\n\n const fieldExistence = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].fieldExistence;\n const existenceStatus = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].existenceStatus;\n\n // Once existence counts are loaded, drop fields with no data in the current\n // result set. Until then, render with the full candidate set so the modal\n // doesn't flash empty during the precheck.\n const { records, factorTypes, charTypes } = useMemo(() => {\n if (!fieldExistence) return allRecords;\n const live = new Set(Object.keys(fieldExistence).filter(f => fieldExistence[f] > 0));\n const filtered = allRecords.records.filter(r => live.has(r.fieldName));\n const factorTypes = new Set();\n const charTypes = new Set();\n for (const r of filtered) {\n for (const k of Object.keys(r.props)) {\n if (k.startsWith('fac:')) factorTypes.add(k.slice(4));\n else if (k.startsWith('char:')) charTypes.add(k.slice(5));\n }\n }\n return {\n records: filtered,\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n }, [allRecords, fieldExistence]);\n\n const propTree = useMemo(() => [\n { group: 'experiment', label: 'Experiment', types: EXPERIMENT_KEYS },\n { group: 'factors', label: 'Factors', types: factorTypes.map(t => ({ key: `fac:${t}`, label: t })) },\n { group: 'characteristics', label: 'Characteristics', types: charTypes.map(t => ({ key: `char:${t}`, label: t })) }\n ], [factorTypes, charTypes]);\n\n const [selections, setSelections] = useState({});\n const [expandedKey, setExpandedKey] = useState(null);\n const [collapsedGroups, setCollapsedGroups] = useState({});\n const [valueSort, setValueSort] = useState('count');\n const [orderedSelectedKeys, setOrderedSelectedKeys] = useState([]);\n const [searchQuery, setSearchQuery] = useState('');\n const searchLc = searchQuery.trim().toLowerCase();\n const isSearching = searchLc.length > 0;\n\n // Distinct values per property type, ignoring the type's own selection but\n // applying every other selected type. Counts shown next to a property type\n // reflect \"how many distinct values exist among the fields currently\n // matching the rest of the filter.\"\n const valueSetByKey = useMemo(() => {\n const allKeys = new Set();\n for (const r of records) for (const k of Object.keys(r.props)) allKeys.add(k);\n const m = {};\n for (const key of allKeys) {\n const set = new Set();\n for (const r of records) {\n if (!fieldMatches(r, selections, key)) continue;\n const v = r.props[key];\n if (v != null) set.add(v);\n }\n m[key] = set;\n }\n return m;\n }, [records, selections]);\n\n // Distinct values per property type across the unfiltered candidate set.\n // A type with a single value across every record can't discriminate (e.g.\n // \"Organism\" when every field belongs to the same species), so we hide it\n // from the property tree.\n const totalValueCountByKey = useMemo(() => {\n const m = {};\n for (const r of records) {\n for (const [k, v] of Object.entries(r.props)) {\n if (v == null) continue;\n if (!m[k]) m[k] = new Set();\n m[k].add(v);\n }\n }\n return m;\n }, [records]);\n\n // Reset state when modal (re)opens for a taxon.\n useEffect(() => {\n if (open && taxon) {\n setSelections({});\n setExpandedKey(null);\n setCollapsedGroups({});\n setOrderedSelectedKeys([]);\n setSearchQuery('');\n }\n }, [open, taxon]);\n\n // Keep orderedSelectedKeys in sync with selections (preserves the order in\n // which the user first selected each property type).\n useEffect(() => {\n setOrderedSelectedKeys(prev => {\n const active = Object.keys(selections);\n const activeSet = new Set(active);\n const kept = prev.filter(k => activeSet.has(k));\n const newOnes = active.filter(k => !prev.includes(k));\n return [...kept, ...newOnes];\n });\n }, [selections]);\n\n const matchingFields = useMemo(\n () => records.filter(r => fieldMatches(r, selections, null)),\n [records, selections]\n );\n\n if (!open) return null;\n\n const toggleValue = (key, value) => {\n setSelections(prev => {\n const next = { ...prev };\n const set = new Set(next[key] || []);\n if (set.has(value)) set.delete(value); else set.add(value);\n if (set.size === 0) delete next[key]; else next[key] = set;\n return next;\n });\n };\n\n const clearTypeSelection = (key) => {\n setSelections(prev => {\n if (!prev[key]) return prev;\n const next = { ...prev };\n delete next[key];\n return next;\n });\n };\n\n const toggleGroup = (g) => setCollapsedGroups(prev => ({ ...prev, [g]: !prev[g] }));\n\n const renderValues = (key, typeLabelMatches) => {\n const counts = valueCounts(records, key, selections);\n let entries = Array.from(counts.entries());\n if (isSearching && !typeLabelMatches) {\n entries = entries.filter(([v]) => String(v).toLowerCase().includes(searchLc));\n }\n if (valueSort === 'name') entries.sort((a, b) => String(a[0]).localeCompare(String(b[0])));\n else entries.sort((a, b) => b[1] - a[1] || String(a[0]).localeCompare(String(b[0])));\n const sel = selections[key] || new Set();\n\n return (\n <div className=\"exprviz-tree-values\">\n <div className=\"exprviz-values-toolbar\">\n <ToggleButtonGroup\n type=\"radio\"\n name={`exprviz-vsort-${key}`}\n size=\"sm\"\n value={valueSort}\n onChange={setValueSort}\n >\n <ToggleButton id={`exprviz-vsort-name-${key}`} value=\"name\" variant=\"outline-secondary\">Name</ToggleButton>\n <ToggleButton id={`exprviz-vsort-count-${key}`} value=\"count\" variant=\"outline-secondary\">Count</ToggleButton>\n </ToggleButtonGroup>\n {sel.size > 0 && (\n <Button size=\"sm\" variant=\"link\" onClick={() => clearTypeSelection(key)}>clear</Button>\n )}\n </div>\n {entries.map(([v, c]) => (\n <label key={v} className=\"exprviz-tree-value\">\n <input type=\"checkbox\" checked={sel.has(v)} onChange={() => toggleValue(key, v)} />\n <span className=\"exprviz-tree-value-label\" title={v}>{v}</span>\n <span className=\"exprviz-tree-value-count\">{c}</span>\n </label>\n ))}\n {entries.length === 0 && <em className=\"exprviz-tree-empty\">No values</em>}\n </div>\n );\n };\n\n return (\n <Modal show={open} onHide={() => doToggleExprVizFieldsModal(taxon, false)} size=\"xl\" scrollable>\n <Modal.Header closeButton>\n <Modal.Title>\n Filter expression fields ({matchingFields.length} of {records.length} match)\n {existenceStatus === 'loading' && (\n <span className=\"exprviz-modal-loading\"> · checking field availability…</span>\n )}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"exprviz-fields-layout\">\n <div className=\"exprviz-tree\">\n <input\n type=\"text\"\n className=\"exprviz-tree-search\"\n placeholder=\"Search property types and values…\"\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n />\n {propTree.map(grp => {\n const typeRows = grp.types.map(t => {\n // Hide property types that can't discriminate among the\n // candidates: zero values, or a single value shared by every\n // record. The selection-aware count (valueSetByKey) is what\n // we display; the unfiltered count gates visibility so a type\n // doesn't pop in/out as the user clicks values.\n const totalDistinct = (totalValueCountByKey[t.key] && totalValueCountByKey[t.key].size) || 0;\n if (totalDistinct < 2) return null;\n const numValues = (valueSetByKey[t.key] && valueSetByKey[t.key].size) || 0;\n if (numValues === 0) return null;\n const typeLabelMatches = isSearching && t.label.toLowerCase().includes(searchLc);\n let matchingValueCount = numValues;\n if (isSearching && !typeLabelMatches) {\n const vset = valueSetByKey[t.key] || new Set();\n matchingValueCount = 0;\n for (const v of vset) if (String(v).toLowerCase().includes(searchLc)) matchingValueCount++;\n if (matchingValueCount === 0) return null;\n }\n const sel = selections[t.key];\n const selCount = sel ? sel.size : 0;\n const isExpanded = isSearching ? !typeLabelMatches : (expandedKey === t.key);\n return (\n <div key={t.key} className={`exprviz-tree-type${selCount > 0 ? ' is-active' : ''}`}>\n <div\n className=\"exprviz-tree-type-header\"\n onClick={() => setExpandedKey(isExpanded ? null : t.key)}\n >\n <span className=\"exprviz-tree-caret\">{isExpanded ? '▾' : '▸'}</span>\n <span className=\"exprviz-tree-type-label\">{t.label}</span>\n <span className=\"exprviz-tree-type-count\">\n {selCount > 0 ? `${selCount}/${numValues}` : numValues}\n </span>\n </div>\n {isExpanded && renderValues(t.key, typeLabelMatches)}\n </div>\n );\n }).filter(Boolean);\n if (isSearching && typeRows.length === 0) return null;\n const groupCollapsed = !isSearching && collapsedGroups[grp.group];\n return (\n <div key={grp.group} className=\"exprviz-tree-group\">\n <div className=\"exprviz-tree-group-header\" onClick={() => toggleGroup(grp.group)}>\n <span className=\"exprviz-tree-caret\">{groupCollapsed ? '▶' : '▼'}</span>\n <strong>{grp.label}</strong>\n </div>\n {!groupCollapsed && grp.types.length === 0 && (\n <div className=\"exprviz-tree-empty\"><em>(none)</em></div>\n )}\n {!groupCollapsed && typeRows}\n </div>\n );\n })}\n </div>\n <div className=\"exprviz-fields-preview\">\n {orderedSelectedKeys.length === 0 ? (\n <div className=\"exprviz-fields-placeholder\">\n <em>Select a property type to preview the property values for each matching field.</em>\n </div>\n ) : (\n <table className=\"exprviz-fields-table\">\n <thead>\n <tr>\n {orderedSelectedKeys.map(k => <th key={k}>{labelForKey(k, propTree)}</th>)}\n </tr>\n </thead>\n <tbody>\n {matchingFields.map(f => (\n <tr key={f.fieldName} title={f.fieldName}>\n {orderedSelectedKeys.map(k => <td key={k}>{f.props[k] || ''}</td>)}\n </tr>\n ))}\n {matchingFields.length === 0 && (\n <tr><td colSpan={orderedSelectedKeys.length}><em>No matching fields</em></td></tr>\n )}\n </tbody>\n </table>\n )}\n </div>\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={() => doToggleExprVizFieldsModal(taxon, false)}>\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n disabled={matchingFields.length === 0}\n onClick={() => {\n doSetExprVizFields(taxon, matchingFields.map(f => f.fieldName));\n doToggleExprVizFieldsModal(taxon, false);\n }}\n >\n Apply ({matchingFields.length} fields)\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExprViz',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneMaps',\n 'doToggleExprVizFieldsModal',\n 'doSetExprVizFields',\n 'doFetchExprVizFieldExistence',\n FieldsModalCmp\n);\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { AgGridReact } from 'ag-grid-react';\nimport 'ag-grid-community/styles/ag-grid.css';\nimport 'ag-grid-community/styles/ag-theme-quartz.css';\n\nconst baseColDefs = [\n { field: 'id', headerName: 'Gene ID', pinned: 'left', width: 160, suppressMovable: true },\n { field: 'name', headerName: 'Name', pinned: 'left', width: 140, suppressMovable: true }\n];\n\nfunction arraysEqual(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\nfunction buildFieldInfo(fields, studies, expressionSamples) {\n const info = {};\n if (!fields || !studies || !expressionSamples) return info;\n const wanted = new Set(fields);\n for (const study of studies) {\n const studyId = study._id;\n const samples = expressionSamples[studyId];\n if (!samples) continue;\n const byGroup = {};\n for (const s of samples) if (!byGroup[s.group]) byGroup[s.group] = s;\n for (const group of Object.keys(byGroup)) {\n const fieldName = `${studyId.replace(/-/g, '_')}_${group}__expr`;\n if (!wanted.has(fieldName)) continue;\n const sample = byGroup[group];\n const factors = {};\n (sample.factor || []).forEach(f => { factors[f.type] = f.label; });\n const characteristics = {};\n (sample.characteristic || []).forEach(c => {\n if (factors[c.type] != null) return;\n characteristics[c.type] = c.label;\n });\n info[fieldName] = {\n studyId,\n studyDescription: study.description || studyId,\n group,\n replicates: samples.filter(s => s.group === group).length,\n factors,\n characteristics\n };\n }\n }\n return info;\n}\n\n// Plain right-aligned label cell for the metadata header rows above the\n// Gene ID / Name columns. Rendered as a React component (instead of\n// relying on ag-grid's default group label) so the alignment is controlled\n// by our own DOM and isn't fighting the quartz theme's CSS.\nconst LabelHeaderGroup = (props) => {\n const { displayName } = props;\n return <div className=\"exprviz-label-header\">{displayName}</div>;\n};\n\n// Same idea, but for the cells that toggle a section between expanded and\n// collapsed. The caret + label sit at the right edge.\nconst ToggleHeaderGroup = (props) => {\n const { displayName, onToggle, expanded, suffix } = props;\n return (\n <div\n className=\"exprviz-toggle-header\"\n onClick={onToggle}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onToggle && onToggle(); } }}\n title={expanded ? 'Click to collapse' : 'Click to expand'}\n >\n <span className=\"exprviz-toggle-caret\">{expanded ? '▼' : '▶'}</span>\n {' '}{displayName}{suffix ? ` ${suffix}` : ''}\n </div>\n );\n};\n\nfunction exprValueFormatter(p) {\n const v = p.value;\n if (v == null) return '';\n if (Array.isArray(v)) return v.join(', ');\n if (typeof v === 'object') return JSON.stringify(v);\n return String(v);\n}\n\n// Discover every distinct factor and characteristic type across the loaded\n// fields. Each becomes one header row (with adjacent equal-value cells\n// merged). Order is alphabetical for stability across reloads.\nfunction collectMetadataTypes(fields, fieldInfo) {\n const factorTypes = new Set();\n const charTypes = new Set();\n for (const f of fields || []) {\n const info = fieldInfo[f];\n if (!info) continue;\n Object.keys(info.factors || {}).forEach(t => factorTypes.add(t));\n Object.keys(info.characteristics || {}).forEach(t => charTypes.add(t));\n }\n return {\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n}\n\n// Wrap a leaf column in N nested column groups so it participates at every\n// header row, with a custom label per level. Lets the Gene ID / Name columns\n// carry the row labels (\"Study\"/\"Factor\"/\"Characteristic\" and the type name).\nfunction wrapLeafWithLabels(leaf, labels) {\n let wrapped = leaf;\n for (let i = labels.length - 1; i >= 0; i--) {\n const label = labels[i];\n const cls = label.headerClass\n ? `${label.headerClass} exprviz-hg-labels`\n : 'exprviz-hg-labels';\n wrapped = {\n headerName: label.headerName,\n headerClass: cls,\n // Always render through one of our components so the alignment and\n // spacing are controlled by our own DOM, not ag-grid's defaults.\n headerGroupComponent: label.headerGroupComponent || LabelHeaderGroup,\n headerGroupComponentParams: label.headerGroupComponentParams,\n children: [wrapped]\n };\n }\n return wrapped;\n}\n\n// Build the column tree:\n// row 1 — Study | Title | <study description>…\n// row 2..(2+F-1) — Factor | <factor type> | <value or blank>…\n// row 2+F..end-1 — Characteristic | <char type> | <value or blank>…\n// leaf row — Gene ID | Name | g3, g4, …\n// Adjacent expression cells sharing the same value at a given level merge\n// (because they're children of one group definition). Blank values for a\n// type that's defined only in other studies render as empty cells, and\n// adjacent blanks under the same parent merge automatically.\nfunction buildColumnDefs(fields, fieldInfo, expanded, toggles) {\n if (!fields || fields.length === 0) return baseColDefs;\n const { factorTypes, charTypes } = collectMetadataTypes(fields, fieldInfo);\n\n const levels = [{ kind: 'study', getValue: (info) => (info && info.studyDescription) || '' }];\n if (expanded.factors) {\n for (const t of factorTypes) {\n levels.push({\n kind: 'factor', type: t,\n getValue: (info) => (info && info.factors && info.factors[t]) || '',\n headerClass: 'exprviz-hg-factors'\n });\n }\n } else if (factorTypes.length > 0) {\n // One placeholder level standing in for the collapsed factor rows.\n levels.push({\n kind: 'factors-collapsed',\n getValue: () => '',\n headerClass: 'exprviz-hg-factors exprviz-hg-collapsed'\n });\n }\n if (expanded.chars) {\n for (const t of charTypes) {\n levels.push({\n kind: 'char', type: t,\n getValue: (info) => (info && info.characteristics && info.characteristics[t]) || '',\n headerClass: 'exprviz-hg-chars'\n });\n }\n } else if (charTypes.length > 0) {\n levels.push({\n kind: 'chars-collapsed',\n getValue: () => '',\n headerClass: 'exprviz-hg-chars exprviz-hg-collapsed'\n });\n }\n\n // Walk fields, opening a new group at level i (and resetting all levels\n // below) the first time the value at level i differs from the previous\n // field's. Same value → same parent group → ag-grid merges the cells.\n const exprTopGroups = [];\n const currentGroups = new Array(levels.length).fill(null);\n const currentKeys = new Array(levels.length).fill(undefined);\n\n for (const f of fields) {\n const info = fieldInfo[f] || {};\n let firstChange = levels.length;\n for (let i = 0; i < levels.length; i++) {\n const key = levels[i].getValue(info);\n if (currentGroups[i] === null || currentKeys[i] !== key) {\n firstChange = i;\n break;\n }\n }\n for (let i = firstChange; i < levels.length; i++) {\n const key = levels[i].getValue(info);\n const group = {\n headerName: key,\n headerClass: levels[i].headerClass,\n children: []\n };\n currentGroups[i] = group;\n currentKeys[i] = key;\n if (i === 0) exprTopGroups.push(group);\n else currentGroups[i - 1].children.push(group);\n }\n\n const leaf = {\n field: f,\n headerName: info.group || f.replace(/__expr$/, ''),\n width: 160,\n suppressMovable: false,\n valueFormatter: exprValueFormatter\n };\n currentGroups[levels.length - 1].children.push(leaf);\n }\n\n // Labels for the two pinned columns. The leftmost column carries the row\n // category (\"Study\" / \"Factor\" / \"Characteristic\"); the next column shows\n // the specific row name (the literal \"Title\" for the study row, then each\n // factor/characteristic type name). The first row of each\n // factor/characteristic section gets a clickable caret that toggles the\n // section between expanded (one row per type) and collapsed (one\n // placeholder row).\n const studyLabels = [{ headerName: 'Study' }];\n const titleLabels = [{ headerName: 'Title' }];\n\n if (expanded.factors) {\n factorTypes.forEach((t, i) => {\n studyLabels.push({\n headerName: 'Factor',\n headerClass: 'exprviz-hg-factors',\n ...(i === 0 ? {\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: { onToggle: toggles.toggleFactors, expanded: true }\n } : {})\n });\n titleLabels.push({ headerName: t, headerClass: 'exprviz-hg-factors' });\n });\n } else if (factorTypes.length > 0) {\n studyLabels.push({\n headerName: 'Factors',\n headerClass: 'exprviz-hg-factors exprviz-hg-collapsed',\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: {\n onToggle: toggles.toggleFactors,\n expanded: false,\n suffix: `(${factorTypes.length})`\n }\n });\n titleLabels.push({ headerName: '', headerClass: 'exprviz-hg-factors exprviz-hg-collapsed' });\n }\n\n if (expanded.chars) {\n charTypes.forEach((t, i) => {\n studyLabels.push({\n headerName: 'Characteristic',\n headerClass: 'exprviz-hg-chars',\n ...(i === 0 ? {\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: { onToggle: toggles.toggleChars, expanded: true }\n } : {})\n });\n titleLabels.push({ headerName: t, headerClass: 'exprviz-hg-chars' });\n });\n } else if (charTypes.length > 0) {\n studyLabels.push({\n headerName: 'Characteristics',\n headerClass: 'exprviz-hg-chars exprviz-hg-collapsed',\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: {\n onToggle: toggles.toggleChars,\n expanded: false,\n suffix: `(${charTypes.length})`\n }\n });\n titleLabels.push({ headerName: '', headerClass: 'exprviz-hg-chars exprviz-hg-collapsed' });\n }\n\n const idCol = wrapLeafWithLabels(baseColDefs[0], studyLabels);\n const nameCol = wrapLeafWithLabels(baseColDefs[1], titleLabels);\n\n return [idCol, nameCol, ...exprTopGroups];\n}\n\nconst ExprTable = ({ rows, fields, onReorder, studies, expressionSamples, onHoverRow }) => {\n const fieldInfo = useMemo(\n () => buildFieldInfo(fields, studies, expressionSamples),\n [fields, studies, expressionSamples]\n );\n\n // Default: factor rows expanded, characteristic rows collapsed (per spec).\n const [expanded, setExpanded] = useState({ factors: true, chars: false });\n const toggleFactors = useCallback(\n () => setExpanded(e => ({ ...e, factors: !e.factors })),\n []\n );\n const toggleChars = useCallback(\n () => setExpanded(e => ({ ...e, chars: !e.chars })),\n []\n );\n\n const columnDefs = useMemo(\n () => buildColumnDefs(fields, fieldInfo, expanded, { toggleFactors, toggleChars }),\n [fields, fieldInfo, expanded, toggleFactors, toggleChars]\n );\n\n const onColumnMoved = (e) => {\n if (!onReorder || !e.finished) return;\n const allCols = e.api.getAllGridColumns ? e.api.getAllGridColumns() : (e.columnApi && e.columnApi.getAllGridColumns && e.columnApi.getAllGridColumns());\n if (!allCols) return;\n const next = allCols\n .map(c => c.getColId())\n .filter(id => fields.includes(id));\n if (!arraysEqual(next, fields)) {\n onReorder(next);\n }\n };\n\n if (!rows || rows.length === 0) {\n return <div className=\"exprviz-table-empty\"><em>No data loaded.</em></div>;\n }\n\n return (\n <div className=\"ag-theme-quartz exprviz-aggrid\">\n <AgGridReact\n rowData={rows}\n columnDefs={columnDefs}\n defaultColDef={{ resizable: true, sortable: true, filter: false, suppressMenu: true }}\n animateRows={false}\n suppressFieldDotNotation={true}\n suppressDragLeaveHidesColumns={true}\n suppressColumnVirtualisation={true}\n groupHeaderHeight={24}\n onColumnMoved={onColumnMoved}\n onCellMouseOver={e => onHoverRow && onHoverRow(e.data && e.data.id)}\n onCellMouseOut={() => onHoverRow && onHoverRow(null)}\n />\n </div>\n );\n};\n\nexport default ExprTable;\n","import React, { useEffect, useRef, useState } from 'react';\nimport * as d3 from 'd3';\n\n// Parallel-coordinates plot with per-axis brushing and drag-to-reorder axes.\n// - Axis labels are draggable horizontally; on drop, onReorder(newOrder) fires.\n// - Brushes on axes intersect (AND): a row is \"in\" only when every active brush contains it.\n// - Numeric fields use a linear or symlog scale; non-numeric values are skipped.\n\nconst MARGIN = { top: 100, right: 24, bottom: 24, left: 32 };\nconst LABEL_ROTATION = -40;\nconst BRUSH_WIDTH = 16;\n\nfunction isNumeric(v) {\n if (v == null) return false;\n if (Array.isArray(v)) return false;\n const n = +v;\n return Number.isFinite(n);\n}\n\nfunction arraysEqual(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n// Powers-of-10 tick values spanning [lo, hi]; includes 0 if the range crosses zero.\n// Clamped to |v| >= 0.1 to keep low-magnitude tick labels from overlapping near 0.\nconst MIN_LOG_TICK = 0.1;\nfunction logTickValues([lo, hi]) {\n const ticks = new Set();\n if (lo <= 0 && hi >= 0) ticks.add(0);\n if (hi >= MIN_LOG_TICK) {\n const start = Math.max(-1, Math.floor(Math.log10(lo > 0 ? lo : MIN_LOG_TICK)));\n const end = Math.ceil(Math.log10(hi));\n for (let p = start; p <= end; p++) {\n const v = Math.pow(10, p);\n if (v >= MIN_LOG_TICK && v <= hi) ticks.add(v);\n }\n }\n if (lo <= -MIN_LOG_TICK) {\n const start = Math.max(-1, Math.floor(Math.log10(hi < 0 ? -hi : MIN_LOG_TICK)));\n const end = Math.ceil(Math.log10(-lo));\n for (let p = start; p <= end; p++) {\n const v = -Math.pow(10, p);\n if (-v >= MIN_LOG_TICK && v >= lo) ticks.add(v);\n }\n }\n return Array.from(ticks).sort((a, b) => a - b);\n}\n\nfunction logTickFormat(v) {\n if (v === 0) return '0';\n const a = Math.abs(v);\n if (a >= 0.01 && a < 10000) return d3.format('~g')(v);\n return d3.format('.0e')(v);\n}\n\nconst ParallelCoordsPlot = ({\n rows,\n fields,\n scale = 'linear',\n onBrushChange,\n onReorder,\n clearVersion = 0,\n hoveredId = null,\n axisLabels = null\n}) => {\n const svgRef = useRef(null);\n const containerRef = useRef(null);\n // selections in data domain: { [field]: [lo, hi] }\n const selectionsRef = useRef({});\n const lastClearRef = useRef(0);\n // Track container size so the d3 render reruns when the user drags the\n // pane resizer (or when the window is resized). The values themselves\n // aren't read inside the effect — the effect always reads clientWidth/\n // clientHeight — but listing them in the deps array is what triggers it.\n const [size, setSize] = useState({ w: 0, h: 0 });\n // Custom HTML tooltip for axis labels — gives us bold labels and structured\n // sections, which the native SVG <title> can't do.\n const [tooltip, setTooltip] = useState(null);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el || typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n setSize((prev) => {\n if (Math.abs(prev.w - width) < 1 && Math.abs(prev.h - height) < 1) return prev;\n return { w: width, h: height };\n });\n }\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n useEffect(() => {\n if (clearVersion !== lastClearRef.current) {\n selectionsRef.current = {};\n lastClearRef.current = clearVersion;\n if (onBrushChange) onBrushChange({});\n }\n Object.keys(selectionsRef.current).forEach(f => {\n if (!fields || !fields.includes(f)) delete selectionsRef.current[f];\n });\n\n const svg = d3.select(svgRef.current);\n svg.selectAll('*').remove();\n if (!fields || fields.length === 0 || !rows || rows.length === 0) return;\n\n const el = containerRef.current;\n const width = (el && el.clientWidth) || 600;\n const height = (el && el.clientHeight) || 300;\n const innerW = width - MARGIN.left - MARGIN.right;\n const innerH = height - MARGIN.top - MARGIN.bottom;\n\n svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n const g = svg.append('g').attr('transform', `translate(${MARGIN.left},${MARGIN.top})`);\n\n // Mutable order during drag — starts as a copy of fields.\n let order = fields.slice();\n const x = d3.scalePoint().range([0, innerW]).padding(0.5).domain(order);\n\n const yByField = {};\n let globalExt = null;\n if (scale === 'log') {\n const all = [];\n fields.forEach(f => {\n rows.forEach(r => {\n const v = r[f];\n if (isNumeric(v)) all.push(+v);\n });\n });\n globalExt = all.length ? d3.extent(all) : [0, 1];\n }\n fields.forEach(f => {\n if (scale === 'log') {\n yByField[f] = d3.scaleSymlog().domain(globalExt).range([innerH, 0]).nice();\n } else {\n const vals = rows.map(r => r[f]).filter(isNumeric).map(Number);\n const ext = vals.length ? d3.extent(vals) : [0, 1];\n yByField[f] = d3.scaleLinear().domain(ext).range([innerH, 0]).nice();\n }\n });\n\n function pathForRow(row, posOf) {\n const pts = order.map(f => {\n const v = row[f];\n if (!isNumeric(v)) return null;\n return [posOf(f), yByField[f](Number(v))];\n });\n return line(pts);\n }\n\n const line = d3.line()\n .defined(d => d != null && Number.isFinite(d[1]))\n .x(d => d[0])\n .y(d => d[1]);\n\n const linesG = g.append('g').attr('class', 'exprviz-pc-lines');\n const paths = linesG\n .selectAll('path')\n .data(rows)\n .enter()\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', 'steelblue')\n .attr('stroke-width', 1)\n .attr('data-id', d => d && d.id != null ? String(d.id) : null)\n .attr('d', row => pathForRow(row, f => x(f)));\n\n function isBrushedIn(row) {\n for (const f of order) {\n const sel = selectionsRef.current[f];\n if (!sel) continue;\n const v = row[f];\n if (!isNumeric(v)) return false;\n const n = Number(v);\n const [lo, hi] = sel;\n if (n < lo || n > hi) return false;\n }\n return true;\n }\n\n function applyBrushStyles() {\n const anyActive = Object.keys(selectionsRef.current).length > 0;\n paths\n .classed('exprviz-pc-line-in', d => !anyActive || isBrushedIn(d))\n .classed('exprviz-pc-line-out', d => anyActive && !isBrushedIn(d));\n }\n applyBrushStyles();\n\n // axis groups, keyed by field name so D3 can match them across reorders\n const axisG = g.selectAll('.exprviz-pc-axis')\n .data(order, d => d)\n .enter()\n .append('g')\n .attr('class', 'exprviz-pc-axis')\n .attr('transform', d => `translate(${x(d)},0)`);\n\n axisG.each(function(f) {\n const ax = d3.select(this);\n const axisGen = d3.axisLeft(yByField[f]);\n if (scale === 'log') {\n axisGen.tickValues(logTickValues(yByField[f].domain())).tickFormat(logTickFormat);\n } else {\n axisGen.ticks(5);\n }\n ax.call(axisGen);\n\n // Compact axis label. Hovering the label or its drag-handle rect shows\n // a custom HTML tooltip (rendered outside the SVG by React) that can\n // include bold labels and section headings.\n const labelInfo = (axisLabels && axisLabels[f])\n || { short: f.replace(/__expr$/, ''), structured: { studyTitle: f, group: '', factors: [], characteristics: [] } };\n const showTip = (event) => setTooltip({\n x: event.clientX,\n y: event.clientY,\n info: labelInfo.structured\n });\n const moveTip = (event) => setTooltip(t =>\n t ? { ...t, x: event.clientX, y: event.clientY } : null\n );\n const hideTip = () => setTooltip(null);\n\n ax.append('text')\n .attr('class', 'exprviz-pc-axis-label')\n .attr('x', 4).attr('y', -4)\n .attr('text-anchor', 'start')\n .attr('transform', `rotate(${LABEL_ROTATION}, 0, -4)`)\n .attr('fill', '#333')\n .style('font-size', '10px')\n .style('cursor', 'grab')\n .text(labelInfo.short)\n .on('mouseenter', showTip)\n .on('mousemove', moveTip)\n .on('mouseleave', hideTip);\n\n // hit area for grabbing — sits along the rotated label\n ax.append('rect')\n .attr('class', 'exprviz-pc-axis-handle')\n .attr('x', 0).attr('y', -11)\n .attr('width', 140).attr('height', 14)\n .attr('transform', `rotate(${LABEL_ROTATION}, 0, -4)`)\n .attr('fill', 'transparent')\n .style('cursor', 'grab')\n .on('mouseenter', showTip)\n .on('mousemove', moveTip)\n .on('mouseleave', hideTip);\n\n const brush = d3.brushY()\n .extent([[-BRUSH_WIDTH / 2, 0], [BRUSH_WIDTH / 2, innerH]])\n .on('brush end', (event) => {\n const s = event.selection;\n if (!s) {\n delete selectionsRef.current[f];\n } else {\n const y = yByField[f];\n const a = y.invert(s[0]);\n const b = y.invert(s[1]);\n selectionsRef.current[f] = [Math.min(a, b), Math.max(a, b)];\n }\n applyBrushStyles();\n // event.sourceEvent is null when brush.move is called programmatically\n // (e.g. when this effect re-runs and we restore prior selections).\n // Skipping that case avoids a re-render loop with the parent.\n if (event.type === 'end' && event.sourceEvent && onBrushChange) {\n onBrushChange({ ...selectionsRef.current });\n }\n });\n\n const brushG = ax.append('g').attr('class', 'exprviz-pc-brush').call(brush);\n\n const prior = selectionsRef.current[f];\n if (prior) {\n const y = yByField[f];\n const py0 = y(prior[1]);\n const py1 = y(prior[0]);\n if (Number.isFinite(py0) && Number.isFinite(py1)) {\n brushG.call(brush.move, [py0, py1]);\n }\n }\n });\n\n // Drag-to-reorder: while dragging, only the dragged axis moves and the\n // line segments connecting to it are recomputed. Other axes stay put.\n // The new order is computed once at drag end and emitted via onReorder.\n const drag = d3.drag()\n .container(function() { return g.node(); })\n .subject(function(event, d) { return { x: x(d), y: 0 }; })\n .on('start', function(event, d) {\n const axNode = this.parentNode;\n d3.select(axNode).raise().classed('exprviz-pc-axis-dragging', true);\n d3.select(axNode).select('.exprviz-pc-axis-label').style('cursor', 'grabbing');\n linesG.classed('exprviz-pc-lines-dragging', true);\n })\n .on('drag', function(event, d) {\n const axNode = this.parentNode;\n const newX = Math.max(0, Math.min(innerW, event.x));\n d3.select(axNode).attr('transform', `translate(${newX},0)`);\n paths.attr('d', row => pathForRow(row, f => f === d ? newX : x(f)));\n })\n .on('end', function(event, d) {\n const axNode = this.parentNode;\n const newX = Math.max(0, Math.min(innerW, event.x));\n d3.select(axNode).classed('exprviz-pc-axis-dragging', false);\n d3.select(axNode).select('.exprviz-pc-axis-label').style('cursor', 'grab');\n linesG.classed('exprviz-pc-lines-dragging', false);\n\n const newOrder = order.slice().sort((a, b) => {\n const xa = a === d ? newX : x(a);\n const xb = b === d ? newX : x(b);\n return xa - xb;\n });\n\n if (onReorder && !arraysEqual(newOrder, fields)) {\n // Snap the dragged axis to its target slot for the brief moment\n // before the parent re-renders with the new order.\n x.domain(newOrder);\n d3.select(axNode).attr('transform', `translate(${x(d)},0)`);\n paths.attr('d', row => pathForRow(row, f => x(f)));\n onReorder(newOrder);\n } else {\n // No order change — restore the dragged axis to its original slot.\n d3.select(axNode).attr('transform', `translate(${x(d)},0)`);\n paths.attr('d', row => pathForRow(row, f => x(f)));\n }\n });\n\n axisG.selectAll('.exprviz-pc-axis-label, .exprviz-pc-axis-handle').call(drag);\n }, [rows, fields, scale, onBrushChange, onReorder, clearVersion, axisLabels, size.w, size.h]);\n\n // Highlight the polyline matching the hovered row id without rebuilding the\n // SVG. Raises the highlighted path so it draws above its neighbors.\n useEffect(() => {\n const svg = d3.select(svgRef.current);\n if (svg.empty()) return;\n const paths = svg.selectAll('.exprviz-pc-lines path');\n paths.classed('exprviz-pc-line-hover', false);\n if (hoveredId == null) return;\n const target = paths.filter(function() {\n return this.getAttribute('data-id') === String(hoveredId);\n });\n target.classed('exprviz-pc-line-hover', true).raise();\n }, [hoveredId, rows, fields, scale]);\n\n if (!fields || fields.length === 0) {\n return <div className=\"exprviz-plot-empty\"><em>Select fields to plot.</em></div>;\n }\n\n return (\n <div ref={containerRef} className=\"exprviz-pc-container\">\n <svg ref={svgRef} width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\"/>\n {tooltip && <AxisTooltip x={tooltip.x} y={tooltip.y} info={tooltip.info}/>}\n </div>\n );\n};\n\n// Position-fixed so it can escape the plot pane's clipping. Offset slightly\n// from the cursor and clamped to the viewport so it never spills off-screen.\nconst AxisTooltip = ({ x, y, info }) => {\n const ref = useRef(null);\n const [pos, setPos] = useState({ left: x + 12, top: y + 12 });\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let left = x + 12;\n let top = y + 12;\n if (left + w > vw - 4) left = Math.max(4, x - 12 - w);\n if (top + h > vh - 4) top = Math.max(4, y - 12 - h);\n setPos({ left, top });\n }, [x, y, info]);\n const { studyTitle, group, factors, characteristics } = info;\n return (\n <div ref={ref} className=\"exprviz-pc-tooltip\" style={pos}>\n <div><span className=\"exprviz-pc-tip-key\">Study:</span> {studyTitle}{group ? ` (${group})` : ''}</div>\n {factors.length > 0 && (\n <>\n <div className=\"exprviz-pc-tip-section\">Factors</div>\n {factors.map((p, i) => (\n <div key={`f-${i}`} className=\"exprviz-pc-tip-row\">\n <span className=\"exprviz-pc-tip-key\">{p.name}:</span> {p.value}\n </div>\n ))}\n </>\n )}\n {characteristics.length > 0 && (\n <>\n <div className=\"exprviz-pc-tip-section\">Characteristics</div>\n {characteristics.map((p, i) => (\n <div key={`c-${i}`} className=\"exprviz-pc-tip-row\">\n <span className=\"exprviz-pc-tip-key\">{p.name}:</span> {p.value}\n </div>\n ))}\n </>\n )}\n </div>\n );\n};\n\nexport default ParallelCoordsPlot;\n","import React, { useMemo, useState } from 'react'\nimport { Button, Modal } from 'react-bootstrap'\nimport { connect } from \"redux-bundler-react\";\nimport { getFirebaseApp } from \"./utils\";\nimport { getAuth, onAuthStateChanged, signOut, GoogleAuthProvider, signInWithPopup } from \"firebase/auth\";\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst provider = new GoogleAuthProvider();\n\nconst Auth = props => {\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n const [user, setUser] = useState({});\n const [open, setOpen] = useState(true);\n if (!auth) return null;\n onAuthStateChanged(auth, (user) => setUser(user));\n\n function handleLogin() {\n signInWithPopup(auth, provider)\n .then((result) => {\n setUser(result.user)\n }).catch((err) => {\n console.log(err)\n });\n }\n function handleLogout() {\n signOut(auth)\n .then(() => {\n setUser(null);\n }).catch((err) => {\n console.log(err)\n });\n }\n return (\n <div className={props.configuration.id === 'sorghum' ? 'sorghumbase-auth-container': 'gramene-auth-container'}>\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>Account</b>\n <span className=\"sidebar-section-actions\">\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">\n <div>\n {user\n ? <Button size=\"sm\" variant=\"success\" onClick={handleLogout}>{user.displayName}</Button>\n : <Button size=\"sm\" variant=\"success\" onClick={handleLogin}>Login</Button>\n }\n </div>\n </div>}\n </div>\n </div>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n Auth\n)\n"],"names":[],"version":3,"file":"index.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["src/components/results/Study.js","src/index.js","src/bundles/index.js","src/bundles/api.js","src/bundles/filters.js","src/bundles/views.js","src/bundles/docs.js","src/bundles/genomes.js","src/bundles/swaggerFields.js","src/fieldCatalog.overlay.json","src/vepStudyInfo.js","src/bundles/exporter.js","src/components/exporter/downloadRunner.js","src/components/exporter/formatters.js","src/components/exporter/expressionResolver.js","src/components/exporter/ancestorsResolver.js","src/bundles/ontologies.js","src/bundles/exprViz.js","src/components/resultList.js","src/components/resultSummary.js","src/components/suggestions.js","src/components/geneSearchUI.js","src/components/results/GeneList.js","src/components/results/details/Expression.js","src/components/results/details/Homology.js","src/components/results/details/generic.js","src/components/utils.js","src/components/results/details/Location.js","src/components/results/details/location/browser.js","src/components/results/details/location/dallianceBrowser.js","src/components/results/details/Pathways.js","src/components/results/details/VEP.js","src/components/results/details/Xrefs.js","src/components/results/details/Publications.js","src/components/results/details/Sequences.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/results/StatsByGroup.js","src/components/TaxonomyModal.js","src/components/results/Expression.js","src/components/results/UserGeneLists.js","src/components/exporter/ExporterView.js","src/components/exporter/FieldTree.js","src/components/exporter/Preview.js","src/components/exporter/CutoffsModal.js","src/components/exporter/ExportFooter.js","src/components/exprViz/ExprVizView.js","src/components/exprViz/FieldsModal.js","src/components/exprViz/ExprTable.js","src/components/exprViz/ParallelCoordsPlot.js","src/components/Auth.js"],"sourcesContent":["import React, { useState, useMemo } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\n\nconst metaRenderer = params => {\n if (params.value.ontology) {\n return <a href={`http://purl.obolibrary.org/obo/${params.value.id.replace(\":\",\"_\")}`} target='_blank'>{params.value.label}</a>\n }\n return params.value.label\n}\nconst sampleRenderer = params => {\n const sampleMeta = params.value;\n return (\n <label>\n <input\n type=\"checkbox\"\n checked={params.desiredSamples.hasOwnProperty(sampleMeta._id)}\n onChange={() => params.doToggleExpressionSample(sampleMeta._id)}\n />\n {sampleMeta.experiment}-{sampleMeta.group}\n </label>\n );\n // return JSON.stringify(sampleMeta,null,2);\n}\nconst connectedSampleRenderer = connect(\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n 'doToggleExpressionSample',\n sampleRenderer\n);\nconst Study = props => {\n let samples = props.expressionSamples[props.id];\n let sampleMetadata = [];\n let metadataFields = [{ field: \"sampleId\", cellRenderer: connectedSampleRenderer }];\n let isFactor={};\n samples.forEach((sample, idx) => {\n if (idx === 0) {\n let factors = {\n headerName: 'Experimental Variables',\n children: []\n }\n sample.factor.forEach(factor => {\n factors.children.push({field: factor.type, cellRenderer: metaRenderer})\n isFactor[factor.type] = true;\n });\n metadataFields.push(factors);\n let characteristics = {\n headerName: 'Sample Characteristics',\n children: []\n }\n sample.characteristic.forEach(ch => {\n if (!isFactor[ch.type]) {\n characteristics.children.push({field: ch.type, cellRenderer: metaRenderer})\n }\n });\n metadataFields.push(characteristics)\n }\n let s_info = {sampleId: sample}\n sample.factor.forEach(factor => {\n s_info[factor.type] = {label: factor.label};\n if (factor.ontology) {\n s_info[factor.type]['ontology'] = factor.ontology\n s_info[factor.type]['id'] = factor.id;\n }\n })\n sample.characteristic.forEach(ch => {\n s_info[ch.type] = {label: ch.label};\n if (ch.ontology) {\n s_info[ch.type]['ontology'] = ch.ontology\n s_info[ch.type]['id'] = ch.id;\n }\n })\n sampleMetadata.push(s_info)\n })\n const [rowData, setRowData] = useState(sampleMetadata);\n const [colDefs, setColDefs] = useState(metadataFields);\n const defaultColDef = useMemo(() => {\n return {\n filter: true\n }\n }, []);\n return (\n <div>\n <div className=\"ag-theme-quartz\" style={{height: `${44 * (samples.length + 2)}px`}}>\n <AgGridReact rowData={rowData} columnDefs={colDefs} defaultColDef={defaultColDef}/>\n </div>\n <a href={`https://www.ebi.ac.uk/gxa/experiments/${props.id}`}>EBI Atlas Experiment: {props.id}</a>\n </div>\n );\n};\nexport default connect(\n 'selectExpressionSamples',\n Study);\n","import bundles from './bundles';\nimport resultList from './components/resultList';\nimport resultSummary from './components/resultSummary';\nimport suggestions from './components/suggestions';\nimport {Status, Filters, Results, Views, Auth} from './components/geneSearchUI';\n\nexport { bundles, resultList, resultSummary, suggestions, Status, Filters, Results, Views, Auth };\n","import apiBundles from './api'\nimport filterBundle from './filters'\nimport viewsBundle from './views'\nimport docsBundle from './docs'\nimport genomesBundle from './genomes'\nimport fieldCatalogBundle from './swaggerFields'\nimport exporterBundle from './exporter'\nimport ontologiesBundle from './ontologies'\nimport exprVizBundle from './exprViz'\n\nexport default [...apiBundles, docsBundle, filterBundle, viewsBundle, genomesBundle, fieldCatalogBundle, exporterBundle, ontologiesBundle, exprVizBundle];\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler'\nimport _ from 'lodash'\nimport binsClient from \"gramene-bins-client\";\nimport treesClient from \"gramene-trees-client\";\nimport {build} from \"gramene-taxonomy-with-genomes\";\n\nconst facets = [\n \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\",\n // \"{!facet.limit='100' facet.mincount='1' key='genetree'}gene_tree\",\n // \"{!facet.limit='100' facet.mincount='1' key='pathways'}pathways__ancestors\",\n // \"{!facet.limit='100' facet.mincount='1' key='domains'}domain_roots\",\n \"{!facet.limit='-1' facet.mincount='1' key='fixed_1000__bin'}fixed_1000__bin\",\n \"{!facet.limit='100' facet.mincount='0' key='AED' type='range' start=0 end=1.0 gap=0.01}MAKER__AED__attr_f\"\n];\nconst genomesOfInterest = '(taxon_id:2769) OR (taxon_id:3055) OR (taxon_id:3218) OR (taxon_id:3702) OR (taxon_id:3847) OR (taxon_id:4555) OR (taxon_id:4558) OR (taxon_id:4577) OR (taxon_id:13333) OR (taxon_id:15368) OR (taxon_id:29760) OR (taxon_id:39947) OR (taxon_id:55577) OR (taxon_id:88036) OR (taxon_id:214687)';\nconst sites = ['main','oryza','maize','sorghum','grapevine'];\nconst grameneSuggestions = createAsyncResourceBundle( {\n name: 'grameneSuggestions',\n actionBaseType: 'GRAMENE_SUGGESTIONS',\n persist: false,\n getPromise: ({store}) => {\n const t = store.selectSuggestionsQuery().replaceAll(':',' ').trim();\n const g = store.selectGrameneGenomes();\n const q = `/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`;\n // const promises = sites.map(site => fetch(`https://data.gramene.org/${site}${q}`));\n // return Promise.all(promises)\n return fetch(store.selectGrameneAPI() + q)\n .then(res => {\n return res.json()\n })\n .then(suggestions => {\n if (Object.keys(g.active).length > 0) {\n suggestions.grouped.category.groups.forEach(group => {\n group.doclist.docs.forEach(sugg => {\n sugg.num_genes = 0;\n sugg.taxon_id.forEach((id,idx) => {\n if (g.active[id] && !g.active[id].hidden) {\n sugg.num_genes += sugg.taxon_freq[idx]\n }\n })\n })\n })\n }\n return suggestions\n })\n }\n});\n\ngrameneSuggestions.reactGrameneSuggestions = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectSuggestionsQuery',\n (shouldUpdate, queryString) => {\n if (shouldUpdate && queryString) {\n return { actionCreator: 'doFetchGrameneSuggestions' }\n }\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsStatus = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectGrameneSuggestionsIsLoading',\n 'selectGrameneSuggestionsRaw',\n 'selectSuggestionsQuery',\n (shouldUpdate, isLoading, suggestionsRaw, queryString) => {\n if (!queryString) return '';\n if (shouldUpdate) return 'update needed';\n if (isLoading) return 'loading';\n if (suggestionsRaw.data) return suggestionsRaw.data.grouped.category.matches + ' terms';\n console.error(suggestionsRaw)\n return 'error';\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsReady = createSelector(\n 'selectGrameneSuggestionsStatus',\n (status) => {\n const regex = RegExp('terms$');\n return regex.test(status);\n }\n);\n\ngrameneSuggestions.doFocusFirstGrameneSuggestion = arg => ({dispatch, getState}) => {\n console.log('inside doFocusFirstGrameneSuggestion');\n};\n\nfunction compressLongTaxonName(node) {\n const fullName = node.name;\n const removedExtraineousWords = fullName.replace(/( Group$| subsp\\.| ssp\\.| var\\.| strain)/, '');\n let finalVersion;\n if (removedExtraineousWords.length > 20) {\n let words = removedExtraineousWords.split(' ');\n if (words.length === 2) {\n // abrreviate first word.\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+/, '$1.')\n }\n if (words.length > 2) {\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+\\s([a-z])[a-z]+/, '$1$2.')\n }\n }\n else {\n finalVersion = removedExtraineousWords;\n }\n node.short_name = finalVersion;\n}\n\nconst grameneTaxonomy = createAsyncResourceBundle({\n name: 'grameneTaxonomy',\n actionBaseType: 'GRAMENE_TAXONOMY',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/taxonomy?subset=gramene&rows=-1`)\n .then(res => res.json())\n .then(taxNodes => {\n let taxonomy = _.keyBy(taxNodes, '_id');\n taxNodes.forEach(t => {\n t._id = +t._id; // ensure taxonomy id is a number\n compressLongTaxonName(t);\n if (t.hasOwnProperty(\"is_a\")) {\n t.is_a.forEach(p_id => {\n const p = taxonomy[p_id];\n if (!p.hasOwnProperty('children')) p.children = [];\n p.children.push(t._id)\n })\n }\n });\n return taxonomy\n })\n }\n});\ngrameneTaxonomy.reactGrameneTaxonomy = createSelector(\n 'selectGrameneTaxonomyShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneTaxonomy' }\n }\n }\n);\nconst grameneMaps = createAsyncResourceBundle({\n name: 'grameneMaps',\n actionBaseType: 'GRAMENE_MAPS',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/maps?rows=-1`)\n .then(res => res.json())\n .then(maps => {\n maps.forEach(m => {\n m.regionLength = {};\n m.regions.names.forEach((rname,idx) => {\n m.regionLength[rname] = m.regions.lengths[idx]\n })\n })\n return _.keyBy(maps, 'taxon_id');\n })\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\n }\n);\n\nconst expressionStudies = createAsyncResourceBundle( {\n name: 'expressionStudies',\n actionBaseType: 'EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.groupBy(res, 'taxon_id'))\n }\n});\n// Only fetch when a view that consumes expression studies is enabled.\nconst EXPRESSION_VIEWS = ['exprViz', 'expression', 'export'];\nexpressionStudies.reactExpressionStudies = createSelector(\n 'selectExpressionStudiesShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !EXPRESSION_VIEWS.some(id => viewsOn.has(id))) return;\n return { actionCreator: 'doFetchExpressionStudies' }\n }\n);\n\nconst expressionSamples = createAsyncResourceBundle( {\n name: 'expressionSamples',\n actionBaseType: 'EXPRESSION_SAMPLES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n .then(res => res.json())\n .then(samples => _.groupBy(samples, 'experiment'))\n .then(studies => {\n Object.keys(studies).forEach(study => {\n studies[study].forEach(sample => {\n sample.order = +sample.group.replace('g','')\n });\n studies[study].sort((a,b) => a.order - b.order);\n })\n return studies\n })\n }\n});\nexpressionSamples.reactExpressionSamples = createSelector(\n 'selectExpressionSamplesShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !EXPRESSION_VIEWS.some(id => viewsOn.has(id))) return;\n return { actionCreator: 'doFetchExpressionSamples' }\n }\n);\n\nconst curatedGenes = createAsyncResourceBundle( {\n name: 'curatedGenes',\n actionBaseType: 'CURATED_GENES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`https://devdata.gramene.org/curation/curations?rows=0&minFlagged=0&since=12-12-2029`)\n .then(res => res.json())\n .then(curation => _.keyBy(curation.genes, 'gene_id'))\n }\n});\n// Curated annotations are consumed by GeneList rows and Homology details,\n// both inside the gene-list view.\ncuratedGenes.reactCuratedGenes = createSelector(\n 'selectCuratedGenesShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !viewsOn.has('list')) return;\n return { actionCreator: 'doFetchCuratedGenes' }\n }\n);\n\nconst grameneGermplasm = createAsyncResourceBundle( {\n name: 'grameneGermplasm',\n actionBaseType: 'GRAMENE_GERMPLASM',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/germplasm?rows=-1`)\n .then(res => res.json())\n .then(res => {\n res.forEach(g => {\n if (!g.subpop) {\n g.subpop = \"?\"\n }\n });\n return _.groupBy(res, 'ens_id')\n })\n }\n});\n// Germplasm metadata is consumed by the VEP detail panel inside the gene list.\ngrameneGermplasm.reactGrameneGermplasm = createSelector(\n 'selectGrameneGermplasmShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !viewsOn.has('list')) return;\n return { actionCreator: 'doFetchGrameneGermplasm' }\n }\n);\n//\n// const grameneExpressionAssays = createAsyncResourceBundle( {\n// name: 'grameneExpressionAssays',\n// actionBaseType: 'GRAMENE_EXPRESSION_ASSAYS',\n// persist: true,\n// getPromise: ({store}) => {\n// return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n// .then(res => res.json())\n// .then(res => {\n// let expr={};\n// res.forEach(assay => {\n// if (!expr.hasOwnProperty(assay.taxon_id)) {\n// expr[assay.taxon_id] = {};\n// }\n// if (!expr[assay.taxon_id].hasOwnProperty(assay.experiment)) {\n// expr[assay.taxon_id][assay.experiment] = [];\n// }\n// assay.order = +assay.group.replace('g','');\n// expr[assay.taxon_id][assay.experiment].push(assay);\n// });\n// // sort each experiment\n// for (const tid in expr) {\n// for (const exp in expr[tid]) {\n// expr[tid][exp].sort((a,b) => a.order - b.order);\n// }\n// }\n// return expr;\n// })\n// }\n// });\n// grameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n// 'selectGrameneExpressionAssaysShouldUpdate',\n// (shouldUpdate) => {\n// if (shouldUpdate) {\n// return { actionCreator: 'doFetchGrameneExpressionAssays' }\n// }\n// }\n// );\n\nconst MAKERAttribs = [\n 'MAKER__AED__attr_f',\n 'MAKER__QI1__attr_i',\n 'MAKER__QI2__attr_f',\n 'MAKER__QI3__attr_f',\n 'MAKER__QI4__attr_f',\n 'MAKER__QI5__attr_f',\n 'MAKER__QI6__attr_f',\n 'MAKER__QI7__attr_i',\n 'MAKER__QI8__attr_i',\n 'MAKER__QI9__attr_i'\n];\nconst geneAttribs = {\n \"MAKER transcript metrics\" : [\n { name: \"AED\", description: \"Annotation Edit Distance\", dtype: \"f\", fieldName: \"MAKER__AED__attr_f\" },\n { name: \"QI1\", description: \"Length of the 5' UTR\", dtype: \"i\", fieldName: \"MAKER__QI1__attr_i\" },\n { name: \"QI2\", description: \"Fraction of splice sites confirmed by an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI2__attr_f\" },\n { name: \"QI3\", description: \"Fraction of exons that overlap an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI3__attr_f\" },\n { name: \"QI4\", description: \"Fraction of exons that overlap EST or Protein alignments\", dtype: \"f\", fieldName: \"MAKER__QI4__attr_f\" },\n // { name: \"QI5\", description: \"Fraction of splice sites confirmed by a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI5__attr_f\" },\n // { name: \"QI6\", description: \"Fraction of exons that overlap a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI6__attr_f\" },\n { name: \"QI7\", description: \"Number of exons in the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI7__attr_i\" },\n { name: \"QI8\", description: \"Length of the 3' UTR\", dtype: \"i\", fieldName: \"MAKER__QI8__attr_i\" },\n { name: \"QI9\", description: \"Length of the protein sequence produced by the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI9__attr_i\" }\n ]\n}\nconst statsFields = geneAttribs['MAKER transcript metrics'].map(\n // (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='20,40,60,80,90,95,99'}${f}`\n (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='10,20,30,40,50,60,70,80,90,99.99'}${f.fieldName}`\n);\n\nconst grameneGeneAttribs = createAsyncResourceBundle( {\n name: 'grameneGeneAttribs',\n actionBaseType: 'GRAMENE_GENE_ATTRIBS',\n persist: false,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/geneAttributes`).then(res => geneAttribs)\n }\n});\ngrameneGeneAttribs.reactGrameneGeneAttribs = createSelector(\n 'selectGrameneGeneAttribsShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViewsOn',\n (shouldUpdate, status, viewsOn) => {\n if (!shouldUpdate) return;\n if (status !== 'finished' && status !== 'ready') return;\n if (!viewsOn || !viewsOn.has('attribs')) return;\n return { actionCreator: 'doFetchGrameneGeneAttribs' }\n }\n);\n\nconst grameneSearch = createAsyncResourceBundle({\n name: 'grameneSearch',\n actionBaseType: 'GRAMENE_SEARCH',\n persist: false,\n getPromise: ({store}) => {\n const offset = store.selectGrameneSearchOffset();\n const rows = store.selectGrameneSearchRows();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => m[tid] && !m[tid].hidden);\n let fq='';\n if (taxa.length) {\n console.log('search add a fq for ',taxa);\n fq = `&fq=taxon_id:(${taxa.join(' OR ')})`;\n }\n // return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}&stats=true&${statsFields.join('&')}`)\n return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}`)\n .then(res => res.json())\n .then(res => {\n res.response.docs.forEach(d => {\n d.can_show = {};\n d.capabilities.forEach(c => {\n d.can_show[c]=true;\n })\n });\n return res;\n })\n }\n});\ngrameneSearch.reactGrameneSearch = createSelector(\n 'selectGrameneSearchShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneGenomes',\n (shouldUpdate, status, genomes) => {\n if (shouldUpdate && status === 'search' && genomes) {\n return { actionCreator: 'doFetchGrameneSearch' }\n }\n }\n);\n\nfunction formatFacetCountsForViz(a) {\n let res = {\n count: a.length/2,\n displayName: \"fixed_1000__bin\",\n data: {},\n sorted: []\n };\n let counts = [];\n for(let i=0;i<a.length;i+=2) {\n const fc = {\n id: +a[i],\n count: +a[i+1]\n };\n res.data[a[i]] = fc;\n counts.push(fc);\n }\n res.sorted = counts.sort((a,b) => a.id - b.id);\n return res;\n}\n\n// bundle to prepare data for the TaxDist component\nconst grameneTaxDist = {\n name: 'grameneTaxDist',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n return state;\n }\n },\n selectGrameneTaxDist: createSelector(\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n (grameneSearch,grameneTaxonomy,grameneMaps) => {\n if (grameneSearch && grameneTaxonomy && grameneMaps) {\n _.forIn(grameneMaps, (map, tid) => {\n grameneTaxonomy[tid].name = map.display_name;\n });\n const binnedResults = formatFacetCountsForViz(grameneSearch.facet_counts.facet_fields.fixed_1000__bin);\n let speciesTree = treesClient.taxonomy.tree(Object.values(grameneTaxonomy));\n let binMapper = binsClient.bins(grameneMaps);\n let taxDist = build(binMapper, speciesTree);\n taxDist.setBinType('fixed',1000);\n taxDist.setResults(binnedResults);\n return taxDist;\n }\n return null;\n }\n )\n};\n\n// this query will give the sorghum orthologs of AT1G01260\n// want to provide these on non-sorghum genes if available\n// http://data.gramene.org/search?q=homology__all_orthologs:AT1G01260&fq=taxon_id:4558&fl=id\nconst grameneOrthologs = {\n name: 'grameneOrthologs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_ORTHOLOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_ORTHOLOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestOrthologs: geneId => ({dispatch, store}) => {\n const orthologs = store.selectGrameneOrthologs();\n if (!orthologs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_ORTHOLOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const taxonId = store.selectTargetTaxonId();\n fetch(`${API}/search?q=homology__all_orthologs:${geneId}&fq=taxon_id:${taxonId}&fl=id`)\n .then(res => res.json())\n .then(res => {\n let newOrthologs = {};\n newOrthologs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_ORTHOLOGS_RECEIVED', payload: newOrthologs})\n })\n }\n },\n selectGrameneOrthologs: state => state.grameneOrthologs\n};\n\nconst grameneParalogs = {\n name: 'grameneParalogs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_PARALOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_PARALOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestParalogs: (geneId,supertree,taxon_id) => ({dispatch, store}) => {\n const paralogs = store.selectGrameneParalogs();\n if (!paralogs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_PARALOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const q= supertree ? `supertree_attr_s:${supertree}` : `homology__within_species_paralog:${geneId}`;\n fetch(`${API}/search?q=${q}&rows=1000&fq=taxon_id:${taxon_id}`)\n .then(res => res.json())\n .then(res => {\n let newParalogs = {};\n newParalogs[geneId] = res.response.numFound > 0 ? res.response.docs.map(d => d.id) : [geneId];\n dispatch({type: 'GRAMENE_PARALOGS_RECEIVED', payload: newParalogs})\n })\n }\n },\n selectGrameneParalogs: state => state.grameneParalogs\n};\n\n// function selectFacetIDs(store, field) {\n// const path = `grameneGenes.data.facet_counts.facet_fields.${field}`;\n// if (_.has(store,path)) {\n// const flat_facets = _.get(store,path);\n// let idList = [];\n// if (isNaN(+flat_facets[0])) {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(flat_facets[i])\n// }\n// }\n// else {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(+flat_facets[i])\n// }\n// if (idList.length === 1) idList.push(0);\n// }\n// return idList;\n// }\n// }\n//\n// grameneGenes.selectDomainFacets = store => selectFacetIDs(store, 'domains');\n// grameneGenes.selectPathwayFacets = store => selectFacetIDs(store, 'pathways');\n// grameneGenes.selectTaxonomyFacets = store => selectFacetIDs(store, 'taxon_id');\n//\n// const grameneDomains = createAsyncResourceBundle({\n// name: 'grameneDomains',\n// actionBaseType: 'GRAMENE_DOMAINS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/domains?rows=-1&idList=${store.selectDomainFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {domains: docs, numFound: docs.length}})\n// });\n//\n// const gramenePathways = createAsyncResourceBundle({\n// name: 'gramenePathways',\n// actionBaseType: 'GRAMENE_PATHWAYS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/pathways?rows=-1&idList=${store.selectPathwayFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {pathways: docs, numFound: docs.length}})\n// });\n//\n// const grameneTaxonomy = createAsyncResourceBundle({\n// name: 'grameneTaxonomy',\n// actionBaseType: 'GRAMENE_TAXONOMY',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/taxonomy?rows=-1&idList=${store.selectTaxonomyFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {taxonomy: docs, numFound: docs.length}})\n// });\n\n\nexport default [grameneSuggestions, grameneSearch, grameneGeneAttribs, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, grameneParalogs, curatedGenes, grameneGermplasm, expressionSamples, expressionStudies];\n","import {createSelector} from \"redux-bundler\";\nimport _ from 'lodash';\nimport ReactGA from 'react-ga4'\nconst MAX_IDLIST_LENGTH = 20;\n\nfunction findNodeWithLeftIdx(node, idx) {\n if (node.leftIdx === idx) {\n return node;\n }\n let result=null;\n if (node.leftIdx < idx && node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n if (child.rightIdx > idx) {\n child.parentIdx = node.leftIdx;\n const res = findNodeWithLeftIdx(child, idx);\n if (res) result = res;\n }\n })\n }\n return result;\n}\n\nfunction markSubtree(node, source, invert) {\n node.marked = (node.leftIdx >= source.leftIdx && node.rightIdx <= source.rightIdx);\n if (invert) node.marked = !node.marked;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n markSubtree(child, source, invert);\n })\n }\n}\n\nfunction reindexTree(node, idx) {\n node.leftIdx = idx;\n idx++;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n idx = reindexTree(child, idx);\n });\n }\n node.rightIdx = idx;\n idx++;\n return idx;\n}\n\nconst grameneFilters = {\n name: 'grameneFilters',\n getReducer: () => {\n const initialState = {\n status: 'init', // others include 'search', 'waiting' and 'ready'\n operation: 'AND',\n negate: false,\n marked: false,\n leftIdx: 0,\n rightIdx: 1,\n children: [],\n showMarked: false,\n showMenu: false,\n moveCopyMode: '',\n searchOffset: 0,\n rows: 20\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_FILTERS_CLEARED': {\n newState = Object.assign({}, initialState, {\n status: 'search',\n children: []\n });\n return newState;\n }\n case 'GRAMENE_FILTER_ADDED': {\n const idx = state.rightIdx;\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: idx + 2,\n searchOffset: 0\n });\n let child = _.pick(payload, ['fq_field', 'fq_value', 'name', 'category']);\n child.leftIdx = idx;\n child.rightIdx = idx + 1;\n child.negate = false;\n child.showMenu = false;\n newState.children.push(child);\n markSubtree(newState, child, false);\n return newState;\n }\n case 'GRAMENE_FILTER_TREE_ADDED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: payload.rightIdx + 1,\n searchOffset: 0\n });\n newState.children.push(payload);\n markSubtree(newState, payload, false);\n return newState;\n }\n case 'GRAMENE_FILTER_SET_ADDED': {\n // create a filter with the payload.operation and children payload.filters\n let filter = {\n leftIdx: state.rightIdx,\n rightIdx: state.rightIdx + (payload.filters.length) * 2 + 1,\n operation: payload.operation,\n negate: false,\n showMenu: false,\n children: payload.filters\n };\n if (payload.warning) {\n filter.warning = payload.warning\n }\n let nextIdx = filter.leftIdx+1;\n payload.filters.forEach(f => {\n f.leftIdx = nextIdx++;\n f.rightIdx = nextIdx++;\n f.negate = false;\n f.showMenu = false;\n });\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0,\n rightIdx: filter.rightIdx + 1\n });\n newState.children.push(filter);\n markSubtree(newState, filter, false);\n return newState;\n }\n case 'GRAMENE_FILTER_NEGATED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n node.negate = !node.negate;\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_DELETED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n let parent = findNodeWithLeftIdx(newState, node.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== node.leftIdx);\n reindexTree(newState, 0);\n markSubtree(newState, parent, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_OPERATION_CHANGED': {\n if (payload.hasOwnProperty('operation')) {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n node.operation = node.operation === 'AND' ? 'OR' : 'AND';\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_MOVED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n let parent = findNodeWithLeftIdx(newState, source.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== source.leftIdx);\n target.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n target.children.push(source);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_COPIED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n let sourceCopy = Object.assign({}, source);\n target.children.push(sourceCopy);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_TARGETS_MARKED':\n newState = Object.assign({}, state, {\n showMarked: true,\n moveCopyMode: payload.mode,\n moveCopySource: payload.source\n });\n markSubtree(newState, payload.source, true);\n return newState;\n case 'GRAMENE_FILTER_TARGETS_UNMARKED':\n newState = Object.assign({}, state, {\n showMarked: false\n });\n return newState;\n case 'GRAMENE_FILTERS_REPLACED':\n payload.status = 'search';\n payload.searchOffset = 0;\n return payload;\n case 'GRAMENE_FILTERS_STATUS_CHANGED':\n if (!(state.status === 'ready' && payload === 'waiting')) {\n return Object.assign({}, state, {status: payload})\n }\n break;\n case 'GRAMENE_FILTERS_SET_SHOW_MARKED':\n return Object.assign({}, state, {showMarked: payload});\n case 'GRAMENE_FILTER_MENU_TOGGLED':\n payload.showMenu = !payload.showMenu;\n return Object.assign({}, state);\n case 'GRAMENE_SEARCH_PAGE_REQUESTED':\n return Object.assign({}, state, {status: 'search', searchOffset: payload * state.rows});\n case 'GRAMENE_SEARCH_FETCH_STARTED':\n return Object.assign({}, state, {status: 'loading'});\n case 'GRAMENE_SEARCH_FETCH_FINISHED':\n return Object.assign({}, state, {status: 'finished'});\n case 'GRAMENE_GENOMES_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, state, {status: 'search'});\n }\n case 'URL_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, initialState, {children:[]})\n }\n break;\n case 'APP_IDLE':\n if (state.showMarked) {\n return Object.assign({}, state, {showMarked: false})\n }\n }\n return state;\n }\n },\n doNegateGrameneFilter: filter => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_NEGATED', payload: filter}\n ]\n })\n },\n doDeleteGrameneFilter: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_TAXONOMY_CLEARED'},\n {type: 'GRAMENE_FILTER_DELETED', payload: filter}\n ]\n })\n },\n doChangeGrameneFilterOperation: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_OPERATION_CHANGED', payload: filter}\n ]\n })\n },\n doMoveOrCopyGrameneFilter: (target) => ({dispatch, getState}) => {\n const state = getState();\n if (state.grameneFilters.moveCopyMode) {\n const source = state.grameneFilters.moveCopySource;\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: `GRAMENE_FILTER_${state.grameneFilters.moveCopyMode.toUpperCase()}D`, payload: {source, target}}\n ]\n })\n }\n },\n doCopyGrameneFilter: (source, target) => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_COPIED', payload: {source, target}}\n ]\n })\n },\n doMarkGrameneFilterTargets: (source, mode) => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_MARKED', payload: {source:source, mode:mode}})\n },\n doUnmarkGrameneFilterTargets: () => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_UNMARKED'})\n },\n doAcceptGrameneSuggestion: suggestion => ({dispatch, getState}) => {\n if (!suggestion.name) {\n suggestion.name = suggestion.display_name;\n }\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: suggestion}\n ]\n })\n },\n doAddGrameneRangeQuery: terms => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'AND', filters: terms}}\n ]\n })\n },\n doToggleGrameneFilterMenu: node => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_MENU_TOGGLED', payload: node})\n },\n doRequestResultsPage: page => ({dispatch}) => {\n dispatch(\n {type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_SEARCH_PAGE_REQUESTED', payload: page}\n ]\n })\n },\n doReplaceGrameneFilters: filters => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: filters}\n ]\n })\n },\n doClearGrameneFilters: () => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_CLEARED'}\n ]\n })\n },\n selectGrameneFilters: state => state.grameneFilters,\n selectGrameneFiltersStatus: state => state.grameneFilters.status,\n selectGrameneFiltersQueryString: state => {\n const hasSpaces = new RegExp(/^[^\\[\\(].*\\s/);\n const isQuery = new RegExp(/\\([a-zA-Z0-9_]+:[a-zA-Z0-9_]+\\s/);\n const isRegionQuery = new RegExp(/^\\(map:/);\n const idWithColon = new RegExp(/^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+$/);\n function getQuery(node) {\n const negate = node.negate ? 'NOT ' : '';\n if (node.hasOwnProperty('children')) {\n // do some recursion\n return `${negate}(${node.children.map(c => getQuery(c)).sort().join(` ${node.operation} `)})`\n }\n else {\n // this node is a suggestion\n if (node.fq_field === 'location' && isRegionQuery.test(node.fq_value))\n return `${negate}${node.fq_value}`\n if (isQuery.test(node.fq_value))\n return `${negate}${node.fq_value.replace(/:/g,'\\\\:')}`;\n if (hasSpaces.test(node.fq_value))\n return `${negate}${node.fq_field}:\"${node.fq_value}\"`;\n else if (idWithColon.test(node.fq_value))\n return `${negate}${node.fq_field}:${node.fq_value.replace(/:/g,'\\\\:')}`;\n else\n return `${negate}${node.fq_field}:${node.fq_value}`\n }\n }\n if (state.grameneFilters.rightIdx === 1) {\n return '*:*';\n }\n return `*:* AND (${getQuery(state.grameneFilters)})`;\n },\n selectGrameneSearchOffset: state => state.grameneFilters.searchOffset,\n selectGrameneSearchRows: state => state.grameneFilters.rows\n};\n\nconst handleIdList = (queryObject) => {\n let actions = [{type: 'GRAMENE_SEARCH_CLEARED'}];\n let ids = _.uniq(queryObject.idList.split(','));\n let warning = null;\n if (ids.length > MAX_IDLIST_LENGTH) {\n ids = _.slice(ids, 0, MAX_IDLIST_LENGTH);\n warning = `The idList query parameter is limited to ${MAX_IDLIST_LENGTH} genes`\n }\n let filters = ids.map((id,idx) => {\n return {\n category: 'Gene',\n name: id,\n fq_field: 'id',\n fq_value: id\n }\n });\n if (filters.length === 1) {\n actions.push({type: 'GRAMENE_FILTER_ADDED', payload: filters[0]})\n }\n else {\n let action = {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'OR', filters:filters}};\n if (warning) {\n action.payload.warning = warning\n }\n actions.push(action)\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n};\n\ngrameneFilters.reactGrameneFilters = createSelector(\n 'selectQueryObject',\n 'selectGrameneFilters',\n 'selectActiveGenomes',\n 'selectUrlObject',\n (queryObject, filters, genomes, myUrl) => {\n if (filters.status === 'init') {\n if (queryObject.filters) {\n const newFilters = JSON.parse(queryObject.filters);\n let actions = [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: newFilters}\n ];\n if (queryObject.genomes) {\n let active={};\n queryObject.genomes.split(',').forEach(t => {\n active[t]=true\n });\n actions.push({type: 'GRAMENE_GENOMES_UPDATED', payload: active});\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n }\n if (queryObject.hasOwnProperty('sugg')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(queryObject.sugg)}\n ]\n };\n }\n if (queryObject.hasOwnProperty('suggestion')) {\n const url = new URL(myUrl.href);\n url.search = '';\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'SUGGESTIONS_QUERY_CHANGED', payload: {query: queryObject.suggestion}}\n ]\n };\n }\n if (queryObject.hasOwnProperty('idList')) {\n return handleIdList(queryObject);\n }\n if (queryObject.hasOwnProperty('fq_field') && queryObject.hasOwnProperty('fq_value')\n && queryObject.hasOwnProperty('category') && queryObject.hasOwnProperty('name')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: queryObject}\n ]\n };\n }\n const url = new URL(myUrl.href);\n if (url.pathname === '/genes') {\n return {type: 'GRAMENE_FILTERS_CLEARED'}\n }\n }\n if (filters.status === 'finished') {\n const url = new URL(myUrl.href);\n url.search = `filters=${JSON.stringify(Object.assign({}, filters, {status: 'init'}))}&genomes=${genomes.join(',')}`;\n ReactGA.event({\n category: \"Gene Search\",\n action: \"filter finished\",\n label: url.search\n });\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_FILTERS_STATUS_CHANGED', payload: 'ready'}\n ]\n }\n }\n }\n);\n\nexport default grameneFilters;\n","import { createSelector } from 'redux-bundler';\n\nconst grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'exprViz',\n name: 'Expression visualization',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'userLists',\n name: 'User Gene Lists',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'export',\n name: 'Data exporter',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'expression',\n name: 'Gene expression',\n show: 'off',\n shouldScroll: false,\n desiredSamples: {}\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'off',\n shouldScroll: false\n }\n // {\n // id: 'domains',\n // name: 'Domains',\n // show: 'disabled'\n // },\n // {\n // id: 'go',\n // name: 'GO terms',\n // show: 'disabled'\n // }\n ],\n touched: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_VIEW_TOGGLED':\n newState = Object.assign({},state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'off' : 'on'\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_CLICKED':\n newState = Object.assign({}, state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'on' : 'on';\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_SCROLLED':\n newState = Object.assign({}, state);\n newState.options.forEach(v => v.shouldScroll = false)\n return newState;\n default:\n return state;\n }\n }\n },\n doToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_TOGGLED', payload: idx})\n },\n dontToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_CLICKED', payload: idx})\n },\n doCancelShouldScroll: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_SCROLLED', payload: null})\n },\n selectRawGrameneViews: state => state.grameneViews,\n selectGrameneViews: createSelector(\n 'selectRawGrameneViews',\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneFilters',\n (raw, config, search, filters) => {\n const overrides = (config && config.views) || null;\n const touched = raw.touched || {};\n const numFound = (search && search.response && search.response.numFound) || 0;\n const hasFilters = !!(filters && filters.rightIdx > 1);\n const resultDependentIds = new Set(['taxonomy', 'list', 'export']);\n const autoDisable = (numFound === 0) || !hasFilters;\n const hasFirebase = !!(config && config.firebaseConfig);\n\n let options = raw.options;\n if (!hasFirebase) {\n options = options.filter(v => v.id !== 'userLists');\n }\n if (overrides) {\n options = options.filter(v => overrides[v.id] !== 'hidden');\n }\n options = options.map(v => {\n if (resultDependentIds.has(v.id) && autoDisable) {\n return { ...v, show: 'off' };\n }\n if (!overrides) return v;\n const o = overrides[v.id];\n if (!o) return v;\n if (o === 'disabled') return { ...v, show: 'disabled' };\n if (touched[v.id]) return v;\n return { ...v, show: o };\n });\n const anyOtherOn = options.some(v => v.id !== 'help' && v.show === 'on');\n if (!anyOtherOn) {\n options = options.map(v => v.id === 'help' ? { ...v, show: 'on' } : v);\n }\n return { ...raw, options };\n }\n ),\n // Set of view ids whose `show` is currently 'on'. Used by data bundles to\n // gate their auto-fetch reactors so we don't pay the cost of loading data\n // for views the user has turned off.\n selectGrameneViewsOn: createSelector(\n 'selectGrameneViews',\n (views) => {\n const ids = new Set();\n const opts = (views && views.options) || [];\n for (const v of opts) if (v && v.show === 'on') ids.add(v.id);\n return ids;\n }\n )\n};\n\nexport default grameneViews;\n","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {},\n sequences: {},\n rnaSequences: {},\n pepSequences: {},\n studies: {},\n desiredSamples: {},\n consequences: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_CONSEQUENCES_REQUESTED':\n if (!state.consequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.consequences[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_CONSEQUENCES_RECEIVED':\n newState = Object.assign({}, state);\n newState.consequences = Object.assign({}, state.consequences, payload);\n return newState;\n case 'GRAMENE_GENE_REQUESTED':\n if (!state.genes.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.genes[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_GENE_RECEIVED':\n newState = Object.assign({}, state);\n newState.genes = Object.assign({}, state.genes, payload);\n return newState;\n case 'GRAMENE_TREE_REQUESTED':\n if (!state.trees.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.trees[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_TREE_RECEIVED':\n newState = Object.assign({}, state);\n newState.trees = Object.assign({}, state.trees, payload);\n return newState;\n case 'GRAMENE_PATHWAYS_RECEIVED':\n newState = Object.assign({}, state);\n newState.pathways = Object.assign({}, state.pathways, payload);\n return newState;\n case 'ATLAS_STUDIES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies = Object.assign({}, state.studies, payload);\n return newState;\n case 'ATLAS_SAMPLES_REQUESTED':\n if (!state.studies.byID[payload].hasOwnProperty('samples')) {\n newState = Object.assign({},state);\n newState.studies.byID[payload].samples = [];\n return newState;\n }\n break;\n case 'ATLAS_SAMPLES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies.byID[payload.id].samples = payload.samples;\n return newState;\n case 'GENE_SEQUENCE_REQUESTED':\n if (!state.sequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.sequences[payload] = {};\n return newState;\n }\n break;\n case 'RNA_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.rnaSequences[payload] = {};\n return newState;\n }\n break;\n case 'PEP_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.pepSequences[payload] = {};\n return newState;\n }\n break;\n case 'GENE_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.sequences = Object.assign({}, state.sequences);\n newState.sequences[payload.id] = payload.geneSeq;\n return newState;\n case 'RNA_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.rnaSequences = Object.assign({}, state.rnaSequences);\n newState.rnaSequences[payload.id] = payload.RnaSeq;\n return newState;\n case 'PEP_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.pepSequences = Object.assign({}, state.pepSequences);\n newState.pepSequences[payload.id] = payload.PepSeq;\n return newState;\n case 'PARALOG_EXPRESSION_REQUESTED':\n if (!state.expression.hasOwnProperty(payload)) {\n newState = Object.assign({},state);\n newState.expression[payload] = [];\n return newState;\n }\n break;\n case 'PARALOG_EXPRESSION_RECEIVED':\n newState = Object.assign({}, state);\n newState.expression = Object.assign({}, state.expression);\n newState.expression[payload.id] = payload.paralogs;\n return newState;\n case 'EXPRESSION_SAMPLE_TOGGLED':\n newState = Object.assign({}, state);\n newState.desiredSamples = Object.assign({}, state.desiredSamples);\n if (newState.desiredSamples.hasOwnProperty(payload)) {\n delete newState.desiredSamples[payload]\n }\n else {\n newState.desiredSamples[payload] = {status: 'need'}\n }\n return newState;\n }\n return state;\n }\n },\n doToggleExpressionSample: id => ({dispatch}) => {\n dispatch({type: 'EXPRESSION_SAMPLE_TOGGLED', payload: id});\n },\n doRequestVEP: id => ({dispatch, store}) => {\n const consequences = store.selectGrameneConsequences();\n if (!consequences.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_CONSEQUENCES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=id:${id}&fl=id,VEP__*`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.response.docs.forEach(g => {\n genes[g.id] = g;\n });\n dispatch({type: 'GRAMENE_CONSEQUENCES_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneGene: id => ({dispatch, store}) => {\n const genes = store.selectGrameneGenes();\n if (!genes.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_GENE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genes?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.forEach(g => {\n genes[g._id] = g;\n });\n dispatch({type: 'GRAMENE_GENE_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneTree: id => ({dispatch, store}) => {\n const trees = store.selectGrameneTrees();\n const maps = store.selectGrameneMaps();\n if (!trees.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_TREE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genetrees?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let trees = {};\n res.forEach(t => {\n function update_taxon_name(node) {\n if (maps.hasOwnProperty(node.taxon_id)) {\n node.taxon_name = maps[node.taxon_id].display_name\n }\n else if (node.taxon_id === 1100004558) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45580023 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45770001 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Zea mays\"\n }\n if (node.taxon_id === 297600009 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Vitis vinifera\"\n }\n if (node.hasOwnProperty('children')) {\n node.children.forEach(c => update_taxon_name(c))\n }\n }\n update_taxon_name(t);\n trees[t._id] = t;\n });\n dispatch({type: 'GRAMENE_TREE_RECEIVED', payload: trees})\n })\n }\n },\n doRequestGramenePathways: ids => ({dispatch, store}) => {\n const pathways = store.selectGramenePathways();\n let newIds = ids.filter(id => !pathways.hasOwnProperty(id));\n if (newIds) {\n dispatch({type: 'GRAMENE_PATHWAYS_REQUESTED', payload: newIds});\n if (newIds.length === 1) newIds.push(0);\n fetch(`${store.selectGrameneAPI()}/pathways?idList=${newIds.join(',')}`)\n .then(res => res.json())\n .then(res => {\n let pathways = {};\n res.forEach(p => {\n pathways[p._id] = p;\n });\n dispatch({type: 'GRAMENE_PATHWAYS_RECEIVED', payload: pathways})\n })\n }\n },\n doRequestExpressionStudies: id => ({dispatch, store}) => {\n fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => {\n let studies = {byID:{},byTaxon:{}};\n res.forEach(s => {\n studies.byID[s._id] = s;\n if (! studies.byTaxon.hasOwnProperty(s.taxon_id)) {\n studies.byTaxon[s.taxon_id] = []\n }\n studies.byTaxon[s.taxon_id].push(s._id)\n })\n dispatch({type: 'ATLAS_STUDIES_RECEIVED', payload: studies})\n })\n },\n doRequestStudyMetadata: id => ({dispatch, store}) => {\n const studies = store.selectAtlasStudies();\n if (!studies.byID[id].hasOwnProperty('samples')) {\n dispatch({type: 'ATLAS_SAMPLES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/assays?experiment=${id}&rows=-1`)\n .then(res => res.json())\n .then(samples => {\n dispatch({type: 'ATLAS_SAMPLES_RECEIVED', payload: {id, samples}})\n })\n }\n },\n doRequestGeneSequence: gene => ({dispatch, store}) => {\n const maps = store.selectGrameneMaps();\n const seqs = store.selectGeneSequences();\n const id = gene._id;\n const MAX_FLANK = 2000;\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'GENE_SEQUENCE_REQUESTED', payload: id});\n const start = gene.location.start > MAX_FLANK ? gene.location.start - MAX_FLANK : 1;\n const dnaLength = maps[gene.taxon_id].regionLength[gene.location.region];\n const end = gene.location.end + MAX_FLANK > dnaLength ? dnaLength : gene.location.end + MAX_FLANK;\n fetch(`${store.selectEnsemblAPI()}/sequence/region/${gene.system_name}/${gene.location.region}:${start}..${end}:${gene.location.strand}?content-type=application/json`)\n .then(res => res.json())\n .then(geneSeq => {\n const x = geneSeq.id.split(':');\n geneSeq.genome = x[1];\n geneSeq.start = +x[3];\n geneSeq.end = +x[4];\n dispatch({type: 'GENE_SEQUENCE_RECEIVED', payload: {id, geneSeq}});\n })\n }\n },\n doRequestRnaSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectRnaSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'RNA_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=cdna&content-type=application/json`)\n .then(res => res.json())\n .then(RnaSeq => {\n dispatch({type: 'RNA_SEQUENCE_RECEIVED', payload: {id, RnaSeq}});\n })\n }\n },\n doRequestPepSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectPepSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'PEP_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=protein&content-type=application/json`)\n .then(res => res.json())\n .then(PepSeq => {\n dispatch({type: 'PEP_SEQUENCE_RECEIVED', payload: {id, PepSeq}});\n })\n }\n },\n doRequestParalogExpression: id => ({dispatch, store}) => {\n const expr = store.selectParalogExpression();\n if (!expr.hasOwnProperty(id)) {\n dispatch({type: 'PARALOG_EXPRESSION_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=homology__within_species_paralog:${id}&fl=id,atlas_id,name,*__expr&rows=100`)\n .then(res => res.json())\n .then(res => {\n const assay_re = /(.+)_g(\\d+)/;\n const paralogs = res.response.docs.map(d => {\n let p = {\n id: d.id,\n name: d.name,\n experiments: {},\n min:1000,\n max:0\n };\n if (d.atlas_id) {\n p.atlas_id = d.atlas_id;\n delete d.atlas_id;\n }\n delete d.id;\n delete d.name;\n Object.entries(d).forEach(assay => {\n const parsed = assay[0].match(assay_re);\n const expr = parsed[1].replace('_','-').replace('-tpms','');\n if (! p.experiments.hasOwnProperty(expr)) {\n p.experiments[expr] = [];\n }\n const g = parsed[2] - 1;\n const e = d[assay[0]];\n if (e < p.min) p.min = e;\n if (e > p.max) p.max = e;\n p.experiments[expr][g] = e;\n });\n return p;\n }).map(p => {\n for (const expr in p.experiments) {\n p.experiments[expr] = p.experiments[expr].filter(e => e >= 0);\n }\n return p;\n });\n dispatch({type: 'PARALOG_EXPRESSION_RECEIVED', payload: {id, paralogs}});\n })\n }\n },\n selectGrameneGenes: state => state.grameneDocs.genes,\n selectGrameneConsequences: state => state.grameneDocs.consequences,\n selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression,\n selectGeneSequences: state => state.grameneDocs.sequences,\n selectRnaSequences: state => state.grameneDocs.rnaSequences,\n selectPepSequences: state => state.grameneDocs.pepSequences,\n selectAtlasStudies: state => state.grameneDocs.studies,\n selectDesiredSamples: state => state.grameneDocs.desiredSamples\n};\n\nexport default grameneDocs;\n","import {createSelector} from \"redux-bundler\";\nconst grameneGenomes = {\n name: 'grameneGenomes',\n getReducer: () => {\n const initialState = {\n show: false,\n active: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_GENOMES_TOGGLED':\n newState = Object.assign({},state);\n newState.show = !newState.show;\n return newState;\n case 'GRAMENE_GENOMES_UPDATED':\n newState = Object.assign({}, state);\n newState.active = payload;\n return newState;\n case 'GRAMENE_MAPS_FETCH_FINISHED':\n newState = Object.assign({}, state);\n Object.keys(payload).forEach(key => {newState.active[key] = true;});\n return newState;\n default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doInitializeGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes},\n {type: 'GRAMENE_GENOMES_TOGGLED'},\n {type: 'GRAMENE_SEARCH_CLEARED'}]})\n },\n doEnsureGrameneGenome: genome => ({dispatch, getState}) => {\n const state = getState();\n if (Object.keys(state.grameneGenomes.active).length > 0 && !state.grameneGenomes.active.hasOwnProperty(genome)) {\n let active = Object.assign({}, state.grameneGenomes.active);\n active[genome]=true;\n dispatch({type: 'GRAMENE_GENOMES_UPDATED', payload: active})\n }\n },\n selectGrameneGenomes: state => state.grameneGenomes,\n selectActiveGenomes: state => {\n return Object.keys(state.grameneGenomes.active)\n },\n selectActiveGenomeCount: createSelector(\n 'selectGrameneMaps',\n 'selectGrameneGenomes',\n (maps,genomes) => {\n if (maps && genomes) {\n return Object.keys(genomes.active).length || Object.keys(maps).length;\n }\n return 0;\n }\n )\n};\n\nexport default grameneGenomes;\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler';\nimport overlay from '../fieldCatalog.overlay.json';\nimport { study_info as VEP_STUDY_INFO } from '../vepStudyInfo';\n\n// Fields matched by these globs are multi-valued in Solr.\nconst MULTIVALUED_PATTERNS = [\n /__expr$/,\n /__ancestors$/,\n /__xrefs$/,\n /^VEP__/,\n /^homology__/\n];\n\nfunction parseCsvHeader(text) {\n if (!text) return [];\n const line = text.split(/\\r?\\n/, 1)[0] || '';\n return line\n .split(',')\n .map(s => s.trim().replace(/^\"|\"$/g, ''))\n .filter(Boolean);\n}\n\nfunction synthesizedValue(name) {\n return MULTIVALUED_PATTERNS.some(re => re.test(name)) ? [0] : 0;\n}\n\nfunction applyTemplate(tpl, match) {\n if (!tpl) return null;\n return tpl.replace(/\\$(\\d+)/g, (_, n) => match[+n] || '');\n}\n\nfunction vepDetailLabel(matchGroups) {\n const [, , system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n if (info) return info.label;\n return `${system}/${sid}`;\n}\n\nfunction vepDetailTsvHeader(matchGroups) {\n const [conseq, zyg, system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const type = (info && info.type) || '?';\n const study = (info && info.label) || `${system}/${sid}`;\n return `${type}·${conseq}·${zyg}·${study}`;\n}\n\nfunction vepMergedLabel(matchGroups) {\n const [kind] = matchGroups || [];\n if (kind === 'NAT') return 'Merged natural population accessions';\n if (kind === 'EMS') return 'Merged EMS mutant accessions';\n return `Merged ${kind} accessions`;\n}\n\nfunction vepMergedTsvHeader(matchGroups) {\n const [kind] = matchGroups || [];\n return `merged·${kind}`;\n}\n\nfunction classifyKey(name, patterns) {\n for (const p of patterns) {\n const re = new RegExp(p.match);\n const m = name.match(re);\n if (m) {\n return {\n patternId: p.id,\n group: p.group,\n label: applyTemplate(p.labelTemplate, m) || name,\n multiValued: !!p.multiValued,\n expression: !!p.expression,\n isHidden: !!p.is_hidden,\n matchGroups: m.slice(1)\n };\n }\n }\n return null;\n}\n\nfunction inferType(value) {\n if (value === null || value === undefined) return 'unknown';\n if (Array.isArray(value)) {\n return 'array<' + (value.length ? inferType(value[0]) : 'unknown') + '>';\n }\n return typeof value;\n}\n\nfunction buildCatalog(sampleDocs) {\n const hidden = new Set(overlay.hidden || []);\n const overlayFields = overlay.fields || {};\n const patterns = overlay.patterns || [];\n const groupsMeta = overlay.groups || {};\n\n // Union keys from overlay.fields (hardcoded catalog entries) and sample docs.\n const keys = new Set(Object.keys(overlayFields));\n const sampleValues = {};\n for (const doc of (sampleDocs || [])) {\n for (const [k, v] of Object.entries(doc)) {\n keys.add(k);\n if (!(k in sampleValues)) sampleValues[k] = v;\n }\n }\n\n const fields = {};\n for (const name of keys) {\n if (hidden.has(name)) continue;\n\n const overlayEntry = overlayFields[name];\n const classified = overlayEntry ? null : classifyKey(name, patterns);\n if (classified && classified.isHidden) continue;\n const sampleVal = sampleValues[name];\n const sampleType = sampleVal !== undefined ? inferType(sampleVal) : null;\n\n const group = (overlayEntry && overlayEntry.group)\n || (classified && classified.group)\n || 'other';\n\n let label = (overlayEntry && overlayEntry.label)\n || (classified && classified.label)\n || name;\n let tsvHeader = null;\n if (classified && classified.patternId === 'vep_detail') {\n label = vepDetailLabel(classified.matchGroups);\n tsvHeader = vepDetailTsvHeader(classified.matchGroups);\n } else if (classified && classified.patternId === 'vep_merged') {\n label = vepMergedLabel(classified.matchGroups);\n tsvHeader = vepMergedTsvHeader(classified.matchGroups);\n }\n\n const multiValued = (overlayEntry && overlayEntry.multiValued)\n || (classified && classified.multiValued)\n || (sampleType && sampleType.startsWith('array<'))\n || false;\n\n fields[name] = {\n name,\n label,\n tsvHeader,\n group,\n order: overlayEntry && overlayEntry.order != null ? overlayEntry.order : null,\n description: (overlayEntry && overlayEntry.description) || '',\n type: sampleType || 'unknown',\n multiValued,\n patternId: classified ? classified.patternId : null,\n matchGroups: classified ? classified.matchGroups : null,\n expression: !!(classified && classified.expression),\n source: overlayEntry ? 'overlay' : 'sample'\n };\n }\n\n // Build groups (explicit overlay.order first, then natural sort by label)\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const compareFields = (a, b) => {\n const ao = a.order, bo = b.order;\n if (ao != null && bo != null && ao !== bo) return ao - bo;\n if (ao != null && bo == null) return -1;\n if (ao == null && bo != null) return 1;\n return collator.compare(a.label, b.label);\n };\n const groupIds = new Set(Object.values(fields).map(f => f.group));\n const groups = Array.from(groupIds).map(id => ({\n id,\n label: (groupsMeta[id] && groupsMeta[id].label) || id,\n order: (groupsMeta[id] && groupsMeta[id].order) != null ? groupsMeta[id].order : 50,\n fields: Object.values(fields)\n .filter(f => f.group === id)\n .sort(compareFields)\n .map(f => f.name)\n })).sort((a, b) => a.order - b.order);\n\n return {\n fetchedAt: Date.now(),\n groups,\n fields\n };\n}\n\nconst grameneFieldCatalog = createAsyncResourceBundle({\n name: 'grameneFieldCatalog',\n actionBaseType: 'GRAMENE_FIELD_CATALOG',\n persist: true,\n staleAfter: 5 * 60 * 1000,\n getPromise: ({ store }) => {\n const api = store.selectGrameneAPI();\n const url = `${api}/search?q=*:*&rows=0&wt=csv&fl=*`;\n return fetch(url)\n .then(r => r.text())\n .then(text => parseCsvHeader(text))\n .catch(() => null);\n }\n});\n\n// Auto-fetch the field catalog only when a view that needs it (exprViz fields\n// modal, exporter field tree) is enabled. Other views never read it.\nconst FIELD_CATALOG_VIEWS = ['exprViz', 'export'];\ngrameneFieldCatalog.reactGrameneFieldCatalog = createSelector(\n 'selectGrameneFieldCatalogShouldUpdate',\n 'selectGrameneViewsOn',\n (shouldUpdate, viewsOn) => {\n if (!shouldUpdate) return;\n if (!viewsOn || !FIELD_CATALOG_VIEWS.some(id => viewsOn.has(id))) return;\n return { actionCreator: 'doFetchGrameneFieldCatalog' };\n }\n);\n\nfunction assayFactorLabel(assay) {\n if (!assay) return '';\n const factors = Array.isArray(assay.factor) ? assay.factor : [];\n const labels = factors.map(f => f && f.label).filter(Boolean);\n if (labels.length) return labels.join('; ');\n const chars = Array.isArray(assay.characteristic) ? assay.characteristic : [];\n const organ = chars.find(c => c && c.type === 'organism part');\n return (organ && organ.label) || '';\n}\n\nfunction parseTaxonFacet(grameneSearch, grameneMaps) {\n const arr = grameneSearch\n && grameneSearch.facet_counts\n && grameneSearch.facet_counts.facet_fields\n && grameneSearch.facet_counts.facet_fields.taxon_id;\n if (!Array.isArray(arr) || !arr.length) return null;\n // Search taxon_ids are strain-specific (e.g. 3702001); experiments use\n // species-level NCBI taxon_ids (e.g. 3702). Map via grameneMaps.anchor_taxon_id.\n // If maps aren't loaded yet, skip filtering rather than drop everything.\n if (!grameneMaps || !Object.keys(grameneMaps).length) return null;\n const speciesTaxa = new Set();\n for (let i = 0; i < arr.length; i += 2) {\n const tid = arr[i];\n if (arr[i + 1] <= 0) continue;\n const map = grameneMaps[tid];\n const anchor = map && map.anchor_taxon_id;\n speciesTaxa.add(Number(anchor || tid));\n }\n return speciesTaxa.size ? speciesTaxa : null;\n}\n\nfunction buildExperimentTaxonIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const [taxon, arr] of Object.entries(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = Number(taxon);\n }\n return index;\n}\n\nfunction buildExperimentTitleIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) {\n if (e && e._id) index[e._id] = e.description || e.title || '';\n }\n }\n return index;\n}\n\nfunction buildSpeciesNameIndex(grameneMaps) {\n const idx = {};\n if (!grameneMaps) return idx;\n for (const m of Object.values(grameneMaps)) {\n if (m && m.anchor_taxon_id && !idx[m.anchor_taxon_id]) {\n idx[m.anchor_taxon_id] = m.display_name || String(m.anchor_taxon_id);\n }\n }\n return idx;\n}\n\nfunction fieldExperimentId(name) {\n let m = name.match(/^(\\w+?)_g\\d+__expr$/);\n if (m) return m[1].replace(/_/g, '-');\n m = name.match(/^(\\w+?)_g\\d+_g\\d+_(pval|l2fc)_attr_[a-z]$/);\n if (m) return m[1].replace(/_/g, '-');\n return null;\n}\n\nconst STAT_RANK = { l2fc: 0, pval: 1 };\n\nfunction collapseDiffExprInSubgroups(subgroups, fieldsOut, collator) {\n for (const taxGroup of subgroups) {\n for (const expGroup of (taxGroup.subgroups || [])) {\n const contrastMap = new Map();\n const others = [];\n for (const name of (expGroup.fields || [])) {\n const f = fieldsOut[name];\n if (!f || f.patternId !== 'diffexpr') { others.push(name); continue; }\n const mg = f.matchGroups || [];\n const key = `${mg[1]}|${mg[2]}`;\n let arr = contrastMap.get(key);\n if (!arr) { arr = []; contrastMap.set(key, arr); }\n arr.push(name);\n }\n const newFields = [...others];\n for (const names of contrastMap.values()) {\n if (names.length === 1) { newFields.push(names[0]); continue; }\n names.sort((a, b) => {\n const ra = STAT_RANK[(fieldsOut[a].matchGroups || [])[3]] ?? 99;\n const rb = STAT_RANK[(fieldsOut[b].matchGroups || [])[3]] ?? 99;\n if (ra !== rb) return ra - rb;\n return collator.compare(a, b);\n });\n const rep = names[0];\n const repEntry = fieldsOut[rep];\n const label = (repEntry.label || rep).replace(/\\s+\\((?:pval|l2fc)\\)/, '');\n fieldsOut[rep] = { ...repEntry, label, linkedFields: names.slice() };\n newFields.push(rep);\n }\n expGroup.fields = newFields;\n }\n }\n}\n\nfunction buildExpressionSubgroups(fieldNames, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator) {\n const byTaxon = new Map();\n const orphans = [];\n const studiesLoaded = Object.keys(experimentTaxa).length > 0;\n for (const name of fieldNames) {\n const expId = fieldExperimentId(name);\n if (!expId) { orphans.push(name); continue; }\n const taxon = experimentTaxa[expId];\n if (!taxon) {\n if (studiesLoaded) continue;\n orphans.push(name);\n continue;\n }\n let taxonEntry = byTaxon.get(taxon);\n if (!taxonEntry) {\n taxonEntry = new Map();\n byTaxon.set(taxon, taxonEntry);\n }\n let expEntry = taxonEntry.get(expId);\n if (!expEntry) {\n expEntry = [];\n taxonEntry.set(expId, expEntry);\n }\n expEntry.push(name);\n }\n\n const taxonGroups = [];\n for (const [taxon, expMap] of byTaxon) {\n const experiments = [];\n for (const [expId, names] of expMap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n const title = experimentTitles && experimentTitles[expId];\n experiments.push({\n id: 'exp-' + expId,\n label: title ? `${expId} — ${title}` : expId,\n fields: names\n });\n }\n experiments.sort((a, b) => collator.compare(a.label, b.label));\n taxonGroups.push({\n id: 'tax-' + taxon,\n label: speciesNames[taxon] || `taxon ${taxon}`,\n taxon,\n subgroups: experiments\n });\n }\n taxonGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n return { subgroups: taxonGroups, orphans };\n}\n\nfunction buildVepSubgroups(fieldNames, fieldsOut, collator) {\n const buckets = {\n NAT: { merged: [], byConseq: new Map() },\n EMS: { merged: [], byConseq: new Map() }\n };\n const orphans = [];\n\n for (const name of fieldNames) {\n const f = fieldsOut[name];\n if (!f) { orphans.push(name); continue; }\n if (f.patternId === 'vep_merged') {\n const kind = (f.matchGroups && f.matchGroups[0]) || '';\n if (buckets[kind]) buckets[kind].merged.push(name);\n else orphans.push(name);\n } else if (f.patternId === 'vep_detail') {\n const mg = f.matchGroups || [];\n const [conseq, zyg, system, sid] = mg;\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const kind = info && info.type;\n if (!buckets[kind]) { orphans.push(name); continue; }\n let zmap = buckets[kind].byConseq.get(conseq);\n if (!zmap) {\n zmap = new Map();\n buckets[kind].byConseq.set(conseq, zmap);\n }\n let arr = zmap.get(zyg);\n if (!arr) {\n arr = [];\n zmap.set(zyg, arr);\n }\n arr.push(name);\n } else {\n orphans.push(name);\n }\n }\n\n const kindLabels = { NAT: 'Natural populations', EMS: 'Mutant populations' };\n const subgroups = [];\n for (const kind of ['NAT', 'EMS']) {\n const bucket = buckets[kind];\n if (!bucket.merged.length && bucket.byConseq.size === 0) continue;\n\n const conseqGroups = [];\n for (const [conseq, zmap] of bucket.byConseq) {\n const zygGroups = [];\n for (const [zyg, names] of zmap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n zygGroups.push({\n id: `lof-${kind}-${conseq}-${zyg}`,\n label: zyg === 'het' ? 'heterozygous' : 'homozygous',\n fields: names\n });\n }\n zygGroups.sort((a, b) => collator.compare(a.label, b.label));\n conseqGroups.push({\n id: `lof-${kind}-${conseq}`,\n label: conseq.replace(/_/g, ' '),\n subgroups: zygGroups\n });\n }\n conseqGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n bucket.merged.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n\n subgroups.push({\n id: `lof-${kind}`,\n label: kindLabels[kind],\n fields: bucket.merged,\n subgroups: conseqGroups\n });\n }\n\n return { subgroups, orphans };\n}\n\nfunction enrichLabels(catalog, expressionStudies, expressionSamples, grameneSearch, grameneMaps) {\n if (!catalog || !catalog.fields) return catalog;\n if (!expressionSamples) return catalog;\n\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const taxaInResults = parseTaxonFacet(grameneSearch, grameneMaps);\n const experimentTaxa = buildExperimentTaxonIndex(expressionStudies);\n const experimentTitles = buildExperimentTitleIndex(expressionStudies);\n const dropped = new Set();\n const fieldsOut = {};\n\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (f.patternId !== 'expr' && f.patternId !== 'diffexpr') {\n fieldsOut[name] = f;\n continue;\n }\n const mg = f.matchGroups || [];\n const experimentSolr = mg[0];\n if (!experimentSolr) { fieldsOut[name] = f; continue; }\n const experimentId = experimentSolr.replace(/_/g, '-');\n\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) {\n dropped.add(name);\n continue;\n }\n }\n\n const assays = expressionSamples[experimentId] || [];\n let newLabel = f.label;\n if (f.patternId === 'expr') {\n const g = 'g' + mg[1];\n const assay = assays.find(a => a && a.group === g);\n const desc = assayFactorLabel(assay);\n newLabel = desc ? `${experimentId} ${g}: ${desc}` : `${experimentId} ${g}`;\n } else {\n const gA = 'g' + mg[1];\n const gB = 'g' + mg[2];\n const metric = mg[3];\n const aA = assays.find(a => a && a.group === gA);\n const aB = assays.find(a => a && a.group === gB);\n const dA = assayFactorLabel(aA);\n const dB = assayFactorLabel(aB);\n const pair = dA && dB ? `: ${dA} vs ${dB}` : '';\n newLabel = `${experimentId} ${gA} vs ${gB} (${metric})${pair}`;\n }\n\n fieldsOut[name] = newLabel !== f.label ? { ...f, label: newLabel } : f;\n }\n\n // Synthesize any expr fields missing from catalog.fields using the complete\n // assays collection. The doc-sample only surfaces expr keys that happened to\n // appear in the sampled genes; assays is authoritative per-experiment.\n const synthesized = [];\n for (const [experimentId, assays] of Object.entries(expressionSamples)) {\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) continue;\n }\n const solrPrefix = experimentId.replace(/-/g, '_');\n for (const assay of assays) {\n if (!assay || !assay.group) continue;\n const name = `${solrPrefix}_${assay.group}__expr`;\n if (fieldsOut[name]) continue;\n const desc = assayFactorLabel(assay);\n fieldsOut[name] = {\n name,\n label: desc ? `${experimentId} ${assay.group}: ${desc}` : `${experimentId} ${assay.group}`,\n group: 'expression',\n description: '',\n type: 'array<float>',\n multiValued: true,\n patternId: 'expr',\n matchGroups: [solrPrefix, assay.group.replace(/^g/, '')],\n expression: true,\n source: 'assays'\n };\n synthesized.push(name);\n }\n }\n\n const speciesNames = buildSpeciesNameIndex(grameneMaps);\n\n const groups = catalog.groups.map(g => {\n let list = dropped.size ? g.fields.filter(n => !dropped.has(n)) : g.fields;\n if (g.id === 'expression' && synthesized.length) {\n const existing = new Set(list);\n list = [...list, ...synthesized.filter(n => !existing.has(n))];\n }\n if (g.id === 'lof') {\n const { subgroups, orphans } = buildVepSubgroups(list, fieldsOut, collator);\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n }\n if (g.id !== 'expression' && g.id !== 'differential') {\n return list === g.fields ? g : { ...g, fields: list };\n }\n const { subgroups, orphans } = buildExpressionSubgroups(\n list, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator\n );\n if (g.id === 'differential') {\n collapseDiffExprInSubgroups(subgroups, fieldsOut, collator);\n }\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n });\n\n return { ...catalog, fields: fieldsOut, groups };\n}\n\nfunction filterCatalogByPresentFields(catalog, present) {\n if (!catalog || !catalog.fields || !present) return catalog;\n const filteredFields = {};\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (present.has(name)) filteredFields[name] = f;\n }\n const hasContent = (g) =>\n (g.fields && g.fields.length > 0) ||\n (g.subgroups && g.subgroups.some(hasContent));\n const filterGroup = (g) => {\n const fields = (g.fields || []).filter(n => present.has(n));\n const subgroups = (g.subgroups || [])\n .map(filterGroup)\n .filter(hasContent);\n return { ...g, fields, subgroups };\n };\n const groups = (catalog.groups || []).map(filterGroup).filter(hasContent);\n return { ...catalog, fields: filteredFields, groups };\n}\n\ngrameneFieldCatalog.selectFieldCatalog = createSelector(\n 'selectGrameneFieldCatalog',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n (fieldNames, studies, samples, search, maps) => {\n if (!fieldNames || !fieldNames.length) return null;\n const present = new Set(fieldNames);\n // Build a synthetic doc from the discovered field names; values carry the\n // right JS type so inferType picks the correct multiValued/type (arrays\n // for multi-valued fields, scalars otherwise). Derive the pval companion\n // from every l2fc field.\n const doc = {};\n for (const name of present) {\n doc[name] = synthesizedValue(name);\n if (/_l2fc_attr_f$/.test(name)) {\n doc[name.replace('_l2fc_', '_pval_')] = 0;\n }\n }\n const catalog = buildCatalog([doc]);\n const enriched = enrichLabels(catalog, studies, samples, search, maps);\n return filterCatalogByPresentFields(enriched, present);\n }\n);\n\ngrameneFieldCatalog.selectFieldCatalogGroups = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.groups) || []\n);\n\ngrameneFieldCatalog.selectFieldCatalogByName = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.fields) || {}\n);\n\nexport default grameneFieldCatalog;\n","{\n \"groups\": {\n \"core\": { \"label\": \"Core identifiers\", \"order\": 0 },\n \"location\": { \"label\": \"Genomic location\", \"order\": 1 },\n \"structure\": { \"label\": \"Gene structure\", \"order\": 2 },\n \"homology\": { \"label\": \"Homology\", \"order\": 3 },\n \"expression\": { \"label\": \"Gene expression\", \"order\": 4 },\n \"differential\": { \"label\": \"Differential expression\",\"order\": 5 },\n \"hierarchical\": { \"label\": \"Hierarchical annotations\",\"order\": 6 },\n \"pathways\": { \"label\": \"Pathways\", \"order\": 7 },\n \"GO\": { \"label\": \"Gene Ontology\", \"order\": 7 },\n \"PO\": { \"label\": \"Plant Ontology\", \"order\": 8 },\n \"lof\": { \"label\": \"Loss of function alleles\",\"order\": 9 },\n \"MAKER\": { \"label\": \"MAKER transcript metrics\",\"order\": 10 },\n \"xrefs\": { \"label\": \"External references\", \"order\": 11 },\n \"other\": { \"label\": \"Other\", \"order\": 99 }\n },\n\n \"patterns\": [\n {\n \"id\": \"homology\",\n \"match\": \"^homology__(.+)$\",\n \"group\": \"homology\",\n \"multiValued\": true,\n \"labelTemplate\": \"Homology: $1\"\n },\n {\n \"id\": \"pathways\",\n \"match\": \"^pathways__(.+)$\",\n \"group\": \"pathways\",\n \"multiValued\": true,\n \"labelTemplate\": \"Pathway: $1\"\n },\n {\n \"id\": \"maker\",\n \"match\": \"^MAKER__(.+)__attr_([a-z])$\",\n \"group\": \"MAKER\",\n \"labelTemplate\": \"MAKER: $1\"\n },\n {\n \"id\": \"xrefs\",\n \"match\": \"^(.+)__xrefs$\",\n \"group\": \"xrefs\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 (xrefs)\"\n },\n {\n \"id\": \"expr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)__expr$\",\n \"group\": \"expression\",\n \"expression\": true,\n \"labelTemplate\": \"$1 · g$2\"\n },\n {\n \"id\": \"diffexpr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)_g(\\\\d+)_(pval|l2fc)_attr_([a-z])$\",\n \"group\": \"differential\",\n \"diffExpression\": true,\n \"labelTemplate\": \"$1 · g$2 vs g$3 · $4\"\n },\n {\n \"id\": \"bins\",\n \"match\": \"^(fixed|uniform)_([0-9a-zA-Z]+)__bin$\",\n \"group\": \"bins\",\n \"is_hidden\": true,\n \"labelTemplate\": \"$1 bin ($2)\"\n },\n {\n \"id\": \"neighbors\",\n \"match\": \".*neighbors_[0-9]+$\",\n \"group\": \"neighbors\",\n \"is_hidden\": true,\n \"labelTemplate\": \"neighbors\"\n },\n {\n \"id\": \"vep_merged\",\n \"match\": \"^VEP__merged__(NAT|EMS)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"Merged $1 accessions\"\n },\n {\n \"id\": \"vep_detail\",\n \"match\": \"^VEP__(.+?)__(homo|het)__(.+?)__(\\\\d+)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 ($2) $3/$4\"\n },\n {\n \"id\": \"generic_attr\",\n \"match\": \"^(.+)__attr_([a-z])$\",\n \"group\": \"other\",\n \"labelTemplate\": \"$1\"\n }\n ],\n\n \"fields\": {\n \"id\": { \"group\": \"core\", \"label\": \"Gene ID\", \"order\": 1 },\n \"name\": { \"group\": \"core\", \"label\": \"Name\", \"order\": 2 },\n \"description\": { \"group\": \"core\", \"label\": \"Description\", \"order\": 4 },\n \"summary\": { \"group\": \"core\", \"label\": \"Summary\", \"order\": 5 },\n \"synonyms\": { \"group\": \"core\", \"label\": \"Synonyms\", \"multiValued\": true, \"order\": 3 },\n \"biotype\": { \"group\": \"core\", \"label\": \"Biotype\", \"order\": 6 },\n \"taxon_id\": { \"group\": \"core\", \"label\": \"Taxon ID\", \"order\": 8 },\n \"system_name\": { \"group\": \"core\", \"label\": \"System name\", \"order\": 7 },\n \"db_type\": { \"group\": \"core\", \"label\": \"DB type\", \"order\": 9 },\n\n \"closest_rep_id\": { \"group\": \"homology\", \"label\": \"Closest representative ID\", \"order\": 1 },\n \"closest_rep_name\": { \"group\": \"homology\", \"label\": \"Closest representative name\", \"order\": 2 },\n \"closest_rep_identity\": { \"group\": \"homology\", \"label\": \"Closest representative identity\", \"order\": 3 },\n \"closest_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Closest representative taxon\", \"order\": 4 },\n \"closest_rep_description\": { \"group\": \"homology\", \"label\": \"Closest representative description\", \"order\": 5 },\n \"model_rep_id\": { \"group\": \"homology\", \"label\": \"Model representative ID\", \"order\": 6 },\n \"model_rep_name\": { \"group\": \"homology\", \"label\": \"Model representative name\", \"order\": 7 },\n \"model_rep_identity\": { \"group\": \"homology\", \"label\": \"Model representative identity\", \"order\": 8 },\n \"model_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Model representative taxon\", \"order\": 9 },\n \"model_rep_description\": { \"group\": \"homology\", \"label\": \"Model representative description\", \"order\": 10 },\n\n \"gene_tree\": { \"group\": \"homology\", \"label\": \"Gene tree ID\", \"order\": 11 },\n \"pan_tree\": { \"group\": \"homology\", \"label\": \"Pan-gene tree ID\", \"order\": 14 },\n\n \"capabilities\": { \"group\": \"other\", \"label\": \"Capabilities\", \"multiValued\": true },\n\n \"map\": { \"group\": \"location\", \"label\": \"Map\", \"order\": 1 },\n \"region\": { \"group\": \"location\", \"label\": \"Region\", \"order\": 2 },\n \"start\": { \"group\": \"location\", \"label\": \"Start\", \"order\": 3 },\n \"end\": { \"group\": \"location\", \"label\": \"End\", \"order\": 4 },\n \"strand\": { \"group\": \"location\", \"label\": \"Strand\", \"order\": 5 },\n\n \"GO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"GO terms\", \"multiValued\": true, \"order\": 1 },\n \"PO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"PO terms\", \"multiValued\": true, \"order\": 2 },\n \"TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"TO terms\", \"multiValued\": true, \"order\": 3 },\n \"QTL_TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"QTL traits (TO)\", \"multiValued\": true, \"order\": 7 },\n \"domains__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Domains\", \"multiValued\": true, \"order\": 4 },\n \"taxonomy__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Taxonomy\", \"multiValued\": true, \"order\": 6 },\n \"supertree_attr_s\": { \"group\": \"homology\", \"label\": \"Supertree\", \"order\": 13 },\n \"gene_tree_root_taxon_id\": { \"group\": \"homology\", \"label\": \"Gene tree root taxon\", \"order\": 12 },\n \"protein__length\": { \"group\": \"structure\", \"label\": \"Protein length\" },\n \"transcript__count\": { \"group\": \"structure\", \"label\": \"Transcript count\" },\n \"transcript__exons\": { \"group\": \"structure\", \"label\": \"Exon count\" },\n \"transcript__length\": { \"group\": \"structure\", \"label\": \"Transcript length\" },\n \"expressed_in_gxa_attr_ss\": { \"group\": \"expression\", \"label\": \"Expressed in GXA\", \"multiValued\": true },\n\n \"MAKER__AED__attr_f\": { \"group\": \"MAKER\", \"label\": \"AED\", \"description\": \"Annotation Edit Distance\" },\n \"MAKER__QI1__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI1: Length of the 5' UTR\" },\n \"MAKER__QI2__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI2: Fraction of splice sites confirmed by EST\" },\n \"MAKER__QI3__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI3: Fraction of exons overlapping an EST\" },\n \"MAKER__QI4__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI4: Fraction of exons overlapping EST or protein\" },\n \"MAKER__QI5__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI5: Fraction of splice sites confirmed by SNAP\" },\n \"MAKER__QI6__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI6: Fraction of exons overlapping a SNAP\" },\n \"MAKER__QI7__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI7: Number of exons in the mRNA\" },\n \"MAKER__QI8__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI8: Length of the 3' UTR\" },\n \"MAKER__QI9__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI9: Length of the protein sequence\" },\n\n \"homology__all_orthologs\": { \"group\": \"homology\", \"label\": \"All orthologs\", \"multiValued\": true, \"order\": 15 },\n \"homology__ortholog_one2one\": { \"group\": \"homology\", \"label\": \"1:1 orthologs\", \"multiValued\": true, \"order\": 16 },\n \"homology__ortholog_one2many\": { \"group\": \"homology\", \"label\": \"1:many orthologs\", \"multiValued\": true, \"order\": 17 },\n \"homology__ortholog_many2many\": { \"group\": \"homology\", \"label\": \"Many:many orthologs\", \"multiValued\": true, \"order\": 18 },\n \"homology__syntenic_ortholog_one2one\":{ \"group\": \"homology\", \"label\": \"Syntenic 1:1 orthologs\", \"multiValued\": true, \"order\": 19 },\n \"homology__within_species_paralog\": { \"group\": \"homology\", \"label\": \"Within-species paralogs\", \"multiValued\": true, \"order\": 20 },\n\n \"pathways__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Pathways\", \"multiValued\": true, \"order\": 5 },\n\n \"canonical_transcript__attr_s\": { \"group\": \"structure\", \"label\": \"Canonical transcript ID\" }\n },\n\n \"hidden\": [\n \"_version_\", \"_terms\", \"score\",\n \"gene_idx\", \"gene_idx_multi\", \"species_idx\",\n \"compara_idx\", \"compara_idx_multi\",\n \"_id\", \"annotations\", \"bins\", \"gene_structure\",\n \"homology\", \"location\", \"xrefs\",\n \"domain_roots\", \"familyRoot__ancestors\", \"taxonomy__ancestors\", \"capabilities\",\n \"saved_search\"\n ]}\n","export const study_info = {\n 'sorghum_bicolor': {\n '1': { label: 'Purdue EMS', type: 'EMS' },\n '2': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '3': { label: 'Lozano', type: 'NAT' },\n '4': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '5': { label: 'Boatwright SAP', type: 'NAT' },\n '7': { label: 'Kumar BAP', type: 'NAT' },\n '8': { label: 'Lasky landraces', type: 'NAT' },\n '9': { label: 'Sorghum Genomics Toolbox', type: 'NAT' }\n },\n 'zea_maysb73': {\n '15': { label: 'MaizeGDB 2024', type: 'NAT' }\n },\n 'oryza_sativa': {\n '7': { label: 'Rice 3K', type: 'NAT' },\n '20': { label: '19K-RGP', type: 'NAT' },\n '29': { label: 'Rice USDA mini core', type: 'NAT' },\n '38': { label: 'RAPDB 2024', type: 'NAT' }\n },\n 'oryza_aus': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativa117425': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativair64rs2': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativamh63': { '20': { label: '19K-RGP', type: 'NAT' } }\n};\n","import { createSelector } from 'redux-bundler';\nimport { runExporterDownload } from '../components/exporter/downloadRunner';\n\nconst DEFAULT_FIELDS = ['id', 'name', 'system_name', 'biotype'];\nconst PREVIEW_ROWS = 20;\nconst PREVIEW_DEBOUNCE_MS = 250;\n\nfunction computePreviewSignature(store) {\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n return `${q}|${taxa.sort().join(',')}`;\n}\n\nlet debounceTimer = null;\nlet pendingRequestId = 0;\nlet pendingDownloadId = 0;\nlet currentDownloadController = null;\n\nconst markStale = (preview) => ({ ...preview, status: 'stale' });\n\nconst exporter = {\n name: 'exporter',\n\n getReducer: () => {\n const initialState = {\n selectedFields: DEFAULT_FIELDS,\n format: 'tsv',\n cutoffs: { exprMinTPM: 0.5, diffMaxPval: 0.05 },\n preview: { status: 'stale', data: null, error: null, requestId: 0, signature: null },\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: 0 }\n };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'EXPORTER_FIELD_TOGGLED': {\n const idx = state.selectedFields.indexOf(payload);\n const selectedFields = idx === -1\n ? [...state.selectedFields, payload]\n : state.selectedFields.filter(f => f !== payload);\n return { ...state, selectedFields };\n }\n case 'EXPORTER_FIELDS_REORDERED':\n return { ...state, selectedFields: payload };\n case 'EXPORTER_FIELDS_BULK_SET': {\n const { names, selected } = payload;\n if (!Array.isArray(names) || names.length === 0) return state;\n if (selected) {\n const existing = new Set(state.selectedFields);\n const additions = names.filter(n => !existing.has(n));\n if (additions.length === 0) return state;\n return { ...state, selectedFields: [...state.selectedFields, ...additions] };\n }\n const remove = new Set(names);\n const next = state.selectedFields.filter(n => !remove.has(n));\n if (next.length === state.selectedFields.length) return state;\n return { ...state, selectedFields: next };\n }\n case 'EXPORTER_FORMAT_SET':\n return { ...state, format: payload };\n case 'EXPORTER_CUTOFFS_SET':\n return { ...state, cutoffs: { ...state.cutoffs, ...(payload || {}) } };\n case 'EXPORTER_FIELDS_CLEARED':\n return { ...state, selectedFields: [] };\n case 'EXPORTER_PREVIEW_INVALIDATED':\n return { ...state, preview: markStale(state.preview) };\n\n case 'EXPORTER_PREVIEW_STARTED':\n return {\n ...state,\n preview: { ...state.preview, status: 'loading', requestId: payload.requestId, error: null, signature: payload.signature }\n };\n case 'EXPORTER_PREVIEW_SUCCEEDED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { status: 'ready', data: payload.data, error: null, requestId: payload.requestId, signature: state.preview.signature }\n };\n case 'EXPORTER_PREVIEW_FAILED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { ...state.preview, status: 'error', error: payload.error }\n };\n\n case 'EXPORTER_DOWNLOAD_REQUESTED':\n return {\n ...state,\n download: { status: 'preparing', progress: 0, total: 0, error: null, requestId: payload.requestId }\n };\n case 'EXPORTER_DOWNLOAD_STARTED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'downloading', total: payload.total }\n };\n case 'EXPORTER_DOWNLOAD_PROGRESS':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, progress: payload.progress }\n };\n case 'EXPORTER_DOWNLOAD_COMPLETED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'done', progress: payload.written || state.download.progress }\n };\n case 'EXPORTER_DOWNLOAD_CANCELLED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'cancelled' }\n };\n case 'EXPORTER_DOWNLOAD_FAILED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'error', error: payload.error }\n };\n case 'EXPORTER_DOWNLOAD_RESET':\n return {\n ...state,\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: state.download.requestId }\n };\n default:\n return state;\n }\n };\n },\n\n doToggleExporterField: fieldName => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELD_TOGGLED', payload: fieldName }),\n\n doReorderExporterFields: fieldList => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_REORDERED', payload: fieldList }),\n\n doBulkSetExporterFields: (names, selected) => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_BULK_SET', payload: { names, selected } }),\n\n doSetExporterFormat: fmt => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FORMAT_SET', payload: fmt }),\n\n doSetExporterCutoffs: cutoffs => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_CUTOFFS_SET', payload: cutoffs }),\n\n doClearExporterFields: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_CLEARED' }),\n\n doFetchExporterPreview: () => ({ dispatch, store }) => {\n clearTimeout(debounceTimer);\n const requestId = ++pendingRequestId;\n const signature = computePreviewSignature(store);\n dispatch({ type: 'EXPORTER_PREVIEW_STARTED', payload: { requestId, signature } });\n debounceTimer = setTimeout(() => {\n if (requestId !== pendingRequestId) return;\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const url = `${api}/search?q=${q}&fl=*&rows=${PREVIEW_ROWS}${fq}`;\n\n fetch(url)\n .then(r => r.json())\n .then(json => {\n const docs = (json && json.response && json.response.docs) || [];\n dispatch({ type: 'EXPORTER_PREVIEW_SUCCEEDED', payload: { requestId, data: docs } });\n })\n .catch(err => {\n dispatch({ type: 'EXPORTER_PREVIEW_FAILED', payload: { requestId, error: String(err) } });\n });\n }, PREVIEW_DEBOUNCE_MS);\n },\n\n reactExporterPreview: createSelector(\n 'selectExporter',\n 'selectGrameneFiltersStatus',\n 'selectGrameneFiltersQueryString',\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'selectGrameneViewsOn',\n (exp, filtersStatus, q, g, m, viewsOn) => {\n if (!exp || !exp.preview) return;\n if (filtersStatus === 'init') return;\n if (exp.preview.status === 'loading') return;\n // Don't run the preview query unless the user has the exporter view open.\n if (!viewsOn || !viewsOn.has('export')) return;\n const maps = m || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => maps[tid] && !maps[tid].hidden);\n const sig = `${q}|${taxa.sort().join(',')}`;\n if (exp.preview.signature === sig && exp.preview.status !== 'stale') return;\n return { actionCreator: 'doFetchExporterPreview' };\n }\n ),\n\n doStartExporterDownload: () => ({ dispatch, store }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n }\n const requestId = ++pendingDownloadId;\n const controller = new AbortController();\n currentDownloadController = controller;\n dispatch({ type: 'EXPORTER_DOWNLOAD_REQUESTED', payload: { requestId } });\n\n const isSuperseded = () => requestId !== pendingDownloadId;\n\n runExporterDownload({\n dispatch,\n store,\n requestId,\n signal: controller.signal,\n isSuperseded\n }).catch(err => {\n if (err && err.name === 'AbortError') {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n } else {\n dispatch({ type: 'EXPORTER_DOWNLOAD_FAILED', payload: { requestId, error: String(err) } });\n }\n });\n },\n\n doCancelExporterDownload: () => ({ dispatch }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n currentDownloadController = null;\n }\n pendingDownloadId++;\n },\n\n doResetExporterDownload: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_DOWNLOAD_RESET' }),\n\n selectExporter: state => state.exporter,\n selectExporterSelectedFields: state => state.exporter.selectedFields,\n selectExporterFormat: state => state.exporter.format,\n selectExporterCutoffs: state => state.exporter.cutoffs,\n selectExporterPreview: state => state.exporter.preview,\n selectExporterDownload: state => state.exporter.download\n};\n\nexport default exporter;\n","import { buildTableData, toJSONRows } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\n\nconst PAGE_SIZE = 1000;\n\nfunction buildSearchURL(api, q, fl, rows, start, fq) {\n const params = [\n `q=${q}`,\n `rows=${rows}`,\n `start=${start}`,\n 'facet=false'\n ];\n if (fl) params.push(`fl=${encodeURIComponent(fl)}`);\n return `${api}/search?${params.join('&')}${fq}`;\n}\n\nfunction triggerBrowserSave(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 2000);\n}\n\nexport async function runExporterDownload({ dispatch, store, requestId, signal, isSuperseded }) {\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const fields = store.selectExporterSelectedFields();\n const fl = fields.join(',');\n const format = store.selectExporterFormat();\n const catalog = store.selectFieldCatalog();\n const expressionStudies = store.selectExpressionStudies();\n const expressionSamples = store.selectExpressionSamples();\n const ancestorFields = fields.filter(n => ANCESTOR_FIELD_MAP[n]);\n\n const cutoffs = store.selectExporterCutoffs && store.selectExporterCutoffs();\n const buildResolverCtx = () => ({\n expressionStudies,\n expressionSamples,\n taxonomy: store.selectGrameneTaxonomy(),\n pathways: store.selectGramenePathways(),\n ontologies: store.selectOntologies(),\n cutoffs\n });\n\n const ensureAncestorRecords = async (docs) => {\n if (ancestorFields.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFields);\n const waits = [];\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue;\n if (ontKey === 'pathways') {\n const pathwaysCache = store.selectGramenePathways() || {};\n const missing = ids.filter(id => !pathwaysCache.hasOwnProperty(id));\n if (missing.length) store.doRequestGramenePathways(missing);\n continue;\n }\n const p = store.doEnsureOntologyRecords(ontKey, ids);\n if (p && typeof p.then === 'function') waits.push(p);\n }\n if (waits.length) await Promise.all(waits);\n };\n\n const fetchJSON = (url) => fetch(url, { signal }).then(r => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.json();\n });\n\n const countUrl = buildSearchURL(api, q, 'id', 0, 0, fq);\n const countResp = await fetchJSON(countUrl);\n const total = (countResp && countResp.response && countResp.response.numFound) || 0;\n\n dispatch({ type: 'EXPORTER_DOWNLOAD_STARTED', payload: { requestId, total } });\n\n if (total === 0) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: 0 } });\n return;\n }\n\n const tsvPieces = [];\n const jsonRows = [];\n let progress = 0;\n\n if (format === 'tsv') {\n const { header } = buildTableData([], fields, catalog, buildResolverCtx());\n tsvPieces.push(header.join('\\t') + '\\n');\n }\n\n let start = 0;\n while (start < total) {\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n const url = buildSearchURL(api, q, fl, PAGE_SIZE, start, fq);\n const resp = await fetchJSON(url);\n const docs = (resp && resp.response && resp.response.docs) || [];\n if (docs.length === 0) break;\n\n await ensureAncestorRecords(docs);\n const resolverCtx = buildResolverCtx();\n\n if (format === 'tsv') {\n const { rows } = buildTableData(docs, fields, catalog, resolverCtx);\n for (const row of rows) tsvPieces.push(row.join('\\t') + '\\n');\n } else {\n const rows = toJSONRows(docs, fields, resolverCtx);\n for (const r of rows) jsonRows.push(r);\n }\n\n start += docs.length;\n progress = start;\n dispatch({ type: 'EXPORTER_DOWNLOAD_PROGRESS', payload: { requestId, progress } });\n }\n\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n\n const stamp = new Date().toISOString().slice(0, 19).replace(/[:T]/g, '-');\n let blob;\n let filename;\n if (format === 'tsv') {\n blob = new Blob(tsvPieces, { type: 'text/tab-separated-values' });\n filename = `gramene-export-${stamp}.tsv`;\n } else {\n blob = new Blob([JSON.stringify(jsonRows, null, 2)], { type: 'application/json' });\n filename = `gramene-export-${stamp}.json`;\n }\n\n triggerBrowserSave(blob, filename);\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: progress } });\n}\n","import {\n partitionFields,\n resolveExpressionForDoc,\n resolveDiffExpressionForDoc,\n EXPRESSION_EXTRA_COLUMNS,\n DIFFEXPRESSION_EXTRA_COLUMNS\n} from './expressionResolver';\nimport {\n ANCESTOR_FIELD_MAP,\n isAncestorField,\n formatAncestorsCellTSV,\n formatAncestorsJSON,\n resolveAncestorsForDoc,\n ANCESTOR_EXTRA_COLUMNS\n} from './ancestorsResolver';\n\nfunction scrubTSV(s) {\n return String(s).replace(/[\\t\\r\\n]/g, ' ');\n}\n\nfunction formatCellTSV(value) {\n if (value === null || value === undefined) return '';\n if (Array.isArray(value)) return value.map(formatCellTSV).join('|');\n if (typeof value === 'object') return JSON.stringify(value);\n return scrubTSV(value);\n}\n\nfunction formatDocFieldTSV(doc, name, resolverCtx) {\n if (isAncestorField(name)) {\n const ontKey = ANCESTOR_FIELD_MAP[name];\n const ids = Array.isArray(doc[name]) ? doc[name] : [];\n return scrubTSV(formatAncestorsCellTSV(ontKey, ids, doc.taxon_id, resolverCtx));\n }\n return formatCellTSV(doc[name]);\n}\n\nexport function buildTSVHeader(fieldNames, catalog) {\n return fieldNames.map(n => {\n const f = catalog && catalog.fields && catalog.fields[n];\n if (!f) return n;\n return f.tsvHeader || f.label;\n });\n}\n\nexport function buildTSVRow(doc, fieldNames, resolverCtx) {\n return fieldNames.map(n => formatDocFieldTSV(doc, n, resolverCtx));\n}\n\nconst EMPTY_EXPR_ROW = EXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_DIFF_ROW = DIFFEXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_ANC_ROW = ANCESTOR_EXTRA_COLUMNS.map(() => '');\n\nfunction exprRowToCells(er) {\n return [\n scrubTSV(er.experiment),\n scrubTSV(er.experiment_name),\n scrubTSV(er.assay),\n scrubTSV(er.sample),\n scrubTSV(er.value)\n ];\n}\n\nfunction diffRowToCells(dr) {\n return [\n scrubTSV(dr.diff_experiment),\n scrubTSV(dr.diff_experiment_name),\n scrubTSV(dr.group1_factors),\n scrubTSV(dr.group2_factors),\n scrubTSV(dr.l2fc),\n scrubTSV(dr.pval)\n ];\n}\n\nfunction ancRowToCells(ar) {\n return [\n scrubTSV(ar.hierarchy),\n scrubTSV(ar.term_id),\n scrubTSV(ar.term_name),\n scrubTSV(ar.term_type)\n ];\n}\n\nfunction splitPlainAndAncestor(nonExpressionFields) {\n const ancestorFields = [];\n const plainFields = [];\n for (const n of nonExpressionFields) {\n if (isAncestorField(n)) ancestorFields.push(n);\n else plainFields.push(n);\n }\n return { ancestorFields, plainFields };\n}\n\nfunction buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx) {\n const expressionStudies = resolverCtx && resolverCtx.expressionStudies;\n const expressionSamples = resolverCtx && resolverCtx.expressionSamples;\n const cutoffs = resolverCtx && resolverCtx.cutoffs;\n const hasExpr = expressionFields.length > 0;\n const hasDiff = diffExpressionFields.length > 0;\n const hasAnc = ancestorFields.length > 0;\n const rows = [];\n for (const doc of (docs || [])) {\n const baseCells = buildTSVRow(doc, plainFields, resolverCtx);\n const ancRows = hasAnc\n ? resolveAncestorsForDoc(doc, ancestorFields, resolverCtx)\n : [];\n const exprRows = hasExpr\n ? resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const diffRows = hasDiff\n ? resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const ancCells = ancRows.length ? ancRows.map(ancRowToCells) : (hasAnc ? [EMPTY_ANC_ROW] : [null]);\n const exprCells = exprRows.length ? exprRows.map(exprRowToCells) : (hasExpr ? [EMPTY_EXPR_ROW] : [null]);\n const diffCells = diffRows.length ? diffRows.map(diffRowToCells) : (hasDiff ? [EMPTY_DIFF_ROW] : [null]);\n for (const a of ancCells) {\n for (const e of exprCells) {\n for (const d of diffCells) {\n const out = [...baseCells];\n if (a) out.push(...a);\n if (e) out.push(...e);\n if (d) out.push(...d);\n rows.push(out);\n }\n }\n }\n }\n return rows;\n}\n\nexport function toTSV(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n const header = buildTSVHeader(fieldNames, catalog).join('\\t');\n const rows = (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx).join('\\t'));\n return [header, ...rows].join('\\n');\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ].join('\\t');\n\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return [header, ...rows.map(r => r.join('\\t'))].join('\\n');\n}\n\nexport function buildTableData(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n return {\n header: buildTSVHeader(fieldNames, catalog),\n headerKeys: fieldNames.slice(),\n rows: (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx))\n };\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const headerKeys = [\n ...plainFields,\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return { header, headerKeys, rows };\n}\n\nexport function toJSONRows(docs, fieldNames, resolverCtx) {\n return (docs || []).map(d => {\n const row = {};\n for (const n of fieldNames) {\n if (isAncestorField(n)) {\n const ontKey = ANCESTOR_FIELD_MAP[n];\n const ids = Array.isArray(d[n]) ? d[n] : [];\n row[n] = formatAncestorsJSON(ontKey, ids, d.taxon_id, resolverCtx);\n } else {\n row[n] = d[n] !== undefined ? d[n] : null;\n }\n }\n return row;\n });\n}\n\nexport function toJSON(docs, fieldNames, resolverCtx) {\n return JSON.stringify(toJSONRows(docs, fieldNames, resolverCtx), null, 2);\n}\n","const EXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)__expr$/;\nconst DIFFEXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)_g(\\d+)_(pval|l2fc)_attr_([a-z])$/;\n\nexport const EXPRESSION_EXTRA_COLUMNS = [\n 'experiment',\n 'experiment_name',\n 'assay',\n 'sample',\n 'value'\n];\n\nexport const DIFFEXPRESSION_EXTRA_COLUMNS = [\n 'diff_experiment',\n 'diff_experiment_name',\n 'group1_factors',\n 'group2_factors',\n 'l2fc',\n 'pval'\n];\n\nexport function parseExprFieldName(name) {\n const m = name.match(EXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group: 'g' + m[2],\n solrField: name\n };\n}\n\nexport function parseDiffExprFieldName(name) {\n const m = name.match(DIFFEXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group1: 'g' + m[2],\n group2: 'g' + m[3],\n stat: m[4],\n solrField: name\n };\n}\n\nexport function isExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.expression) return true;\n return parseExprFieldName(name) !== null;\n}\n\nexport function isDiffExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.diffExpression) return true;\n return parseDiffExprFieldName(name) !== null;\n}\n\nexport function partitionFields(fieldNames, catalog) {\n const expressionFields = [];\n const diffExpressionFields = [];\n const nonExpressionFields = [];\n for (const n of fieldNames) {\n if (isDiffExpressionField(n, catalog)) diffExpressionFields.push(n);\n else if (isExpressionField(n, catalog)) expressionFields.push(n);\n else nonExpressionFields.push(n);\n }\n return { expressionFields, diffExpressionFields, nonExpressionFields };\n}\n\nfunction joinLabels(arr) {\n if (!Array.isArray(arr)) return '';\n return arr.map(f => f && f.label).filter(Boolean).join('; ');\n}\n\nexport function buildExperimentIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = e;\n }\n return index;\n}\n\nfunction findAssay(expressionSamples, experimentId, group) {\n if (!expressionSamples) return null;\n const arr = expressionSamples[experimentId];\n if (!arr) return null;\n return arr.find(a => a.group === group) || null;\n}\n\nexport function resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs) {\n const rows = [];\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const minTPM = cutoffs && cutoffs.exprMinTPM;\n const minTPMActive = minTPM !== null && minTPM !== undefined && minTPM !== '' && Number.isFinite(+minTPM);\n for (const fieldName of expressionFields) {\n const parsed = parseExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n if (minTPMActive && (!Number.isFinite(+val) || +val < +minTPM)) continue;\n const exp = experimentIndex[parsed.experimentId];\n const assay = findAssay(expressionSamples, parsed.experimentId, parsed.group);\n rows.push({\n field: fieldName,\n experiment: parsed.experimentId,\n experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n assay: parsed.group,\n sample: assay ? joinLabels(assay.factor) || joinLabels(assay.characteristic) : '',\n value: val\n });\n }\n return rows;\n}\n\nexport function resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs) {\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const byContrast = new Map();\n for (const fieldName of diffExpressionFields) {\n const parsed = parseDiffExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n const key = `${parsed.experimentId}|${parsed.group1}|${parsed.group2}`;\n let entry = byContrast.get(key);\n if (!entry) {\n entry = {\n experimentId: parsed.experimentId,\n group1: parsed.group1,\n group2: parsed.group2,\n pval: '',\n l2fc: ''\n };\n byContrast.set(key, entry);\n }\n if (parsed.stat === 'pval') entry.pval = val;\n else entry.l2fc = val;\n }\n const maxPval = cutoffs && cutoffs.diffMaxPval;\n const maxPvalActive = maxPval !== null && maxPval !== undefined && maxPval !== '' && Number.isFinite(+maxPval);\n const rows = [];\n for (const entry of byContrast.values()) {\n if (maxPvalActive) {\n const pv = +entry.pval;\n if (!Number.isFinite(pv) || pv > +maxPval) continue;\n }\n const exp = experimentIndex[entry.experimentId];\n const assay1 = findAssay(expressionSamples, entry.experimentId, entry.group1);\n const assay2 = findAssay(expressionSamples, entry.experimentId, entry.group2);\n rows.push({\n diff_experiment: entry.experimentId,\n diff_experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n group1_factors: assay1 ? joinLabels(assay1.factor) || joinLabels(assay1.characteristic) : entry.group1,\n group2_factors: assay2 ? joinLabels(assay2.factor) || joinLabels(assay2.characteristic) : entry.group2,\n l2fc: entry.l2fc,\n pval: entry.pval\n });\n }\n return rows;\n}\n","// Maps gene-doc field name -> ontology key used for resolution.\nexport const ANCESTOR_FIELD_MAP = {\n GO__ancestors: 'GO',\n PO__ancestors: 'PO',\n TO__ancestors: 'TO',\n QTL_TO__ancestors: 'TO',\n domains__ancestors: 'domains',\n pathways__ancestors: 'pathways',\n taxonomy__ancestors: 'taxonomy'\n};\n\n// Display label used in the \"hierarchy\" column.\nexport const ANCESTOR_HIERARCHY_LABEL = {\n GO__ancestors: 'Gene Ontology',\n PO__ancestors: 'Plant Ontology',\n TO__ancestors: 'Trait Ontology',\n QTL_TO__ancestors: 'Trait Ontology',\n domains__ancestors: 'InterPro',\n pathways__ancestors: 'Plant Reactome',\n taxonomy__ancestors: 'Taxonomy'\n};\n\nexport const ANCESTOR_EXTRA_COLUMNS = [\n 'hierarchy',\n 'term_id',\n 'term_name',\n 'term_type'\n];\n\nexport function isAncestorField(name) {\n return Object.prototype.hasOwnProperty.call(ANCESTOR_FIELD_MAP, name);\n}\n\nexport function partitionAncestorFields(fieldNames) {\n const ancestor = [];\n const plain = [];\n for (const n of fieldNames) {\n if (isAncestorField(n)) ancestor.push(n);\n else plain.push(n);\n }\n return { ancestor, plain };\n}\n\n// Gather the ids referenced across docs for each ontology/field.\nexport function collectAncestorIds(docs, fieldNames) {\n const byOnt = {};\n for (const name of fieldNames) {\n const ont = ANCESTOR_FIELD_MAP[name];\n if (!ont) continue;\n if (!byOnt[ont]) byOnt[ont] = new Set();\n for (const d of (docs || [])) {\n const v = d && d[name];\n if (!Array.isArray(v)) continue;\n for (const id of v) if (id != null) byOnt[ont].add(+id);\n }\n }\n const out = {};\n for (const k of Object.keys(byOnt)) out[k] = Array.from(byOnt[k]);\n return out;\n}\n\nfunction getOntologyRecord(ontKey, id, ctx) {\n if (!ctx) return null;\n const idNum = +id;\n if (ontKey === 'taxonomy') {\n const t = ctx.taxonomy;\n return (t && t[idNum]) || null;\n }\n if (ontKey === 'pathways') {\n const p = ctx.pathways;\n return (p && p[idNum]) || null;\n }\n const bucket = ctx.ontologies && ctx.ontologies[ontKey];\n return (bucket && bucket[idNum]) || null;\n}\n\n// Returns list of ancestor ids *excluding* self.\nfunction ancestorsOfRecord(ontKey, record, docTaxonId, ctx) {\n if (!record) return null;\n if (ontKey === 'taxonomy') {\n const visited = new Set();\n const stack = Array.isArray(record.is_a) ? record.is_a.slice() : [];\n const taxonomy = (ctx && ctx.taxonomy) || {};\n while (stack.length) {\n const pid = +stack.pop();\n if (visited.has(pid)) continue;\n visited.add(pid);\n const parent = taxonomy[pid];\n if (parent && Array.isArray(parent.is_a)) {\n for (const g of parent.is_a) if (!visited.has(+g)) stack.push(g);\n }\n }\n return Array.from(visited);\n }\n if (ontKey === 'pathways') {\n const taxonKey = docTaxonId != null ? `ancestors_${docTaxonId}` : null;\n let arr = taxonKey && record[taxonKey];\n if (!Array.isArray(arr)) {\n const collected = new Set();\n for (const k of Object.keys(record)) {\n if (k.startsWith('ancestors_') && Array.isArray(record[k])) {\n for (const a of record[k]) collected.add(+a);\n }\n }\n arr = Array.from(collected);\n }\n return arr.filter(x => +x !== +record._id);\n }\n // GO / PO / TO / domains — `ancestors` already includes self\n if (Array.isArray(record.ancestors)) {\n return record.ancestors.filter(x => +x !== +record._id);\n }\n return [];\n}\n\nexport function mostSpecific(ontKey, ids, docTaxonId, ctx) {\n if (!Array.isArray(ids) || ids.length === 0) return [];\n const ancestorSet = new Set();\n let anyResolved = false;\n for (const id of ids) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) continue;\n anyResolved = true;\n const anc = ancestorsOfRecord(ontKey, rec, docTaxonId, ctx);\n if (!anc) continue;\n for (const a of anc) ancestorSet.add(+a);\n }\n if (!anyResolved) return ids.slice();\n return ids.filter(id => !ancestorSet.has(+id));\n}\n\nfunction displayIdAndName(ontKey, id, ctx) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) return { id: String(id), name: '' };\n const displayId = rec.id != null ? String(rec.id) : String(rec._id != null ? rec._id : id);\n let name = rec.name || '';\n if (ontKey === 'taxonomy' && !name) name = rec.display_name || '';\n return { id: displayId, name: String(name) };\n}\n\nexport function formatAncestorsCellTSV(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => {\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n return name ? `${disp} ${name}` : disp;\n }).join(';');\n}\n\nexport function formatAncestorsJSON(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => displayIdAndName(ontKey, id, ctx));\n}\n\nfunction termTypeForRecord(ontKey, rec) {\n if (!rec) return '';\n if (ontKey === 'GO') return rec.namespace || rec.type || '';\n if (ontKey === 'taxonomy') return rec.rank || '';\n return rec.type || rec.namespace || '';\n}\n\n// Expand a doc's selected ancestor fields into rows of\n// { hierarchy, term_id, term_name, term_type }, one per most-specific term.\nexport function resolveAncestorsForDoc(doc, ancestorFields, ctx) {\n const rows = [];\n for (const fieldName of ancestorFields) {\n const ontKey = ANCESTOR_FIELD_MAP[fieldName];\n if (!ontKey) continue;\n const ids = Array.isArray(doc[fieldName]) ? doc[fieldName] : [];\n if (!ids.length) continue;\n const specific = mostSpecific(ontKey, ids, doc.taxon_id, ctx);\n const hierarchy = ANCESTOR_HIERARCHY_LABEL[fieldName] || fieldName;\n for (const id of specific) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n rows.push({\n hierarchy,\n term_id: disp,\n term_name: name,\n term_type: termTypeForRecord(ontKey, rec)\n });\n }\n }\n return rows;\n}\n","const ONT_KEYS = ['GO', 'PO', 'TO', 'domains'];\nconst BATCH_SIZE = 200;\n\nconst inflight = {};\n\nconst ontologies = {\n name: 'ontologies',\n getReducer: () => {\n const initialState = { GO: {}, PO: {}, TO: {}, domains: {} };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'ONTOLOGY_RECORDS_REQUESTED': {\n const { key, ids } = payload;\n const bucket = { ...state[key] };\n for (const id of ids) {\n if (!bucket.hasOwnProperty(id)) bucket[id] = null;\n }\n return { ...state, [key]: bucket };\n }\n case 'ONTOLOGY_RECORDS_RECEIVED': {\n const { key, records } = payload;\n return { ...state, [key]: { ...state[key], ...records } };\n }\n default:\n return state;\n }\n };\n },\n\n doEnsureOntologyRecords: (key, ids) => ({ dispatch, store }) => {\n if (!ONT_KEYS.includes(key)) return Promise.resolve();\n if (!Array.isArray(ids) || ids.length === 0) return Promise.resolve();\n const existing = store.selectOntologies()[key] || {};\n const missing = [];\n for (const id of ids) {\n if (id == null) continue;\n const idNum = +id;\n if (!existing.hasOwnProperty(idNum) && !(inflight[key] && inflight[key].has(idNum))) {\n missing.push(idNum);\n }\n }\n if (missing.length === 0) return Promise.resolve();\n\n if (!inflight[key]) inflight[key] = new Set();\n for (const id of missing) inflight[key].add(id);\n dispatch({ type: 'ONTOLOGY_RECORDS_REQUESTED', payload: { key, ids: missing } });\n\n const api = store.selectGrameneAPI();\n const batches = [];\n for (let i = 0; i < missing.length; i += BATCH_SIZE) {\n batches.push(missing.slice(i, i + BATCH_SIZE));\n }\n\n const fetchBatch = (batch) => {\n const idList = batch.length === 1 ? `${batch[0]},0` : batch.join(',');\n return fetch(`${api}/${key}?idList=${idList}&rows=${batch.length + 1}`)\n .then(r => r.json())\n .then(docs => {\n const records = {};\n for (const d of (docs || [])) {\n if (d && d._id != null) records[d._id] = d;\n }\n for (const id of batch) {\n if (!records.hasOwnProperty(id)) records[id] = { _id: id, missing: true };\n }\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .catch(() => {\n const records = {};\n for (const id of batch) records[id] = { _id: id, missing: true };\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .finally(() => {\n for (const id of batch) inflight[key].delete(id);\n });\n };\n\n return Promise.all(batches.map(fetchBatch));\n },\n\n selectOntologies: state => state.ontologies\n};\n\nexport default ontologies;\n","import { createSelector } from 'redux-bundler';\n\n// State shape:\n// {\n// pivot: { status, signature, data: { [taxon_id]: <gene count> }, error, requestId },\n// activeTaxon: <taxon_id|null>,\n// byTaxon: {\n// [taxon_id]: {\n// selectedFields: [<solr field name>...],\n// fieldsModalOpen: <bool>,\n// fetch: { status, offset, total, signature, requestId, error },\n// rows: [<doc>...]\n// }\n// }\n// }\n// Per-taxon study lists are derived in the view layer from expressionStudies.\n\nconst PAGE_SIZE = 200;\n\nlet pivotPendingId = 0;\nconst fetchPending = {}; // per-taxon request id\nconst attrsPending = {}; // per-taxon request id for available attrs\nconst existencePending = {}; // per-taxon request id for field-existence check\n\nfunction pivotSignature(store) {\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n return `${q}|${taxa.sort().join(',')}`;\n}\n\nfunction fetchSignature(store, taxon) {\n const q = store.selectGrameneFiltersQueryString();\n const ev = store.selectExprViz();\n const sel = (ev.byTaxon[taxon] && ev.byTaxon[taxon].selectedFields) || [];\n return `${q}|${taxon}|${sel.slice().sort().join(',')}`;\n}\n\nconst ALWAYS_FL = ['id', 'name', 'system_name', 'taxon_id'];\n\nconst exprViz = {\n name: 'exprViz',\n\n getReducer: () => {\n const initialState = {\n pivot: { status: 'idle', signature: null, data: {}, error: null, requestId: 0 },\n activeTaxon: null,\n byTaxon: {}\n };\n\n function ensureTaxon(state, taxon) {\n if (state.byTaxon[taxon]) return state.byTaxon[taxon];\n return {\n selectedFields: [],\n fieldsModalOpen: false,\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null },\n rows: [],\n availableAttrs: null,\n attrsSignature: null,\n attrsRequestId: 0,\n fieldExistence: null,\n existenceStatus: 'idle',\n existenceSignature: null,\n existenceRequestId: 0\n };\n }\n\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'EXPRVIZ_PIVOT_STARTED':\n return { ...state, pivot: { status: 'loading', signature: payload.signature, data: state.pivot.data, error: null, requestId: payload.requestId } };\n case 'EXPRVIZ_PIVOT_SUCCEEDED':\n if (payload.requestId !== state.pivot.requestId) return state;\n return { ...state, pivot: { status: 'ready', signature: state.pivot.signature, data: payload.data, error: null, requestId: payload.requestId } };\n case 'EXPRVIZ_PIVOT_FAILED':\n if (payload.requestId !== state.pivot.requestId) return state;\n return { ...state, pivot: { ...state.pivot, status: 'error', error: payload.error } };\n\n case 'EXPRVIZ_ACTIVE_TAXON_SET':\n return { ...state, activeTaxon: payload };\n\n case 'EXPRVIZ_FIELDS_MODAL_TOGGLED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: { ...state.byTaxon, [payload.taxon]: { ...t, fieldsModalOpen: payload.open } }\n };\n }\n case 'EXPRVIZ_FIELDS_SET': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n selectedFields: payload.fields,\n rows: [],\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null }\n }\n }\n };\n }\n case 'EXPRVIZ_FIELDS_REORDERED': {\n const t = state.byTaxon[payload.taxon];\n if (!t) return state;\n // Same set of fields — preserve rows; only the column/axis order changes.\n const setA = new Set(t.selectedFields);\n const setB = new Set(payload.fields);\n if (setA.size !== setB.size || ![...setA].every(f => setB.has(f))) {\n return state;\n }\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, selectedFields: payload.fields }\n }\n };\n }\n\n case 'EXPRVIZ_FETCH_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n fetch: { ...t.fetch, status: 'loading', signature: payload.signature, requestId: payload.requestId, error: null }\n }\n }\n };\n }\n case 'EXPRVIZ_FETCH_BATCH': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.fetch.requestId) return state;\n const rows = t.rows.concat(payload.docs);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n rows,\n fetch: { ...t.fetch, offset: rows.length, total: payload.total, status: rows.length >= payload.total ? 'done' : 'loading' }\n }\n }\n };\n }\n case 'EXPRVIZ_FETCH_FAILED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.fetch.requestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, fetch: { ...t.fetch, status: 'error', error: payload.error } }\n }\n };\n }\n\n case 'EXPRVIZ_ATTRS_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, attrsRequestId: payload.requestId, attrsSignature: payload.signature }\n }\n };\n }\n case 'EXPRVIZ_ATTRS_SUCCEEDED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.attrsRequestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, availableAttrs: payload.attrs }\n }\n };\n }\n\n case 'EXPRVIZ_EXISTENCE_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n existenceStatus: 'loading',\n existenceRequestId: payload.requestId,\n existenceSignature: payload.signature\n }\n }\n };\n }\n case 'EXPRVIZ_EXISTENCE_SUCCEEDED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.existenceRequestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, existenceStatus: 'ready', fieldExistence: payload.counts }\n }\n };\n }\n\n case 'GRAMENE_SEARCH_CLEARED': {\n // Search context changed — invalidate pivot and any loaded rows.\n // Selected fields are kept so the user can re-run the load.\n const newByTaxon = {};\n for (const tid of Object.keys(state.byTaxon)) {\n newByTaxon[tid] = {\n ...state.byTaxon[tid],\n rows: [],\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null },\n availableAttrs: null,\n attrsSignature: null,\n fieldExistence: null,\n existenceStatus: 'idle',\n existenceSignature: null\n };\n }\n return {\n ...state,\n pivot: { status: 'idle', signature: null, data: {}, error: null, requestId: 0 },\n byTaxon: newByTaxon\n };\n }\n\n default:\n return state;\n }\n };\n },\n\n doFetchExprVizPivot: () => ({ dispatch, store }) => {\n const requestId = ++pivotPendingId;\n const signature = pivotSignature(store);\n dispatch({ type: 'EXPRVIZ_PIVOT_STARTED', payload: { requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const facetField = \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\";\n const url = `${api}/search?q=${q}${fq}&fq=expressed_in_gxa_attr_ss:*&rows=0&facet=true&facet.field=${facetField}`;\n\n fetch(url)\n .then(r => r.json())\n .then(json => {\n const arr = (json && json.facet_counts && json.facet_counts.facet_fields && json.facet_counts.facet_fields.taxon_id) || [];\n const data = {};\n for (let i = 0; i < arr.length; i += 2) {\n data[arr[i]] = arr[i + 1];\n }\n if (Object.keys(data).length === 0) {\n console.warn('[exprViz] no taxon_ids found with expression', { url, json });\n }\n dispatch({ type: 'EXPRVIZ_PIVOT_SUCCEEDED', payload: { requestId, data } });\n })\n .catch(err => {\n dispatch({ type: 'EXPRVIZ_PIVOT_FAILED', payload: { requestId, error: String(err) } });\n });\n },\n\n doSetExprVizActiveTaxon: tid => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_ACTIVE_TAXON_SET', payload: tid }),\n\n doToggleExprVizFieldsModal: (taxon, open) => ({ dispatch, store }) => {\n dispatch({ type: 'EXPRVIZ_FIELDS_MODAL_TOGGLED', payload: { taxon, open: !!open } });\n if (open) store.doFetchExprVizAvailableAttrs(taxon);\n },\n\n doFetchExprVizAvailableAttrs: taxon => ({ dispatch, store }) => {\n const q = store.selectGrameneFiltersQueryString();\n const signature = `${q}|${taxon}`;\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (t && t.availableAttrs && t.attrsSignature === signature) return;\n const requestId = (attrsPending[taxon] = (attrsPending[taxon] || 0) + 1);\n dispatch({ type: 'EXPRVIZ_ATTRS_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const facetField = \"{!facet.limit='2000' facet.mincount='1' key='attrs'}expressed_in_gxa_attr_ss\";\n const url = `${api}/search?q=${q}&fq=taxon_id:${taxon}&fq=expressed_in_gxa_attr_ss:*&rows=0&facet=true&facet.field=${facetField}`;\n fetch(url)\n .then(r => r.json())\n .then(json => {\n if (requestId !== attrsPending[taxon]) return;\n const arr = (json && json.facet_counts && json.facet_counts.facet_fields && json.facet_counts.facet_fields.attrs) || [];\n const attrs = [];\n for (let i = 0; i < arr.length; i += 2) attrs.push(arr[i]);\n dispatch({ type: 'EXPRVIZ_ATTRS_SUCCEEDED', payload: { taxon, requestId, attrs } });\n })\n .catch(() => { /* swallow — non-fatal; modal still works without filtering */ });\n },\n\n doSetExprVizFields: (taxon, fields) => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_FIELDS_SET', payload: { taxon, fields } }),\n\n doReorderExprVizFields: (taxon, fields) => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_FIELDS_REORDERED', payload: { taxon, fields } }),\n\n doFetchExprVizData: taxon => ({ dispatch, store }) => {\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (!t || t.selectedFields.length === 0) return;\n const requestId = (fetchPending[taxon] = (fetchPending[taxon] || 0) + 1);\n const signature = fetchSignature(store, taxon);\n dispatch({ type: 'EXPRVIZ_FETCH_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const fl = [...new Set([...ALWAYS_FL, ...t.selectedFields])].join(',');\n\n const fetchPage = (offset) => {\n if (requestId !== fetchPending[taxon]) return; // superseded\n const url = `${api}/search?q=${q}&fq=taxon_id:${taxon}&fl=${fl}&rows=${PAGE_SIZE}&start=${offset}`;\n fetch(url)\n .then(r => r.json())\n .then(json => {\n if (requestId !== fetchPending[taxon]) return;\n const docs = (json.response && json.response.docs) || [];\n const total = (json.response && json.response.numFound) || 0;\n dispatch({ type: 'EXPRVIZ_FETCH_BATCH', payload: { taxon, requestId, docs, total } });\n const next = offset + docs.length;\n if (docs.length > 0 && next < total) {\n fetchPage(next);\n }\n })\n .catch(err => {\n dispatch({ type: 'EXPRVIZ_FETCH_FAILED', payload: { taxon, requestId, error: String(err) } });\n });\n };\n fetchPage(0);\n },\n\n // Per-candidate-field non-null counts under the current q + taxon. Used by\n // FieldsModal to hide fields that have no data in the current result set\n // before the user picks. Uses stats.field (the swagger whitelist drops\n // facet.query) batched across multiple GETs to stay under URL limits.\n doFetchExprVizFieldExistence: (taxon, fields) => ({ dispatch, store }) => {\n if (!fields || fields.length === 0) return;\n const q = store.selectGrameneFiltersQueryString();\n const fieldsKey = fields.slice().sort().join(',');\n const signature = `${q}|${taxon}|${fieldsKey}`;\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (t && t.fieldExistence && t.existenceSignature === signature) return;\n\n const requestId = (existencePending[taxon] = (existencePending[taxon] || 0) + 1);\n dispatch({ type: 'EXPRVIZ_EXISTENCE_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const BATCH_SIZE = 40;\n const batches = [];\n for (let i = 0; i < fields.length; i += BATCH_SIZE) {\n batches.push(fields.slice(i, i + BATCH_SIZE));\n }\n\n Promise.all(batches.map(batch => {\n const params = new URLSearchParams();\n params.append('q', q);\n params.append('fq', `taxon_id:${taxon}`);\n params.append('rows', '0');\n params.append('stats', 'true');\n batch.forEach(f => params.append('stats.field', f));\n return fetch(`${api}/search?${params.toString()}`)\n .then(r => r.json())\n .then(json => {\n const sf = (json && json.stats && json.stats.stats_fields) || {};\n const out = {};\n for (const f of Object.keys(sf)) {\n const s = sf[f];\n out[f] = s && typeof s.count === 'number' ? s.count : 0;\n }\n return out;\n });\n }))\n .then(results => {\n if (requestId !== existencePending[taxon]) return;\n const counts = Object.assign({}, ...results);\n dispatch({ type: 'EXPRVIZ_EXISTENCE_SUCCEEDED', payload: { taxon, requestId, counts } });\n })\n .catch(() => { /* swallow — non-fatal; modal falls back to showing all */ });\n },\n\n reactExprVizPivot: createSelector(\n 'selectExprViz',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViews',\n 'selectGrameneFiltersQueryString',\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n (ev, filtersStatus, views, q, g, m) => {\n if (!ev || filtersStatus === 'init') return;\n const onView = views && views.options && views.options.find(v => v.id === 'exprViz');\n if (!onView || onView.show !== 'on') return;\n const maps = m || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => maps[tid] && !maps[tid].hidden);\n const sig = `${q}|${taxa.sort().join(',')}`;\n if (ev.pivot.status === 'loading') return;\n if (ev.pivot.signature === sig && ev.pivot.status === 'ready') return;\n return { actionCreator: 'doFetchExprVizPivot' };\n }\n ),\n\n selectExprViz: state => state.exprViz,\n selectExprVizPivot: state => state.exprViz.pivot,\n selectExprVizActiveTaxon: state => state.exprViz.activeTaxon,\n selectExprVizByTaxon: state => state.exprViz.byTaxon\n};\n\nexport default exprViz;\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst Gene = ({gene}) => {\n return <div className=\"row\">{gene.id}</div>\n};\n\nconst Genes = (results, rows, doChangeQuantity) => {\n if (results && results.numFound > 0) {\n const moreButton = (results.numFound > rows)\n ? <button onClick={e => doChangeQuantity('Genes',20)}>more</button>\n : '';\n const fewerButton = (rows > 20)\n ? <button onClick={e => doChangeQuantity('Genes',-20)}>fewer</button>\n : '';\n const docsToShow = results.response.docs.slice(0,rows);\n return (\n <div id=\"Genes\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Genes</h4>\n </div>\n {docsToShow.map((doc,idx) => <Gene key={idx} gene={doc}/>)}\n {fewerButton}{moreButton}\n </div>\n );\n }\n};\n\nconst Pathway = ({pathway}) => {\n return <div className=\"row\">{pathway.name}</div>\n};\nconst Pathways = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Pathways\" className=\"container mb40 anchor\">\n <div className=\"fancy-title\">\n <h4>Pathways</h4>\n </div>\n {results.pathways.map((doc,idx) => (<Pathway key={idx} pathway={doc}/>))}\n </div>\n );\n }\n};\n\nconst Domain = ({domain}) => {\n return <div className=\"row\">{domain.id}</div>\n};\nconst Domains = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Domains\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Domains</h4>\n </div>\n {results.domains.map((doc,idx) => (<Domain key={idx} domain={doc}/>))}\n </div>\n );\n }\n};\n\nconst Taxon = ({taxon}) => {\n return <div className=\"row\">{taxon.id}</div>\n};\nconst Species = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Species\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Species</h4>\n </div>\n {results.taxonomy.map((doc,idx) => (<Taxon key={idx} taxon={doc}/>))}\n </div>\n );\n }\n};\n\nconst ResultList = ({grameneGenes, grameneDomains, gramenePathways, grameneTaxonomy, searchUI, searchUpdated, doChangeQuantity}) => {\n if (searchUI.Gramene) {\n return (\n <div id=\"gramene\" className=\"row\">\n <div className=\"fancy-title pt50\">\n <h3>Gramene search results</h3>\n </div>\n {searchUI.Genes && Genes(grameneGenes, searchUI.rows.Genes, doChangeQuantity)}\n {searchUI.Domains && Domains(grameneDomains)}\n {searchUI.Pathways && Pathways(gramenePathways)}\n {searchUI.Species && Species(grameneTaxonomy)}\n </div>\n )\n }\n else {\n return null;\n }\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGrameneDomains',\n 'selectGramenePathways',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doChangeQuantity',\n ResultList\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst getStatus = (cat, results, isChecked, toggle) => {\n const tally = results ? results.numFound : <img src=\"/static/images/dna_spinner.svg\"/>;\n return (\n <li className='category-leaf'>\n <input type=\"checkbox\" checked={isChecked} onChange={e => toggle(cat)}/>\n <a data-scroll href={`#${cat}`} className=\"nav-link active\">{cat}<span style={{float:\"right\"}}>{tally}</span></a>\n </li>\n )\n};\n\nconst ResultSummary = ({grameneGenes, gramenePathways, grameneDomains, grameneTaxonomy, searchUI, searchUpdated, doToggleCategory}) => {\n const status = grameneGenes ?\n grameneGenes.numFound:\n<img src=\"/static/images/dna_spinner.svg\"/>;\n if (searchUI.Gramene) return (\n <li className=\"active category-expanded\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span style={{float:\"right\"}}>{status}</span>\n </a>\n <ul className=\"list-unstyled\">\n {getStatus('Genes', grameneGenes, searchUI.Genes, doToggleCategory)}\n {getStatus('Domains', grameneDomains, searchUI.Domains, doToggleCategory)}\n {getStatus('Pathways', gramenePathways, searchUI.Pathways, doToggleCategory)}\n {getStatus('Species', grameneTaxonomy, searchUI.Species, doToggleCategory)}\n</ul>\n </li>\n);\nelse return (\n <li className=\"active category-collapsed\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span\n style={{float:\"right\"}}>{status}</span>\n </a>\n </li>\n);\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGramenePathways',\n 'selectGrameneDomains',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doToggleCategory',\n ResultSummary\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\nimport ReactGA from 'react-ga4'\nimport { Button, Badge, Alert } from 'react-bootstrap'\nimport './styles.css'\n\nfunction showMatches(text, x) {\n let re = new RegExp(`(${x})`, 'ig');\n let match = text.split(re);\n return <span>\n {match.map((str, idx) => {\n if (idx % 2 === 1) {\n return <span key={idx} style={{fontWeight:'bolder'}}>{str}</span>\n }\n return <span key={idx}>{str}</span>\n })}\n </span>\n}\n\nfunction logAction(sugg) {\n ReactGA.event({\n category: 'Search',\n action: 'SetFilter',\n label: sugg.name\n })\n}\nfunction getLowestCommonAncestorName(tids, taxonomy) {\n let lca;\n tids.forEach(tid => {\n if (!lca) {\n lca = [...taxonomy[tid].ancestors];\n } else {\n let ancestors = new Set(taxonomy[tid].ancestors);\n while (!ancestors.has(lca[0])) {\n lca.shift();\n }\n }\n });\n return taxonomy[lca[0]].short_name;\n}\n\nconst TryPan = (props) => {\n const query = props.query;\n const pan = props.pan;\n return <div className=\"suggestion-panlink\">\n <a target=\"_blank\" href={pan.url + \"?suggestion=\" + query}>\n <img src={pan.svg} title={`Search at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst TryAnotherSite = props => {\n const query = props.query;\n const config = props.config;\n let sites = Object.keys(config.panSite);\n return <div>\n <Alert variant={'info'}>Don't see what you're looking for? Search for <b>{query}</b> on one of our sister sites</Alert>\n {sites.map((p, idx) => <TryPan key={idx} query={query} pan={config.panSite[p]}/>)}\n </div>\n}\n\nconst Suggestions = props => {\n let suggestions = props.grameneSuggestions;\n if (suggestions && suggestions.grouped) {\n if (suggestions.grouped.category.matches === 0) {\n let sugg1 = {\n fq_field: 'text',\n fq_value: props.suggestionsQuery,\n name: `Genes containing \"${props.suggestionsQuery}\"`,\n category: 'Gene',\n };\n let sugg2 = {\n fq_field: 'text',\n fq_value: `${props.suggestionsQuery}*`,\n name: `Genes matching \"${props.suggestionsQuery}*\"`,\n category: 'Gene',\n };\n return (\n <div style={{margin: '10px', maxWidth: '820px'}}>\n <Alert variant={'info'}><em>No suggestions found.</em> You may still attempt a full text search, though it is unlikely to find any genes for you.</Alert>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg1); props.doAcceptSuggestion(sugg1); props.doAcceptGrameneSuggestion(sugg1)}}>\n {`All genes that contain the word \"${props.suggestionsQuery}\"`}\n </Button>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg2); props.doAcceptSuggestion(sugg2); props.doAcceptGrameneSuggestion(sugg2)}}>\n {`All genes that contain a word that starts with \"${props.suggestionsQuery}\"`}\n </Button>\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n else {\n return (\n <div style={{margin: '10px'}}>\n {suggestions.grouped.category.groups.map((g,idx) => {\n return <div key={idx} id='gramene-suggestion'>\n <h4 className=\"mt10\">{g.groupValue}</h4>\n {g.doclist.docs.map((sugg,jdx) =>\n <Button id={`${idx}-${jdx}`}\n key={jdx}\n disabled={sugg.num_genes === 0}\n size='sm'\n variant=\"outline-secondary\"\n onClick={() => {logAction(sugg); props.doAcceptSuggestion(sugg); props.doAcceptGrameneSuggestion(sugg)}}>\n {showMatches(sugg.display_name,props.suggestionsQuery)}{' '}\n <Badge bg=\"secondary\">{sugg.num_genes}</Badge>\n <i> {getLowestCommonAncestorName(sugg.taxon_id, props.grameneTaxonomy)}</i>\n </Button>\n )}\n </div>\n })}\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'selectGrameneTaxonomy',\n 'selectConfiguration',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React, { useState, useRef, useEffect } from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { Navbar, Nav, NavDropdown, Container, OverlayTrigger, Popover} from 'react-bootstrap'\nimport Switch from 'react-switch'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash,BsChevronDown,BsChevronRight } from 'react-icons/bs'\nimport GeneList from './results/GeneList'\nimport TaxDist from './results/TaxDist'\nimport HelpDemo from './results/HelpDemo'\nimport GeneAttribs from './results/GeneAttribs'\nimport TaxonomyModal from './TaxonomyModal'\nimport Expression from './results/Expression'\nimport UserGeneLists from './results/UserGeneLists'\nimport ExporterView from './exporter/ExporterView'\nimport ExprVizView from './exprViz/ExprVizView'\nimport Auth from './Auth'\nimport ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst CollapsibleSection = ({ title, defaultOpen = true, extra, children }) => {\n const [open, setOpen] = useState(defaultOpen);\n return (\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>{title}</b>\n <span className=\"sidebar-section-actions\">\n {extra}\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">{children}</div>}\n </div>\n );\n};\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs,\n expression: Expression,\n exprViz: ExprVizView,\n userLists: UserGeneLists,\n export: ExporterView\n};\n\nconst StatusCmp = props => {\n let content = props.grameneFiltersStatus;\n // if (props.grameneFiltersStatus === 'init') {\n // props.doClearGrameneFilters();\n // }\n if (props.grameneFiltersStatus === 'ready') {\n let tally = <span>Ready</span>;\n if (props.grameneSearch) {\n let genes = props.grameneSearch.response.numFound;\n let genomes = props.grameneSearch.facet_counts.facet_fields.taxon_id.length / 2;\n tally = <span><b>{genes}</b> genes in <b>{genomes}</b> genomes</span>;\n }\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Genomes Filter</Popover.Header>\n <Popover.Body>Searching {props.activeGenomeCount} genomes</Popover.Body>\n </Popover>\n );\n\n content = <span>\n {tally}\n <OverlayTrigger placement=\"auto\" overlay={popover}>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doShowGrameneGenomes}><BsGearFill/></span>\n </OverlayTrigger>\n <TaxonomyModal/>\n </span>;\n }\n return <div style={{padding:'5px', color:'cornsilk', fontSize:'small'}}>{content}</div>\n};\n\nconst Status = connect(\n 'selectGrameneSearch',\n 'selectGrameneFiltersStatus',\n 'selectActiveGenomeCount',\n 'doShowGrameneGenomes',\n 'doClearGrameneFilters',\n StatusCmp\n);\n\nconst handleClick = (e, moveCopyMode, showMarked, node, actions) => {\n if (!e) e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n\n if (showMarked && moveCopyMode) {\n if (node.marked) {\n actions.selectTarget(node);\n }\n else {\n actions.unmarkTargets()\n }\n }\n console.log(node, showMarked);\n};\nfunction logAction(action) {\n ReactGA.event({\n category: 'Search',\n action: action\n })\n}\nconst Filter = ({node,moveCopyMode,showMarked,actions}) => {\n let classes = 'gramene-filter gramene-filter';\n if (node.operation) {\n classes = `${classes}-${node.operation}`\n }\n if (node.negate) {\n classes = `${classes} gramene-filter-NOT`\n }\n if (showMarked && node.marked) {\n classes = `${classes} gramene-filter-marked`\n }\n let content = '';\n let menu = '';\n let children = [];\n\n if (node.showMenu) {\n let key=1;\n let menuItems = [];\n if (node.hasOwnProperty('operation')) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Change to ${node.operation}`); actions.changeOperation(node)}}>convert to <i>{node.operation === 'AND' ? 'OR' : 'AND'}</i></li>);\n }\n if (node.leftIdx > 0) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Delete filter`); actions.deleteNode(node)}}>delete</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Move filter`); actions.markTargets(node,'move')}}>move{node.isSource && ' select destination'}</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Copy filter`); actions.markTargets(node,'copy')}}>copy{node.isSource && ' select destination'}</li>)\n }\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Negate filter`); actions.negate(node)}}>negate</li>);\n menu = <div className='gramene-filter-menu'><ul>{menuItems}</ul></div>;\n }\n let warning;\n if (node.warning) {\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Warning</Popover.Header>\n <Popover.Body>{node.warning}</Popover.Body>\n </Popover>\n );\n warning = (\n <OverlayTrigger placement=\"auto\" overlay={popover}><span style={{float:'right', color:'red', cursor:'pointer'}}><IoAlertCircle/></span></OverlayTrigger>\n )\n }\n if (node.operation) {\n children = node.children.map((child,idx) => <Filter key={idx} moveCopyMode={moveCopyMode} node={child} showMarked={showMarked} actions={actions}/>);\n content = (\n <div>\n <span className='gramene-filter-operation'\n onClick={()=>actions.toggleMenu(node)}>{node.operation}</span>\n {warning}\n </div>\n );\n }\n else {\n content = <span className='gramene-filter-text'\n onClick={()=>actions.toggleMenu(node)}>{node.category} | {node.name}</span>;\n }\n return (\n <div key={node.leftIdx} className={classes} onClick={(e)=>handleClick(e,moveCopyMode, showMarked,node,actions)}>\n {content}{menu}{children}\n </div>\n )\n};\n\nconst FiltersCmp = props => {\n const actions = {\n negate: props.doNegateGrameneFilter,\n deleteNode: props.doDeleteGrameneFilter,\n changeOperation: props.doChangeGrameneFilterOperation,\n selectTarget: props.doMoveOrCopyGrameneFilter,\n markTargets: props.doMarkGrameneFilterTargets,\n unmarkTargets: props.doUnmarkGrameneFilterTargets,\n toggleMenu: props.doToggleGrameneFilterMenu\n };\n const containerClass = props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': 'gramene-filter-container';\n if (props.grameneFilters.rightIdx > 1) {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\"\n extra={<span style={{cursor:'pointer', marginRight:'0.5rem'}} onClick={(e)=>{e.stopPropagation(); props.doClearGrameneFilters()}}><BsTrash/></span>}>\n <Filter node={props.grameneFilters}\n moveCopyMode={props.grameneFilters.moveCopyMode}\n showMarked={props.grameneFilters.showMarked}\n actions={actions}/>\n </CollapsibleSection>\n </div>\n }\n else {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\">\n <div className='gramene-filter gramene-filter-AND'>No filters defined</div>\n </CollapsibleSection>\n </div>\n }\n};\n\nconst Filters = connect(\n 'selectGrameneFilters',\n 'selectConfiguration',\n 'doNegateGrameneFilter',\n 'doDeleteGrameneFilter',\n 'doChangeGrameneFilterOperation',\n 'doMoveOrCopyGrameneFilter',\n 'doMarkGrameneFilterTargets',\n 'doUnmarkGrameneFilterTargets',\n 'doToggleGrameneFilterMenu',\n 'doClearGrameneFilters',\n FiltersCmp\n);\n\nconst ResultsCmp = props => {\n let activeViews = props.grameneViews.options;\n return props.grameneFilters.rightIdx > 0 ? (\n <div>\n {activeViews.map((v,idx) => {\n let p = Object.assign({}, props);\n const divRef = useRef(null);\n useEffect(() => {\n if (v.shouldScroll) {\n const navBarHeight=0;\n const scrollPosition = divRef.current.offsetTop - navBarHeight;\n window.scrollTo({\n top: scrollPosition,\n behavior: 'smooth'\n })\n props.doCancelShouldScroll();\n }\n }, [v.shouldScroll]);\n return (\n <div key={idx} ref={divRef}>\n {v.show === 'on' && <div style={{borderTopWidth:'medium'}} className='gramene-view-header'>{v.name}</div>}\n {v.show === 'on' && React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doCancelShouldScroll',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <CollapsibleSection title=\"Views\">\n {props.grameneViews.options.filter(view => view.show !== 'disabled').map((view,idx) => (\n <div style={{textWrap:'nowrap'}} key={idx}>\n <Switch onChange={()=>props.doToggleGrameneView(view.id)} checked={view.show === 'on'}\n height={18}\n width={30}\n handleDiameter={16}\n checkedIcon={false}\n uncheckedIcon={false}\n />\n <span className={`gramene-view-span-${view.show}`} onClick={(e) => {\n props.dontToggleGrameneView(view.id)\n }}>{view.name}</span>\n </div>\n ))}\n </CollapsibleSection>\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n 'dontToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views, Auth};\n","import React from 'react'\nimport ReactGA from 'react-ga4'\nimport { connect } from 'redux-bundler-react'\nimport './genes.css'\nimport Expression from './details/Expression'\nimport Homology from './details/Homology'\nimport Location from './details/Location'\nimport Pathways from \"./details/Pathways\"\nimport VEP from \"./details/VEP\"\nimport Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\nimport Sequences from \"./details/Sequences\"\nimport {suggestionToFilters} from \"../utils\";\nimport {GrFormPrevious, GrFormNextLink, GrFormNext, GrHpe} from 'react-icons/gr'\nimport { Badge, OverlayTrigger, Tooltip } from 'react-bootstrap'\n\nlet external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n\nlet inventory = {\n sequences: Sequences,\n location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\n VEP: VEP,\n xrefs: Xrefs,\n pubs: Publications\n};\n\nfunction renderTairSummary(searchResult) {\n const summary = searchResult.summary;\n if(summary && summary !== \"NULL\" && searchResult.system_name === \"arabidopsis_thaliana\") {\n return (\n <div className=\"gene-summary-tair\">\n {trimSummary(summary)}\n </div>\n )\n }\n}\n\nfunction trimSummary(summary) {\n if(summary.length > 160) {\n const start = summary.substr(0, 150);\n const rest = summary.substr(150);\n return <p>{start}<span className=\"ellipsis\">…</span><span className=\"rest\">{rest}</span></p>\n }\n else {\n return <p>{summary}</p>\n }\n}\nconst PanLink = (props) => {\n const gene = props.gene;\n const pan = props.pan;\n return <div className=\"gene-panlink\">\n <a target=\"_blank\" href={pan.url + \"?idList=\" + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst CurationComponent1 = ({ curation }) => {\n return (\n <div className=\"gene-curation\">\n <span>Curated gene structure</span>\n {curation.okay > 0 && <span className=\"status\">✔️ {curation.okay}</span>}\n {curation.flagged > -10 && <span className=\"status\">⚠️ {curation.flagged}</span>}\n </div>\n );\n};\nconst CurationComponent = ({ curation, gene }) => {\n const total = curation.okay + curation.flagged;\n const okayRatio = (curation.okay / total);\n const flaggedRatio = (curation.flagged / total);\n const tooltip = (\n <Tooltip id=\"tooltip\">\n <strong>Gene structure</strong><br/>\n Okay: {curation.okay} \n Flagged: {curation.flagged}\n </Tooltip>\n );\n return (\n <OverlayTrigger placement=\"left\" overlay={tooltip}>\n <a className=\"gene-curation\" target=\"_blank\" href={`https://devdata.gramene.org/curation/curations?idList=${gene.id}`}>\n <span className=\"okay\" style={{opacity: okayRatio}}>☑</span>\n <span className=\"flagged\" style={{opacity: flaggedRatio}}>⚠</span>\n </a>\n </OverlayTrigger>\n )\n};\n\nconst ClosestOrthologCmp = (props) => {\n let id, taxon_id, name, desc, species, className, identity;\n const gene = props.gene;\n\n if (gene.closest_rep_id) {\n name = gene.closest_rep_name || gene.closest_rep_id;\n desc = gene.closest_rep_description;\n species = gene.closest_rep_species_name;\n id = gene.closest_rep_id;\n taxon_id = gene.closest_rep_taxon_id;\n className = \"closest-ortholog\";\n identity = gene.closest_rep_identity || 0;\n }\n else if (gene.model_rep_id) {\n name = gene.model_rep_name || gene.model_rep_id;\n desc = gene.model_rep_description;\n species = gene.model_rep_species_name;\n id = gene.model_rep_id;\n taxon_id = gene.model_rep_taxon_id;\n className = \"model-ortholog\";\n identity = gene.model_rep_identity || 0;\n }\n var isZm = new RegExp(/^Zm00001e/);\n if (isZm.test(desc)) {\n desc='';\n }\n\n return (\n <div className={className} onClick={() => {\n props.doEnsureGrameneGenome(taxon_id);\n props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene',\n fq_field: 'id',\n fq_value: id,\n name: name\n }))\n }}>\n <div className=\"gene-species\">{species}</div>\n {identity > 0 && <div className=\"rep-identity\">{Math.round(identity*100)}</div>}\n <h3 className=\"gene-id\">{name}</h3>\n <p>{desc}</p>\n </div>\n );\n};\n\nconst ClosestOrtholog = connect(\n 'doReplaceGrameneFilters','doEnsureGrameneGenome',\n ClosestOrthologCmp\n);\n\nfunction renderClosestOrtholog(gene) {\n\n if (shouldShowClosestOrtholog(gene)) {\n\n // we used to not add the closest ortholog to the DOM if the homology detail was visible.\n // however, that could cause the height of the result to change. Instead we set visibility:hidden\n // so that the renderer takes into account the height of the ortholog even if not shown.\n return (\n <ClosestOrtholog gene={gene}/>\n );\n }\n}\n\n// show closest ortholog prominently if we have data to show:-\n// a. either there's a closest ortholog (determined by traversing the gene tree until an id or description looks\n// curated) b. or there's a model ortholog (traverse tree to find an ortholog in arabidopsis)\nfunction shouldShowClosestOrtholog(searchResult) {\n return (\n searchResult.closest_rep_id || (\n searchResult.model_rep_id &&\n searchResult.model_rep_id !== searchResult.id\n )\n );\n}\n\nconst allDetails = [\n {\n id: 'VEP',\n label: 'Germplasm',\n popup: 'Germplasm with protein truncating variants (PTVs)',\n available: false\n },\n {\n id: 'sequences',\n label: 'Sequences',\n popup: 'Gene/cDNA/protein fasta',\n available: true\n },\n {\n id: 'location',\n label: 'Location',\n popup: 'Genome Browser',\n available: false\n },\n {\n id: 'expression',\n label: 'Expression',\n popup: 'Gene Expression Atlas',\n available: false\n },\n {\n id: 'homology',\n label: 'Homology',\n popup: 'Gene Family Tree',\n available: false\n },\n {\n id: 'pathways',\n label: 'Pathways',\n popup: 'Plant Reactome Pathways',\n available: false\n },\n {\n id: 'pubs',\n label: 'Papers',\n popup: 'Curated Publications',\n available: false\n },\n {\n id: 'xrefs',\n label: 'Xrefs',\n popup: 'Database Cross-references',\n available: false\n }\n];\n\n\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: allDetails.map(o => ({...o})).filter(d => props.config.details[d.id]),\n expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => {\n hasData[c] = true;\n if (c === 'PanOryza') {\n hasData.xrefs = true;\n }\n });\n this.state.details.forEach(d => d.available |= hasData.hasOwnProperty(d.id));\n }\n getDetailStatus(d) {\n if (this.state.expandedDetail === d.id) return 'expanded';\n if (d.available) return 'closed'\n return d.id === \"pubs\" ? 'empty' : 'disabled';\n }\n setExpanded(d) {\n if (d.available || d.id === \"pubs\") {\n if (this.state.expandedDetail === d.id) {\n this.setState({expandedDetail: null})\n }\n else {\n const geneId = this.props.searchResult.id;\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(geneId))) {\n this.props.requestGene(geneId)\n }\n ReactGA.event({\n category: 'Search',\n action: 'Details',\n label: d.label\n });\n this.setState({expandedDetail: d.id})\n }\n }\n }\n ensureGene(id) {\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(id))) {\n this.props.requestGene(id);\n return false;\n }\n return this.props.geneDocs[id].hasOwnProperty('taxon_id')\n }\n renderMetadata() {\n let gene = this.props.searchResult;\n if (gene.model_rep_taxon_id) {\n gene.model_rep_species_name = this.props.taxLut[gene.model_rep_taxon_id].short_name;\n }\n if (gene.closest_rep_taxon_id) {\n gene.closest_rep_species_name = this.props.taxLut[gene.closest_rep_taxon_id].short_name;\n }\n return renderTairSummary(gene) || renderClosestOrtholog(gene);\n }\n render() {\n const panSite = this.props.config.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\n const curation = this.props.curation;\n // let orthologs='';\n // if (this.props.orthologs && this.props.orthologs.hasOwnProperty(searchResult.id)) {\n // orthologs = this.props.orthologs[searchResult.id].join(', ');\n // }\n const numWordsInDescription = searchResult.description.split(' ').length;\n return (\n <div className=\"result-gene\">\n <div className=\"result-gene-summary\">\n <div className=\"result-gene-title-body\">\n {panSite.hasOwnProperty(searchResult.system_name) && <PanLink pan={panSite[searchResult.system_name]} gene={searchResult}/>}\n {curation && <CurationComponent curation={curation} gene={searchResult}/> }\n <div className=\"gene-title\">\n <div className=\"gene-species\">{taxName}</div>\n <h3 className=\"gene-name\">{searchResult.name}\n {searchResult.id !== searchResult.name && <small className=\"gene-id\"> {searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {searchResult.description !== \"unknown\" && (numWordsInDescription > 1 || searchResult.can_show.pubs) && <p className=\"gene-description\">{searchResult.description}</p>}\n </div>\n {this.renderMetadata()}\n </div>\n <div className=\"gene-detail-tabs\">\n {this.state.details.map((d,idx) => (\n <OverlayTrigger\n key={idx}\n placement={'bottom'}\n overlay={\n <Tooltip id={`tooltip`}>{d.popup}</Tooltip>\n }\n >\n <div key={idx}\n className={`col-md-1 text-center gene-detail-tab-${this.getDetailStatus(d)}`}\n onClick={()=>this.setExpanded(d)}\n >{d.label}</div>\n </OverlayTrigger>\n ))}\n </div>\n {this.state.expandedDetail && this.ensureGene(searchResult.id) && <div className=\"visible-detail\">{React.createElement(inventory[this.state.expandedDetail], this.props)}</div>}\n </div>\n )\n }\n}\n\nconst GeneList = props => {\n if (props.grameneSearch && props.grameneSearch.response && props.grameneTaxonomy) {\n let prev,page,next;\n const numFound = props.grameneSearch.response.numFound;\n if (numFound > props.grameneSearchRows) {\n const pageNum = props.grameneSearchOffset/props.grameneSearchRows;\n page = <span style={{padding:'10px'}}>page <b>{pageNum + 1}</b> of <b>{Math.ceil(numFound/props.grameneSearchRows)}</b></span>;\n prev = <GrHpe/>;\n if (pageNum > 0) {\n prev = <Badge onClick={()=>props.doRequestResultsPage(pageNum - 1)}><GrFormPrevious/></Badge>\n }\n next = <GrHpe/>;\n if (numFound > props.grameneSearchOffset + props.grameneSearchRows) {\n next = <Badge onClick={()=>props.doRequestResultsPage(pageNum + 1)}><GrFormNext/></Badge>\n }\n }\n return <div>\n <div>{prev}{page}{next}</div>\n {props.grameneSearch.response.docs.map((g,idx) => (\n <Gene key={idx}\n searchResult={g}\n config={props.configuration}\n taxName={props.grameneTaxonomy[g.taxon_id].name}\n geneDocs={props.grameneGenes}\n requestGene={props.doRequestGrameneGene}\n requestOrthologs={props.doRequestOrthologs}\n orthologs={props.grameneOrthologs}\n taxLut={props.grameneTaxonomy}\n curation={props.curatedGenes ? props.curatedGenes[g.id] : null}\n expandedDetail={props.grameneSearch.response.numFound === 1 && g.can_show.homology ? 'homology' : null}\n />\n ))}\n {prev}{page}{next}\n </div>\n }\n return null;\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneGenes',\n 'selectGrameneOrthologs',\n 'selectGrameneSearchOffset',\n 'selectGrameneSearchRows',\n 'selectCuratedGenes',\n 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React, { useRef, useEffect, useState } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Row, Col} from 'react-bootstrap';\nimport BAR, {haveBAR} from \"gramene-efp-browser\";\n\nfunction DynamicIframe(props) {\n // Create a ref for the iframe element\n const iframeRef = useRef(null);\n const [iframeHeight, setIframeHeight] = useState(500); // Default height\n\n useEffect(() => {\n const handleMessage = (event) => {\n if (event.data.type === 'heightChange') {\n setIframeHeight(event.data.height + 44);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n src={props.url}\n title=\"Dynamic Iframe\"\n style={{ width: '100%', height: `${iframeHeight}px`, border: 'none' }}\n />\n );\n}\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [atlasExperiment, setAtlasExperiment] = useState(null);\n const [atlasExperimentList, setAtlasExperimentList] = useState([]);\n const [atlasFacets, setAtlasFacets] = useState(null);\n const [isLocal, setIsLocal] = useState(false);\n const [activeTab, setActiveTab] = useState('gene');\n\n const handleLocalAPIChange = (event) => {\n setIsLocal(event.target.checked);\n };\n useEffect(() => {\n const tid = Math.floor(gene.taxon_id / 1000);\n if (props.expressionStudies[tid]) {\n let facets={Differential: {}, Baseline: {}};\n let eList = props.expressionStudies[tid].sort((a,b) => {\n const a_name = `${a.type}:${a.description || a._id}`;\n const b_name = `${b.type}:${b.description || b._id}`;\n return a_name < b_name ? -1 : 1;\n });\n if (props.searchResult.hasOwnProperty('expressed_in_gxa_attr_ss')) {\n const in_gxa = new Set(props.searchResult.expressed_in_gxa_attr_ss);\n eList = eList.filter(e => in_gxa.has(e._id))\n }\n eList.forEach(e => {e.factors.forEach(factor => facets[e.type][factor] = 1);});\n setAtlasExperimentList(eList);\n setAtlasFacets(facets);\n let refExp = eList.filter(e => e.isRef);\n if (refExp.length === 1) {\n setAtlasExperiment(refExp[0]._id);\n } else {\n // no reference experiment - choose first\n setAtlasExperiment(eList[0]._id);\n }\n }\n }, [props.expressionStudies]);\n\n let paralogs_url;\n let gene_url = `https://dev.gramene.org/static/atlasWidget.html?genes=${gene.atlas_id || gene._id}&localAPI=${isLocal}`;\n let paralogs = [];\n if (props.grameneParalogs && props.grameneParalogs[gene._id]) {\n paralogs = props.grameneParalogs[gene._id];\n } else if (gene.homology) {\n props.doRequestParalogs(gene._id, gene.homology.supertree, gene.taxon_id);\n }\n // if (gene.homology && gene.homology.homologous_genes && gene.homology.homologous_genes.within_species_paralog) {\n // paralogs = gene.homology.homologous_genes.within_species_paralog;\n // }\n if (paralogs.length > 0 && atlasExperiment) {\n paralogs_url= `https://dev.gramene.org/static/atlasWidget.html?genes=${paralogs.join(' ')}&experiment=${atlasExperiment}&localAPI=${isLocal}`;\n }\n return <Tabs activeKey={activeTab} onSelect={(k) => setActiveTab(k)}>\n {paralogs_url &&\n <Tab tabClassName=\"gxa\" eventKey=\"paralogs\" title={`Paralogs`} key=\"gxaparalogs\">\n <Form.Select aria-label='experiment selector'\n placeholder='Select experiment'\n onChange={(e) => setAtlasExperiment(e.target.value)}>\n { atlasExperimentList.map((e,idx) =>\n <option key={idx} value={e._id}>{e.type}: {e.description || e._id}</option>\n )}\n </Form.Select>\n {activeTab === \"paralogs\" && <DynamicIframe url={paralogs_url}/> }\n </Tab>\n }\n <Tab tabClassName=\"gxa\" eventKey=\"gene\" title=\"All Studies\" key=\"gxa\">\n {/*<Form.Check*/}\n {/* type=\"switch\"*/}\n {/* id=\"localAPI\"*/}\n {/* label=\"Local API\"*/}\n {/* checked={isLocal}*/}\n {/* onChange={handleLocalAPIChange}*/}\n {/*/>*/}\n {activeTab === \"gene\" && <DynamicIframe url={gene_url}/> }\n </Tab>\n {haveBAR(gene) &&\n <Tab tabClassName=\"eFP\" eventKey=\"eFP\" title=\"eFP Browser\" key=\"bar\"><BAR gene={gene}/></Tab>\n }\n </Tabs>\n};\n\nexport default connect(\n 'selectGrameneParalogs',\n 'selectExpressionStudies',\n 'doRequestParalogs',\n //'doRequestParalogExpression',\n Detail\n);\n\n","import React from 'react'\nimport _ from 'lodash';\nimport {connect} from \"redux-bundler-react\";\nimport TreeVis from \"gramene-genetree-vis\";\nimport treesClient from \"gramene-trees-client\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport {suggestionToFilters} from \"../../utils\";\nimport {Spinner, Alert} from \"react-bootstrap\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Homology extends React.Component {\n constructor(props) {\n super(props);\n if (!props.geneDocs.hasOwnProperty(props.searchResult.id)) {\n props.requestGene(props.searchResult.id)\n }\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n }\n renderTreeVis() {\n return (\n <div className=\"gene-genetree\">\n <TreeVis genetree={this.tree}\n initialGeneOfInterest={this.gene}\n genomesOfInterest={this.props.grameneGenomes.active}\n taxonomy={this.taxonomy}\n allowGeneSelection={true}\n pivotTree={true}\n enableCuration={false}\n enablePhyloview={true}\n numberOfNeighbors={10}\n ensemblUrl={this.props.configuration.ensemblURL}/>\n </div>\n )\n }\n filterAllHomologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'gene_tree',\n fq_value: this.tree._id,\n name: `Homologs of ${this.gene.name}`\n }))\n }\n filterOrthologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__all_orthologs',\n fq_value: this.gene._id,\n name: `Orthologs of ${this.gene.name}`\n }))\n }\n filterParalogs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__within_species_paralog',\n fq_value: this.gene._id,\n name: `Paralogs of ${this.gene.name}`\n }))\n }\n searchSupertree() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'supertree_attr_s',\n fq_value: this.gene.homology.supertree,\n name: this.gene.homology.supertree\n }))\n }\n orthologList() {\n return this.orthoParaList('ortholog');\n }\n\n paralogList() {\n return this.orthoParaList('within_species_paralog');\n }\n\n orthoParaList(type) {\n var homology, thisGeneId;\n homology = _.get(this.gene, 'homology.homologous_genes');\n thisGeneId = this.gene._id;\n\n if (homology) {\n var homologs = _(homology)\n .pickBy(function filterCategories(thing, name) {\n return name.indexOf(type) === 0;\n })\n .values()\n .flatten()\n .uniq()\n .value();\n\n if (!_.isEmpty(homologs)) {\n if (!homologs.includes(thisGeneId)) {\n console.log(\"add to homologs list\",thisGeneId);\n homologs.push(thisGeneId);\n }\n return homologs; // only return something if we have something. We're testing for truthiness later.\n }\n }\n }\n explorations() {\n let x = [{\n name: 'Homologs',\n category: 'Gene Tree',\n count: this.tree.geneCount,\n handleClick: this.filterAllHomologs.bind(this)\n }];\n if (this.orthologs) {\n x.push({\n name: 'Orthologs',\n category: 'Gene Tree',\n count: this.orthologs.length,\n handleClick: this.filterOrthologs.bind(this)\n });\n }\n if (this.paralogs) {\n x.push({\n name: 'Paralogs',\n category: 'Gene Tree',\n count: this.paralogs.length,\n handleClick: this.filterParalogs.bind(this)\n });\n }\n if (this.gene.homology.supertree) {\n x.push({\n name: `Supertree`,\n category: `Gene Tree`,\n count: this.gene.homology.supertree,\n handleClick: this.searchSupertree.bind(this)\n })\n }\n return x;\n }\n links() {\n let links = [\n {\n name: 'Ensembl Gene Tree view',\n url: `${this.props.configuration.ensemblURL}/${this.gene.system_name}/Gene/Compara_Tree?g=${this.gene._id}`\n }\n ];\n if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n links.push({\n name: 'Curate',\n url: this.props.curation.url + this.gene._id\n })\n }\n return links;\n }\n render() {\n const id = this.props.searchResult.id;\n if (!this.props.geneDocs.hasOwnProperty(id)) {\n return <Spinner/>\n }\n this.gene = this.props.geneDocs[id];\n const treeId = this.gene.homology.gene_tree.id;\n if (! this.props.grameneTrees.hasOwnProperty(treeId)) {\n this.props.doRequestGrameneTree(treeId);\n }\n else {\n const tree = this.props.grameneTrees[treeId];\n if (tree.hasOwnProperty('taxon_id')) {\n this.tree = treesClient.genetree.tree([this.props.grameneTrees[treeId]]);\n this.orthologs = this.orthologList();\n this.paralogs = this.paralogList();\n }\n }\n let flagged=0;\n // if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n // flagged = this.props.curatedGenes && this.props.curatedGenes[id] ? this.props.curatedGenes[id].flagged : 0;\n // }\n return (\n <Detail>\n <Title key=\"title\">Compara Gene Tree</Title>\n <Description key=\"description\">\n This phylogram shows the relationships between this gene and others similar to it, as determined by Ensembl Compara.\n {flagged > 1 && <Alert variant={'warning'}>This gene was flagged for potential gene structural annotation issues by {flagged} curators</Alert>}\n </Description>\n {this.tree && <Content key=\"content\">{this.renderTreeVis()}</Content>}\n {this.tree && <Explore key=\"explore\" explorations={this.explorations()}/>}\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n )\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGrameneTrees',\n 'selectGrameneGenomes',\n 'selectConfiguration',\n 'selectCuration',\n 'selectCuratedGenes',\n 'doRequestGrameneTree',\n 'doAcceptGrameneSuggestion',\n 'doReplaceGrameneFilters',\n Homology\n);\n\n","import React from 'react';\nimport keyBy from 'lodash/keyBy';\nimport _ from \"lodash\";\nimport ReactGA from \"react-ga4\";\nimport { BiLinkExternal } from \"react-icons/bi\";\nimport { Button, Badge } from \"react-bootstrap\";\n\nexport const Detail = props => {\n let subComponents = keyBy(props.children, 'key');\n return (\n <div className=\"detail\">\n <div className=\"intro\">\n {subComponents.title}\n {subComponents.description}\n </div>\n <div className=\"content-wrapper\">\n {subComponents.content}\n </div>\n <div className=\"actions\">\n <div className=\"action-wrapper\" xs={12} sm={5}>\n {subComponents.explore}\n </div>\n <div className=\"action-wrapper\" xs={12} sm={7}>\n {subComponents.links}\n </div>\n </div>\n </div>\n )\n};\n\nexport const Title = props => <h4>{props.children}</h4>;\nexport const Description = props => <p className=\"description\">{props.children}</p>;\nexport const Content = props => <div className=\"content\">{props.children}</div>;\n\nconst QueryTerm = props => {\n let category, name, badge;\n name = props.name;\n if (props.category) {\n category = props.category + ' | ';\n }\n if (_.isNumber(props.count)) {\n badge = <Badge style={{marginLeft: \"0.5rem\"}} bg='secondary'>{props.count}</Badge>\n }\n return (\n <Button variant='outline-dark' onClick={props.handleClick}>\n {category}{name}{badge}\n </Button>\n )\n};\n\nfunction renderExplorations(explorations) {\n return explorations.map(\n (exploration, idx) =>\n <QueryTerm key={idx} {...exploration} />\n );\n}\nexport const Explore = props => (\n <div className=\"explore\">\n <h5>Search Filters</h5>\n <div>\n {renderExplorations(props.explorations)}\n </div>\n </div>\n);\n\nfunction renderLinks(links) {\n let external = <small title=\"This link opens a page from an external site\"> <BiLinkExternal/></small>;\n return links.map((link, idx) =>\n <li key={idx}>\n <a href={link.url} target=\"_blank\" className=\"external-link\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: link.name\n })\n }}>{link.name}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={link.name}*/}\n {/* to={link.url}*/}\n {/* target=\"_blank\"*/}\n {/* className=\"external-link\"*/}\n {/*>*/}\n {/* {link.name}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n}\n\nexport const Links = props => (\n <div className=\"links\">\n <h5>Links to other resources</h5>\n <ul>\n {renderLinks(props.links)}\n </ul>\n </div>\n);\n","import { initializeApp, getApps, getApp } from \"firebase/app\";\n\nexport const getFirebaseApp = (config) => {\n if (!config) return null;\n const name = config.projectId || '[DEFAULT]';\n if (getApps().some(a => a.name === name)) return getApp(name);\n return initializeApp(config, name);\n};\n\nexport const suggestionToFilters = (suggestion) => {\n return {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 3,\n children: [\n {\n fq_field: suggestion.fq_field,\n fq_value: suggestion.fq_value,\n name: suggestion.name,\n category: suggestion.category,\n leftIdx: 1,\n rightIdx: 2,\n negate: false,\n marked: false\n }\n ]\n }\n}\n","import React from 'react'\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport {Button} from \"react-bootstrap\";\nimport Browser from \"./location/browser\";\nimport {connect} from \"redux-bundler-react\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Location extends React.Component {\n constructor(props) {\n super(props);\n this.gene = this.props.geneDocs[this.props.searchResult.id];\n this.initRegion();\n this.state = {\n visibleRange: this.initVisibleRange()\n };\n }\n\n initVisibleRange() {\n var location, span, padding, result;\n location = this.gene.location;\n if(!location) {\n throw new Error(`Could not find the location of the gene in props.`);\n }\n\n span = location.end - location.start + 1;\n padding = Math.floor(.1 * span);\n\n result = {\n chr: location.region,\n start: location.start - padding,\n end: location.end + padding\n };\n\n result.displayName = `${result.chr}:${result.start}-${result.end}`;\n\n return result;\n }\n\n initRegion() {\n var region, isChromosome, regionType, regionName;\n region = this.gene.location.region;\n if (region) {\n isChromosome = /^\\d+$/.test(region);\n if (isChromosome) {\n regionType = 'chromosome';\n regionName = 'Chromosome ' + region;\n }\n else {\n regionType = 'scaffold';\n regionName = region;\n }\n this.region = {\n isChromsome: isChromosome,\n name: regionName,\n type: regionType\n };\n }\n }\n\n\n handleViewChange(chr, start, end) {\n var visibleRange = {\n chr: chr,\n start: start,\n end: end,\n displayName: `${chr}:${start}-${end}`\n };\n\n if(!isEqual(visibleRange, this.state.visibleRange)) {\n this.setState({\n visibleRange: visibleRange\n });\n }\n }\n\n updateQuery(restrictToVisibleRange) {\n var location, geneName, visibleRange, filter, filterDisplayName, fq;\n location = this.gene.location;\n geneName = this.gene.name;\n // category: 'Gene Tree',\n // fq_field: 'gene_tree',\n // fq_value: this.tree._id,\n // name: `Homologs of ${this.gene.name}`\n\n let terms = [\n {\n category: \"Map\",\n name: location.map,\n fq_field: 'map',\n fq_value: location.map\n },\n {\n category: \"Region\",\n name: location.region,\n fq_field: 'region',\n fq_value: location.region\n }\n ];\n fq = `map:${location.map} AND region:${location.region}`;\n\n if (restrictToVisibleRange) {\n visibleRange = this.state.visibleRange;\n\n terms.push({\n category: \"Interval\",\n name: `${visibleRange.start}-${visibleRange.end}`,\n fq_field: 'start',\n fq_value: `[${visibleRange.start} TO ${visibleRange.end}]`\n });\n fq += ` AND (start:[${visibleRange.start} TO ${visibleRange.end}]`\n + ` OR end:[${visibleRange.start} TO ${visibleRange.end}])`;\n\n filterDisplayName = visibleRange.displayName;\n } else {\n filterDisplayName = \"Shares \" + this.region.type + \" with \" + geneName;\n }\n\n console.log(\"User asked to filter by location\");\n filter = {\n category: 'Location',\n id: fq,\n fq: fq,\n display_name: filterDisplayName\n };\n\n // QueryActions.removeAllFilters();\n // QueryActions.setFilter(filter);\n this.props.doAddGrameneRangeQuery(terms);\n if (this.props.closeModal) this.props.closeModal();\n }\n\n explorations() {\n var visible, result;\n visible = this.state.visibleRange;\n result = [\n {\n name: `All on ${this.region.name}`,\n handleClick: ()=>this.updateQuery(false)\n }\n ];\n if (visible) {\n result.push({\n name: `All within ${getProp(visible, 'displayName')}`,\n handleClick: ()=>this.updateQuery(true)\n });\n }\n return result;\n }\n\n links() {\n function jgiify(id) {\n return id.replace('SORBI_3','Sobic.').replace(/\\.v[0-9]\\.[0-9]$/,'');\n }\n var gene = this.gene;\n let links = [\n {name: 'Ensembl Browser', url: `${this.props.config.ensemblURL}/${gene.system_name}/Gene/Summary?g=${gene._id}`}\n ];\n if (gene.annotations.taxonomy.ancestors.includes(4557))\n links.push({name: 'Phytozome', url: `https://phytozome-next.jgi.doe.gov/report/gene/Sbicolor_v5_1/${jgiify(gene._id)}`})\n if (gene.taxon_id === 3702)\n links.push(\n {name: 'tair', url: `https://www.arabidopsis.org/servlets/TairObject?name=${gene._id}&type=locus`},\n {name: 'ThaleMine', url: `https://bar.utoronto.ca/thalemine/keywordSearchResults.do?searchTerm=${gene._id}&searchSubmit=search`}\n );\n if (gene.taxon_id === 39947)\n links.push({name: 'RAP-DB', url: `https://rapdb.dna.affrc.go.jp/locus/?name=${gene._id}`});\n const isMaize = new RegExp(/^Zm[0-9]+/);\n if (isMaize.test(gene._id))\n links.push({name: 'MaizeGDB', url: `http://www.maizegdb.org/gene_center/gene/${gene._id}`});\n return links;\n }\n\n render() {\n return (\n <Detail>\n {/*<Title key=\"title\">Genome location: {this.renderGenePosition()}</Title>*/}\n <Description key=\"description\">Currently viewing: {this.renderLocation()} {this.renderResetButton()}</Description>\n <Content key=\"content\">\n {this.renderBrowser()}\n </Content>\n <Explore key=\"explore\" explorations={this.explorations()}/>\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n );\n }\n\n\n renderBrowser() {\n return (\n <Browser gene={this.gene} {...this.props} {...this.state} onViewChange={ this.handleViewChange.bind(this) }/>\n );\n }\n\n renderGenePosition() {\n var location = this.gene.location;\n return (\n <span className=\"location\">\n <span className=\"region\">{this.region.name}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n renderLocation() {\n var location = this.state.visibleRange;\n return (\n <span className=\"location\">\n <span className=\"region\">{location.chr}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n resetVisibleRange() {\n const {chr, start, end} = this.initVisibleRange();\n this.handleViewChange(chr, start, end);\n }\n\n renderResetButton() {\n // let active=isEqual(this.props.visibleRange, this.state.visibleRange);\n return (\n <Button\n size=\"sm\"\n variant=\"outline-dark\"\n onClick={() => this.resetVisibleRange()}>\n Reset\n </Button>\n )\n }\n}\n\nexport default connect('doAddGrameneRangeQuery',Location);\n\n","import React from \"react\";\nimport DallianceBrowser from \"./dallianceBrowser.js\";\n\nexport default class Browser extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n <div className=\"location-browser\">\n <DallianceBrowser {...this.props} expanded={!!this.props.closeModal} />\n </div>\n )\n }\n\n}\n\n// Browser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// visibleRange: React.PropTypes.object.isRequired,\n// onViewChange: React.PropTypes.func.isRequired\n// };","import React from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n// var ensemblREST = require('../../../../../package.json').gramene.ensemblREST;\n//const ensemblREST = 'http://data.gramene.org/ensembl63';\n// const ensemblREST = 'https://data.sorghumbase.org/ensembl2';\n// const ensemblREST = 'https://data.gramene.org/vitis-ensembl1';\n// const ensemblREST = 'https://data.gramene.org/pansite-ensembl';\n\n// calculate this once.\nconst PREFIX = '/static/gramene-dalliance/';\n\nexport default class DallianceBrowser extends React.Component {\n\n constructor(props) {\n super(props);\n this.initialVisibleRange = props.visibleRange;\n }\n\n shouldComponentUpdate(newProps) {\n // should we reset the view to initial state?\n if(isEqual(newProps.visibleRange, this.initialVisibleRange)) {\n this.browser.setLocation(newProps.visibleRange.chr, newProps.visibleRange.start, newProps.visibleRange.end);\n }\n\n return false;\n }\n\n biodallianceElementId() {\n return this.props.gene._id + 'Browser';\n }\n\n browser() {\n var g, view, start, end, browser;\n g = this.props.gene;\n view = this.props.visibleRange;\n start = view.start;\n end = view.end;\n\n this.browser = browser = new Browser(\n {\n pageName: this.biodallianceElementId(),\n chr: g.location.region,\n viewStart: start,\n viewEnd: end,\n cookieKey: g._id + 'BrowserCookie',\n prefix: PREFIX,\n\n coordSystem: {\n speciesName: g.system_name,\n taxon: g.taxon_id,\n auth: 'Gramene',\n version: '3',\n ucscName: 'IRGSP-1.0'\n },\n\n sources: [\n {\n name: 'DNA',\n ensemblURI: this.props.config.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.config.ensemblRest,\n tier_type: 'ensembl',\n species: g.system_name,\n type: ['gene', 'transcript', 'exon', 'cds']\n }\n ],\n\n // hubs: ['/Track_Hubs/DRP000315/hub.txt'],\n disablePoweredBy: true,\n setDocumentTitle: false,\n noDefaultLabels: true,//!this.props.expanded,\n noPersist: true,\n noPersistView: true,\n maxWorkers: 2,\n noTitle: true,\n noLocationField: false,\n noLeapButtons: true,//!this.props.expanded,\n noZoomSlider: false, //!this.props.expanded,\n noTrackAdder: true,//!this.props.expanded,\n noTrackEditor: true,//!this.props.expanded,\n noExport: true,//!this.props.expanded,\n noOptions: true,//!this.props.expanded,\n noHelp: true,\n maxViewWidth: 1000000\n }\n );\n\n browser.addViewListener(this.props.onViewChange);\n }\n\n cancel() {\n if (typeof this.timeoutID == \"number\") {\n window.clearTimeout(this.timeoutID);\n delete this.timeoutID;\n }\n }\n\n componentDidMount() {\n // this.browser();\n this.cancel();\n var self = this;\n this.timeoutID = window.setTimeout(function () {self.browser();}, 0);\n }\n\n componentWillUnmount() {\n this.cancel();\n }\n\n render() {\n return (\n <div id={this.biodallianceElementId()}/>\n );\n }\n}\n\n// DallianceBrowser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// visibleRange: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// onViewChange: React.PropTypes.func.isRequired\n// };\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport FlatToNested from 'flat-to-nested';\nimport {Explore, Links} from \"./generic\";\nimport treesClient from \"gramene-trees-client\";\n// import {TreeMenu} from \"react-tree-menu\";\nimport TreeMenu from \"react-simple-tree-menu\";\nimport '../../../../node_modules/react-simple-tree-menu/dist/main.css';\n\nimport {Spinner} from \"react-bootstrap\";\nimport _ from 'lodash'\nimport \"./tree-view.css\"\n\nvar reactomeURL = \"https://plantreactome.gramene.org\";\n\nclass Pathways extends React.Component {\n constructor(props) {\n super(props);\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n this.gene = props.geneDocs[props.searchResult.id];\n this.holderId = 'displayHolder' + this.gene._id;\n this.state = { treeVisible: true, height: 500 };\n }\n\n getTreeWidth() {\n return this.state.treeVisible ? 250 : 0;\n }\n\n getDiagramWidth() {\n // Account for toggle button (24px) and 1px border\n const toggleWidth = 25;\n const treeWidth = this.getTreeWidth();\n return this.divWrapper.clientWidth - treeWidth - toggleWidth - 1;\n }\n\n initDiagram() {\n this.diagram = Reactome.Diagram.create({\n proxyPrefix: reactomeURL,\n placeHolder: this.holderId,\n width: this.getDiagramWidth(),\n height: this.state.height\n });\n }\n\n startResize(e) {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = this.state.height;\n\n const onMouseMove = (moveEvent) => {\n const newHeight = Math.max(200, startHeight + (moveEvent.clientY - startY));\n this.setState({ height: newHeight });\n };\n\n const onMouseUp = () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n // Recreate diagram at new height\n if (this.currentPathwayId && this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n this.loadDiagram(this.currentPathwayId);\n }\n };\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n }\n\n toggleTree() {\n // Use the synchronously-tracked ID, not the async onDiagramLoaded one\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.setState({ treeVisible: !this.state.treeVisible }, () => {\n // Use requestAnimationFrame to ensure DOM has updated before\n // reinitializing the diagram with the new available width\n requestAnimationFrame(() => {\n if (savedDiagram) {\n this.loadDiagram(savedDiagram);\n }\n });\n });\n }\n\n stableId(dbId) {\n let prefix = this.taxonomy.indices.id[this.gene.taxon_id].model.reactomePrefix || 'OSA';\n return `R-${prefix}-${dbId}`;\n }\n\n loadDiagram(pathwayId, reactionId) {\n this.currentPathwayId = pathwayId;\n if (!this.diagram) this.initDiagram();\n this.diagram.loadDiagram(pathwayId);\n\n this.diagram.onDiagramLoaded(function (loaded) {\n this.loadedDiagram = loaded;\n if (reactionId) {\n this.diagram.selectItem(reactionId);\n }\n // var xref = _.find(this.props.gene.xrefs,{db : 'Gramene_Plant_Reactome'}).ids[0];\n this.diagram.flagItems(this.gene._id);\n }.bind(this));\n }\n\n componentDidMount() {\n if (Reactome && Reactome.Diagram) {\n // this.initDiagram();\n }\n else {\n window.addEventListener('launchDiagram', function (e) {\n // this.initDiagram()\n }.bind(this));\n }\n this._handleResize = _.debounce(() => {\n if (this.currentPathwayId && this.divWrapper) {\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.loadDiagram(savedDiagram);\n }\n }, 300);\n window.addEventListener('resize', this._handleResize);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.hierarchy && ! this.state.selectedNode) {\n let node = this.state.hierarchy[0];\n let path = [0];\n let parent = node;\n while (node.nodes) {\n path.push(0);\n parent = node;\n node = node.nodes[0];\n }\n console.log(parent,node,path);\n this.loadNodes(path);\n }\n if (!this.state.hierarchy && this.pathwayIds) {\n const haveDocs = this.pathwayIds.filter(id => this.props.gramenePathways.hasOwnProperty(id));\n if (haveDocs.length === this.pathwayIds.length) {\n const docs = this.pathwayIds.map(id => this.props.gramenePathways[id]);\n this.getHierarchy(this.makeTaxonSpecific(docs,this.gene.taxon_id));\n }\n }\n }\n\n componentWillMount() {\n var pathways, reactionId, ancestorIds;\n pathways = this.gene.annotations.pathways;\n if(!pathways) {\n throw new Error(\"No pathway annotation present for \" + this.gene._id);\n }\n\n this.pathwayIds = _.clone(pathways.ancestors);\n pathways.entries.forEach(function(reaction) {\n let [r,speciesCode,id] = reaction.id.split('-');\n\n this.pathwayIds.push(+id);\n }.bind(this));\n\n this.props.doRequestGramenePathways(this.pathwayIds);\n\n // DocActions.needDocs('pathways', this.pathwayIds, (docs) => { return this.makeTaxonSpecific(docs,this.props.gene.taxon_id)}, this.getHierarchy);\n }\n\n makeTaxonSpecific(docs,taxon_id) {\n let lineageField = 'lineage_'+taxon_id;\n if (! docs[0].hasOwnProperty(lineageField)) {\n let tid = Math.floor(taxon_id / 1000);\n lineageField = 'lineage_'+tid;\n }\n let tsDocs = docs.map(function(doc) {\n let tsDoc = _.pick(doc,['_id','name','type']);\n tsDoc.lineage = doc[lineageField];\n return tsDoc;\n });\n console.log(tsDocs);\n return tsDocs;\n }\n\n componentWillUnmount() {\n // DocActions.noLongerNeedDocs('pathways', this.pathwayIds);\n if (this.diagram) this.diagram.detach();\n if (this._handleResize) {\n window.removeEventListener('resize', this._handleResize);\n this._handleResize.cancel();\n }\n }\n\n getHierarchy(docs) {\n let pathways = _.keyBy(docs,'_id');\n let nodes = [];\n this.pathwayIds.forEach(function (pwyId) {\n if (pathways[pwyId]) {\n let pwy = pathways[pwyId];\n pwy.lineage.forEach(function(line) {\n let parentOffset = line.length - 2;\n nodes.push({\n id: pwyId,\n key: pwyId,\n label: pwy.name,\n type: pwy.type,\n checkbox: false,\n selected: false,\n parent: parentOffset >=0 ? line[parentOffset] : undefined\n });\n });\n }\n });\n\n let nested = new FlatToNested({\n children: 'nodes'\n }).convert(nodes);\n\n this.setState({hierarchy: [nested], selectedNode: undefined});\n }\n possiblyLoadNodes(node) {\n if (!node.selected) {\n let selectedNode = this.state.selectedNode;\n selectedNode.selected = false;\n node.selected = true;\n selectedNode = node;\n if (node.type === \"Pathway\") {\n let pathway = this.stableId(node.id);\n this.loadDiagram(pathway);\n }\n else {\n let reaction = this.stableId(node.id);\n let pathway = this.stableId(node.parent.split(\"/\").pop());\n if (this.loadedDiagram === pathway) {\n this.diagram.selectItem(reaction);\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway,reaction);\n }\n }\n this.setState({selectedNode})\n }\n }\n loadNodes(nodes) {\n let hierarchy = this.state.hierarchy;\n let selectedNode = this.state.selectedNode;\n let offset = nodes.shift();\n let nodeRef = hierarchy[offset];\n let lineage = [nodeRef];\n while (nodeRef.nodes) {\n nodeRef = nodeRef.nodes[0];\n lineage.unshift(nodeRef);\n }\n if (lineage[0].id !== 2894885) {\n let pathway = this.stableId(lineage[0].id);\n let reaction = undefined;\n if (lineage[0].type === \"Reaction\") {\n reaction = pathway;\n pathway = this.stableId(lineage[1].id);\n }\n if (lineage[0].selected) {\n selectedNode = undefined;\n lineage[0].selected = false;\n if (this.loadedDiagram === pathway) {\n this.diagram.resetSelection();\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway);\n }\n }\n else {\n if (selectedNode) {\n selectedNode.selected = false;\n }\n selectedNode = lineage[0];\n lineage[0].selected = true;\n if (this.loadedDiagram === pathway) {\n if (reaction) {\n this.diagram.selectItem(reaction);\n }\n else {\n this.diagram.resetSelection();\n }\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n if (reaction) {\n this.loadDiagram(pathway, reaction);\n }\n else {\n this.loadDiagram(pathway);\n }\n }\n }\n this.setState({hierarchy: hierarchy, selectedNode: selectedNode});\n }\n }\n\n renderHierarchy() {\n if (this.state.hierarchy) {\n let path = [];\n let allPaths = [];\n let nodes = this.state.hierarchy;\n while (nodes) {\n path.push(nodes[0].key);\n allPaths.push(path.join('/'));\n if (nodes[0].hasOwnProperty('nodes')) {\n nodes = nodes[0].nodes;\n }\n else {\n nodes = undefined;\n }\n }\n // console.log(path);\n return <TreeMenu\n data={this.state.hierarchy}\n hasSearch={false}\n onClickItem={(item) => this.possiblyLoadNodes(item)}\n onClickItemx={(item) => console.log('onClickItem', item)}\n initialActiveKey={path.join('/')}\n initialOpenNodes={allPaths}\n />;\n // return (\n // <TreeMenu\n // data={this.state.hierarchy}\n // expandIconClass=\"fa fa-chevron-right\"\n // collapseIconClass=\"fa fa-chevron-down\"\n // stateful={true}\n // collapsible={true}\n // onTreeNodeClick={this.loadNodes.bind(this)}\n // />\n // );\n }\n return <Spinner/>\n }\n\n updateQuery() {\n console.log(\"User asked to filter by \"+ this.state.selectedNode.type);\n\n this.props.doAcceptGrameneSuggestion({\n category: 'Plant Reactome',\n fq_field: 'pathways__ancestors',\n fq_value: this.state.selectedNode.id,\n name: this.state.selectedNode.label\n })\n }\n\n render() {\n let reactomeLink,searchFilter;\n\n if (this.state.selectedNode) {\n let xrefLUT = _.keyBy(this.gene.xrefs,'db');\n let links = [\n {name: 'Plant Reactome '+this.state.selectedNode.type, url: `${reactomeURL}/content/detail/${this.stableId(this.state.selectedNode.id)}`}\n ];\n if (xrefLUT.hasOwnProperty('notGramene_Plant_Reactome')) {\n links.push({name: 'Plant Reactome Gene', url: `${reactomeURL}/content/detail/${xrefLUT.notGramene_Plant_Reactome.ids[0]}`});\n }\n reactomeLink = <Links key=\"links\" links={links}/>;\n let filters = [\n {\n name: `All genes in this ${this.state.selectedNode.type}`,\n handleClick: ()=>this.updateQuery()\n }\n ];\n searchFilter = <Explore key=\"explore\" explorations={filters}/>;\n }\n const treeWidth = this.getTreeWidth();\n return (\n <div ref={(div) => {this.divWrapper = div;}} className=\"pathways-container\">\n <div className=\"pathways-layout\" style={{height: this.state.height}}>\n <button\n className=\"pathways-tree-toggle\"\n onClick={() => this.toggleTree()}\n title={this.state.treeVisible ? 'Hide pathway hierarchy' : 'Show pathway hierarchy'}\n >\n {this.state.treeVisible ? '◀' : '▶'}\n </button>\n {this.state.treeVisible && (\n <div className=\"pathways-tree-panel\">\n {this.renderHierarchy()}\n </div>\n )}\n <div className=\"pathways-diagram-panel\" id={this.holderId}/>\n </div>\n <div\n className=\"pathways-resize-handle\"\n onMouseDown={(e) => this.startResize(e)}\n title=\"Drag to resize\"\n />\n {searchFilter}\n {reactomeLink}\n </div>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'doRequestGramenePathways',\n 'doAcceptGrameneSuggestion',\n Pathways\n);\n","import React, {useState, useEffect, useRef, useCallback} from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Button} from 'react-bootstrap';\nimport { AgGridReact } from \"ag-grid-react\";\nimport _ from 'lodash';\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport \"./VEP.css\";\nimport { study_info } from '../../../vepStudyInfo';\n\nconst ggURL = {\n xIRRI: 'https://gringlobal.irri.org/gringlobal/accessiondetail?id=',\n IRRI: 'https://www.irri.org/genesys-rice#/a/',\n ARS: 'https://npgsweb.ars-grin.gov/gringlobal/accessiondetail.aspx?id=',\n ICRISAT: 'https://genebank.icrisat.org/IND/PassportSummary?ID=',\n sorbmutdb: 'https://www.depts.ttu.edu/igcast/sorbmutdb.php',\n maizeGDB: 'https://wgs.maizegdb.org/',\n NCBI: 'https://www.ncbi.nlm.nih.gov/biosample/?term='\n};\n\nconst rice_studies = {'1': {label: 'Rice 3K', type: 'NAT'}};\nconst AccessionLink = ({germplasm, gene_id}) => {\n const genebank = germplasm.stock_center;\n const url = ggURL[genebank];\n if (germplasm.germplasm_dbid) { // link to stock center\n const germ_id = germplasm.germplasm_dbid;\n if (germ_id && url && germ_id !== \"0\") {\n return <a target=\"_blank\" href={`${url}${germ_id}`}>\n {germplasm.pub_id} ({genebank})</a>;\n }\n }\n if (genebank === \"sorbmutdb\") {\n return (\n <form id={germplasm.pub_id} action={url} method=\"post\" target=\"_blank\">\n <input type=\"hidden\" name=\"search\" value={gene_id.replace('SORBI_3','Sobic.')} />\n <input type=\"hidden\" name=\"submit\" value=\"Search\" />\n <button type=\"submit\" className=\"button-like-link\">SorbMutDB</button>\n </form>\n );\n }\n if (germplasm.pop_id === '15' && germplasm.stock_center === 'NOT FOUND') {\n return <a target=\"_blank\" href={ggURL['maizeGDB']}>{germplasm.pub_id} (SNPVersity)</a>\n }\n return <span>{germplasm.pub_id}</span>\n}\nfunction compareGermplasm(a, b) {\n const aSub = a?.germplasm?.subpop ?? '';\n const bSub = b?.germplasm?.subpop ?? '';\n const subCmp = aSub.localeCompare(bSub, 'en', { sensitivity: 'accent' });\n if (subCmp !== 0) return subCmp;\n\n const aPub = a?.germplasm?.pub_id ?? '';\n const bPub = b?.germplasm?.pub_id ?? '';\n return aPub.localeCompare(bPub, 'en', { sensitivity: 'accent' });\n}\nfunction group_germplasm(gene, germplasmLUT, vep_obj) {\n let accessionTable = [];\n Object.entries(vep_obj).forEach(([key,accessions]) => {\n const parts = key.split(\"__\");\n if (parts[0] === \"VEP\") {\n if (parts[1] !== \"merged\") {\n accessions.filter(ens_id => germplasmLUT.hasOwnProperty(ens_id)).forEach(ens_id => {\n const germplasm = germplasmLUT[ens_id][0];\n const pop = study_info[parts[3]][parts[4]];\n const conseq = parts[1].replaceAll(\"_\",\" \");\n const status = parts[2] === \"het\" ? \"heterozygous\" : \"homozygous\";\n const accInfo = {\n key: [pop.label,conseq,status].join('%%%'),\n germplasm: germplasm,\n pop: pop\n };\n accessionTable.push(accInfo);\n });\n }\n }\n });\n // group accessionTable by key field\n const groups = _.groupBy(accessionTable, 'key');\n let grouped = [];\n let id=0;\n Object.keys(groups).sort().forEach((group) => {\n const [pop,conseq,status] = group.split('%%%');\n id++;\n const tally = groups[group].length;\n grouped.push({\n id: id,\n group: group,\n summary: true,\n pop: pop,\n conseq: conseq,\n status: status,\n tally: tally\n });\n groups[group].sort(compareGermplasm).forEach(acc => {\n id++;\n grouped.push({\n id: id,\n group: group,\n summary: false,\n pop:pop,\n conseq: conseq,\n status: status,\n accession: acc,\n tally: tally\n })\n })\n })\n return grouped;\n}\nconst THRESHOLD = 5;\nconst GridWithGroups = ({groups,gene_id,doGrin}) => {\n const [rowData, setRowData] = useState(groups);\n\n const initialExpanded = {};\n rowData.forEach((row) => {\n if (row.summary) {\n initialExpanded[row.group] = (row.tally < THRESHOLD);\n }\n });\n const [expandedGroups, setExpandedGroups] = useState(initialExpanded);\n\n\n // Toggle group visibility\n const toggleGroup = (group) => {\n setExpandedGroups((prevExpandedGroups) => ({\n ...prevExpandedGroups,\n [group]: !prevExpandedGroups[group], // Toggle the group's state\n }));\n };\n\n // Filter the data to show/hide rows based on the expanded group state\n const getVisibleRowData = () => {\n const visibleRows = [];\n rowData.forEach((row) => {\n if (row.summary) {\n if (row.tally > 1) {\n visibleRows.push(row);\n }\n } else if (expandedGroups[row.group]) {\n visibleRows.push(row); // Show non-summary rows if the group is expanded\n }\n });\n return visibleRows;\n };\n\n // Define columns with a custom renderer for the summary rows\n const columnDefs = [\n { field: 'pop', headerName: 'Study/Population', flex: 1, minWidth: 120,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'conseq', headerName: 'VEP consequence', flex: 1, minWidth: 130,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'status', headerName: 'Allele status', flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'accession', headerName: doGrin ? 'Order Germplasm' : 'Accession', flex: 1, minWidth: 140,\n headerComponent: (props) => {\n return (\n <div style={{display: 'flex', alignItems: 'center'}}>\n {doGrin && <i className=\"fas fa-shopping-cart\"> </i>}\n <span>{props.displayName}</span>\n </div>\n );\n }, // Use the custom header with the shopping cart icon\n cellRenderer: (params) => {\n if (params.value) {\n return <AccessionLink germplasm={params.value.germplasm} gene_id={gene_id} />;\n }\n if (params.data.summary) {\n return (\n <span\n onClick={() => toggleGroup(params.data.group)}\n >\n {params.data.tally} Accessions {expandedGroups[params.data.group] ? '▼' : '▶'}\n </span>\n );\n }\n return null;\n }\n },\n { field: 'synonym', headerName: 'Synonym', filter:false, sortable:false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession) {\n return params.data.accession.germplasm.ens_id\n }\n return null;\n }},\n { field: 'subpop', headerName: 'Subpopulation', filter:false, sortable: false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession && params.data.accession.germplasm.subpop && params.data.accession.germplasm.subpop !== \"?\") {\n return params.data.accession.germplasm.subpop\n }\n return null;\n }},\n { field: 'search', headerName: 'All LOF Genes', sortable:false, filter:false, flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.accession) {\n const currentURL = new URL(window.location.href);\n const accession = params.data.accession;\n currentURL.search = '';\n currentURL.searchParams.set('category', 'Germplasm');\n currentURL.searchParams.set('fq_field', `VEP__merged__${accession.pop.type}__attr_ss`);\n currentURL.searchParams.set('fq_value', accession.germplasm.ens_id);\n currentURL.searchParams.set('name', accession.germplasm.ens_id);\n\n return <Button size='sm' href={currentURL.toString()}>Search</Button>\n\n }\n return null;\n }\n }\n ];\n\n const defaultColDef = {\n sortable: true,\n filter: \"agTextColumnFilter\",\n cellStyle: (params) => {\n if (params.data.summary) {\n return {cursor: 'pointer'};\n }\n return null;\n }\n };\n\n const nVisible = getVisibleRowData().length;\n const tableHeight = 50 + Math.min(nVisible, 10) * 42;\n return (\n <div style={{ overflowX: \"auto\", width: \"100%\", maxWidth: \"1200px\" }}>\n <div\n className=\"ag-theme-quartz\"\n style={{ height: tableHeight, minWidth: \"810px\", width: \"100%\" }}\n >\n <AgGridReact\n rowData={getVisibleRowData()}\n columnDefs={columnDefs}\n getRowNodeId={(data) => data.id}\n animateRows={true}\n defaultColDef={defaultColDef}\n />\n </div>\n </div>\n );\n};\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n if (props.grameneConsequences && props.grameneConsequences[gene._id] && props.grameneGermplasm) {\n const groups = group_germplasm(gene, props.grameneGermplasm, props.grameneConsequences[gene._id]);\n\n return <div>\n <h5>Predicted loss-of-function alleles were detected in these germplasm.</h5>\n <div >Explore other variants within this gene in the <a target=\"_blank\"\n href={`${props.configuration.ensemblURL}/${gene.system_name}/Gene/Variation_Gene/Image?db=core;g=${props.searchResult.id}`}>\n Variant image</a> page in the Ensembl genome browser.</div>\n <GridWithGroups groups={...groups} gene_id={gene._id} doGrin={!props.configuration.hasOwnProperty('noGRIN')}/>\n </div>\n } else {\n props.doRequestVEP(gene._id);\n return <pre>loading</pre>;\n }\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneConsequences',\n 'selectGrameneGermplasm',\n 'doRequestVEP',\n Detail\n);\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n <td className=\"xref-name-col\">{db}</td>\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n </tr>\n );\n }\n}\n\nfunction formatXrefsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n return gene.xrefs\n .filter(xr => dbxrefs.isKnown(xr.db) && xr.db !== \"PUBMED\")\n .sort()\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\n\nconst Xrefs = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Cross-references</Title>\n <Description key=\"description\">References to this gene in other databases:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-name-col\">Database</th>\n <th className=\"xref-value-col\">IDs and links</th>\n </tr>\n </thead>\n <tbody>\n {formatXrefsForGene(geneDocs[searchResult.id])}\n </tbody>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Xrefs;\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n {/*<td className=\"xref-name-col\">{db}</td>*/}\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n <td className=\"xref-name-col\">{this.props.source}</td>\n <td className=\"xref-value-col\">{this.props.text}</td>\n </tr>\n );\n }\n}\n\nfunction formatPubsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n let pubs = gene.xrefs.filter(xr => xr.db === \"PUBMED\");\n if (pubs.length === 0) {\n return <tr><td colSpan={3}>No publications found.</td></tr>\n }\n return pubs.sort((a,b) => {\n if (a.source) {\n if (b.source) {\n if (a.source < b.source) {\n return -1;\n }\n if (a.source > b.source) {\n return 1;\n }\n }\n else {\n return -1;\n }\n }\n else if (b.source) {\n return 1;\n }\n if (a.db < b.db) {\n return -1;\n }\n if (a.db > b.db) {\n return 1;\n }\n return 0;\n })\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\nconst formURL = 'https://docs.google.com/forms/d/e/1FAIpQLSey-xPyTysdd9c2phXT6kcbjEDeCppG4dLG7LjZCeLpx_KGog/viewform?usp=pp_url&entry.1266455249=';\nconst Publications = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Curated publications</Title>\n <Description key=\"description\">Functions described in the literature:</Description>\n <Content key=\"content\">\n <table className=\"xrefs xrefs-pubs table\">\n <thead>\n <tr>\n <th className=\"xref-10-col\">PubMed link</th>\n <th className=\"xref-10-col\">Curation source</th>\n <th className=\"xref-80-col\">Title/Description</th>\n </tr>\n </thead>\n <tbody>\n {formatPubsForGene(geneDocs[searchResult.id])}\n </tbody>\n <tfoot>\n <tr>\n <th colSpan={3}>Submit a gene function <a target=\"_blank\" href={formURL + searchResult.id}>here</a></th>\n </tr>\n </tfoot>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Publications;\n\n","import React, { useState, useEffect } from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Container, Row, Col, ToggleButton, ButtonGroup } from 'react-bootstrap';\nimport { AiOutlineCopy } from 'react-icons/ai';\nimport './sequences.css';\nimport keyBy from \"lodash/keyBy\";\n\nconst CodeBlock = props => {\n const plainFasta = `>${props.id}\\n${props.seq}`\n\n const [showNotification, setShowNotification] = useState(false);\n\n const copyCode = () => {\n // Use the Clipboard API to write text to the clipboard\n navigator.clipboard.writeText(plainFasta)\n .then(() => {\n setShowNotification(true);\n })\n .catch((err) => {\n console.error('Unable to copy to clipboard', err);\n });\n };\n\n useEffect(() => {\n if (showNotification) {\n const notificationTimeout = setTimeout(() => {\n setShowNotification(false);\n }, 2000); // Hide the notification after 2 seconds\n\n return () => clearTimeout(notificationTimeout);\n }\n }, [showNotification]);\n\n return (\n <div className=\"fasta-container\">\n <code className=\"fasta\"><span className=\"header\">>{props.id}</span><br/>{\n props.blocks.map((block,idx) =>\n <span key={idx} className={block.kind}>{block.seq}</span>\n )\n }</code>\n <p className=\"fasta-key\">\n <b>Key:</b> 5'UTR \n <span className=\"square-utr5\"> </span>\n CDS \n <span className=\"square-cds\"> </span>\n 3'UTR \n <span className=\"square-utr3\"> </span>\n </p>\n <button className=\"copy-button\" onClick={copyCode}><AiOutlineCopy /></button>\n {showNotification && <div className=\"notification\">Sequence copied</div>}\n </div>\n );\n};\n\nconst decoratePeptide = (seq, transcript) => {\n let junctions = [];\n if (transcript.exon_junctions) {\n transcript.exon_junctions.forEach((ej, idx) => {\n if (ej > transcript.cds.start && ej <= transcript.cds.end) {\n junctions.push(Math.floor((ej - transcript.cds.start) / 3));\n }\n });\n }\n if (junctions.length === 0) {\n return [{kind:'cds', seq:seq}];\n }\n let offset = 0;\n let blocks = [];\n junctions.forEach((j, idx) => {\n let kind = idx % 2 === 0 ? \"cds\" : \"cds-other\";\n blocks.push({kind: kind, seq: seq.substring(offset, j)});\n offset = j;\n });\n blocks.push({kind: junctions.length % 2 === 0 ? \"cds\" : \"cds-other\", seq: seq.substring(junctions.pop())});\n return blocks;\n}\nconst decorateSeq = (geneSeq, gene, up, down, tid, mode) => {\n // return a list of blocks with kind and seq properties\n let blocks = [];\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n const offset = gene.location.strand === 1\n ? gene.location.start - geneSeq.start\n : geneSeq.end - gene.location.end\n if (up > 0) {\n const TSS = gene.gene_structure.exons.find(exon => exon.id === transcript.exons[0]).start;\n blocks.push({\n kind:'upstream',\n seq: geneSeq.seq.substring(offset - up + TSS - 1, offset + TSS - 1).toLowerCase()\n })\n }\n // add exons and introns based on tid\n let pos_in_transcript = 0;\n let pos_in_gene = 0;\n let blockType = 'utr5';\n let extra = '';\n transcript.exons.forEach((eid, e_idx) => {\n const exon = gene.gene_structure.exons.find(exon => exon.id === eid);\n if (e_idx > 0 && mode === \"dna\") {\n blocks.push({\n kind: 'intron',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + exon.start - 1).toLowerCase()\n });\n pos_in_gene = exon.start-1;\n }\n if (mode === \"rna\") {\n extra = e_idx % 2 === 1 ? '-other' : '';\n }\n let exon_length = exon.end - exon.start + 1;\n if (transcript.cds && pos_in_transcript < transcript.cds.start && pos_in_transcript + exon_length >= transcript.cds.start) {\n // CDS starts in this exon\n const utr5_len = transcript.cds.start - pos_in_transcript - 1;\n if (utr5_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + utr5_len)\n });\n exon_length -= utr5_len;\n pos_in_gene += utr5_len;\n pos_in_transcript = transcript.cds.start - 1;\n }\n blockType = 'cds';\n }\n if (blockType === 'cds' && pos_in_transcript + exon_length >= transcript.cds.end) {\n // CDS ends in this exon\n const cds_len = transcript.cds.end - pos_in_transcript;\n if (cds_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + cds_len)\n });\n exon_length -= cds_len;\n pos_in_gene += cds_len;\n pos_in_transcript = transcript.cds.end;\n }\n blockType = 'utr3';\n }\n if (exon_length > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + exon_length)\n })\n }\n pos_in_gene = exon.end;\n pos_in_transcript += exon_length;\n })\n // check if there's more to the gene locus after end of transcript?\n // downstream is currently relative to end of transcript but upstream is relative to first TSS\n if (down > 0) {\n blocks.push({\n kind:'downstream',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + down).toLowerCase()\n })\n }\n return blocks;\n};\nconst buildId = (gene, geneSeq, up, down) => {\n let gs = gene.location.strand === 1 ? gene.location.start - up : gene.location.start - down;\n let ge = gene.location.strand === 1 ? gene.location.end + down : gene.location.end + up;\n let extras = [];\n if (gene.location.strand === -1) {\n extras.push('reverse')\n }\n if (up > 0) {\n extras.push(`upstream=${up}`)\n }\n if (down > 0) {\n extras.push(`downstream=${down}`)\n }\n return `${geneSeq.genome}|${gene._id}|${gene.location.region}:${gs}..${ge} ${extras.join('|')}`\n};\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [tab, setTab] = useState('dna');\n const [upstream, setUpstream] = useState(0);\n const [downstream, setDownstream] = useState(0);\n const [tid, setTid] = useState(gene.gene_structure.canonical_transcript);\n let geneSeq;\n let rnaSeq;\n let pepSeq;\n if (props.geneSequences && props.geneSequences[gene._id]) {\n geneSeq = props.geneSequences[gene._id];\n }\n else {\n props.doRequestGeneSequence(gene)\n return <pre>loading</pre>;\n }\n if (props.rnaSequences && props.rnaSequences[tid]) {\n rnaSeq = props.rnaSequences[tid]\n }\n else {\n props.doRequestRnaSequence(tid, gene)\n return <pre>loading</pre>;\n }\n const maxUp = gene.location.strand === 1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const maxDown = gene.location.strand === -1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n let tl_id;\n if (transcript.translation) {\n tl_id = transcript.translation.id;\n if (props.pepSequences && props.pepSequences[tl_id]) {\n pepSeq = props.pepSequences[tl_id];\n }\n else {\n props.doRequestPepSequence(tl_id, gene);\n return <pre>loading</pre>;\n }\n }\n return <Tabs activeKey={tab}\n onSelect={(k) => setTab(k)}\n >\n <Tab tabClassName=\"dna\" eventKey=\"dna\" title=\"Genomic sequence\">\n <Container style={{ maxWidth: '100ch', marginLeft: 0}}>\n <Row>\n <Col><b><i>Show flanking sequence</i></b></Col>\n </Row>\n <div className=\"flanking-guide\">\n <span className=\"flanking-label-left\">Upstream</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-center-label\">Transcript (unspliced)</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-label-right\">Downstream</span>\n\n <span className=\"flanking-value-left\">{upstream}</span>\n <Form.Range\n className=\"reverse-slide\"\n style={{width: '60px'}}\n value={upstream}\n onChange={(e) => setUpstream(e.target.value)}\n min={0}\n max={maxUp}\n step={10}\n />\n <span/>\n <Form.Range\n style={{width: '60px'}}\n value={downstream}\n onChange={(e) => setDownstream(e.target.value)}\n min={0}\n max={maxDown}\n step={10}\n />\n <span className=\"flanking-value-right\">{downstream}</span>\n </div>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Highlight transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={buildId(gene,geneSeq,+upstream,+downstream)} seq={geneSeq.seq.substring(maxUp - +upstream, maxUp + gene.location.end - gene.location.start + 1 + +downstream)} blocks={decorateSeq(geneSeq,gene,+upstream,+downstream,tid,\"dna\")}/>}\n </Tab>\n <Tab tabClassName=\"rna\" eventKey=\"rna\" title=\"Transcript sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tid} seq={rnaSeq.seq} blocks={decorateSeq(geneSeq,gene,0,0,tid,\"rna\")}/>}\n </Tab>\n {gene.biotype === \"protein_coding\" &&\n <Tab tabClassName=\"pep\" eventKey=\"pep\" title=\"Peptide sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tl_id} seq={pepSeq.seq} blocks={decoratePeptide(pepSeq.seq,transcript)}/>}\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGeneSequences',\n 'selectRnaSequences',\n 'selectPepSequences',\n 'doRequestGeneSequence',\n 'doRequestRnaSequence',\n 'doRequestPepSequence',\n Detail\n);\n\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport Vis from \"gramene-search-vis\"\nimport Selection from './selection.js'\nimport '../../../node_modules/gramene-search-vis/styles/main.less';\n\nclass TaxDist extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapseEmpties: true,\n comparaOnly: true,\n showCompara: props.configuration.hasOwnProperty('partialCompara')\n };\n }\n handleSelection(selections) {\n this.setState({selections})\n }\n handleHighlight(highlight) {\n this.setState({highlight})\n }\n handleFilter() {\n this.setState({selections:null})\n }\n toggleEmpties() {\n this.setState({collapseEmpties: !this.state.collapseEmpties})\n }\n toggleCompara() {\n this.setState({comparaOnly: !this.state.comparaOnly})\n }\n render() {\n let selectedTaxa = {};\n if (this.props.grameneSearch) {\n if (this.state.collapseEmpties) {\n this.props.grameneSearch.facet_counts.facet_fields.taxon_id.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n selectedTaxa[tid] = true;\n })\n } else {\n if (Object.keys(this.props.grameneGenomes.active).length === 0 && this.props.grameneMaps) {\n Object.keys(this.props.grameneMaps).forEach(tid => selectedTaxa[tid] = true);\n } else {\n Object.keys(this.props.grameneGenomes.active).forEach(tid => selectedTaxa[tid]= true);\n }\n }\n if (this.state.showCompara && this.state.comparaOnly && this.props.grameneMaps) {\n Object.keys(selectedTaxa).forEach(tid => {\n if (!this.props.grameneMaps[tid].in_compara) {\n delete selectedTaxa[tid];\n }\n })\n }\n }\n return (\n <div className=\"results-vis big-vis\">\n {this.props.grameneTaxDist && <span>\n <button type=\"button\"\n className=\"btn btn-outline-primary btn-sm\"\n onClick={this.toggleEmpties.bind(this)}>\n {this.state.collapseEmpties ? 'Expand' : 'Collapse'} empty branches\n </button>\n {this.state.showCompara && <button type=\"button\"\n className=\"btn btn-outline-success btn-sm\"\n onClick={this.toggleCompara.bind(this)}>\n Show {this.state.comparaOnly ? 'all genomes' : 'only genomes in gene trees'}\n </button>\n }\n </span>}\n {this.props.grameneTaxDist && <Vis taxonomy={this.props.grameneTaxDist}\n selectedTaxa={selectedTaxa}\n onSelection={this.handleSelection.bind(this)}\n onHighlight={this.handleHighlight.bind(this)}\n />}\n {this.renderSelection()}\n </div>\n );\n }\n renderSelection() {\n if (this.state.selections && this.props.grameneTaxDist) {\n return <Selection taxonomy={this.props.grameneTaxDist}\n selectedTaxa={{}}\n selections={this.state.selections}\n onFilter={this.handleFilter.bind(this)}/>\n }\n }\n}\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneTaxDist',\n 'selectGrameneGenomes',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n TaxDist\n);\n","import React from 'react';\nimport numeral from 'numeral';\nimport _ from \"lodash\";\n\nimport {Table, Button, Badge} from 'react-bootstrap';\nimport {connect} from \"redux-bundler-react\";\n\nfunction selectionStats(selections, taxonomy) {\n const selectionData = getSelectionData(selections, taxonomy);\n const totalGeneResults = taxonomy.model.results.count;\n const fq = fqFromSelections(selections);\n\n return {\n selectedGenes: selectionData.resultsCount,\n totalGeneResults,\n fq,\n numSelectedBins: selectionData.binsCount,\n proportionGenesSelected: selectionData.resultsCount / totalGeneResults\n }\n}\n\nfunction getSelectionData(selection, taxonomy) {\n return _.reduce(selection, (countAcc, sel) => {\n const bins = taxonomy.getBins(sel.binFrom.idx, sel.binTo.idx);\n countAcc.binsCount += bins.length;\n countAcc.resultsCount += _.reduce(bins, (acc, bin) => acc + bin.results.count, 0);\n return countAcc;\n }, {resultsCount: 0, binsCount: 0});\n}\n\nconst selectionToSolrRange = (sel)=>`[${sel.binFrom.idx} TO ${sel.binTo.idx}]`;\n\nfunction fqFromSelections(selections) {\n const rangeStrings = selections.map(selectionToSolrRange);\n return `fixed_1000__bin:(${rangeStrings.join(' ')})`;\n}\n\nconst Selections = ({selections, taxonomy, doAcceptGrameneSuggestion, onFilter}) => {\n const stats = selectionStats(selections, taxonomy);\n\n const setFilter = () => {\n doAcceptGrameneSuggestion({\n category: 'Selections',\n fq_field: 'fixed_1000__bin',\n fq_value: `(${selections.map(selectionToSolrRange).join(' ')})`,\n name: `${selections.length} region${selections.length === 1 ? '':'s'}`\n });\n onFilter();\n };\n\n const formatProportion = (prop) => '(' + (_.isFinite(prop) ? numeral(prop).format('0.0%') : undefined) + ')';\n\n return (\n <div>\n <Table>\n <tbody>\n <tr>\n <th>Number of selected genes</th>\n <td>{stats.selectedGenes} {formatProportion(stats.proportionGenesSelected)}</td>\n <td><Button size='sm' onClick={setFilter}>selections |<Badge>{stats.selectedGenes}</Badge></Button>\n </td>\n </tr>\n </tbody>\n </Table>\n </div>\n )\n};\n\nexport default connect(\n 'doAcceptGrameneSuggestion',\n Selections\n);\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Alert, Container, Row, Card, CardGroup} from 'react-bootstrap'\nimport './genes.css'\n\nconst examples = [\n {\n subsite: {\n maize:1,\n sorghum:1,\n main:1,\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in Andropogoneae?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 147429,\n name: 'Andropogoneae',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n },\n {\n subsite: {\n grapevine:1\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in rosids?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 71275,\n name: 'rosids',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n }\n];\nconst HelpDemo = ({configuration,doReplaceGrameneFilters}) => (\n <Container fluid style={{padding: '40px'}}>\n <Row>\n <h3>Search Features</h3>\n </Row>\n <Row>\n <CardGroup style={{width:'80%'}}>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Suggestions</Card.Title>\n <Card.Text>Matching terms are provided as you type:</Card.Text>\n <div className='gene-search-pic-sugg'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Visualization</Card.Title>\n <Card.Text>See the distribution of results across all genomes:</Card.Text>\n <div className='gene-search-pic-results'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Gene tree view</Card.Title>\n <Card.Text>Explore evolutionary history of a gene family:</Card.Text>\n <div className='gene-search-pic-genetree'/>\n </Card.Body>\n </Card>\n </CardGroup>\n </Row>\n <Row>\n <h4>For Example</h4>\n </Row>\n <Row>\n <small>\n You can ask sophisticated questions about the genes:<br/>\n <ul>\n {examples.filter(e => !!e.subsite[configuration.id]).map((e,idx) => (\n <li key={idx}><a onClick={() => doReplaceGrameneFilters(e.filters)}>{e.text}</a></li>\n ))}\n </ul>\n </small>\n </Row>\n </Container>\n);\n\nexport default connect(\n 'selectConfiguration',\n 'doReplaceGrameneFilters',\n HelpDemo\n);\n\n","import { connect } from 'redux-bundler-react'\n\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport StatsByGroup from \"./StatsByGroup\";\n\n\nclass GeneAttribs extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n render() {\n if (this.props.grameneGeneAttribs && this.props.grameneSearch) {\n const groups = this.props.grameneGeneAttribs;\n const stats = this.props.grameneSearch.stats;\n return <StatsByGroup groups={groups} stats={stats} />;\n }\n return null;\n }\n}\n\nexport default connect(\n 'selectGrameneSearch',\n 'selectGrameneGeneAttribs',\n GeneAttribs\n);\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\n\n/**\n * StatsByGroup\n *\n * Props:\n * - groups: {\n * [groupName: string]: Array<{\n * name: string,\n * description: string,\n * dtype: \"i\" | \"f\",\n * fieldName: string\n * }>\n * }\n * - stats: {\n * stats_fields: {\n * [fieldName: string]: {\n * min?: number,\n * max?: number,\n * count?: number,\n * mean?: number,\n * stddev?: number,\n * percentiles?: (string | number)[] // [\"10.0\", v10, \"20.0\", v20, ...] (order preserved)\n * }\n * }\n * }\n *\n * Columns: attr, desc, mean, stddev, min, max, count, dist\n */\nexport default function StatsByGroup({ groups, stats }) {\n const fields = stats?.stats_fields || {};\n\n return (\n <div style={{ fontFamily: \"system-ui, -apple-system, Segoe UI, Roboto, sans-serif\", lineHeight: 1.35 }}>\n {Object.entries(groups).map(([groupName, attrs]) => (\n <GroupTable\n key={groupName}\n groupName={groupName}\n attributes={attrs}\n fields={fields}\n />\n ))}\n </div>\n );\n}\n\nfunction GroupTable({ groupName, attributes, fields }) {\n const hasAny = attributes?.some((a) => fields[a.fieldName]);\n\n const columns = useMemo(\n () => [\n { key: \"attr\", label: \"Attribute\", min: 120 },\n { key: \"desc\", label: \"Description\", min: 380, flex: true },\n { key: \"mean\", label: \"Mean\", min: 100 },\n { key: \"stddev\", label: \"Std Dev\", min: 110 },\n { key: \"min\", label: \"Min\", min: 90 },\n { key: \"max\", label: \"Max\", min: 90 },\n { key: \"count\", label: \"Count\", min: 90 },\n { key: \"dist\", label: \"Distribution\",min: 220 },\n ],\n []\n );\n\n const initial = useMemo(\n () => columns.map((c) => (c.flex ? Math.max(380, c.min) : c.min)),\n [columns]\n );\n\n const { colWidths, startResize, resizing } = useResizableColumns({\n initialWidths: initial,\n minWidths: columns.map((c) => c.min || 60),\n });\n\n const nfInt = useMemo(() => new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 0 }), []);\n const nfFloat = useMemo(\n () => new Intl.NumberFormat(\"en-US\", { minimumFractionDigits: 0, maximumFractionDigits: 3 }),\n []\n );\n\n return (\n <section style={{ marginBottom: 24 }}>\n <header style={{ display: \"flex\", alignItems: \"baseline\", gap: 12, marginBottom: 8 }}>\n <h2 style={{ margin: 0, fontSize: 18 }}>{groupName}</h2>\n {!hasAny && <span style={{ fontSize: 12, color: \"#666\" }}>No stats available for this group.</span>}\n </header>\n\n <div\n style={{\n overflowX: \"auto\",\n border: \"1px solid #eee\",\n borderRadius: 8,\n boxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\n }}\n >\n <table style={tableStyle}>\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n\n <thead>\n <tr>\n {columns.map((col, i) => (\n <ResizableTh\n key={col.key}\n label={col.label}\n index={i}\n onResizeStart={startResize}\n />\n ))}\n </tr>\n </thead>\n\n <tbody>\n {attributes.map((a) => {\n const s = fields[a.fieldName] || {};\n return (\n <tr key={a.fieldName}>\n <Td mono title={a.fieldName}>{a.name}</Td>\n <Td title={a.description}>{a.description}</Td>\n <Td align=\"right\">{fmtValue(s.mean, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.stddev, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.min, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.max, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtCount(s.count, nfInt)}</Td>\n <Td>\n <PercentileHeatmapNormalized\n percentilesArr={s.percentiles}\n min={s.min}\n max={s.max}\n />\n </Td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#666\" }}>\n <em>Tip:</em> Drag the divider at the right edge of any header to resize.\n {resizing && <span style={{ marginLeft: 8, color: \"#999\" }}>(resizing…)</span>}\n </div>\n </section>\n );\n}\n\n/* ===================== Percentiles / Heatmap ===================== */\n\n/**\n * Convert alternating array into ordered pairs: [[\"10.0\", v10], [\"20.0\", v20], ...]\n * - Preserves the exact order provided by Solr\n */\nfunction percentilesArrayToPairs(arr) {\n if (!Array.isArray(arr)) return [];\n const out = [];\n for (let i = 0; i < arr.length - 1; i += 2) {\n out.push([String(arr[i]), arr[i + 1]]);\n }\n return out;\n}\n\nfunction normalizeBetween(value, min, max) {\n if (!isFinite(min) || !isFinite(max) || max <= min || !isFinite(value)) return null;\n return (value - min) / (max - min);\n}\n\n// White -> Blue (0 -> 1)\nfunction rgbWhiteToBlue(vNorm) {\n const t = clamp01(vNorm);\n const rg = Math.round(255 * (1 - t));\n return `rgb(${rg}, ${rg}, 255)`;\n}\nfunction clamp01(x) {\n if (typeof x !== \"number\" || !isFinite(x)) return 0;\n return Math.max(0, Math.min(1, x));\n}\nfunction fmtFloat(v) {\n if (v == null || !isFinite(v)) return \"n/a\";\n return v.toFixed(3);\n}\n\n/**\n * PercentileHeatmapNormalized\n * - Infers bins from percentilesArr (order preserved)\n * - Colors normalized by row min/max\n */\nfunction PercentileHeatmapNormalized({ percentilesArr, min, max }) {\n const pairs = useMemo(() => percentilesArrayToPairs(percentilesArr), [percentilesArr]);\n const n = pairs.length || 1; // avoid zero columns\n const validScale = isFinite(min) && isFinite(max) && max > min;\n\n return (\n <div style={{ ...heatRowDynamic, gridTemplateColumns: `repeat(${n}, 1fr)` }}>\n {pairs.map(([pStr, raw], idx) => {\n const rawNum = typeof raw === \"number\" && isFinite(raw) ? raw : null;\n const norm = rawNum == null ? null : (validScale ? normalizeBetween(rawNum, min, max) : null);\n const bg = norm == null ? \"#f2f2f2\" : rgbWhiteToBlue(norm);\n const label = `${pStr} → raw ${fmtFloat(rawNum)} (norm ${fmtFloat(norm)})`;\n return <HeatCell key={`${pStr}-${idx}`} background={bg} label={label} />;\n })}\n </div>\n );\n}\n\nfunction HeatCell({ background, label }) {\n const [hover, setHover] = useState(false);\n return (\n <div\n style={{ ...heatCell, background }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n title={label}\n >\n {hover && <span style={popover}>{label}</span>}\n </div>\n );\n}\n\n/* ===================== Resizable columns ===================== */\n\nfunction useResizableColumns({ initialWidths, minWidths }) {\n const [colWidths, setColWidths] = useState(initialWidths);\n const [resizing, setResizing] = useState(false);\n const activeRef = useRef(null); // { index, startX, startW }\n\n useEffect(() => {\n if (initialWidths?.length) setColWidths(initialWidths);\n }, [initialWidths?.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onMouseMove = (e) => {\n if (!activeRef.current) return;\n const { index, startX, startW } = activeRef.current;\n const dx = e.clientX - startX;\n const next = [...colWidths];\n const minW = minWidths?.[index] ?? 60;\n next[index] = Math.max(minW, startW + dx);\n setColWidths(next);\n };\n\n const endResize = () => {\n activeRef.current = null;\n setResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n\n const startResize = (index, ev) => {\n const startX = ev.clientX;\n const startW = colWidths[index];\n activeRef.current = { index, startX, startW };\n setResizing(true);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", endResize);\n };\n\n useEffect(() => {\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return { colWidths, setColWidths, startResize, resizing };\n}\n\nfunction ResizableTh({ label, index, onResizeStart }) {\n return (\n <th style={thStyle}>\n <div style={{ position: \"relative\", width: \"100%\" }}>\n <span>{label}</span>\n <span\n onMouseDown={(e) => onResizeStart(index, e)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize column\"\n style={resizerStyle}\n />\n </div>\n </th>\n );\n}\n\n/* ===================== Formatting helpers ===================== */\n\nfunction fmtCount(v, nfInt) {\n if (v === null || v === undefined) return \"—\";\n return nfInt.format(v);\n}\n\nfunction fmtValue(v, dtype = \"f\", isStat = false, nfInt, nfFloat) {\n if (v === null || v === undefined || Number.isNaN(v)) return \"—\";\n const isIntType = dtype === \"i\";\n return isIntType && !isStat ? nfInt.format(v) : nfFloat.format(v);\n}\n\n/* ===================== Cells & Styles ===================== */\n\nfunction Td({ children, align = \"left\", mono = false, title }) {\n return (\n <td\n title={title}\n style={{\n ...cellBase,\n textAlign: align,\n borderBottom: \"1px solid #eee\",\n padding: \"8px 10px\",\n fontFamily: mono ? \"ui-monospace, SFMono-Regular, Menlo, monospace\" : undefined,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n verticalAlign: \"top\",\n }}\n >\n {children}\n </td>\n );\n}\n\nconst tableStyle = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n tableLayout: \"fixed\",\n minWidth: 980,\n};\n\nconst cellBase = {\n fontSize: 13,\n lineHeight: 1.35,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst thStyle = {\n ...cellBase,\n textAlign: \"left\",\n borderBottom: \"1px solid #ddd\",\n background: \"#fafafa\",\n fontWeight: 600,\n padding: \"10px 10px\",\n position: \"relative\",\n};\n\nconst resizerStyle = {\n position: \"absolute\",\n right: -5,\n top: 0,\n height: \"100%\",\n width: 10,\n cursor: \"col-resize\",\n boxShadow: \"inset -1px 0 0 rgba(0,0,0,0.08)\",\n};\n\nconst heatRowDynamic = {\n display: \"grid\",\n gap: 2,\n alignItems: \"center\",\n width: \"100%\",\n minWidth: 200,\n};\n\nconst heatCell = {\n height: 16,\n borderRadius: 3,\n position: \"relative\",\n boxShadow: \"inset 0 0 0 1px rgba(0,0,0,0.06)\",\n};\n\nconst popover = {\n position: \"absolute\",\n left: \"50%\",\n top: -26,\n transform: \"translateX(-50%)\",\n padding: \"2px 6px\",\n fontSize: 11,\n background: \"rgba(0,0,0,0.8)\",\n color: \"#fff\",\n borderRadius: 4,\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n};\n","import React from \"react\";\nimport { connect } from 'redux-bundler-react'\nimport { Modal, Button } from \"react-bootstrap\";\nimport { BsChevronDown, BsChevronRight } from \"react-icons/bs\";\n\n// name → subtle background colour. Checked against node.name at render time.\nconst CLADE_COLORS = {\n \"Chlorophyta\": \"#e8f5e9\",\n \"Bryophyta\": \"#f1f8e9\",\n \"Liliopsida\": \"#fff8e1\", // monocots\n \"eudicotyledons\": \"#fce4ec\",\n \"Poaceae\": \"#fff3e0\",\n \"Fabaceae\": \"#ede7f6\",\n \"Brassicaceae\": \"#e1f5fe\",\n \"Solanaceae\": \"#ffebee\",\n};\n\nfunction findRoots(tax) {\n return Object.values(tax).filter(n =>\n !n.is_a || n.is_a.length === 0 || !n.is_a.some(p => tax[p])\n );\n}\n\n// Post-order: attach .leafIds (taxon_ids of maps in subtree) and .isLeaf\nfunction annotate(node, tax, maps) {\n const leafIds = [];\n if (maps[node._id]) { node.isLeaf = true; leafIds.push(node._id); }\n (node.children || []).forEach(cid => {\n const child = tax[cid];\n if (!child) return;\n annotate(child, tax, maps);\n child.leafIds.forEach(id => leafIds.push(id));\n });\n node.leafIds = leafIds;\n}\n\n// Walk down the spine through single-child internals until a branch point,\n// leaf, or node that is itself a genome.\nfunction compressChain(node, tax, maps) {\n const chain = [node];\n let cur = node;\n while (true) {\n const kids = (cur.children || [])\n .map(cid => tax[cid])\n .filter(c => c && c.leafIds && c.leafIds.length > 0);\n if (kids.length !== 1) break;\n if (maps[cur._id]) break;\n cur = kids[0];\n chain.push(cur);\n }\n return { chain, terminal: cur };\n}\n\n// Render a breadcrumb chain. If the chain has more than 3 nodes, collapse the\n// middle into a hoverable ellipsis that reveals the hidden names on hover.\nconst CHAIN_DISPLAY_MAX = 3;\nfunction renderChain(chain) {\n const nameOf = n => n.short_name || n.name;\n if (chain.length <= CHAIN_DISPLAY_MAX) {\n return chain.map((n, i) => (\n <React.Fragment key={n._id}>\n {i > 0 && <span className=\"tax-sep\"> › </span>}\n {nameOf(n)}\n </React.Fragment>\n ));\n }\n const first = chain[0];\n const last = chain[chain.length - 1];\n const middle = chain.slice(1, -1);\n const fullTitle = chain.map(nameOf).join(' › ');\n return (\n <>\n {nameOf(first)}\n <span className=\"tax-sep\"> › </span>\n <span className=\"tax-ellipsis\" title={fullTitle}>\n <span className=\"tax-ellipsis-short\">…</span>\n <span className=\"tax-ellipsis-full\">\n {middle.map(n => (\n <React.Fragment key={n._id}>\n {nameOf(n)}\n <span className=\"tax-sep\"> › </span>\n </React.Fragment>\n ))}\n </span>\n </span>\n <span className=\"tax-sep\"> › </span>\n {nameOf(last)}\n </>\n );\n}\n\n// Drop a parent when its single child has the same name (e.g. species node\n// above a subspecies-less record that repeats the species name). The terminal\n// (last element) is always preserved; only redundant ancestors are removed.\nfunction dedupAdjacent(chain) {\n const out = [];\n for (const n of chain) {\n if (out.length && out[out.length - 1].name === n.name) {\n out[out.length - 1] = n; // keep the child, drop the parent\n } else {\n out.push(n);\n }\n }\n return out;\n}\n\n// Use the node's direct `rank` field when it carries a real value.\nfunction getRank(node) {\n const r = node && node.rank;\n return r && r !== 'no rank' ? r : null;\n}\n\n// Search nodes whose name or a synonym contains the query. Prefix matches rank higher.\nfunction searchTaxonomy(query, tax) {\n const q = query.trim().toLowerCase();\n if (!q) return [];\n const out = [];\n Object.values(tax).forEach(n => {\n const name = n.name || '';\n const nameLc = name.toLowerCase();\n if (nameLc.includes(q)) {\n out.push({ node: n, matched: name, via: 'name', prefix: nameLc.startsWith(q) });\n return;\n }\n const syns = n.synonym || [];\n for (const s of syns) {\n const sLc = s.toLowerCase();\n if (sLc.includes(q)) {\n out.push({ node: n, matched: s, via: 'synonym', prefix: sLc.startsWith(q) });\n return;\n }\n }\n });\n out.sort((a, b) =>\n (a.prefix === b.prefix ? 0 : a.prefix ? -1 : 1)\n || a.node.name.localeCompare(b.node.name)\n );\n return out.slice(0, 20);\n}\n\n// Compute the { selected, expanded } pair for a fresh modal opening:\n// selection is seeded from active genomes (or everything non-hidden),\n// and every ancestor of a selected genome is pre-expanded so the user sees\n// all of their current selections without manually drilling in.\nfunction computeOpenState(props) {\n const { grameneMaps, grameneTaxonomy, grameneGenomes } = props;\n const activeKeys = Object.keys(grameneGenomes.active || {});\n const seedAll = activeKeys.length === 0;\n const selected = new Set();\n Object.values(grameneMaps || {}).forEach(m => {\n if (m.hidden) return;\n if (seedAll || grameneGenomes.active[m.taxon_id]) selected.add(m.taxon_id);\n });\n const expanded = new Set();\n if (grameneTaxonomy) {\n selected.forEach(tid => {\n let cur = grameneTaxonomy[tid];\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n });\n }\n return { selected, expanded };\n}\n\nclass TaxonomyModal extends React.Component {\n constructor(props) {\n super(props);\n const { grameneMaps, grameneTaxonomy } = props;\n\n let roots = [];\n if (grameneTaxonomy) {\n roots = findRoots(grameneTaxonomy);\n roots.forEach(r => annotate(r, grameneTaxonomy, grameneMaps));\n }\n\n const { selected, expanded } = computeOpenState(props);\n this.state = {\n selected,\n expanded,\n roots,\n query: '',\n highlightId: null,\n activeIdx: 0,\n };\n this.rowRefs = {};\n this._matches = [];\n this._activeHitEl = null;\n }\n\n handleQueryChange(e) {\n this.setState({ query: e.target.value, activeIdx: 0 });\n }\n\n handleSearchKeyDown(e) {\n const n = this._matches.length;\n if (e.key === 'ArrowDown') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.min(this.state.activeIdx + 1, n - 1) });\n } else if (e.key === 'ArrowUp') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.max(this.state.activeIdx - 1, 0) });\n } else if (e.key === 'Enter') {\n if (n === 0) return;\n e.preventDefault();\n const hit = this._matches[this.state.activeIdx] || this._matches[0];\n if (hit) this.pickMatch(hit.node);\n } else if (e.key === 'Escape') {\n if (this.state.query) {\n e.preventDefault();\n this.setState({ query: '', activeIdx: 0 });\n }\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // On each hidden→shown transition, reseed selection from current active\n // genomes and expand every ancestor so selected taxa are visible.\n const wasShown = prevProps.grameneGenomes && prevProps.grameneGenomes.show;\n const isShown = this.props.grameneGenomes && this.props.grameneGenomes.show;\n if (!wasShown && isShown) {\n const { selected, expanded } = computeOpenState(this.props);\n this.setState({ selected, expanded, query: '', activeIdx: 0, highlightId: null });\n }\n // Keep the highlighted hit scrolled into view inside the dropdown.\n if (prevState.activeIdx !== this.state.activeIdx && this._activeHitEl) {\n this._activeHitEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n pickMatch(node) {\n // Expand every ancestor so the node is visible, then scroll + flash.\n const { grameneTaxonomy } = this.props;\n const expanded = new Set(this.state.expanded);\n let cur = node;\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n this.setState({ expanded, query: '', highlightId: node._id }, () => {\n const el = this.rowRefs[node._id];\n if (el && el.scrollIntoView) el.scrollIntoView({ block: 'center', behavior: 'smooth' });\n clearTimeout(this._hlTimer);\n this._hlTimer = setTimeout(() => this.setState({ highlightId: null }), 1800);\n });\n }\n\n toggleExpand(id) {\n const expanded = new Set(this.state.expanded);\n expanded.has(id) ? expanded.delete(id) : expanded.add(id);\n this.setState({ expanded });\n }\n\n toggleLeaf(taxonId) {\n const selected = new Set(this.state.selected);\n selected.has(taxonId) ? selected.delete(taxonId) : selected.add(taxonId);\n this.setState({ selected });\n }\n\n toggleSubtree(terminal) {\n const selected = new Set(this.state.selected);\n const allOn = terminal.leafIds.every(id => selected.has(id));\n terminal.leafIds.forEach(id => allOn ? selected.delete(id) : selected.add(id));\n this.setState({ selected });\n }\n\n selectAll() {\n const s = new Set();\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) s.add(m.taxon_id);\n });\n this.setState({ selected: s });\n }\n\n selectNone() {\n this.setState({ selected: new Set() });\n }\n\n handleClose() {\n const active = {};\n this.state.selected.forEach(id => { active[id] = true; });\n if (Object.keys(active).length === 0) {\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) active[m.taxon_id] = true;\n });\n }\n this.props.doUpdateGrameneGenomes(active);\n }\n\n renderNode(node, depth, inheritedColor) {\n const { grameneTaxonomy, grameneMaps } = this.props;\n const { selected, expanded } = this.state;\n\n const { chain: rawChain, terminal } = compressChain(node, grameneTaxonomy, grameneMaps);\n const chain = dedupAdjacent(rawChain);\n const leafIds = terminal.leafIds;\n if (leafIds.length === 0) return null;\n\n const selCount = leafIds.reduce((n, id) => n + (selected.has(id) ? 1 : 0), 0);\n const total = leafIds.length;\n const allOn = selCount === total;\n const someOn = selCount > 0 && !allOn;\n\n const visibleKids = (terminal.children || [])\n .map(cid => grameneTaxonomy[cid])\n .filter(c => c && c.leafIds.length > 0);\n const hasKids = visibleKids.length > 0;\n const terminalIsGenome = !!grameneMaps[terminal._id];\n\n const isOpen = expanded.has(terminal._id);\n\n // Deepest clade colour in the chain wins; falls back to inherited.\n const color = chain.reduce(\n (acc, n) => CLADE_COLORS[n.name] || acc,\n inheritedColor\n );\n\n const isHighlighted = rawChain.some(n => n._id === this.state.highlightId);\n\n return (\n <div\n key={terminal._id}\n className={\"tax-node\" + (isHighlighted ? \" tax-node-highlight\" : \"\")}\n style={{ background: color }}\n ref={el => {\n // Register every traversed node (including dedupped-away parents) so\n // search results targeting any ancestor still scroll to this row.\n rawChain.forEach(n => { this.rowRefs[n._id] = el; });\n }}\n >\n <div className=\"tax-row\" style={{ paddingLeft: depth * 7 }}>\n {hasKids ? (\n <span\n className=\"tax-chevron\"\n onClick={() => this.toggleExpand(terminal._id)}\n >\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n ) : (\n <span className=\"tax-chevron-spacer\"/>\n )}\n\n <input\n type=\"checkbox\"\n checked={allOn}\n ref={el => { if (el) el.indeterminate = someOn; }}\n onChange={() => {\n if (hasKids) this.toggleSubtree(terminal);\n else if (terminalIsGenome) this.toggleLeaf(terminal._id);\n }}\n />\n {' '}\n <span className={hasKids ? \"tax-label tax-label-internal\" : \"tax-label\"}>\n {renderChain(chain)}\n </span>\n\n {(hasKids || terminalIsGenome) && (\n <span className=\"tax-count\"> ({selCount} / {total})</span>\n )}\n\n {hasKids && terminalIsGenome && (\n <label className=\"tax-self-leaf\">\n <input\n type=\"checkbox\"\n checked={selected.has(terminal._id)}\n onChange={() => this.toggleLeaf(terminal._id)}\n />\n <em>this genome</em>\n </label>\n )}\n </div>\n\n {hasKids && isOpen && (\n <div className=\"tax-children\">\n {visibleKids.map(c => this.renderNode(c, depth + 1, color))}\n </div>\n )}\n </div>\n );\n }\n\n render() {\n const { roots } = this.state;\n const { grameneTaxonomy, grameneMaps } = this.props;\n\n // Hide the root spine: start rendering at the first real branch point.\n const topLevel = [];\n roots.forEach(r => {\n const { terminal } = compressChain(r, grameneTaxonomy || {}, grameneMaps || {});\n (terminal.children || []).forEach(cid => {\n const child = grameneTaxonomy && grameneTaxonomy[cid];\n if (child && child.leafIds && child.leafIds.length > 0) {\n topLevel.push(child);\n }\n });\n });\n\n return (\n <Modal\n show={this.props.grameneGenomes.show}\n onHide={this.handleClose.bind(this)}\n size='lg'\n >\n <Modal.Header closeButton>\n <Modal.Title>Select Genomes of Interest</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Button variant=\"outline-secondary\" onClick={this.selectAll.bind(this)}>All</Button>{' '}\n <Button variant=\"outline-secondary\" onClick={this.selectNone.bind(this)}>None</Button>\n\n {(() => {\n this._matches = this.state.query\n ? searchTaxonomy(this.state.query, grameneTaxonomy || {})\n : [];\n const matches = this._matches;\n const activeIdx = Math.min(this.state.activeIdx, Math.max(0, matches.length - 1));\n return (\n <div className=\"tax-search\">\n <input\n type=\"text\"\n className=\"tax-search-input\"\n placeholder=\"Find taxon by name or synonym…\"\n value={this.state.query}\n onChange={this.handleQueryChange.bind(this)}\n onKeyDown={this.handleSearchKeyDown.bind(this)}\n />\n {this.state.query && (\n <div className=\"tax-search-results\">\n {matches.length === 0 ? (\n <div className=\"tax-search-empty\">No matches</div>\n ) : matches.map(({ node, matched, via }, i) => {\n const rank = getRank(node);\n const count = (node.leafIds && node.leafIds.length) || 0;\n const isLeaf = !!(grameneMaps && grameneMaps[node._id]);\n const isActive = i === activeIdx;\n return (\n <div\n key={node._id}\n ref={el => { if (isActive) this._activeHitEl = el; }}\n className={\"tax-search-hit\" + (isActive ? \" tax-search-hit-active\" : \"\")}\n onMouseDown={e => e.preventDefault()}\n onMouseEnter={() => this.setState({ activeIdx: i })}\n onClick={() => this.pickMatch(node)}\n >\n <span className=\"tax-search-name\">{node.name}</span>\n {via === 'synonym' && (\n <span className=\"tax-search-syn\"> {matched} <em>syn.</em></span>\n )}\n {rank && <span className=\"tax-search-rank\"> {rank}</span>}\n {!isLeaf && (\n <span className=\"tax-search-count\"> · {count} genome{count === 1 ? '' : 's'}</span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n })()}\n\n <div className=\"tax-tree\">\n {topLevel.map(n => this.renderNode(n, 0, null))}\n </div>\n <Button onClick={this.handleClose.bind(this)}>Submit</Button>\n </Modal.Body>\n </Modal>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'selectGrameneTaxonomy',\n 'doUpdateGrameneGenomes',\n TaxonomyModal\n)\n","import React, { useState, Suspense } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { Accordion, Button } from 'react-bootstrap';\nimport \"./expression.css\";\nimport Study from './Study';\nconst LazyStudy = React.lazy(() => import('./Study'));\n\nconst StudyList = props => {\n return <Accordion alwaysOpen defaultActiveKey={props.studies.length === 1 ? \"study_0\" : undefined}>\n {props.studies.map((study, idx) => {\n return (\n <Accordion.Item key={idx} eventKey={'study_'+idx}>\n <Accordion.Header>{study.description}</Accordion.Header>\n <Accordion.Body>\n {/*<Suspense fallback={<div>Loading...</div>}>*/}\n {/* <LazyStudy id={study._id}/>*/}\n {/*</Suspense>*/}\n <Study id={study._id}/>\n </Accordion.Body>\n </Accordion.Item>\n )\n })}\n </Accordion>\n};\n\nconst Expression = props => {\n let searchTaxa = {};\n if (props.grameneSearch) {\n const taxon_id_facet = props.grameneSearch.facet_counts.facet_fields.taxon_id;\n taxon_id_facet.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n if (tid > 1000000) {\n const tid2 = Math.floor(tid / 1000);\n if (props.expressionStudies[tid2]) {\n searchTaxa[tid2] = tid;\n }\n }\n else {\n searchTaxa[tid] = tid;\n }\n });\n }\n const availableTaxa = Object.keys(props.expressionStudies)\n .filter(tid => searchTaxa[tid])\n .sort((a,b) => props.grameneMaps[searchTaxa[a]].left_index - props.grameneMaps[searchTaxa[b]].left_index);\n return availableTaxa && props.grameneTaxonomy &&\n <div>\n <div>This is where you can launch a component for the selected samples. props.desiredSamples lists them.\n This component can request the data from the API\n organize samples by factor metadata? One big table with all the studies?\n <Button\n onClick={console.log(Object.keys(props.desiredSamples))}\n >Show Samples ({Object.keys(props.desiredSamples).length} selected)</Button>\n </div>\n <Accordion alwaysOpen defaultActiveKey={availableTaxa.length === 1 ? \"tax_0\" : undefined}>\n {availableTaxa.map((tid, idx) => {\n const baselineStudies = props.expressionStudies[tid].filter(study => study.type === 'Baseline');\n const n = baselineStudies.length;\n return <Accordion.Item key={idx} eventKey={'tax_'+idx}>\n <Accordion.Header>{props.grameneTaxonomy[tid].name} - {n} {n === 1 ? 'study' : 'studies'}</Accordion.Header>\n <Accordion.Body><StudyList studies={baselineStudies}/></Accordion.Body>\n </Accordion.Item>\n })}\n </Accordion>\n </div>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n Expression\n);\n","import {connect} from \"redux-bundler-react\";\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {Table, Form, Button, Alert, Spinner, Container, Row, Col, Modal} from 'react-bootstrap';\nimport { getFirebaseApp } from \"../utils\";\nimport {getAuth, onAuthStateChanged} from \"firebase/auth\";\n\nconst MAX_GENE_IDS = 1000; // Define the maximum number of gene IDs allowed\n\nconst formatCreatedAt = (value) => {\n if (!value) return '';\n const d = new Date(value);\n if (isNaN(d.getTime())) return '';\n return d.toLocaleDateString();\n};\n\nconst applySortFilter = (lists, search, sort) => {\n const s = search.trim().toLowerCase();\n let result = s\n ? lists.filter(l => (l.label || '').toLowerCase().includes(s))\n : lists.slice();\n const { key, dir } = sort;\n const mult = dir === 'asc' ? 1 : -1;\n result.sort((a, b) => {\n let av = a[key], bv = b[key];\n if (key === 'createdAt') {\n av = av ? new Date(av).getTime() : 0;\n bv = bv ? new Date(bv).getTime() : 0;\n } else if (key === 'n_genes') {\n av = av || 0;\n bv = bv || 0;\n } else {\n av = (av || '').toString().toLowerCase();\n bv = (bv || '').toString().toLowerCase();\n }\n if (av < bv) return -1 * mult;\n if (av > bv) return 1 * mult;\n return 0;\n });\n return result;\n};\n\nconst SortHeader = ({ label, sortKey, sort, onToggle }) => {\n const active = sort.key === sortKey;\n const indicator = active ? (sort.dir === 'asc' ? ' ▲' : ' ▼') : '';\n return (\n <th\n style={{ cursor: 'pointer', userSelect: 'none', position: 'sticky', top: 0, background: '#fff', zIndex: 1 }}\n onClick={() => onToggle(sortKey)}\n >\n {label}{indicator}\n </th>\n );\n};\n\nconst stickyHeaderStyle = { position: 'sticky', top: 0, background: '#fff', zIndex: 1 };\n\nconst GeneListDisplayComponent = props => {\n const [publicGeneLists, setPublicGeneLists] = useState([]);\n const [privateGeneLists, setPrivateGeneLists] = useState([]);\n const [error, setError] = useState(null);\n const [notice, setNotice] = useState(null);\n const [user, setUser] = useState({});\n const [editingId, setEditingId] = useState(null);\n const [editLabel, setEditLabel] = useState('');\n const [editIsPublic, setEditIsPublic] = useState(false);\n const [deleteTarget, setDeleteTarget] = useState(null);\n const [search, setSearch] = useState('');\n const [sort, setSort] = useState({ key: 'createdAt', dir: 'desc' });\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n const toggleSort = (key) => setSort(s =>\n s.key === key ? { key, dir: s.dir === 'asc' ? 'desc' : 'asc' } : { key, dir: 'asc' }\n );\n\n const currentUid = user && user.uid;\n const mergedLists = useMemo(() => {\n const byId = new Map();\n [...publicGeneLists, ...privateGeneLists].forEach(l => byId.set(l._id, l));\n return Array.from(byId.values());\n }, [publicGeneLists, privateGeneLists]);\n\n const displayedLists = useMemo(\n () => applySortFilter(mergedLists, search, sort),\n [mergedLists, search, sort]\n );\n\n const fetchPrivateGeneLists = async () => {\n if (!auth) {\n setPrivateGeneLists([]);\n setError(null);\n setNotice(null);\n return;\n }\n if (!user || typeof user.getIdToken !== 'function') {\n setPrivateGeneLists([]);\n setError(null);\n setNotice('Log in to create and manage your personal gene lists.');\n return;\n }\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=false`, {\n method: 'GET',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n const result = await response.json();\n\n if (response.ok) {\n setError(null);\n setNotice(null);\n setPrivateGeneLists(result);\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch private gene lists. Please try again later.');\n }\n };\n // Fetch saved gene lists from a backend or local storage\n const fetchPublicGeneLists = async () => {\n try {\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=true`);\n const result = await response.json();\n\n if (response.ok) {\n setPublicGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch gene lists. Please try again later.');\n }\n };\n\n // Example functions for viewing and deleting lists\n const viewGeneList = (list) => {\n props.addFilter({\n category: 'Gene List',\n fq_field: 'saved_search',\n fq_value: list.hash,\n name: list.label\n })\n };\n\n const startEdit = (list) => {\n setEditingId(list._id);\n setEditLabel(list.label || '');\n setEditIsPublic(!!list.isPublic);\n };\n\n const cancelEdit = () => {\n setEditingId(null);\n setEditLabel('');\n setEditIsPublic(false);\n };\n\n const saveEdit = async (listId) => {\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'PATCH',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n },\n body: JSON.stringify({ label: editLabel, isPublic: editIsPublic })\n });\n if (response.ok) {\n cancelEdit();\n setError(null);\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n setError('You must be signed in to edit a gene list.');\n } else if (response.status === 404) {\n setError('Gene list not found or you do not own it.');\n } else if (response.status === 400) {\n setError('Nothing to update — please enter a label.');\n } else {\n setError('Failed to update gene list.');\n }\n } catch (err) {\n setError('Failed to update gene list.');\n }\n };\n\n const requestDelete = (list) => setDeleteTarget(list);\n const cancelDelete = () => setDeleteTarget(null);\n\n const confirmDelete = async () => {\n if (!deleteTarget) return;\n const listId = deleteTarget._id;\n setDeleteTarget(null);\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'DELETE',\n headers: { \"Authorization\": `Bearer ${token}` }\n });\n if (response.ok) {\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n alert('You must be signed in to delete a gene list.');\n } else if (response.status === 404) {\n alert('Gene list not found or you do not own it.');\n } else {\n alert('Failed to delete gene list.');\n }\n } catch (err) {\n alert('Failed to delete gene list.');\n }\n };\n\n // Fetch data when the component is mounted or after a save\n useEffect(() => {\n fetchPublicGeneLists();\n }, [props.refreshKey]);\n useEffect(() => {\n fetchPrivateGeneLists();\n }, [user, props.refreshKey]);\n\n return (\n <div className=\"gene-list-display-component\">\n {error && (\n <Alert variant=\"danger\">\n {error}\n </Alert>\n )}\n\n {notice && (\n <Alert variant=\"info\">\n {notice}\n </Alert>\n )}\n\n {mergedLists.length > 0 ? (\n <div className=\"mt-4\">\n <div className=\"d-flex justify-content-end mb-2\">\n <Form.Control\n type=\"search\"\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{ maxWidth: 220 }}\n size=\"sm\"\n />\n </div>\n <div style={{ maxHeight: 500, overflowY: 'auto', border: '1px solid #dee2e6', borderRadius: 4 }}>\n <Table striped hover className=\"mb-0\">\n <thead>\n <tr>\n <SortHeader label=\"List Name\" sortKey=\"label\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Owner\" sortKey=\"owner\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Genes\" sortKey=\"n_genes\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Created\" sortKey=\"createdAt\" sort={sort} onToggle={toggleSort} />\n <th style={stickyHeaderStyle}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {displayedLists.map((list, index) => {\n const isMine = currentUid && list.uid === currentUid;\n const ownerLabel = isMine ? 'You' : (list.owner || 'Unknown');\n return editingId === list._id ? (\n <tr key={index}>\n <td>\n <Form.Control\n type=\"text\"\n value={editLabel}\n onChange={(e) => setEditLabel(e.target.value)}\n placeholder=\"List name\"\n />\n <Form.Check\n type=\"switch\"\n id={`edit-public-${list._id}`}\n label=\"Public\"\n checked={editIsPublic}\n onChange={() => setEditIsPublic(!editIsPublic)}\n className=\"mt-2\"\n />\n </td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"primary\" size=\"sm\" onClick={() => saveEdit(list._id)}>\n Save\n </Button>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={cancelEdit} className=\"ml-2\">\n Cancel\n </Button>\n </td>\n </tr>\n ) : (\n <tr key={index}>\n <td>{list.label}{list.isPublic ? ' (public)' : ''}</td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n {isMine && (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => startEdit(list)} className=\"ml-2\">\n Edit\n </Button>\n )}\n {isMine && (\n <Button variant=\"outline-danger\" size=\"sm\" onClick={() => requestDelete(list)} className=\"ml-2\">\n Delete\n </Button>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n </div>\n </div>\n ) : (\n <Alert variant=\"warning\" className=\"mt-4\">\n No saved gene lists found.\n </Alert>\n )}\n\n <Modal show={!!deleteTarget} onHide={cancelDelete} centered>\n <Modal.Header closeButton>\n <Modal.Title>Delete gene list?</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n Are you sure you want to delete\n {deleteTarget ? <> <strong>{deleteTarget.label}</strong></> : ' this gene list'}?\n This action cannot be undone.\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={cancelDelete} autoFocus>\n Cancel\n </Button>\n <Button variant=\"danger\" onClick={confirmDelete}>\n Delete\n </Button>\n </Modal.Footer>\n </Modal>\n </div>\n );\n};\n\nconst GeneListComponent = props => {\n const [geneList, setGeneList] = useState('');\n const [listHash, setListHash] = useState(null);\n const [validationError, setValidationError] = useState([]);\n const [listName, setListName] = useState('');\n const [listIsPublic, setListIsPublic] = useState(false);\n const [validatedList, setValidatedList] = useState([]);\n const [errorMessage, setErrorMessage] = useState('');\n const [loading, setLoading] = useState(false); // New loading state\n const [user, setUser] = useState({});\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n // Function to handle gene list input\n const handleGeneListChange = (event) => {\n setGeneList(event.target.value);\n };\n\n // Function to handle drag and drop of gene list\n const handleDrop = (event) => {\n event.preventDefault();\n const geneData = event.dataTransfer.getData('text');\n setGeneList(geneData);\n };\n\n // Function to handle drag over (needed for drop)\n const handleDragOver = (event) => {\n event.preventDefault();\n };\n\n // Function to submit gene list for validation\n const handleSubmit = async () => {\n const geneArray = geneList.split('\\n').filter(Boolean); // Convert the gene list into an array and filter out empty values\n\n if (geneArray.length > MAX_GENE_IDS) {\n setErrorMessage(`You have exceeded the maximum limit of ${MAX_GENE_IDS} gene IDs.`);\n return;\n }\n\n setErrorMessage(''); // Reset error message if validation passes\n setLoading(true); // Set loading state to true to show progress\n\n try {\n const response = await fetch(`${props.api}/gene_lists/validate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(geneArray),\n });\n\n const result = await response.json();\n\n if (result.hash) {\n setListHash(result.hash);\n setValidatedList(result.ids);\n setValidationError(result.missing);\n } else {\n // Handle errors from validation\n alert('Error during validation.');\n }\n } catch (error) {\n alert('There was an error with the validation service.',error);\n } finally {\n setLoading(false); // Set loading to false when the request is complete\n }\n };\n\n // Function to save the validated gene list\n const handleSaveList = async () => {\n const queryParams = {\n label: listName,\n hash: listHash,\n site: props.site,\n n_genes: validatedList.length,\n isPublic: listIsPublic\n };\n const queryString = new URLSearchParams(queryParams).toString();\n\n const token = await user.getIdToken();\n try {\n const response = await fetch(`${props.api}/gene_lists?${queryString}`, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n if (!response.ok) {\n throw new Error('Failed to save list');\n }\n const result = await response.json();\n console.log(result);\n setGeneList('');\n setListHash(null);\n setValidatedList([]);\n setValidationError([]);\n setListName('');\n setListIsPublic(false);\n if (props.onListSaved) props.onListSaved();\n\n } catch (error) {\n console.error(\"There was an problem with fetch\", error)\n }\n };\n\n return (\n <div className=\"gene-list-component\">\n <Form>\n {/* Input for Gene List */}\n <Form.Group controlId=\"geneList\">\n <Form.Label>Paste or drop your gene list here:</Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={10}\n value={geneList}\n onChange={handleGeneListChange}\n placeholder={`Paste or drop your gene list here (Maximum: ${MAX_GENE_IDS} IDs)`}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n </Form.Group>\n\n {/* Display error if gene list exceeds limit */}\n {errorMessage && (\n <Alert variant=\"danger\">\n {errorMessage}\n </Alert>\n )}\n\n {/* Button to submit for validation */}\n <Button variant=\"primary\" onClick={handleSubmit}>\n Validate Gene List\n </Button>\n </Form>\n\n {/* Display validation in progress */}\n {loading && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation in Progress...</h3>\n <Spinner animation=\"border\" role=\"status\">\n <span className=\"sr-only\">Validating...</span>\n </Spinner>\n </div>\n )}\n\n\n {/* Display validation summary */}\n {!loading && listHash && (\n <div className=\"validation-summary mt-3 p-3 border rounded bg-light\">\n <div>\n <span className=\"text-success\">\n <strong>{validatedList.length}</strong> valid\n </span>\n {validationError.length > 0 && (\n <div className=\"text-danger mt-1\">\n <strong>{validationError.length}</strong> not found\n </div>\n )}\n </div>\n {validationError.length > 0 && (\n <details className=\"mt-2\">\n <summary style={{cursor: 'pointer'}}>Show unrecognized IDs</summary>\n <pre className=\"small mt-2 mb-0\" style={{maxHeight: 150, overflow: 'auto'}}>\n {validationError.join('\\n')}\n </pre>\n </details>\n )}\n </div>\n )}\n\n {/* Input for saving validated gene list */}\n {!loading && validatedList.length > 0 && (\n <div className=\"save-list mt-4\">\n <Form.Group controlId=\"listName\">\n <Form.Label>Save Validated Gene List</Form.Label>\n <Form.Control\n type=\"text\"\n value={listName}\n onChange={(e) => setListName(e.target.value)}\n placeholder=\"Enter list name\"\n />\n <Form.Check\n type='switch'\n id='listIsPublic'\n label='Public'\n onChange={(e) => setListIsPublic(!listIsPublic)}\n />\n </Form.Group>\n {user ?\n <Button variant=\"primary\" onClick={handleSaveList}>\n Save Gene List\n </Button>\n : <Button variant=\"secondary\" disabled>Login Required</Button> }\n </div>\n )}\n </div>\n );\n};\n\nconst UserGeneListsComponent = props => {\n const [refreshKey, setRefreshKey] = useState(0);\n const handleListSaved = () => setRefreshKey(k => k + 1);\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n if (!auth) {\n return (\n <Alert variant=\"info\">\n User gene lists are not available on this site.\n </Alert>\n );\n }\n return (\n <Container fluid>\n <Row>\n <Col><GeneListComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} onListSaved={handleListSaved}/></Col>\n <Col><GeneListDisplayComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} addFilter={props.doAcceptGrameneSuggestion} refreshKey={refreshKey}/></Col>\n </Row>\n </Container>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n 'doAcceptGrameneSuggestion',\n UserGeneListsComponent\n);\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport FieldTree from './FieldTree';\nimport Preview from './Preview';\nimport ExportFooter from './ExportFooter';\nimport './styles.css';\n\nconst MIN_LEFT_PCT = 15;\nconst MAX_LEFT_PCT = 85;\n\nconst ExporterViewCmp = props => {\n const {\n fieldCatalog: catalog,\n grameneFieldCatalogIsLoading: isLoading,\n grameneFieldCatalogRaw: raw,\n grameneFieldCatalogShouldUpdate: shouldUpdate,\n doFetchGrameneFieldCatalog\n } = props;\n const [fieldQuery, setFieldQuery] = useState('');\n const [leftPct, setLeftPct] = useState(50);\n const [dragging, setDragging] = useState(false);\n const containerRef = useRef(null);\n\n useEffect(() => {\n if (shouldUpdate) doFetchGrameneFieldCatalog();\n }, [shouldUpdate, doFetchGrameneFieldCatalog]);\n\n const onPointerMove = useCallback((e) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const pct = ((e.clientX - rect.left) / rect.width) * 100;\n if (!Number.isFinite(pct)) return;\n setLeftPct(Math.max(MIN_LEFT_PCT, Math.min(MAX_LEFT_PCT, pct)));\n }, []);\n\n useEffect(() => {\n if (!dragging) return;\n const onUp = () => setDragging(false);\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n const prev = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n return () => {\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = prev;\n };\n }, [dragging, onPointerMove]);\n\n if (!catalog || !catalog.groups) {\n const msg = isLoading ? 'Loading…' : (raw && raw.error) ? `error: ${String(raw.error)}` : 'init';\n return (\n <div className=\"exporter-view\">\n <em style={{padding: '1rem'}}>Loading field catalog… ({msg})</em>\n </div>\n );\n }\n\n const gridStyle = {\n gridTemplateColumns: `${leftPct}% 8px ${100 - leftPct}%`\n };\n\n return (\n <div className=\"exporter-view\" ref={containerRef} style={gridStyle}>\n <div className=\"exporter-pane\">\n <div className=\"exporter-pane-header exporter-pane-header-row\">\n <b>Available fields</b>\n <small style={{color: '#888', marginLeft: '0.5rem'}}>\n {Object.keys(catalog.fields).length} total\n </small>\n <input\n type=\"search\"\n className=\"form-control exporter-field-search exporter-field-search-inline\"\n placeholder=\"Search fields…\"\n value={fieldQuery}\n onChange={e => setFieldQuery(e.target.value)}\n />\n </div>\n <div className=\"exporter-pane-body\">\n <FieldTree query={fieldQuery}/>\n </div>\n </div>\n\n <div\n className={'exporter-divider' + (dragging ? ' dragging' : '')}\n onPointerDown={e => { e.preventDefault(); setDragging(true); }}\n onDoubleClick={() => setLeftPct(50)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize · double-click to reset\"\n />\n\n <div className=\"exporter-pane exporter-right-pane\">\n <div className=\"exporter-right-split\">\n <div className=\"exporter-preview-section\">\n <Preview/>\n </div>\n <ExportFooter/>\n </div>\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectGrameneFieldCatalogIsLoading',\n 'selectGrameneFieldCatalogRaw',\n 'selectGrameneFieldCatalogShouldUpdate',\n 'doFetchGrameneFieldCatalog',\n ExporterViewCmp\n);\n","import React, { useState, useMemo } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst MAX_VISIBLE_PER_GROUP = 200;\n\nfunction collectFieldNames(group) {\n const names = [...(group.fields || [])];\n for (const s of group.subgroups || []) names.push(...collectFieldNames(s));\n return names;\n}\n\nfunction collectMatchingFieldNames(group) {\n const names = [...(group.matchingFields || [])];\n for (const s of group.subgroups || []) names.push(...collectMatchingFieldNames(s));\n return names;\n}\n\nfunction filterGroup(group, q, catalog) {\n const matchingFields = (group.fields || []).filter(name => {\n if (!q) return true;\n const f = catalog.fields[name];\n return name.toLowerCase().includes(q) || (f && f.label.toLowerCase().includes(q));\n });\n const groupLabelMatches = q && group.label && group.label.toLowerCase().includes(q);\n const subgroups = (group.subgroups || [])\n .map(s => filterGroup(s, groupLabelMatches ? '' : q, catalog))\n .filter(s => s);\n if (!q) return { ...group, matchingFields, subgroups };\n if (groupLabelMatches) {\n return {\n ...group,\n matchingFields: group.fields || [],\n subgroups: (group.subgroups || []).map(s => filterGroup(s, '', catalog))\n };\n }\n if (matchingFields.length === 0 && subgroups.length === 0) return null;\n return { ...group, matchingFields, subgroups };\n}\n\nconst FieldRow = ({ name, catalog, selectedSet, onToggle }) => {\n const f = catalog.fields[name];\n if (!f) return null;\n const linked = f.linkedFields;\n const checked = linked\n ? linked.every(n => selectedSet.has(n))\n : selectedSet.has(name);\n return (\n <li>\n <label title={name + (f.description ? '\\n' + f.description : '')}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => onToggle(name)}\n />\n <span className=\"exporter-field-label\">{f.label}</span>\n {f.multiValued && <span className=\"exporter-field-badge\">[]</span>}\n </label>\n </li>\n );\n};\n\nconst GroupNode = ({ group, depth, catalog, selectedSet, onToggle, onBulkSet, openMap, setOpen, forceOpen }) => {\n const matchingNames = collectMatchingFieldNames(group);\n const total = matchingNames.length;\n const isAllLinkedSelected = (name) => {\n const f = catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) return linked.every(n => selectedSet.has(n));\n return selectedSet.has(name);\n };\n const selectedCount = matchingNames.reduce((n, name) => n + (isAllLinkedSelected(name) ? 1 : 0), 0);\n const allSelected = total > 0 && selectedCount === total;\n const noneSelected = selectedCount === 0;\n const isOpen = forceOpen || openMap[group.id] || false;\n const visible = (group.matchingFields || []).slice(0, MAX_VISIBLE_PER_GROUP);\n const truncated = (group.matchingFields || []).length - visible.length;\n\n const expandLinked = (names) => {\n const out = [];\n for (const n of names) {\n const f = catalog.fields[n];\n if (f && f.linkedFields) out.push(...f.linkedFields);\n else out.push(n);\n }\n return out;\n };\n\n const handleBulk = (e, selected) => {\n e.stopPropagation();\n if (matchingNames.length === 0) return;\n onBulkSet(expandLinked(matchingNames), selected);\n };\n\n return (\n <div className=\"exporter-group\" style={{ marginLeft: depth > 0 ? '0.75rem' : 0 }}>\n <div className=\"exporter-group-header\" onClick={() => setOpen(group.id, !isOpen)}>\n <span className=\"exporter-group-chevron\">\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n <b>{group.label}</b>\n <span className=\"exporter-group-actions\">\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={allSelected || total === 0}\n onClick={e => handleBulk(e, true)}\n title=\"Select all fields in this group\"\n >All</button>\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={noneSelected}\n onClick={e => handleBulk(e, false)}\n title=\"Deselect all fields in this group\"\n >None</button>\n </span>\n <span className=\"exporter-group-count\">{selectedCount}/{total}</span>\n </div>\n {isOpen && (\n <>\n {(group.subgroups || []).map(sub => (\n <GroupNode\n key={sub.id}\n group={sub}\n depth={depth + 1}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n onBulkSet={onBulkSet}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {visible.length > 0 && (\n <ul className=\"exporter-group-fields\">\n {visible.map(name => (\n <FieldRow\n key={name}\n name={name}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n />\n ))}\n {truncated > 0 && (\n <li className=\"exporter-group-truncated\">\n <em>… {truncated} more. Refine search to see.</em>\n </li>\n )}\n </ul>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst FieldTreeCmp = props => {\n const { fieldCatalog: catalog, exporterSelectedFields, doToggleExporterField, doBulkSetExporterFields, query = '' } = props;\n const [openMap, setOpenMap] = useState({});\n\n const selectedSet = useMemo(() => new Set(exporterSelectedFields), [exporterSelectedFields]);\n\n const handleToggle = (name) => {\n const f = catalog && catalog.fields && catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) {\n const allSelected = linked.every(n => selectedSet.has(n));\n doBulkSetExporterFields(linked, !allSelected);\n } else {\n doToggleExporterField(name);\n }\n };\n\n const q = query.trim().toLowerCase();\n\n const filtered = useMemo(() => {\n if (!catalog || !catalog.groups) return [];\n return catalog.groups\n .map(g => filterGroup(g, q, catalog))\n .filter(g => g && ((g.matchingFields && g.matchingFields.length) || (g.subgroups && g.subgroups.length)));\n }, [catalog, q]);\n\n if (!catalog || !catalog.groups) {\n return <div className=\"exporter-panel-empty\">Loading field catalog…</div>;\n }\n\n const setOpen = (id, val) => setOpenMap(s => ({ ...s, [id]: val }));\n const forceOpen = !!q;\n\n return (\n <div className=\"exporter-field-tree\">\n <div className=\"exporter-field-tree-body\">\n {filtered.map(group => (\n <GroupNode\n key={group.id}\n group={group}\n depth={0}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={handleToggle}\n onBulkSet={doBulkSetExporterFields}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {filtered.length === 0 && (\n <div className=\"exporter-panel-empty\">No fields match \"{query}\".</div>\n )}\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'doToggleExporterField',\n 'doBulkSetExporterFields',\n FieldTreeCmp\n);\n","import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsArrowLeftShort, BsArrowRightShort, BsSliders } from 'react-icons/bs';\nimport { buildTableData, toJSON } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\nimport CutoffsModal from './CutoffsModal';\n\nconst PreviewCmp = props => {\n const {\n fieldCatalog: catalog,\n exporterSelectedFields: fields,\n exporterFormat: format,\n exporterPreview: preview,\n expressionStudies,\n expressionSamples,\n grameneTaxonomy,\n gramenePathways,\n ontologies,\n exporterCutoffs,\n doSetExporterFormat,\n doReorderExporterFields,\n doClearExporterFields,\n doSetExporterCutoffs,\n doEnsureOntologyRecords,\n doRequestGramenePathways\n } = props;\n\n const [showCutoffs, setShowCutoffs] = useState(false);\n const docs = preview.data || [];\n\n const ancestorFieldsSelected = useMemo(\n () => fields.filter(n => ANCESTOR_FIELD_MAP[n]),\n [fields]\n );\n\n useEffect(() => {\n if (ancestorFieldsSelected.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFieldsSelected);\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue; // already cached globally\n if (ontKey === 'pathways') {\n if (doRequestGramenePathways) doRequestGramenePathways(ids);\n continue;\n }\n if (doEnsureOntologyRecords) doEnsureOntologyRecords(ontKey, ids);\n }\n }, [docs, ancestorFieldsSelected, doEnsureOntologyRecords, doRequestGramenePathways]);\n\n if (fields.length === 0) {\n return (\n <div className=\"exporter-preview-empty\">\n <em>Select at least one field to preview.</em>\n </div>\n );\n }\n\n const renderStatus = () => {\n if (preview.status === 'loading') return <small className=\"exporter-preview-status\">Loading…</small>;\n if (preview.status === 'error') return <small className=\"exporter-preview-status error\">Error: {preview.error}</small>;\n if (preview.status === 'stale') return <small className=\"exporter-preview-status\">Refreshing…</small>;\n if (preview.status === 'idle') return <small className=\"exporter-preview-status\">Idle</small>;\n return null;\n };\n\n const resolverCtx = {\n expressionStudies,\n expressionSamples,\n taxonomy: grameneTaxonomy,\n pathways: gramenePathways,\n ontologies,\n cutoffs: exporterCutoffs\n };\n\n const moveField = (name, delta) => {\n const idx = fields.indexOf(name);\n if (idx === -1) return;\n const target = idx + delta;\n if (target < 0 || target >= fields.length) return;\n const next = [...fields];\n [next[idx], next[target]] = [next[target], next[idx]];\n doReorderExporterFields(next);\n };\n\n return (\n <div className=\"exporter-preview\">\n <div className=\"exporter-preview-toolbar\">\n <span className=\"exporter-preview-title\"><b>Preview</b> (first 20 genes)</span>\n <span className=\"exporter-preview-fields-count\">\n {fields.length} field{fields.length === 1 ? '' : 's'}\n {fields.length > 0 && (\n <button\n className=\"btn btn-sm btn-link exporter-clear-btn\"\n onClick={doClearExporterFields}\n >clear</button>\n )}\n </span>\n <span className=\"exporter-preview-format\">\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"tsv\"\n checked={format === 'tsv'}\n onChange={() => doSetExporterFormat('tsv')}\n /> TSV\n </label>\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"json\"\n checked={format === 'json'}\n onChange={() => doSetExporterFormat('json')}\n /> JSON\n </label>\n </span>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-light exporter-cutoffs-btn\"\n onClick={() => setShowCutoffs(true)}\n title=\"Expression cutoffs\"\n >\n <BsSliders/> Cutoffs\n </button>\n {renderStatus()}\n </div>\n {showCutoffs && (\n <CutoffsModal\n cutoffs={exporterCutoffs}\n onApply={doSetExporterCutoffs}\n onClose={() => setShowCutoffs(false)}\n />\n )}\n <div className=\"exporter-preview-body\">\n {format === 'tsv' ? (\n <TSVTable\n docs={docs}\n fields={fields}\n catalog={catalog}\n resolverCtx={resolverCtx}\n onMoveField={moveField}\n />\n ) : (\n <pre className=\"exporter-preview-json\">{toJSON(docs, fields, resolverCtx)}</pre>\n )}\n </div>\n </div>\n );\n};\n\nconst MIN_COL_WIDTH = 40;\n\nconst TSVTable = ({ docs, fields, catalog, resolverCtx, onMoveField }) => {\n const { header, headerKeys, rows } = buildTableData(docs, fields, catalog, resolverCtx);\n const reorderableCount = fields.length;\n const [colWidths, setColWidths] = useState({});\n const thRefs = useRef({});\n\n const startResize = (key) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n const th = thRefs.current[key];\n const startWidth = (th && th.getBoundingClientRect().width) || 100;\n const startX = e.clientX;\n const onMove = (ev) => {\n const delta = ev.clientX - startX;\n const next = Math.max(MIN_COL_WIDTH, startWidth + delta);\n setColWidths(prev => ({ ...prev, [key]: next }));\n };\n const onUp = () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = '';\n };\n document.body.style.userSelect = 'none';\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n };\n\n return (\n <div className=\"exporter-preview-tsv-scroll\">\n <table className=\"exporter-preview-tsv\">\n <thead>\n <tr>\n {header.map((h, i) => {\n const key = headerKeys[i];\n const fieldIdx = fields.indexOf(key);\n const reorderable = fieldIdx !== -1;\n const w = colWidths[key];\n const thStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <th key={key} title={key} style={thStyle} ref={el => { thRefs.current[key] = el; }}>\n <div className=\"exporter-preview-th-inner\">\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === 0}\n onClick={() => onMoveField(key, -1)}\n title=\"Move left\"\n ><BsArrowLeftShort/></button>\n <span className=\"exporter-preview-th-label\">{h}</span>\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === reorderableCount - 1}\n onClick={() => onMoveField(key, 1)}\n title=\"Move right\"\n ><BsArrowRightShort/></button>\n </div>\n <span\n className=\"exporter-preview-col-resizer\"\n onPointerDown={startResize(key)}\n onDoubleClick={() => setColWidths(prev => { const n = { ...prev }; delete n[key]; return n; })}\n title=\"Drag to resize · double-click to reset\"\n />\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, r) => (\n <tr key={r}>\n {row.map((c, i) => {\n const key = headerKeys[i];\n const w = colWidths[key];\n const tdStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <td key={key} title={c} style={tdStyle}>{c}</td>\n );\n })}\n </tr>\n ))}\n {rows.length === 0 && (\n <tr>\n <td colSpan={header.length} className=\"exporter-preview-empty-row\">\n <em>No rows.</em>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterPreview',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'selectOntologies',\n 'selectExporterCutoffs',\n 'doSetExporterFormat',\n 'doReorderExporterFields',\n 'doClearExporterFields',\n 'doSetExporterCutoffs',\n 'doEnsureOntologyRecords',\n 'doRequestGramenePathways',\n PreviewCmp\n);\n","import React, { useState, useEffect } from 'react';\n\nconst parseNumberOrNull = (v) => {\n if (v === '' || v === null || v === undefined) return null;\n const n = +v;\n return Number.isFinite(n) ? n : null;\n};\n\nconst CutoffsModal = ({ cutoffs, onApply, onClose }) => {\n const [exprMinTPM, setExprMinTPM] = useState(\n cutoffs && cutoffs.exprMinTPM != null ? String(cutoffs.exprMinTPM) : ''\n );\n const [diffMaxPval, setDiffMaxPval] = useState(\n cutoffs && cutoffs.diffMaxPval != null ? String(cutoffs.diffMaxPval) : ''\n );\n\n useEffect(() => {\n const onKey = (e) => { if (e.key === 'Escape') onClose(); };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n const apply = () => {\n onApply({\n exprMinTPM: parseNumberOrNull(exprMinTPM),\n diffMaxPval: parseNumberOrNull(diffMaxPval)\n });\n onClose();\n };\n\n return (\n <div className=\"exporter-modal-backdrop\" onClick={onClose}>\n <div className=\"exporter-modal\" onClick={e => e.stopPropagation()} role=\"dialog\" aria-modal=\"true\">\n <div className=\"exporter-modal-header\">\n <b>Expression cutoffs</b>\n <button type=\"button\" className=\"exporter-modal-close\" onClick={onClose} aria-label=\"Close\">×</button>\n </div>\n <div className=\"exporter-modal-body\">\n <div className=\"exporter-modal-field\">\n <label>\n Minimum TPM (gene expression)\n <input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n value={exprMinTPM}\n onChange={e => setExprMinTPM(e.target.value)}\n placeholder=\"no minimum\"\n />\n </label>\n <small>Exclude expression rows with TPM below this value. Blank disables the cutoff.</small>\n </div>\n <div className=\"exporter-modal-field\">\n <label>\n Maximum p-value (differential expression)\n <input\n type=\"number\"\n step=\"0.001\"\n min=\"0\"\n max=\"1\"\n value={diffMaxPval}\n onChange={e => setDiffMaxPval(e.target.value)}\n placeholder=\"no maximum\"\n />\n </label>\n <small>Exclude diff-expression contrasts with p-value above this. Blank disables the cutoff.</small>\n </div>\n </div>\n <div className=\"exporter-modal-footer\">\n <button type=\"button\" className=\"btn btn-sm btn-link\" onClick={onClose}>Cancel</button>\n <button type=\"button\" className=\"btn btn-sm btn-primary\" onClick={apply}>Apply</button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default CutoffsModal;\n","import React from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Modal, Button, ProgressBar } from 'react-bootstrap';\n\nconst ExportFooterCmp = props => {\n const {\n exporterSelectedFields,\n exporterFormat,\n exporterDownload: dl,\n doStartExporterDownload,\n doCancelExporterDownload,\n doResetExporterDownload\n } = props;\n\n const inFlight = dl.status === 'preparing' || dl.status === 'downloading';\n const pct = dl.total > 0\n ? Math.min(100, Math.round((dl.progress / dl.total) * 100))\n : 0;\n\n const canStart = !inFlight && exporterSelectedFields.length > 0;\n\n return (\n <>\n <div className=\"exporter-footer\">\n <div className=\"exporter-footer-summary\">\n <small>\n {exporterSelectedFields.length} field{exporterSelectedFields.length === 1 ? '' : 's'} selected\n · format: <b>{exporterFormat.toUpperCase()}</b>\n </small>\n </div>\n <Button\n variant=\"primary\"\n size=\"sm\"\n disabled={!canStart}\n onClick={doStartExporterDownload}\n >\n Download {exporterFormat.toUpperCase()}\n </Button>\n </div>\n\n <Modal show={dl.status !== 'idle'} onHide={doResetExporterDownload} centered backdrop=\"static\">\n <Modal.Header closeButton={!inFlight}>\n <Modal.Title>\n {dl.status === 'preparing' && 'Preparing export…'}\n {dl.status === 'downloading' && 'Exporting…'}\n {dl.status === 'done' && 'Export complete'}\n {dl.status === 'cancelled' && 'Export cancelled'}\n {dl.status === 'error' && 'Export failed'}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {inFlight && (\n <>\n <ProgressBar\n now={pct}\n label={dl.total > 0 ? `${dl.progress.toLocaleString()} / ${dl.total.toLocaleString()}` : 'Counting…'}\n striped\n animated\n />\n <div style={{ marginTop: '0.5rem', fontSize: '0.85rem', color: '#666' }}>\n Fetching genes in pages of 1000. This may take a while for large result sets.\n </div>\n </>\n )}\n {dl.status === 'done' && (\n <div>\n Wrote <b>{dl.progress.toLocaleString()}</b> genes to disk.\n </div>\n )}\n {dl.status === 'cancelled' && (\n <div>\n Stopped at <b>{dl.progress.toLocaleString()}</b> / {dl.total.toLocaleString()} genes. No file was saved.\n </div>\n )}\n {dl.status === 'error' && (\n <div className=\"text-danger\">{dl.error}</div>\n )}\n </Modal.Body>\n <Modal.Footer>\n {inFlight ? (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={doCancelExporterDownload}>\n Cancel\n </Button>\n ) : (\n <Button variant=\"secondary\" size=\"sm\" onClick={doResetExporterDownload}>\n Close\n </Button>\n )}\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nexport default connect(\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterDownload',\n 'doStartExporterDownload',\n 'doCancelExporterDownload',\n 'doResetExporterDownload',\n ExportFooterCmp\n);\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Tabs, Tab, Button, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\nimport FieldsModal from './FieldsModal';\nimport ExprTable, { buildFieldInfo } from './ExprTable';\nimport ParallelCoordsPlot from './ParallelCoordsPlot';\nimport './styles.css';\n\nfunction speciesTaxonId(tid) {\n const n = +tid;\n return n > 1000000 ? Math.floor(n / 1000) : n;\n}\n\nfunction genomeName(grameneMaps, tid) {\n if (!grameneMaps) return tid;\n const direct = grameneMaps[tid];\n if (direct && direct.display_name) return direct.display_name;\n const sp = grameneMaps[speciesTaxonId(tid)];\n if (sp && sp.display_name) return sp.display_name;\n return tid;\n}\n\nconst ExprVizViewCmp = props => {\n const {\n exprVizPivot: pivot,\n exprViz,\n exprVizActiveTaxon: activeTaxon,\n grameneMaps,\n expressionStudies,\n expressionSamples,\n doSetExprVizActiveTaxon,\n doToggleExprVizFieldsModal,\n doFetchExprVizData\n } = props;\n\n const studiesFor = tid => {\n if (!expressionStudies) return [];\n return expressionStudies[tid] || expressionStudies[speciesTaxonId(tid)] || [];\n };\n\n const taxa = useMemo(() => {\n const ids = Object.keys(pivot.data || {});\n if (!grameneMaps) return ids;\n return ids.sort((a, b) => {\n const ma = grameneMaps[a] || grameneMaps[speciesTaxonId(a)];\n const mb = grameneMaps[b] || grameneMaps[speciesTaxonId(b)];\n return ((ma && ma.left_index) || 0) - ((mb && mb.left_index) || 0);\n });\n }, [pivot.data, grameneMaps]);\n\n useEffect(() => {\n if (taxa.length === 0) return;\n if (!activeTaxon || !taxa.includes(String(activeTaxon))) {\n doSetExprVizActiveTaxon(taxa[0]);\n }\n }, [taxa, activeTaxon, doSetExprVizActiveTaxon]);\n\n if (pivot.status === 'loading') {\n return <div className=\"exprviz-view\"><em>Loading studies…</em></div>;\n }\n if (pivot.status === 'error') {\n return <div className=\"exprviz-view\"><em>Error: {pivot.error}</em></div>;\n }\n if (taxa.length === 0) {\n return <div className=\"exprviz-view\"><em>No expression studies for current results.</em></div>;\n }\n\n return (\n <div className=\"exprviz-view\">\n <Tabs\n activeKey={activeTaxon || taxa[0]}\n onSelect={k => doSetExprVizActiveTaxon(k)}\n className=\"exprviz-tabs\"\n >\n {taxa.map(tid => {\n const studies = studiesFor(tid);\n const taxName = genomeName(grameneMaps, tid);\n const geneCount = pivot.data[tid] || 0;\n return (\n <Tab\n key={tid}\n eventKey={tid}\n title={`${taxName} (${studies.length} studies · ${geneCount} genes)`}\n >\n <TaxonPanel\n taxon={tid}\n studies={studies}\n expressionSamples={expressionSamples}\n tabState={exprViz.byTaxon[tid]}\n onOpenFields={() => doToggleExprVizFieldsModal(tid, true)}\n onLoad={() => doFetchExprVizData(tid)}\n onReorder={(next) => props.doReorderExprVizFields(tid, next)}\n onAddRangeQuery={props.doAddGrameneRangeQuery}\n />\n </Tab>\n );\n })}\n </Tabs>\n <FieldsModal/>\n </div>\n );\n};\n\n// Compact axis labels for the parallel-coords plot. The raw Solr field name\n// (e.g. \"E_CURD_148_g5__expr\") is uninformative; we prefer the assay's\n// factor labels, falling back to \"organism part\" then to the group id.\n// `full` is exposed via an SVG <title> so the user can hover to see study,\n// group, and every factor/characteristic.\nconst AXIS_LABEL_MAX = 22;\n\nfunction truncateLabel(s, n) {\n if (!s) return '';\n return s.length > n ? s.slice(0, n - 1) + '…' : s;\n}\n\nfunction compactAssayLabel(assay, group) {\n if (!assay) return group || '';\n const factorVals = (assay.factor || []).map(f => f && f.label).filter(Boolean);\n if (factorVals.length) return factorVals.join('; ');\n const chars = assay.characteristic || [];\n const organ = chars.find(c => c && c.type === 'organism part');\n if (organ && organ.label) return organ.label;\n const firstChar = chars.find(c => c && c.label);\n if (firstChar) return firstChar.label;\n return group || '';\n}\n\nfunction assayPairs(list) {\n return (list || [])\n .filter(x => x && x.label)\n .map(x => ({ name: x.type || '', value: x.label }));\n}\n\nfunction buildAxisLabels(fields, studies, expressionSamples) {\n const labels = {};\n if (!fields) return labels;\n const studyById = {};\n (studies || []).forEach(s => { if (s && s._id) studyById[s._id] = s; });\n const findAssay = (studyId, group) => {\n const arr = expressionSamples && expressionSamples[studyId];\n return arr ? arr.find(a => a.group === group) : null;\n };\n for (const f of fields) {\n const m = f.match(/^(.+?)_g(\\d+)__expr$/);\n if (!m) {\n labels[f] = {\n short: truncateLabel(f.replace(/__expr$/, ''), AXIS_LABEL_MAX),\n structured: { studyTitle: f, group: '', factors: [], characteristics: [] }\n };\n continue;\n }\n const expId = m[1].replace(/_/g, '-');\n const group = 'g' + m[2];\n const assay = findAssay(expId, group);\n const study = studyById[expId];\n const studyName = (study && study.description) || expId;\n labels[f] = {\n short: truncateLabel(compactAssayLabel(assay, group), AXIS_LABEL_MAX),\n structured: {\n studyTitle: studyName,\n group,\n factors: assayPairs(assay && assay.factor),\n characteristics: assayPairs(assay && assay.characteristic)\n }\n };\n }\n return labels;\n}\n\nfunction rowMatchesSelections(row, selections) {\n for (const f of Object.keys(selections)) {\n const v = row[f];\n if (v == null || Array.isArray(v)) return false;\n const n = +v;\n if (!Number.isFinite(n)) return false;\n const [lo, hi] = selections[f];\n if (n < lo || n > hi) return false;\n }\n return true;\n}\n\nfunction fmt(n) {\n if (!Number.isFinite(n)) return String(n);\n const a = Math.abs(n);\n if (a !== 0 && (a < 0.001 || a >= 1e6)) return n.toExponential(3);\n return Number(n.toFixed(4)).toString();\n}\n\nfunction tsvCell(v) {\n if (v == null) return '';\n if (Array.isArray(v)) return v.join(',');\n const s = typeof v === 'object' ? JSON.stringify(v) : String(v);\n return s.replace(/[\\t\\r\\n]+/g, ' ');\n}\n\n// Mirror the on-screen table header in the TSV: one row per metadata level\n// the table is showing (Study, then one row per distinct factor type, then\n// one row per distinct characteristic type), followed by the leaf header\n// (Gene ID / Name / per-sample group). The first two columns are repurposed\n// to carry the row category and the row's specific name, matching the\n// pinned-column labels in ExprTable.\nfunction downloadTsv(filename, rows, fields, studies, expressionSamples) {\n const cols = ['id', 'name', ...fields];\n const fieldInfo = buildFieldInfo(fields, studies, expressionSamples);\n\n const factorTypes = new Set();\n const charTypes = new Set();\n for (const f of fields) {\n const info = fieldInfo[f];\n if (!info) continue;\n Object.keys(info.factors || {}).forEach(t => factorTypes.add(t));\n Object.keys(info.characteristics || {}).forEach(t => charTypes.add(t));\n }\n const factorTypeList = Array.from(factorTypes).sort();\n const charTypeList = Array.from(charTypes).sort();\n\n const metaRow = (cat, label, getValue) => {\n const cells = [cat, label];\n for (const f of fields) cells.push(tsvCell(getValue(fieldInfo[f] || {})));\n return cells.join('\\t');\n };\n\n const lines = [];\n lines.push(metaRow('Study', 'Title', info => info.studyDescription || ''));\n for (const t of factorTypeList) {\n lines.push(metaRow('Factor', t, info => (info.factors && info.factors[t]) || ''));\n }\n for (const t of charTypeList) {\n lines.push(metaRow('Characteristic', t, info => (info.characteristics && info.characteristics[t]) || ''));\n }\n // Leaf header — column ids for the data rows.\n lines.push(['Gene ID', 'Name', ...fields.map(f => {\n const info = fieldInfo[f];\n return (info && info.group) || f.replace(/__expr$/, '');\n })].join('\\t'));\n\n for (const r of rows) lines.push(cols.map(c => tsvCell(r[c])).join('\\t'));\n\n const blob = new Blob([lines.join('\\n') + '\\n'], { type: 'text/tab-separated-values' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\nconst TaxonPanel = ({ taxon, studies, expressionSamples, tabState, onOpenFields, onLoad, onReorder, onAddRangeQuery }) => {\n const selected = (tabState && tabState.selectedFields) || [];\n const rows = (tabState && tabState.rows) || [];\n const fetchInfo = (tabState && tabState.fetch) || { status: 'idle', total: 0 };\n const [scale, setScale] = useState('linear');\n const [selections, setSelections] = useState({});\n const [clearVersion, setClearVersion] = useState(0);\n const [hoveredId, setHoveredId] = useState(null);\n const [plotHeight, setPlotHeight] = useState(320);\n const resizeStateRef = useRef(null);\n\n // Drag the horizontal separator between the plot and the table to retune\n // their relative sizes. Bounded so neither pane disappears entirely.\n const startResize = (e) => {\n e.preventDefault();\n resizeStateRef.current = { startY: e.clientY, startHeight: plotHeight };\n const onMove = (ev) => {\n const s = resizeStateRef.current;\n if (!s) return;\n const next = Math.max(120, Math.min(1200, s.startHeight + (ev.clientY - s.startY)));\n setPlotHeight(next);\n };\n const onUp = () => {\n resizeStateRef.current = null;\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n document.body.style.cursor = 'row-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n };\n\n const hasBrush = Object.keys(selections).length > 0;\n const filteredRows = useMemo(() => {\n if (!hasBrush) return rows;\n return rows.filter(r => rowMatchesSelections(r, selections));\n }, [rows, selections, hasBrush]);\n\n // Drop fields with no numeric data in the loaded rows so empty axes/columns\n // don't clutter the visualization. Selected-but-empty fields stay in the\n // underlying selection so a future load can repopulate them.\n const visibleFields = useMemo(() => {\n if (rows.length === 0 || selected.length === 0) return selected;\n return selected.filter(f => rows.some(r => {\n const v = r[f];\n return v != null && !Array.isArray(v) && Number.isFinite(+v);\n }));\n }, [rows, selected]);\n\n const handleReorder = onReorder\n ? (newVisibleOrder) => {\n const visibleSet = new Set(newVisibleOrder);\n const hidden = selected.filter(f => !visibleSet.has(f));\n onReorder([...newVisibleOrder, ...hidden]);\n }\n : undefined;\n\n const axisLabels = useMemo(\n () => buildAxisLabels(visibleFields, studies, expressionSamples),\n [visibleFields, studies, expressionSamples]\n );\n\n useEffect(() => {\n if (rows.length === 0 && hasBrush) {\n setSelections({});\n setClearVersion(v => v + 1);\n }\n }, [rows.length, hasBrush]);\n\n return (\n <div className=\"exprviz-tab-panel\">\n <div className=\"exprviz-toolbar\">\n <Button size=\"sm\" onClick={onOpenFields}>\n Select fields ({selected.length} selected, {studies.length} studies)\n </Button>\n <Button\n size=\"sm\"\n variant=\"primary\"\n disabled={selected.length === 0 || fetchInfo.status === 'loading'}\n onClick={onLoad}\n >\n {fetchInfo.status === 'loading' ? 'Loading…' : 'Load data'}\n </Button>\n <ToggleButtonGroup\n type=\"radio\"\n name={`exprviz-scale-${taxon}`}\n size=\"sm\"\n value={scale}\n onChange={setScale}\n >\n <ToggleButton id={`exprviz-scale-${taxon}-lin`} value=\"linear\" variant=\"outline-secondary\">Linear</ToggleButton>\n <ToggleButton id={`exprviz-scale-${taxon}-log`} value=\"log\" variant=\"outline-secondary\">Log</ToggleButton>\n </ToggleButtonGroup>\n <Button\n size=\"sm\"\n variant=\"outline-secondary\"\n disabled={!hasBrush}\n onClick={() => { setClearVersion(v => v + 1); setSelections({}); }}\n >\n Clear brushes\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline-secondary\"\n disabled={filteredRows.length === 0 || visibleFields.length === 0}\n onClick={() => downloadTsv(`expression_${taxon}.tsv`, filteredRows, visibleFields, studies, expressionSamples)}\n title=\"Download the visible rows and columns as tab-delimited text\"\n >\n Download TSV\n </Button>\n <Button\n size=\"sm\"\n variant=\"success\"\n disabled={!hasBrush || !onAddRangeQuery}\n onClick={() => {\n const terms = Object.keys(selections).map(field => {\n const [lo, hi] = selections[field];\n return {\n category: 'Expression',\n name: `${field}: ${fmt(lo)}–${fmt(hi)}`,\n fq_field: field,\n fq_value: `[${lo} TO ${hi}]`\n };\n });\n onAddRangeQuery(terms);\n }}\n title=\"Add brush ranges as an AND-conjunction filter on the search\"\n >\n Apply as filter\n </Button>\n <span className=\"exprviz-status\">\n {hasBrush ? `${filteredRows.length} of ${rows.length}` : rows.length}\n {fetchInfo.total ? ` / ${fetchInfo.total}` : ''} genes\n {hasBrush ? ' (brushed)' : ' loaded'}\n </span>\n </div>\n <div className=\"exprviz-body\">\n <div className=\"exprviz-plot\" style={{ height: plotHeight }}>\n <ParallelCoordsPlot\n rows={rows}\n fields={visibleFields}\n scale={scale}\n onBrushChange={setSelections}\n onReorder={handleReorder}\n clearVersion={clearVersion}\n hoveredId={hoveredId}\n axisLabels={axisLabels}\n />\n </div>\n <div\n className=\"exprviz-resizer\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-label=\"Resize plot\"\n onMouseDown={startResize}\n title=\"Drag to resize\"\n />\n <div className=\"exprviz-table\">\n <ExprTable\n rows={filteredRows}\n fields={visibleFields}\n onReorder={handleReorder}\n studies={studies}\n expressionSamples={expressionSamples}\n onHoverRow={setHoveredId}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectExprViz',\n 'selectExprVizPivot',\n 'selectExprVizActiveTaxon',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'doSetExprVizActiveTaxon',\n 'doToggleExprVizFieldsModal',\n 'doFetchExprVizData',\n 'doReorderExprVizFields',\n 'doAddGrameneRangeQuery',\n ExprVizViewCmp\n);\n","import React, { useState, useMemo, useEffect } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Modal, Button, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\n\nfunction speciesTaxonId(tid) {\n const n = +tid;\n return n > 1000000 ? Math.floor(n / 1000) : n;\n}\n\nconst EXPERIMENT_KEYS = [\n { key: 'exp:study', label: 'Study' },\n { key: 'exp:type', label: 'Study type' },\n { key: 'exp:organism', label: 'Organism' }\n];\n\n// One record per expression field (one sample group within one study).\n// `props` is a flat map of property-key → value used for filtering and display.\nfunction buildFieldRecords(taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps) {\n const records = [];\n const factorTypes = new Set();\n const charTypes = new Set();\n if (!expressionSamples || !expressionStudies) return { records, factorTypes: [], charTypes: [] };\n\n const studyById = {};\n const list = expressionStudies[taxon] || expressionStudies[speciesTaxonId(taxon)] || [];\n list.forEach(s => { studyById[s._id] = s; });\n\n for (const studyId of studyIds) {\n const study = studyById[studyId];\n if (!study) continue;\n const samples = expressionSamples[studyId];\n if (!samples) continue;\n\n const byGroup = {};\n for (const s of samples) if (!byGroup[s.group]) byGroup[s.group] = s;\n\n for (const group of Object.keys(byGroup)) {\n const sample = byGroup[group];\n const fieldName = `${studyId.replace(/-/g, '_')}_${group}__expr`;\n if (fieldCatalog && fieldCatalog.fields && !fieldCatalog.fields[fieldName]) continue;\n\n const props = {};\n props['exp:study'] = study.description || studyId;\n props['exp:type'] = study.type || '(unknown)';\n const taxon_id = study.taxon_id;\n const taxName = grameneMaps && (grameneMaps[taxon_id] || grameneMaps[speciesTaxonId(taxon_id)]);\n props['exp:organism'] = (taxName && taxName.display_name) || String(taxon_id);\n\n const usedFactorTypes = new Set();\n (sample.factor || []).forEach(f => {\n props[`fac:${f.type}`] = f.label;\n factorTypes.add(f.type);\n usedFactorTypes.add(f.type);\n });\n (sample.characteristic || []).forEach(c => {\n if (usedFactorTypes.has(c.type)) return; // factor takes precedence\n props[`char:${c.type}`] = c.label;\n charTypes.add(c.type);\n });\n\n records.push({ fieldName, studyId, group, props });\n }\n }\n return {\n records,\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n}\n\nfunction fieldMatches(field, selections, excludeKey) {\n for (const key of Object.keys(selections)) {\n if (key === excludeKey) continue;\n const values = selections[key];\n if (!values || values.size === 0) continue;\n const v = field.props[key];\n if (v == null || !values.has(v)) return false;\n }\n return true;\n}\n\nfunction valueCounts(records, key, selections) {\n const counts = new Map();\n for (const f of records) {\n if (!fieldMatches(f, selections, key)) continue;\n const v = f.props[key];\n if (v == null) continue;\n counts.set(v, (counts.get(v) || 0) + 1);\n }\n return counts;\n}\n\nfunction labelForKey(key, tree) {\n for (const grp of tree) {\n for (const t of grp.types) if (t.key === key) return t.label;\n }\n return key;\n}\n\nconst FieldsModalCmp = props => {\n const {\n fieldCatalog,\n exprViz,\n expressionStudies,\n expressionSamples,\n grameneMaps,\n doToggleExprVizFieldsModal,\n doSetExprVizFields,\n doFetchExprVizFieldExistence\n } = props;\n\n const taxon = Object.keys(exprViz.byTaxon).find(t => exprViz.byTaxon[t].fieldsModalOpen);\n const open = !!taxon;\n const availableAttrs = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].availableAttrs;\n\n const studyIds = useMemo(() => {\n if (!taxon || !expressionStudies) return [];\n const list = expressionStudies[taxon] || expressionStudies[speciesTaxonId(taxon)] || [];\n let ids = list.map(s => s._id);\n if (availableAttrs) {\n const allow = new Set(availableAttrs);\n ids = ids.filter(id => allow.has(id));\n }\n return ids;\n }, [taxon, expressionStudies, availableAttrs]);\n\n const allRecords = useMemo(\n () => buildFieldRecords(taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps),\n [taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps]\n );\n\n const candidateFields = useMemo(\n () => allRecords.records.map(r => r.fieldName),\n [allRecords]\n );\n\n // Trigger the field-existence facet check whenever the modal is open and\n // the candidate field list is known. The bundle caches per (q, taxon, fields).\n useEffect(() => {\n if (open && taxon && candidateFields.length > 0) {\n doFetchExprVizFieldExistence(taxon, candidateFields);\n }\n }, [open, taxon, candidateFields, doFetchExprVizFieldExistence]);\n\n const fieldExistence = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].fieldExistence;\n const existenceStatus = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].existenceStatus;\n\n // Once existence counts are loaded, drop fields with no data in the current\n // result set. Until then, render with the full candidate set so the modal\n // doesn't flash empty during the precheck.\n const { records, factorTypes, charTypes } = useMemo(() => {\n if (!fieldExistence) return allRecords;\n const live = new Set(Object.keys(fieldExistence).filter(f => fieldExistence[f] > 0));\n const filtered = allRecords.records.filter(r => live.has(r.fieldName));\n const factorTypes = new Set();\n const charTypes = new Set();\n for (const r of filtered) {\n for (const k of Object.keys(r.props)) {\n if (k.startsWith('fac:')) factorTypes.add(k.slice(4));\n else if (k.startsWith('char:')) charTypes.add(k.slice(5));\n }\n }\n return {\n records: filtered,\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n }, [allRecords, fieldExistence]);\n\n const propTree = useMemo(() => [\n { group: 'experiment', label: 'Experiment', types: EXPERIMENT_KEYS },\n { group: 'factors', label: 'Factors', types: factorTypes.map(t => ({ key: `fac:${t}`, label: t })) },\n { group: 'characteristics', label: 'Characteristics', types: charTypes.map(t => ({ key: `char:${t}`, label: t })) }\n ], [factorTypes, charTypes]);\n\n const [selections, setSelections] = useState({});\n const [expandedKey, setExpandedKey] = useState(null);\n const [collapsedGroups, setCollapsedGroups] = useState({});\n const [valueSort, setValueSort] = useState('count');\n const [orderedSelectedKeys, setOrderedSelectedKeys] = useState([]);\n const [searchQuery, setSearchQuery] = useState('');\n const searchLc = searchQuery.trim().toLowerCase();\n const isSearching = searchLc.length > 0;\n\n // Distinct values per property type, ignoring the type's own selection but\n // applying every other selected type. Counts shown next to a property type\n // reflect \"how many distinct values exist among the fields currently\n // matching the rest of the filter.\"\n const valueSetByKey = useMemo(() => {\n const allKeys = new Set();\n for (const r of records) for (const k of Object.keys(r.props)) allKeys.add(k);\n const m = {};\n for (const key of allKeys) {\n const set = new Set();\n for (const r of records) {\n if (!fieldMatches(r, selections, key)) continue;\n const v = r.props[key];\n if (v != null) set.add(v);\n }\n m[key] = set;\n }\n return m;\n }, [records, selections]);\n\n // Distinct values per property type across the unfiltered candidate set.\n // A type with a single value across every record can't discriminate (e.g.\n // \"Organism\" when every field belongs to the same species), so we hide it\n // from the property tree.\n const totalValueCountByKey = useMemo(() => {\n const m = {};\n for (const r of records) {\n for (const [k, v] of Object.entries(r.props)) {\n if (v == null) continue;\n if (!m[k]) m[k] = new Set();\n m[k].add(v);\n }\n }\n return m;\n }, [records]);\n\n // Reset state when modal (re)opens for a taxon.\n useEffect(() => {\n if (open && taxon) {\n setSelections({});\n setExpandedKey(null);\n setCollapsedGroups({});\n setOrderedSelectedKeys([]);\n setSearchQuery('');\n }\n }, [open, taxon]);\n\n // Keep orderedSelectedKeys in sync with selections (preserves the order in\n // which the user first selected each property type).\n useEffect(() => {\n setOrderedSelectedKeys(prev => {\n const active = Object.keys(selections);\n const activeSet = new Set(active);\n const kept = prev.filter(k => activeSet.has(k));\n const newOnes = active.filter(k => !prev.includes(k));\n return [...kept, ...newOnes];\n });\n }, [selections]);\n\n const matchingFields = useMemo(\n () => records.filter(r => fieldMatches(r, selections, null)),\n [records, selections]\n );\n\n if (!open) return null;\n\n const toggleValue = (key, value) => {\n setSelections(prev => {\n const next = { ...prev };\n const set = new Set(next[key] || []);\n if (set.has(value)) set.delete(value); else set.add(value);\n if (set.size === 0) delete next[key]; else next[key] = set;\n return next;\n });\n };\n\n const clearTypeSelection = (key) => {\n setSelections(prev => {\n if (!prev[key]) return prev;\n const next = { ...prev };\n delete next[key];\n return next;\n });\n };\n\n const toggleGroup = (g) => setCollapsedGroups(prev => ({ ...prev, [g]: !prev[g] }));\n\n const renderValues = (key, typeLabelMatches) => {\n const counts = valueCounts(records, key, selections);\n let entries = Array.from(counts.entries());\n if (isSearching && !typeLabelMatches) {\n entries = entries.filter(([v]) => String(v).toLowerCase().includes(searchLc));\n }\n if (valueSort === 'name') entries.sort((a, b) => String(a[0]).localeCompare(String(b[0])));\n else entries.sort((a, b) => b[1] - a[1] || String(a[0]).localeCompare(String(b[0])));\n const sel = selections[key] || new Set();\n\n return (\n <div className=\"exprviz-tree-values\">\n <div className=\"exprviz-values-toolbar\">\n <ToggleButtonGroup\n type=\"radio\"\n name={`exprviz-vsort-${key}`}\n size=\"sm\"\n value={valueSort}\n onChange={setValueSort}\n >\n <ToggleButton id={`exprviz-vsort-name-${key}`} value=\"name\" variant=\"outline-secondary\">Name</ToggleButton>\n <ToggleButton id={`exprviz-vsort-count-${key}`} value=\"count\" variant=\"outline-secondary\">Count</ToggleButton>\n </ToggleButtonGroup>\n {sel.size > 0 && (\n <Button size=\"sm\" variant=\"link\" onClick={() => clearTypeSelection(key)}>clear</Button>\n )}\n </div>\n {entries.map(([v, c]) => (\n <label key={v} className=\"exprviz-tree-value\">\n <input type=\"checkbox\" checked={sel.has(v)} onChange={() => toggleValue(key, v)} />\n <span className=\"exprviz-tree-value-label\" title={v}>{v}</span>\n <span className=\"exprviz-tree-value-count\">{c}</span>\n </label>\n ))}\n {entries.length === 0 && <em className=\"exprviz-tree-empty\">No values</em>}\n </div>\n );\n };\n\n return (\n <Modal show={open} onHide={() => doToggleExprVizFieldsModal(taxon, false)} size=\"xl\" scrollable>\n <Modal.Header closeButton>\n <Modal.Title>\n Filter expression fields ({matchingFields.length} of {records.length} match)\n {existenceStatus === 'loading' && (\n <span className=\"exprviz-modal-loading\"> · checking field availability…</span>\n )}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"exprviz-fields-layout\">\n <div className=\"exprviz-tree\">\n <input\n type=\"text\"\n className=\"exprviz-tree-search\"\n placeholder=\"Search property types and values…\"\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n />\n {propTree.map(grp => {\n const typeRows = grp.types.map(t => {\n // Hide property types that can't discriminate among the\n // candidates: zero values, or a single value shared by every\n // record. The selection-aware count (valueSetByKey) is what\n // we display; the unfiltered count gates visibility so a type\n // doesn't pop in/out as the user clicks values.\n const totalDistinct = (totalValueCountByKey[t.key] && totalValueCountByKey[t.key].size) || 0;\n if (totalDistinct < 2) return null;\n const numValues = (valueSetByKey[t.key] && valueSetByKey[t.key].size) || 0;\n if (numValues === 0) return null;\n const typeLabelMatches = isSearching && t.label.toLowerCase().includes(searchLc);\n let matchingValueCount = numValues;\n if (isSearching && !typeLabelMatches) {\n const vset = valueSetByKey[t.key] || new Set();\n matchingValueCount = 0;\n for (const v of vset) if (String(v).toLowerCase().includes(searchLc)) matchingValueCount++;\n if (matchingValueCount === 0) return null;\n }\n const sel = selections[t.key];\n const selCount = sel ? sel.size : 0;\n const isExpanded = isSearching ? !typeLabelMatches : (expandedKey === t.key);\n return (\n <div key={t.key} className={`exprviz-tree-type${selCount > 0 ? ' is-active' : ''}`}>\n <div\n className=\"exprviz-tree-type-header\"\n onClick={() => setExpandedKey(isExpanded ? null : t.key)}\n >\n <span className=\"exprviz-tree-caret\">{isExpanded ? '▾' : '▸'}</span>\n <span className=\"exprviz-tree-type-label\">{t.label}</span>\n <span className=\"exprviz-tree-type-count\">\n {selCount > 0 ? `${selCount}/${numValues}` : numValues}\n </span>\n </div>\n {isExpanded && renderValues(t.key, typeLabelMatches)}\n </div>\n );\n }).filter(Boolean);\n if (isSearching && typeRows.length === 0) return null;\n const groupCollapsed = !isSearching && collapsedGroups[grp.group];\n return (\n <div key={grp.group} className=\"exprviz-tree-group\">\n <div className=\"exprviz-tree-group-header\" onClick={() => toggleGroup(grp.group)}>\n <span className=\"exprviz-tree-caret\">{groupCollapsed ? '▶' : '▼'}</span>\n <strong>{grp.label}</strong>\n </div>\n {!groupCollapsed && grp.types.length === 0 && (\n <div className=\"exprviz-tree-empty\"><em>(none)</em></div>\n )}\n {!groupCollapsed && typeRows}\n </div>\n );\n })}\n </div>\n <div className=\"exprviz-fields-preview\">\n {orderedSelectedKeys.length === 0 ? (\n <div className=\"exprviz-fields-placeholder\">\n <em>Select a property type to preview the property values for each matching field.</em>\n </div>\n ) : (\n <table className=\"exprviz-fields-table\">\n <thead>\n <tr>\n {orderedSelectedKeys.map(k => <th key={k}>{labelForKey(k, propTree)}</th>)}\n </tr>\n </thead>\n <tbody>\n {matchingFields.map(f => (\n <tr key={f.fieldName} title={f.fieldName}>\n {orderedSelectedKeys.map(k => <td key={k}>{f.props[k] || ''}</td>)}\n </tr>\n ))}\n {matchingFields.length === 0 && (\n <tr><td colSpan={orderedSelectedKeys.length}><em>No matching fields</em></td></tr>\n )}\n </tbody>\n </table>\n )}\n </div>\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={() => doToggleExprVizFieldsModal(taxon, false)}>\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n disabled={matchingFields.length === 0}\n onClick={() => {\n doSetExprVizFields(taxon, matchingFields.map(f => f.fieldName));\n doToggleExprVizFieldsModal(taxon, false);\n }}\n >\n Apply ({matchingFields.length} fields)\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExprViz',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneMaps',\n 'doToggleExprVizFieldsModal',\n 'doSetExprVizFields',\n 'doFetchExprVizFieldExistence',\n FieldsModalCmp\n);\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { AgGridReact } from 'ag-grid-react';\nimport 'ag-grid-community/styles/ag-grid.css';\nimport 'ag-grid-community/styles/ag-theme-quartz.css';\n\nconst baseColDefs = [\n { field: 'id', headerName: 'Gene ID', pinned: 'left', width: 160, suppressMovable: true },\n { field: 'name', headerName: 'Name', pinned: 'left', width: 140, suppressMovable: true }\n];\n\n// Hoisted so the reference is stable across renders. ag-grid otherwise sees a\n// \"new\" defaultColDef on every parent re-render (e.g. when hovering a row\n// triggers setHoveredId in the parent) and re-applies column state, which\n// snaps any user-resized columns back to their original widths.\nconst DEFAULT_COL_DEF = {\n resizable: true,\n sortable: true,\n filter: false,\n suppressMenu: true\n};\n\nfunction arraysEqual(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\nexport function buildFieldInfo(fields, studies, expressionSamples) {\n const info = {};\n if (!fields || !studies || !expressionSamples) return info;\n const wanted = new Set(fields);\n for (const study of studies) {\n const studyId = study._id;\n const samples = expressionSamples[studyId];\n if (!samples) continue;\n const byGroup = {};\n for (const s of samples) if (!byGroup[s.group]) byGroup[s.group] = s;\n for (const group of Object.keys(byGroup)) {\n const fieldName = `${studyId.replace(/-/g, '_')}_${group}__expr`;\n if (!wanted.has(fieldName)) continue;\n const sample = byGroup[group];\n const factors = {};\n (sample.factor || []).forEach(f => { factors[f.type] = f.label; });\n const characteristics = {};\n (sample.characteristic || []).forEach(c => {\n if (factors[c.type] != null) return;\n characteristics[c.type] = c.label;\n });\n info[fieldName] = {\n studyId,\n studyDescription: study.description || studyId,\n group,\n replicates: samples.filter(s => s.group === group).length,\n factors,\n characteristics\n };\n }\n }\n return info;\n}\n\n// Plain right-aligned label cell for the metadata header rows above the\n// Gene ID / Name columns. Rendered as a React component (instead of\n// relying on ag-grid's default group label) so the alignment is controlled\n// by our own DOM and isn't fighting the quartz theme's CSS.\nconst LabelHeaderGroup = (props) => {\n const { displayName } = props;\n return <div className=\"exprviz-label-header\">{displayName}</div>;\n};\n\n// Same idea, but for the cells that toggle a section between expanded and\n// collapsed. The caret + label sit at the right edge.\nconst ToggleHeaderGroup = (props) => {\n const { displayName, onToggle, expanded, suffix } = props;\n return (\n <div\n className=\"exprviz-toggle-header\"\n onClick={onToggle}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onToggle && onToggle(); } }}\n title={expanded ? 'Click to collapse' : 'Click to expand'}\n >\n <span className=\"exprviz-toggle-caret\">{expanded ? '▼' : '▶'}</span>\n {' '}{displayName}{suffix ? ` ${suffix}` : ''}\n </div>\n );\n};\n\nfunction exprValueFormatter(p) {\n const v = p.value;\n if (v == null) return '';\n if (Array.isArray(v)) return v.join(', ');\n if (typeof v === 'object') return JSON.stringify(v);\n return String(v);\n}\n\n// Discover every distinct factor and characteristic type across the loaded\n// fields. Each becomes one header row (with adjacent equal-value cells\n// merged). Order is alphabetical for stability across reloads.\nfunction collectMetadataTypes(fields, fieldInfo) {\n const factorTypes = new Set();\n const charTypes = new Set();\n for (const f of fields || []) {\n const info = fieldInfo[f];\n if (!info) continue;\n Object.keys(info.factors || {}).forEach(t => factorTypes.add(t));\n Object.keys(info.characteristics || {}).forEach(t => charTypes.add(t));\n }\n return {\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n}\n\n// Wrap a leaf column in N nested column groups so it participates at every\n// header row, with a custom label per level. Lets the Gene ID / Name columns\n// carry the row labels (\"Study\"/\"Factor\"/\"Characteristic\" and the type name).\nfunction wrapLeafWithLabels(leaf, labels) {\n let wrapped = leaf;\n for (let i = labels.length - 1; i >= 0; i--) {\n const label = labels[i];\n const cls = label.headerClass\n ? `${label.headerClass} exprviz-hg-labels`\n : 'exprviz-hg-labels';\n wrapped = {\n headerName: label.headerName,\n headerClass: cls,\n // Always render through one of our components so the alignment and\n // spacing are controlled by our own DOM, not ag-grid's defaults.\n headerGroupComponent: label.headerGroupComponent || LabelHeaderGroup,\n headerGroupComponentParams: label.headerGroupComponentParams,\n children: [wrapped]\n };\n }\n return wrapped;\n}\n\n// Build the column tree:\n// row 1 — Study | Title | <study description>…\n// row 2..(2+F-1) — Factor | <factor type> | <value or blank>…\n// row 2+F..end-1 — Characteristic | <char type> | <value or blank>…\n// leaf row — Gene ID | Name | g3, g4, …\n// Adjacent expression cells sharing the same value at a given level merge\n// (because they're children of one group definition). Blank values for a\n// type that's defined only in other studies render as empty cells, and\n// adjacent blanks under the same parent merge automatically.\nfunction buildColumnDefs(fields, fieldInfo, expanded, toggles) {\n if (!fields || fields.length === 0) return baseColDefs;\n const { factorTypes, charTypes } = collectMetadataTypes(fields, fieldInfo);\n\n const levels = [{ kind: 'study', getValue: (info) => (info && info.studyDescription) || '' }];\n if (expanded.factors) {\n for (const t of factorTypes) {\n levels.push({\n kind: 'factor', type: t,\n getValue: (info) => (info && info.factors && info.factors[t]) || '',\n headerClass: 'exprviz-hg-factors'\n });\n }\n } else if (factorTypes.length > 0) {\n // One placeholder level standing in for the collapsed factor rows.\n levels.push({\n kind: 'factors-collapsed',\n getValue: () => '',\n headerClass: 'exprviz-hg-factors exprviz-hg-collapsed'\n });\n }\n if (expanded.chars) {\n for (const t of charTypes) {\n levels.push({\n kind: 'char', type: t,\n getValue: (info) => (info && info.characteristics && info.characteristics[t]) || '',\n headerClass: 'exprviz-hg-chars'\n });\n }\n } else if (charTypes.length > 0) {\n levels.push({\n kind: 'chars-collapsed',\n getValue: () => '',\n headerClass: 'exprviz-hg-chars exprviz-hg-collapsed'\n });\n }\n\n // Walk fields, opening a new group at level i (and resetting all levels\n // below) the first time the value at level i differs from the previous\n // field's. Same value → same parent group → ag-grid merges the cells.\n const exprTopGroups = [];\n const currentGroups = new Array(levels.length).fill(null);\n const currentKeys = new Array(levels.length).fill(undefined);\n\n for (const f of fields) {\n const info = fieldInfo[f] || {};\n let firstChange = levels.length;\n for (let i = 0; i < levels.length; i++) {\n const key = levels[i].getValue(info);\n if (currentGroups[i] === null || currentKeys[i] !== key) {\n firstChange = i;\n break;\n }\n }\n for (let i = firstChange; i < levels.length; i++) {\n const key = levels[i].getValue(info);\n const group = {\n headerName: key,\n headerClass: levels[i].headerClass,\n children: []\n };\n currentGroups[i] = group;\n currentKeys[i] = key;\n if (i === 0) exprTopGroups.push(group);\n else currentGroups[i - 1].children.push(group);\n }\n\n const leaf = {\n field: f,\n headerName: info.group || f.replace(/__expr$/, ''),\n width: 160,\n suppressMovable: false,\n valueFormatter: exprValueFormatter\n };\n currentGroups[levels.length - 1].children.push(leaf);\n }\n\n // Labels for the two pinned columns. The leftmost column carries the row\n // category (\"Study\" / \"Factor\" / \"Characteristic\"); the next column shows\n // the specific row name (the literal \"Title\" for the study row, then each\n // factor/characteristic type name). The first row of each\n // factor/characteristic section gets a clickable caret that toggles the\n // section between expanded (one row per type) and collapsed (one\n // placeholder row).\n const studyLabels = [{ headerName: 'Study' }];\n const titleLabels = [{ headerName: 'Title' }];\n\n if (expanded.factors) {\n factorTypes.forEach((t, i) => {\n studyLabels.push({\n headerName: 'Factor',\n headerClass: 'exprviz-hg-factors',\n ...(i === 0 ? {\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: { onToggle: toggles.toggleFactors, expanded: true }\n } : {})\n });\n titleLabels.push({ headerName: t, headerClass: 'exprviz-hg-factors' });\n });\n } else if (factorTypes.length > 0) {\n studyLabels.push({\n headerName: 'Factors',\n headerClass: 'exprviz-hg-factors exprviz-hg-collapsed',\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: {\n onToggle: toggles.toggleFactors,\n expanded: false,\n suffix: `(${factorTypes.length})`\n }\n });\n titleLabels.push({ headerName: '', headerClass: 'exprviz-hg-factors exprviz-hg-collapsed' });\n }\n\n if (expanded.chars) {\n charTypes.forEach((t, i) => {\n studyLabels.push({\n headerName: 'Characteristic',\n headerClass: 'exprviz-hg-chars',\n ...(i === 0 ? {\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: { onToggle: toggles.toggleChars, expanded: true }\n } : {})\n });\n titleLabels.push({ headerName: t, headerClass: 'exprviz-hg-chars' });\n });\n } else if (charTypes.length > 0) {\n studyLabels.push({\n headerName: 'Characteristics',\n headerClass: 'exprviz-hg-chars exprviz-hg-collapsed',\n headerGroupComponent: ToggleHeaderGroup,\n headerGroupComponentParams: {\n onToggle: toggles.toggleChars,\n expanded: false,\n suffix: `(${charTypes.length})`\n }\n });\n titleLabels.push({ headerName: '', headerClass: 'exprviz-hg-chars exprviz-hg-collapsed' });\n }\n\n const idCol = wrapLeafWithLabels(baseColDefs[0], studyLabels);\n const nameCol = wrapLeafWithLabels(baseColDefs[1], titleLabels);\n\n return [idCol, nameCol, ...exprTopGroups];\n}\n\nconst ExprTable = ({ rows, fields, onReorder, studies, expressionSamples, onHoverRow }) => {\n const fieldInfo = useMemo(\n () => buildFieldInfo(fields, studies, expressionSamples),\n [fields, studies, expressionSamples]\n );\n\n // Default: factor rows expanded, characteristic rows collapsed (per spec).\n const [expanded, setExpanded] = useState({ factors: true, chars: false });\n const toggleFactors = useCallback(\n () => setExpanded(e => ({ ...e, factors: !e.factors })),\n []\n );\n const toggleChars = useCallback(\n () => setExpanded(e => ({ ...e, chars: !e.chars })),\n []\n );\n\n const columnDefs = useMemo(\n () => buildColumnDefs(fields, fieldInfo, expanded, { toggleFactors, toggleChars }),\n [fields, fieldInfo, expanded, toggleFactors, toggleChars]\n );\n\n const onColumnMoved = (e) => {\n if (!onReorder || !e.finished) return;\n const allCols = e.api.getAllGridColumns ? e.api.getAllGridColumns() : (e.columnApi && e.columnApi.getAllGridColumns && e.columnApi.getAllGridColumns());\n if (!allCols) return;\n const next = allCols\n .map(c => c.getColId())\n .filter(id => fields.includes(id));\n if (!arraysEqual(next, fields)) {\n onReorder(next);\n }\n };\n\n if (!rows || rows.length === 0) {\n return <div className=\"exprviz-table-empty\"><em>No data loaded.</em></div>;\n }\n\n return (\n <div className=\"ag-theme-quartz exprviz-aggrid\">\n <AgGridReact\n rowData={rows}\n columnDefs={columnDefs}\n defaultColDef={DEFAULT_COL_DEF}\n animateRows={false}\n suppressFieldDotNotation={true}\n suppressDragLeaveHidesColumns={true}\n suppressColumnVirtualisation={true}\n groupHeaderHeight={24}\n onColumnMoved={onColumnMoved}\n onCellMouseOver={e => onHoverRow && onHoverRow(e.data && e.data.id)}\n onCellMouseOut={() => onHoverRow && onHoverRow(null)}\n />\n </div>\n );\n};\n\nexport default ExprTable;\n","import React, { useEffect, useRef, useState } from 'react';\nimport * as d3 from 'd3';\n\n// Parallel-coordinates plot with per-axis brushing and drag-to-reorder axes.\n// - Axis labels are draggable horizontally; on drop, onReorder(newOrder) fires.\n// - Brushes on axes intersect (AND): a row is \"in\" only when every active brush contains it.\n// - Numeric fields use a linear or symlog scale; non-numeric values are skipped.\n\nconst MARGIN = { top: 100, right: 24, bottom: 24, left: 32 };\nconst LABEL_ROTATION = -40;\nconst BRUSH_WIDTH = 16;\n\nfunction isNumeric(v) {\n if (v == null) return false;\n if (Array.isArray(v)) return false;\n const n = +v;\n return Number.isFinite(n);\n}\n\nfunction arraysEqual(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n// Powers-of-10 tick values spanning [lo, hi]; includes 0 if the range crosses zero.\n// Clamped to |v| >= 0.1 to keep low-magnitude tick labels from overlapping near 0.\nconst MIN_LOG_TICK = 0.1;\nfunction logTickValues([lo, hi]) {\n const ticks = new Set();\n if (lo <= 0 && hi >= 0) ticks.add(0);\n if (hi >= MIN_LOG_TICK) {\n const start = Math.max(-1, Math.floor(Math.log10(lo > 0 ? lo : MIN_LOG_TICK)));\n const end = Math.ceil(Math.log10(hi));\n for (let p = start; p <= end; p++) {\n const v = Math.pow(10, p);\n if (v >= MIN_LOG_TICK && v <= hi) ticks.add(v);\n }\n }\n if (lo <= -MIN_LOG_TICK) {\n const start = Math.max(-1, Math.floor(Math.log10(hi < 0 ? -hi : MIN_LOG_TICK)));\n const end = Math.ceil(Math.log10(-lo));\n for (let p = start; p <= end; p++) {\n const v = -Math.pow(10, p);\n if (-v >= MIN_LOG_TICK && v >= lo) ticks.add(v);\n }\n }\n return Array.from(ticks).sort((a, b) => a - b);\n}\n\nfunction logTickFormat(v) {\n if (v === 0) return '0';\n const a = Math.abs(v);\n if (a >= 0.01 && a < 10000) return d3.format('~g')(v);\n return d3.format('.0e')(v);\n}\n\nconst ParallelCoordsPlot = ({\n rows,\n fields,\n scale = 'linear',\n onBrushChange,\n onReorder,\n clearVersion = 0,\n hoveredId = null,\n axisLabels = null\n}) => {\n const svgRef = useRef(null);\n const containerRef = useRef(null);\n // selections in data domain: { [field]: [lo, hi] }\n const selectionsRef = useRef({});\n const lastClearRef = useRef(0);\n // Track container size so the d3 render reruns when the user drags the\n // pane resizer (or when the window is resized). The values themselves\n // aren't read inside the effect — the effect always reads clientWidth/\n // clientHeight — but listing them in the deps array is what triggers it.\n const [size, setSize] = useState({ w: 0, h: 0 });\n // Custom HTML tooltip for axis labels — gives us bold labels and structured\n // sections, which the native SVG <title> can't do.\n const [tooltip, setTooltip] = useState(null);\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el || typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n setSize((prev) => {\n if (Math.abs(prev.w - width) < 1 && Math.abs(prev.h - height) < 1) return prev;\n return { w: width, h: height };\n });\n }\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n useEffect(() => {\n if (clearVersion !== lastClearRef.current) {\n selectionsRef.current = {};\n lastClearRef.current = clearVersion;\n if (onBrushChange) onBrushChange({});\n }\n Object.keys(selectionsRef.current).forEach(f => {\n if (!fields || !fields.includes(f)) delete selectionsRef.current[f];\n });\n\n const svg = d3.select(svgRef.current);\n svg.selectAll('*').remove();\n if (!fields || fields.length === 0 || !rows || rows.length === 0) return;\n\n const el = containerRef.current;\n const width = (el && el.clientWidth) || 600;\n const height = (el && el.clientHeight) || 300;\n const innerW = width - MARGIN.left - MARGIN.right;\n const innerH = height - MARGIN.top - MARGIN.bottom;\n\n svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n const g = svg.append('g').attr('transform', `translate(${MARGIN.left},${MARGIN.top})`);\n\n // Mutable order during drag — starts as a copy of fields.\n let order = fields.slice();\n const x = d3.scalePoint().range([0, innerW]).padding(0.5).domain(order);\n\n const yByField = {};\n let globalExt = null;\n if (scale === 'log') {\n const all = [];\n fields.forEach(f => {\n rows.forEach(r => {\n const v = r[f];\n if (isNumeric(v)) all.push(+v);\n });\n });\n globalExt = all.length ? d3.extent(all) : [0, 1];\n }\n fields.forEach(f => {\n if (scale === 'log') {\n yByField[f] = d3.scaleSymlog().domain(globalExt).range([innerH, 0]).nice();\n } else {\n const vals = rows.map(r => r[f]).filter(isNumeric).map(Number);\n const ext = vals.length ? d3.extent(vals) : [0, 1];\n yByField[f] = d3.scaleLinear().domain(ext).range([innerH, 0]).nice();\n }\n });\n\n function pathForRow(row, posOf) {\n const pts = order.map(f => {\n const v = row[f];\n if (!isNumeric(v)) return null;\n return [posOf(f), yByField[f](Number(v))];\n });\n return line(pts);\n }\n\n const line = d3.line()\n .defined(d => d != null && Number.isFinite(d[1]))\n .x(d => d[0])\n .y(d => d[1]);\n\n const linesG = g.append('g').attr('class', 'exprviz-pc-lines');\n const paths = linesG\n .selectAll('path')\n .data(rows)\n .enter()\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', 'steelblue')\n .attr('stroke-width', 1)\n .attr('data-id', d => d && d.id != null ? String(d.id) : null)\n .attr('d', row => pathForRow(row, f => x(f)));\n\n function isBrushedIn(row) {\n for (const f of order) {\n const sel = selectionsRef.current[f];\n if (!sel) continue;\n const v = row[f];\n if (!isNumeric(v)) return false;\n const n = Number(v);\n const [lo, hi] = sel;\n if (n < lo || n > hi) return false;\n }\n return true;\n }\n\n function applyBrushStyles() {\n const anyActive = Object.keys(selectionsRef.current).length > 0;\n paths\n .classed('exprviz-pc-line-in', d => !anyActive || isBrushedIn(d))\n .classed('exprviz-pc-line-out', d => anyActive && !isBrushedIn(d));\n }\n applyBrushStyles();\n\n // axis groups, keyed by field name so D3 can match them across reorders\n const axisG = g.selectAll('.exprviz-pc-axis')\n .data(order, d => d)\n .enter()\n .append('g')\n .attr('class', 'exprviz-pc-axis')\n .attr('transform', d => `translate(${x(d)},0)`);\n\n axisG.each(function(f) {\n const ax = d3.select(this);\n const axisGen = d3.axisLeft(yByField[f]);\n if (scale === 'log') {\n axisGen.tickValues(logTickValues(yByField[f].domain())).tickFormat(logTickFormat);\n } else {\n axisGen.ticks(5);\n }\n ax.call(axisGen);\n\n // Compact axis label. Hovering the label or its drag-handle rect shows\n // a custom HTML tooltip (rendered outside the SVG by React) that can\n // include bold labels and section headings.\n const labelInfo = (axisLabels && axisLabels[f])\n || { short: f.replace(/__expr$/, ''), structured: { studyTitle: f, group: '', factors: [], characteristics: [] } };\n const showTip = (event) => setTooltip({\n x: event.clientX,\n y: event.clientY,\n info: labelInfo.structured\n });\n const moveTip = (event) => setTooltip(t =>\n t ? { ...t, x: event.clientX, y: event.clientY } : null\n );\n const hideTip = () => setTooltip(null);\n\n ax.append('text')\n .attr('class', 'exprviz-pc-axis-label')\n .attr('x', 4).attr('y', -4)\n .attr('text-anchor', 'start')\n .attr('transform', `rotate(${LABEL_ROTATION}, 0, -4)`)\n .attr('fill', '#333')\n .style('font-size', '10px')\n .style('cursor', 'grab')\n .text(labelInfo.short)\n .on('mouseenter', showTip)\n .on('mousemove', moveTip)\n .on('mouseleave', hideTip);\n\n // hit area for grabbing — sits along the rotated label\n ax.append('rect')\n .attr('class', 'exprviz-pc-axis-handle')\n .attr('x', 0).attr('y', -11)\n .attr('width', 140).attr('height', 14)\n .attr('transform', `rotate(${LABEL_ROTATION}, 0, -4)`)\n .attr('fill', 'transparent')\n .style('cursor', 'grab')\n .on('mouseenter', showTip)\n .on('mousemove', moveTip)\n .on('mouseleave', hideTip);\n\n const brush = d3.brushY()\n .extent([[-BRUSH_WIDTH / 2, 0], [BRUSH_WIDTH / 2, innerH]])\n .on('brush end', (event) => {\n const s = event.selection;\n if (!s) {\n delete selectionsRef.current[f];\n } else {\n const y = yByField[f];\n const a = y.invert(s[0]);\n const b = y.invert(s[1]);\n selectionsRef.current[f] = [Math.min(a, b), Math.max(a, b)];\n }\n applyBrushStyles();\n // event.sourceEvent is null when brush.move is called programmatically\n // (e.g. when this effect re-runs and we restore prior selections).\n // Skipping that case avoids a re-render loop with the parent.\n if (event.type === 'end' && event.sourceEvent && onBrushChange) {\n onBrushChange({ ...selectionsRef.current });\n }\n });\n\n const brushG = ax.append('g').attr('class', 'exprviz-pc-brush').call(brush);\n\n const prior = selectionsRef.current[f];\n if (prior) {\n const y = yByField[f];\n const py0 = y(prior[1]);\n const py1 = y(prior[0]);\n if (Number.isFinite(py0) && Number.isFinite(py1)) {\n brushG.call(brush.move, [py0, py1]);\n }\n }\n });\n\n // Drag-to-reorder: while dragging, only the dragged axis moves and the\n // line segments connecting to it are recomputed. Other axes stay put.\n // The new order is computed once at drag end and emitted via onReorder.\n const drag = d3.drag()\n .container(function() { return g.node(); })\n .subject(function(event, d) { return { x: x(d), y: 0 }; })\n .on('start', function(event, d) {\n const axNode = this.parentNode;\n d3.select(axNode).raise().classed('exprviz-pc-axis-dragging', true);\n d3.select(axNode).select('.exprviz-pc-axis-label').style('cursor', 'grabbing');\n linesG.classed('exprviz-pc-lines-dragging', true);\n })\n .on('drag', function(event, d) {\n const axNode = this.parentNode;\n const newX = Math.max(0, Math.min(innerW, event.x));\n d3.select(axNode).attr('transform', `translate(${newX},0)`);\n paths.attr('d', row => pathForRow(row, f => f === d ? newX : x(f)));\n })\n .on('end', function(event, d) {\n const axNode = this.parentNode;\n const newX = Math.max(0, Math.min(innerW, event.x));\n d3.select(axNode).classed('exprviz-pc-axis-dragging', false);\n d3.select(axNode).select('.exprviz-pc-axis-label').style('cursor', 'grab');\n linesG.classed('exprviz-pc-lines-dragging', false);\n\n const newOrder = order.slice().sort((a, b) => {\n const xa = a === d ? newX : x(a);\n const xb = b === d ? newX : x(b);\n return xa - xb;\n });\n\n if (onReorder && !arraysEqual(newOrder, fields)) {\n // Snap the dragged axis to its target slot for the brief moment\n // before the parent re-renders with the new order.\n x.domain(newOrder);\n d3.select(axNode).attr('transform', `translate(${x(d)},0)`);\n paths.attr('d', row => pathForRow(row, f => x(f)));\n onReorder(newOrder);\n } else {\n // No order change — restore the dragged axis to its original slot.\n d3.select(axNode).attr('transform', `translate(${x(d)},0)`);\n paths.attr('d', row => pathForRow(row, f => x(f)));\n }\n });\n\n axisG.selectAll('.exprviz-pc-axis-label, .exprviz-pc-axis-handle').call(drag);\n }, [rows, fields, scale, onBrushChange, onReorder, clearVersion, axisLabels, size.w, size.h]);\n\n // Highlight the polyline matching the hovered row id without rebuilding the\n // SVG. Raises the highlighted path so it draws above its neighbors.\n useEffect(() => {\n const svg = d3.select(svgRef.current);\n if (svg.empty()) return;\n const paths = svg.selectAll('.exprviz-pc-lines path');\n paths.classed('exprviz-pc-line-hover', false);\n if (hoveredId == null) return;\n const target = paths.filter(function() {\n return this.getAttribute('data-id') === String(hoveredId);\n });\n target.classed('exprviz-pc-line-hover', true).raise();\n }, [hoveredId, rows, fields, scale]);\n\n if (!fields || fields.length === 0) {\n return <div className=\"exprviz-plot-empty\"><em>Select fields to plot.</em></div>;\n }\n\n return (\n <div ref={containerRef} className=\"exprviz-pc-container\">\n <svg ref={svgRef} width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\"/>\n {tooltip && <AxisTooltip x={tooltip.x} y={tooltip.y} info={tooltip.info}/>}\n </div>\n );\n};\n\n// Position-fixed so it can escape the plot pane's clipping. Offset slightly\n// from the cursor and clamped to the viewport so it never spills off-screen.\nconst AxisTooltip = ({ x, y, info }) => {\n const ref = useRef(null);\n const [pos, setPos] = useState({ left: x + 12, top: y + 12 });\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let left = x + 12;\n let top = y + 12;\n if (left + w > vw - 4) left = Math.max(4, x - 12 - w);\n if (top + h > vh - 4) top = Math.max(4, y - 12 - h);\n setPos({ left, top });\n }, [x, y, info]);\n const { studyTitle, group, factors, characteristics } = info;\n return (\n <div ref={ref} className=\"exprviz-pc-tooltip\" style={pos}>\n <div><span className=\"exprviz-pc-tip-key\">Study:</span> {studyTitle}{group ? ` (${group})` : ''}</div>\n {factors.length > 0 && (\n <>\n <div className=\"exprviz-pc-tip-section\">Factors</div>\n {factors.map((p, i) => (\n <div key={`f-${i}`} className=\"exprviz-pc-tip-row\">\n <span className=\"exprviz-pc-tip-key\">{p.name}:</span> {p.value}\n </div>\n ))}\n </>\n )}\n {characteristics.length > 0 && (\n <>\n <div className=\"exprviz-pc-tip-section\">Characteristics</div>\n {characteristics.map((p, i) => (\n <div key={`c-${i}`} className=\"exprviz-pc-tip-row\">\n <span className=\"exprviz-pc-tip-key\">{p.name}:</span> {p.value}\n </div>\n ))}\n </>\n )}\n </div>\n );\n};\n\nexport default ParallelCoordsPlot;\n","import React, { useMemo, useState } from 'react'\nimport { Button, Modal } from 'react-bootstrap'\nimport { connect } from \"redux-bundler-react\";\nimport { getFirebaseApp } from \"./utils\";\nimport { getAuth, onAuthStateChanged, signOut, GoogleAuthProvider, signInWithPopup } from \"firebase/auth\";\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst provider = new GoogleAuthProvider();\n\nconst Auth = props => {\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n const [user, setUser] = useState({});\n const [open, setOpen] = useState(true);\n if (!auth) return null;\n onAuthStateChanged(auth, (user) => setUser(user));\n\n function handleLogin() {\n signInWithPopup(auth, provider)\n .then((result) => {\n setUser(result.user)\n }).catch((err) => {\n console.log(err)\n });\n }\n function handleLogout() {\n signOut(auth)\n .then(() => {\n setUser(null);\n }).catch((err) => {\n console.log(err)\n });\n }\n return (\n <div className={props.configuration.id === 'sorghum' ? 'sorghumbase-auth-container': 'gramene-auth-container'}>\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>Account</b>\n <span className=\"sidebar-section-actions\">\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">\n <div>\n {user\n ? <Button size=\"sm\" variant=\"success\" onClick={handleLogout}>{user.displayName}</Button>\n : <Button size=\"sm\" variant=\"success\" onClick={handleLogin}>Login</Button>\n }\n </div>\n </div>}\n </div>\n </div>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n Auth\n)\n"],"names":[],"version":3,"file":"index.js.map"}
|