gramene-search 1.6.45 → 1.6.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["node_modules/@parcel/runtime-js/lib/runtime-1a8f10c7c38463f5.js","src/index.js","src/bundles/index.js","src/bundles/api.js","src/bundles/filters.js","src/bundles/views.js","src/bundles/docs.js","src/bundles/genomes.js","src/components/resultList.js","src/components/resultSummary.js","src/components/suggestions.js","src/components/geneSearchUI.js","src/components/results/GeneList.js","src/components/results/details/Expression.js","src/components/results/details/Homology.js","src/components/results/details/generic.js","src/components/utils.js","src/components/results/details/Location.js","src/components/results/details/location/browser.js","src/components/results/details/location/dallianceBrowser.js","src/components/results/details/Pathways.js","src/components/results/details/VEP.js","src/components/results/details/Xrefs.js","src/components/results/details/Publications.js","src/components/results/details/Sequences.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/TaxonomyModal.js","src/components/results/Expression.js","src/components/results/UserGeneLists.js","src/components/Auth.js"],"sourcesContent":["module.exports = (Promise.resolve(__parcel__require__(\"./\" + \"Study.826d318c.js\"))).then(() => parcelRequire('7zuJ6'));","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];\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler'\nimport _ from 'lodash'\nimport binsClient from \"gramene-bins-client\";\nimport treesClient from \"gramene-trees-client\";\nimport {build} from \"gramene-taxonomy-with-genomes\";\n\nconst facets = [\n \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\",\n \"{!facet.limit='100' facet.mincount='1' key='genetree'}gene_tree\",\n \"{!facet.limit='100' facet.mincount='1' key='pathways'}pathways__ancestors\",\n \"{!facet.limit='100' facet.mincount='1' key='domains'}domain_roots\",\n \"{!facet.limit='-1' facet.mincount='1' key='fixed_1000__bin'}fixed_1000__bin\"\n];\nconst genomesOfInterest = '(taxon_id:2769) OR (taxon_id:3055) OR (taxon_id:3218) OR (taxon_id:3702) OR (taxon_id:3847) OR (taxon_id:4555) OR (taxon_id:4558) OR (taxon_id:4577) OR (taxon_id:13333) OR (taxon_id:15368) OR (taxon_id:29760) OR (taxon_id:39947) OR (taxon_id:55577) OR (taxon_id:88036) OR (taxon_id:214687)';\nconst sites = ['main','oryza','maize','sorghum','grapevine'];\nconst grameneSuggestions = createAsyncResourceBundle( {\n name: 'grameneSuggestions',\n actionBaseType: 'GRAMENE_SUGGESTIONS',\n persist: false,\n getPromise: ({store}) => {\n const t = store.selectSuggestionsQuery().replaceAll(':',' ').trim();\n const g = store.selectGrameneGenomes();\n const q = `/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`;\n // const promises = sites.map(site => fetch(`https://data.gramene.org/${site}${q}`));\n // return Promise.all(promises)\n return fetch(store.selectGrameneAPI() + q)\n .then(res => {\n return res.json()\n })\n .then(suggestions => {\n if (Object.keys(g.active).length > 0) {\n suggestions.grouped.category.groups.forEach(group => {\n group.doclist.docs.forEach(sugg => {\n sugg.num_genes = 0;\n sugg.taxon_id.forEach((id,idx) => {\n if (g.active[id] && !g.active[id].hidden) {\n sugg.num_genes += sugg.taxon_freq[idx]\n }\n })\n })\n })\n }\n return suggestions\n })\n }\n});\n\ngrameneSuggestions.reactGrameneSuggestions = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectSuggestionsQuery',\n (shouldUpdate, queryString) => {\n if (shouldUpdate && queryString) {\n return { actionCreator: 'doFetchGrameneSuggestions' }\n }\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsStatus = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectGrameneSuggestionsIsLoading',\n 'selectGrameneSuggestionsRaw',\n 'selectSuggestionsQuery',\n (shouldUpdate, isLoading, suggestionsRaw, queryString) => {\n if (!queryString) return '';\n if (shouldUpdate) return 'update needed';\n if (isLoading) return 'loading';\n if (suggestionsRaw.data) return suggestionsRaw.data.grouped.category.matches + ' terms';\n console.error(suggestionsRaw)\n return 'error';\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsReady = createSelector(\n 'selectGrameneSuggestionsStatus',\n (status) => {\n const regex = RegExp('terms$');\n return regex.test(status);\n }\n);\n\ngrameneSuggestions.doFocusFirstGrameneSuggestion = arg => ({dispatch, getState}) => {\n console.log('inside doFocusFirstGrameneSuggestion');\n};\n\nfunction compressLongTaxonName(node) {\n const fullName = node.name;\n const removedExtraineousWords = fullName.replace(/( Group$| subsp\\.| ssp\\.| var\\.| strain)/, '');\n let finalVersion;\n if (removedExtraineousWords.length > 20) {\n let words = removedExtraineousWords.split(' ');\n if (words.length === 2) {\n // abrreviate first word.\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+/, '$1.')\n }\n if (words.length > 2) {\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+\\s([a-z])[a-z]+/, '$1$2.')\n }\n }\n else {\n finalVersion = removedExtraineousWords;\n }\n node.short_name = finalVersion;\n}\n\nconst grameneTaxonomy = createAsyncResourceBundle({\n name: 'grameneTaxonomy',\n actionBaseType: 'GRAMENE_TAXONOMY',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/taxonomy?subset=gramene&rows=-1`)\n .then(res => res.json())\n .then(taxNodes => {\n let taxonomy = _.keyBy(taxNodes, '_id');\n taxNodes.forEach(t => {\n t._id = +t._id; // ensure taxonomy id is a number\n compressLongTaxonName(t);\n if (t.hasOwnProperty(\"is_a\")) {\n t.is_a.forEach(p_id => {\n const p = taxonomy[p_id];\n if (!p.hasOwnProperty('children')) p.children = [];\n p.children.push(t._id)\n })\n }\n });\n return taxonomy\n })\n }\n});\ngrameneTaxonomy.reactGrameneTaxonomy = createSelector(\n 'selectGrameneTaxonomyShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneTaxonomy' }\n }\n }\n);\nconst grameneMaps = createAsyncResourceBundle({\n name: 'grameneMaps',\n actionBaseType: 'GRAMENE_MAPS',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/maps?rows=-1`)\n .then(res => res.json())\n .then(maps => {\n maps.forEach(m => {\n m.regionLength = {};\n m.regions.names.forEach((rname,idx) => {\n m.regionLength[rname] = m.regions.lengths[idx]\n })\n })\n return _.keyBy(maps, 'taxon_id');\n })\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\n }\n);\n\nconst expressionStudies = createAsyncResourceBundle( {\n name: 'expressionStudies',\n actionBaseType: 'EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.groupBy(res, 'taxon_id'))\n }\n});\nexpressionStudies.reactExpressionStudies = createSelector(\n 'selectExpressionStudiesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionStudies' }\n }\n }\n);\n\nconst expressionSamples = createAsyncResourceBundle( {\n name: 'expressionSamples',\n actionBaseType: 'EXPRESSION_SAMPLES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n .then(res => res.json())\n .then(samples => _.groupBy(samples, 'experiment'))\n .then(studies => {\n Object.keys(studies).forEach(study => {\n studies[study].forEach(sample => {\n sample.order = +sample.group.replace('g','')\n });\n studies[study].sort((a,b) => a.order - b.order);\n })\n return studies\n })\n }\n});\nexpressionSamples.reactExpressionSamples = createSelector(\n 'selectExpressionSamplesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionSamples' }\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=0&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 grameneGermplasm = createAsyncResourceBundle( {\n name: 'grameneGermplasm',\n actionBaseType: 'GRAMENE_GERMPLASM',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/germplasm?rows=-1`)\n .then(res => res.json())\n .then(res => {\n res.forEach(g => {\n if (!g.subpop) {\n g.subpop = \"?\"\n }\n });\n return _.groupBy(res, 'ens_id')\n })\n }\n});\ngrameneGermplasm.reactGrameneGermplasm = createSelector(\n 'selectGrameneGermplasmShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneGermplasm' }\n }\n }\n);\n//\n// const grameneExpressionAssays = createAsyncResourceBundle( {\n// name: 'grameneExpressionAssays',\n// actionBaseType: 'GRAMENE_EXPRESSION_ASSAYS',\n// persist: true,\n// getPromise: ({store}) => {\n// return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n// .then(res => res.json())\n// .then(res => {\n// let expr={};\n// res.forEach(assay => {\n// if (!expr.hasOwnProperty(assay.taxon_id)) {\n// expr[assay.taxon_id] = {};\n// }\n// if (!expr[assay.taxon_id].hasOwnProperty(assay.experiment)) {\n// expr[assay.taxon_id][assay.experiment] = [];\n// }\n// assay.order = +assay.group.replace('g','');\n// expr[assay.taxon_id][assay.experiment].push(assay);\n// });\n// // sort each experiment\n// for (const tid in expr) {\n// for (const exp in expr[tid]) {\n// expr[tid][exp].sort((a,b) => a.order - b.order);\n// }\n// }\n// return expr;\n// })\n// }\n// });\n// grameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n// 'selectGrameneExpressionAssaysShouldUpdate',\n// (shouldUpdate) => {\n// if (shouldUpdate) {\n// return { actionCreator: 'doFetchGrameneExpressionAssays' }\n// }\n// }\n// );\n\nconst 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).filter(tid => !g.active[tid].hidden);\n let fq='';\n if (taxa.length) {\n console.log('search add a fq for ',taxa);\n fq = `&fq=taxon_id:(${taxa.join(' OR ')})`;\n }\n return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}`)\n .then(res => res.json())\n .then(res => {\n res.response.docs.forEach(d => {\n d.can_show = {};\n d.capabilities.forEach(c => {\n d.can_show[c]=true;\n })\n });\n return res;\n })\n }\n});\ngrameneSearch.reactGrameneSearch = createSelector(\n 'selectGrameneSearchShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneGenomes','selectGrameneMaps',\n (shouldUpdate, status, genomes, maps) => {\n if (shouldUpdate && status === 'search' && genomes && maps) {\n return { actionCreator: 'doFetchGrameneSearch' }\n }\n }\n);\n\nfunction formatFacetCountsForViz(a) {\n let res = {\n count: a.length/2,\n displayName: \"fixed_1000__bin\",\n data: {},\n sorted: []\n };\n let counts = [];\n for(let i=0;i<a.length;i+=2) {\n const fc = {\n id: +a[i],\n count: +a[i+1]\n };\n res.data[a[i]] = fc;\n counts.push(fc);\n }\n res.sorted = counts.sort((a,b) => a.id - b.id);\n return res;\n}\n\n// bundle to prepare data for the TaxDist component\nconst grameneTaxDist = {\n name: 'grameneTaxDist',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n return state;\n }\n },\n selectGrameneTaxDist: createSelector(\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n (grameneSearch,grameneTaxonomy,grameneMaps) => {\n if (grameneSearch && grameneTaxonomy && grameneMaps) {\n _.forIn(grameneMaps, (map, tid) => {\n grameneTaxonomy[tid].name = map.display_name;\n });\n const binnedResults = formatFacetCountsForViz(grameneSearch.facet_counts.facet_fields.fixed_1000__bin);\n let speciesTree = treesClient.taxonomy.tree(Object.values(grameneTaxonomy));\n let binMapper = binsClient.bins(grameneMaps);\n let taxDist = build(binMapper, speciesTree);\n taxDist.setBinType('fixed',1000);\n taxDist.setResults(binnedResults);\n return taxDist;\n }\n return null;\n }\n )\n};\n\n// this query will give the sorghum orthologs of AT1G01260\n// want to provide these on non-sorghum genes if available\n// http://data.gramene.org/search?q=homology__all_orthologs:AT1G01260&fq=taxon_id:4558&fl=id\nconst grameneOrthologs = {\n name: 'grameneOrthologs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_ORTHOLOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_ORTHOLOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestOrthologs: geneId => ({dispatch, store}) => {\n const orthologs = store.selectGrameneOrthologs();\n if (!orthologs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_ORTHOLOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const taxonId = store.selectTargetTaxonId();\n fetch(`${API}/search?q=homology__all_orthologs:${geneId}&fq=taxon_id:${taxonId}&fl=id`)\n .then(res => res.json())\n .then(res => {\n let newOrthologs = {};\n newOrthologs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_ORTHOLOGS_RECEIVED', payload: newOrthologs})\n })\n }\n },\n selectGrameneOrthologs: state => state.grameneOrthologs\n};\n\nconst grameneParalogs = {\n name: 'grameneParalogs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_PARALOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_PARALOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestParalogs: (geneId,supertree,taxon_id) => ({dispatch, store}) => {\n const paralogs = store.selectGrameneParalogs();\n if (!paralogs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_PARALOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const q= supertree ? `supertree_attr_s:${supertree}` : `homology__within_species_paralog:${geneId}`;\n fetch(`${API}/search?q=${q}&rows=100&fq=taxon_id:${taxon_id}`)\n .then(res => res.json())\n .then(res => {\n let newParalogs = {};\n newParalogs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_PARALOGS_RECEIVED', payload: newParalogs})\n })\n }\n },\n selectGrameneParalogs: state => state.grameneParalogs\n};\n\n// function selectFacetIDs(store, field) {\n// const path = `grameneGenes.data.facet_counts.facet_fields.${field}`;\n// if (_.has(store,path)) {\n// const flat_facets = _.get(store,path);\n// let idList = [];\n// if (isNaN(+flat_facets[0])) {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(flat_facets[i])\n// }\n// }\n// else {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(+flat_facets[i])\n// }\n// if (idList.length === 1) idList.push(0);\n// }\n// return idList;\n// }\n// }\n//\n// grameneGenes.selectDomainFacets = store => selectFacetIDs(store, 'domains');\n// grameneGenes.selectPathwayFacets = store => selectFacetIDs(store, 'pathways');\n// grameneGenes.selectTaxonomyFacets = store => selectFacetIDs(store, 'taxon_id');\n//\n// const grameneDomains = createAsyncResourceBundle({\n// name: 'grameneDomains',\n// actionBaseType: 'GRAMENE_DOMAINS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/domains?rows=-1&idList=${store.selectDomainFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {domains: docs, numFound: docs.length}})\n// });\n//\n// const gramenePathways = createAsyncResourceBundle({\n// name: 'gramenePathways',\n// actionBaseType: 'GRAMENE_PATHWAYS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/pathways?rows=-1&idList=${store.selectPathwayFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {pathways: docs, numFound: docs.length}})\n// });\n//\n// const grameneTaxonomy = createAsyncResourceBundle({\n// name: 'grameneTaxonomy',\n// actionBaseType: 'GRAMENE_TAXONOMY',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/taxonomy?rows=-1&idList=${store.selectTaxonomyFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {taxonomy: docs, numFound: docs.length}})\n// });\n\n\nexport default [grameneSuggestions, grameneSearch, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, grameneParalogs, curatedGenes, grameneGermplasm, grameneGeneAttribs, expressionSamples, expressionStudies];\n","import {createSelector} from \"redux-bundler\";\nimport _ from 'lodash';\nimport ReactGA from 'react-ga4'\nconst MAX_IDLIST_LENGTH = 20;\n\nfunction findNodeWithLeftIdx(node, idx) {\n if (node.leftIdx === idx) {\n return node;\n }\n let result=null;\n if (node.leftIdx < idx && node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n if (child.rightIdx > idx) {\n child.parentIdx = node.leftIdx;\n const res = findNodeWithLeftIdx(child, idx);\n if (res) result = res;\n }\n })\n }\n return result;\n}\n\nfunction markSubtree(node, source, invert) {\n node.marked = (node.leftIdx >= source.leftIdx && node.rightIdx <= source.rightIdx);\n if (invert) node.marked = !node.marked;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n markSubtree(child, source, invert);\n })\n }\n}\n\nfunction reindexTree(node, idx) {\n node.leftIdx = idx;\n idx++;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n idx = reindexTree(child, idx);\n });\n }\n node.rightIdx = idx;\n idx++;\n return idx;\n}\n\nconst grameneFilters = {\n name: 'grameneFilters',\n getReducer: () => {\n const initialState = {\n status: 'init', // others include 'search', 'waiting' and 'ready'\n operation: 'AND',\n negate: false,\n marked: false,\n leftIdx: 0,\n rightIdx: 1,\n children: [],\n showMarked: false,\n showMenu: false,\n moveCopyMode: '',\n searchOffset: 0,\n rows: 20\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_FILTERS_CLEARED': {\n newState = Object.assign({}, initialState, {\n status: 'search',\n children: []\n });\n return newState;\n }\n case 'GRAMENE_FILTER_ADDED': {\n const idx = state.rightIdx;\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: idx + 2,\n searchOffset: 0\n });\n let child = _.pick(payload, ['fq_field', 'fq_value', 'name', 'category']);\n child.leftIdx = idx;\n child.rightIdx = idx + 1;\n child.negate = false;\n child.showMenu = false;\n newState.children.push(child);\n markSubtree(newState, child, false);\n return newState;\n }\n case 'GRAMENE_FILTER_TREE_ADDED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: payload.rightIdx + 1,\n searchOffset: 0\n });\n newState.children.push(payload);\n markSubtree(newState, payload, false);\n return newState;\n }\n case 'GRAMENE_FILTER_SET_ADDED': {\n // create a filter with the payload.operation and children payload.filters\n let filter = {\n leftIdx: state.rightIdx,\n rightIdx: state.rightIdx + (payload.filters.length) * 2 + 1,\n operation: payload.operation,\n negate: false,\n showMenu: false,\n children: payload.filters\n };\n if (payload.warning) {\n filter.warning = payload.warning\n }\n let nextIdx = filter.leftIdx+1;\n payload.filters.forEach(f => {\n f.leftIdx = nextIdx++;\n f.rightIdx = nextIdx++;\n f.negate = false;\n f.showMenu = false;\n });\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0,\n rightIdx: filter.rightIdx + 1\n });\n newState.children.push(filter);\n markSubtree(newState, filter, false);\n return newState;\n }\n case 'GRAMENE_FILTER_NEGATED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n node.negate = !node.negate;\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_DELETED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n let parent = findNodeWithLeftIdx(newState, node.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== node.leftIdx);\n reindexTree(newState, 0);\n markSubtree(newState, parent, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_OPERATION_CHANGED': {\n if (payload.hasOwnProperty('operation')) {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n node.operation = node.operation === 'AND' ? 'OR' : 'AND';\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_MOVED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n let parent = findNodeWithLeftIdx(newState, source.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== source.leftIdx);\n target.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n target.children.push(source);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_COPIED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n let sourceCopy = Object.assign({}, source);\n target.children.push(sourceCopy);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_TARGETS_MARKED':\n newState = Object.assign({}, state, {\n showMarked: true,\n moveCopyMode: payload.mode,\n moveCopySource: payload.source\n });\n markSubtree(newState, payload.source, true);\n return newState;\n case 'GRAMENE_FILTER_TARGETS_UNMARKED':\n newState = Object.assign({}, state, {\n showMarked: false\n });\n return newState;\n case 'GRAMENE_FILTERS_REPLACED':\n payload.status = 'search';\n payload.searchOffset = 0;\n return payload;\n case 'GRAMENE_FILTERS_STATUS_CHANGED':\n if (!(state.status === 'ready' && payload === 'waiting')) {\n return Object.assign({}, state, {status: payload})\n }\n break;\n case 'GRAMENE_FILTERS_SET_SHOW_MARKED':\n return Object.assign({}, state, {showMarked: payload});\n case 'GRAMENE_FILTER_MENU_TOGGLED':\n payload.showMenu = !payload.showMenu;\n return Object.assign({}, state);\n case 'GRAMENE_SEARCH_PAGE_REQUESTED':\n return Object.assign({}, state, {status: 'search', searchOffset: payload * state.rows});\n case 'GRAMENE_SEARCH_FETCH_STARTED':\n return Object.assign({}, state, {status: 'loading'});\n case 'GRAMENE_SEARCH_FETCH_FINISHED':\n return Object.assign({}, state, {status: 'finished'});\n case 'GRAMENE_GENOMES_UPDATED':\n 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('sugg')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(queryObject.sugg)}\n ]\n };\n }\n if (queryObject.hasOwnProperty('suggestion')) {\n const url = new URL(myUrl.href);\n url.search = '';\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'SUGGESTIONS_QUERY_CHANGED', payload: {query: queryObject.suggestion}}\n ]\n };\n }\n if (queryObject.hasOwnProperty('idList')) {\n return handleIdList(queryObject);\n }\n if (queryObject.hasOwnProperty('fq_field') && queryObject.hasOwnProperty('fq_value')\n && queryObject.hasOwnProperty('category') && queryObject.hasOwnProperty('name')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: queryObject}\n ]\n };\n }\n const url = new URL(myUrl.href);\n if (url.pathname === '/genes') {\n return {type: 'GRAMENE_FILTERS_CLEARED'}\n }\n }\n if (filters.status === 'finished') {\n const url = new URL(myUrl.href);\n url.search = `filters=${JSON.stringify(Object.assign({}, filters, {status: 'init'}))}&genomes=${genomes.join(',')}`;\n ReactGA.event({\n category: \"Gene Search\",\n action: \"filter finished\",\n label: url.search\n });\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_FILTERS_STATUS_CHANGED', payload: 'ready'}\n ]\n }\n }\n }\n);\n\nexport default grameneFilters;\n","const grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'userLists',\n name: 'User Gene Lists',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'expression',\n name: 'Gene expression',\n show: 'off',\n shouldScroll: false,\n desiredSamples: {}\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'disabled',\n shouldScroll: false\n }\n // {\n // id: 'domains',\n // name: 'Domains',\n // show: 'disabled'\n // },\n // {\n // id: 'go',\n // name: 'GO terms',\n // show: 'disabled'\n // }\n ]\n };\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.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'off' : 'on'\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_CLICKED':\n newState = Object.assign({}, state);\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'on' : 'on';\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_SCROLLED':\n newState = Object.assign({}, state);\n newState.options.forEach(v => v.shouldScroll = false)\n return newState;\n default:\n return state;\n }\n }\n },\n doToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_TOGGLED', payload: idx})\n },\n dontToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_CLICKED', payload: idx})\n },\n doCancelShouldScroll: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_SCROLLED', payload: null})\n },\n selectGrameneViews: state => state.grameneViews\n};\n\nexport default grameneViews;\n","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {},\n sequences: {},\n rnaSequences: {},\n pepSequences: {},\n studies: {},\n desiredSamples: {},\n consequences: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_CONSEQUENCES_REQUESTED':\n if (!state.consequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.consequences[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_CONSEQUENCES_RECEIVED':\n newState = Object.assign({}, state);\n newState.consequences = Object.assign({}, state.consequences, payload);\n return newState;\n case 'GRAMENE_GENE_REQUESTED':\n if (!state.genes.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.genes[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_GENE_RECEIVED':\n newState = Object.assign({}, state);\n newState.genes = Object.assign({}, state.genes, payload);\n return newState;\n case 'GRAMENE_TREE_REQUESTED':\n if (!state.trees.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.trees[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_TREE_RECEIVED':\n newState = Object.assign({}, state);\n newState.trees = Object.assign({}, state.trees, payload);\n return newState;\n case 'GRAMENE_PATHWAYS_RECEIVED':\n newState = Object.assign({}, state);\n newState.pathways = Object.assign({}, state.pathways, payload);\n return newState;\n case 'ATLAS_STUDIES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies = Object.assign({}, state.studies, payload);\n return newState;\n case 'ATLAS_SAMPLES_REQUESTED':\n if (!state.studies.byID[payload].hasOwnProperty('samples')) {\n newState = Object.assign({},state);\n newState.studies.byID[payload].samples = [];\n return newState;\n }\n break;\n case 'ATLAS_SAMPLES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies.byID[payload.id].samples = payload.samples;\n return newState;\n case 'GENE_SEQUENCE_REQUESTED':\n if (!state.sequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.sequences[payload] = {};\n return newState;\n }\n break;\n case 'RNA_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.rnaSequences[payload] = {};\n return newState;\n }\n break;\n case 'PEP_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.pepSequences[payload] = {};\n return newState;\n }\n break;\n case 'GENE_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.sequences = Object.assign({}, state.sequences);\n newState.sequences[payload.id] = payload.geneSeq;\n return newState;\n case 'RNA_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.rnaSequences = Object.assign({}, state.rnaSequences);\n newState.rnaSequences[payload.id] = payload.RnaSeq;\n return newState;\n case 'PEP_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.pepSequences = Object.assign({}, state.pepSequences);\n newState.pepSequences[payload.id] = payload.PepSeq;\n return newState;\n case 'PARALOG_EXPRESSION_REQUESTED':\n if (!state.expression.hasOwnProperty(payload)) {\n newState = Object.assign({},state);\n newState.expression[payload] = [];\n return newState;\n }\n break;\n case 'PARALOG_EXPRESSION_RECEIVED':\n newState = Object.assign({}, state);\n newState.expression = Object.assign({}, state.expression);\n newState.expression[payload.id] = payload.paralogs;\n return newState;\n case 'EXPRESSION_SAMPLE_TOGGLED':\n newState = Object.assign({}, state);\n newState.desiredSamples = Object.assign({}, state.desiredSamples);\n if (newState.desiredSamples.hasOwnProperty(payload)) {\n delete newState.desiredSamples[payload]\n }\n else {\n newState.desiredSamples[payload] = {status: 'need'}\n }\n }\n return state;\n }\n },\n doToggleExpressionSample: id => ({dispatch}) => {\n dispatch({type: 'EXPRESSION_SAMPLE_TOGGLED', payload: id});\n },\n doRequestVEP: id => ({dispatch, store}) => {\n const consequences = store.selectGrameneConsequences();\n if (!consequences.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_CONSEQUENCES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=id:${id}&fl=id,VEP__*`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.response.docs.forEach(g => {\n genes[g.id] = g;\n });\n dispatch({type: 'GRAMENE_CONSEQUENCES_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneGene: id => ({dispatch, store}) => {\n const genes = store.selectGrameneGenes();\n if (!genes.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_GENE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genes?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.forEach(g => {\n genes[g._id] = g;\n });\n dispatch({type: 'GRAMENE_GENE_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneTree: id => ({dispatch, store}) => {\n const trees = store.selectGrameneTrees();\n const maps = store.selectGrameneMaps();\n if (!trees.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_TREE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genetrees?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let trees = {};\n res.forEach(t => {\n function update_taxon_name(node) {\n if (maps.hasOwnProperty(node.taxon_id)) {\n node.taxon_name = maps[node.taxon_id].display_name\n }\n else if (node.taxon_id === 1100004558) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45580023 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45770001 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Zea mays\"\n }\n if (node.taxon_id === 297600009 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Vitis vinifera\"\n }\n if (node.hasOwnProperty('children')) {\n node.children.forEach(c => update_taxon_name(c))\n }\n }\n update_taxon_name(t);\n trees[t._id] = t;\n });\n dispatch({type: 'GRAMENE_TREE_RECEIVED', payload: trees})\n })\n }\n },\n doRequestGramenePathways: ids => ({dispatch, store}) => {\n const pathways = store.selectGramenePathways();\n let newIds = ids.filter(id => !pathways.hasOwnProperty(id));\n if (newIds) {\n dispatch({type: 'GRAMENE_PATHWAYS_REQUESTED', payload: newIds});\n if (newIds.length === 1) newIds.push(0);\n fetch(`${store.selectGrameneAPI()}/pathways?idList=${newIds.join(',')}`)\n .then(res => res.json())\n .then(res => {\n let pathways = {};\n res.forEach(p => {\n pathways[p._id] = p;\n });\n dispatch({type: 'GRAMENE_PATHWAYS_RECEIVED', payload: pathways})\n })\n }\n },\n doRequestExpressionStudies: id => ({dispatch, store}) => {\n fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => {\n let studies = {byID:{},byTaxon:{}};\n res.forEach(s => {\n studies.byID[s._id] = s;\n if (! studies.byTaxon.hasOwnProperty(s.taxon_id)) {\n studies.byTaxon[s.taxon_id] = []\n }\n studies.byTaxon[s.taxon_id].push(s._id)\n })\n dispatch({type: 'ATLAS_STUDIES_RECEIVED', payload: studies})\n })\n },\n doRequestStudyMetadata: id => ({dispatch, store}) => {\n const studies = store.selectAtlasStudies();\n if (!studies.byID[id].hasOwnProperty('samples')) {\n dispatch({type: 'ATLAS_SAMPLES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/assays?experiment=${id}&rows=-1`)\n .then(res => res.json())\n .then(samples => {\n dispatch({type: 'ATLAS_SAMPLES_RECEIVED', payload: {id, samples}})\n })\n }\n },\n doRequestGeneSequence: gene => ({dispatch, store}) => {\n const maps = store.selectGrameneMaps();\n const seqs = store.selectGeneSequences();\n const id = gene._id;\n const MAX_FLANK = 2000;\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'GENE_SEQUENCE_REQUESTED', payload: id});\n const start = gene.location.start > MAX_FLANK ? gene.location.start - MAX_FLANK : 1;\n const dnaLength = maps[gene.taxon_id].regionLength[gene.location.region];\n const end = gene.location.end + MAX_FLANK > dnaLength ? dnaLength : gene.location.end + MAX_FLANK;\n fetch(`${store.selectEnsemblAPI()}/sequence/region/${gene.system_name}/${gene.location.region}:${start}..${end}:${gene.location.strand}?content-type=application/json`)\n .then(res => res.json())\n .then(geneSeq => {\n const x = geneSeq.id.split(':');\n geneSeq.genome = x[1];\n geneSeq.start = +x[3];\n geneSeq.end = +x[4];\n dispatch({type: 'GENE_SEQUENCE_RECEIVED', payload: {id, geneSeq}});\n })\n }\n },\n doRequestRnaSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectRnaSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'RNA_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=cdna&content-type=application/json`)\n .then(res => res.json())\n .then(RnaSeq => {\n dispatch({type: 'RNA_SEQUENCE_RECEIVED', payload: {id, RnaSeq}});\n })\n }\n },\n doRequestPepSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectPepSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'PEP_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=protein&content-type=application/json`)\n .then(res => res.json())\n .then(PepSeq => {\n dispatch({type: 'PEP_SEQUENCE_RECEIVED', payload: {id, PepSeq}});\n })\n }\n },\n doRequestParalogExpression: id => ({dispatch, store}) => {\n const expr = store.selectParalogExpression();\n if (!expr.hasOwnProperty(id)) {\n dispatch({type: 'PARALOG_EXPRESSION_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=homology__within_species_paralog:${id}&fl=id,atlas_id,name,*__expr&rows=100`)\n .then(res => res.json())\n .then(res => {\n const assay_re = /(.+)_g(\\d+)/;\n const paralogs = res.response.docs.map(d => {\n let p = {\n id: d.id,\n name: d.name,\n experiments: {},\n min:1000,\n max:0\n };\n if (d.atlas_id) {\n p.atlas_id = d.atlas_id;\n delete d.atlas_id;\n }\n delete d.id;\n delete d.name;\n Object.entries(d).forEach(assay => {\n const parsed = assay[0].match(assay_re);\n const expr = parsed[1].replace('_','-').replace('-tpms','');\n if (! p.experiments.hasOwnProperty(expr)) {\n p.experiments[expr] = [];\n }\n const g = parsed[2] - 1;\n const e = d[assay[0]];\n if (e < p.min) p.min = e;\n if (e > p.max) p.max = e;\n p.experiments[expr][g] = e;\n });\n return p;\n }).map(p => {\n for (const expr in p.experiments) {\n p.experiments[expr] = p.experiments[expr].filter(e => e >= 0);\n }\n return p;\n });\n dispatch({type: 'PARALOG_EXPRESSION_RECEIVED', payload: {id, paralogs}});\n })\n }\n },\n selectGrameneGenes: state => state.grameneDocs.genes,\n selectGrameneConsequences: state => state.grameneDocs.consequences,\n selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression,\n selectGeneSequences: state => state.grameneDocs.sequences,\n selectRnaSequences: state => state.grameneDocs.rnaSequences,\n selectPepSequences: state => state.grameneDocs.pepSequences,\n selectAtlasStudies: state => state.grameneDocs.studies,\n selectDesiredSamples: state => state.grameneDocs.desiredSamples\n};\n\nexport default grameneDocs;\n","import {createSelector} from \"redux-bundler\";\nconst grameneGenomes = {\n name: 'grameneGenomes',\n getReducer: () => {\n const initialState = {\n show: false,\n active: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_GENOMES_TOGGLED':\n newState = Object.assign({},state);\n newState.show = !newState.show;\n return newState;\n case 'GRAMENE_GENOMES_UPDATED':\n newState = Object.assign({}, state);\n newState.active = payload;\n return newState;\n case 'GRAMENE_MAPS_FETCH_FINISHED':\n newState = Object.assign({}, state);\n newState.active = payload;\n default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doInitializeGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_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 return <span>\n {match.map((str, idx) => {\n if (idx % 2 === 1) {\n return <span key={idx} style={{fontWeight:'bolder'}}>{str}</span>\n }\n return <span key={idx}>{str}</span>\n })}\n </span>\n}\n\nfunction logAction(sugg) {\n ReactGA.event({\n category: 'Search',\n action: 'SetFilter',\n label: sugg.name\n })\n}\nfunction getLowestCommonAncestorName(tids, taxonomy) {\n let lca;\n tids.forEach(tid => {\n if (!lca) {\n lca = [...taxonomy[tid].ancestors];\n } else {\n let ancestors = new Set(taxonomy[tid].ancestors);\n while (!ancestors.has(lca[0])) {\n lca.shift();\n }\n }\n });\n return taxonomy[lca[0]].short_name;\n}\n\nconst TryPan = (props) => {\n const query = props.query;\n const pan = props.pan;\n return <div className=\"suggestion-panlink\">\n <a target=\"_blank\" href={pan.url + \"?suggestion=\" + query}>\n <img src={pan.svg} title={`Search at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst TryAnotherSite = props => {\n const query = props.query;\n const config = props.config;\n let sites = Object.keys(config.panSite);\n return <div>\n <Alert variant={'info'}>Don't see what you're looking for? Search for <b>{query}</b> on one of our sister sites</Alert>\n {sites.map((p, idx) => <TryPan key={idx} query={query} pan={config.panSite[p]}/>)}\n </div>\n}\n\nconst Suggestions = props => {\n let suggestions = props.grameneSuggestions;\n if (suggestions && suggestions.grouped) {\n if (suggestions.grouped.category.matches === 0) {\n let sugg1 = {\n fq_field: 'text',\n fq_value: props.suggestionsQuery,\n name: `Genes containing \"${props.suggestionsQuery}\"`,\n category: 'Gene',\n };\n let sugg2 = {\n fq_field: 'text',\n fq_value: `${props.suggestionsQuery}*`,\n name: `Genes matching \"${props.suggestionsQuery}*\"`,\n category: 'Gene',\n };\n return (\n <div style={{margin: '10px', maxWidth: '820px'}}>\n <Alert variant={'info'}><em>No suggestions found.</em> You may still attempt a full text search, though it is unlikely to find any genes for you.</Alert>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg1); props.doAcceptSuggestion(sugg1); props.doAcceptGrameneSuggestion(sugg1)}}>\n {`All genes that contain the word \"${props.suggestionsQuery}\"`}\n </Button>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg2); props.doAcceptSuggestion(sugg2); props.doAcceptGrameneSuggestion(sugg2)}}>\n {`All genes that contain a word that starts with \"${props.suggestionsQuery}\"`}\n </Button>\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n else {\n return (\n <div style={{margin: '10px'}}>\n {suggestions.grouped.category.groups.map((g,idx) => {\n return <div key={idx} id='gramene-suggestion'>\n <h4 className=\"mt10\">{g.groupValue}</h4>\n {g.doclist.docs.map((sugg,jdx) =>\n <Button id={`${idx}-${jdx}`}\n key={jdx}\n disabled={sugg.num_genes === 0}\n size='sm'\n variant=\"outline-secondary\"\n onClick={() => {logAction(sugg); props.doAcceptSuggestion(sugg); props.doAcceptGrameneSuggestion(sugg)}}>\n {showMatches(sugg.display_name,props.suggestionsQuery)}{' '}\n <Badge bg=\"secondary\">{sugg.num_genes}</Badge>\n <i>&nbsp;{getLowestCommonAncestorName(sugg.taxon_id, props.grameneTaxonomy)}</i>\n </Button>\n )}\n </div>\n })}\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'selectGrameneTaxonomy',\n 'selectConfiguration',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React, { useRef, useEffect } from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { Navbar, Nav, NavDropdown, Container, OverlayTrigger, Popover} from 'react-bootstrap'\nimport Switch from 'react-switch'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash } from 'react-icons/bs'\nimport GeneList from './results/GeneList'\nimport TaxDist from './results/TaxDist'\nimport HelpDemo from './results/HelpDemo'\nimport GeneAttribs from './results/GeneAttribs'\nimport TaxonomyModal from './TaxonomyModal'\nimport Expression from './results/Expression'\nimport UserGeneLists from './results/UserGeneLists'\nimport Auth from './Auth'\nimport ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs,\n expression: Expression,\n userLists: UserGeneLists\n};\n\nconst StatusCmp = props => {\n let content = props.grameneFiltersStatus;\n // if (props.grameneFiltersStatus === 'init') {\n // props.doClearGrameneFilters();\n // }\n if (props.grameneFiltersStatus === 'ready') {\n let tally = <span>Ready</span>;\n if (props.grameneSearch) {\n let genes = props.grameneSearch.response.numFound;\n let genomes = props.grameneSearch.facet_counts.facet_fields.taxon_id.length / 2;\n tally = <span><b>{genes}</b> genes in <b>{genomes}</b> genomes</span>;\n }\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Genomes Filter</Popover.Header>\n <Popover.Body>Searching {props.activeGenomeCount} genomes</Popover.Body>\n </Popover>\n );\n\n content = <span>\n {tally}\n <OverlayTrigger placement=\"auto\" overlay={popover}>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doShowGrameneGenomes}><BsGearFill/></span>\n </OverlayTrigger>\n <TaxonomyModal/>\n </span>;\n }\n return <div style={{padding:'5px', color:'cornsilk', fontSize:'small'}}>{content}</div>\n};\n\nconst Status = connect(\n 'selectGrameneSearch',\n 'selectGrameneFiltersStatus',\n 'selectActiveGenomeCount',\n 'doShowGrameneGenomes',\n 'doClearGrameneFilters',\n StatusCmp\n);\n\nconst handleClick = (e, moveCopyMode, showMarked, node, actions) => {\n if (!e) e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n\n if (showMarked && moveCopyMode) {\n if (node.marked) {\n actions.selectTarget(node);\n }\n else {\n actions.unmarkTargets()\n }\n }\n console.log(node, showMarked);\n};\nfunction logAction(action) {\n ReactGA.event({\n category: 'Search',\n action: action\n })\n}\nconst Filter = ({node,moveCopyMode,showMarked,actions}) => {\n let classes = 'gramene-filter gramene-filter';\n if (node.operation) {\n classes = `${classes}-${node.operation}`\n }\n if (node.negate) {\n classes = `${classes} gramene-filter-NOT`\n }\n if (showMarked && node.marked) {\n classes = `${classes} gramene-filter-marked`\n }\n let content = '';\n let menu = '';\n let children = [];\n\n if (node.showMenu) {\n let key=1;\n let menuItems = [];\n if (node.hasOwnProperty('operation')) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Change to ${node.operation}`); actions.changeOperation(node)}}>convert to <i>{node.operation === 'AND' ? 'OR' : 'AND'}</i></li>);\n }\n if (node.leftIdx > 0) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Delete filter`); actions.deleteNode(node)}}>delete</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Move filter`); actions.markTargets(node,'move')}}>move{node.isSource && ' select destination'}</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Copy filter`); actions.markTargets(node,'copy')}}>copy{node.isSource && ' select destination'}</li>)\n }\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Negate filter`); actions.negate(node)}}>negate</li>);\n menu = <div className='gramene-filter-menu'><ul>{menuItems}</ul></div>;\n }\n let warning;\n if (node.warning) {\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Warning</Popover.Header>\n <Popover.Body>{node.warning}</Popover.Body>\n </Popover>\n );\n warning = (\n <OverlayTrigger placement=\"auto\" overlay={popover}><span style={{float:'right', color:'red', cursor:'pointer'}}><IoAlertCircle/></span></OverlayTrigger>\n )\n }\n if (node.operation) {\n children = node.children.map((child,idx) => <Filter key={idx} moveCopyMode={moveCopyMode} node={child} showMarked={showMarked} actions={actions}/>);\n content = (\n <div>\n <span className='gramene-filter-operation'\n onClick={()=>actions.toggleMenu(node)}>{node.operation}</span>\n {warning}\n </div>\n );\n }\n else {\n content = <span className='gramene-filter-text'\n onClick={()=>actions.toggleMenu(node)}>{node.category} |&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={props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': '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={props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': '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 'selectConfiguration',\n 'doNegateGrameneFilter',\n 'doDeleteGrameneFilter',\n 'doChangeGrameneFilterOperation',\n 'doMoveOrCopyGrameneFilter',\n 'doMarkGrameneFilterTargets',\n 'doUnmarkGrameneFilterTargets',\n 'doToggleGrameneFilterMenu',\n 'doClearGrameneFilters',\n FiltersCmp\n);\n\nconst ResultsCmp = props => {\n let activeViews = props.grameneViews.options;\n return props.grameneFilters.rightIdx > 0 ? (\n <div>\n {activeViews.map((v,idx) => {\n let p = Object.assign({}, props);\n const divRef = useRef(null);\n useEffect(() => {\n if (v.shouldScroll) {\n const navBarHeight=0;\n const scrollPosition = divRef.current.offsetTop - navBarHeight;\n window.scrollTo({\n top: scrollPosition,\n behavior: 'smooth'\n })\n props.doCancelShouldScroll();\n }\n }, [v.shouldScroll]);\n return (\n <div key={idx} ref={divRef}>\n {v.show === 'on' && <div style={{borderTopWidth:'medium'}} className='gramene-view-header'>{v.name}</div>}\n {v.show === 'on' && React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doCancelShouldScroll',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <b>Views</b>\n {props.grameneViews.options.filter(view => view.show !== 'disabled').map((view,idx) => (\n <div style={{textWrap:'nowrap'}} key={idx}>\n <Switch onChange={()=>props.doToggleGrameneView(view.id)} checked={view.show === 'on'}\n height={18}\n width={30}\n handleDiameter={16}\n checkedIcon={false}\n uncheckedIcon={false}\n />\n <span className={`gramene-view-span-${view.show}`} onClick={(e) => {\n props.dontToggleGrameneView(view.id)\n }}>{view.name}</span>\n </div>\n ))}\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n 'dontToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views, Auth};\n","import React from 'react'\nimport ReactGA from 'react-ga4'\nimport { connect } from 'redux-bundler-react'\nimport './genes.css'\nimport Expression from './details/Expression'\nimport Homology from './details/Homology'\nimport Location from './details/Location'\nimport Pathways from \"./details/Pathways\"\nimport VEP from \"./details/VEP\"\nimport Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\nimport Sequences from \"./details/Sequences\"\nimport {suggestionToFilters} from \"../utils\";\nimport {GrFormPrevious, GrFormNextLink, GrFormNext, GrHpe} from 'react-icons/gr'\nimport { Badge, OverlayTrigger, Tooltip } from 'react-bootstrap'\n\nlet external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n\nlet inventory = {\n sequences: Sequences,\n location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\n VEP: VEP,\n xrefs: Xrefs,\n pubs: Publications\n};\n\nfunction renderTairSummary(searchResult) {\n const summary = searchResult.summary;\n if(summary && summary !== \"NULL\" && searchResult.system_name === \"arabidopsis_thaliana\") {\n return (\n <div className=\"gene-summary-tair\">\n {trimSummary(summary)}\n </div>\n )\n }\n}\n\nfunction trimSummary(summary) {\n if(summary.length > 160) {\n const start = summary.substr(0, 150);\n const rest = summary.substr(150);\n return <p>{start}<span className=\"ellipsis\">…</span><span className=\"rest\">{rest}</span></p>\n }\n else {\n return <p>{summary}</p>\n }\n}\nconst PanLink = (props) => {\n const gene = props.gene;\n const pan = props.pan;\n return <div className=\"gene-panlink\">\n <a target=\"_blank\" href={pan.url + \"?idList=\" + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst CurationComponent1 = ({ curation }) => {\n return (\n <div className=\"gene-curation\">\n <span>Curated gene structure</span>\n {curation.okay > 0 && <span className=\"status\">✔️ {curation.okay}</span>}\n {curation.flagged > -10 && <span className=\"status\">⚠️ {curation.flagged}</span>}\n </div>\n );\n};\nconst CurationComponent = ({ curation, gene }) => {\n const total = curation.okay + curation.flagged;\n const okayRatio = (curation.okay / total);\n const flaggedRatio = (curation.flagged / total);\n const tooltip = (\n <Tooltip id=\"tooltip\">\n <strong>Gene structure</strong><br/>\n Okay: {curation.okay} &nbsp;\n Flagged: {curation.flagged}\n </Tooltip>\n );\n return (\n <OverlayTrigger placement=\"left\" overlay={tooltip}>\n <a className=\"gene-curation\" target=\"_blank\" href={`https://devdata.gramene.org/curation/curations?idList=${gene.id}`}>\n <span className=\"okay\" style={{opacity: okayRatio}}>☑</span>\n <span className=\"flagged\" style={{opacity: flaggedRatio}}>⚠</span>\n </a>\n </OverlayTrigger>\n )\n};\n\nconst ClosestOrthologCmp = (props) => {\n let id, taxon_id, name, desc, species, className, identity;\n const gene = props.gene;\n\n if (gene.closest_rep_id) {\n name = gene.closest_rep_name || gene.closest_rep_id;\n desc = gene.closest_rep_description;\n species = gene.closest_rep_species_name;\n id = gene.closest_rep_id;\n taxon_id = gene.closest_rep_taxon_id;\n className = \"closest-ortholog\";\n identity = gene.closest_rep_identity || 0;\n }\n else if (gene.model_rep_id) {\n name = gene.model_rep_name || gene.model_rep_id;\n desc = gene.model_rep_description;\n species = gene.model_rep_species_name;\n id = gene.model_rep_id;\n taxon_id = gene.model_rep_taxon_id;\n className = \"model-ortholog\";\n identity = gene.model_rep_identity || 0;\n }\n var isZm = new RegExp(/^Zm00001e/);\n if (isZm.test(desc)) {\n desc='';\n }\n\n return (\n <div className={className} onClick={() => {\n props.doEnsureGrameneGenome(taxon_id);\n props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene',\n fq_field: 'id',\n fq_value: id,\n name: name\n }))\n }}>\n <div className=\"gene-species\">{species}</div>\n {identity > 0 && <div className=\"rep-identity\">{Math.round(identity*100)}</div>}\n <h3 className=\"gene-id\">{name}</h3>\n <p>{desc}</p>\n </div>\n );\n};\n\nconst ClosestOrtholog = connect(\n 'doReplaceGrameneFilters','doEnsureGrameneGenome',\n ClosestOrthologCmp\n);\n\nfunction renderClosestOrtholog(gene) {\n\n if (shouldShowClosestOrtholog(gene)) {\n\n // we used to not add the closest ortholog to the DOM if the homology detail was visible.\n // however, that could cause the height of the result to change. Instead we set visibility:hidden\n // so that the renderer takes into account the height of the ortholog even if not shown.\n return (\n <ClosestOrtholog gene={gene}/>\n );\n }\n}\n\n// show closest ortholog prominently if we have data to show:-\n// a. either there's a closest ortholog (determined by traversing the gene tree until an id or description looks\n// curated) b. or there's a model ortholog (traverse tree to find an ortholog in arabidopsis)\nfunction shouldShowClosestOrtholog(searchResult) {\n return (\n searchResult.closest_rep_id || (\n searchResult.model_rep_id &&\n searchResult.model_rep_id !== searchResult.id\n )\n );\n}\n\nconst allDetails = [\n {\n id: 'VEP',\n label: 'Germplasm',\n popup: 'Germplasm with protein truncating variants (PTVs)',\n available: false\n },\n {\n id: 'sequences',\n label: 'Sequences',\n popup: 'Gene/cDNA/protein fasta',\n available: true\n },\n {\n id: 'location',\n label: 'Location',\n popup: 'Genome Browser',\n available: false\n },\n {\n id: 'expression',\n label: 'Expression',\n popup: 'Gene Expression Atlas',\n available: false\n },\n {\n id: 'homology',\n label: 'Homology',\n popup: 'Gene Family Tree',\n available: false\n },\n {\n id: 'pathways',\n label: 'Pathways',\n popup: 'Plant Reactome Pathways',\n available: false\n },\n {\n id: 'pubs',\n label: 'Papers',\n popup: 'Curated Publications',\n available: false\n },\n {\n id: 'xrefs',\n label: 'Xrefs',\n popup: 'Database Cross-references',\n available: false\n }\n];\n\n\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: allDetails.map(o => ({...o})).filter(d => props.config.details[d.id]),\n expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => {\n hasData[c] = true;\n if (c === 'PanOryza') {\n hasData.xrefs = true;\n }\n });\n this.state.details.forEach(d => d.available |= hasData.hasOwnProperty(d.id));\n }\n getDetailStatus(d) {\n if (this.state.expandedDetail === d.id) return 'expanded';\n if (d.available) return 'closed'\n return d.id === \"pubs\" ? 'empty' : 'disabled';\n }\n setExpanded(d) {\n if (d.available || d.id === \"pubs\") {\n if (this.state.expandedDetail === d.id) {\n this.setState({expandedDetail: null})\n }\n else {\n const geneId = this.props.searchResult.id;\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(geneId))) {\n this.props.requestGene(geneId)\n }\n ReactGA.event({\n category: 'Search',\n action: 'Details',\n label: d.label\n });\n this.setState({expandedDetail: d.id})\n }\n }\n }\n ensureGene(id) {\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(id))) {\n this.props.requestGene(id);\n return false;\n }\n return this.props.geneDocs[id].hasOwnProperty('taxon_id')\n }\n renderMetadata() {\n let gene = this.props.searchResult;\n if (gene.model_rep_taxon_id) {\n gene.model_rep_species_name = this.props.taxLut[gene.model_rep_taxon_id].short_name;\n }\n if (gene.closest_rep_taxon_id) {\n gene.closest_rep_species_name = this.props.taxLut[gene.closest_rep_taxon_id].short_name;\n }\n return renderTairSummary(gene) || renderClosestOrtholog(gene);\n }\n render() {\n const panSite = this.props.config.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\n const curation = this.props.curation;\n // let orthologs='';\n // if (this.props.orthologs && this.props.orthologs.hasOwnProperty(searchResult.id)) {\n // orthologs = this.props.orthologs[searchResult.id].join(', ');\n // }\n const numWordsInDescription = searchResult.description.split(' ').length;\n return (\n <div className=\"result-gene\">\n <div className=\"result-gene-summary\">\n <div className=\"result-gene-title-body\">\n {panSite.hasOwnProperty(searchResult.system_name) && <PanLink pan={panSite[searchResult.system_name]} gene={searchResult}/>}\n {curation && <CurationComponent curation={curation} gene={searchResult}/> }\n <div className=\"gene-title\">\n <div className=\"gene-species\">{taxName}</div>\n <h3 className=\"gene-name\">{searchResult.name}\n {searchResult.id !== searchResult.name && <small className=\"gene-id\">&nbsp;{searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {searchResult.description !== \"unknown\" && (numWordsInDescription > 1 || searchResult.can_show.pubs) && <p className=\"gene-description\">{searchResult.description}</p>}\n </div>\n {this.renderMetadata()}\n </div>\n <div className=\"gene-detail-tabs\">\n {this.state.details.map((d,idx) => (\n <OverlayTrigger\n key={idx}\n placement={'bottom'}\n overlay={\n <Tooltip id={`tooltip`}>{d.popup}</Tooltip>\n }\n >\n <div key={idx}\n className={`col-md-1 text-center gene-detail-tab-${this.getDetailStatus(d)}`}\n onClick={()=>this.setExpanded(d)}\n >{d.label}</div>\n </OverlayTrigger>\n ))}\n </div>\n {this.state.expandedDetail && this.ensureGene(searchResult.id) && <div className=\"visible-detail\">{React.createElement(inventory[this.state.expandedDetail], this.props)}</div>}\n </div>\n )\n }\n}\n\nconst GeneList = props => {\n if (props.grameneSearch && props.grameneSearch.response && props.grameneTaxonomy) {\n let prev,page,next;\n const numFound = props.grameneSearch.response.numFound;\n if (numFound > props.grameneSearchRows) {\n const pageNum = props.grameneSearchOffset/props.grameneSearchRows;\n page = <span style={{padding:'10px'}}>page <b>{pageNum + 1}</b> of <b>{Math.ceil(numFound/props.grameneSearchRows)}</b></span>;\n prev = <GrHpe/>;\n if (pageNum > 0) {\n prev = <Badge onClick={()=>props.doRequestResultsPage(pageNum - 1)}><GrFormPrevious/></Badge>\n }\n next = <GrHpe/>;\n if (numFound > props.grameneSearchOffset + props.grameneSearchRows) {\n next = <Badge onClick={()=>props.doRequestResultsPage(pageNum + 1)}><GrFormNext/></Badge>\n }\n }\n return <div>\n <div>{prev}{page}{next}</div>\n {props.grameneSearch.response.docs.map((g,idx) => (\n <Gene key={idx}\n searchResult={g}\n config={props.configuration}\n taxName={props.grameneTaxonomy[g.taxon_id].name}\n geneDocs={props.grameneGenes}\n requestGene={props.doRequestGrameneGene}\n requestOrthologs={props.doRequestOrthologs}\n orthologs={props.grameneOrthologs}\n taxLut={props.grameneTaxonomy}\n curation={props.curatedGenes ? props.curatedGenes[g.id] : null}\n expandedDetail={props.grameneSearch.response.numFound === 1 && g.can_show.homology ? 'homology' : null}\n />\n ))}\n {prev}{page}{next}\n </div>\n }\n return null;\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneGenes',\n 'selectGrameneOrthologs',\n 'selectGrameneSearchOffset',\n 'selectGrameneSearchRows',\n 'selectCuratedGenes',\n 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React, { useRef, useEffect, useState } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Row, Col} from 'react-bootstrap';\nimport BAR, {haveBAR} from \"gramene-efp-browser\";\n\nfunction DynamicIframe(props) {\n // Create a ref for the iframe element\n const iframeRef = useRef(null);\n const [iframeHeight, setIframeHeight] = useState(500); // Default height\n\n useEffect(() => {\n const handleMessage = (event) => {\n if (event.data.type === 'heightChange') {\n setIframeHeight(event.data.height + 44);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n src={props.url}\n title=\"Dynamic Iframe\"\n style={{ width: '100%', height: `${iframeHeight}px`, border: 'none' }}\n />\n );\n}\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [atlasExperiment, setAtlasExperiment] = useState(null);\n const [atlasExperimentList, setAtlasExperimentList] = useState([]);\n const [isLocal, setIsLocal] = useState(false);\n const [activeTab, setActiveTab] = useState('gene');\n\n const handleLocalAPIChange = (event) => {\n setIsLocal(event.target.checked);\n };\n useEffect(() => {\n const tid = Math.floor(gene.taxon_id / 1000);\n if (props.expressionStudies[tid]) {\n let eList = props.expressionStudies[tid].sort((a,b) => {\n const a_name = `${a.type}:${a.description || a._id}`;\n const b_name = `${b.type}:${b.description || b._id}`;\n return a_name < b_name ? -1 : 1;\n });\n if (props.searchResult.hasOwnProperty('expressed_in_gxa_attr_ss')) {\n const in_gxa = new Set(props.searchResult.expressed_in_gxa_attr_ss);\n eList = eList.filter(e => in_gxa.has(e._id))\n }\n setAtlasExperimentList(eList);\n\n let refExp = eList.filter(e => e.isRef);\n if (refExp.length === 1) {\n setAtlasExperiment(refExp[0]._id);\n } else {\n // no reference experiment - choose first\n setAtlasExperiment(eList[0]._id);\n }\n }\n }, [props.expressionStudies]);\n\n let paralogs_url;\n let gene_url = `https://dev.gramene.org/static/atlasWidget.html?genes=${gene.atlas_id || gene._id}&localAPI=${isLocal}`;\n let paralogs = [];\n if (props.grameneParalogs && props.grameneParalogs[gene._id]) {\n paralogs = props.grameneParalogs[gene._id];\n } else if(gene.homology) {\n props.doRequestParalogs(gene._id, gene.homology.supertree, gene.taxon_id);\n }\n // if (gene.homology && gene.homology.homologous_genes && gene.homology.homologous_genes.within_species_paralog) {\n // paralogs = gene.homology.homologous_genes.within_species_paralog;\n // }\n if (paralogs.length > 1 && atlasExperiment) {\n paralogs_url= `https://dev.gramene.org/static/atlasWidget.html?genes=${paralogs.join(' ')}&experiment=${atlasExperiment}&localAPI=${isLocal}`;\n }\n return <Tabs activeKey={activeTab} onSelect={(k) => setActiveTab(k)}>\n {paralogs_url &&\n <Tab tabClassName=\"gxa\" eventKey=\"paralogs\" title={`Paralogs`} key=\"gxaparalogs\">\n <Form.Select aria-label='experiment selector'\n placeholder='Select experiment'\n onChange={(e) => setAtlasExperiment(e.target.value)}>\n { atlasExperimentList.map((e,idx) =>\n <option key={idx} value={e._id}>{e.type}: {e.description || e._id}</option>\n )}\n </Form.Select>\n {activeTab === \"paralogs\" && <DynamicIframe url={paralogs_url}/> }\n </Tab>\n }\n <Tab tabClassName=\"gxa\" eventKey=\"gene\" title=\"All Studies\" key=\"gxa\">\n {/*<Form.Check*/}\n {/* type=\"switch\"*/}\n {/* id=\"localAPI\"*/}\n {/* label=\"Local API\"*/}\n {/* checked={isLocal}*/}\n {/* onChange={handleLocalAPIChange}*/}\n {/*/>*/}\n {activeTab === \"gene\" && <DynamicIframe url={gene_url}/> }\n </Tab>\n {haveBAR(gene) &&\n <Tab tabClassName=\"eFP\" eventKey=\"eFP\" title=\"eFP Browser\" key=\"bar\"><BAR gene={gene}/></Tab>\n }\n </Tabs>\n};\n\nexport default connect(\n 'selectGrameneParalogs',\n 'selectExpressionStudies',\n 'doRequestParalogs',\n //'doRequestParalogExpression',\n Detail\n);\n\n","import React from 'react'\nimport _ from 'lodash';\nimport {connect} from \"redux-bundler-react\";\nimport TreeVis from \"gramene-genetree-vis\";\nimport treesClient from \"gramene-trees-client\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport {suggestionToFilters} from \"../../utils\";\nimport {Spinner, Alert} from \"react-bootstrap\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Homology extends React.Component {\n constructor(props) {\n super(props);\n if (!props.geneDocs.hasOwnProperty(props.searchResult.id)) {\n props.requestGene(props.searchResult.id)\n }\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n }\n renderTreeVis() {\n return (\n <div className=\"gene-genetree\">\n <TreeVis genetree={this.tree}\n initialGeneOfInterest={this.gene}\n genomesOfInterest={this.props.grameneGenomes.active}\n taxonomy={this.taxonomy}\n allowGeneSelection={true}\n pivotTree={true}\n enableCuration={false}\n enablePhyloview={true}\n numberOfNeighbors={10}\n ensemblUrl={this.props.configuration.ensemblURL}/>\n </div>\n )\n }\n filterAllHomologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'gene_tree',\n fq_value: this.tree._id,\n name: `Homologs of ${this.gene.name}`\n }))\n }\n filterOrthologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__all_orthologs',\n fq_value: this.gene._id,\n name: `Orthologs of ${this.gene.name}`\n }))\n }\n filterParalogs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__within_species_paralog',\n fq_value: this.gene._id,\n name: `Paralogs of ${this.gene.name}`\n }))\n }\n searchSupertree() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'supertree_attr_s',\n fq_value: this.gene.homology.supertree,\n name: this.gene.homology.supertree\n }))\n }\n orthologList() {\n return this.orthoParaList('ortholog');\n }\n\n paralogList() {\n return this.orthoParaList('within_species_paralog');\n }\n\n orthoParaList(type) {\n var homology, thisGeneId;\n homology = _.get(this.gene, 'homology.homologous_genes');\n thisGeneId = this.gene._id;\n\n if (homology) {\n var homologs = _(homology)\n .pickBy(function filterCategories(thing, name) {\n return name.indexOf(type) === 0;\n })\n .values()\n .flatten()\n .uniq()\n .value();\n\n if (!_.isEmpty(homologs)) {\n if (!homologs.includes(thisGeneId)) {\n console.log(\"add to homologs list\",thisGeneId);\n homologs.push(thisGeneId);\n }\n return homologs; // only return something if we have something. We're testing for truthiness later.\n }\n }\n }\n explorations() {\n let x = [{\n name: 'Homologs',\n category: 'Gene Tree',\n count: this.tree.geneCount,\n handleClick: this.filterAllHomologs.bind(this)\n }];\n if (this.orthologs) {\n x.push({\n name: 'Orthologs',\n category: 'Gene Tree',\n count: this.orthologs.length,\n handleClick: this.filterOrthologs.bind(this)\n });\n }\n if (this.paralogs) {\n x.push({\n name: 'Paralogs',\n category: 'Gene Tree',\n count: this.paralogs.length,\n handleClick: this.filterParalogs.bind(this)\n });\n }\n if (this.gene.homology.supertree) {\n x.push({\n name: `Supertree`,\n category: `Gene Tree`,\n count: this.gene.homology.supertree,\n handleClick: this.searchSupertree.bind(this)\n })\n }\n return x;\n }\n links() {\n let links = [\n {\n name: 'Ensembl Gene Tree view',\n url: `${this.props.configuration.ensemblURL}/${this.gene.system_name}/Gene/Compara_Tree?g=${this.gene._id}`\n }\n ];\n if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n links.push({\n name: 'Curate',\n url: this.props.curation.url + this.gene._id\n })\n }\n return links;\n }\n render() {\n const id = this.props.searchResult.id;\n if (!this.props.geneDocs.hasOwnProperty(id)) {\n return <Spinner/>\n }\n this.gene = this.props.geneDocs[id];\n const treeId = this.gene.homology.gene_tree.id;\n if (! this.props.grameneTrees.hasOwnProperty(treeId)) {\n this.props.doRequestGrameneTree(treeId);\n }\n else {\n const tree = this.props.grameneTrees[treeId];\n if (tree.hasOwnProperty('taxon_id')) {\n this.tree = treesClient.genetree.tree([this.props.grameneTrees[treeId]]);\n this.orthologs = this.orthologList();\n this.paralogs = this.paralogList();\n }\n }\n let flagged=0;\n // if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n // flagged = this.props.curatedGenes && this.props.curatedGenes[id] ? this.props.curatedGenes[id].flagged : 0;\n // }\n return (\n <Detail>\n <Title key=\"title\">Compara Gene Tree</Title>\n <Description key=\"description\">\n This phylogram shows the relationships between this gene and others similar to it, as determined by Ensembl Compara.\n {flagged > 1 && <Alert variant={'warning'}>This gene was flagged for potential gene structural annotation issues by {flagged} curators</Alert>}\n </Description>\n {this.tree && <Content key=\"content\">{this.renderTreeVis()}</Content>}\n {this.tree && <Explore key=\"explore\" explorations={this.explorations()}/>}\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n )\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGrameneTrees',\n 'selectGrameneGenomes',\n 'selectConfiguration',\n 'selectCuration',\n 'selectCuratedGenes',\n 'doRequestGrameneTree',\n 'doAcceptGrameneSuggestion',\n 'doReplaceGrameneFilters',\n Homology\n);\n\n","import React from 'react';\nimport keyBy from 'lodash/keyBy';\nimport _ from \"lodash\";\nimport ReactGA from \"react-ga4\";\nimport { BiLinkExternal } from \"react-icons/bi\";\nimport { Button, Badge } from \"react-bootstrap\";\n\nexport const Detail = props => {\n let subComponents = keyBy(props.children, 'key');\n return (\n <div className=\"detail\">\n <div className=\"intro\">\n {subComponents.title}\n {subComponents.description}\n </div>\n <div className=\"content-wrapper\">\n {subComponents.content}\n </div>\n <div className=\"actions\">\n <div className=\"action-wrapper\" xs={12} sm={5}>\n {subComponents.explore}\n </div>\n <div className=\"action-wrapper\" xs={12} sm={7}>\n {subComponents.links}\n </div>\n </div>\n </div>\n )\n};\n\nexport const Title = props => <h4>{props.children}</h4>;\nexport const Description = props => <p className=\"description\">{props.children}</p>;\nexport const Content = props => <div className=\"content\">{props.children}</div>;\n\nconst QueryTerm = props => {\n let category, name, badge;\n name = props.name;\n if (props.category) {\n category = props.category + ' | ';\n }\n if (_.isNumber(props.count)) {\n badge = <Badge style={{marginLeft: \"0.5rem\"}} bg='secondary'>{props.count}</Badge>\n }\n return (\n <Button variant='outline-dark' onClick={props.handleClick}>\n {category}{name}{badge}\n </Button>\n )\n};\n\nfunction renderExplorations(explorations) {\n return explorations.map(\n (exploration, idx) =>\n <QueryTerm key={idx} {...exploration} />\n );\n}\nexport const Explore = props => (\n <div className=\"explore\">\n <h5>Search Filters</h5>\n <div>\n {renderExplorations(props.explorations)}\n </div>\n </div>\n);\n\nfunction renderLinks(links) {\n let external = <small title=\"This link opens a page from an external site\"> <BiLinkExternal/></small>;\n return links.map((link, idx) =>\n <li key={idx}>\n <a href={link.url} target=\"_blank\" className=\"external-link\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: link.name\n })\n }}>{link.name}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={link.name}*/}\n {/* to={link.url}*/}\n {/* target=\"_blank\"*/}\n {/* className=\"external-link\"*/}\n {/*>*/}\n {/* {link.name}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n}\n\nexport const Links = props => (\n <div className=\"links\">\n <h5>Links to other resources</h5>\n <ul>\n {renderLinks(props.links)}\n </ul>\n </div>\n);\n","import { initializeApp } from \"firebase/app\";\n\nconst firebaseConfig = {\n apiKey: \"AIzaSyCyTJmxfWgfuhI6-8uqocSiE9KOWUlkgkk\",\n authDomain: \"gramene-auth.firebaseapp.com\",\n projectId: \"gramene-auth\",\n storageBucket: \"gramene-auth.appspot.com\",\n messagingSenderId: \"590873346270\",\n appId: \"1:590873346270:web:f76a31a93619e69439824f\"\n};\n\nexport const firebaseApp = initializeApp(firebaseConfig);\n\nexport const suggestionToFilters = (suggestion) => {\n return {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 3,\n children: [\n {\n fq_field: suggestion.fq_field,\n fq_value: suggestion.fq_value,\n name: suggestion.name,\n category: suggestion.category,\n leftIdx: 1,\n rightIdx: 2,\n negate: false,\n marked: false\n }\n ]\n }\n}\n","import React from 'react'\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport {Button} from \"react-bootstrap\";\nimport Browser from \"./location/browser\";\nimport {connect} from \"redux-bundler-react\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Location extends React.Component {\n constructor(props) {\n super(props);\n this.gene = this.props.geneDocs[this.props.searchResult.id];\n this.initRegion();\n this.state = {\n visibleRange: this.initVisibleRange()\n };\n }\n\n initVisibleRange() {\n var location, span, padding, result;\n location = this.gene.location;\n if(!location) {\n throw new Error(`Could not find the location of the gene in props.`);\n }\n\n span = location.end - location.start + 1;\n padding = Math.floor(.1 * span);\n\n result = {\n chr: location.region,\n start: location.start - padding,\n end: location.end + padding\n };\n\n result.displayName = `${result.chr}:${result.start}-${result.end}`;\n\n return result;\n }\n\n initRegion() {\n var region, isChromosome, regionType, regionName;\n region = this.gene.location.region;\n if (region) {\n isChromosome = /^\\d+$/.test(region);\n if (isChromosome) {\n regionType = 'chromosome';\n regionName = 'Chromosome ' + region;\n }\n else {\n regionType = 'scaffold';\n regionName = region;\n }\n this.region = {\n isChromsome: isChromosome,\n name: regionName,\n type: regionType\n };\n }\n }\n\n\n handleViewChange(chr, start, end) {\n var visibleRange = {\n chr: chr,\n start: start,\n end: end,\n displayName: `${chr}:${start}-${end}`\n };\n\n if(!isEqual(visibleRange, this.state.visibleRange)) {\n this.setState({\n visibleRange: visibleRange\n });\n }\n }\n\n updateQuery(restrictToVisibleRange) {\n var location, geneName, visibleRange, filter, filterDisplayName, fq;\n location = this.gene.location;\n geneName = this.gene.name;\n // category: 'Gene Tree',\n // fq_field: 'gene_tree',\n // fq_value: this.tree._id,\n // name: `Homologs of ${this.gene.name}`\n\n let terms = [\n {\n category: \"Map\",\n name: location.map,\n fq_field: 'map',\n fq_value: location.map\n },\n {\n category: \"Region\",\n name: location.region,\n fq_field: 'region',\n fq_value: location.region\n }\n ];\n fq = `map:${location.map} AND region:${location.region}`;\n\n if (restrictToVisibleRange) {\n visibleRange = this.state.visibleRange;\n\n terms.push({\n category: \"Interval\",\n name: `${visibleRange.start}-${visibleRange.end}`,\n fq_field: 'start',\n fq_value: `[${visibleRange.start} TO ${visibleRange.end}]`\n });\n fq += ` AND (start:[${visibleRange.start} TO ${visibleRange.end}]`\n + ` OR end:[${visibleRange.start} TO ${visibleRange.end}])`;\n\n filterDisplayName = visibleRange.displayName;\n } else {\n filterDisplayName = \"Shares \" + this.region.type + \" with \" + geneName;\n }\n\n console.log(\"User asked to filter by location\");\n filter = {\n category: 'Location',\n id: fq,\n fq: fq,\n display_name: filterDisplayName\n };\n\n // QueryActions.removeAllFilters();\n // QueryActions.setFilter(filter);\n this.props.doAddGrameneRangeQuery(terms);\n if (this.props.closeModal) this.props.closeModal();\n }\n\n explorations() {\n var visible, result;\n visible = this.state.visibleRange;\n result = [\n {\n name: `All on ${this.region.name}`,\n handleClick: ()=>this.updateQuery(false)\n }\n ];\n if (visible) {\n result.push({\n name: `All within ${getProp(visible, 'displayName')}`,\n handleClick: ()=>this.updateQuery(true)\n });\n }\n return result;\n }\n\n links() {\n function jgiify(id) {\n return id.replace('SORBI_3','Sobic.').replace(/\\.v[0-9]\\.[0-9]$/,'');\n }\n var gene = this.gene;\n let links = [\n {name: 'Ensembl Browser', url: `${this.props.config.ensemblURL}/${gene.system_name}/Gene/Summary?g=${gene._id}`}\n ];\n if (gene.annotations.taxonomy.ancestors.includes(4557))\n links.push({name: 'Phytozome', url: `https://phytozome-next.jgi.doe.gov/report/gene/Sbicolor_v5_1/${jgiify(gene._id)}`})\n if (gene.taxon_id === 3702)\n links.push(\n {name: 'tair', url: `https://www.arabidopsis.org/servlets/TairObject?name=${gene._id}&type=locus`},\n {name: 'ThaleMine', url: `https://bar.utoronto.ca/thalemine/keywordSearchResults.do?searchTerm=${gene._id}&searchSubmit=search`}\n );\n if (gene.taxon_id === 39947)\n links.push({name: 'RAP-DB', url: `https://rapdb.dna.affrc.go.jp/locus/?name=${gene._id}`});\n const isMaize = new RegExp(/^Zm[0-9]+/);\n if (isMaize.test(gene._id))\n links.push({name: 'MaizeGDB', url: `http://www.maizegdb.org/gene_center/gene/${gene._id}`});\n return links;\n }\n\n render() {\n return (\n <Detail>\n {/*<Title key=\"title\">Genome location: {this.renderGenePosition()}</Title>*/}\n <Description key=\"description\">Currently viewing: {this.renderLocation()}&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\n// var ensemblREST = require('../../../../../package.json').gramene.ensemblREST;\n//const ensemblREST = 'http://data.gramene.org/ensembl63';\n// const ensemblREST = 'https://data.sorghumbase.org/ensembl2';\n// const ensemblREST = 'https://data.gramene.org/vitis-ensembl1';\n// const ensemblREST = 'https://data.gramene.org/pansite-ensembl';\n\n// calculate this once.\nconst PREFIX = '/static/gramene-dalliance/';\n\nexport default class DallianceBrowser extends React.Component {\n\n constructor(props) {\n super(props);\n this.initialVisibleRange = props.visibleRange;\n }\n\n shouldComponentUpdate(newProps) {\n // should we reset the view to initial state?\n if(isEqual(newProps.visibleRange, this.initialVisibleRange)) {\n this.browser.setLocation(newProps.visibleRange.chr, newProps.visibleRange.start, newProps.visibleRange.end);\n }\n\n return false;\n }\n\n biodallianceElementId() {\n return this.props.gene._id + 'Browser';\n }\n\n browser() {\n var g, view, start, end, browser;\n g = this.props.gene;\n view = this.props.visibleRange;\n start = view.start;\n end = view.end;\n\n this.browser = browser = new Browser(\n {\n pageName: this.biodallianceElementId(),\n chr: g.location.region,\n viewStart: start,\n viewEnd: end,\n cookieKey: g._id + 'BrowserCookie',\n prefix: PREFIX,\n\n coordSystem: {\n speciesName: g.system_name,\n taxon: g.taxon_id,\n auth: 'Gramene',\n version: '3',\n ucscName: 'IRGSP-1.0'\n },\n\n sources: [\n {\n name: 'DNA',\n ensemblURI: this.props.config.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.config.ensemblRest,\n tier_type: 'ensembl',\n species: g.system_name,\n type: ['gene', 'transcript', 'exon', 'cds']\n }\n ],\n\n // hubs: ['/Track_Hubs/DRP000315/hub.txt'],\n disablePoweredBy: true,\n setDocumentTitle: false,\n noDefaultLabels: true,//!this.props.expanded,\n noPersist: true,\n noPersistView: true,\n maxWorkers: 2,\n noTitle: true,\n noLocationField: false,\n noLeapButtons: true,//!this.props.expanded,\n noZoomSlider: false, //!this.props.expanded,\n noTrackAdder: true,//!this.props.expanded,\n noTrackEditor: true,//!this.props.expanded,\n noExport: true,//!this.props.expanded,\n noOptions: true,//!this.props.expanded,\n noHelp: true,\n maxViewWidth: 1000000\n }\n );\n\n browser.addViewListener(this.props.onViewChange);\n }\n\n cancel() {\n if (typeof this.timeoutID == \"number\") {\n window.clearTimeout(this.timeoutID);\n delete this.timeoutID;\n }\n }\n\n componentDidMount() {\n // this.browser();\n this.cancel();\n var self = this;\n this.timeoutID = window.setTimeout(function () {self.browser();}, 0);\n }\n\n componentWillUnmount() {\n this.cancel();\n }\n\n render() {\n return (\n <div id={this.biodallianceElementId()}/>\n );\n }\n}\n\n// DallianceBrowser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// visibleRange: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// onViewChange: React.PropTypes.func.isRequired\n// };\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport FlatToNested from 'flat-to-nested';\nimport {Explore, Links} from \"./generic\";\nimport treesClient from \"gramene-trees-client\";\n// import {TreeMenu} from \"react-tree-menu\";\nimport TreeMenu from \"react-simple-tree-menu\";\nimport '../../../../node_modules/react-simple-tree-menu/dist/main.css';\n\nimport {Spinner} from \"react-bootstrap\";\nimport _ from 'lodash'\nimport \"./tree-view.css\"\n\nvar reactomeURL = \"https://plantreactome.gramene.org\";\n\nclass Pathways extends React.Component {\n constructor(props) {\n super(props);\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n this.gene = props.geneDocs[props.searchResult.id];\n this.holderId = 'displayHolder' + this.gene._id;\n this.state = {};\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 if (! docs[0].hasOwnProperty(lineageField)) {\n let tid = Math.floor(taxon_id / 1000);\n lineageField = 'lineage_'+tid;\n }\n let tsDocs = docs.map(function(doc) {\n let tsDoc = _.pick(doc,['_id','name','type']);\n tsDoc.lineage = doc[lineageField];\n return tsDoc;\n });\n console.log(tsDocs);\n return tsDocs;\n }\n\n componentWillUnmount() {\n // DocActions.noLongerNeedDocs('pathways', this.pathwayIds);\n if (this.diagram) this.diagram.detach();\n }\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, {useState, useEffect, useRef, useCallback} from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Button} from 'react-bootstrap';\nimport { AgGridReact } from \"ag-grid-react\";\nimport _ from 'lodash';\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport \"./VEP.css\";\n\nconst ggURL = {\n IRRI: 'https://gringlobal.irri.org/gringlobal/accessiondetail?id=',\n ARS: 'https://npgsweb.ars-grin.gov/gringlobal/accessiondetail.aspx?id=',\n ICRISAT: 'https://genebank.icrisat.org/IND/PassportSummary?ID=',\n sorbmutdb: 'https://www.depts.ttu.edu/igcast/sorbmutdb.php',\n maizeGDB: 'https://wgs.maizegdb.org/',\n NCBI: 'https://www.ncbi.nlm.nih.gov/biosample/?term='\n};\n\nconst rice_studies = {'1': {label: 'Rice 3K', type: 'NAT'}};\nconst study_info = {\n 'sorghum_bicolor': {\n '1': {label: 'Purdue EMS', type: 'EMS'},\n '2': {label: 'USDA Lubbock EMS', type: 'EMS'},\n '3': {label: 'Lozano', type: 'NAT'},\n '4': {label: 'USDA Lubbock EMS', type: 'EMS'},\n '5': {label: 'Boatwright SAP', type: 'NAT'},\n '7': {label: 'Kumar BAP', type: 'NAT'},\n '8': {label: 'Lasky landraces', type: 'NAT'},\n '9': {label: 'Sorghum Genomics Toolbox', type: 'NAT'}\n },\n 'zea_maysb73': {\n '15': {label: 'MaizeGDB 2024', type: 'NAT'}\n },\n 'oryza_sativa': {\n '7': {label: 'Rice 3K', type: 'NAT'},\n '20': {label: '20K-RGP', type: 'NAT'},\n '29': {label: 'Rice USDA mini core', type: 'NAT'},\n '38': {label: 'RAPDB 2024', type: 'NAT'},\n },\n 'oryza_aus': { '20': {label: '20K-RGP', type: 'NAT'}},\n 'oryza_sativa117425': { '20': {label: '20K-RGP', type: 'NAT'}},\n 'oryza_sativair64rs2': { '20': {label: '20K-RGP', type: 'NAT'}},\n 'oryza_sativamh63': { '20': {label: '20K-RGP', type: 'NAT'}}\n};\nconst AccessionLink = ({germplasm, gene_id}) => {\n const genebank = germplasm.stock_center;\n const url = ggURL[genebank];\n if (germplasm.germplasm_dbid) { // link to stock center\n const germ_id = germplasm.germplasm_dbid;\n if (germ_id && url && germ_id !== \"0\") {\n return <a target=\"_blank\" href={`${url}${germ_id}`}>\n {germplasm.pub_id} ({genebank})</a>;\n }\n }\n if (genebank === \"sorbmutdb\") {\n return (\n <form id={germplasm.pub_id} action={url} method=\"post\" target=\"_blank\">\n <input type=\"hidden\" name=\"search\" value={gene_id.replace('SORBI_3','Sobic.')} />\n <input type=\"hidden\" name=\"submit\" value=\"Search\" />\n <button type=\"submit\" className=\"button-like-link\">SorbMutDB</button>\n </form>\n );\n }\n if (germplasm.pop_id === '15' && germplasm.stock_center === 'NOT FOUND') {\n return <a target=\"_blank\" href={ggURL['maizeGDB']}>{germplasm.pub_id} (SNPVersity)</a>\n }\n return <span>{germplasm.pub_id}</span>\n}\nfunction compareGermplasm(a, b) {\n const aSub = a?.germplasm?.subpop ?? '';\n const bSub = b?.germplasm?.subpop ?? '';\n const subCmp = aSub.localeCompare(bSub, 'en', { sensitivity: 'accent' });\n if (subCmp !== 0) return subCmp;\n\n const aPub = a?.germplasm?.pub_id ?? '';\n const bPub = b?.germplasm?.pub_id ?? '';\n return aPub.localeCompare(bPub, 'en', { sensitivity: 'accent' });\n}\nfunction group_germplasm(gene, germplasmLUT, vep_obj) {\n let accessionTable = [];\n Object.entries(vep_obj).forEach(([key,accessions]) => {\n const parts = key.split(\"__\");\n if (parts[0] === \"VEP\") {\n if (parts[1] !== \"merged\") {\n accessions.filter(ens_id => germplasmLUT.hasOwnProperty(ens_id)).forEach(ens_id => {\n const germplasm = germplasmLUT[ens_id][0];\n const pop = study_info[parts[3]][parts[4]];\n const conseq = parts[1].replaceAll(\"_\",\" \");\n const status = parts[2] === \"het\" ? \"heterozygous\" : \"homozygous\";\n const accInfo = {\n key: [pop.label,conseq,status].join('%%%'),\n germplasm: germplasm,\n pop: pop\n };\n accessionTable.push(accInfo);\n });\n }\n }\n });\n // group accessionTable by key field\n const groups = _.groupBy(accessionTable, 'key');\n let grouped = [];\n let id=0;\n Object.keys(groups).sort().forEach((group) => {\n const [pop,conseq,status] = group.split('%%%');\n id++;\n const tally = groups[group].length;\n grouped.push({\n id: id,\n group: group,\n summary: true,\n pop: pop,\n conseq: conseq,\n status: status,\n tally: tally\n });\n groups[group].sort(compareGermplasm).forEach(acc => {\n id++;\n grouped.push({\n id: id,\n group: group,\n summary: false,\n pop:pop,\n conseq: conseq,\n status: status,\n accession: acc,\n tally: tally\n })\n })\n })\n return grouped;\n}\nconst THRESHOLD = 5;\nconst GridWithGroups = ({groups,gene_id,doGrin}) => {\n const [rowData, setRowData] = useState(groups);\n\n const initialExpanded = {};\n rowData.forEach((row) => {\n if (row.summary) {\n initialExpanded[row.group] = (row.tally < THRESHOLD);\n }\n });\n const [expandedGroups, setExpandedGroups] = useState(initialExpanded);\n\n\n // Toggle group visibility\n const toggleGroup = (group) => {\n setExpandedGroups((prevExpandedGroups) => ({\n ...prevExpandedGroups,\n [group]: !prevExpandedGroups[group], // Toggle the group's state\n }));\n };\n\n // Filter the data to show/hide rows based on the expanded group state\n const getVisibleRowData = () => {\n const visibleRows = [];\n rowData.forEach((row) => {\n if (row.summary) {\n if (row.tally > 1) {\n visibleRows.push(row);\n }\n } else if (expandedGroups[row.group]) {\n visibleRows.push(row); // Show non-summary rows if the group is expanded\n }\n });\n return visibleRows;\n };\n\n // Define columns with a custom renderer for the summary rows\n const columnDefs = [\n { field: 'pop', headerName: 'Study/Population', flex: 1,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'conseq', headerName: 'VEP consequence', flex: 1,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'status', headerName: 'Allele status', flex: 1,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'accession', headerName: doGrin ? 'Order Germplasm' : 'Accession', flex: 1,\n headerComponent: (props) => {\n return (\n <div style={{display: 'flex', alignItems: 'center'}}>\n {doGrin && <i className=\"fas fa-shopping-cart\">&nbsp;</i>}\n <span>{props.displayName}</span>\n </div>\n );\n }, // Use the custom header with the shopping cart icon\n cellRenderer: (params) => {\n if (params.value) {\n return <AccessionLink germplasm={params.value.germplasm} gene_id={gene_id} />;\n }\n if (params.data.summary) {\n return (\n <span\n onClick={() => toggleGroup(params.data.group)}\n >\n {params.data.tally} Accessions {expandedGroups[params.data.group] ? '▼' : '▶'}\n </span>\n );\n }\n return null;\n }\n },\n { field: 'synonym', headerName: 'Synonym', filter:false, sortable:false, flex: 1, cellRenderer: (params) => {\n if (params.data.accession) {\n return params.data.accession.germplasm.ens_id\n }\n return null;\n }},\n { field: 'subpop', headerName: 'Subpopulation', filter:false, sortable: false, flex: 1, cellRenderer: (params) => {\n if (params.data.accession && params.data.accession.germplasm.subpop && params.data.accession.germplasm.subpop !== \"?\") {\n return params.data.accession.germplasm.subpop\n }\n return null;\n }},\n { field: 'search', headerName: 'All LOF Genes', sortable:false, filter:false, flex: 1,\n cellRenderer: (params) => {\n if (params.data.accession) {\n const currentURL = new URL(window.location.href);\n const accession = params.data.accession;\n currentURL.search = '';\n currentURL.searchParams.set('category', 'Germplasm');\n currentURL.searchParams.set('fq_field', `VEP__merged__${accession.pop.type}__attr_ss`);\n currentURL.searchParams.set('fq_value', accession.germplasm.ens_id);\n currentURL.searchParams.set('name', accession.germplasm.ens_id);\n\n return <Button size='sm' href={currentURL.toString()}>Search</Button>\n\n }\n return null;\n }\n }\n ];\n\n const defaultColDef = {\n sortable: true,\n filter: \"agTextColumnFilter\",\n cellStyle: (params) => {\n if (params.data.summary) {\n return {cursor: 'pointer'};\n }\n return null;\n }\n };\n\n const nVisible = getVisibleRowData().length;\n const tableHeight = 50 + Math.min(nVisible, 10) * 42;\n return (\n <div\n className=\"ag-theme-quartz\"\n style={{ height: tableHeight, width: \"100%\", maxWidth: \"1200px\" }}\n >\n <AgGridReact\n rowData={getVisibleRowData()}\n columnDefs={columnDefs}\n getRowNodeId={(data) => data.id}\n animateRows={true}\n defaultColDef={defaultColDef}\n />\n </div>\n );\n};\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n if (props.grameneConsequences && props.grameneConsequences[gene._id] && props.grameneGermplasm) {\n const groups = group_germplasm(gene, props.grameneGermplasm, props.grameneConsequences[gene._id]);\n\n return <div>\n <h5>Predicted loss-of-function alleles were detected in these germplasm.</h5>\n <div >Explore other variants within this gene in the <a target=\"_blank\"\n href={`${props.configuration.ensemblURL}/${gene.system_name}/Gene/Variation_Gene/Image?db=core;g=${props.searchResult.id}`}>\n Variant image</a> page in the Ensembl genome browser.</div>\n <GridWithGroups groups={...groups} gene_id={gene._id} doGrin={!props.configuration.hasOwnProperty('noGRIN')}/>\n </div>\n } else {\n props.doRequestVEP(gene._id);\n return <pre>loading</pre>;\n }\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneConsequences',\n 'selectGrameneGermplasm',\n 'doRequestVEP',\n Detail\n);\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n <td className=\"xref-name-col\">{db}</td>\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n </tr>\n );\n }\n}\n\nfunction formatXrefsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n return gene.xrefs\n .filter(xr => dbxrefs.isKnown(xr.db) && xr.db !== \"PUBMED\")\n .sort()\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\n\nconst Xrefs = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Cross-references</Title>\n <Description key=\"description\">References to this gene in other databases:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-name-col\">Database</th>\n <th className=\"xref-value-col\">IDs and links</th>\n </tr>\n </thead>\n <tbody>\n {formatXrefsForGene(geneDocs[searchResult.id])}\n </tbody>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Xrefs;\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n {/*<td className=\"xref-name-col\">{db}</td>*/}\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n <td className=\"xref-name-col\">{this.props.source}</td>\n <td className=\"xref-value-col\">{this.props.text}</td>\n </tr>\n );\n }\n}\n\nfunction formatPubsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n let pubs = gene.xrefs.filter(xr => xr.db === \"PUBMED\");\n if (pubs.length === 0) {\n return <tr><td colSpan={3}>No publications found.</td></tr>\n }\n return pubs.sort((a,b) => {\n if (a.source) {\n if (b.source) {\n if (a.source < b.source) {\n return -1;\n }\n if (a.source > b.source) {\n return 1;\n }\n }\n else {\n return -1;\n }\n }\n else if (b.source) {\n return 1;\n }\n if (a.db < b.db) {\n return -1;\n }\n if (a.db > b.db) {\n return 1;\n }\n return 0;\n })\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\nconst formURL = 'https://docs.google.com/forms/d/e/1FAIpQLSey-xPyTysdd9c2phXT6kcbjEDeCppG4dLG7LjZCeLpx_KGog/viewform?usp=pp_url&entry.1266455249=';\nconst Publications = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Curated publications</Title>\n <Description key=\"description\">Functions described in the literature:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-10-col\">PubMed link</th>\n <th className=\"xref-10-col\">Curation source</th>\n <th className=\"xref-80-col\">Title/Description</th>\n </tr>\n </thead>\n <tbody>\n {formatPubsForGene(geneDocs[searchResult.id])}\n </tbody>\n <tfoot>\n <tr>\n <th colSpan={3}>Submit a gene function <a target=\"_blank\" href={formURL + searchResult.id}>here</a></th>\n </tr>\n </tfoot>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Publications;\n\n","import React, { useState, useEffect } from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Container, Row, Col, ToggleButton, ButtonGroup } from 'react-bootstrap';\nimport { AiOutlineCopy } from 'react-icons/ai';\nimport './sequences.css';\nimport keyBy from \"lodash/keyBy\";\n\nconst CodeBlock = props => {\n const plainFasta = `>${props.id}\\n${props.seq}`\n\n const [showNotification, setShowNotification] = useState(false);\n\n const copyCode = () => {\n // Use the Clipboard API to write text to the clipboard\n navigator.clipboard.writeText(plainFasta)\n .then(() => {\n setShowNotification(true);\n })\n .catch((err) => {\n console.error('Unable to copy to clipboard', err);\n });\n };\n\n useEffect(() => {\n if (showNotification) {\n const notificationTimeout = setTimeout(() => {\n setShowNotification(false);\n }, 2000); // Hide the notification after 2 seconds\n\n return () => clearTimeout(notificationTimeout);\n }\n }, [showNotification]);\n\n return (\n <div className=\"fasta-container\">\n <code className=\"fasta\"><span className=\"header\">&gt;{props.id}</span><br/>{\n props.blocks.map((block,idx) =>\n <span key={idx} className={block.kind}>{block.seq}</span>\n )\n }</code>\n <p className=\"fasta-key\">\n <b>Key:</b>&nbsp;5'UTR&nbsp;\n <span className=\"square-utr5\">&nbsp;&nbsp;</span>\n &nbsp;CDS&nbsp;\n <span className=\"square-cds\">&nbsp;&nbsp;</span>\n &nbsp;3'UTR&nbsp;\n <span className=\"square-utr3\">&nbsp;&nbsp;</span>\n </p>\n <button className=\"copy-button\" onClick={copyCode}><AiOutlineCopy /></button>\n {showNotification && <div className=\"notification\">Sequence copied</div>}\n </div>\n );\n};\n\nconst decoratePeptide = (seq, transcript) => {\n let junctions = [];\n if (transcript.exon_junctions) {\n transcript.exon_junctions.forEach((ej, idx) => {\n if (ej > transcript.cds.start && ej <= transcript.cds.end) {\n junctions.push(Math.floor((ej - transcript.cds.start) / 3));\n }\n });\n }\n if (junctions.length === 0) {\n return [{kind:'cds', seq:seq}];\n }\n let offset = 0;\n let blocks = [];\n junctions.forEach((j, idx) => {\n let kind = idx % 2 === 0 ? \"cds\" : \"cds-other\";\n blocks.push({kind: kind, seq: seq.substring(offset, j)});\n offset = j;\n });\n blocks.push({kind: junctions.length % 2 === 0 ? \"cds\" : \"cds-other\", seq: seq.substring(junctions.pop())});\n return blocks;\n}\nconst decorateSeq = (geneSeq, gene, up, down, tid, mode) => {\n // return a list of blocks with kind and seq properties\n let blocks = [];\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n const offset = gene.location.strand === 1\n ? gene.location.start - geneSeq.start\n : geneSeq.end - gene.location.end\n if (up > 0) {\n const TSS = gene.gene_structure.exons.find(exon => exon.id === transcript.exons[0]).start;\n blocks.push({\n kind:'upstream',\n seq: geneSeq.seq.substring(offset - up + TSS - 1, offset + TSS - 1).toLowerCase()\n })\n }\n // add exons and introns based on tid\n let pos_in_transcript = 0;\n let pos_in_gene = 0;\n let blockType = 'utr5';\n let extra = '';\n transcript.exons.forEach((eid, e_idx) => {\n const exon = gene.gene_structure.exons.find(exon => exon.id === eid);\n if (e_idx > 0 && mode === \"dna\") {\n blocks.push({\n kind: 'intron',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + exon.start - 1).toLowerCase()\n });\n pos_in_gene = exon.start-1;\n }\n if (mode === \"rna\") {\n extra = e_idx % 2 === 1 ? '-other' : '';\n }\n let exon_length = exon.end - exon.start + 1;\n if (transcript.cds && pos_in_transcript < transcript.cds.start && pos_in_transcript + exon_length >= transcript.cds.start) {\n // CDS starts in this exon\n const utr5_len = transcript.cds.start - pos_in_transcript - 1;\n if (utr5_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + utr5_len)\n });\n exon_length -= utr5_len;\n pos_in_gene += utr5_len;\n pos_in_transcript = transcript.cds.start - 1;\n }\n blockType = 'cds';\n }\n if (blockType === 'cds' && pos_in_transcript + exon_length >= transcript.cds.end) {\n // CDS ends in this exon\n const cds_len = transcript.cds.end - pos_in_transcript;\n if (cds_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + cds_len)\n });\n exon_length -= cds_len;\n pos_in_gene += cds_len;\n pos_in_transcript = transcript.cds.end;\n }\n blockType = 'utr3';\n }\n if (exon_length > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + exon_length)\n })\n }\n pos_in_gene = exon.end;\n pos_in_transcript += exon_length;\n })\n // check if there's more to the gene locus after end of transcript?\n // downstream is currently relative to end of transcript but upstream is relative to first TSS\n if (down > 0) {\n blocks.push({\n kind:'downstream',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + down).toLowerCase()\n })\n }\n return blocks;\n};\nconst buildId = (gene, geneSeq, up, down) => {\n let gs = gene.location.strand === 1 ? gene.location.start - up : gene.location.start - down;\n let ge = gene.location.strand === 1 ? gene.location.end + down : gene.location.end + up;\n let extras = [];\n if (gene.location.strand === -1) {\n extras.push('reverse')\n }\n if (up > 0) {\n extras.push(`upstream=${up}`)\n }\n if (down > 0) {\n extras.push(`downstream=${down}`)\n }\n return `${geneSeq.genome}|${gene._id}|${gene.location.region}:${gs}..${ge} ${extras.join('|')}`\n};\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [tab, setTab] = useState('dna');\n const [upstream, setUpstream] = useState(0);\n const [downstream, setDownstream] = useState(0);\n const [tid, setTid] = useState(gene.gene_structure.canonical_transcript);\n let geneSeq;\n let rnaSeq;\n let pepSeq;\n if (props.geneSequences && props.geneSequences[gene._id]) {\n geneSeq = props.geneSequences[gene._id];\n }\n else {\n props.doRequestGeneSequence(gene)\n return <pre>loading</pre>;\n }\n if (props.rnaSequences && props.rnaSequences[tid]) {\n rnaSeq = props.rnaSequences[tid]\n }\n else {\n props.doRequestRnaSequence(tid, gene)\n return <pre>loading</pre>;\n }\n const maxUp = gene.location.strand === 1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const maxDown = gene.location.strand === -1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n let tl_id;\n if (transcript.translation) {\n tl_id = transcript.translation.id;\n if (props.pepSequences && props.pepSequences[tl_id]) {\n pepSeq = props.pepSequences[tl_id];\n }\n else {\n props.doRequestPepSequence(tl_id, gene);\n return <pre>loading</pre>;\n }\n }\n return <Tabs activeKey={tab}\n onSelect={(k) => setTab(k)}\n >\n <Tab tabClassName=\"dna\" eventKey=\"dna\" title=\"Genomic sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n <Row>\n <Col><b><i>Show flanking sequence</i></b></Col>\n </Row>\n <Row>\n <Col style={{ maxWidth: '5ch', textAlign: 'right'}}>{upstream}</Col>\n <Col style={{maxWidth: '20ch'}}>\n <Form.Range\n className=\"reverse-slide\"\n value={upstream}\n onChange={(e) => setUpstream(e.target.value)}\n min={0}\n max={maxUp}\n step={10}\n /><div style={{textAlign:'right'}}>Upstream</div>\n </Col>\n <Col style={{maxWidth: '30ch'}}>\n <div className=\"styled-span\">\n <div className=\"vertical-line\"/>\n <div className=\"horizontal-line\"/>\n <span>Transcript (unspliced)</span>\n <div className=\"horizontal-line\"/>\n <div className=\"vertical-line\"/>\n </div>\n </Col>\n <Col style={{maxWidth: '20ch'}}>\n <Form.Range\n value={downstream}\n onChange={(e) => setDownstream(e.target.value)}\n min={0}\n max={maxDown}\n step={10}\n /><div style={{textAlign:'left'}}>Downstream</div>\n </Col>\n <Col style={{ maxWidth: '5ch', textAlign: 'left'}}>{downstream}</Col>\n </Row>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Highlight transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={buildId(gene,geneSeq,+upstream,+downstream)} seq={geneSeq.seq.substring(maxUp - +upstream, maxUp + gene.location.end - gene.location.start + 1 + +downstream)} blocks={decorateSeq(geneSeq,gene,+upstream,+downstream,tid,\"dna\")}/>}\n </Tab>\n <Tab tabClassName=\"rna\" eventKey=\"rna\" title=\"Transcript sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tid} seq={rnaSeq.seq} blocks={decorateSeq(geneSeq,gene,0,0,tid,\"rna\")}/>}\n </Tab>\n {gene.biotype === \"protein_coding\" &&\n <Tab tabClassName=\"pep\" eventKey=\"pep\" title=\"Peptide sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tl_id} seq={pepSeq.seq} blocks={decoratePeptide(pepSeq.seq,transcript)}/>}\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGeneSequences',\n 'selectRnaSequences',\n 'selectPepSequences',\n 'doRequestGeneSequence',\n 'doRequestRnaSequence',\n 'doRequestPepSequence',\n Detail\n);\n\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport Vis from \"gramene-search-vis\"\nimport Selection from './selection.js'\nimport '../../../node_modules/gramene-search-vis/styles/main.less';\n\nclass TaxDist extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapseEmpties: true\n };\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 = !g.hidden;\n })\n }\n else {\n this.state.genomes.forEach(g => {\n g.selected = !g.hidden && props.grameneGenomes.active[g.taxon_id];\n })\n }\n }\n getSelectedGenomes() {\n let selected = {};\n let notHidden = {};\n let somethingWasSelected = false;\n this.state.genomes.forEach(g => {\n if (!g.hidden) {\n notHidden[g.taxon_id] = true;\n if (g.selected) {\n selected[g.taxon_id] = true;\n somethingWasSelected = true;\n }\n }\n });\n return somethingWasSelected ? selected : notHidden;\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 if(m.hidden) return <></>\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","import React, { useState, Suspense } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { Accordion, Button } from 'react-bootstrap';\nimport \"./expression.css\";\nconst LazyStudy = React.lazy(() => import('./Study'));\n\nconst StudyList = props => {\n return <Accordion alwaysOpen defaultActiveKey={props.studies.length === 1 ? \"study_0\" : undefined}>\n {props.studies.map((study, idx) => {\n return (\n <Accordion.Item key={idx} eventKey={'study_'+idx}>\n <Accordion.Header>{study.description}</Accordion.Header>\n <Accordion.Body>\n <Suspense fallback={<div>Loading...</div>}>\n <LazyStudy id={study._id}/>\n </Suspense>\n {/*<Study id={study._id} />*/}\n </Accordion.Body>\n </Accordion.Item>\n )\n })}\n </Accordion>\n};\n\nconst Expression = props => {\n let searchTaxa = {};\n if (props.grameneSearch) {\n const taxon_id_facet = props.grameneSearch.facet_counts.facet_fields.taxon_id;\n taxon_id_facet.filter((tid, idx) => idx % 2 === 0).forEach(tid => searchTaxa[tid] = true);\n }\n const availableTaxa = Object.keys(props.expressionStudies)\n .filter(tid => searchTaxa[tid] || searchTaxa[tid + '001'])\n .sort((a,b) => props.grameneMaps[a + '001'].left_index - props.grameneMaps[b + '001'].left_index);\n return availableTaxa && props.grameneTaxonomy &&\n <div>\n <div>This is where you can launch a component for the selected samples. props.desiredSamples lists them.\n This component can request the data from the API\n organize samples by factor metadata? One big table with all the studies?\n <Button>Show Samples ({Object.keys(props.desiredSamples).length} selected)</Button>\n </div>\n <Accordion alwaysOpen defaultActiveKey={availableTaxa.length === 1 ? \"tax_0\" : undefined}>\n {availableTaxa.map((tid, idx) => {\n const n = props.expressionStudies[tid].length;\n return <Accordion.Item key={idx} eventKey={'tax_'+idx}>\n <Accordion.Header>{props.grameneTaxonomy[tid].name} - {n} {n === 1 ? 'study' : 'studies'}</Accordion.Header>\n <Accordion.Body><StudyList studies={props.expressionStudies[tid]}/></Accordion.Body>\n </Accordion.Item>\n })}\n </Accordion>\n </div>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n Expression\n);\n","import {connect} from \"redux-bundler-react\";\nimport React, { useEffect, useState } from 'react';\nimport {Table, Form, Button, Alert, Spinner, Container, Row, Col} from 'react-bootstrap';\nimport { firebaseApp } from \"../utils\";\nimport {getAuth, onAuthStateChanged} from \"firebase/auth\";\n\nconst auth = getAuth(firebaseApp);\n\nconst MAX_GENE_IDS = 1000; // Define the maximum number of gene IDs allowed\n\nconst GeneListDisplayComponent = props => {\n const [publicGeneLists, setPublicGeneLists] = useState([]);\n const [privateGeneLists, setPrivateGeneLists] = useState([]);\n const [error, setError] = useState(null);\n const [user, setUser] = useState({});\n onAuthStateChanged(auth, (user) => setUser(user));\n\n const fetchPrivateGeneLists = async () => {\n try {\n const token = await user.getIdToken();\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=false`, {\n method: 'GET',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n const result = await response.json();\n\n if (response.ok) {\n setError(null);\n setPrivateGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch private gene lists. Please try again later.');\n }\n };\n // Fetch saved gene lists from a backend or local storage\n const fetchPublicGeneLists = async () => {\n try {\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=true`);\n const result = await response.json();\n\n if (response.ok) {\n setPublicGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch gene lists. Please try again later.');\n }\n };\n\n // Fetch data when the component is mounted\n useEffect(() => {\n fetchPublicGeneLists();\n }, []);\n useEffect(() => {\n fetchPrivateGeneLists();\n }, [user]);\n\n return (\n <div className=\"gene-list-display-component\">\n <h4>Saved Gene Lists</h4>\n\n {error && (\n <Alert variant=\"danger\">\n {error}\n </Alert>\n )}\n\n {privateGeneLists.length > 0 && (\n <Table striped bordered hover className=\"mt-4\">\n <thead>\n <tr>\n <th>List Name</th>\n <th>Number of Genes</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n {privateGeneLists.map((list, index) => (\n <tr key={index}>\n <td>{list.label}</td>\n <td>{list.hash}</td>\n <td>\n <Button variant=\"info\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n <Button variant=\"danger\" onClick={() => deleteGeneList(props.api, list._id)} className=\"ml-2\">\n Delete\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </Table>\n )}\n\n {publicGeneLists.length > 0 ? (\n <Table striped bordered hover className=\"mt-4\">\n <thead>\n <tr>\n <th>List Name</th>\n <th>Number of Genes</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n {publicGeneLists.map((list, index) => (\n <tr key={index}>\n <td>{list.label}</td>\n <td>{list.hash}</td>\n <td>\n <Button variant=\"info\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n <Button variant=\"danger\" onClick={() => deleteGeneList(props.api, list._id)} className=\"ml-2\">\n Delete\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </Table>\n ) : (\n <Alert variant=\"warning\" className=\"mt-4\">\n No saved gene lists found.\n </Alert>\n )}\n </div>\n );\n};\n\n// Example functions for viewing and deleting lists\nconst viewGeneList = (list) => {\n alert(`Viewing gene list: ${list.name}\\nGenes: ${list.genes.join(', ')}`);\n};\n\nconst deleteGeneList = async (api,listId) => {\n if (window.confirm('Are you sure you want to delete this gene list?')) {\n // Replace with the actual delete request\n try {\n await fetch(`${api}/gene_lists/${listId}`, {\n method: 'DELETE',\n });\n alert('Gene list deleted!');\n // Optionally refetch the updated list\n } catch (err) {\n alert('Failed to delete gene list.');\n }\n }\n};\n\n\nconst GeneListComponent = props => {\n const [geneList, setGeneList] = useState('');\n const [listHash, setListHash] = useState(null);\n const [validationError, setValidationError] = useState([]);\n const [listName, setListName] = useState('');\n const [listIsPublic, setListIsPublic] = useState(false);\n const [validatedList, setValidatedList] = useState([]);\n const [errorMessage, setErrorMessage] = useState('');\n const [loading, setLoading] = useState(false); // New loading state\n const [user, setUser] = useState({});\n onAuthStateChanged(auth, (user) => setUser(user));\n\n // Function to handle gene list input\n const handleGeneListChange = (event) => {\n setGeneList(event.target.value);\n };\n\n // Function to handle drag and drop of gene list\n const handleDrop = (event) => {\n event.preventDefault();\n const geneData = event.dataTransfer.getData('text');\n setGeneList(geneData);\n };\n\n // Function to handle drag over (needed for drop)\n const handleDragOver = (event) => {\n event.preventDefault();\n };\n\n // Function to submit gene list for validation\n const handleSubmit = async () => {\n const geneArray = geneList.split('\\n').filter(Boolean); // Convert the gene list into an array and filter out empty values\n\n if (geneArray.length > MAX_GENE_IDS) {\n setErrorMessage(`You have exceeded the maximum limit of ${MAX_GENE_IDS} gene IDs.`);\n return;\n }\n\n setErrorMessage(''); // Reset error message if validation passes\n setLoading(true); // Set loading state to true to show progress\n\n try {\n const response = await fetch(`${props.api}/gene_lists/validate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(geneArray),\n });\n\n const result = await response.json();\n\n if (result.hash) {\n setListHash(result.hash);\n setValidatedList(result.ids);\n setValidationError(result.missing);\n } else {\n // Handle errors from validation\n alert('Error during validation.');\n }\n } catch (error) {\n alert('There was an error with the validation service.',error);\n } finally {\n setLoading(false); // Set loading to false when the request is complete\n }\n };\n\n // Function to save the validated gene list\n const handleSaveList = async () => {\n const queryParams = {\n label: listName,\n hash: listHash,\n site: props.site,\n isPublic: listIsPublic\n };\n const queryString = new URLSearchParams(queryParams).toString();\n\n const token = await user.getIdToken();\n try {\n const response = await fetch(`${props.api}/gene_lists?${queryString}`, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n if (!response.ok) {\n throw new Error('Failed to save list');\n }\n const result = await response.json();\n console.log(result);\n\n } catch (error) {\n console.error(\"There was an problem with fetch\", error)\n }\n };\n\n return (\n <div className=\"gene-list-component\">\n <h4>Gene List Validator</h4>\n\n <Form>\n {/* Input for Gene List */}\n <Form.Group controlId=\"geneList\">\n <Form.Label>Paste or drop your gene list here:</Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={10}\n value={geneList}\n onChange={handleGeneListChange}\n placeholder={`Paste or drop your gene list here (Maximum: ${MAX_GENE_IDS} IDs)`}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n </Form.Group>\n\n {/* Display error if gene list exceeds limit */}\n {errorMessage && (\n <Alert variant=\"danger\">\n {errorMessage}\n </Alert>\n )}\n\n {/* Button to submit for validation */}\n <Button variant=\"primary\" onClick={handleSubmit}>\n Validate Gene List\n </Button>\n </Form>\n\n {/* Display validation in progress */}\n {loading && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation in Progress...</h3>\n <Spinner animation=\"border\" role=\"status\">\n <span className=\"sr-only\">Validating...</span>\n </Spinner>\n </div>\n )}\n\n\n {/* Display validation summary */}\n {!loading && listHash && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation Summary</h3>\n <Alert variant=\"info\">\n <p>hash: <code>{listHash}</code></p>\n <p>Items Validated: {validatedList.length}</p>\n <p>Items Not Validated: {validationError.length}</p>\n </Alert>\n <ul>\n {validationError.map((errorItem, index) => (\n <li key={index}>{errorItem}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Input for saving validated gene list */}\n {!loading && validatedList.length > 0 && (\n <div className=\"save-list mt-4\">\n <Form.Group controlId=\"listName\">\n <Form.Label>Save Validated Gene List</Form.Label>\n <Form.Control\n type=\"text\"\n value={listName}\n onChange={(e) => setListName(e.target.value)}\n placeholder=\"Enter list name\"\n />\n <Form.Check\n type='switch'\n id='listIsPublic'\n label='Public'\n onChange={(e) => setListIsPublic(!listIsPublic)}\n />\n </Form.Group>\n {user ?\n <Button variant=\"success\" onClick={handleSaveList}>\n Save Gene List\n </Button>\n : <Button variant=\"dark\" disabled>Login Required</Button> }\n </div>\n )}\n </div>\n );\n};\n\nconst UserGeneListsComponent = props => {\n return (\n <Container fluid>\n <Row>\n <Col><GeneListComponent api={props.configuration.grameneData} site={props.configuration.id}/></Col>\n <Col><GeneListDisplayComponent api={props.configuration.grameneData} site={props.configuration.id}/></Col>\n </Row>\n </Container>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n UserGeneListsComponent\n);\n","import React, { useState } from 'react'\nimport { Button, Modal } from 'react-bootstrap'\nimport { connect } from \"redux-bundler-react\";\nimport { firebaseApp } from \"./utils\";\nimport { getAuth, onAuthStateChanged, signOut, GoogleAuthProvider, signInWithPopup } from \"firebase/auth\";\n\nconst auth = getAuth(firebaseApp);\n\nconst provider = new GoogleAuthProvider();\n\nconst Auth = props => {\n const [user, setUser] = useState({});\n onAuthStateChanged(auth, (user) => setUser(user));\n\n function handleLogin() {\n signInWithPopup(auth, provider)\n .then((result) => {\n setUser(result.user)\n }).catch((err) => {\n console.log(err)\n });\n }\n function handleLogout() {\n signOut(auth)\n .then(() => {\n setUser(null);\n }).catch((err) => {\n console.log(err)\n });\n }\n return (\n <div className={props.configuration.id === 'sorghum' ? 'sorghumbase-auth-container': 'gramene-auth-container'}>\n <b>Account</b>\n <div>\n {user\n ? <Button size=\"sm\" variant=\"success\" onClick={handleLogout}>{user.displayName}</Button>\n : <Button size=\"sm\" variant=\"success\" onClick={handleLogin}>Login</Button>\n }\n </div>\n </div>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n Auth\n)\n"],"names":[],"version":3,"file":"index.js.map"}
1
+ {"mappings":"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","sources":["node_modules/@parcel/runtime-js/lib/runtime-1a8f10c7c38463f5.js","src/index.js","src/bundles/index.js","src/bundles/api.js","src/bundles/filters.js","src/bundles/views.js","src/bundles/docs.js","src/bundles/genomes.js","src/components/resultList.js","src/components/resultSummary.js","src/components/suggestions.js","src/components/geneSearchUI.js","src/components/results/GeneList.js","src/components/results/details/Expression.js","src/components/results/details/Homology.js","src/components/results/details/generic.js","src/components/utils.js","src/components/results/details/Location.js","src/components/results/details/location/browser.js","src/components/results/details/location/dallianceBrowser.js","src/components/results/details/Pathways.js","src/components/results/details/VEP.js","src/components/results/details/Xrefs.js","src/components/results/details/Publications.js","src/components/results/details/Sequences.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/TaxonomyModal.js","src/components/results/Expression.js","src/components/results/UserGeneLists.js","src/components/Auth.js"],"sourcesContent":["module.exports = (Promise.resolve(__parcel__require__(\"./\" + \"Study.826d318c.js\"))).then(() => parcelRequire('7zuJ6'));","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];\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler'\nimport _ from 'lodash'\nimport binsClient from \"gramene-bins-client\";\nimport treesClient from \"gramene-trees-client\";\nimport {build} from \"gramene-taxonomy-with-genomes\";\n\nconst facets = [\n \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\",\n \"{!facet.limit='100' facet.mincount='1' key='genetree'}gene_tree\",\n \"{!facet.limit='100' facet.mincount='1' key='pathways'}pathways__ancestors\",\n \"{!facet.limit='100' facet.mincount='1' key='domains'}domain_roots\",\n \"{!facet.limit='-1' facet.mincount='1' key='fixed_1000__bin'}fixed_1000__bin\"\n];\nconst genomesOfInterest = '(taxon_id:2769) OR (taxon_id:3055) OR (taxon_id:3218) OR (taxon_id:3702) OR (taxon_id:3847) OR (taxon_id:4555) OR (taxon_id:4558) OR (taxon_id:4577) OR (taxon_id:13333) OR (taxon_id:15368) OR (taxon_id:29760) OR (taxon_id:39947) OR (taxon_id:55577) OR (taxon_id:88036) OR (taxon_id:214687)';\nconst sites = ['main','oryza','maize','sorghum','grapevine'];\nconst grameneSuggestions = createAsyncResourceBundle( {\n name: 'grameneSuggestions',\n actionBaseType: 'GRAMENE_SUGGESTIONS',\n persist: false,\n getPromise: ({store}) => {\n const t = store.selectSuggestionsQuery().replaceAll(':',' ').trim();\n const g = store.selectGrameneGenomes();\n const q = `/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`;\n // const promises = sites.map(site => fetch(`https://data.gramene.org/${site}${q}`));\n // return Promise.all(promises)\n return fetch(store.selectGrameneAPI() + q)\n .then(res => {\n return res.json()\n })\n .then(suggestions => {\n if (Object.keys(g.active).length > 0) {\n suggestions.grouped.category.groups.forEach(group => {\n group.doclist.docs.forEach(sugg => {\n sugg.num_genes = 0;\n sugg.taxon_id.forEach((id,idx) => {\n if (g.active[id] && !g.active[id].hidden) {\n sugg.num_genes += sugg.taxon_freq[idx]\n }\n })\n })\n })\n }\n return suggestions\n })\n }\n});\n\ngrameneSuggestions.reactGrameneSuggestions = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectSuggestionsQuery',\n (shouldUpdate, queryString) => {\n if (shouldUpdate && queryString) {\n return { actionCreator: 'doFetchGrameneSuggestions' }\n }\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsStatus = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectGrameneSuggestionsIsLoading',\n 'selectGrameneSuggestionsRaw',\n 'selectSuggestionsQuery',\n (shouldUpdate, isLoading, suggestionsRaw, queryString) => {\n if (!queryString) return '';\n if (shouldUpdate) return 'update needed';\n if (isLoading) return 'loading';\n if (suggestionsRaw.data) return suggestionsRaw.data.grouped.category.matches + ' terms';\n console.error(suggestionsRaw)\n return 'error';\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsReady = createSelector(\n 'selectGrameneSuggestionsStatus',\n (status) => {\n const regex = RegExp('terms$');\n return regex.test(status);\n }\n);\n\ngrameneSuggestions.doFocusFirstGrameneSuggestion = arg => ({dispatch, getState}) => {\n console.log('inside doFocusFirstGrameneSuggestion');\n};\n\nfunction compressLongTaxonName(node) {\n const fullName = node.name;\n const removedExtraineousWords = fullName.replace(/( Group$| subsp\\.| ssp\\.| var\\.| strain)/, '');\n let finalVersion;\n if (removedExtraineousWords.length > 20) {\n let words = removedExtraineousWords.split(' ');\n if (words.length === 2) {\n // abrreviate first word.\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+/, '$1.')\n }\n if (words.length > 2) {\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+\\s([a-z])[a-z]+/, '$1$2.')\n }\n }\n else {\n finalVersion = removedExtraineousWords;\n }\n node.short_name = finalVersion;\n}\n\nconst grameneTaxonomy = createAsyncResourceBundle({\n name: 'grameneTaxonomy',\n actionBaseType: 'GRAMENE_TAXONOMY',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/taxonomy?subset=gramene&rows=-1`)\n .then(res => res.json())\n .then(taxNodes => {\n let taxonomy = _.keyBy(taxNodes, '_id');\n taxNodes.forEach(t => {\n t._id = +t._id; // ensure taxonomy id is a number\n compressLongTaxonName(t);\n if (t.hasOwnProperty(\"is_a\")) {\n t.is_a.forEach(p_id => {\n const p = taxonomy[p_id];\n if (!p.hasOwnProperty('children')) p.children = [];\n p.children.push(t._id)\n })\n }\n });\n return taxonomy\n })\n }\n});\ngrameneTaxonomy.reactGrameneTaxonomy = createSelector(\n 'selectGrameneTaxonomyShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneTaxonomy' }\n }\n }\n);\nconst grameneMaps = createAsyncResourceBundle({\n name: 'grameneMaps',\n actionBaseType: 'GRAMENE_MAPS',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/maps?rows=-1`)\n .then(res => res.json())\n .then(maps => {\n maps.forEach(m => {\n m.regionLength = {};\n m.regions.names.forEach((rname,idx) => {\n m.regionLength[rname] = m.regions.lengths[idx]\n })\n })\n return _.keyBy(maps, 'taxon_id');\n })\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\n }\n);\n\nconst expressionStudies = createAsyncResourceBundle( {\n name: 'expressionStudies',\n actionBaseType: 'EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.groupBy(res, 'taxon_id'))\n }\n});\nexpressionStudies.reactExpressionStudies = createSelector(\n 'selectExpressionStudiesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionStudies' }\n }\n }\n);\n\nconst expressionSamples = createAsyncResourceBundle( {\n name: 'expressionSamples',\n actionBaseType: 'EXPRESSION_SAMPLES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n .then(res => res.json())\n .then(samples => _.groupBy(samples, 'experiment'))\n .then(studies => {\n Object.keys(studies).forEach(study => {\n studies[study].forEach(sample => {\n sample.order = +sample.group.replace('g','')\n });\n studies[study].sort((a,b) => a.order - b.order);\n })\n return studies\n })\n }\n});\nexpressionSamples.reactExpressionSamples = createSelector(\n 'selectExpressionSamplesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionSamples' }\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=0&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 grameneGermplasm = createAsyncResourceBundle( {\n name: 'grameneGermplasm',\n actionBaseType: 'GRAMENE_GERMPLASM',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/germplasm?rows=-1`)\n .then(res => res.json())\n .then(res => {\n res.forEach(g => {\n if (!g.subpop) {\n g.subpop = \"?\"\n }\n });\n return _.groupBy(res, 'ens_id')\n })\n }\n});\ngrameneGermplasm.reactGrameneGermplasm = createSelector(\n 'selectGrameneGermplasmShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneGermplasm' }\n }\n }\n);\n//\n// const grameneExpressionAssays = createAsyncResourceBundle( {\n// name: 'grameneExpressionAssays',\n// actionBaseType: 'GRAMENE_EXPRESSION_ASSAYS',\n// persist: true,\n// getPromise: ({store}) => {\n// return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n// .then(res => res.json())\n// .then(res => {\n// let expr={};\n// res.forEach(assay => {\n// if (!expr.hasOwnProperty(assay.taxon_id)) {\n// expr[assay.taxon_id] = {};\n// }\n// if (!expr[assay.taxon_id].hasOwnProperty(assay.experiment)) {\n// expr[assay.taxon_id][assay.experiment] = [];\n// }\n// assay.order = +assay.group.replace('g','');\n// expr[assay.taxon_id][assay.experiment].push(assay);\n// });\n// // sort each experiment\n// for (const tid in expr) {\n// for (const exp in expr[tid]) {\n// expr[tid][exp].sort((a,b) => a.order - b.order);\n// }\n// }\n// return expr;\n// })\n// }\n// });\n// grameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n// 'selectGrameneExpressionAssaysShouldUpdate',\n// (shouldUpdate) => {\n// if (shouldUpdate) {\n// return { actionCreator: 'doFetchGrameneExpressionAssays' }\n// }\n// }\n// );\n\nconst 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).filter(tid => !g.active[tid].hidden);\n let fq='';\n if (taxa.length) {\n console.log('search add a fq for ',taxa);\n fq = `&fq=taxon_id:(${taxa.join(' OR ')})`;\n }\n return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}`)\n .then(res => res.json())\n .then(res => {\n res.response.docs.forEach(d => {\n d.can_show = {};\n d.capabilities.forEach(c => {\n d.can_show[c]=true;\n })\n });\n return res;\n })\n }\n});\ngrameneSearch.reactGrameneSearch = createSelector(\n 'selectGrameneSearchShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneGenomes','selectGrameneMaps',\n (shouldUpdate, status, genomes, maps) => {\n if (shouldUpdate && status === 'search' && genomes && maps) {\n return { actionCreator: 'doFetchGrameneSearch' }\n }\n }\n);\n\nfunction formatFacetCountsForViz(a) {\n let res = {\n count: a.length/2,\n displayName: \"fixed_1000__bin\",\n data: {},\n sorted: []\n };\n let counts = [];\n for(let i=0;i<a.length;i+=2) {\n const fc = {\n id: +a[i],\n count: +a[i+1]\n };\n res.data[a[i]] = fc;\n counts.push(fc);\n }\n res.sorted = counts.sort((a,b) => a.id - b.id);\n return res;\n}\n\n// bundle to prepare data for the TaxDist component\nconst grameneTaxDist = {\n name: 'grameneTaxDist',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n return state;\n }\n },\n selectGrameneTaxDist: createSelector(\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n (grameneSearch,grameneTaxonomy,grameneMaps) => {\n if (grameneSearch && grameneTaxonomy && grameneMaps) {\n _.forIn(grameneMaps, (map, tid) => {\n grameneTaxonomy[tid].name = map.display_name;\n });\n const binnedResults = formatFacetCountsForViz(grameneSearch.facet_counts.facet_fields.fixed_1000__bin);\n let speciesTree = treesClient.taxonomy.tree(Object.values(grameneTaxonomy));\n let binMapper = binsClient.bins(grameneMaps);\n let taxDist = build(binMapper, speciesTree);\n taxDist.setBinType('fixed',1000);\n taxDist.setResults(binnedResults);\n return taxDist;\n }\n return null;\n }\n )\n};\n\n// this query will give the sorghum orthologs of AT1G01260\n// want to provide these on non-sorghum genes if available\n// http://data.gramene.org/search?q=homology__all_orthologs:AT1G01260&fq=taxon_id:4558&fl=id\nconst grameneOrthologs = {\n name: 'grameneOrthologs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_ORTHOLOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_ORTHOLOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestOrthologs: geneId => ({dispatch, store}) => {\n const orthologs = store.selectGrameneOrthologs();\n if (!orthologs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_ORTHOLOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const taxonId = store.selectTargetTaxonId();\n fetch(`${API}/search?q=homology__all_orthologs:${geneId}&fq=taxon_id:${taxonId}&fl=id`)\n .then(res => res.json())\n .then(res => {\n let newOrthologs = {};\n newOrthologs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_ORTHOLOGS_RECEIVED', payload: newOrthologs})\n })\n }\n },\n selectGrameneOrthologs: state => state.grameneOrthologs\n};\n\nconst grameneParalogs = {\n name: 'grameneParalogs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_PARALOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_PARALOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestParalogs: (geneId,supertree,taxon_id) => ({dispatch, store}) => {\n const paralogs = store.selectGrameneParalogs();\n if (!paralogs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_PARALOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const q= supertree ? `supertree_attr_s:${supertree}` : `homology__within_species_paralog:${geneId}`;\n fetch(`${API}/search?q=${q}&rows=100&fq=taxon_id:${taxon_id}`)\n .then(res => res.json())\n .then(res => {\n let newParalogs = {};\n newParalogs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_PARALOGS_RECEIVED', payload: newParalogs})\n })\n }\n },\n selectGrameneParalogs: state => state.grameneParalogs\n};\n\n// function selectFacetIDs(store, field) {\n// const path = `grameneGenes.data.facet_counts.facet_fields.${field}`;\n// if (_.has(store,path)) {\n// const flat_facets = _.get(store,path);\n// let idList = [];\n// if (isNaN(+flat_facets[0])) {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(flat_facets[i])\n// }\n// }\n// else {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(+flat_facets[i])\n// }\n// if (idList.length === 1) idList.push(0);\n// }\n// return idList;\n// }\n// }\n//\n// grameneGenes.selectDomainFacets = store => selectFacetIDs(store, 'domains');\n// grameneGenes.selectPathwayFacets = store => selectFacetIDs(store, 'pathways');\n// grameneGenes.selectTaxonomyFacets = store => selectFacetIDs(store, 'taxon_id');\n//\n// const grameneDomains = createAsyncResourceBundle({\n// name: 'grameneDomains',\n// actionBaseType: 'GRAMENE_DOMAINS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/domains?rows=-1&idList=${store.selectDomainFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {domains: docs, numFound: docs.length}})\n// });\n//\n// const gramenePathways = createAsyncResourceBundle({\n// name: 'gramenePathways',\n// actionBaseType: 'GRAMENE_PATHWAYS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/pathways?rows=-1&idList=${store.selectPathwayFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {pathways: docs, numFound: docs.length}})\n// });\n//\n// const grameneTaxonomy = createAsyncResourceBundle({\n// name: 'grameneTaxonomy',\n// actionBaseType: 'GRAMENE_TAXONOMY',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/taxonomy?rows=-1&idList=${store.selectTaxonomyFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {taxonomy: docs, numFound: docs.length}})\n// });\n\n\nexport default [grameneSuggestions, grameneSearch, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, grameneParalogs, curatedGenes, grameneGermplasm, grameneGeneAttribs, expressionSamples, expressionStudies];\n","import {createSelector} from \"redux-bundler\";\nimport _ from 'lodash';\nimport ReactGA from 'react-ga4'\nconst MAX_IDLIST_LENGTH = 20;\n\nfunction findNodeWithLeftIdx(node, idx) {\n if (node.leftIdx === idx) {\n return node;\n }\n let result=null;\n if (node.leftIdx < idx && node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n if (child.rightIdx > idx) {\n child.parentIdx = node.leftIdx;\n const res = findNodeWithLeftIdx(child, idx);\n if (res) result = res;\n }\n })\n }\n return result;\n}\n\nfunction markSubtree(node, source, invert) {\n node.marked = (node.leftIdx >= source.leftIdx && node.rightIdx <= source.rightIdx);\n if (invert) node.marked = !node.marked;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n markSubtree(child, source, invert);\n })\n }\n}\n\nfunction reindexTree(node, idx) {\n node.leftIdx = idx;\n idx++;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n idx = reindexTree(child, idx);\n });\n }\n node.rightIdx = idx;\n idx++;\n return idx;\n}\n\nconst grameneFilters = {\n name: 'grameneFilters',\n getReducer: () => {\n const initialState = {\n status: 'init', // others include 'search', 'waiting' and 'ready'\n operation: 'AND',\n negate: false,\n marked: false,\n leftIdx: 0,\n rightIdx: 1,\n children: [],\n showMarked: false,\n showMenu: false,\n moveCopyMode: '',\n searchOffset: 0,\n rows: 20\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_FILTERS_CLEARED': {\n newState = Object.assign({}, initialState, {\n status: 'search',\n children: []\n });\n return newState;\n }\n case 'GRAMENE_FILTER_ADDED': {\n const idx = state.rightIdx;\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: idx + 2,\n searchOffset: 0\n });\n let child = _.pick(payload, ['fq_field', 'fq_value', 'name', 'category']);\n child.leftIdx = idx;\n child.rightIdx = idx + 1;\n child.negate = false;\n child.showMenu = false;\n newState.children.push(child);\n markSubtree(newState, child, false);\n return newState;\n }\n case 'GRAMENE_FILTER_TREE_ADDED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: payload.rightIdx + 1,\n searchOffset: 0\n });\n newState.children.push(payload);\n markSubtree(newState, payload, false);\n return newState;\n }\n case 'GRAMENE_FILTER_SET_ADDED': {\n // create a filter with the payload.operation and children payload.filters\n let filter = {\n leftIdx: state.rightIdx,\n rightIdx: state.rightIdx + (payload.filters.length) * 2 + 1,\n operation: payload.operation,\n negate: false,\n showMenu: false,\n children: payload.filters\n };\n if (payload.warning) {\n filter.warning = payload.warning\n }\n let nextIdx = filter.leftIdx+1;\n payload.filters.forEach(f => {\n f.leftIdx = nextIdx++;\n f.rightIdx = nextIdx++;\n f.negate = false;\n f.showMenu = false;\n });\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0,\n rightIdx: filter.rightIdx + 1\n });\n newState.children.push(filter);\n markSubtree(newState, filter, false);\n return newState;\n }\n case 'GRAMENE_FILTER_NEGATED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n node.negate = !node.negate;\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_DELETED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n let parent = findNodeWithLeftIdx(newState, node.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== node.leftIdx);\n reindexTree(newState, 0);\n markSubtree(newState, parent, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_OPERATION_CHANGED': {\n if (payload.hasOwnProperty('operation')) {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n node.operation = node.operation === 'AND' ? 'OR' : 'AND';\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_MOVED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n let parent = findNodeWithLeftIdx(newState, source.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== source.leftIdx);\n target.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n target.children.push(source);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_COPIED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n let sourceCopy = Object.assign({}, source);\n target.children.push(sourceCopy);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_TARGETS_MARKED':\n newState = Object.assign({}, state, {\n showMarked: true,\n moveCopyMode: payload.mode,\n moveCopySource: payload.source\n });\n markSubtree(newState, payload.source, true);\n return newState;\n case 'GRAMENE_FILTER_TARGETS_UNMARKED':\n newState = Object.assign({}, state, {\n showMarked: false\n });\n return newState;\n case 'GRAMENE_FILTERS_REPLACED':\n payload.status = 'search';\n payload.searchOffset = 0;\n return payload;\n case 'GRAMENE_FILTERS_STATUS_CHANGED':\n if (!(state.status === 'ready' && payload === 'waiting')) {\n return Object.assign({}, state, {status: payload})\n }\n break;\n case 'GRAMENE_FILTERS_SET_SHOW_MARKED':\n return Object.assign({}, state, {showMarked: payload});\n case 'GRAMENE_FILTER_MENU_TOGGLED':\n payload.showMenu = !payload.showMenu;\n return Object.assign({}, state);\n case 'GRAMENE_SEARCH_PAGE_REQUESTED':\n return Object.assign({}, state, {status: 'search', searchOffset: payload * state.rows});\n case 'GRAMENE_SEARCH_FETCH_STARTED':\n return Object.assign({}, state, {status: 'loading'});\n case 'GRAMENE_SEARCH_FETCH_FINISHED':\n return Object.assign({}, state, {status: 'finished'});\n case 'GRAMENE_GENOMES_UPDATED':\n 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('sugg')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(queryObject.sugg)}\n ]\n };\n }\n if (queryObject.hasOwnProperty('suggestion')) {\n const url = new URL(myUrl.href);\n url.search = '';\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'SUGGESTIONS_QUERY_CHANGED', payload: {query: queryObject.suggestion}}\n ]\n };\n }\n if (queryObject.hasOwnProperty('idList')) {\n return handleIdList(queryObject);\n }\n if (queryObject.hasOwnProperty('fq_field') && queryObject.hasOwnProperty('fq_value')\n && queryObject.hasOwnProperty('category') && queryObject.hasOwnProperty('name')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: queryObject}\n ]\n };\n }\n const url = new URL(myUrl.href);\n if (url.pathname === '/genes') {\n return {type: 'GRAMENE_FILTERS_CLEARED'}\n }\n }\n if (filters.status === 'finished') {\n const url = new URL(myUrl.href);\n url.search = `filters=${JSON.stringify(Object.assign({}, filters, {status: 'init'}))}&genomes=${genomes.join(',')}`;\n ReactGA.event({\n category: \"Gene Search\",\n action: \"filter finished\",\n label: url.search\n });\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_FILTERS_STATUS_CHANGED', payload: 'ready'}\n ]\n }\n }\n }\n);\n\nexport default grameneFilters;\n","const grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'userLists',\n name: 'User Gene Lists',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'expression',\n name: 'Gene expression',\n show: 'off',\n shouldScroll: false,\n desiredSamples: {}\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'disabled',\n shouldScroll: false\n }\n // {\n // id: 'domains',\n // name: 'Domains',\n // show: 'disabled'\n // },\n // {\n // id: 'go',\n // name: 'GO terms',\n // show: 'disabled'\n // }\n ]\n };\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.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'off' : 'on'\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_CLICKED':\n newState = Object.assign({}, state);\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'on' : 'on';\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_SCROLLED':\n newState = Object.assign({}, state);\n newState.options.forEach(v => v.shouldScroll = false)\n return newState;\n default:\n return state;\n }\n }\n },\n doToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_TOGGLED', payload: idx})\n },\n dontToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_CLICKED', payload: idx})\n },\n doCancelShouldScroll: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_SCROLLED', payload: null})\n },\n selectGrameneViews: state => state.grameneViews\n};\n\nexport default grameneViews;\n","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {},\n sequences: {},\n rnaSequences: {},\n pepSequences: {},\n studies: {},\n desiredSamples: {},\n consequences: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_CONSEQUENCES_REQUESTED':\n if (!state.consequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.consequences[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_CONSEQUENCES_RECEIVED':\n newState = Object.assign({}, state);\n newState.consequences = Object.assign({}, state.consequences, payload);\n return newState;\n case 'GRAMENE_GENE_REQUESTED':\n if (!state.genes.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.genes[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_GENE_RECEIVED':\n newState = Object.assign({}, state);\n newState.genes = Object.assign({}, state.genes, payload);\n return newState;\n case 'GRAMENE_TREE_REQUESTED':\n if (!state.trees.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.trees[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_TREE_RECEIVED':\n newState = Object.assign({}, state);\n newState.trees = Object.assign({}, state.trees, payload);\n return newState;\n case 'GRAMENE_PATHWAYS_RECEIVED':\n newState = Object.assign({}, state);\n newState.pathways = Object.assign({}, state.pathways, payload);\n return newState;\n case 'ATLAS_STUDIES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies = Object.assign({}, state.studies, payload);\n return newState;\n case 'ATLAS_SAMPLES_REQUESTED':\n if (!state.studies.byID[payload].hasOwnProperty('samples')) {\n newState = Object.assign({},state);\n newState.studies.byID[payload].samples = [];\n return newState;\n }\n break;\n case 'ATLAS_SAMPLES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies.byID[payload.id].samples = payload.samples;\n return newState;\n case 'GENE_SEQUENCE_REQUESTED':\n if (!state.sequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.sequences[payload] = {};\n return newState;\n }\n break;\n case 'RNA_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.rnaSequences[payload] = {};\n return newState;\n }\n break;\n case 'PEP_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.pepSequences[payload] = {};\n return newState;\n }\n break;\n case 'GENE_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.sequences = Object.assign({}, state.sequences);\n newState.sequences[payload.id] = payload.geneSeq;\n return newState;\n case 'RNA_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.rnaSequences = Object.assign({}, state.rnaSequences);\n newState.rnaSequences[payload.id] = payload.RnaSeq;\n return newState;\n case 'PEP_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.pepSequences = Object.assign({}, state.pepSequences);\n newState.pepSequences[payload.id] = payload.PepSeq;\n return newState;\n case 'PARALOG_EXPRESSION_REQUESTED':\n if (!state.expression.hasOwnProperty(payload)) {\n newState = Object.assign({},state);\n newState.expression[payload] = [];\n return newState;\n }\n break;\n case 'PARALOG_EXPRESSION_RECEIVED':\n newState = Object.assign({}, state);\n newState.expression = Object.assign({}, state.expression);\n newState.expression[payload.id] = payload.paralogs;\n return newState;\n case 'EXPRESSION_SAMPLE_TOGGLED':\n newState = Object.assign({}, state);\n newState.desiredSamples = Object.assign({}, state.desiredSamples);\n if (newState.desiredSamples.hasOwnProperty(payload)) {\n delete newState.desiredSamples[payload]\n }\n else {\n newState.desiredSamples[payload] = {status: 'need'}\n }\n }\n return state;\n }\n },\n doToggleExpressionSample: id => ({dispatch}) => {\n dispatch({type: 'EXPRESSION_SAMPLE_TOGGLED', payload: id});\n },\n doRequestVEP: id => ({dispatch, store}) => {\n const consequences = store.selectGrameneConsequences();\n if (!consequences.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_CONSEQUENCES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=id:${id}&fl=id,VEP__*`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.response.docs.forEach(g => {\n genes[g.id] = g;\n });\n dispatch({type: 'GRAMENE_CONSEQUENCES_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneGene: id => ({dispatch, store}) => {\n const genes = store.selectGrameneGenes();\n if (!genes.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_GENE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genes?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.forEach(g => {\n genes[g._id] = g;\n });\n dispatch({type: 'GRAMENE_GENE_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneTree: id => ({dispatch, store}) => {\n const trees = store.selectGrameneTrees();\n const maps = store.selectGrameneMaps();\n if (!trees.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_TREE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genetrees?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let trees = {};\n res.forEach(t => {\n function update_taxon_name(node) {\n if (maps.hasOwnProperty(node.taxon_id)) {\n node.taxon_name = maps[node.taxon_id].display_name\n }\n else if (node.taxon_id === 1100004558) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45580023 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45770001 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Zea mays\"\n }\n if (node.taxon_id === 297600009 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Vitis vinifera\"\n }\n if (node.hasOwnProperty('children')) {\n node.children.forEach(c => update_taxon_name(c))\n }\n }\n update_taxon_name(t);\n trees[t._id] = t;\n });\n dispatch({type: 'GRAMENE_TREE_RECEIVED', payload: trees})\n })\n }\n },\n doRequestGramenePathways: ids => ({dispatch, store}) => {\n const pathways = store.selectGramenePathways();\n let newIds = ids.filter(id => !pathways.hasOwnProperty(id));\n if (newIds) {\n dispatch({type: 'GRAMENE_PATHWAYS_REQUESTED', payload: newIds});\n if (newIds.length === 1) newIds.push(0);\n fetch(`${store.selectGrameneAPI()}/pathways?idList=${newIds.join(',')}`)\n .then(res => res.json())\n .then(res => {\n let pathways = {};\n res.forEach(p => {\n pathways[p._id] = p;\n });\n dispatch({type: 'GRAMENE_PATHWAYS_RECEIVED', payload: pathways})\n })\n }\n },\n doRequestExpressionStudies: id => ({dispatch, store}) => {\n fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => {\n let studies = {byID:{},byTaxon:{}};\n res.forEach(s => {\n studies.byID[s._id] = s;\n if (! studies.byTaxon.hasOwnProperty(s.taxon_id)) {\n studies.byTaxon[s.taxon_id] = []\n }\n studies.byTaxon[s.taxon_id].push(s._id)\n })\n dispatch({type: 'ATLAS_STUDIES_RECEIVED', payload: studies})\n })\n },\n doRequestStudyMetadata: id => ({dispatch, store}) => {\n const studies = store.selectAtlasStudies();\n if (!studies.byID[id].hasOwnProperty('samples')) {\n dispatch({type: 'ATLAS_SAMPLES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/assays?experiment=${id}&rows=-1`)\n .then(res => res.json())\n .then(samples => {\n dispatch({type: 'ATLAS_SAMPLES_RECEIVED', payload: {id, samples}})\n })\n }\n },\n doRequestGeneSequence: gene => ({dispatch, store}) => {\n const maps = store.selectGrameneMaps();\n const seqs = store.selectGeneSequences();\n const id = gene._id;\n const MAX_FLANK = 2000;\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'GENE_SEQUENCE_REQUESTED', payload: id});\n const start = gene.location.start > MAX_FLANK ? gene.location.start - MAX_FLANK : 1;\n const dnaLength = maps[gene.taxon_id].regionLength[gene.location.region];\n const end = gene.location.end + MAX_FLANK > dnaLength ? dnaLength : gene.location.end + MAX_FLANK;\n fetch(`${store.selectEnsemblAPI()}/sequence/region/${gene.system_name}/${gene.location.region}:${start}..${end}:${gene.location.strand}?content-type=application/json`)\n .then(res => res.json())\n .then(geneSeq => {\n const x = geneSeq.id.split(':');\n geneSeq.genome = x[1];\n geneSeq.start = +x[3];\n geneSeq.end = +x[4];\n dispatch({type: 'GENE_SEQUENCE_RECEIVED', payload: {id, geneSeq}});\n })\n }\n },\n doRequestRnaSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectRnaSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'RNA_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=cdna&content-type=application/json`)\n .then(res => res.json())\n .then(RnaSeq => {\n dispatch({type: 'RNA_SEQUENCE_RECEIVED', payload: {id, RnaSeq}});\n })\n }\n },\n doRequestPepSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectPepSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'PEP_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=protein&content-type=application/json`)\n .then(res => res.json())\n .then(PepSeq => {\n dispatch({type: 'PEP_SEQUENCE_RECEIVED', payload: {id, PepSeq}});\n })\n }\n },\n doRequestParalogExpression: id => ({dispatch, store}) => {\n const expr = store.selectParalogExpression();\n if (!expr.hasOwnProperty(id)) {\n dispatch({type: 'PARALOG_EXPRESSION_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=homology__within_species_paralog:${id}&fl=id,atlas_id,name,*__expr&rows=100`)\n .then(res => res.json())\n .then(res => {\n const assay_re = /(.+)_g(\\d+)/;\n const paralogs = res.response.docs.map(d => {\n let p = {\n id: d.id,\n name: d.name,\n experiments: {},\n min:1000,\n max:0\n };\n if (d.atlas_id) {\n p.atlas_id = d.atlas_id;\n delete d.atlas_id;\n }\n delete d.id;\n delete d.name;\n Object.entries(d).forEach(assay => {\n const parsed = assay[0].match(assay_re);\n const expr = parsed[1].replace('_','-').replace('-tpms','');\n if (! p.experiments.hasOwnProperty(expr)) {\n p.experiments[expr] = [];\n }\n const g = parsed[2] - 1;\n const e = d[assay[0]];\n if (e < p.min) p.min = e;\n if (e > p.max) p.max = e;\n p.experiments[expr][g] = e;\n });\n return p;\n }).map(p => {\n for (const expr in p.experiments) {\n p.experiments[expr] = p.experiments[expr].filter(e => e >= 0);\n }\n return p;\n });\n dispatch({type: 'PARALOG_EXPRESSION_RECEIVED', payload: {id, paralogs}});\n })\n }\n },\n selectGrameneGenes: state => state.grameneDocs.genes,\n selectGrameneConsequences: state => state.grameneDocs.consequences,\n selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression,\n selectGeneSequences: state => state.grameneDocs.sequences,\n selectRnaSequences: state => state.grameneDocs.rnaSequences,\n selectPepSequences: state => state.grameneDocs.pepSequences,\n selectAtlasStudies: state => state.grameneDocs.studies,\n selectDesiredSamples: state => state.grameneDocs.desiredSamples\n};\n\nexport default grameneDocs;\n","import {createSelector} from \"redux-bundler\";\nconst grameneGenomes = {\n name: 'grameneGenomes',\n getReducer: () => {\n const initialState = {\n show: false,\n active: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_GENOMES_TOGGLED':\n newState = Object.assign({},state);\n newState.show = !newState.show;\n return newState;\n case 'GRAMENE_GENOMES_UPDATED':\n newState = Object.assign({}, state);\n newState.active = payload;\n return newState;\n case 'GRAMENE_MAPS_FETCH_FINISHED':\n newState = Object.assign({}, state);\n newState.active = payload;\n default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doInitializeGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_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 return <span>\n {match.map((str, idx) => {\n if (idx % 2 === 1) {\n return <span key={idx} style={{fontWeight:'bolder'}}>{str}</span>\n }\n return <span key={idx}>{str}</span>\n })}\n </span>\n}\n\nfunction logAction(sugg) {\n ReactGA.event({\n category: 'Search',\n action: 'SetFilter',\n label: sugg.name\n })\n}\nfunction getLowestCommonAncestorName(tids, taxonomy) {\n let lca;\n tids.forEach(tid => {\n if (!lca) {\n lca = [...taxonomy[tid].ancestors];\n } else {\n let ancestors = new Set(taxonomy[tid].ancestors);\n while (!ancestors.has(lca[0])) {\n lca.shift();\n }\n }\n });\n return taxonomy[lca[0]].short_name;\n}\n\nconst TryPan = (props) => {\n const query = props.query;\n const pan = props.pan;\n return <div className=\"suggestion-panlink\">\n <a target=\"_blank\" href={pan.url + \"?suggestion=\" + query}>\n <img src={pan.svg} title={`Search at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst TryAnotherSite = props => {\n const query = props.query;\n const config = props.config;\n let sites = Object.keys(config.panSite);\n return <div>\n <Alert variant={'info'}>Don't see what you're looking for? Search for <b>{query}</b> on one of our sister sites</Alert>\n {sites.map((p, idx) => <TryPan key={idx} query={query} pan={config.panSite[p]}/>)}\n </div>\n}\n\nconst Suggestions = props => {\n let suggestions = props.grameneSuggestions;\n if (suggestions && suggestions.grouped) {\n if (suggestions.grouped.category.matches === 0) {\n let sugg1 = {\n fq_field: 'text',\n fq_value: props.suggestionsQuery,\n name: `Genes containing \"${props.suggestionsQuery}\"`,\n category: 'Gene',\n };\n let sugg2 = {\n fq_field: 'text',\n fq_value: `${props.suggestionsQuery}*`,\n name: `Genes matching \"${props.suggestionsQuery}*\"`,\n category: 'Gene',\n };\n return (\n <div style={{margin: '10px', maxWidth: '820px'}}>\n <Alert variant={'info'}><em>No suggestions found.</em> You may still attempt a full text search, though it is unlikely to find any genes for you.</Alert>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg1); props.doAcceptSuggestion(sugg1); props.doAcceptGrameneSuggestion(sugg1)}}>\n {`All genes that contain the word \"${props.suggestionsQuery}\"`}\n </Button>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg2); props.doAcceptSuggestion(sugg2); props.doAcceptGrameneSuggestion(sugg2)}}>\n {`All genes that contain a word that starts with \"${props.suggestionsQuery}\"`}\n </Button>\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n else {\n return (\n <div style={{margin: '10px'}}>\n {suggestions.grouped.category.groups.map((g,idx) => {\n return <div key={idx} id='gramene-suggestion'>\n <h4 className=\"mt10\">{g.groupValue}</h4>\n {g.doclist.docs.map((sugg,jdx) =>\n <Button id={`${idx}-${jdx}`}\n key={jdx}\n disabled={sugg.num_genes === 0}\n size='sm'\n variant=\"outline-secondary\"\n onClick={() => {logAction(sugg); props.doAcceptSuggestion(sugg); props.doAcceptGrameneSuggestion(sugg)}}>\n {showMatches(sugg.display_name,props.suggestionsQuery)}{' '}\n <Badge bg=\"secondary\">{sugg.num_genes}</Badge>\n <i>&nbsp;{getLowestCommonAncestorName(sugg.taxon_id, props.grameneTaxonomy)}</i>\n </Button>\n )}\n </div>\n })}\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'selectGrameneTaxonomy',\n 'selectConfiguration',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React, { useRef, useEffect } from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { Navbar, Nav, NavDropdown, Container, OverlayTrigger, Popover} from 'react-bootstrap'\nimport Switch from 'react-switch'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash } from 'react-icons/bs'\nimport GeneList from './results/GeneList'\nimport TaxDist from './results/TaxDist'\nimport HelpDemo from './results/HelpDemo'\nimport GeneAttribs from './results/GeneAttribs'\nimport TaxonomyModal from './TaxonomyModal'\nimport Expression from './results/Expression'\nimport UserGeneLists from './results/UserGeneLists'\nimport Auth from './Auth'\nimport ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs,\n expression: Expression,\n userLists: UserGeneLists\n};\n\nconst StatusCmp = props => {\n let content = props.grameneFiltersStatus;\n // if (props.grameneFiltersStatus === 'init') {\n // props.doClearGrameneFilters();\n // }\n if (props.grameneFiltersStatus === 'ready') {\n let tally = <span>Ready</span>;\n if (props.grameneSearch) {\n let genes = props.grameneSearch.response.numFound;\n let genomes = props.grameneSearch.facet_counts.facet_fields.taxon_id.length / 2;\n tally = <span><b>{genes}</b> genes in <b>{genomes}</b> genomes</span>;\n }\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Genomes Filter</Popover.Header>\n <Popover.Body>Searching {props.activeGenomeCount} genomes</Popover.Body>\n </Popover>\n );\n\n content = <span>\n {tally}\n <OverlayTrigger placement=\"auto\" overlay={popover}>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doShowGrameneGenomes}><BsGearFill/></span>\n </OverlayTrigger>\n <TaxonomyModal/>\n </span>;\n }\n return <div style={{padding:'5px', color:'cornsilk', fontSize:'small'}}>{content}</div>\n};\n\nconst Status = connect(\n 'selectGrameneSearch',\n 'selectGrameneFiltersStatus',\n 'selectActiveGenomeCount',\n 'doShowGrameneGenomes',\n 'doClearGrameneFilters',\n StatusCmp\n);\n\nconst handleClick = (e, moveCopyMode, showMarked, node, actions) => {\n if (!e) e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n\n if (showMarked && moveCopyMode) {\n if (node.marked) {\n actions.selectTarget(node);\n }\n else {\n actions.unmarkTargets()\n }\n }\n console.log(node, showMarked);\n};\nfunction logAction(action) {\n ReactGA.event({\n category: 'Search',\n action: action\n })\n}\nconst Filter = ({node,moveCopyMode,showMarked,actions}) => {\n let classes = 'gramene-filter gramene-filter';\n if (node.operation) {\n classes = `${classes}-${node.operation}`\n }\n if (node.negate) {\n classes = `${classes} gramene-filter-NOT`\n }\n if (showMarked && node.marked) {\n classes = `${classes} gramene-filter-marked`\n }\n let content = '';\n let menu = '';\n let children = [];\n\n if (node.showMenu) {\n let key=1;\n let menuItems = [];\n if (node.hasOwnProperty('operation')) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Change to ${node.operation}`); actions.changeOperation(node)}}>convert to <i>{node.operation === 'AND' ? 'OR' : 'AND'}</i></li>);\n }\n if (node.leftIdx > 0) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Delete filter`); actions.deleteNode(node)}}>delete</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Move filter`); actions.markTargets(node,'move')}}>move{node.isSource && ' select destination'}</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Copy filter`); actions.markTargets(node,'copy')}}>copy{node.isSource && ' select destination'}</li>)\n }\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Negate filter`); actions.negate(node)}}>negate</li>);\n menu = <div className='gramene-filter-menu'><ul>{menuItems}</ul></div>;\n }\n let warning;\n if (node.warning) {\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Warning</Popover.Header>\n <Popover.Body>{node.warning}</Popover.Body>\n </Popover>\n );\n warning = (\n <OverlayTrigger placement=\"auto\" overlay={popover}><span style={{float:'right', color:'red', cursor:'pointer'}}><IoAlertCircle/></span></OverlayTrigger>\n )\n }\n if (node.operation) {\n children = node.children.map((child,idx) => <Filter key={idx} moveCopyMode={moveCopyMode} node={child} showMarked={showMarked} actions={actions}/>);\n content = (\n <div>\n <span className='gramene-filter-operation'\n onClick={()=>actions.toggleMenu(node)}>{node.operation}</span>\n {warning}\n </div>\n );\n }\n else {\n content = <span className='gramene-filter-text'\n onClick={()=>actions.toggleMenu(node)}>{node.category} |&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={props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': '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={props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': '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 'selectConfiguration',\n 'doNegateGrameneFilter',\n 'doDeleteGrameneFilter',\n 'doChangeGrameneFilterOperation',\n 'doMoveOrCopyGrameneFilter',\n 'doMarkGrameneFilterTargets',\n 'doUnmarkGrameneFilterTargets',\n 'doToggleGrameneFilterMenu',\n 'doClearGrameneFilters',\n FiltersCmp\n);\n\nconst ResultsCmp = props => {\n let activeViews = props.grameneViews.options;\n return props.grameneFilters.rightIdx > 0 ? (\n <div>\n {activeViews.map((v,idx) => {\n let p = Object.assign({}, props);\n const divRef = useRef(null);\n useEffect(() => {\n if (v.shouldScroll) {\n const navBarHeight=0;\n const scrollPosition = divRef.current.offsetTop - navBarHeight;\n window.scrollTo({\n top: scrollPosition,\n behavior: 'smooth'\n })\n props.doCancelShouldScroll();\n }\n }, [v.shouldScroll]);\n return (\n <div key={idx} ref={divRef}>\n {v.show === 'on' && <div style={{borderTopWidth:'medium'}} className='gramene-view-header'>{v.name}</div>}\n {v.show === 'on' && React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doCancelShouldScroll',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <b>Views</b>\n {props.grameneViews.options.filter(view => view.show !== 'disabled').map((view,idx) => (\n <div style={{textWrap:'nowrap'}} key={idx}>\n <Switch onChange={()=>props.doToggleGrameneView(view.id)} checked={view.show === 'on'}\n height={18}\n width={30}\n handleDiameter={16}\n checkedIcon={false}\n uncheckedIcon={false}\n />\n <span className={`gramene-view-span-${view.show}`} onClick={(e) => {\n props.dontToggleGrameneView(view.id)\n }}>{view.name}</span>\n </div>\n ))}\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n 'dontToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views, Auth};\n","import React from 'react'\nimport ReactGA from 'react-ga4'\nimport { connect } from 'redux-bundler-react'\nimport './genes.css'\nimport Expression from './details/Expression'\nimport Homology from './details/Homology'\nimport Location from './details/Location'\nimport Pathways from \"./details/Pathways\"\nimport VEP from \"./details/VEP\"\nimport Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\nimport Sequences from \"./details/Sequences\"\nimport {suggestionToFilters} from \"../utils\";\nimport {GrFormPrevious, GrFormNextLink, GrFormNext, GrHpe} from 'react-icons/gr'\nimport { Badge, OverlayTrigger, Tooltip } from 'react-bootstrap'\n\nlet external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n\nlet inventory = {\n sequences: Sequences,\n location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\n VEP: VEP,\n xrefs: Xrefs,\n pubs: Publications\n};\n\nfunction renderTairSummary(searchResult) {\n const summary = searchResult.summary;\n if(summary && summary !== \"NULL\" && searchResult.system_name === \"arabidopsis_thaliana\") {\n return (\n <div className=\"gene-summary-tair\">\n {trimSummary(summary)}\n </div>\n )\n }\n}\n\nfunction trimSummary(summary) {\n if(summary.length > 160) {\n const start = summary.substr(0, 150);\n const rest = summary.substr(150);\n return <p>{start}<span className=\"ellipsis\">…</span><span className=\"rest\">{rest}</span></p>\n }\n else {\n return <p>{summary}</p>\n }\n}\nconst PanLink = (props) => {\n const gene = props.gene;\n const pan = props.pan;\n return <div className=\"gene-panlink\">\n <a target=\"_blank\" href={pan.url + \"?idList=\" + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst CurationComponent1 = ({ curation }) => {\n return (\n <div className=\"gene-curation\">\n <span>Curated gene structure</span>\n {curation.okay > 0 && <span className=\"status\">✔️ {curation.okay}</span>}\n {curation.flagged > -10 && <span className=\"status\">⚠️ {curation.flagged}</span>}\n </div>\n );\n};\nconst CurationComponent = ({ curation, gene }) => {\n const total = curation.okay + curation.flagged;\n const okayRatio = (curation.okay / total);\n const flaggedRatio = (curation.flagged / total);\n const tooltip = (\n <Tooltip id=\"tooltip\">\n <strong>Gene structure</strong><br/>\n Okay: {curation.okay} &nbsp;\n Flagged: {curation.flagged}\n </Tooltip>\n );\n return (\n <OverlayTrigger placement=\"left\" overlay={tooltip}>\n <a className=\"gene-curation\" target=\"_blank\" href={`https://devdata.gramene.org/curation/curations?idList=${gene.id}`}>\n <span className=\"okay\" style={{opacity: okayRatio}}>☑</span>\n <span className=\"flagged\" style={{opacity: flaggedRatio}}>⚠</span>\n </a>\n </OverlayTrigger>\n )\n};\n\nconst ClosestOrthologCmp = (props) => {\n let id, taxon_id, name, desc, species, className, identity;\n const gene = props.gene;\n\n if (gene.closest_rep_id) {\n name = gene.closest_rep_name || gene.closest_rep_id;\n desc = gene.closest_rep_description;\n species = gene.closest_rep_species_name;\n id = gene.closest_rep_id;\n taxon_id = gene.closest_rep_taxon_id;\n className = \"closest-ortholog\";\n identity = gene.closest_rep_identity || 0;\n }\n else if (gene.model_rep_id) {\n name = gene.model_rep_name || gene.model_rep_id;\n desc = gene.model_rep_description;\n species = gene.model_rep_species_name;\n id = gene.model_rep_id;\n taxon_id = gene.model_rep_taxon_id;\n className = \"model-ortholog\";\n identity = gene.model_rep_identity || 0;\n }\n var isZm = new RegExp(/^Zm00001e/);\n if (isZm.test(desc)) {\n desc='';\n }\n\n return (\n <div className={className} onClick={() => {\n props.doEnsureGrameneGenome(taxon_id);\n props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene',\n fq_field: 'id',\n fq_value: id,\n name: name\n }))\n }}>\n <div className=\"gene-species\">{species}</div>\n {identity > 0 && <div className=\"rep-identity\">{Math.round(identity*100)}</div>}\n <h3 className=\"gene-id\">{name}</h3>\n <p>{desc}</p>\n </div>\n );\n};\n\nconst ClosestOrtholog = connect(\n 'doReplaceGrameneFilters','doEnsureGrameneGenome',\n ClosestOrthologCmp\n);\n\nfunction renderClosestOrtholog(gene) {\n\n if (shouldShowClosestOrtholog(gene)) {\n\n // we used to not add the closest ortholog to the DOM if the homology detail was visible.\n // however, that could cause the height of the result to change. Instead we set visibility:hidden\n // so that the renderer takes into account the height of the ortholog even if not shown.\n return (\n <ClosestOrtholog gene={gene}/>\n );\n }\n}\n\n// show closest ortholog prominently if we have data to show:-\n// a. either there's a closest ortholog (determined by traversing the gene tree until an id or description looks\n// curated) b. or there's a model ortholog (traverse tree to find an ortholog in arabidopsis)\nfunction shouldShowClosestOrtholog(searchResult) {\n return (\n searchResult.closest_rep_id || (\n searchResult.model_rep_id &&\n searchResult.model_rep_id !== searchResult.id\n )\n );\n}\n\nconst allDetails = [\n {\n id: 'VEP',\n label: 'Germplasm',\n popup: 'Germplasm with protein truncating variants (PTVs)',\n available: false\n },\n {\n id: 'sequences',\n label: 'Sequences',\n popup: 'Gene/cDNA/protein fasta',\n available: true\n },\n {\n id: 'location',\n label: 'Location',\n popup: 'Genome Browser',\n available: false\n },\n {\n id: 'expression',\n label: 'Expression',\n popup: 'Gene Expression Atlas',\n available: false\n },\n {\n id: 'homology',\n label: 'Homology',\n popup: 'Gene Family Tree',\n available: false\n },\n {\n id: 'pathways',\n label: 'Pathways',\n popup: 'Plant Reactome Pathways',\n available: false\n },\n {\n id: 'pubs',\n label: 'Papers',\n popup: 'Curated Publications',\n available: false\n },\n {\n id: 'xrefs',\n label: 'Xrefs',\n popup: 'Database Cross-references',\n available: false\n }\n];\n\n\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: allDetails.map(o => ({...o})).filter(d => props.config.details[d.id]),\n expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => {\n hasData[c] = true;\n if (c === 'PanOryza') {\n hasData.xrefs = true;\n }\n });\n this.state.details.forEach(d => d.available |= hasData.hasOwnProperty(d.id));\n }\n getDetailStatus(d) {\n if (this.state.expandedDetail === d.id) return 'expanded';\n if (d.available) return 'closed'\n return d.id === \"pubs\" ? 'empty' : 'disabled';\n }\n setExpanded(d) {\n if (d.available || d.id === \"pubs\") {\n if (this.state.expandedDetail === d.id) {\n this.setState({expandedDetail: null})\n }\n else {\n const geneId = this.props.searchResult.id;\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(geneId))) {\n this.props.requestGene(geneId)\n }\n ReactGA.event({\n category: 'Search',\n action: 'Details',\n label: d.label\n });\n this.setState({expandedDetail: d.id})\n }\n }\n }\n ensureGene(id) {\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(id))) {\n this.props.requestGene(id);\n return false;\n }\n return this.props.geneDocs[id].hasOwnProperty('taxon_id')\n }\n renderMetadata() {\n let gene = this.props.searchResult;\n if (gene.model_rep_taxon_id) {\n gene.model_rep_species_name = this.props.taxLut[gene.model_rep_taxon_id].short_name;\n }\n if (gene.closest_rep_taxon_id) {\n gene.closest_rep_species_name = this.props.taxLut[gene.closest_rep_taxon_id].short_name;\n }\n return renderTairSummary(gene) || renderClosestOrtholog(gene);\n }\n render() {\n const panSite = this.props.config.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\n const curation = this.props.curation;\n // let orthologs='';\n // if (this.props.orthologs && this.props.orthologs.hasOwnProperty(searchResult.id)) {\n // orthologs = this.props.orthologs[searchResult.id].join(', ');\n // }\n const numWordsInDescription = searchResult.description.split(' ').length;\n return (\n <div className=\"result-gene\">\n <div className=\"result-gene-summary\">\n <div className=\"result-gene-title-body\">\n {panSite.hasOwnProperty(searchResult.system_name) && <PanLink pan={panSite[searchResult.system_name]} gene={searchResult}/>}\n {curation && <CurationComponent curation={curation} gene={searchResult}/> }\n <div className=\"gene-title\">\n <div className=\"gene-species\">{taxName}</div>\n <h3 className=\"gene-name\">{searchResult.name}\n {searchResult.id !== searchResult.name && <small className=\"gene-id\">&nbsp;{searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {searchResult.description !== \"unknown\" && (numWordsInDescription > 1 || searchResult.can_show.pubs) && <p className=\"gene-description\">{searchResult.description}</p>}\n </div>\n {this.renderMetadata()}\n </div>\n <div className=\"gene-detail-tabs\">\n {this.state.details.map((d,idx) => (\n <OverlayTrigger\n key={idx}\n placement={'bottom'}\n overlay={\n <Tooltip id={`tooltip`}>{d.popup}</Tooltip>\n }\n >\n <div key={idx}\n className={`col-md-1 text-center gene-detail-tab-${this.getDetailStatus(d)}`}\n onClick={()=>this.setExpanded(d)}\n >{d.label}</div>\n </OverlayTrigger>\n ))}\n </div>\n {this.state.expandedDetail && this.ensureGene(searchResult.id) && <div className=\"visible-detail\">{React.createElement(inventory[this.state.expandedDetail], this.props)}</div>}\n </div>\n )\n }\n}\n\nconst GeneList = props => {\n if (props.grameneSearch && props.grameneSearch.response && props.grameneTaxonomy) {\n let prev,page,next;\n const numFound = props.grameneSearch.response.numFound;\n if (numFound > props.grameneSearchRows) {\n const pageNum = props.grameneSearchOffset/props.grameneSearchRows;\n page = <span style={{padding:'10px'}}>page <b>{pageNum + 1}</b> of <b>{Math.ceil(numFound/props.grameneSearchRows)}</b></span>;\n prev = <GrHpe/>;\n if (pageNum > 0) {\n prev = <Badge onClick={()=>props.doRequestResultsPage(pageNum - 1)}><GrFormPrevious/></Badge>\n }\n next = <GrHpe/>;\n if (numFound > props.grameneSearchOffset + props.grameneSearchRows) {\n next = <Badge onClick={()=>props.doRequestResultsPage(pageNum + 1)}><GrFormNext/></Badge>\n }\n }\n return <div>\n <div>{prev}{page}{next}</div>\n {props.grameneSearch.response.docs.map((g,idx) => (\n <Gene key={idx}\n searchResult={g}\n config={props.configuration}\n taxName={props.grameneTaxonomy[g.taxon_id].name}\n geneDocs={props.grameneGenes}\n requestGene={props.doRequestGrameneGene}\n requestOrthologs={props.doRequestOrthologs}\n orthologs={props.grameneOrthologs}\n taxLut={props.grameneTaxonomy}\n curation={props.curatedGenes ? props.curatedGenes[g.id] : null}\n expandedDetail={props.grameneSearch.response.numFound === 1 && g.can_show.homology ? 'homology' : null}\n />\n ))}\n {prev}{page}{next}\n </div>\n }\n return null;\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneGenes',\n 'selectGrameneOrthologs',\n 'selectGrameneSearchOffset',\n 'selectGrameneSearchRows',\n 'selectCuratedGenes',\n 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React, { useRef, useEffect, useState } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Row, Col} from 'react-bootstrap';\nimport BAR, {haveBAR} from \"gramene-efp-browser\";\n\nfunction DynamicIframe(props) {\n // Create a ref for the iframe element\n const iframeRef = useRef(null);\n const [iframeHeight, setIframeHeight] = useState(500); // Default height\n\n useEffect(() => {\n const handleMessage = (event) => {\n if (event.data.type === 'heightChange') {\n setIframeHeight(event.data.height + 44);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n src={props.url}\n title=\"Dynamic Iframe\"\n style={{ width: '100%', height: `${iframeHeight}px`, border: 'none' }}\n />\n );\n}\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [atlasExperiment, setAtlasExperiment] = useState(null);\n const [atlasExperimentList, setAtlasExperimentList] = useState([]);\n const [isLocal, setIsLocal] = useState(false);\n const [activeTab, setActiveTab] = useState('gene');\n\n const handleLocalAPIChange = (event) => {\n setIsLocal(event.target.checked);\n };\n useEffect(() => {\n const tid = Math.floor(gene.taxon_id / 1000);\n if (props.expressionStudies[tid]) {\n let eList = props.expressionStudies[tid].sort((a,b) => {\n const a_name = `${a.type}:${a.description || a._id}`;\n const b_name = `${b.type}:${b.description || b._id}`;\n return a_name < b_name ? -1 : 1;\n });\n if (props.searchResult.hasOwnProperty('expressed_in_gxa_attr_ss')) {\n const in_gxa = new Set(props.searchResult.expressed_in_gxa_attr_ss);\n eList = eList.filter(e => in_gxa.has(e._id))\n }\n setAtlasExperimentList(eList);\n\n let refExp = eList.filter(e => e.isRef);\n if (refExp.length === 1) {\n setAtlasExperiment(refExp[0]._id);\n } else {\n // no reference experiment - choose first\n setAtlasExperiment(eList[0]._id);\n }\n }\n }, [props.expressionStudies]);\n\n let paralogs_url;\n let gene_url = `https://dev.gramene.org/static/atlasWidget.html?genes=${gene.atlas_id || gene._id}&localAPI=${isLocal}`;\n let paralogs = [];\n if (props.grameneParalogs && props.grameneParalogs[gene._id]) {\n paralogs = props.grameneParalogs[gene._id];\n } else if(gene.homology) {\n props.doRequestParalogs(gene._id, gene.homology.supertree, gene.taxon_id);\n }\n // if (gene.homology && gene.homology.homologous_genes && gene.homology.homologous_genes.within_species_paralog) {\n // paralogs = gene.homology.homologous_genes.within_species_paralog;\n // }\n if (paralogs.length > 1 && atlasExperiment) {\n paralogs_url= `https://dev.gramene.org/static/atlasWidget.html?genes=${paralogs.join(' ')}&experiment=${atlasExperiment}&localAPI=${isLocal}`;\n }\n return <Tabs activeKey={activeTab} onSelect={(k) => setActiveTab(k)}>\n {paralogs_url &&\n <Tab tabClassName=\"gxa\" eventKey=\"paralogs\" title={`Paralogs`} key=\"gxaparalogs\">\n <Form.Select aria-label='experiment selector'\n placeholder='Select experiment'\n onChange={(e) => setAtlasExperiment(e.target.value)}>\n { atlasExperimentList.map((e,idx) =>\n <option key={idx} value={e._id}>{e.type}: {e.description || e._id}</option>\n )}\n </Form.Select>\n {activeTab === \"paralogs\" && <DynamicIframe url={paralogs_url}/> }\n </Tab>\n }\n <Tab tabClassName=\"gxa\" eventKey=\"gene\" title=\"All Studies\" key=\"gxa\">\n {/*<Form.Check*/}\n {/* type=\"switch\"*/}\n {/* id=\"localAPI\"*/}\n {/* label=\"Local API\"*/}\n {/* checked={isLocal}*/}\n {/* onChange={handleLocalAPIChange}*/}\n {/*/>*/}\n {activeTab === \"gene\" && <DynamicIframe url={gene_url}/> }\n </Tab>\n {haveBAR(gene) &&\n <Tab tabClassName=\"eFP\" eventKey=\"eFP\" title=\"eFP Browser\" key=\"bar\"><BAR gene={gene}/></Tab>\n }\n </Tabs>\n};\n\nexport default connect(\n 'selectGrameneParalogs',\n 'selectExpressionStudies',\n 'doRequestParalogs',\n //'doRequestParalogExpression',\n Detail\n);\n\n","import React from 'react'\nimport _ from 'lodash';\nimport {connect} from \"redux-bundler-react\";\nimport TreeVis from \"gramene-genetree-vis\";\nimport treesClient from \"gramene-trees-client\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport {suggestionToFilters} from \"../../utils\";\nimport {Spinner, Alert} from \"react-bootstrap\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Homology extends React.Component {\n constructor(props) {\n super(props);\n if (!props.geneDocs.hasOwnProperty(props.searchResult.id)) {\n props.requestGene(props.searchResult.id)\n }\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n }\n renderTreeVis() {\n return (\n <div className=\"gene-genetree\">\n <TreeVis genetree={this.tree}\n initialGeneOfInterest={this.gene}\n genomesOfInterest={this.props.grameneGenomes.active}\n taxonomy={this.taxonomy}\n allowGeneSelection={true}\n pivotTree={true}\n enableCuration={false}\n enablePhyloview={true}\n numberOfNeighbors={10}\n ensemblUrl={this.props.configuration.ensemblURL}/>\n </div>\n )\n }\n filterAllHomologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'gene_tree',\n fq_value: this.tree._id,\n name: `Homologs of ${this.gene.name}`\n }))\n }\n filterOrthologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__all_orthologs',\n fq_value: this.gene._id,\n name: `Orthologs of ${this.gene.name}`\n }))\n }\n filterParalogs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__within_species_paralog',\n fq_value: this.gene._id,\n name: `Paralogs of ${this.gene.name}`\n }))\n }\n searchSupertree() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'supertree_attr_s',\n fq_value: this.gene.homology.supertree,\n name: this.gene.homology.supertree\n }))\n }\n orthologList() {\n return this.orthoParaList('ortholog');\n }\n\n paralogList() {\n return this.orthoParaList('within_species_paralog');\n }\n\n orthoParaList(type) {\n var homology, thisGeneId;\n homology = _.get(this.gene, 'homology.homologous_genes');\n thisGeneId = this.gene._id;\n\n if (homology) {\n var homologs = _(homology)\n .pickBy(function filterCategories(thing, name) {\n return name.indexOf(type) === 0;\n })\n .values()\n .flatten()\n .uniq()\n .value();\n\n if (!_.isEmpty(homologs)) {\n if (!homologs.includes(thisGeneId)) {\n console.log(\"add to homologs list\",thisGeneId);\n homologs.push(thisGeneId);\n }\n return homologs; // only return something if we have something. We're testing for truthiness later.\n }\n }\n }\n explorations() {\n let x = [{\n name: 'Homologs',\n category: 'Gene Tree',\n count: this.tree.geneCount,\n handleClick: this.filterAllHomologs.bind(this)\n }];\n if (this.orthologs) {\n x.push({\n name: 'Orthologs',\n category: 'Gene Tree',\n count: this.orthologs.length,\n handleClick: this.filterOrthologs.bind(this)\n });\n }\n if (this.paralogs) {\n x.push({\n name: 'Paralogs',\n category: 'Gene Tree',\n count: this.paralogs.length,\n handleClick: this.filterParalogs.bind(this)\n });\n }\n if (this.gene.homology.supertree) {\n x.push({\n name: `Supertree`,\n category: `Gene Tree`,\n count: this.gene.homology.supertree,\n handleClick: this.searchSupertree.bind(this)\n })\n }\n return x;\n }\n links() {\n let links = [\n {\n name: 'Ensembl Gene Tree view',\n url: `${this.props.configuration.ensemblURL}/${this.gene.system_name}/Gene/Compara_Tree?g=${this.gene._id}`\n }\n ];\n if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n links.push({\n name: 'Curate',\n url: this.props.curation.url + this.gene._id\n })\n }\n return links;\n }\n render() {\n const id = this.props.searchResult.id;\n if (!this.props.geneDocs.hasOwnProperty(id)) {\n return <Spinner/>\n }\n this.gene = this.props.geneDocs[id];\n const treeId = this.gene.homology.gene_tree.id;\n if (! this.props.grameneTrees.hasOwnProperty(treeId)) {\n this.props.doRequestGrameneTree(treeId);\n }\n else {\n const tree = this.props.grameneTrees[treeId];\n if (tree.hasOwnProperty('taxon_id')) {\n this.tree = treesClient.genetree.tree([this.props.grameneTrees[treeId]]);\n this.orthologs = this.orthologList();\n this.paralogs = this.paralogList();\n }\n }\n let flagged=0;\n // if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n // flagged = this.props.curatedGenes && this.props.curatedGenes[id] ? this.props.curatedGenes[id].flagged : 0;\n // }\n return (\n <Detail>\n <Title key=\"title\">Compara Gene Tree</Title>\n <Description key=\"description\">\n This phylogram shows the relationships between this gene and others similar to it, as determined by Ensembl Compara.\n {flagged > 1 && <Alert variant={'warning'}>This gene was flagged for potential gene structural annotation issues by {flagged} curators</Alert>}\n </Description>\n {this.tree && <Content key=\"content\">{this.renderTreeVis()}</Content>}\n {this.tree && <Explore key=\"explore\" explorations={this.explorations()}/>}\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n )\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGrameneTrees',\n 'selectGrameneGenomes',\n 'selectConfiguration',\n 'selectCuration',\n 'selectCuratedGenes',\n 'doRequestGrameneTree',\n 'doAcceptGrameneSuggestion',\n 'doReplaceGrameneFilters',\n Homology\n);\n\n","import React from 'react';\nimport keyBy from 'lodash/keyBy';\nimport _ from \"lodash\";\nimport ReactGA from \"react-ga4\";\nimport { BiLinkExternal } from \"react-icons/bi\";\nimport { Button, Badge } from \"react-bootstrap\";\n\nexport const Detail = props => {\n let subComponents = keyBy(props.children, 'key');\n return (\n <div className=\"detail\">\n <div className=\"intro\">\n {subComponents.title}\n {subComponents.description}\n </div>\n <div className=\"content-wrapper\">\n {subComponents.content}\n </div>\n <div className=\"actions\">\n <div className=\"action-wrapper\" xs={12} sm={5}>\n {subComponents.explore}\n </div>\n <div className=\"action-wrapper\" xs={12} sm={7}>\n {subComponents.links}\n </div>\n </div>\n </div>\n )\n};\n\nexport const Title = props => <h4>{props.children}</h4>;\nexport const Description = props => <p className=\"description\">{props.children}</p>;\nexport const Content = props => <div className=\"content\">{props.children}</div>;\n\nconst QueryTerm = props => {\n let category, name, badge;\n name = props.name;\n if (props.category) {\n category = props.category + ' | ';\n }\n if (_.isNumber(props.count)) {\n badge = <Badge style={{marginLeft: \"0.5rem\"}} bg='secondary'>{props.count}</Badge>\n }\n return (\n <Button variant='outline-dark' onClick={props.handleClick}>\n {category}{name}{badge}\n </Button>\n )\n};\n\nfunction renderExplorations(explorations) {\n return explorations.map(\n (exploration, idx) =>\n <QueryTerm key={idx} {...exploration} />\n );\n}\nexport const Explore = props => (\n <div className=\"explore\">\n <h5>Search Filters</h5>\n <div>\n {renderExplorations(props.explorations)}\n </div>\n </div>\n);\n\nfunction renderLinks(links) {\n let external = <small title=\"This link opens a page from an external site\"> <BiLinkExternal/></small>;\n return links.map((link, idx) =>\n <li key={idx}>\n <a href={link.url} target=\"_blank\" className=\"external-link\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: link.name\n })\n }}>{link.name}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={link.name}*/}\n {/* to={link.url}*/}\n {/* target=\"_blank\"*/}\n {/* className=\"external-link\"*/}\n {/*>*/}\n {/* {link.name}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n}\n\nexport const Links = props => (\n <div className=\"links\">\n <h5>Links to other resources</h5>\n <ul>\n {renderLinks(props.links)}\n </ul>\n </div>\n);\n","import { initializeApp } from \"firebase/app\";\n\nconst firebaseConfig = {\n apiKey: \"AIzaSyCyTJmxfWgfuhI6-8uqocSiE9KOWUlkgkk\",\n authDomain: \"gramene-auth.firebaseapp.com\",\n projectId: \"gramene-auth\",\n storageBucket: \"gramene-auth.appspot.com\",\n messagingSenderId: \"590873346270\",\n appId: \"1:590873346270:web:f76a31a93619e69439824f\"\n};\n\nexport const firebaseApp = initializeApp(firebaseConfig);\n\nexport const suggestionToFilters = (suggestion) => {\n return {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 3,\n children: [\n {\n fq_field: suggestion.fq_field,\n fq_value: suggestion.fq_value,\n name: suggestion.name,\n category: suggestion.category,\n leftIdx: 1,\n rightIdx: 2,\n negate: false,\n marked: false\n }\n ]\n }\n}\n","import React from 'react'\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport {Button} from \"react-bootstrap\";\nimport Browser from \"./location/browser\";\nimport {connect} from \"redux-bundler-react\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Location extends React.Component {\n constructor(props) {\n super(props);\n this.gene = this.props.geneDocs[this.props.searchResult.id];\n this.initRegion();\n this.state = {\n visibleRange: this.initVisibleRange()\n };\n }\n\n initVisibleRange() {\n var location, span, padding, result;\n location = this.gene.location;\n if(!location) {\n throw new Error(`Could not find the location of the gene in props.`);\n }\n\n span = location.end - location.start + 1;\n padding = Math.floor(.1 * span);\n\n result = {\n chr: location.region,\n start: location.start - padding,\n end: location.end + padding\n };\n\n result.displayName = `${result.chr}:${result.start}-${result.end}`;\n\n return result;\n }\n\n initRegion() {\n var region, isChromosome, regionType, regionName;\n region = this.gene.location.region;\n if (region) {\n isChromosome = /^\\d+$/.test(region);\n if (isChromosome) {\n regionType = 'chromosome';\n regionName = 'Chromosome ' + region;\n }\n else {\n regionType = 'scaffold';\n regionName = region;\n }\n this.region = {\n isChromsome: isChromosome,\n name: regionName,\n type: regionType\n };\n }\n }\n\n\n handleViewChange(chr, start, end) {\n var visibleRange = {\n chr: chr,\n start: start,\n end: end,\n displayName: `${chr}:${start}-${end}`\n };\n\n if(!isEqual(visibleRange, this.state.visibleRange)) {\n this.setState({\n visibleRange: visibleRange\n });\n }\n }\n\n updateQuery(restrictToVisibleRange) {\n var location, geneName, visibleRange, filter, filterDisplayName, fq;\n location = this.gene.location;\n geneName = this.gene.name;\n // category: 'Gene Tree',\n // fq_field: 'gene_tree',\n // fq_value: this.tree._id,\n // name: `Homologs of ${this.gene.name}`\n\n let terms = [\n {\n category: \"Map\",\n name: location.map,\n fq_field: 'map',\n fq_value: location.map\n },\n {\n category: \"Region\",\n name: location.region,\n fq_field: 'region',\n fq_value: location.region\n }\n ];\n fq = `map:${location.map} AND region:${location.region}`;\n\n if (restrictToVisibleRange) {\n visibleRange = this.state.visibleRange;\n\n terms.push({\n category: \"Interval\",\n name: `${visibleRange.start}-${visibleRange.end}`,\n fq_field: 'start',\n fq_value: `[${visibleRange.start} TO ${visibleRange.end}]`\n });\n fq += ` AND (start:[${visibleRange.start} TO ${visibleRange.end}]`\n + ` OR end:[${visibleRange.start} TO ${visibleRange.end}])`;\n\n filterDisplayName = visibleRange.displayName;\n } else {\n filterDisplayName = \"Shares \" + this.region.type + \" with \" + geneName;\n }\n\n console.log(\"User asked to filter by location\");\n filter = {\n category: 'Location',\n id: fq,\n fq: fq,\n display_name: filterDisplayName\n };\n\n // QueryActions.removeAllFilters();\n // QueryActions.setFilter(filter);\n this.props.doAddGrameneRangeQuery(terms);\n if (this.props.closeModal) this.props.closeModal();\n }\n\n explorations() {\n var visible, result;\n visible = this.state.visibleRange;\n result = [\n {\n name: `All on ${this.region.name}`,\n handleClick: ()=>this.updateQuery(false)\n }\n ];\n if (visible) {\n result.push({\n name: `All within ${getProp(visible, 'displayName')}`,\n handleClick: ()=>this.updateQuery(true)\n });\n }\n return result;\n }\n\n links() {\n function jgiify(id) {\n return id.replace('SORBI_3','Sobic.').replace(/\\.v[0-9]\\.[0-9]$/,'');\n }\n var gene = this.gene;\n let links = [\n {name: 'Ensembl Browser', url: `${this.props.config.ensemblURL}/${gene.system_name}/Gene/Summary?g=${gene._id}`}\n ];\n if (gene.annotations.taxonomy.ancestors.includes(4557))\n links.push({name: 'Phytozome', url: `https://phytozome-next.jgi.doe.gov/report/gene/Sbicolor_v5_1/${jgiify(gene._id)}`})\n if (gene.taxon_id === 3702)\n links.push(\n {name: 'tair', url: `https://www.arabidopsis.org/servlets/TairObject?name=${gene._id}&type=locus`},\n {name: 'ThaleMine', url: `https://bar.utoronto.ca/thalemine/keywordSearchResults.do?searchTerm=${gene._id}&searchSubmit=search`}\n );\n if (gene.taxon_id === 39947)\n links.push({name: 'RAP-DB', url: `https://rapdb.dna.affrc.go.jp/locus/?name=${gene._id}`});\n const isMaize = new RegExp(/^Zm[0-9]+/);\n if (isMaize.test(gene._id))\n links.push({name: 'MaizeGDB', url: `http://www.maizegdb.org/gene_center/gene/${gene._id}`});\n return links;\n }\n\n render() {\n return (\n <Detail>\n {/*<Title key=\"title\">Genome location: {this.renderGenePosition()}</Title>*/}\n <Description key=\"description\">Currently viewing: {this.renderLocation()}&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\n// var ensemblREST = require('../../../../../package.json').gramene.ensemblREST;\n//const ensemblREST = 'http://data.gramene.org/ensembl63';\n// const ensemblREST = 'https://data.sorghumbase.org/ensembl2';\n// const ensemblREST = 'https://data.gramene.org/vitis-ensembl1';\n// const ensemblREST = 'https://data.gramene.org/pansite-ensembl';\n\n// calculate this once.\nconst PREFIX = '/static/gramene-dalliance/';\n\nexport default class DallianceBrowser extends React.Component {\n\n constructor(props) {\n super(props);\n this.initialVisibleRange = props.visibleRange;\n }\n\n shouldComponentUpdate(newProps) {\n // should we reset the view to initial state?\n if(isEqual(newProps.visibleRange, this.initialVisibleRange)) {\n this.browser.setLocation(newProps.visibleRange.chr, newProps.visibleRange.start, newProps.visibleRange.end);\n }\n\n return false;\n }\n\n biodallianceElementId() {\n return this.props.gene._id + 'Browser';\n }\n\n browser() {\n var g, view, start, end, browser;\n g = this.props.gene;\n view = this.props.visibleRange;\n start = view.start;\n end = view.end;\n\n this.browser = browser = new Browser(\n {\n pageName: this.biodallianceElementId(),\n chr: g.location.region,\n viewStart: start,\n viewEnd: end,\n cookieKey: g._id + 'BrowserCookie',\n prefix: PREFIX,\n\n coordSystem: {\n speciesName: g.system_name,\n taxon: g.taxon_id,\n auth: 'Gramene',\n version: '3',\n ucscName: 'IRGSP-1.0'\n },\n\n sources: [\n {\n name: 'DNA',\n ensemblURI: this.props.config.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.config.ensemblRest,\n tier_type: 'ensembl',\n species: g.system_name,\n type: ['gene', 'transcript', 'exon', 'cds']\n }\n ],\n\n // hubs: ['/Track_Hubs/DRP000315/hub.txt'],\n disablePoweredBy: true,\n setDocumentTitle: false,\n noDefaultLabels: true,//!this.props.expanded,\n noPersist: true,\n noPersistView: true,\n maxWorkers: 2,\n noTitle: true,\n noLocationField: false,\n noLeapButtons: true,//!this.props.expanded,\n noZoomSlider: false, //!this.props.expanded,\n noTrackAdder: true,//!this.props.expanded,\n noTrackEditor: true,//!this.props.expanded,\n noExport: true,//!this.props.expanded,\n noOptions: true,//!this.props.expanded,\n noHelp: true,\n maxViewWidth: 1000000\n }\n );\n\n browser.addViewListener(this.props.onViewChange);\n }\n\n cancel() {\n if (typeof this.timeoutID == \"number\") {\n window.clearTimeout(this.timeoutID);\n delete this.timeoutID;\n }\n }\n\n componentDidMount() {\n // this.browser();\n this.cancel();\n var self = this;\n this.timeoutID = window.setTimeout(function () {self.browser();}, 0);\n }\n\n componentWillUnmount() {\n this.cancel();\n }\n\n render() {\n return (\n <div id={this.biodallianceElementId()}/>\n );\n }\n}\n\n// DallianceBrowser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// visibleRange: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// onViewChange: React.PropTypes.func.isRequired\n// };\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport FlatToNested from 'flat-to-nested';\nimport {Explore, Links} from \"./generic\";\nimport treesClient from \"gramene-trees-client\";\n// import {TreeMenu} from \"react-tree-menu\";\nimport TreeMenu from \"react-simple-tree-menu\";\nimport '../../../../node_modules/react-simple-tree-menu/dist/main.css';\n\nimport {Spinner} from \"react-bootstrap\";\nimport _ from 'lodash'\nimport \"./tree-view.css\"\n\nvar reactomeURL = \"https://plantreactome.gramene.org\";\n\nclass Pathways extends React.Component {\n constructor(props) {\n super(props);\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n this.gene = props.geneDocs[props.searchResult.id];\n this.holderId = 'displayHolder' + this.gene._id;\n this.state = {};\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 if (! docs[0].hasOwnProperty(lineageField)) {\n let tid = Math.floor(taxon_id / 1000);\n lineageField = 'lineage_'+tid;\n }\n let tsDocs = docs.map(function(doc) {\n let tsDoc = _.pick(doc,['_id','name','type']);\n tsDoc.lineage = doc[lineageField];\n return tsDoc;\n });\n console.log(tsDocs);\n return tsDocs;\n }\n\n componentWillUnmount() {\n // DocActions.noLongerNeedDocs('pathways', this.pathwayIds);\n if (this.diagram) this.diagram.detach();\n }\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, {useState, useEffect, useRef, useCallback} from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Button} from 'react-bootstrap';\nimport { AgGridReact } from \"ag-grid-react\";\nimport _ from 'lodash';\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport \"./VEP.css\";\n\nconst ggURL = {\n xIRRI: 'https://gringlobal.irri.org/gringlobal/accessiondetail?id=',\n IRRI: 'https://www.irri.org/genesys-rice#/a/',\n ARS: 'https://npgsweb.ars-grin.gov/gringlobal/accessiondetail.aspx?id=',\n ICRISAT: 'https://genebank.icrisat.org/IND/PassportSummary?ID=',\n sorbmutdb: 'https://www.depts.ttu.edu/igcast/sorbmutdb.php',\n maizeGDB: 'https://wgs.maizegdb.org/',\n NCBI: 'https://www.ncbi.nlm.nih.gov/biosample/?term='\n};\n\nconst rice_studies = {'1': {label: 'Rice 3K', type: 'NAT'}};\nconst study_info = {\n 'sorghum_bicolor': {\n '1': {label: 'Purdue EMS', type: 'EMS'},\n '2': {label: 'USDA Lubbock EMS', type: 'EMS'},\n '3': {label: 'Lozano', type: 'NAT'},\n '4': {label: 'USDA Lubbock EMS', type: 'EMS'},\n '5': {label: 'Boatwright SAP', type: 'NAT'},\n '7': {label: 'Kumar BAP', type: 'NAT'},\n '8': {label: 'Lasky landraces', type: 'NAT'},\n '9': {label: 'Sorghum Genomics Toolbox', type: 'NAT'}\n },\n 'zea_maysb73': {\n '15': {label: 'MaizeGDB 2024', type: 'NAT'}\n },\n 'oryza_sativa': {\n '7': {label: 'Rice 3K', type: 'NAT'},\n '20': {label: '20K-RGP', type: 'NAT'},\n '29': {label: 'Rice USDA mini core', type: 'NAT'},\n '38': {label: 'RAPDB 2024', type: 'NAT'},\n },\n 'oryza_aus': { '20': {label: '20K-RGP', type: 'NAT'}},\n 'oryza_sativa117425': { '20': {label: '20K-RGP', type: 'NAT'}},\n 'oryza_sativair64rs2': { '20': {label: '20K-RGP', type: 'NAT'}},\n 'oryza_sativamh63': { '20': {label: '20K-RGP', type: 'NAT'}}\n};\nconst AccessionLink = ({germplasm, gene_id}) => {\n const genebank = germplasm.stock_center;\n const url = ggURL[genebank];\n if (germplasm.germplasm_dbid) { // link to stock center\n const germ_id = germplasm.germplasm_dbid;\n if (germ_id && url && germ_id !== \"0\") {\n return <a target=\"_blank\" href={`${url}${germ_id}`}>\n {germplasm.pub_id} ({genebank})</a>;\n }\n }\n if (genebank === \"sorbmutdb\") {\n return (\n <form id={germplasm.pub_id} action={url} method=\"post\" target=\"_blank\">\n <input type=\"hidden\" name=\"search\" value={gene_id.replace('SORBI_3','Sobic.')} />\n <input type=\"hidden\" name=\"submit\" value=\"Search\" />\n <button type=\"submit\" className=\"button-like-link\">SorbMutDB</button>\n </form>\n );\n }\n if (germplasm.pop_id === '15' && germplasm.stock_center === 'NOT FOUND') {\n return <a target=\"_blank\" href={ggURL['maizeGDB']}>{germplasm.pub_id} (SNPVersity)</a>\n }\n return <span>{germplasm.pub_id}</span>\n}\nfunction compareGermplasm(a, b) {\n const aSub = a?.germplasm?.subpop ?? '';\n const bSub = b?.germplasm?.subpop ?? '';\n const subCmp = aSub.localeCompare(bSub, 'en', { sensitivity: 'accent' });\n if (subCmp !== 0) return subCmp;\n\n const aPub = a?.germplasm?.pub_id ?? '';\n const bPub = b?.germplasm?.pub_id ?? '';\n return aPub.localeCompare(bPub, 'en', { sensitivity: 'accent' });\n}\nfunction group_germplasm(gene, germplasmLUT, vep_obj) {\n let accessionTable = [];\n Object.entries(vep_obj).forEach(([key,accessions]) => {\n const parts = key.split(\"__\");\n if (parts[0] === \"VEP\") {\n if (parts[1] !== \"merged\") {\n accessions.filter(ens_id => germplasmLUT.hasOwnProperty(ens_id)).forEach(ens_id => {\n const germplasm = germplasmLUT[ens_id][0];\n const pop = study_info[parts[3]][parts[4]];\n const conseq = parts[1].replaceAll(\"_\",\" \");\n const status = parts[2] === \"het\" ? \"heterozygous\" : \"homozygous\";\n const accInfo = {\n key: [pop.label,conseq,status].join('%%%'),\n germplasm: germplasm,\n pop: pop\n };\n accessionTable.push(accInfo);\n });\n }\n }\n });\n // group accessionTable by key field\n const groups = _.groupBy(accessionTable, 'key');\n let grouped = [];\n let id=0;\n Object.keys(groups).sort().forEach((group) => {\n const [pop,conseq,status] = group.split('%%%');\n id++;\n const tally = groups[group].length;\n grouped.push({\n id: id,\n group: group,\n summary: true,\n pop: pop,\n conseq: conseq,\n status: status,\n tally: tally\n });\n groups[group].sort(compareGermplasm).forEach(acc => {\n id++;\n grouped.push({\n id: id,\n group: group,\n summary: false,\n pop:pop,\n conseq: conseq,\n status: status,\n accession: acc,\n tally: tally\n })\n })\n })\n return grouped;\n}\nconst THRESHOLD = 5;\nconst GridWithGroups = ({groups,gene_id,doGrin}) => {\n const [rowData, setRowData] = useState(groups);\n\n const initialExpanded = {};\n rowData.forEach((row) => {\n if (row.summary) {\n initialExpanded[row.group] = (row.tally < THRESHOLD);\n }\n });\n const [expandedGroups, setExpandedGroups] = useState(initialExpanded);\n\n\n // Toggle group visibility\n const toggleGroup = (group) => {\n setExpandedGroups((prevExpandedGroups) => ({\n ...prevExpandedGroups,\n [group]: !prevExpandedGroups[group], // Toggle the group's state\n }));\n };\n\n // Filter the data to show/hide rows based on the expanded group state\n const getVisibleRowData = () => {\n const visibleRows = [];\n rowData.forEach((row) => {\n if (row.summary) {\n if (row.tally > 1) {\n visibleRows.push(row);\n }\n } else if (expandedGroups[row.group]) {\n visibleRows.push(row); // Show non-summary rows if the group is expanded\n }\n });\n return visibleRows;\n };\n\n // Define columns with a custom renderer for the summary rows\n const columnDefs = [\n { field: 'pop', headerName: 'Study/Population', flex: 1,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'conseq', headerName: 'VEP consequence', flex: 1,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'status', headerName: 'Allele status', flex: 1,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'accession', headerName: doGrin ? 'Order Germplasm' : 'Accession', flex: 1,\n headerComponent: (props) => {\n return (\n <div style={{display: 'flex', alignItems: 'center'}}>\n {doGrin && <i className=\"fas fa-shopping-cart\">&nbsp;</i>}\n <span>{props.displayName}</span>\n </div>\n );\n }, // Use the custom header with the shopping cart icon\n cellRenderer: (params) => {\n if (params.value) {\n return <AccessionLink germplasm={params.value.germplasm} gene_id={gene_id} />;\n }\n if (params.data.summary) {\n return (\n <span\n onClick={() => toggleGroup(params.data.group)}\n >\n {params.data.tally} Accessions {expandedGroups[params.data.group] ? '▼' : '▶'}\n </span>\n );\n }\n return null;\n }\n },\n { field: 'synonym', headerName: 'Synonym', filter:false, sortable:false, flex: 1, cellRenderer: (params) => {\n if (params.data.accession) {\n return params.data.accession.germplasm.ens_id\n }\n return null;\n }},\n { field: 'subpop', headerName: 'Subpopulation', filter:false, sortable: false, flex: 1, cellRenderer: (params) => {\n if (params.data.accession && params.data.accession.germplasm.subpop && params.data.accession.germplasm.subpop !== \"?\") {\n return params.data.accession.germplasm.subpop\n }\n return null;\n }},\n { field: 'search', headerName: 'All LOF Genes', sortable:false, filter:false, flex: 1,\n cellRenderer: (params) => {\n if (params.data.accession) {\n const currentURL = new URL(window.location.href);\n const accession = params.data.accession;\n currentURL.search = '';\n currentURL.searchParams.set('category', 'Germplasm');\n currentURL.searchParams.set('fq_field', `VEP__merged__${accession.pop.type}__attr_ss`);\n currentURL.searchParams.set('fq_value', accession.germplasm.ens_id);\n currentURL.searchParams.set('name', accession.germplasm.ens_id);\n\n return <Button size='sm' href={currentURL.toString()}>Search</Button>\n\n }\n return null;\n }\n }\n ];\n\n const defaultColDef = {\n sortable: true,\n filter: \"agTextColumnFilter\",\n cellStyle: (params) => {\n if (params.data.summary) {\n return {cursor: 'pointer'};\n }\n return null;\n }\n };\n\n const nVisible = getVisibleRowData().length;\n const tableHeight = 50 + Math.min(nVisible, 10) * 42;\n return (\n <div\n className=\"ag-theme-quartz\"\n style={{ height: tableHeight, width: \"100%\", maxWidth: \"1200px\" }}\n >\n <AgGridReact\n rowData={getVisibleRowData()}\n columnDefs={columnDefs}\n getRowNodeId={(data) => data.id}\n animateRows={true}\n defaultColDef={defaultColDef}\n />\n </div>\n );\n};\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n if (props.grameneConsequences && props.grameneConsequences[gene._id] && props.grameneGermplasm) {\n const groups = group_germplasm(gene, props.grameneGermplasm, props.grameneConsequences[gene._id]);\n\n return <div>\n <h5>Predicted loss-of-function alleles were detected in these germplasm.</h5>\n <div >Explore other variants within this gene in the <a target=\"_blank\"\n href={`${props.configuration.ensemblURL}/${gene.system_name}/Gene/Variation_Gene/Image?db=core;g=${props.searchResult.id}`}>\n Variant image</a> page in the Ensembl genome browser.</div>\n <GridWithGroups groups={...groups} gene_id={gene._id} doGrin={!props.configuration.hasOwnProperty('noGRIN')}/>\n </div>\n } else {\n props.doRequestVEP(gene._id);\n return <pre>loading</pre>;\n }\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneConsequences',\n 'selectGrameneGermplasm',\n 'doRequestVEP',\n Detail\n);\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n <td className=\"xref-name-col\">{db}</td>\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n </tr>\n );\n }\n}\n\nfunction formatXrefsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n return gene.xrefs\n .filter(xr => dbxrefs.isKnown(xr.db) && xr.db !== \"PUBMED\")\n .sort()\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\n\nconst Xrefs = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Cross-references</Title>\n <Description key=\"description\">References to this gene in other databases:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-name-col\">Database</th>\n <th className=\"xref-value-col\">IDs and links</th>\n </tr>\n </thead>\n <tbody>\n {formatXrefsForGene(geneDocs[searchResult.id])}\n </tbody>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Xrefs;\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n {/*<td className=\"xref-name-col\">{db}</td>*/}\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n <td className=\"xref-name-col\">{this.props.source}</td>\n <td className=\"xref-value-col\">{this.props.text}</td>\n </tr>\n );\n }\n}\n\nfunction formatPubsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n let pubs = gene.xrefs.filter(xr => xr.db === \"PUBMED\");\n if (pubs.length === 0) {\n return <tr><td colSpan={3}>No publications found.</td></tr>\n }\n return pubs.sort((a,b) => {\n if (a.source) {\n if (b.source) {\n if (a.source < b.source) {\n return -1;\n }\n if (a.source > b.source) {\n return 1;\n }\n }\n else {\n return -1;\n }\n }\n else if (b.source) {\n return 1;\n }\n if (a.db < b.db) {\n return -1;\n }\n if (a.db > b.db) {\n return 1;\n }\n return 0;\n })\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\nconst formURL = 'https://docs.google.com/forms/d/e/1FAIpQLSey-xPyTysdd9c2phXT6kcbjEDeCppG4dLG7LjZCeLpx_KGog/viewform?usp=pp_url&entry.1266455249=';\nconst Publications = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Curated publications</Title>\n <Description key=\"description\">Functions described in the literature:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-10-col\">PubMed link</th>\n <th className=\"xref-10-col\">Curation source</th>\n <th className=\"xref-80-col\">Title/Description</th>\n </tr>\n </thead>\n <tbody>\n {formatPubsForGene(geneDocs[searchResult.id])}\n </tbody>\n <tfoot>\n <tr>\n <th colSpan={3}>Submit a gene function <a target=\"_blank\" href={formURL + searchResult.id}>here</a></th>\n </tr>\n </tfoot>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Publications;\n\n","import React, { useState, useEffect } from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Container, Row, Col, ToggleButton, ButtonGroup } from 'react-bootstrap';\nimport { AiOutlineCopy } from 'react-icons/ai';\nimport './sequences.css';\nimport keyBy from \"lodash/keyBy\";\n\nconst CodeBlock = props => {\n const plainFasta = `>${props.id}\\n${props.seq}`\n\n const [showNotification, setShowNotification] = useState(false);\n\n const copyCode = () => {\n // Use the Clipboard API to write text to the clipboard\n navigator.clipboard.writeText(plainFasta)\n .then(() => {\n setShowNotification(true);\n })\n .catch((err) => {\n console.error('Unable to copy to clipboard', err);\n });\n };\n\n useEffect(() => {\n if (showNotification) {\n const notificationTimeout = setTimeout(() => {\n setShowNotification(false);\n }, 2000); // Hide the notification after 2 seconds\n\n return () => clearTimeout(notificationTimeout);\n }\n }, [showNotification]);\n\n return (\n <div className=\"fasta-container\">\n <code className=\"fasta\"><span className=\"header\">&gt;{props.id}</span><br/>{\n props.blocks.map((block,idx) =>\n <span key={idx} className={block.kind}>{block.seq}</span>\n )\n }</code>\n <p className=\"fasta-key\">\n <b>Key:</b>&nbsp;5'UTR&nbsp;\n <span className=\"square-utr5\">&nbsp;&nbsp;</span>\n &nbsp;CDS&nbsp;\n <span className=\"square-cds\">&nbsp;&nbsp;</span>\n &nbsp;3'UTR&nbsp;\n <span className=\"square-utr3\">&nbsp;&nbsp;</span>\n </p>\n <button className=\"copy-button\" onClick={copyCode}><AiOutlineCopy /></button>\n {showNotification && <div className=\"notification\">Sequence copied</div>}\n </div>\n );\n};\n\nconst decoratePeptide = (seq, transcript) => {\n let junctions = [];\n if (transcript.exon_junctions) {\n transcript.exon_junctions.forEach((ej, idx) => {\n if (ej > transcript.cds.start && ej <= transcript.cds.end) {\n junctions.push(Math.floor((ej - transcript.cds.start) / 3));\n }\n });\n }\n if (junctions.length === 0) {\n return [{kind:'cds', seq:seq}];\n }\n let offset = 0;\n let blocks = [];\n junctions.forEach((j, idx) => {\n let kind = idx % 2 === 0 ? \"cds\" : \"cds-other\";\n blocks.push({kind: kind, seq: seq.substring(offset, j)});\n offset = j;\n });\n blocks.push({kind: junctions.length % 2 === 0 ? \"cds\" : \"cds-other\", seq: seq.substring(junctions.pop())});\n return blocks;\n}\nconst decorateSeq = (geneSeq, gene, up, down, tid, mode) => {\n // return a list of blocks with kind and seq properties\n let blocks = [];\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n const offset = gene.location.strand === 1\n ? gene.location.start - geneSeq.start\n : geneSeq.end - gene.location.end\n if (up > 0) {\n const TSS = gene.gene_structure.exons.find(exon => exon.id === transcript.exons[0]).start;\n blocks.push({\n kind:'upstream',\n seq: geneSeq.seq.substring(offset - up + TSS - 1, offset + TSS - 1).toLowerCase()\n })\n }\n // add exons and introns based on tid\n let pos_in_transcript = 0;\n let pos_in_gene = 0;\n let blockType = 'utr5';\n let extra = '';\n transcript.exons.forEach((eid, e_idx) => {\n const exon = gene.gene_structure.exons.find(exon => exon.id === eid);\n if (e_idx > 0 && mode === \"dna\") {\n blocks.push({\n kind: 'intron',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + exon.start - 1).toLowerCase()\n });\n pos_in_gene = exon.start-1;\n }\n if (mode === \"rna\") {\n extra = e_idx % 2 === 1 ? '-other' : '';\n }\n let exon_length = exon.end - exon.start + 1;\n if (transcript.cds && pos_in_transcript < transcript.cds.start && pos_in_transcript + exon_length >= transcript.cds.start) {\n // CDS starts in this exon\n const utr5_len = transcript.cds.start - pos_in_transcript - 1;\n if (utr5_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + utr5_len)\n });\n exon_length -= utr5_len;\n pos_in_gene += utr5_len;\n pos_in_transcript = transcript.cds.start - 1;\n }\n blockType = 'cds';\n }\n if (blockType === 'cds' && pos_in_transcript + exon_length >= transcript.cds.end) {\n // CDS ends in this exon\n const cds_len = transcript.cds.end - pos_in_transcript;\n if (cds_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + cds_len)\n });\n exon_length -= cds_len;\n pos_in_gene += cds_len;\n pos_in_transcript = transcript.cds.end;\n }\n blockType = 'utr3';\n }\n if (exon_length > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + exon_length)\n })\n }\n pos_in_gene = exon.end;\n pos_in_transcript += exon_length;\n })\n // check if there's more to the gene locus after end of transcript?\n // downstream is currently relative to end of transcript but upstream is relative to first TSS\n if (down > 0) {\n blocks.push({\n kind:'downstream',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + down).toLowerCase()\n })\n }\n return blocks;\n};\nconst buildId = (gene, geneSeq, up, down) => {\n let gs = gene.location.strand === 1 ? gene.location.start - up : gene.location.start - down;\n let ge = gene.location.strand === 1 ? gene.location.end + down : gene.location.end + up;\n let extras = [];\n if (gene.location.strand === -1) {\n extras.push('reverse')\n }\n if (up > 0) {\n extras.push(`upstream=${up}`)\n }\n if (down > 0) {\n extras.push(`downstream=${down}`)\n }\n return `${geneSeq.genome}|${gene._id}|${gene.location.region}:${gs}..${ge} ${extras.join('|')}`\n};\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [tab, setTab] = useState('dna');\n const [upstream, setUpstream] = useState(0);\n const [downstream, setDownstream] = useState(0);\n const [tid, setTid] = useState(gene.gene_structure.canonical_transcript);\n let geneSeq;\n let rnaSeq;\n let pepSeq;\n if (props.geneSequences && props.geneSequences[gene._id]) {\n geneSeq = props.geneSequences[gene._id];\n }\n else {\n props.doRequestGeneSequence(gene)\n return <pre>loading</pre>;\n }\n if (props.rnaSequences && props.rnaSequences[tid]) {\n rnaSeq = props.rnaSequences[tid]\n }\n else {\n props.doRequestRnaSequence(tid, gene)\n return <pre>loading</pre>;\n }\n const maxUp = gene.location.strand === 1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const maxDown = gene.location.strand === -1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n let tl_id;\n if (transcript.translation) {\n tl_id = transcript.translation.id;\n if (props.pepSequences && props.pepSequences[tl_id]) {\n pepSeq = props.pepSequences[tl_id];\n }\n else {\n props.doRequestPepSequence(tl_id, gene);\n return <pre>loading</pre>;\n }\n }\n return <Tabs activeKey={tab}\n onSelect={(k) => setTab(k)}\n >\n <Tab tabClassName=\"dna\" eventKey=\"dna\" title=\"Genomic sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n <Row>\n <Col><b><i>Show flanking sequence</i></b></Col>\n </Row>\n <Row>\n <Col style={{ maxWidth: '5ch', textAlign: 'right'}}>{upstream}</Col>\n <Col style={{maxWidth: '20ch'}}>\n <Form.Range\n className=\"reverse-slide\"\n value={upstream}\n onChange={(e) => setUpstream(e.target.value)}\n min={0}\n max={maxUp}\n step={10}\n /><div style={{textAlign:'right'}}>Upstream</div>\n </Col>\n <Col style={{maxWidth: '30ch'}}>\n <div className=\"styled-span\">\n <div className=\"vertical-line\"/>\n <div className=\"horizontal-line\"/>\n <span>Transcript (unspliced)</span>\n <div className=\"horizontal-line\"/>\n <div className=\"vertical-line\"/>\n </div>\n </Col>\n <Col style={{maxWidth: '20ch'}}>\n <Form.Range\n value={downstream}\n onChange={(e) => setDownstream(e.target.value)}\n min={0}\n max={maxDown}\n step={10}\n /><div style={{textAlign:'left'}}>Downstream</div>\n </Col>\n <Col style={{ maxWidth: '5ch', textAlign: 'left'}}>{downstream}</Col>\n </Row>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Highlight transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={buildId(gene,geneSeq,+upstream,+downstream)} seq={geneSeq.seq.substring(maxUp - +upstream, maxUp + gene.location.end - gene.location.start + 1 + +downstream)} blocks={decorateSeq(geneSeq,gene,+upstream,+downstream,tid,\"dna\")}/>}\n </Tab>\n <Tab tabClassName=\"rna\" eventKey=\"rna\" title=\"Transcript sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tid} seq={rnaSeq.seq} blocks={decorateSeq(geneSeq,gene,0,0,tid,\"rna\")}/>}\n </Tab>\n {gene.biotype === \"protein_coding\" &&\n <Tab tabClassName=\"pep\" eventKey=\"pep\" title=\"Peptide sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tl_id} seq={pepSeq.seq} blocks={decoratePeptide(pepSeq.seq,transcript)}/>}\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGeneSequences',\n 'selectRnaSequences',\n 'selectPepSequences',\n 'doRequestGeneSequence',\n 'doRequestRnaSequence',\n 'doRequestPepSequence',\n Detail\n);\n\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport Vis from \"gramene-search-vis\"\nimport Selection from './selection.js'\nimport '../../../node_modules/gramene-search-vis/styles/main.less';\n\nclass TaxDist extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapseEmpties: true\n };\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 = !g.hidden;\n })\n }\n else {\n this.state.genomes.forEach(g => {\n g.selected = !g.hidden && props.grameneGenomes.active[g.taxon_id];\n })\n }\n }\n getSelectedGenomes() {\n let selected = {};\n let notHidden = {};\n let somethingWasSelected = false;\n this.state.genomes.forEach(g => {\n if (!g.hidden) {\n notHidden[g.taxon_id] = true;\n if (g.selected) {\n selected[g.taxon_id] = true;\n somethingWasSelected = true;\n }\n }\n });\n return somethingWasSelected ? selected : notHidden;\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 if(m.hidden) return <></>\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","import React, { useState, Suspense } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { Accordion, Button } from 'react-bootstrap';\nimport \"./expression.css\";\nconst LazyStudy = React.lazy(() => import('./Study'));\n\nconst StudyList = props => {\n return <Accordion alwaysOpen defaultActiveKey={props.studies.length === 1 ? \"study_0\" : undefined}>\n {props.studies.map((study, idx) => {\n return (\n <Accordion.Item key={idx} eventKey={'study_'+idx}>\n <Accordion.Header>{study.description}</Accordion.Header>\n <Accordion.Body>\n <Suspense fallback={<div>Loading...</div>}>\n <LazyStudy id={study._id}/>\n </Suspense>\n {/*<Study id={study._id} />*/}\n </Accordion.Body>\n </Accordion.Item>\n )\n })}\n </Accordion>\n};\n\nconst Expression = props => {\n let searchTaxa = {};\n if (props.grameneSearch) {\n const taxon_id_facet = props.grameneSearch.facet_counts.facet_fields.taxon_id;\n taxon_id_facet.filter((tid, idx) => idx % 2 === 0).forEach(tid => searchTaxa[tid] = true);\n }\n const availableTaxa = Object.keys(props.expressionStudies)\n .filter(tid => searchTaxa[tid] || searchTaxa[tid + '001'])\n .sort((a,b) => props.grameneMaps[a + '001'].left_index - props.grameneMaps[b + '001'].left_index);\n return availableTaxa && props.grameneTaxonomy &&\n <div>\n <div>This is where you can launch a component for the selected samples. props.desiredSamples lists them.\n This component can request the data from the API\n organize samples by factor metadata? One big table with all the studies?\n <Button>Show Samples ({Object.keys(props.desiredSamples).length} selected)</Button>\n </div>\n <Accordion alwaysOpen defaultActiveKey={availableTaxa.length === 1 ? \"tax_0\" : undefined}>\n {availableTaxa.map((tid, idx) => {\n const n = props.expressionStudies[tid].length;\n return <Accordion.Item key={idx} eventKey={'tax_'+idx}>\n <Accordion.Header>{props.grameneTaxonomy[tid].name} - {n} {n === 1 ? 'study' : 'studies'}</Accordion.Header>\n <Accordion.Body><StudyList studies={props.expressionStudies[tid]}/></Accordion.Body>\n </Accordion.Item>\n })}\n </Accordion>\n </div>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n Expression\n);\n","import {connect} from \"redux-bundler-react\";\nimport React, { useEffect, useState } from 'react';\nimport {Table, Form, Button, Alert, Spinner, Container, Row, Col} from 'react-bootstrap';\nimport { firebaseApp } from \"../utils\";\nimport {getAuth, onAuthStateChanged} from \"firebase/auth\";\n\nconst auth = getAuth(firebaseApp);\n\nconst MAX_GENE_IDS = 1000; // Define the maximum number of gene IDs allowed\n\nconst GeneListDisplayComponent = props => {\n const [publicGeneLists, setPublicGeneLists] = useState([]);\n const [privateGeneLists, setPrivateGeneLists] = useState([]);\n const [error, setError] = useState(null);\n const [user, setUser] = useState({});\n onAuthStateChanged(auth, (user) => setUser(user));\n\n const fetchPrivateGeneLists = async () => {\n try {\n const token = await user.getIdToken();\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=false`, {\n method: 'GET',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n const result = await response.json();\n\n if (response.ok) {\n setError(null);\n setPrivateGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch private gene lists. Please try again later.');\n }\n };\n // Fetch saved gene lists from a backend or local storage\n const fetchPublicGeneLists = async () => {\n try {\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=true`);\n const result = await response.json();\n\n if (response.ok) {\n setPublicGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch gene lists. Please try again later.');\n }\n };\n\n // Fetch data when the component is mounted\n useEffect(() => {\n fetchPublicGeneLists();\n }, []);\n useEffect(() => {\n fetchPrivateGeneLists();\n }, [user]);\n\n return (\n <div className=\"gene-list-display-component\">\n <h4>Saved Gene Lists</h4>\n\n {error && (\n <Alert variant=\"danger\">\n {error}\n </Alert>\n )}\n\n {privateGeneLists.length > 0 && (\n <Table striped bordered hover className=\"mt-4\">\n <thead>\n <tr>\n <th>List Name</th>\n <th>Number of Genes</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n {privateGeneLists.map((list, index) => (\n <tr key={index}>\n <td>{list.label}</td>\n <td>{list.hash}</td>\n <td>\n <Button variant=\"info\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n <Button variant=\"danger\" onClick={() => deleteGeneList(props.api, list._id)} className=\"ml-2\">\n Delete\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </Table>\n )}\n\n {publicGeneLists.length > 0 ? (\n <Table striped bordered hover className=\"mt-4\">\n <thead>\n <tr>\n <th>List Name</th>\n <th>Number of Genes</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n {publicGeneLists.map((list, index) => (\n <tr key={index}>\n <td>{list.label}</td>\n <td>{list.hash}</td>\n <td>\n <Button variant=\"info\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n <Button variant=\"danger\" onClick={() => deleteGeneList(props.api, list._id)} className=\"ml-2\">\n Delete\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </Table>\n ) : (\n <Alert variant=\"warning\" className=\"mt-4\">\n No saved gene lists found.\n </Alert>\n )}\n </div>\n );\n};\n\n// Example functions for viewing and deleting lists\nconst viewGeneList = (list) => {\n alert(`Viewing gene list: ${list.name}\\nGenes: ${list.genes.join(', ')}`);\n};\n\nconst deleteGeneList = async (api,listId) => {\n if (window.confirm('Are you sure you want to delete this gene list?')) {\n // Replace with the actual delete request\n try {\n await fetch(`${api}/gene_lists/${listId}`, {\n method: 'DELETE',\n });\n alert('Gene list deleted!');\n // Optionally refetch the updated list\n } catch (err) {\n alert('Failed to delete gene list.');\n }\n }\n};\n\n\nconst GeneListComponent = props => {\n const [geneList, setGeneList] = useState('');\n const [listHash, setListHash] = useState(null);\n const [validationError, setValidationError] = useState([]);\n const [listName, setListName] = useState('');\n const [listIsPublic, setListIsPublic] = useState(false);\n const [validatedList, setValidatedList] = useState([]);\n const [errorMessage, setErrorMessage] = useState('');\n const [loading, setLoading] = useState(false); // New loading state\n const [user, setUser] = useState({});\n onAuthStateChanged(auth, (user) => setUser(user));\n\n // Function to handle gene list input\n const handleGeneListChange = (event) => {\n setGeneList(event.target.value);\n };\n\n // Function to handle drag and drop of gene list\n const handleDrop = (event) => {\n event.preventDefault();\n const geneData = event.dataTransfer.getData('text');\n setGeneList(geneData);\n };\n\n // Function to handle drag over (needed for drop)\n const handleDragOver = (event) => {\n event.preventDefault();\n };\n\n // Function to submit gene list for validation\n const handleSubmit = async () => {\n const geneArray = geneList.split('\\n').filter(Boolean); // Convert the gene list into an array and filter out empty values\n\n if (geneArray.length > MAX_GENE_IDS) {\n setErrorMessage(`You have exceeded the maximum limit of ${MAX_GENE_IDS} gene IDs.`);\n return;\n }\n\n setErrorMessage(''); // Reset error message if validation passes\n setLoading(true); // Set loading state to true to show progress\n\n try {\n const response = await fetch(`${props.api}/gene_lists/validate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(geneArray),\n });\n\n const result = await response.json();\n\n if (result.hash) {\n setListHash(result.hash);\n setValidatedList(result.ids);\n setValidationError(result.missing);\n } else {\n // Handle errors from validation\n alert('Error during validation.');\n }\n } catch (error) {\n alert('There was an error with the validation service.',error);\n } finally {\n setLoading(false); // Set loading to false when the request is complete\n }\n };\n\n // Function to save the validated gene list\n const handleSaveList = async () => {\n const queryParams = {\n label: listName,\n hash: listHash,\n site: props.site,\n isPublic: listIsPublic\n };\n const queryString = new URLSearchParams(queryParams).toString();\n\n const token = await user.getIdToken();\n try {\n const response = await fetch(`${props.api}/gene_lists?${queryString}`, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n if (!response.ok) {\n throw new Error('Failed to save list');\n }\n const result = await response.json();\n console.log(result);\n\n } catch (error) {\n console.error(\"There was an problem with fetch\", error)\n }\n };\n\n return (\n <div className=\"gene-list-component\">\n <h4>Gene List Validator</h4>\n\n <Form>\n {/* Input for Gene List */}\n <Form.Group controlId=\"geneList\">\n <Form.Label>Paste or drop your gene list here:</Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={10}\n value={geneList}\n onChange={handleGeneListChange}\n placeholder={`Paste or drop your gene list here (Maximum: ${MAX_GENE_IDS} IDs)`}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n </Form.Group>\n\n {/* Display error if gene list exceeds limit */}\n {errorMessage && (\n <Alert variant=\"danger\">\n {errorMessage}\n </Alert>\n )}\n\n {/* Button to submit for validation */}\n <Button variant=\"primary\" onClick={handleSubmit}>\n Validate Gene List\n </Button>\n </Form>\n\n {/* Display validation in progress */}\n {loading && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation in Progress...</h3>\n <Spinner animation=\"border\" role=\"status\">\n <span className=\"sr-only\">Validating...</span>\n </Spinner>\n </div>\n )}\n\n\n {/* Display validation summary */}\n {!loading && listHash && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation Summary</h3>\n <Alert variant=\"info\">\n <p>hash: <code>{listHash}</code></p>\n <p>Items Validated: {validatedList.length}</p>\n <p>Items Not Validated: {validationError.length}</p>\n </Alert>\n <ul>\n {validationError.map((errorItem, index) => (\n <li key={index}>{errorItem}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Input for saving validated gene list */}\n {!loading && validatedList.length > 0 && (\n <div className=\"save-list mt-4\">\n <Form.Group controlId=\"listName\">\n <Form.Label>Save Validated Gene List</Form.Label>\n <Form.Control\n type=\"text\"\n value={listName}\n onChange={(e) => setListName(e.target.value)}\n placeholder=\"Enter list name\"\n />\n <Form.Check\n type='switch'\n id='listIsPublic'\n label='Public'\n onChange={(e) => setListIsPublic(!listIsPublic)}\n />\n </Form.Group>\n {user ?\n <Button variant=\"success\" onClick={handleSaveList}>\n Save Gene List\n </Button>\n : <Button variant=\"dark\" disabled>Login Required</Button> }\n </div>\n )}\n </div>\n );\n};\n\nconst UserGeneListsComponent = props => {\n return (\n <Container fluid>\n <Row>\n <Col><GeneListComponent api={props.configuration.grameneData} site={props.configuration.id}/></Col>\n <Col><GeneListDisplayComponent api={props.configuration.grameneData} site={props.configuration.id}/></Col>\n </Row>\n </Container>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n UserGeneListsComponent\n);\n","import React, { useState } from 'react'\nimport { Button, Modal } from 'react-bootstrap'\nimport { connect } from \"redux-bundler-react\";\nimport { firebaseApp } from \"./utils\";\nimport { getAuth, onAuthStateChanged, signOut, GoogleAuthProvider, signInWithPopup } from \"firebase/auth\";\n\nconst auth = getAuth(firebaseApp);\n\nconst provider = new GoogleAuthProvider();\n\nconst Auth = props => {\n const [user, setUser] = useState({});\n onAuthStateChanged(auth, (user) => setUser(user));\n\n function handleLogin() {\n signInWithPopup(auth, provider)\n .then((result) => {\n setUser(result.user)\n }).catch((err) => {\n console.log(err)\n });\n }\n function handleLogout() {\n signOut(auth)\n .then(() => {\n setUser(null);\n }).catch((err) => {\n console.log(err)\n });\n }\n return (\n <div className={props.configuration.id === 'sorghum' ? 'sorghumbase-auth-container': 'gramene-auth-container'}>\n <b>Account</b>\n <div>\n {user\n ? <Button size=\"sm\" variant=\"success\" onClick={handleLogout}>{user.displayName}</Button>\n : <Button size=\"sm\" variant=\"success\" onClick={handleLogin}>Login</Button>\n }\n </div>\n </div>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n Auth\n)\n"],"names":[],"version":3,"file":"index.js.map"}