@haniffalab/cherita-react 1.3.0-dev.2025-06-06.f1eddad0 → 1.3.1-dev.2025-10-29.6de4119f

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 (138) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/controls/Controls.js +38 -30
  3. package/dist/cjs/components/dotplot/Dotplot.js +67 -69
  4. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  5. package/dist/cjs/components/full-page/FullPage.js +99 -105
  6. package/dist/cjs/components/full-page/PlotAlert.js +45 -0
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +89 -44
  8. package/dist/cjs/components/heatmap/Heatmap.js +65 -65
  9. package/dist/cjs/components/heatmap/HeatmapControls.js +6 -3
  10. package/dist/cjs/components/icons/DotPlotIcon.js +64 -0
  11. package/dist/cjs/components/icons/HeatmapIcon.js +45 -0
  12. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +57 -0
  13. package/dist/cjs/components/icons/MatrixPlotIcon.js +59 -0
  14. package/dist/cjs/components/icons/ScatterplotIcon.1.js +164 -0
  15. package/dist/cjs/components/icons/ScatterplotIcon.js +144 -0
  16. package/dist/cjs/components/icons/ViolinPlotIcon.js +42 -0
  17. package/dist/cjs/components/matrixplot/Matrixplot.js +65 -66
  18. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  19. package/dist/cjs/components/obs-list/ObsItem.js +267 -205
  20. package/dist/cjs/components/obs-list/ObsList.js +161 -129
  21. package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
  22. package/dist/cjs/components/obsm-list/ObsmList.js +67 -28
  23. package/dist/cjs/components/offcanvas/index.js +62 -27
  24. package/dist/cjs/components/pseudospatial/Pseudospatial.js +132 -76
  25. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +122 -74
  26. package/dist/cjs/components/scatterplot/Scatterplot.js +128 -100
  27. package/dist/cjs/components/scatterplot/ScatterplotControls.js +45 -31
  28. package/dist/cjs/components/scatterplot/SpatialControls.js +140 -113
  29. package/dist/cjs/components/scatterplot/Toolbox.js +41 -30
  30. package/dist/cjs/components/search-bar/SearchBar.js +176 -120
  31. package/dist/cjs/components/search-bar/SearchInfo.js +76 -50
  32. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  33. package/dist/cjs/components/toolbar/Toolbar.js +46 -37
  34. package/dist/cjs/components/var-list/VarItem.js +131 -103
  35. package/dist/cjs/components/var-list/VarList.js +85 -71
  36. package/dist/cjs/components/var-list/VarListToolbar.js +59 -54
  37. package/dist/cjs/components/var-list/VarSet.js +126 -108
  38. package/dist/cjs/components/violin/Violin.js +109 -97
  39. package/dist/cjs/components/violin/ViolinControls.js +8 -5
  40. package/dist/cjs/constants/colorscales.js +19 -19
  41. package/dist/cjs/constants/constants.js +51 -48
  42. package/dist/cjs/context/DatasetContext.js +26 -17
  43. package/dist/cjs/context/FilterContext.js +11 -9
  44. package/dist/cjs/context/SettingsContext.js +271 -88
  45. package/dist/cjs/context/ZarrDataContext.js +6 -5
  46. package/dist/cjs/helpers/color-helper.js +2 -2
  47. package/dist/cjs/helpers/zarr-helper.js +3 -3
  48. package/dist/cjs/utils/Filter.js +16 -11
  49. package/dist/cjs/utils/Histogram.js +35 -33
  50. package/dist/cjs/utils/ImageViewer.js +11 -8
  51. package/dist/cjs/utils/Legend.js +37 -30
  52. package/dist/cjs/utils/LoadingIndicators.js +15 -13
  53. package/dist/cjs/utils/Resolver.js +213 -0
  54. package/dist/cjs/utils/Skeleton.js +10 -10
  55. package/dist/cjs/utils/StyledTooltip.js +44 -0
  56. package/dist/cjs/utils/VirtualizedList.js +36 -29
  57. package/dist/cjs/utils/errors.js +15 -15
  58. package/dist/cjs/utils/requests.js +21 -9
  59. package/dist/cjs/utils/search.js +4 -4
  60. package/dist/cjs/utils/string.js +6 -6
  61. package/dist/cjs/utils/zarrData.js +20 -21
  62. package/dist/css/cherita.css +135 -65
  63. package/dist/css/cherita.css.map +1 -1
  64. package/dist/esm/components/controls/Controls.js +43 -35
  65. package/dist/esm/components/dotplot/Dotplot.js +77 -78
  66. package/dist/esm/components/dotplot/DotplotControls.js +106 -85
  67. package/dist/esm/components/full-page/FullPage.js +119 -124
  68. package/dist/esm/components/full-page/PlotAlert.js +39 -0
  69. package/dist/esm/components/full-page/PlotTypeSelector.js +90 -45
  70. package/dist/esm/components/heatmap/Heatmap.js +75 -74
  71. package/dist/esm/components/heatmap/HeatmapControls.js +8 -4
  72. package/dist/esm/components/icons/DotPlotIcon.js +58 -0
  73. package/dist/esm/components/icons/HeatmapIcon.js +39 -0
  74. package/dist/esm/components/icons/MatrixPlotIcon.1.js +51 -0
  75. package/dist/esm/components/icons/MatrixPlotIcon.js +53 -0
  76. package/dist/esm/components/icons/ScatterplotIcon.1.js +158 -0
  77. package/dist/esm/components/icons/ScatterplotIcon.js +138 -0
  78. package/dist/esm/components/icons/ViolinPlotIcon.js +36 -0
  79. package/dist/esm/components/matrixplot/Matrixplot.js +75 -75
  80. package/dist/esm/components/matrixplot/MatrixplotControls.js +10 -6
  81. package/dist/esm/components/obs-list/ObsItem.js +282 -217
  82. package/dist/esm/components/obs-list/ObsList.js +176 -143
  83. package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
  84. package/dist/esm/components/obsm-list/ObsmList.js +71 -32
  85. package/dist/esm/components/offcanvas/index.js +68 -33
  86. package/dist/esm/components/pseudospatial/Pseudospatial.js +145 -88
  87. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +127 -78
  88. package/dist/esm/components/scatterplot/Scatterplot.js +149 -120
  89. package/dist/esm/components/scatterplot/ScatterplotControls.js +50 -35
  90. package/dist/esm/components/scatterplot/SpatialControls.js +153 -125
  91. package/dist/esm/components/scatterplot/Toolbox.js +44 -32
  92. package/dist/esm/components/search-bar/SearchBar.js +187 -130
  93. package/dist/esm/components/search-bar/SearchInfo.js +86 -59
  94. package/dist/esm/components/search-bar/SearchResults.js +100 -77
  95. package/dist/esm/components/toolbar/Toolbar.js +49 -39
  96. package/dist/esm/components/var-list/VarItem.js +142 -113
  97. package/dist/esm/components/var-list/VarList.js +99 -84
  98. package/dist/esm/components/var-list/VarListToolbar.js +64 -58
  99. package/dist/esm/components/var-list/VarSet.js +134 -115
  100. package/dist/esm/components/violin/Violin.js +121 -108
  101. package/dist/esm/components/violin/ViolinControls.js +10 -6
  102. package/dist/esm/constants/colorscales.js +19 -19
  103. package/dist/esm/constants/constants.js +50 -47
  104. package/dist/esm/context/DatasetContext.js +33 -23
  105. package/dist/esm/context/FilterContext.js +11 -8
  106. package/dist/esm/context/SettingsContext.js +273 -89
  107. package/dist/esm/context/ZarrDataContext.js +8 -6
  108. package/dist/esm/helpers/color-helper.js +5 -5
  109. package/dist/esm/helpers/map-helper.js +2 -2
  110. package/dist/esm/helpers/zarr-helper.js +6 -6
  111. package/dist/esm/index.js +22 -22
  112. package/dist/esm/utils/Filter.js +22 -17
  113. package/dist/esm/utils/Histogram.js +39 -37
  114. package/dist/esm/utils/ImageViewer.js +12 -8
  115. package/dist/esm/utils/Legend.js +44 -36
  116. package/dist/esm/utils/LoadingIndicators.js +16 -13
  117. package/dist/esm/utils/Resolver.js +201 -0
  118. package/dist/esm/utils/Skeleton.js +11 -10
  119. package/dist/esm/utils/StyledTooltip.js +38 -0
  120. package/dist/esm/utils/VirtualizedList.js +37 -29
  121. package/dist/esm/utils/errors.js +15 -15
  122. package/dist/esm/utils/requests.js +24 -12
  123. package/dist/esm/utils/search.js +7 -7
  124. package/dist/esm/utils/string.js +7 -7
  125. package/dist/esm/utils/zarrData.js +27 -28
  126. package/package.json +20 -8
  127. package/scss/cherita-bootstrap.scss +2 -2
  128. package/scss/cherita.scss +65 -16
  129. package/scss/components/accordions.scss +15 -2
  130. package/scss/components/layouts.scss +68 -50
  131. package/scss/components/lists.scss +16 -5
  132. package/scss/components/plotly.scss +38 -26
  133. package/scss/components/plots.scss +14 -1
  134. package/dist/assets/images/plots/dotplot.svg +0 -152
  135. package/dist/assets/images/plots/heatmap.svg +0 -193
  136. package/dist/assets/images/plots/matrixplot.svg +0 -275
  137. package/dist/assets/images/plots/scatterplot.svg +0 -198
  138. package/dist/assets/images/plots/violin.svg +0 -50
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.SelectionItem = SelectionItem;
7
7
  exports.VarDiseaseInfo = VarDiseaseInfo;
8
8
  exports.VarItem = VarItem;
9
- var _react = _interopRequireWildcard(require("react"));
9
+ var _react = require("react");
10
10
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
11
11
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
12
12
  var _iconsMaterial = require("@mui/icons-material");
@@ -18,9 +18,8 @@ var _FilterContext = require("../../context/FilterContext");
18
18
  var _SettingsContext = require("../../context/SettingsContext");
19
19
  var _Histogram = require("../../utils/Histogram");
20
20
  var _requests = require("../../utils/requests");
21
+ var _jsxRuntime = require("react/jsx-runtime");
21
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
23
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
24
23
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
24
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26
25
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -30,7 +29,7 @@ function VarHistogram(_ref) {
30
29
  let {
31
30
  item
32
31
  } = _ref;
33
- const ENDPOINT = "var/histograms";
32
+ const ENDPOINT = 'var/histograms';
34
33
  const dataset = (0, _DatasetContext.useDataset)();
35
34
  const settings = (0, _SettingsContext.useSettings)();
36
35
  const {
@@ -58,42 +57,61 @@ function VarHistogram(_ref) {
58
57
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, {
59
58
  refetchOnMount: false
60
59
  });
61
- return !serverError && /*#__PURE__*/_react.default.createElement(_Histogram.Histogram, {
60
+ return !serverError && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Histogram.Histogram, {
62
61
  data: fetchedData,
63
62
  isPending: isPending,
64
63
  altColor: isSliced
65
64
  });
66
65
  }
67
66
  function VarDiseaseInfoItem(item) {
68
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
69
- key: item.disease_id,
70
- className: "feature-disease-info"
71
- }, /*#__PURE__*/_react.default.createElement("button", {
72
- type: "button",
73
- className: "btn btn-link disease-link"
74
- }, item.disease_name), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Table, {
75
- striped: true,
76
- size: "sm",
77
- responsive: true
78
- }, /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Confidence"), /*#__PURE__*/_react.default.createElement("td", null, item.confidence || "unknown")), /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Organ", item.organs.length > 1 ? "s" : ""), /*#__PURE__*/_react.default.createElement("td", null, item.organs.map(o => o.name).join(", "))), !_lodash.default.isEmpty(item.metadata) && _lodash.default.map(item.metadata, (value, key) => {
79
- if (value !== null && value !== undefined) {
80
- return /*#__PURE__*/_react.default.createElement("tr", {
81
- key: key
82
- }, /*#__PURE__*/_react.default.createElement("td", null, _lodash.default.upperFirst(key)), /*#__PURE__*/_react.default.createElement("td", null, value));
83
- }
84
- }))));
67
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.ListGroup.Item, {
68
+ className: "feature-disease-info",
69
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
70
+ type: "button",
71
+ className: "btn btn-link disease-link",
72
+ children: item.disease_name
73
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Table, {
74
+ striped: true,
75
+ size: "sm",
76
+ responsive: true,
77
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("tbody", {
78
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
79
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
80
+ children: "Confidence"
81
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
82
+ children: item.confidence || 'unknown'
83
+ })]
84
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
85
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("td", {
86
+ children: ["Organ", item.organs.length > 1 ? 's' : '']
87
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
88
+ children: item.organs.map(o => o.name).join(', ')
89
+ })]
90
+ }), !_lodash.default.isEmpty(item.metadata) && _lodash.default.map(item.metadata, (value, key) => {
91
+ if (value !== null && value !== undefined) {
92
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
93
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
94
+ children: _lodash.default.upperFirst(key)
95
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
96
+ children: value
97
+ })]
98
+ }, key);
99
+ }
100
+ })]
101
+ })
102
+ })]
103
+ }, item.disease_id);
85
104
  }
86
105
  function VarDiseaseInfo(_ref2) {
87
106
  let {
88
107
  data
89
108
  } = _ref2;
90
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
91
- className: "feature-disease-info-list"
92
- }, data.map(item => {
93
- return /*#__PURE__*/_react.default.createElement(VarDiseaseInfoItem, _extends({
94
- key: item.disease_id
95
- }, item));
96
- }));
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
110
+ className: "feature-disease-info-list",
111
+ children: data.map(item => {
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(VarDiseaseInfoItem, _objectSpread({}, item), item.disease_id);
113
+ })
114
+ });
97
115
  }
98
116
  function SelectionItem(_ref3) {
99
117
  let {
@@ -105,7 +123,7 @@ function SelectionItem(_ref3) {
105
123
  showRemove = true,
106
124
  isMultiple = false
107
125
  } = _ref3;
108
- const ENDPOINT = "disease/gene";
126
+ const ENDPOINT = 'disease/gene';
109
127
  const [openInfo, setOpenInfo] = (0, _react.useState)(false);
110
128
  const dataset = (0, _DatasetContext.useDataset)();
111
129
  const params = {
@@ -122,53 +140,83 @@ function SelectionItem(_ref3) {
122
140
  enabled: !!dataset.diseaseDatasets.length
123
141
  });
124
142
  const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
125
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
126
- className: "d-flex justify-content-between ".concat(hasDiseaseInfo ? "cursor-pointer" : ""),
127
- onClick: () => {
128
- setOpenInfo(o => !o);
129
- }
130
- }, /*#__PURE__*/_react.default.createElement("div", {
131
- className: "d-flex justify-content-between align-items-center w-100"
132
- }, /*#__PURE__*/_react.default.createElement("div", null, item.name), /*#__PURE__*/_react.default.createElement("div", {
133
- className: "d-flex align-items-center gap-1"
134
- }, hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_iconsMaterial.MoreVert, null), /*#__PURE__*/_react.default.createElement(VarHistogram, {
135
- item: item
136
- }), showSetColorEncoding && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
137
- type: "button",
138
- key: item.matrix_index,
139
- variant: isActive ? "primary" : isNotInData ? "outline-secondary" : "outline-primary",
140
- className: "m-0 p-0 px-1",
141
- onClick: e => {
142
- e.stopPropagation();
143
- selectVar();
144
- },
145
- disabled: isNotInData,
146
- title: isNotInData ? "Not present in data" : "Set as color encoding"
147
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
148
- icon: _freeSolidSvgIcons.faDroplet
149
- }), isMultiple && /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
150
- icon: _freeSolidSvgIcons.faPlus,
151
- size: "xs",
152
- className: "ps-xs-1"
153
- })), showRemove && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
154
- type: "button",
155
- className: "m-0 p-0 px-1",
156
- variant: "outline-secondary",
157
- title: "Remove from list",
158
- onClick: e => {
159
- e.stopPropagation();
160
- removeVar();
161
- }
162
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
163
- icon: _freeSolidSvgIcons.faTrash
164
- }))))), hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Collapse, {
165
- in: openInfo
166
- }, /*#__PURE__*/_react.default.createElement("div", {
167
- className: "mt-2 var-disease-info-collapse"
168
- }, /*#__PURE__*/_react.default.createElement(VarDiseaseInfo, {
169
- data: fetchedData
170
- }))));
143
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
144
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
145
+ className: hasDiseaseInfo ? 'cursor-pointer' : '',
146
+ onClick: () => {
147
+ setOpenInfo(o => !o);
148
+ },
149
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
150
+ className: "d-flex align-items-center",
151
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
152
+ className: "var-item-name",
153
+ title: item.name,
154
+ children: item.name
155
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
156
+ className: "ms-auto d-flex align-items-center gap-1",
157
+ children: [hasDiseaseInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.MoreVert, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(VarHistogram, {
158
+ item: item
159
+ }), showSetColorEncoding && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
160
+ type: "button",
161
+ variant: isActive ? 'primary' : isNotInData ? 'outline-secondary' : 'outline-primary',
162
+ className: "m-0 p-0 px-1",
163
+ onClick: e => {
164
+ e.stopPropagation();
165
+ selectVar();
166
+ },
167
+ disabled: isNotInData,
168
+ title: isNotInData ? 'Not present in data' : 'Set as color encoding',
169
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
170
+ icon: _freeSolidSvgIcons.faDroplet
171
+ }), isMultiple && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
172
+ icon: _freeSolidSvgIcons.faPlus,
173
+ size: "xs",
174
+ className: "ps-xs-1"
175
+ })]
176
+ }, item.matrix_index), showRemove && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
177
+ type: "button",
178
+ className: "m-0 p-0 px-1",
179
+ variant: "outline-secondary",
180
+ title: "Remove from list",
181
+ onClick: e => {
182
+ e.stopPropagation();
183
+ removeVar();
184
+ },
185
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
186
+ icon: _freeSolidSvgIcons.faTrash
187
+ })
188
+ })]
189
+ })]
190
+ })
191
+ }), hasDiseaseInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Collapse, {
192
+ in: openInfo,
193
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
194
+ className: "mt-2 var-disease-info-collapse",
195
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(VarDiseaseInfo, {
196
+ data: fetchedData
197
+ })
198
+ })
199
+ })]
200
+ });
171
201
  }
202
+ const select = (dispatch, mode, item) => {
203
+ if (mode === _constants.SELECTION_MODES.SINGLE) {
204
+ dispatch({
205
+ type: 'select.var',
206
+ var: item
207
+ });
208
+ } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
209
+ dispatch({
210
+ type: 'select.multivar',
211
+ var: item
212
+ });
213
+ }
214
+ dispatch({
215
+ type: 'set.colorEncoding',
216
+ value: _constants.COLOR_ENCODINGS.VAR
217
+ });
218
+ };
219
+ const debounceSelect = _lodash.default.debounce(select, 200);
172
220
  function VarItem(_ref4) {
173
221
  let {
174
222
  item,
@@ -177,42 +225,22 @@ function VarItem(_ref4) {
177
225
  } = _ref4;
178
226
  const settings = (0, _SettingsContext.useSettings)();
179
227
  const dispatch = (0, _SettingsContext.useSettingsDispatch)();
180
- const selectVar = () => {
181
- if (mode === _constants.SELECTION_MODES.SINGLE) {
182
- dispatch({
183
- type: "select.var",
184
- var: item
185
- });
186
- dispatch({
187
- type: "set.colorEncoding",
188
- value: _constants.COLOR_ENCODINGS.VAR
189
- });
190
- } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
191
- dispatch({
192
- type: "select.multivar",
193
- var: item
194
- });
195
- dispatch({
196
- type: "set.colorEncoding",
197
- value: _constants.COLOR_ENCODINGS.VAR
198
- });
199
- }
200
- };
228
+ const selectVar = () => debounceSelect(dispatch, mode, item);
201
229
  const removeVar = () => {
202
230
  dispatch({
203
- type: "remove.var",
231
+ type: 'remove.var',
204
232
  var: item
205
233
  });
206
234
  if (mode === _constants.SELECTION_MODES.SINGLE) {
207
235
  if (active === item.matrix_index) {
208
236
  dispatch({
209
- type: "reset.var"
237
+ type: 'reset.var'
210
238
  });
211
239
  }
212
240
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
213
241
  if (active.includes(item.matrix_index)) {
214
242
  dispatch({
215
- type: "deselect.multivar",
243
+ type: 'deselect.multivar',
216
244
  var: item
217
245
  });
218
246
  }
@@ -220,19 +248,19 @@ function VarItem(_ref4) {
220
248
  };
221
249
  const toggleVar = () => {
222
250
  dispatch({
223
- type: "toggle.multivar",
251
+ type: 'toggle.multivar',
224
252
  var: item
225
253
  });
226
254
  };
227
255
  if (item && mode === _constants.SELECTION_MODES.SINGLE) {
228
- return /*#__PURE__*/_react.default.createElement(SelectionItem, {
256
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(SelectionItem, {
229
257
  item: item,
230
258
  isActive: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === item.matrix_index,
231
259
  selectVar: selectVar,
232
260
  removeVar: removeVar
233
261
  });
234
262
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
235
- return /*#__PURE__*/_react.default.createElement(SelectionItem, {
263
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(SelectionItem, {
236
264
  item: item,
237
265
  isActive: item.matrix_index !== -1 && _lodash.default.includes(active, item.matrix_index),
238
266
  selectVar: toggleVar,
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.VarNamesList = VarNamesList;
7
7
  exports.useVarMean = exports.sortMeans = void 0;
8
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = require("react");
9
9
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
10
10
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
11
11
  var _lodash = _interopRequireDefault(require("lodash"));
@@ -20,8 +20,9 @@ var _FilterContext = require("../../context/FilterContext");
20
20
  var _SettingsContext = require("../../context/SettingsContext");
21
21
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
22
22
  var _requests = require("../../utils/requests");
23
+ var _Resolver = require("../../utils/Resolver");
24
+ var _jsxRuntime = require("react/jsx-runtime");
23
25
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
24
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
25
26
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
26
27
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
28
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -29,7 +30,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
29
30
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
30
31
  const useVarMean = function (varKeys) {
31
32
  let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
32
- const ENDPOINT = "matrix/mean";
33
+ const ENDPOINT = 'matrix/mean';
33
34
  const dataset = (0, _DatasetContext.useDataset)();
34
35
  const {
35
36
  obsIndices
@@ -38,7 +39,7 @@ const useVarMean = function (varKeys) {
38
39
  url: dataset.url,
39
40
  varKeys: _lodash.default.map(varKeys, v => v.isSet ? {
40
41
  name: v.name,
41
- indices: v.vars.map(v => v.index)
42
+ indices: v.vars.map(vv => vv.index)
42
43
  } : v.index),
43
44
  obsIndices: obsIndices,
44
45
  varNamesCol: dataset.varNamesCol
@@ -48,7 +49,7 @@ const useVarMean = function (varKeys) {
48
49
  return _objectSpread(_objectSpread({}, p), {}, {
49
50
  varKeys: _lodash.default.map(varKeys, v => v.isSet ? {
50
51
  name: v.name,
51
- indices: v.vars.map(v => v.index)
52
+ indices: v.vars.map(vv => vv.index)
52
53
  } : v.index),
53
54
  obsIndices: obsIndices
54
55
  });
@@ -67,59 +68,60 @@ const sortMeans = (i, means) => {
67
68
  };
68
69
  exports.sortMeans = sortMeans;
69
70
  function VarNamesList(_ref) {
70
- var _settings$selectedVar, _settings$selectedVar2;
71
71
  let {
72
72
  mode = _constants.SELECTION_MODES.SINGLE,
73
- displayName = "genes"
73
+ displayName = 'genes'
74
74
  } = _ref;
75
75
  const settings = (0, _SettingsContext.useSettings)();
76
76
  const dispatch = (0, _SettingsContext.useSettingsDispatch)();
77
- const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.matrix_index) || ((_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name) : settings.selectedMultiVar.map(i => i.matrix_index || i.name));
77
+ const selectedVar = (0, _Resolver.useSelectedVar)();
78
+ const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
79
+ const settingsVars = (0, _Resolver.useSettingsVars)();
80
+ const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index) || (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name) : selectedMultiVar.map(i => i.matrix_index || i.name));
78
81
  const [sortedVars, setSortedVars] = (0, _react.useState)([]);
79
82
  (0, _react.useEffect)(() => {
80
83
  if (mode === _constants.SELECTION_MODES.SINGLE) {
81
- var _settings$selectedVar3, _settings$selectedVar4;
82
- setActive(((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.matrix_index) || ((_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.name));
84
+ setActive((selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index) || (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name));
83
85
  }
84
- }, [mode, settings.selectedVar]);
86
+ }, [mode, selectedVar]);
85
87
  (0, _react.useEffect)(() => {
86
88
  if (mode === _constants.SELECTION_MODES.MULTIPLE) {
87
- setActive(settings.selectedMultiVar.map(i => i.matrix_index || i.name));
89
+ setActive(selectedMultiVar.map(i => i.matrix_index || i.name));
88
90
  }
89
- }, [mode, settings.selectedMultiVar]);
90
- const varMeans = useVarMean(settings.vars, settings.varSort.var.sort === _constants.VAR_SORT.MATRIX);
91
+ }, [mode, selectedMultiVar]);
92
+ const varMeans = useVarMean(settingsVars, settings.varSort.var.sort === _constants.VAR_SORT.MATRIX);
91
93
 
92
94
  // @TODO: deferr sortedVars ?
93
95
  (0, _react.useEffect)(() => {
94
96
  if (settings.varSort.var.sort === _constants.VAR_SORT.MATRIX) {
95
97
  if (!varMeans.isPending && !varMeans.serverError && varMeans.fetchedData) {
96
- setSortedVars(_lodash.default.orderBy(settings.vars, o => {
98
+ setSortedVars(_lodash.default.orderBy(settingsVars, o => {
97
99
  return sortMeans(o, varMeans.fetchedData);
98
100
  }, settings.varSort.var.sortOrder));
99
101
  }
100
102
  } else if (settings.varSort.var.sort === _constants.VAR_SORT.NAME) {
101
- setSortedVars(_lodash.default.orderBy(settings.vars, "name", settings.varSort.var.sortOrder));
103
+ setSortedVars(_lodash.default.orderBy(settingsVars, 'name', settings.varSort.var.sortOrder));
102
104
  } else {
103
- setSortedVars(settings.vars);
105
+ setSortedVars(settingsVars);
104
106
  }
105
- }, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settings.vars]);
107
+ }, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settingsVars]);
106
108
  const makeListItem = item => {
107
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
108
- key: item.matrix_index
109
- }, /*#__PURE__*/_react.default.createElement(_VarItem.VarItem, {
110
- item: item,
111
- active: active,
112
- mode: mode
113
- }));
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
110
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarItem.VarItem, {
111
+ item: item,
112
+ active: active,
113
+ mode: mode
114
+ })
115
+ }, item.matrix_index);
114
116
  };
115
117
  const makeSetListItem = set => {
116
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
117
- key: set.name
118
- }, /*#__PURE__*/_react.default.createElement(_VarSet.VarSet, {
119
- set: set,
120
- active: active,
121
- mode: mode
122
- }));
118
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
119
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarSet.VarSet, {
120
+ set: set,
121
+ active: active,
122
+ mode: mode
123
+ })
124
+ }, set.name);
123
125
  };
124
126
  const varList = _lodash.default.map(sortedVars, item => {
125
127
  if (item.isSet) {
@@ -141,43 +143,55 @@ function VarNamesList(_ref) {
141
143
  return setName;
142
144
  };
143
145
  const isPending = varMeans.isPending && settings.varSort.var.sort === _constants.VAR_SORT.MATRIX;
144
- return /*#__PURE__*/_react.default.createElement("div", {
145
- className: "position-relative"
146
- }, /*#__PURE__*/_react.default.createElement("div", {
147
- className: "overflow-auto mt-3"
148
- }, /*#__PURE__*/_react.default.createElement("div", {
149
- className: "d-flex justify-content-between mb-2"
150
- }, /*#__PURE__*/_react.default.createElement("h5", null, _lodash.default.capitalize(displayName)), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
151
- "aria-label": "Feature options",
152
- size: "sm"
153
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
154
- variant: "info",
155
- onClick: () => {
156
- dispatch({
157
- type: "add.var",
158
- var: {
159
- name: newSetName(),
160
- vars: [],
161
- isSet: true
162
- }
163
- });
164
- }
165
- }, "New set"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
166
- variant: "info",
167
- onClick: () => {
168
- dispatch({
169
- type: "reset.vars"
170
- });
171
- }
172
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
173
- icon: _freeSolidSvgIcons.faTimes,
174
- className: "me-1"
175
- }), "Clear"))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !varList.length ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
176
- variant: "light"
177
- }, "Search for a feature.") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_VarListToolbar.VarListToolbar, null), /*#__PURE__*/_react.default.createElement("div", {
178
- className: "position-relative"
179
- }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
180
- variant: "flush",
181
- className: "cherita-list"
182
- }, varList))))));
146
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
147
+ className: "mt-3 d-flex flex-column h-100",
148
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
149
+ className: "d-flex justify-content-between mb-2",
150
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
151
+ children: _lodash.default.capitalize(displayName)
152
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonGroup.default, {
153
+ "aria-label": "Feature options",
154
+ size: "sm",
155
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
156
+ variant: "info",
157
+ onClick: () => {
158
+ dispatch({
159
+ type: 'add.var',
160
+ var: {
161
+ name: newSetName(),
162
+ vars: [],
163
+ isSet: true
164
+ }
165
+ });
166
+ },
167
+ children: "New set"
168
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
169
+ variant: "info",
170
+ onClick: () => {
171
+ dispatch({
172
+ type: 'reset.vars'
173
+ });
174
+ },
175
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
176
+ icon: _freeSolidSvgIcons.faTimes,
177
+ className: "me-1"
178
+ }), "Clear"]
179
+ })]
180
+ })]
181
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
182
+ children: !varList.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert, {
183
+ variant: "light",
184
+ children: "Search for a feature."
185
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
186
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_VarListToolbar.VarListToolbar, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
187
+ className: "overflow-auto flex-grow-1 modern-scrollbars",
188
+ children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
189
+ variant: "flush",
190
+ className: "cherita-list",
191
+ children: varList
192
+ })]
193
+ })]
194
+ })
195
+ })]
196
+ });
183
197
  }