gramene-search 1.2.78 → 1.2.79

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.
@@ -1,2 +1,2 @@
1
- 385626124
2
- 1698601055032647000
1
+ 411207239
2
+ 1698676733984303000
Binary file
Binary file
Binary file
Binary file
Binary file
package/dist/index.js CHANGED
@@ -3255,6 +3255,8 @@ const $6c5c4f90059875bf$var$ClosestOrthologCmp = (props)=>{
3255
3255
  taxon_id = gene.model_rep_taxon_id;
3256
3256
  className = "model-ortholog";
3257
3257
  }
3258
+ var isZm = new RegExp(/^Zm00001e/);
3259
+ if (isZm.test(desc)) desc = "";
3258
3260
  return /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)("div", {
3259
3261
  className: className,
3260
3262
  onClick: ()=>{
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["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/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/Xrefs.js","src/components/results/details/Publications.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/TaxonomyModal.js"],"sourcesContent":["import bundles from './bundles';\nimport resultList from './components/resultList';\nimport resultSummary from './components/resultSummary';\nimport suggestions from './components/suggestions';\nimport {Status, Filters, Results, Views} from './components/geneSearchUI';\n\nexport { bundles, resultList, resultSummary, suggestions, Status, Filters, Results, Views };\n","import apiBundles from './api'\nimport filterBundle from './filters'\nimport viewsBundle from './views'\nimport docsBundle from './docs'\nimport genomesBundle from './genomes'\n\nexport default [...apiBundles, docsBundle, filterBundle, viewsBundle, genomesBundle];","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='200' 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];\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)';\n\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 return fetch(`${store.selectGrameneAPI()}/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`)\n .then(res => res.json())\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]) {\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) return suggestionsRaw.data.grouped.category.matches + ' terms';\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 => _.keyBy(maps, 'taxon_id'))\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\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=2&since=12-12-2029`)\n .then(res => res.json())\n .then(curation => _.keyBy(curation.genes, 'gene_id'))\n }\n});\ncuratedGenes.reactCuratedGenes = createSelector(\n 'selectCuratedGenesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchCuratedGenes' }\n }\n }\n);\n\nconst grameneExpressionStudies = createAsyncResourceBundle( {\n name: 'grameneExpressionStudies',\n actionBaseType: 'GRAMENE_EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.keyBy(res, '_id'))\n }\n});\ngrameneExpressionStudies.reactGrameneExpressionStudies = createSelector(\n 'selectGrameneExpressionStudiesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneExpressionStudies' }\n }\n }\n);\n\nconst 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});\ngrameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n 'selectGrameneExpressionAssaysShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneExpressionAssays' }\n }\n }\n);\n\nconst attribFacetFields = [\n \"{!facet.limit='10' facet.mincount='1' key='age'}panset_age_attr_s\",\n \"{!facet.limit='100' facet.mincount='1' key='taxa'}panset_ntaxa_attr_i\",\n \"{!facet.limit='100' facet.mincount='1' key='AED' type='range' start=0 end=1.0 gap=0.25}MAKER_AED_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI2' type='range' start=0 end=1.0 gap=0.25}MAKER_QI2_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI3' type='range' start=0 end=1.0 gap=0.25}MAKER_QI3_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI4' type='range' start=0 end=1.0 gap=0.25}MAKER_QI4_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI5' type='range' start=0 end=1.0 gap=0.25}MAKER_QI5_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI6' type='range' start=0 end=1.0 gap=0.25}MAKER_QI6_attr_f\"\n];\nconst attribFacets = {\n \"age\":{ \"type\": \"terms\", \"field\": \"panset_age_attr_s\" },\n \"nTaxa\": { \"type\": \"terms\", \"field\": \"panset_ntaxa_attr_i\", \"limit\": 100 },\n \"AED\":{ \"type\": \"range\", \"field\": \"MAKER_AED_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI2\":{ \"type\": \"range\", \"field\": \"MAKER_QI2_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI3\":{ \"type\": \"range\", \"field\": \"MAKER_QI3_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI4\":{ \"type\": \"range\", \"field\": \"MAKER_QI4_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI5\":{ \"type\": \"range\", \"field\": \"MAKER_QI5_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI6\":{ \"type\": \"range\", \"field\": \"MAKER_QI6_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"byAge\":{ \"type\": \"terms\", \"field\": \"panset_age_attr_s\", \"facet\": {\n \"nTaxa\": { \"type\": \"terms\", \"field\": \"panset_ntaxa_attr_i\", \"limit\": 100 },\n \"AED\":{ \"type\": \"range\", \"field\": \"MAKER_AED_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI2\":{ \"type\": \"range\", \"field\": \"MAKER_QI2_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI3\":{ \"type\": \"range\", \"field\": \"MAKER_QI3_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI4\":{ \"type\": \"range\", \"field\": \"MAKER_QI4_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI5\":{ \"type\": \"range\", \"field\": \"MAKER_QI5_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI6\":{ \"type\": \"range\", \"field\": \"MAKER_QI6_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 }\n }\n }\n}\nconst grameneGeneAttribs = createAsyncResourceBundle( {\n name: 'grameneGeneAttribs',\n actionBaseType: 'GRAMENE_GENE_ATTRIBS',\n persist: false,\n getPromise: ({store}) => {\n const g = store.selectGrameneGenomes();\n const taxa = Object.keys(g.active);\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()}&json.facet=${JSON.stringify(attribFacets)}&rows=0${fq}`)\n // return fetch(`${store.selectGrameneAPI()}/search?rows=1&q=MAKER_AED_attr_f:*&json.facet=${JSON.stringify(attribFacets)}`)\n .then(res => res.json())\n .then(res => {\n return res.facets\n })\n }\n});\ngrameneGeneAttribs.reactGrameneGeneAttribs = createSelector(\n 'selectGrameneGeneAttribsShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViews',\n (shouldUpdate, status, views) => {\n if (shouldUpdate && (status === 'finished' || status === 'ready')) {\n const byId = _.keyBy(views.options,'id');\n if (byId.attribs.show === \"on\") {\n return { actionCreator: 'doFetchGrameneGeneAttribs' }\n }\n }\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 taxa = Object.keys(g.active);\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}`)\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 (shouldUpdate, status) => {\n if (shouldUpdate && status === 'search') {\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\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, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, curatedGenes, grameneGeneAttribs];//, grameneExpressionStudies, grameneExpressionAssays];\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 return Object.assign({}, state, {status: 'search'});\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('suggestion')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(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;","const grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off'\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on'\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on'\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'off'\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 };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_VIEW_TOGGLED':\n newState = Object.assign({},state);\n newState.options[payload].show = newState.options[payload].show === 'on' ? 'off' : 'on';\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 selectGrameneViews: state => state.grameneViews,\n};\n\nexport default grameneViews;","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\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_REQUESTED':\n // newState = Object.assign({}, state);\n // payload.forEach(id => {\n // if (!state.pathways.hasOwnProperty(id)) {\n // newState.pathways[id] = {};\n // }\n // });\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 '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 }\n return state;\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 === 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 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 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 selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression\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 default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_TOGGLED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\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;","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 console.log('showMatches',text, x, match);\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}\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 </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 </Button>\n )}\n </div>\n })}\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { OverlayTrigger, Popover} from 'react-bootstrap'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash } 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 ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs\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', backgroundColor:'dimgray', 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} |&nbsp;{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 if (props.grameneFilters.rightIdx > 1) {\n return <div className='gramene-filter-container'>\n <b>Filters</b>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doClearGrameneFilters}><BsTrash/></span>\n <Filter node={props.grameneFilters}\n moveCopyMode={props.grameneFilters.moveCopyMode}\n showMarked={props.grameneFilters.showMarked}\n actions={actions}/>\n </div>\n }\n else {\n return <div className='gramene-filter-container'>\n <b>Filters</b>\n <div className='gramene-filter gramene-filter-AND'>No filters defined</div>\n </div>\n }\n};\n\nconst Filters = connect(\n 'selectGrameneFilters',\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.filter((v,idx) => {\n v.idx = idx;\n return v.show === 'on'\n });\n return props.grameneFilters.rightIdx > 0 ? (\n <div style={{padding:'10px'}}>\n {activeViews.map(v => {\n let p = Object.assign({}, props);\n p.key = v.idx;\n return (\n <div key={v.idx}>\n {/*<Alert variant=\"primary\" onClose={() => props.doToggleGrameneView(v.idx)} dismissible>*/}\n {/* {v.name}*/}\n {/*</Alert>*/}\n {React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doToggleGrameneView',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <b>Views</b>\n {/*{props.grameneViews.options.map((view,idx) => (*/}\n {/* <div key={idx}>*/}\n {/* <input type=\"checkbox\" className='toggle-switch' id={`toggle${idx}`} onChange={(e) => {*/}\n {/* if (view.show !== 'disabled') {*/}\n {/* props.doToggleGrameneView(idx)*/}\n {/* }*/}\n {/* }} disabled={view.show === 'disabled'} checked={view.show === 'on'}/>*/}\n {/* <label for={`toggle${idx}`}>{view.show}</label>{view.name}*/}\n {/* </div>*/}\n {/*))}*/}\n <ul className={'gramene-view'}>\n {props.grameneViews.options.map((view,idx) => (\n <li key={idx} className={`gramene-view-${view.show}`}\n onClick={(e) => {\n if (view.show !== 'disabled') {\n props.doToggleGrameneView(idx)\n }\n }}\n >{view.name}</li>\n ))}\n </ul>\n {/*<div>*/}\n {/* &nbsp;Key:*/}\n {/* <ul className={'gramene-view'}>*/}\n {/* <li className='gramene-view-on'>On</li>*/}\n {/* <li className='gramene-view-off'>Off</li>*/}\n {/* <li className='gramene-view-disabled'>Disabled</li>*/}\n {/* </ul>*/}\n {/*</div>*/}\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views};","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 Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\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 location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\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 + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst ClosestOrthologCmp = (props) =>\n{\n let id, taxon_id, name, desc, species, className;\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 }\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 }\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 <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\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: [\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 expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => hasData[c]=true);\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.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\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 <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\">&nbsp;{searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {numWordsInDescription > 1 && <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 ensemblURL={props.configuration.ensemblURL}\n ensemblRest={props.configuration.ensemblRest}\n panSite={props.configuration.panSite}\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 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 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab} from 'react-bootstrap';\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n let paralogs_url;\n let efp_browser;\n let gene_url = `/static/atlasWidget.html?reference=0&genes=${gene.atlas_id || gene._id}`;\n if (gene.taxon_id === 4558) {\n // efp_browser = `https://bar.utoronto.ca/api/efp_image/efp_sorghum/Stress_Atlas/Absolute/${gene._id.replace('SORBI_3','Sobic.')}`\n // efp_browser = `https://bar.utoronto.ca/api/efp_image/efp_sorghum/`\n // efp_browser = `https://bar.utoronto.ca/~asher/efp_sorghum/cgi-bin/efpWeb.cgi?dataSource=Developmental_Atlas&mode=Absolute&primaryGene=${gene._id.replace('SORBI_3','Sobic.')}`\n }\n if (props.paralogExpression && props.paralogExpression[gene._id]) {\n let paralogs = props.paralogExpression[gene._id].map(p => p.atlas_id || p.id);\n if (paralogs.length > 1) {\n paralogs_url= `/static/atlasWidget.html?reference=1&genes=${paralogs.join(' ')}`;\n }\n }\n else {\n props.doRequestParalogExpression(gene._id)\n }\n return <Tabs>\n <Tab eventKey=\"gene\" title=\"All Studies\">\n <iframe src={gene_url} frameBorder=\"0\" width=\"100%\" height=\"500px\"></iframe>\n </Tab>\n {paralogs_url && <Tab eventKey=\"paralogs\" title=\"Reference Study (all paralogs)\">\n <iframe src={paralogs_url} frameBorder=\"0\" width=\"100%\" height=\"500px\"></iframe>\n </Tab>}\n {efp_browser && <Tab eventKey=\"eFP\" title=\"eFP browser (BAR)\">\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectParalogExpression',\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 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 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","export 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.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()}&nbsp;{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// 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.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.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// };","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 = {};\n }\n\n initDiagram() {\n this.diagram = Reactome.Diagram.create({\n proxyPrefix: reactomeURL, //'//plantreactome.gramene.org', //'//plantreactomedev.oicr.on.ca', ////cord3084-pc7.science.oregonstate.edu', // reactomedev.oicr.on.ca\n placeHolder: this.holderId,\n width: this.divWrapper.clientWidth - 350 - 1,\n height: 500\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 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 }\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 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 }\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 return (\n <div ref={(div) => {this.divWrapper = div;}}>\n <div style={{width:350, height: 500, overflow:'scroll', float:'left'}}>{this.renderHierarchy()}</div>\n <div id={this.holderId}/>\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 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 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 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 };\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 render() {\n let selectedTaxa = {};\n if (this.props.grameneSearch && 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 }\n else {\n selectedTaxa = this.props.grameneGenomes.active;\n }\n return (\n <div className=\"results-vis big-vis\">\n {this.props.grameneTaxDist && <button type=\"button\"\n className=\"btn btn-primary btn-sm\"\n onClick={this.toggleEmpties.bind(this)}>\n {this.state.collapseEmpties ? 'Expand' : 'Collapse'} empty branches\n </button>}\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 'selectGrameneTaxDist',\n 'selectGrameneGenomes',\n 'selectGrameneSearch',\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&nbsp;|<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 React from 'react'\nimport { connect } from 'redux-bundler-react'\n\nclass GeneAttribs extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n render() {\n return (\n <div className=\"gramene-attribs\">\n {this.props.grameneGeneAttribs && <pre>hi</pre>}\n </div>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneGeneAttribs',\n GeneAttribs\n);\n","import React from \"react\";\nimport { connect } from 'redux-bundler-react'\nimport { Modal, Button } from \"react-bootstrap\";\n\nclass TaxonomyModal extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n genomes : Object.values(props.grameneMaps).sort((a,b) => a.left_index - b.left_index)\n };\n if (Object.keys(props.grameneGenomes.active).length === 0) {\n this.state.genomes.forEach(g => {\n g.selected = true;\n })\n }\n else {\n this.state.genomes.forEach(g => {\n g.selected = props.grameneGenomes.active[g.taxon_id];\n })\n }\n }\n getSelectedGenomes() {\n let selected = {};\n let notAll = false;\n this.state.genomes.forEach(g => {\n if (g.selected) {\n selected[g.taxon_id] = true;\n }\n else {\n notAll = true;\n }\n });\n return notAll ? selected : {};\n }\n handleChange(e) {\n const idx = +e.target.value;\n let newState = Object.assign({},this.state);\n newState.genomes[idx].selected = !newState.genomes[idx].selected;\n this.setState(newState);\n }\n handleClose() {\n this.props.doUpdateGrameneGenomes(this.getSelectedGenomes())\n }\n selectAll() {\n const genomes = this.state.genomes.map(g => {g.selected = true; return g});\n this.setState({genomes});\n }\n selectNone() {\n const genomes = this.state.genomes.map(g => {g.selected = false; return g});\n this.setState({genomes});\n }\n renderGenomes() {\n return (\n <div>\n {this.state.genomes.map((m,idx) => {\n return (\n <div key={idx}>\n <input checked={m.selected}\n onChange={this.handleChange.bind(this)}\n type=\"checkbox\"\n value={idx}\n />\n {' '}{m.display_name}\n </div>\n )\n })}\n <Button onClick={this.handleClose.bind(this)}>Submit</Button>\n </div>\n )\n }\n render() {\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 {this.renderGenomes()}\n </Modal.Body>\n </Modal>\n )\n }\n};\n\nexport default connect(\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'doUpdateGrameneGenomes',\n TaxonomyModal\n)\n"],"names":[],"version":3,"file":"index.js.map"}
1
+ {"mappings":"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","sources":["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/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/Xrefs.js","src/components/results/details/Publications.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/TaxonomyModal.js"],"sourcesContent":["import bundles from './bundles';\nimport resultList from './components/resultList';\nimport resultSummary from './components/resultSummary';\nimport suggestions from './components/suggestions';\nimport {Status, Filters, Results, Views} from './components/geneSearchUI';\n\nexport { bundles, resultList, resultSummary, suggestions, Status, Filters, Results, Views };\n","import apiBundles from './api'\nimport filterBundle from './filters'\nimport viewsBundle from './views'\nimport docsBundle from './docs'\nimport genomesBundle from './genomes'\n\nexport default [...apiBundles, docsBundle, filterBundle, viewsBundle, genomesBundle];","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='200' 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];\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)';\n\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 return fetch(`${store.selectGrameneAPI()}/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`)\n .then(res => res.json())\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]) {\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) return suggestionsRaw.data.grouped.category.matches + ' terms';\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 => _.keyBy(maps, 'taxon_id'))\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\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=2&since=12-12-2029`)\n .then(res => res.json())\n .then(curation => _.keyBy(curation.genes, 'gene_id'))\n }\n});\ncuratedGenes.reactCuratedGenes = createSelector(\n 'selectCuratedGenesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchCuratedGenes' }\n }\n }\n);\n\nconst grameneExpressionStudies = createAsyncResourceBundle( {\n name: 'grameneExpressionStudies',\n actionBaseType: 'GRAMENE_EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.keyBy(res, '_id'))\n }\n});\ngrameneExpressionStudies.reactGrameneExpressionStudies = createSelector(\n 'selectGrameneExpressionStudiesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneExpressionStudies' }\n }\n }\n);\n\nconst 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});\ngrameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n 'selectGrameneExpressionAssaysShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneExpressionAssays' }\n }\n }\n);\n\nconst attribFacetFields = [\n \"{!facet.limit='10' facet.mincount='1' key='age'}panset_age_attr_s\",\n \"{!facet.limit='100' facet.mincount='1' key='taxa'}panset_ntaxa_attr_i\",\n \"{!facet.limit='100' facet.mincount='1' key='AED' type='range' start=0 end=1.0 gap=0.25}MAKER_AED_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI2' type='range' start=0 end=1.0 gap=0.25}MAKER_QI2_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI3' type='range' start=0 end=1.0 gap=0.25}MAKER_QI3_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI4' type='range' start=0 end=1.0 gap=0.25}MAKER_QI4_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI5' type='range' start=0 end=1.0 gap=0.25}MAKER_QI5_attr_f\",\n \"{!facet.limit='100' facet.mincount='1' key='QI6' type='range' start=0 end=1.0 gap=0.25}MAKER_QI6_attr_f\"\n];\nconst attribFacets = {\n \"age\":{ \"type\": \"terms\", \"field\": \"panset_age_attr_s\" },\n \"nTaxa\": { \"type\": \"terms\", \"field\": \"panset_ntaxa_attr_i\", \"limit\": 100 },\n \"AED\":{ \"type\": \"range\", \"field\": \"MAKER_AED_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI2\":{ \"type\": \"range\", \"field\": \"MAKER_QI2_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI3\":{ \"type\": \"range\", \"field\": \"MAKER_QI3_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI4\":{ \"type\": \"range\", \"field\": \"MAKER_QI4_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI5\":{ \"type\": \"range\", \"field\": \"MAKER_QI5_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI6\":{ \"type\": \"range\", \"field\": \"MAKER_QI6_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"byAge\":{ \"type\": \"terms\", \"field\": \"panset_age_attr_s\", \"facet\": {\n \"nTaxa\": { \"type\": \"terms\", \"field\": \"panset_ntaxa_attr_i\", \"limit\": 100 },\n \"AED\":{ \"type\": \"range\", \"field\": \"MAKER_AED_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI2\":{ \"type\": \"range\", \"field\": \"MAKER_QI2_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI3\":{ \"type\": \"range\", \"field\": \"MAKER_QI3_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI4\":{ \"type\": \"range\", \"field\": \"MAKER_QI4_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI5\":{ \"type\": \"range\", \"field\": \"MAKER_QI5_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 },\n \"QI6\":{ \"type\": \"range\", \"field\": \"MAKER_QI6_attr_f\", \"start\": 0.0, \"end\": 1.0, \"gap\": 0.25 }\n }\n }\n}\nconst grameneGeneAttribs = createAsyncResourceBundle( {\n name: 'grameneGeneAttribs',\n actionBaseType: 'GRAMENE_GENE_ATTRIBS',\n persist: false,\n getPromise: ({store}) => {\n const g = store.selectGrameneGenomes();\n const taxa = Object.keys(g.active);\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()}&json.facet=${JSON.stringify(attribFacets)}&rows=0${fq}`)\n // return fetch(`${store.selectGrameneAPI()}/search?rows=1&q=MAKER_AED_attr_f:*&json.facet=${JSON.stringify(attribFacets)}`)\n .then(res => res.json())\n .then(res => {\n return res.facets\n })\n }\n});\ngrameneGeneAttribs.reactGrameneGeneAttribs = createSelector(\n 'selectGrameneGeneAttribsShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViews',\n (shouldUpdate, status, views) => {\n if (shouldUpdate && (status === 'finished' || status === 'ready')) {\n const byId = _.keyBy(views.options,'id');\n if (byId.attribs.show === \"on\") {\n return { actionCreator: 'doFetchGrameneGeneAttribs' }\n }\n }\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 taxa = Object.keys(g.active);\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}`)\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 (shouldUpdate, status) => {\n if (shouldUpdate && status === 'search') {\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\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, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, curatedGenes, grameneGeneAttribs];//, grameneExpressionStudies, grameneExpressionAssays];\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 return Object.assign({}, state, {status: 'search'});\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('suggestion')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(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;","const grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off'\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on'\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on'\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'off'\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 };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_VIEW_TOGGLED':\n newState = Object.assign({},state);\n newState.options[payload].show = newState.options[payload].show === 'on' ? 'off' : 'on';\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 selectGrameneViews: state => state.grameneViews,\n};\n\nexport default grameneViews;","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\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_REQUESTED':\n // newState = Object.assign({}, state);\n // payload.forEach(id => {\n // if (!state.pathways.hasOwnProperty(id)) {\n // newState.pathways[id] = {};\n // }\n // });\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 '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 }\n return state;\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 === 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 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 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 selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression\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 default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_TOGGLED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\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;","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 console.log('showMatches',text, x, match);\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}\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 </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 </Button>\n )}\n </div>\n })}\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { OverlayTrigger, Popover} from 'react-bootstrap'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash } 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 ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs\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', backgroundColor:'dimgray', 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} |&nbsp;{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 if (props.grameneFilters.rightIdx > 1) {\n return <div className='gramene-filter-container'>\n <b>Filters</b>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doClearGrameneFilters}><BsTrash/></span>\n <Filter node={props.grameneFilters}\n moveCopyMode={props.grameneFilters.moveCopyMode}\n showMarked={props.grameneFilters.showMarked}\n actions={actions}/>\n </div>\n }\n else {\n return <div className='gramene-filter-container'>\n <b>Filters</b>\n <div className='gramene-filter gramene-filter-AND'>No filters defined</div>\n </div>\n }\n};\n\nconst Filters = connect(\n 'selectGrameneFilters',\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.filter((v,idx) => {\n v.idx = idx;\n return v.show === 'on'\n });\n return props.grameneFilters.rightIdx > 0 ? (\n <div style={{padding:'10px'}}>\n {activeViews.map(v => {\n let p = Object.assign({}, props);\n p.key = v.idx;\n return (\n <div key={v.idx}>\n {/*<Alert variant=\"primary\" onClose={() => props.doToggleGrameneView(v.idx)} dismissible>*/}\n {/* {v.name}*/}\n {/*</Alert>*/}\n {React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doToggleGrameneView',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <b>Views</b>\n {/*{props.grameneViews.options.map((view,idx) => (*/}\n {/* <div key={idx}>*/}\n {/* <input type=\"checkbox\" className='toggle-switch' id={`toggle${idx}`} onChange={(e) => {*/}\n {/* if (view.show !== 'disabled') {*/}\n {/* props.doToggleGrameneView(idx)*/}\n {/* }*/}\n {/* }} disabled={view.show === 'disabled'} checked={view.show === 'on'}/>*/}\n {/* <label for={`toggle${idx}`}>{view.show}</label>{view.name}*/}\n {/* </div>*/}\n {/*))}*/}\n <ul className={'gramene-view'}>\n {props.grameneViews.options.map((view,idx) => (\n <li key={idx} className={`gramene-view-${view.show}`}\n onClick={(e) => {\n if (view.show !== 'disabled') {\n props.doToggleGrameneView(idx)\n }\n }}\n >{view.name}</li>\n ))}\n </ul>\n {/*<div>*/}\n {/* &nbsp;Key:*/}\n {/* <ul className={'gramene-view'}>*/}\n {/* <li className='gramene-view-on'>On</li>*/}\n {/* <li className='gramene-view-off'>Off</li>*/}\n {/* <li className='gramene-view-disabled'>Disabled</li>*/}\n {/* </ul>*/}\n {/*</div>*/}\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views};","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 Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\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 location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\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 + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst ClosestOrthologCmp = (props) =>\n{\n let id, taxon_id, name, desc, species, className;\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 }\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 }\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 <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\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: [\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 expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => hasData[c]=true);\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.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\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 <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\">&nbsp;{searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {numWordsInDescription > 1 && <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 ensemblURL={props.configuration.ensemblURL}\n ensemblRest={props.configuration.ensemblRest}\n panSite={props.configuration.panSite}\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 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 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab} from 'react-bootstrap';\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n let paralogs_url;\n let efp_browser;\n let gene_url = `/static/atlasWidget.html?reference=0&genes=${gene.atlas_id || gene._id}`;\n if (gene.taxon_id === 4558) {\n // efp_browser = `https://bar.utoronto.ca/api/efp_image/efp_sorghum/Stress_Atlas/Absolute/${gene._id.replace('SORBI_3','Sobic.')}`\n // efp_browser = `https://bar.utoronto.ca/api/efp_image/efp_sorghum/`\n // efp_browser = `https://bar.utoronto.ca/~asher/efp_sorghum/cgi-bin/efpWeb.cgi?dataSource=Developmental_Atlas&mode=Absolute&primaryGene=${gene._id.replace('SORBI_3','Sobic.')}`\n }\n if (props.paralogExpression && props.paralogExpression[gene._id]) {\n let paralogs = props.paralogExpression[gene._id].map(p => p.atlas_id || p.id);\n if (paralogs.length > 1) {\n paralogs_url= `/static/atlasWidget.html?reference=1&genes=${paralogs.join(' ')}`;\n }\n }\n else {\n props.doRequestParalogExpression(gene._id)\n }\n return <Tabs>\n <Tab eventKey=\"gene\" title=\"All Studies\">\n <iframe src={gene_url} frameBorder=\"0\" width=\"100%\" height=\"500px\"></iframe>\n </Tab>\n {paralogs_url && <Tab eventKey=\"paralogs\" title=\"Reference Study (all paralogs)\">\n <iframe src={paralogs_url} frameBorder=\"0\" width=\"100%\" height=\"500px\"></iframe>\n </Tab>}\n {efp_browser && <Tab eventKey=\"eFP\" title=\"eFP browser (BAR)\">\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectParalogExpression',\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 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 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","export 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.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()}&nbsp;{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// 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.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.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// };","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 = {};\n }\n\n initDiagram() {\n this.diagram = Reactome.Diagram.create({\n proxyPrefix: reactomeURL, //'//plantreactome.gramene.org', //'//plantreactomedev.oicr.on.ca', ////cord3084-pc7.science.oregonstate.edu', // reactomedev.oicr.on.ca\n placeHolder: this.holderId,\n width: this.divWrapper.clientWidth - 350 - 1,\n height: 500\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 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 }\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 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 }\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 return (\n <div ref={(div) => {this.divWrapper = div;}}>\n <div style={{width:350, height: 500, overflow:'scroll', float:'left'}}>{this.renderHierarchy()}</div>\n <div id={this.holderId}/>\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 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 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 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 };\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 render() {\n let selectedTaxa = {};\n if (this.props.grameneSearch && 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 }\n else {\n selectedTaxa = this.props.grameneGenomes.active;\n }\n return (\n <div className=\"results-vis big-vis\">\n {this.props.grameneTaxDist && <button type=\"button\"\n className=\"btn btn-primary btn-sm\"\n onClick={this.toggleEmpties.bind(this)}>\n {this.state.collapseEmpties ? 'Expand' : 'Collapse'} empty branches\n </button>}\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 'selectGrameneTaxDist',\n 'selectGrameneGenomes',\n 'selectGrameneSearch',\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&nbsp;|<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 React from 'react'\nimport { connect } from 'redux-bundler-react'\n\nclass GeneAttribs extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n render() {\n return (\n <div className=\"gramene-attribs\">\n {this.props.grameneGeneAttribs && <pre>hi</pre>}\n </div>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneGeneAttribs',\n GeneAttribs\n);\n","import React from \"react\";\nimport { connect } from 'redux-bundler-react'\nimport { Modal, Button } from \"react-bootstrap\";\n\nclass TaxonomyModal extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n genomes : Object.values(props.grameneMaps).sort((a,b) => a.left_index - b.left_index)\n };\n if (Object.keys(props.grameneGenomes.active).length === 0) {\n this.state.genomes.forEach(g => {\n g.selected = true;\n })\n }\n else {\n this.state.genomes.forEach(g => {\n g.selected = props.grameneGenomes.active[g.taxon_id];\n })\n }\n }\n getSelectedGenomes() {\n let selected = {};\n let notAll = false;\n this.state.genomes.forEach(g => {\n if (g.selected) {\n selected[g.taxon_id] = true;\n }\n else {\n notAll = true;\n }\n });\n return notAll ? selected : {};\n }\n handleChange(e) {\n const idx = +e.target.value;\n let newState = Object.assign({},this.state);\n newState.genomes[idx].selected = !newState.genomes[idx].selected;\n this.setState(newState);\n }\n handleClose() {\n this.props.doUpdateGrameneGenomes(this.getSelectedGenomes())\n }\n selectAll() {\n const genomes = this.state.genomes.map(g => {g.selected = true; return g});\n this.setState({genomes});\n }\n selectNone() {\n const genomes = this.state.genomes.map(g => {g.selected = false; return g});\n this.setState({genomes});\n }\n renderGenomes() {\n return (\n <div>\n {this.state.genomes.map((m,idx) => {\n return (\n <div key={idx}>\n <input checked={m.selected}\n onChange={this.handleChange.bind(this)}\n type=\"checkbox\"\n value={idx}\n />\n {' '}{m.display_name}\n </div>\n )\n })}\n <Button onClick={this.handleClose.bind(this)}>Submit</Button>\n </div>\n )\n }\n render() {\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 {this.renderGenomes()}\n </Modal.Body>\n </Modal>\n )\n }\n};\n\nexport default connect(\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'doUpdateGrameneGenomes',\n TaxonomyModal\n)\n"],"names":[],"version":3,"file":"index.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gramene-search",
3
- "version": "1.2.78",
3
+ "version": "1.2.79",
4
4
  "description": "search wrapper for gramene",
5
5
  "source": "src/index.js",
6
6
  "main": "dist/index.js",
@@ -75,7 +75,10 @@ const ClosestOrthologCmp = (props) =>
75
75
  taxon_id = gene.model_rep_taxon_id;
76
76
  className = "model-ortholog";
77
77
  }
78
-
78
+ var isZm = new RegExp(/^Zm00001e/);
79
+ if (isZm.test(desc)) {
80
+ desc='';
81
+ }
79
82
 
80
83
  return (
81
84
  <div className={className} onClick={() => {