@haniffalab/cherita-react 1.3.0 → 1.3.1-dev.2025-10-29.def77f5f

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 (137) 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 +85 -57
  4. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  5. package/dist/cjs/components/full-page/FullPage.js +167 -114
  6. package/dist/cjs/components/full-page/PlotAlert.js +45 -0
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +102 -0
  8. package/dist/cjs/components/heatmap/Heatmap.js +83 -53
  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 +83 -54
  18. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  19. package/dist/cjs/components/obs-list/ObsItem.js +305 -216
  20. package/dist/cjs/components/obs-list/ObsList.js +164 -128
  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 +223 -175
  27. package/dist/cjs/components/scatterplot/ScatterplotControls.js +45 -31
  28. package/dist/cjs/components/scatterplot/SpatialControls.js +143 -116
  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 +79 -85
  32. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  33. package/dist/cjs/components/toolbar/Toolbar.js +111 -0
  34. package/dist/cjs/components/var-list/VarItem.js +131 -103
  35. package/dist/cjs/components/var-list/VarList.js +96 -74
  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 +124 -81
  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 +54 -39
  42. package/dist/cjs/context/DatasetContext.js +27 -17
  43. package/dist/cjs/context/FilterContext.js +11 -9
  44. package/dist/cjs/context/SettingsContext.js +339 -125
  45. package/dist/cjs/context/ZarrDataContext.js +6 -5
  46. package/dist/cjs/helpers/color-helper.js +2 -2
  47. package/dist/cjs/helpers/map-helper.js +2 -1
  48. package/dist/cjs/helpers/zarr-helper.js +3 -3
  49. package/dist/cjs/index.js +15 -21
  50. package/dist/cjs/utils/Filter.js +16 -11
  51. package/dist/cjs/utils/Histogram.js +35 -33
  52. package/dist/cjs/utils/ImageViewer.js +11 -8
  53. package/dist/cjs/utils/Legend.js +37 -30
  54. package/dist/cjs/utils/LoadingIndicators.js +15 -13
  55. package/dist/cjs/utils/Resolver.js +213 -0
  56. package/dist/cjs/utils/Skeleton.js +10 -10
  57. package/dist/cjs/utils/StyledTooltip.js +44 -0
  58. package/dist/cjs/utils/VirtualizedList.js +36 -29
  59. package/dist/cjs/utils/errors.js +15 -15
  60. package/dist/cjs/utils/requests.js +21 -9
  61. package/dist/cjs/utils/search.js +4 -4
  62. package/dist/cjs/utils/string.js +6 -6
  63. package/dist/cjs/utils/zarrData.js +20 -21
  64. package/dist/css/cherita.css +188 -65
  65. package/dist/css/cherita.css.map +1 -1
  66. package/dist/esm/components/controls/Controls.js +43 -35
  67. package/dist/esm/components/dotplot/Dotplot.js +93 -64
  68. package/dist/esm/components/dotplot/DotplotControls.js +106 -85
  69. package/dist/esm/components/full-page/FullPage.js +180 -124
  70. package/dist/esm/components/full-page/PlotAlert.js +39 -0
  71. package/dist/esm/components/full-page/PlotTypeSelector.js +95 -0
  72. package/dist/esm/components/heatmap/Heatmap.js +91 -60
  73. package/dist/esm/components/heatmap/HeatmapControls.js +8 -4
  74. package/dist/esm/components/icons/DotPlotIcon.js +58 -0
  75. package/dist/esm/components/icons/HeatmapIcon.js +39 -0
  76. package/dist/esm/components/icons/MatrixPlotIcon.1.js +51 -0
  77. package/dist/esm/components/icons/MatrixPlotIcon.js +53 -0
  78. package/dist/esm/components/icons/ScatterplotIcon.1.js +158 -0
  79. package/dist/esm/components/icons/ScatterplotIcon.js +138 -0
  80. package/dist/esm/components/icons/ViolinPlotIcon.js +36 -0
  81. package/dist/esm/components/matrixplot/Matrixplot.js +91 -61
  82. package/dist/esm/components/matrixplot/MatrixplotControls.js +10 -6
  83. package/dist/esm/components/obs-list/ObsItem.js +320 -228
  84. package/dist/esm/components/obs-list/ObsList.js +179 -142
  85. package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
  86. package/dist/esm/components/obsm-list/ObsmList.js +71 -32
  87. package/dist/esm/components/offcanvas/index.js +68 -33
  88. package/dist/esm/components/pseudospatial/Pseudospatial.js +145 -88
  89. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +127 -78
  90. package/dist/esm/components/scatterplot/Scatterplot.js +243 -194
  91. package/dist/esm/components/scatterplot/ScatterplotControls.js +50 -35
  92. package/dist/esm/components/scatterplot/SpatialControls.js +155 -127
  93. package/dist/esm/components/scatterplot/Toolbox.js +44 -32
  94. package/dist/esm/components/search-bar/SearchBar.js +187 -130
  95. package/dist/esm/components/search-bar/SearchInfo.js +86 -91
  96. package/dist/esm/components/search-bar/SearchResults.js +100 -77
  97. package/dist/esm/components/toolbar/Toolbar.js +101 -0
  98. package/dist/esm/components/var-list/VarItem.js +142 -113
  99. package/dist/esm/components/var-list/VarList.js +108 -88
  100. package/dist/esm/components/var-list/VarListToolbar.js +64 -58
  101. package/dist/esm/components/var-list/VarSet.js +134 -115
  102. package/dist/esm/components/violin/Violin.js +135 -91
  103. package/dist/esm/components/violin/ViolinControls.js +10 -6
  104. package/dist/esm/constants/colorscales.js +19 -19
  105. package/dist/esm/constants/constants.js +53 -38
  106. package/dist/esm/context/DatasetContext.js +34 -23
  107. package/dist/esm/context/FilterContext.js +11 -8
  108. package/dist/esm/context/SettingsContext.js +341 -126
  109. package/dist/esm/context/ZarrDataContext.js +8 -6
  110. package/dist/esm/helpers/color-helper.js +5 -5
  111. package/dist/esm/helpers/map-helper.js +4 -3
  112. package/dist/esm/helpers/zarr-helper.js +6 -6
  113. package/dist/esm/index.js +22 -22
  114. package/dist/esm/utils/Filter.js +22 -17
  115. package/dist/esm/utils/Histogram.js +39 -37
  116. package/dist/esm/utils/ImageViewer.js +12 -8
  117. package/dist/esm/utils/Legend.js +44 -36
  118. package/dist/esm/utils/LoadingIndicators.js +16 -13
  119. package/dist/esm/utils/Resolver.js +201 -0
  120. package/dist/esm/utils/Skeleton.js +11 -10
  121. package/dist/esm/utils/StyledTooltip.js +38 -0
  122. package/dist/esm/utils/VirtualizedList.js +37 -29
  123. package/dist/esm/utils/errors.js +15 -15
  124. package/dist/esm/utils/requests.js +24 -12
  125. package/dist/esm/utils/search.js +7 -7
  126. package/dist/esm/utils/string.js +7 -7
  127. package/dist/esm/utils/zarrData.js +27 -28
  128. package/package.json +24 -10
  129. package/scss/cherita-bootstrap.scss +2 -2
  130. package/scss/cherita.scss +65 -17
  131. package/scss/components/accordions.scss +15 -2
  132. package/scss/components/layouts.scss +116 -30
  133. package/scss/components/lists.scss +16 -5
  134. package/scss/components/plotly.scss +40 -23
  135. package/scss/components/plots.scss +14 -1
  136. package/dist/cjs/components/full-page/FullPagePseudospatial.js +0 -157
  137. package/dist/esm/components/full-page/FullPagePseudospatial.js +0 -149
@@ -3,31 +3,37 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  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); }
6
- import React, { useEffect, useState } from "react";
7
- import { faTimes } from "@fortawesome/free-solid-svg-icons";
8
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
9
- import _ from "lodash";
10
- import { Alert, Button, ListGroup } from "react-bootstrap";
11
- import ButtonGroup from "react-bootstrap/ButtonGroup";
12
- import { VarItem } from "./VarItem";
13
- import { VarListToolbar } from "./VarListToolbar";
14
- import { VarSet } from "./VarSet";
15
- import { SELECTION_MODES, VAR_SORT } from "../../constants/constants";
16
- import { useDataset } from "../../context/DatasetContext";
17
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
18
- import { LoadingSpinner } from "../../utils/LoadingIndicators";
19
- import { useFetch } from "../../utils/requests";
20
- const useVarMean = function (varKeys) {
6
+ import { useEffect, useState } from 'react';
7
+ import { faTimes } from '@fortawesome/free-solid-svg-icons';
8
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
+ import _ from 'lodash';
10
+ import { Alert, Button, ListGroup } from 'react-bootstrap';
11
+ import ButtonGroup from 'react-bootstrap/ButtonGroup';
12
+ import { VarItem } from './VarItem';
13
+ import { VarListToolbar } from './VarListToolbar';
14
+ import { VarSet } from './VarSet';
15
+ import { SELECTION_MODES, VAR_SORT } from '../../constants/constants';
16
+ import { useDataset } from '../../context/DatasetContext';
17
+ import { useFilteredData } from '../../context/FilterContext';
18
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
19
+ import { LoadingSpinner } from '../../utils/LoadingIndicators';
20
+ import { useFetch } from '../../utils/requests';
21
+ import { useSelectedMultiVar, useSelectedVar, useSettingsVars } from '../../utils/Resolver';
22
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
23
+ export const useVarMean = function (varKeys) {
21
24
  let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
22
- const ENDPOINT = "matrix/mean";
25
+ const ENDPOINT = 'matrix/mean';
23
26
  const dataset = useDataset();
27
+ const {
28
+ obsIndices
29
+ } = useFilteredData();
24
30
  const [params, setParams] = useState({
25
31
  url: dataset.url,
26
32
  varKeys: _.map(varKeys, v => v.isSet ? {
27
33
  name: v.name,
28
- indices: v.vars.map(v => v.index)
34
+ indices: v.vars.map(vv => vv.index)
29
35
  } : v.index),
30
- // obsIndices:
36
+ obsIndices: obsIndices,
31
37
  varNamesCol: dataset.varNamesCol
32
38
  });
33
39
  useEffect(() => {
@@ -35,11 +41,12 @@ const useVarMean = function (varKeys) {
35
41
  return _objectSpread(_objectSpread({}, p), {}, {
36
42
  varKeys: _.map(varKeys, v => v.isSet ? {
37
43
  name: v.name,
38
- indices: v.vars.map(v => v.index)
39
- } : v.index)
44
+ indices: v.vars.map(vv => vv.index)
45
+ } : v.index),
46
+ obsIndices: obsIndices
40
47
  });
41
48
  });
42
- }, [varKeys]);
49
+ }, [obsIndices, varKeys]);
43
50
  return useFetch(ENDPOINT, params, {
44
51
  enabled: enabled,
45
52
  refetchOnMount: false
@@ -47,63 +54,64 @@ const useVarMean = function (varKeys) {
47
54
  };
48
55
 
49
56
  // ensure nulls are lowest values
50
- const sortMeans = (i, means) => {
57
+ export const sortMeans = (i, means) => {
51
58
  return means[i.name] || _.min(_.values(means)) - 1;
52
59
  };
53
60
  export function VarNamesList(_ref) {
54
- var _settings$selectedVar, _settings$selectedVar2;
55
61
  let {
56
62
  mode = SELECTION_MODES.SINGLE,
57
- displayName = "genes"
63
+ displayName = 'genes'
58
64
  } = _ref;
59
65
  const settings = useSettings();
60
66
  const dispatch = useSettingsDispatch();
61
- const [active, setActive] = useState(mode === 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));
67
+ const selectedVar = useSelectedVar();
68
+ const selectedMultiVar = useSelectedMultiVar();
69
+ const settingsVars = useSettingsVars();
70
+ const [active, setActive] = useState(mode === 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));
62
71
  const [sortedVars, setSortedVars] = useState([]);
63
72
  useEffect(() => {
64
73
  if (mode === SELECTION_MODES.SINGLE) {
65
- var _settings$selectedVar3, _settings$selectedVar4;
66
- 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));
74
+ setActive((selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index) || (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name));
67
75
  }
68
- }, [mode, settings.selectedVar]);
76
+ }, [mode, selectedVar]);
69
77
  useEffect(() => {
70
78
  if (mode === SELECTION_MODES.MULTIPLE) {
71
- setActive(settings.selectedMultiVar.map(i => i.matrix_index || i.name));
79
+ setActive(selectedMultiVar.map(i => i.matrix_index || i.name));
72
80
  }
73
- }, [mode, settings.selectedMultiVar]);
74
- const varMeans = useVarMean(settings.vars, settings.varSort.var.sort === VAR_SORT.MATRIX);
81
+ }, [mode, selectedMultiVar]);
82
+ const varMeans = useVarMean(settingsVars, settings.varSort.var.sort === VAR_SORT.MATRIX);
75
83
 
76
84
  // @TODO: deferr sortedVars ?
77
85
  useEffect(() => {
78
86
  if (settings.varSort.var.sort === VAR_SORT.MATRIX) {
79
87
  if (!varMeans.isPending && !varMeans.serverError && varMeans.fetchedData) {
80
- setSortedVars(_.orderBy(settings.vars, o => {
88
+ setSortedVars(_.orderBy(settingsVars, o => {
81
89
  return sortMeans(o, varMeans.fetchedData);
82
90
  }, settings.varSort.var.sortOrder));
83
91
  }
84
92
  } else if (settings.varSort.var.sort === VAR_SORT.NAME) {
85
- setSortedVars(_.orderBy(settings.vars, "name", settings.varSort.var.sortOrder));
93
+ setSortedVars(_.orderBy(settingsVars, 'name', settings.varSort.var.sortOrder));
86
94
  } else {
87
- setSortedVars(settings.vars);
95
+ setSortedVars(settingsVars);
88
96
  }
89
- }, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settings.vars]);
97
+ }, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settingsVars]);
90
98
  const makeListItem = item => {
91
- return /*#__PURE__*/React.createElement(ListGroup.Item, {
92
- key: item.matrix_index
93
- }, /*#__PURE__*/React.createElement(VarItem, {
94
- item: item,
95
- active: active,
96
- mode: mode
97
- }));
99
+ return /*#__PURE__*/_jsx(ListGroup.Item, {
100
+ children: /*#__PURE__*/_jsx(VarItem, {
101
+ item: item,
102
+ active: active,
103
+ mode: mode
104
+ })
105
+ }, item.matrix_index);
98
106
  };
99
107
  const makeSetListItem = set => {
100
- return /*#__PURE__*/React.createElement(ListGroup.Item, {
101
- key: set.name
102
- }, /*#__PURE__*/React.createElement(VarSet, {
103
- set: set,
104
- active: active,
105
- mode: mode
106
- }));
108
+ return /*#__PURE__*/_jsx(ListGroup.Item, {
109
+ children: /*#__PURE__*/_jsx(VarSet, {
110
+ set: set,
111
+ active: active,
112
+ mode: mode
113
+ })
114
+ }, set.name);
107
115
  };
108
116
  const varList = _.map(sortedVars, item => {
109
117
  if (item.isSet) {
@@ -125,43 +133,55 @@ export function VarNamesList(_ref) {
125
133
  return setName;
126
134
  };
127
135
  const isPending = varMeans.isPending && settings.varSort.var.sort === VAR_SORT.MATRIX;
128
- return /*#__PURE__*/React.createElement("div", {
129
- className: "position-relative"
130
- }, /*#__PURE__*/React.createElement("div", {
131
- className: "overflow-auto mt-3"
132
- }, /*#__PURE__*/React.createElement("div", {
133
- className: "d-flex justify-content-between mb-2"
134
- }, /*#__PURE__*/React.createElement("h5", null, _.capitalize(displayName)), /*#__PURE__*/React.createElement(ButtonGroup, {
135
- "aria-label": "Feature options",
136
- size: "sm"
137
- }, /*#__PURE__*/React.createElement(Button, {
138
- variant: "info",
139
- onClick: () => {
140
- dispatch({
141
- type: "add.var",
142
- var: {
143
- name: newSetName(),
144
- vars: [],
145
- isSet: true
146
- }
147
- });
148
- }
149
- }, "New set"), /*#__PURE__*/React.createElement(Button, {
150
- variant: "info",
151
- onClick: () => {
152
- dispatch({
153
- type: "reset.vars"
154
- });
155
- }
156
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
157
- icon: faTimes,
158
- className: "me-1"
159
- }), "Clear"))), /*#__PURE__*/React.createElement(React.Fragment, null, !varList.length ? /*#__PURE__*/React.createElement(Alert, {
160
- variant: "light"
161
- }, "Search for a feature.") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(VarListToolbar, null), /*#__PURE__*/React.createElement("div", {
162
- className: "position-relative"
163
- }, isPending && /*#__PURE__*/React.createElement(LoadingSpinner, null), /*#__PURE__*/React.createElement(ListGroup, {
164
- variant: "flush",
165
- className: "cherita-list"
166
- }, varList))))));
136
+ return /*#__PURE__*/_jsxs("div", {
137
+ className: "mt-3 d-flex flex-column h-100",
138
+ children: [/*#__PURE__*/_jsxs("div", {
139
+ className: "d-flex justify-content-between mb-2",
140
+ children: [/*#__PURE__*/_jsx("h5", {
141
+ children: _.capitalize(displayName)
142
+ }), /*#__PURE__*/_jsxs(ButtonGroup, {
143
+ "aria-label": "Feature options",
144
+ size: "sm",
145
+ children: [/*#__PURE__*/_jsx(Button, {
146
+ variant: "info",
147
+ onClick: () => {
148
+ dispatch({
149
+ type: 'add.var',
150
+ var: {
151
+ name: newSetName(),
152
+ vars: [],
153
+ isSet: true
154
+ }
155
+ });
156
+ },
157
+ children: "New set"
158
+ }), /*#__PURE__*/_jsxs(Button, {
159
+ variant: "info",
160
+ onClick: () => {
161
+ dispatch({
162
+ type: 'reset.vars'
163
+ });
164
+ },
165
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
166
+ icon: faTimes,
167
+ className: "me-1"
168
+ }), "Clear"]
169
+ })]
170
+ })]
171
+ }), /*#__PURE__*/_jsx(_Fragment, {
172
+ children: !varList.length ? /*#__PURE__*/_jsx(Alert, {
173
+ variant: "light",
174
+ children: "Search for a feature."
175
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
176
+ children: [/*#__PURE__*/_jsx(VarListToolbar, {}), /*#__PURE__*/_jsxs("div", {
177
+ className: "overflow-auto flex-grow-1 modern-scrollbars",
178
+ children: [isPending && /*#__PURE__*/_jsx(LoadingSpinner, {}), /*#__PURE__*/_jsx(ListGroup, {
179
+ variant: "flush",
180
+ className: "cherita-list",
181
+ children: varList
182
+ })]
183
+ })]
184
+ })
185
+ })]
186
+ });
167
187
  }
@@ -1,14 +1,15 @@
1
- import React, { useState } from "react";
2
- import { faArrowDown19, faArrowDownAZ, faArrowUp91, faArrowUpZA, faXmark } from "@fortawesome/free-solid-svg-icons";
3
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
4
- import { ToggleButton, ToggleButtonGroup } from "react-bootstrap";
5
- import { VAR_SORT, VAR_SORT_ORDER } from "../../constants/constants";
6
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
1
+ import { useState } from 'react';
2
+ import { faArrowDown19, faArrowDownAZ, faArrowUp91, faArrowUpZA, faXmark } from '@fortawesome/free-solid-svg-icons';
3
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4
+ import { ToggleButton, ToggleButtonGroup } from 'react-bootstrap';
5
+ import { VAR_SORT, VAR_SORT_ORDER } from '../../constants/constants';
6
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
7
7
 
8
8
  // @TODO: set option for "var" and "disease"
9
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
10
  export function VarListToolbar(_ref) {
10
11
  let {
11
- varType = "var"
12
+ varType = 'var'
12
13
  } = _ref;
13
14
  const settings = useSettings();
14
15
  const dispatch = useSettingsDispatch();
@@ -19,7 +20,7 @@ export function VarListToolbar(_ref) {
19
20
  if (sort !== sortValue) {
20
21
  setSort(sortValue);
21
22
  dispatch({
22
- type: "set.varSort",
23
+ type: 'set.varSort',
23
24
  var: varType,
24
25
  sort: sortValue,
25
26
  sortOrder: sortOrder
@@ -28,60 +29,65 @@ export function VarListToolbar(_ref) {
28
29
  const newSortOrder = sortOrder === VAR_SORT_ORDER.ASC ? VAR_SORT_ORDER.DESC : VAR_SORT_ORDER.ASC;
29
30
  setSortOrder(newSortOrder);
30
31
  dispatch({
31
- type: "set.varSort",
32
+ type: 'set.varSort',
32
33
  var: varType,
33
34
  sort: sortValue,
34
35
  sortOrder: newSortOrder
35
36
  });
36
37
  }
37
38
  };
38
- return /*#__PURE__*/React.createElement("div", {
39
- className: "d-flex justify-content-end align-items-center mb-2"
40
- }, /*#__PURE__*/React.createElement(ToggleButtonGroup, {
41
- name: "sortfeatures",
42
- "aria-label": "Sort features by",
43
- size: "sm",
44
- type: "radio"
45
- }, /*#__PURE__*/React.createElement(ToggleButton, {
46
- id: VAR_SORT.NAME,
47
- value: VAR_SORT.NAME,
48
- "aria-label": "alphabetical",
49
- title: "Sort alphabetically",
50
- selected: sort === VAR_SORT.NAME,
51
- onChange: () => {
52
- handleSort(VAR_SORT.NAME, nameSortOrder, setNameSortOrder);
53
- }
54
- }, nameSortOrder === VAR_SORT_ORDER.ASC ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
55
- icon: faArrowDownAZ
56
- }) : /*#__PURE__*/React.createElement(FontAwesomeIcon, {
57
- icon: faArrowUpZA
58
- })), /*#__PURE__*/React.createElement(ToggleButton, {
59
- id: VAR_SORT.MATRIX,
60
- value: VAR_SORT.MATRIX,
61
- "aria-label": "matrix value",
62
- title: "Sort by matrix value",
63
- selected: sort === VAR_SORT.MATRIX,
64
- onChange: () => {
65
- handleSort(VAR_SORT.MATRIX, matrixSortOrder, setMatrixSortOrder);
66
- }
67
- }, matrixSortOrder === VAR_SORT_ORDER.ASC ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
68
- icon: faArrowDown19
69
- }) : /*#__PURE__*/React.createElement(FontAwesomeIcon, {
70
- icon: faArrowUp91
71
- })), /*#__PURE__*/React.createElement(ToggleButton, {
72
- id: "none",
73
- value: "none",
74
- "aria-label": "none",
75
- title: "No sorting",
76
- onClick: () => {
77
- setSort(VAR_SORT.NONE);
78
- dispatch({
79
- type: "set.varSort.sort",
80
- var: varType,
81
- sort: VAR_SORT.NONE
82
- });
83
- }
84
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
85
- icon: faXmark
86
- }))));
39
+ return /*#__PURE__*/_jsx("div", {
40
+ className: "d-flex justify-content-end align-items-center mb-2",
41
+ children: /*#__PURE__*/_jsxs(ToggleButtonGroup, {
42
+ name: "sortfeatures",
43
+ "aria-label": "Sort features by",
44
+ size: "sm",
45
+ type: "radio",
46
+ children: [/*#__PURE__*/_jsx(ToggleButton, {
47
+ id: VAR_SORT.NAME,
48
+ value: VAR_SORT.NAME,
49
+ "aria-label": "alphabetical",
50
+ title: "Sort alphabetically",
51
+ selected: sort === VAR_SORT.NAME,
52
+ onChange: () => {
53
+ handleSort(VAR_SORT.NAME, nameSortOrder, setNameSortOrder);
54
+ },
55
+ children: nameSortOrder === VAR_SORT_ORDER.ASC ? /*#__PURE__*/_jsx(FontAwesomeIcon, {
56
+ icon: faArrowDownAZ
57
+ }) : /*#__PURE__*/_jsx(FontAwesomeIcon, {
58
+ icon: faArrowUpZA
59
+ })
60
+ }), /*#__PURE__*/_jsx(ToggleButton, {
61
+ id: VAR_SORT.MATRIX,
62
+ value: VAR_SORT.MATRIX,
63
+ "aria-label": "matrix value",
64
+ title: "Sort by matrix value",
65
+ selected: sort === VAR_SORT.MATRIX,
66
+ onChange: () => {
67
+ handleSort(VAR_SORT.MATRIX, matrixSortOrder, setMatrixSortOrder);
68
+ },
69
+ children: matrixSortOrder === VAR_SORT_ORDER.ASC ? /*#__PURE__*/_jsx(FontAwesomeIcon, {
70
+ icon: faArrowDown19
71
+ }) : /*#__PURE__*/_jsx(FontAwesomeIcon, {
72
+ icon: faArrowUp91
73
+ })
74
+ }), /*#__PURE__*/_jsx(ToggleButton, {
75
+ id: "none",
76
+ value: "none",
77
+ "aria-label": "none",
78
+ title: "No sorting",
79
+ onClick: () => {
80
+ setSort(VAR_SORT.NONE);
81
+ dispatch({
82
+ type: 'set.varSort.sort',
83
+ var: varType,
84
+ sort: VAR_SORT.NONE
85
+ });
86
+ },
87
+ children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
88
+ icon: faXmark
89
+ })
90
+ })]
91
+ })
92
+ });
87
93
  }