gramene-search 1.4.1 → 1.4.3

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.
Files changed (41) hide show
  1. package/.parcel-cache/4987902b3f9787cc-BundleGraph-0 +0 -0
  2. package/.parcel-cache/70f1f7555dda250d-AssetGraph-0 +0 -0
  3. package/.parcel-cache/7b8e4611c0f03524-AssetGraph-0 +0 -0
  4. package/.parcel-cache/data.mdb +0 -0
  5. package/.parcel-cache/lock.mdb +0 -0
  6. package/.parcel-cache/requestGraph-369948a06d23ec44-0 +0 -0
  7. package/.parcel-cache/requestGraph-nodes-0-369948a06d23ec44-0 +0 -0
  8. package/.parcel-cache/snapshot-369948a06d23ec44.txt +2 -2
  9. package/dist/BAR-logo.15c36467.png +0 -0
  10. package/dist/{Study.b2ce28e8.js → Study.5ff9518c.js} +9 -4
  11. package/dist/Study.5ff9518c.js.map +1 -0
  12. package/dist/android-chrome-192x192.4d149c27.png +0 -0
  13. package/dist/apple-touch-icon-114x114.27e956ae.png +0 -0
  14. package/dist/apple-touch-icon-120x120.b209ed9f.png +0 -0
  15. package/dist/apple-touch-icon-144x144.9f8e2136.png +0 -0
  16. package/dist/apple-touch-icon-152x152.b6107a9b.png +0 -0
  17. package/dist/apple-touch-icon-180x180.58fbcc65.png +0 -0
  18. package/dist/apple-touch-icon-57x57.f670c755.png +0 -0
  19. package/dist/apple-touch-icon-60x60.3fbc15ae.png +0 -0
  20. package/dist/apple-touch-icon-72x72.a0fd991d.png +0 -0
  21. package/dist/apple-touch-icon-76x76.437b43b5.png +0 -0
  22. package/dist/expression-atlas-logo.2d957e5a.png +0 -0
  23. package/dist/favicon-16x16.4dd6b101.png +0 -0
  24. package/dist/favicon-32x32.a0d53b79.png +0 -0
  25. package/dist/favicon-96x96.6cd9b68e.png +0 -0
  26. package/dist/genetree.d75946eb.png +0 -0
  27. package/dist/index.js +121 -45
  28. package/dist/index.js.map +1 -1
  29. package/dist/results.a8da7555.png +0 -0
  30. package/dist/sorghum.html +39 -0
  31. package/dist/suggestions.099b7c0e.png +0 -0
  32. package/package.json +1 -1
  33. package/src/bundles/docs.js +15 -1
  34. package/src/bundles/views.js +3 -2
  35. package/src/components/results/Expression.js +18 -10
  36. package/src/components/results/Study.js +10 -3
  37. package/src/components/results/details/Expression.js +66 -8
  38. package/src/components/results/details/VEP.js +1 -1
  39. package/src/demo.js +1 -0
  40. package/src/static/atlasWidget.html +12 -4
  41. package/dist/Study.b2ce28e8.js.map +0 -1
Binary file
Binary file
@@ -1,2 +1,2 @@
1
- 55356909
2
- 1711747095464480000
1
+ 102761389
2
+ 1713371873174671000
Binary file
@@ -36,12 +36,17 @@ const $5833a2eeefc77457$var$metaRenderer = (params)=>{
36
36
  });
37
37
  return params.value.label;
38
38
  };
39
+ const $5833a2eeefc77457$var$sampleRenderer = (params)=>{
40
+ const sampleMeta = params.value;
41
+ return JSON.stringify(sampleMeta, null, 2);
42
+ };
39
43
  const $5833a2eeefc77457$var$Study = (props)=>{
40
44
  let samples = props.expressionSamples[props.id];
41
45
  let sampleMetadata = [];
42
46
  let metadataFields = [
43
47
  {
44
- field: "sampleId"
48
+ field: "sampleId",
49
+ cellRenderer: $5833a2eeefc77457$var$sampleRenderer
45
50
  }
46
51
  ];
47
52
  let isFactor = {};
@@ -72,7 +77,7 @@ const $5833a2eeefc77457$var$Study = (props)=>{
72
77
  metadataFields.push(characteristics);
73
78
  }
74
79
  let s_info = {
75
- sampleId: sample.group
80
+ sampleId: sample
76
81
  };
77
82
  sample.factor.forEach((factor)=>{
78
83
  s_info[factor.type] = {
@@ -124,9 +129,9 @@ const $5833a2eeefc77457$var$Study = (props)=>{
124
129
  ]
125
130
  });
126
131
  };
127
- var $5833a2eeefc77457$export$2e2bcd8739ae039 = (0, $eTR7Q$reduxbundlerreact.connect)("selectExpressionSamples", $5833a2eeefc77457$var$Study);
132
+ var $5833a2eeefc77457$export$2e2bcd8739ae039 = (0, $eTR7Q$reduxbundlerreact.connect)("selectExpressionSamples", "doToggleExpressionSample", $5833a2eeefc77457$var$Study);
128
133
 
129
134
  });
130
135
 
131
136
 
132
- //# sourceMappingURL=Study.b2ce28e8.js.map
137
+ //# sourceMappingURL=Study.5ff9518c.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/components/results/Study.js"],"sourcesContent":["import React, { useState, useMemo } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\n\nconst metaRenderer = params => {\n if (params.value.ontology) {\n return <a href={`http://purl.obolibrary.org/obo/${params.value.id.replace(\":\",\"_\")}`} target='_blank'>{params.value.label}</a>\n }\n return params.value.label\n}\nconst sampleRenderer = params => {\n const sampleMeta = params.value;\n return JSON.stringify(sampleMeta,null,2);\n}\nconst Study = props => {\n let samples = props.expressionSamples[props.id];\n let sampleMetadata = [];\n let metadataFields = [{ field: \"sampleId\", cellRenderer: sampleRenderer }];\n let isFactor={};\n samples.forEach((sample, idx) => {\n if (idx === 0) {\n let factors = {\n headerName: 'Experimental Variables',\n children: []\n }\n sample.factor.forEach(factor => {\n factors.children.push({field: factor.type, cellRenderer: metaRenderer})\n isFactor[factor.type] = true;\n });\n metadataFields.push(factors);\n let characteristics = {\n headerName: 'Sample Characteristics',\n children: []\n }\n sample.characteristic.forEach(ch => {\n if (!isFactor[ch.type]) {\n characteristics.children.push({field: ch.type, cellRenderer: metaRenderer})\n }\n });\n metadataFields.push(characteristics)\n }\n let s_info = {sampleId: sample}\n sample.factor.forEach(factor => {\n s_info[factor.type] = {label: factor.label};\n if (factor.ontology) {\n s_info[factor.type]['ontology'] = factor.ontology\n s_info[factor.type]['id'] = factor.id;\n }\n })\n sample.characteristic.forEach(ch => {\n s_info[ch.type] = {label: ch.label};\n if (ch.ontology) {\n s_info[ch.type]['ontology'] = ch.ontology\n s_info[ch.type]['id'] = ch.id;\n }\n })\n sampleMetadata.push(s_info)\n })\n const [rowData, setRowData] = useState(sampleMetadata);\n const [colDefs, setColDefs] = useState(metadataFields);\n const defaultColDef = useMemo(() => {\n return {\n filter: true\n }\n }, []);\n return (\n <div>\n <div className=\"ag-theme-quartz\" style={{height: `${44 * (samples.length + 2)}px`}}>\n <AgGridReact rowData={rowData} columnDefs={colDefs} defaultColDef={defaultColDef}/>\n </div>\n <a href={`https://www.ebi.ac.uk/gxa/experiments/${props.id}`}>EBI Atlas Experiment: {props.id}</a>\n </div>\n );\n};\nexport default connect(\n 'selectExpressionSamples',\n 'doToggleExpressionSample',\n Study);\n"],"names":[],"version":3,"file":"Study.5ff9518c.js.map"}
Binary file
Binary file
Binary file
Binary file
package/dist/index.js CHANGED
@@ -72,7 +72,7 @@ if (parcelRequire == null) {
72
72
 
73
73
  var parcelRegister = parcelRequire.register;
74
74
  parcelRegister("7u0Mi", function(module, exports) {
75
- module.exports = Promise.resolve(require("./Study.b2ce28e8.js")).then(()=>parcelRequire("7zuJ6"));
75
+ module.exports = Promise.resolve(require("./Study.5ff9518c.js")).then(()=>parcelRequire("7zuJ6"));
76
76
 
77
77
  });
78
78
 
@@ -1282,7 +1282,8 @@ const $24971af0a229e0e3$var$grameneViews = {
1282
1282
  id: "expression",
1283
1283
  name: "Gene expression",
1284
1284
  show: "off",
1285
- shouldScroll: false
1285
+ shouldScroll: false,
1286
+ desiredSamples: {}
1286
1287
  },
1287
1288
  {
1288
1289
  id: "attribs",
@@ -1360,6 +1361,7 @@ const $671312b287158a8a$var$grameneDocs = {
1360
1361
  rnaSequences: {},
1361
1362
  pepSequences: {},
1362
1363
  studies: {},
1364
+ desiredSamples: {},
1363
1365
  consequences: {}
1364
1366
  };
1365
1367
  return (state = initialState, { type: type, payload: payload })=>{
@@ -1465,10 +1467,23 @@ const $671312b287158a8a$var$grameneDocs = {
1465
1467
  newState.expression = Object.assign({}, state.expression);
1466
1468
  newState.expression[payload.id] = payload.paralogs;
1467
1469
  return newState;
1470
+ case "EXPRESSION_SAMPLE_TOGGLED":
1471
+ newState = Object.assign({}, state);
1472
+ newState.desiredSamples = Object.assign({}, state.desiredSamples);
1473
+ if (newState.desiredSamples.hasOwnProperty(payload)) delete newState.desiredSamples[payload];
1474
+ else newState.desiredSamples[payload] = {
1475
+ status: "need"
1476
+ };
1468
1477
  }
1469
1478
  return state;
1470
1479
  };
1471
1480
  },
1481
+ doToggleExpressionSample: (id)=>({ dispatch: dispatch })=>{
1482
+ dispatch({
1483
+ type: "EXPRESSION_SAMPLE_TOGGLED",
1484
+ payload: id
1485
+ });
1486
+ },
1472
1487
  doRequestVEP: (id)=>({ dispatch: dispatch, store: store })=>{
1473
1488
  const consequences = store.selectGrameneConsequences();
1474
1489
  if (!consequences.hasOwnProperty(id)) {
@@ -1711,7 +1726,8 @@ const $671312b287158a8a$var$grameneDocs = {
1711
1726
  selectGeneSequences: (state)=>state.grameneDocs.sequences,
1712
1727
  selectRnaSequences: (state)=>state.grameneDocs.rnaSequences,
1713
1728
  selectPepSequences: (state)=>state.grameneDocs.pepSequences,
1714
- selectAtlasStudies: (state)=>state.grameneDocs.studies
1729
+ selectAtlasStudies: (state)=>state.grameneDocs.studies,
1730
+ selectDesiredSamples: (state)=>state.grameneDocs.desiredSamples
1715
1731
  };
1716
1732
  var $671312b287158a8a$export$2e2bcd8739ae039 = $671312b287158a8a$var$grameneDocs;
1717
1733
 
@@ -2165,6 +2181,56 @@ var $541b8b0d8c5501d2$export$2e2bcd8739ae039 = (0, $gXNCa$reduxbundlerreact.conn
2165
2181
 
2166
2182
 
2167
2183
 
2184
+ function $9e29a4f60318db7a$var$DynamicIframe(props) {
2185
+ // Create a ref for the iframe element
2186
+ const iframeRef = (0, $gXNCa$react.useRef)(null);
2187
+ // Function to resize iframe height
2188
+ const resizeIframe = ()=>{
2189
+ if (iframeRef.current) {
2190
+ const iframe = iframeRef.current;
2191
+ const innerDoc = iframe.contentDocument || iframe.contentWindow.document;
2192
+ iframe.style.height = 44 + innerDoc.body.scrollHeight + "px";
2193
+ }
2194
+ };
2195
+ // Resize iframe when content loads
2196
+ (0, $gXNCa$react.useEffect)(()=>{
2197
+ resizeIframe();
2198
+ }, []); // Empty dependency array ensures it only runs once after initial render
2199
+ // Optional: Resize iframe when window is resized
2200
+ (0, $gXNCa$react.useEffect)(()=>{
2201
+ window.addEventListener("resize", resizeIframe);
2202
+ return ()=>{
2203
+ window.removeEventListener("resize", resizeIframe);
2204
+ };
2205
+ }, []); // Empty dependency array ensures it only runs once after initial render
2206
+ // Resize iframe when content changes
2207
+ (0, $gXNCa$react.useEffect)(()=>{
2208
+ const iframe = iframeRef.current;
2209
+ if (!iframe) return;
2210
+ const observer = new MutationObserver(resizeIframe);
2211
+ const checkElement = ()=>{
2212
+ const innerDoc = iframe.contentDocument || iframe.contentWindow.document;
2213
+ const targetElement = innerDoc.querySelector("#heatmapContainer");
2214
+ if (targetElement) observer.observe(targetElement, {
2215
+ attributes: true,
2216
+ childList: true,
2217
+ subtree: true
2218
+ });
2219
+ else setTimeout(checkElement, 200); // Check again after 100 milliseconds
2220
+ };
2221
+ checkElement();
2222
+ return ()=>observer.disconnect();
2223
+ }, []);
2224
+ return /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)("iframe", {
2225
+ ref: iframeRef,
2226
+ src: props.url,
2227
+ title: "Dynamic Iframe",
2228
+ style: {
2229
+ width: "100%",
2230
+ border: "none"
2231
+ }
2232
+ });
2233
+ }
2168
2234
  const $9e29a4f60318db7a$var$Detail = (props)=>{
2169
2235
  const gene = props.geneDocs[props.searchResult.id];
2170
2236
  let paralogs_url;
@@ -2175,34 +2241,28 @@ const $9e29a4f60318db7a$var$Detail = (props)=>{
2175
2241
  } else props.doRequestParalogExpression(gene._id);
2176
2242
  return /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)((0, $gXNCa$reactbootstrap.Tabs), {
2177
2243
  children: [
2178
- (0, $gXNCa$grameneefpbrowser.haveBAR)(gene) && /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Tab), {
2179
- tabClassName: "eFP",
2180
- eventKey: "eFP",
2181
- title: "eFP Browser",
2182
- children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, ($parcel$interopDefault($gXNCa$grameneefpbrowser))), {
2183
- gene: gene
2244
+ paralogs_url && /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Tab), {
2245
+ tabClassName: "gxa",
2246
+ eventKey: "paralogs",
2247
+ title: "Reference Study (all paralogs)",
2248
+ children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)($9e29a4f60318db7a$var$DynamicIframe, {
2249
+ url: paralogs_url
2184
2250
  })
2185
2251
  }),
2186
2252
  /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Tab), {
2187
2253
  tabClassName: "gxa",
2188
2254
  eventKey: "gene",
2189
2255
  title: "All Studies",
2190
- children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)("iframe", {
2191
- src: gene_url,
2192
- frameBorder: "0",
2193
- width: "100%",
2194
- height: "500px"
2256
+ children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)($9e29a4f60318db7a$var$DynamicIframe, {
2257
+ url: gene_url
2195
2258
  })
2196
2259
  }),
2197
- paralogs_url && /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Tab), {
2198
- tabClassName: "gxa",
2199
- eventKey: "paralogs",
2200
- title: "Reference Study (all paralogs)",
2201
- children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)("iframe", {
2202
- src: paralogs_url,
2203
- frameBorder: "0",
2204
- width: "100%",
2205
- height: "500px"
2260
+ (0, $gXNCa$grameneefpbrowser.haveBAR)(gene) && /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Tab), {
2261
+ tabClassName: "eFP",
2262
+ eventKey: "eFP",
2263
+ title: "eFP Browser",
2264
+ children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, ($parcel$interopDefault($gXNCa$grameneefpbrowser))), {
2265
+ gene: gene
2206
2266
  })
2207
2267
  })
2208
2268
  ]
@@ -3385,7 +3445,7 @@ const $283508ffcf8a47c4$var$Detail = (props)=>{
3385
3445
  href: `${props.configuration.ensemblURL}/${gene.system_name}/Gene/Variation_Gene/Image?db=core;g=${props.searchResult.id}`,
3386
3446
  children: "Variant image"
3387
3447
  }),
3388
- " page on the Ensembl site."
3448
+ " page in the Ensembl genome browser."
3389
3449
  ]
3390
3450
  }),
3391
3451
  /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)("div", {
@@ -5099,34 +5159,50 @@ const $261baeb81c4d4d8a$var$Expression = (props)=>{
5099
5159
  taxon_id_facet.filter((tid, idx)=>idx % 2 === 0).forEach((tid)=>searchTaxa[tid] = true);
5100
5160
  }
5101
5161
  const availableTaxa = Object.keys(props.expressionStudies).filter((tid)=>searchTaxa[tid] || searchTaxa[tid + "001"]).sort((a, b)=>props.grameneMaps[a + "001"].left_index - props.grameneMaps[b + "001"].left_index);
5102
- return availableTaxa && props.grameneTaxonomy && /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Accordion), {
5103
- alwaysOpen: true,
5104
- defaultActiveKey: availableTaxa.length === 1 ? "tax_0" : undefined,
5105
- children: availableTaxa.map((tid, idx)=>{
5106
- const n = props.expressionStudies[tid].length;
5107
- return /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)((0, $gXNCa$reactbootstrap.Accordion).Item, {
5108
- eventKey: "tax_" + idx,
5162
+ return availableTaxa && props.grameneTaxonomy && /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)("div", {
5163
+ children: [
5164
+ /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)("div", {
5109
5165
  children: [
5110
- /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)((0, $gXNCa$reactbootstrap.Accordion).Header, {
5166
+ "This is where you can launch a component for the selected samples. props.desiredSamples lists them. This component can request the data from the API organize samples by factor metadata? One big table with all the studies?",
5167
+ /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)((0, $gXNCa$reactbootstrap.Button), {
5111
5168
  children: [
5112
- props.grameneTaxonomy[tid].name,
5113
- " - ",
5114
- n,
5115
- " ",
5116
- n === 1 ? "study" : "studies"
5169
+ "Show Samples (",
5170
+ Object.keys(props.desiredSamples).length,
5171
+ " selected)"
5117
5172
  ]
5118
- }),
5119
- /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Accordion).Body, {
5120
- children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)($261baeb81c4d4d8a$var$StudyList, {
5121
- studies: props.expressionStudies[tid]
5122
- })
5123
5173
  })
5124
5174
  ]
5125
- }, idx);
5126
- })
5175
+ }),
5176
+ /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Accordion), {
5177
+ alwaysOpen: true,
5178
+ defaultActiveKey: availableTaxa.length === 1 ? "tax_0" : undefined,
5179
+ children: availableTaxa.map((tid, idx)=>{
5180
+ const n = props.expressionStudies[tid].length;
5181
+ return /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)((0, $gXNCa$reactbootstrap.Accordion).Item, {
5182
+ eventKey: "tax_" + idx,
5183
+ children: [
5184
+ /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsxs)((0, $gXNCa$reactbootstrap.Accordion).Header, {
5185
+ children: [
5186
+ props.grameneTaxonomy[tid].name,
5187
+ " - ",
5188
+ n,
5189
+ " ",
5190
+ n === 1 ? "study" : "studies"
5191
+ ]
5192
+ }),
5193
+ /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)((0, $gXNCa$reactbootstrap.Accordion).Body, {
5194
+ children: /*#__PURE__*/ (0, $gXNCa$reactjsxruntime.jsx)($261baeb81c4d4d8a$var$StudyList, {
5195
+ studies: props.expressionStudies[tid]
5196
+ })
5197
+ })
5198
+ ]
5199
+ }, idx);
5200
+ })
5201
+ })
5202
+ ]
5127
5203
  });
5128
5204
  };
5129
- var $261baeb81c4d4d8a$export$2e2bcd8739ae039 = (0, $gXNCa$reduxbundlerreact.connect)("selectConfiguration", "selectGrameneSearch", "selectGrameneTaxonomy", "selectGrameneMaps", "selectExpressionStudies", $261baeb81c4d4d8a$var$Expression);
5205
+ var $261baeb81c4d4d8a$export$2e2bcd8739ae039 = (0, $gXNCa$reduxbundlerreact.connect)("selectConfiguration", "selectGrameneSearch", "selectGrameneTaxonomy", "selectGrameneMaps", "selectExpressionStudies", "selectDesiredSamples", $261baeb81c4d4d8a$var$Expression);
5130
5206
 
5131
5207
 
5132
5208