@haniffalab/cherita-react 0.2.0-dev.2024-09-26.775b9a06 → 0.2.0-dev.2024-09-26.1ea62883

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 (32) hide show
  1. package/dist/App.scss +77 -8
  2. package/dist/components/Offcanvas/index.js +6 -2
  3. package/dist/components/dotplot/Dotplot.js +22 -5
  4. package/dist/components/dotplot/DotplotControls.js +11 -10
  5. package/dist/components/heatmap/Heatmap.js +22 -5
  6. package/dist/components/matrixplot/Matrixplot.js +22 -5
  7. package/dist/components/matrixplot/MatrixplotControls.js +8 -7
  8. package/dist/components/obs-list/ObsItem.js +394 -0
  9. package/dist/components/obs-list/ObsList.js +116 -299
  10. package/dist/components/obs-list/ObsToolbar.js +76 -0
  11. package/dist/components/scatterplot/Legend.js +4 -3
  12. package/dist/components/scatterplot/Scatterplot.js +129 -61
  13. package/dist/components/scatterplot/Toolbox.js +3 -2
  14. package/dist/components/search-bar/SearchBar.js +18 -2
  15. package/dist/components/search-bar/SearchResults.js +8 -8
  16. package/dist/components/var-list/VarItem.js +316 -0
  17. package/dist/components/var-list/VarList.js +167 -149
  18. package/dist/components/var-list/VarSet.js +214 -0
  19. package/dist/components/violin/Violin.js +46 -13
  20. package/dist/components/violin/ViolinControls.js +13 -18
  21. package/dist/constants/constants.js +41 -29
  22. package/dist/context/DatasetContext.js +91 -31
  23. package/dist/context/FilterContext.js +76 -0
  24. package/dist/helpers/map-helper.js +20 -15
  25. package/dist/helpers/zarr-helper.js +35 -13
  26. package/dist/index.js +7 -0
  27. package/dist/utils/VirtualizedList.js +69 -0
  28. package/dist/utils/requests.js +2 -2
  29. package/dist/utils/search.js +3 -56
  30. package/dist/utils/string.js +18 -0
  31. package/package.json +3 -2
  32. package/dist/components/obs-list/ObsValueList.js +0 -101
@@ -5,29 +5,97 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.VarNamesList = VarNamesList;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
- var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
- var _reactFontawesome = require("@fortawesome/react-fontawesome");
8
+ var _iconsMaterial = require("@mui/icons-material");
10
9
  var _lodash = _interopRequireDefault(require("lodash"));
11
10
  var _reactBootstrap = require("react-bootstrap");
11
+ var _VarItem = require("./VarItem");
12
+ var _VarSet = require("./VarSet");
12
13
  var _constants = require("../../constants/constants");
13
14
  var _DatasetContext = require("../../context/DatasetContext");
15
+ var _requests = require("../../utils/requests");
14
16
  var _jsxRuntime = require("react/jsx-runtime");
15
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
- function VarNamesList(_ref) {
19
- var _dataset$selectedVar, _dataset$selectedDise, _dataset$selectedDise2, _dataset$selectedDise3;
20
+ function DiseaseVarList(_ref) {
21
+ var _dataset$selectedDise, _dataset$selectedDise3;
20
22
  let {
21
- mode = _constants.SELECTION_MODES.SINGLE,
22
- displayName = "genes"
23
+ makeListItem
23
24
  } = _ref;
25
+ const ENDPOINT = "disease/genes";
26
+ const dataset = (0, _DatasetContext.useDataset)();
27
+ const dispatch = (0, _DatasetContext.useDatasetDispatch)();
28
+ const [diseaseVars, setDiseaseVars] = (0, _react.useState)([]);
29
+ const [params, setParams] = (0, _react.useState)({
30
+ url: dataset.url,
31
+ col: dataset.varNamesCol,
32
+ diseaseId: (_dataset$selectedDise = dataset.selectedDisease) === null || _dataset$selectedDise === void 0 ? void 0 : _dataset$selectedDise.id,
33
+ diseaseDatasets: dataset.diseaseDatasets
34
+ });
35
+ (0, _react.useEffect)(() => {
36
+ setParams(p => {
37
+ var _dataset$selectedDise2;
38
+ return {
39
+ ...p,
40
+ diseaseId: (_dataset$selectedDise2 = dataset.selectedDisease) === null || _dataset$selectedDise2 === void 0 ? void 0 : _dataset$selectedDise2.id
41
+ };
42
+ });
43
+ }, [dataset.selectedDisease]);
44
+ const {
45
+ fetchedData,
46
+ isPending,
47
+ serverError
48
+ } = (0, _requests.useFetch)(ENDPOINT, params, {
49
+ enabled: !!params.diseaseId
50
+ });
51
+ (0, _react.useEffect)(() => {
52
+ if (!isPending && !serverError) {
53
+ setDiseaseVars(fetchedData);
54
+ }
55
+ }, [fetchedData, isPending, serverError]);
56
+ const diseaseVarList = _lodash.default.map(diseaseVars, item => {
57
+ return makeListItem(item, true);
58
+ });
59
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
60
+ children: dataset.selectedDisease && (!diseaseVars.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert, {
61
+ variant: "light",
62
+ children: "No disease genes found."
63
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
64
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
65
+ className: "d-flex justify-content-between mt-3",
66
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
67
+ children: "Disease genes"
68
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
69
+ variant: "link",
70
+ onClick: () => {
71
+ dispatch({
72
+ type: "reset.disease"
73
+ });
74
+ },
75
+ children: "clear"
76
+ })]
77
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
78
+ children: (_dataset$selectedDise3 = dataset.selectedDisease) === null || _dataset$selectedDise3 === void 0 ? void 0 : _dataset$selectedDise3.name
79
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
80
+ children: diseaseVarList
81
+ })]
82
+ }))
83
+ });
84
+ }
85
+ function VarNamesList(_ref2) {
86
+ var _dataset$selectedVar, _dataset$selectedVar2, _dataset$selectedVar6, _dataset$selectedVar7;
87
+ let {
88
+ mode = _constants.SELECTION_MODES.SINGLE,
89
+ displayName = "genes",
90
+ showDiseaseVarList = true
91
+ } = _ref2;
24
92
  const dataset = (0, _DatasetContext.useDataset)();
25
93
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
26
- const [varButtons, setVarButtons] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? [dataset.selectedVar] : dataset.selectedMultiVar);
27
- const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? (_dataset$selectedVar = dataset.selectedVar) === null || _dataset$selectedVar === void 0 ? void 0 : _dataset$selectedVar.matrix_index : dataset.selectedMultiVar.map(i => i.matrix_index));
94
+ const [varButtons, setVarButtons] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? dataset.selectedVar ? _lodash.default.unionWith([dataset.selectedVar], dataset.varSets, _lodash.default.isEqual) : [...dataset.varSets] : [...dataset.selectedMultiVar, ...dataset.varSets]);
95
+ const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? ((_dataset$selectedVar = dataset.selectedVar) === null || _dataset$selectedVar === void 0 ? void 0 : _dataset$selectedVar.matrix_index) || ((_dataset$selectedVar2 = dataset.selectedVar) === null || _dataset$selectedVar2 === void 0 ? void 0 : _dataset$selectedVar2.name) : dataset.selectedMultiVar.map(i => i.matrix_index || i.name));
28
96
  (0, _react.useEffect)(() => {
29
97
  if (mode === _constants.SELECTION_MODES.SINGLE) {
30
- var _dataset$selectedVar2;
98
+ var _dataset$selectedVar3, _dataset$selectedVar4;
31
99
  setVarButtons(v => {
32
100
  if (dataset.selectedVar) {
33
101
  return _lodash.default.unionWith(v, [dataset.selectedVar], _lodash.default.isEqual);
@@ -35,7 +103,7 @@ function VarNamesList(_ref) {
35
103
  return v;
36
104
  }
37
105
  });
38
- setActive((_dataset$selectedVar2 = dataset.selectedVar) === null || _dataset$selectedVar2 === void 0 ? void 0 : _dataset$selectedVar2.matrix_index);
106
+ setActive(((_dataset$selectedVar3 = dataset.selectedVar) === null || _dataset$selectedVar3 === void 0 ? void 0 : _dataset$selectedVar3.matrix_index) || ((_dataset$selectedVar4 = dataset.selectedVar) === null || _dataset$selectedVar4 === void 0 ? void 0 : _dataset$selectedVar4.name));
39
107
  }
40
108
  }, [mode, dataset.selectedVar]);
41
109
  (0, _react.useEffect)(() => {
@@ -47,137 +115,98 @@ function VarNamesList(_ref) {
47
115
  return v;
48
116
  }
49
117
  });
50
- setActive(dataset.selectedMultiVar.map(i => i.matrix_index));
118
+ setActive(dataset.selectedMultiVar.map(i => i.matrix_index || i.name));
51
119
  }
52
120
  }, [mode, dataset.selectedMultiVar]);
53
- const selectVar = (0, _react.useCallback)(item => {
54
- if (mode === _constants.SELECTION_MODES.SINGLE) {
55
- dispatch({
56
- type: "select.var",
57
- var: item
58
- });
59
- dispatch({
60
- type: "set.colorEncoding",
61
- value: "var"
62
- });
63
- } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
64
- dispatch({
65
- type: "select.multivar",
66
- var: item
121
+ (0, _react.useEffect)(() => {
122
+ setVarButtons(v => {
123
+ const updated = _lodash.default.map(v, i => {
124
+ if (i.isSet) {
125
+ return dataset.varSets.find(s => s.name === i.name);
126
+ } else return i;
67
127
  });
68
- }
69
- }, [dispatch, mode]);
70
- const removeVar = (0, _react.useCallback)(v => {
71
- setVarButtons(b => {
72
- return b.filter(i => i.name !== v.name);
128
+ const newSets = _lodash.default.difference(dataset.varSets, updated);
129
+ return [...updated, ...newSets];
73
130
  });
74
131
  if (mode === _constants.SELECTION_MODES.SINGLE) {
75
- if (active === v.matrix_index) {
76
- dispatch({
77
- type: "deselect.var"
78
- });
79
- }
80
- } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
81
- if (active.includes(v.matrix_index)) {
132
+ var _dataset$selectedVar5;
133
+ if ((_dataset$selectedVar5 = dataset.selectedVar) !== null && _dataset$selectedVar5 !== void 0 && _dataset$selectedVar5.isSet) {
134
+ const selectedSet = dataset.varSets.find(s => s.name === dataset.selectedVar.name);
82
135
  dispatch({
83
- type: "deselect.multivar",
84
- var: v
136
+ type: "select.var",
137
+ var: selectedSet
85
138
  });
86
139
  }
140
+ } else {
141
+ dispatch({
142
+ type: "update.multivar",
143
+ vars: dataset.varSets
144
+ });
87
145
  }
88
- }, [active, dispatch, mode]);
89
- const makeList = (0, _react.useCallback)(vars => {
90
- return vars.map(item => {
91
- if (item && mode === _constants.SELECTION_MODES.SINGLE) {
92
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
93
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
94
- className: "d-flex gap-1",
95
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
96
- className: "flex-grow-1",
97
- children: item.name
98
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
99
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
100
- icon: _freeSolidSvgIcons.faCircleInfo
101
- })
102
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
103
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
104
- type: "button",
105
- variant: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === item.matrix_index ? "primary" : "outline-primary",
106
- className: "m-0 p-0 px-1",
107
- onClick: () => {
108
- selectVar(item);
109
- },
110
- disabled: item.matrix_index === -1,
111
- title: item.matrix_index === -1 ? "Not present in data" : "Set as color encoding",
112
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
113
- icon: _freeSolidSvgIcons.faDroplet
114
- })
115
- }, item.matrix_index)
116
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
117
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
118
- type: "button",
119
- className: "m-0 p-0 px-1",
120
- variant: "outline-secondary",
121
- title: "Remove from list",
122
- onClick: () => removeVar(item),
123
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
124
- icon: _freeSolidSvgIcons.faTrash
125
- })
126
- })
127
- })]
128
- })
129
- }, item.name);
130
- } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
131
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
132
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
133
- className: "d-flex",
134
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
135
- className: "flex-grow-1",
136
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
137
- type: "button",
138
- variant: item.matrix_index !== -1 && _lodash.default.includes(active, item.matrix_index) ? "primary" : "outline-primary",
139
- className: "m-0 p-0 px-1",
140
- onClick: () => {
141
- if (active.includes(item.matrix_index)) {
142
- dispatch({
143
- type: "deselect.multivar",
144
- var: item
145
- });
146
- } else {
147
- selectVar(item);
148
- }
149
- },
150
- disabled: item.matrix_index === -1,
151
- title: item.matrix_index === -1 ? "Not present in data" : "",
152
- children: item.name
153
- }, item.matrix_index)
154
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
155
- children: [" ", /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
156
- icon: _freeSolidSvgIcons.faPlus
157
- })]
158
- })]
159
- })
160
- }, item.name);
161
- } else {
162
- return null;
163
- }
164
- });
165
- }, [active, dataset.colorEncoding, dispatch, mode, removeVar, selectVar]);
166
- const varList = (0, _react.useMemo)(() => {
167
- return makeList(varButtons);
168
- }, [makeList, varButtons]);
169
- const diseaseVarList = (0, _react.useMemo)(() => {
170
- return makeList(dataset.selectedDisease.genes);
171
- }, [makeList, dataset.selectedDisease.genes]);
146
+ }, [mode, dataset.varSets, (_dataset$selectedVar6 = dataset.selectedVar) === null || _dataset$selectedVar6 === void 0 ? void 0 : _dataset$selectedVar6.isSet, (_dataset$selectedVar7 = dataset.selectedVar) === null || _dataset$selectedVar7 === void 0 ? void 0 : _dataset$selectedVar7.name, dispatch]);
147
+ const makeListItem = function (item) {
148
+ let isDiseaseGene = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
149
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
150
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarItem.VarItem, {
151
+ item: item,
152
+ active: active,
153
+ setVarButtons: setVarButtons,
154
+ mode: mode,
155
+ isDiseaseGene: isDiseaseGene
156
+ })
157
+ }, item.matrix_index);
158
+ };
159
+ const makeSetListItem = set => {
160
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
161
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarSet.VarSet, {
162
+ set: set,
163
+ active: active,
164
+ mode: mode
165
+ })
166
+ }, set.name);
167
+ };
168
+ const varList = _lodash.default.map(varButtons, item => {
169
+ if (item.isSet) {
170
+ return makeSetListItem(item);
171
+ } else {
172
+ return makeListItem(item);
173
+ }
174
+ });
175
+ const newSetName = () => {
176
+ let n = 1;
177
+ let setName = "Set ".concat(n);
178
+ const setNameExists = name => {
179
+ return dataset.varSets.some(set => set.name === name);
180
+ };
181
+ while (setNameExists(setName)) {
182
+ n++;
183
+ setName = "Set ".concat(n);
184
+ }
185
+ return setName;
186
+ };
172
187
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
173
188
  className: "position-relative",
174
189
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
175
- className: "overflow-auto mt-2",
190
+ className: "overflow-auto mt-3",
176
191
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
177
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
178
- className: "d-flex justify-content-between",
179
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
180
- children: _lodash.default.capitalize(displayName)
192
+ className: "d-flex justify-content-between",
193
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
194
+ children: _lodash.default.capitalize(displayName)
195
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
196
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
197
+ variant: "light",
198
+ className: "p-1",
199
+ onClick: () => {
200
+ dispatch({
201
+ type: "add.varSet",
202
+ varSet: {
203
+ name: newSetName(),
204
+ vars: [],
205
+ isSet: true
206
+ }
207
+ });
208
+ },
209
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.Add, {}), "New set"]
181
210
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
182
211
  variant: "link",
183
212
  onClick: () => {
@@ -185,31 +214,20 @@ function VarNamesList(_ref) {
185
214
  dispatch({
186
215
  type: mode === _constants.SELECTION_MODES.SINGLE ? "reset.var" : "reset.multiVar"
187
216
  });
217
+ dispatch({
218
+ type: "reset.varSets"
219
+ });
188
220
  },
189
221
  children: "clear"
190
222
  })]
191
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
192
- children: varList
193
223
  })]
194
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
195
- children: ((_dataset$selectedDise = dataset.selectedDisease) === null || _dataset$selectedDise === void 0 ? void 0 : _dataset$selectedDise.id) && ((_dataset$selectedDise2 = dataset.selectedDisease) === null || _dataset$selectedDise2 === void 0 || (_dataset$selectedDise2 = _dataset$selectedDise2.genes) === null || _dataset$selectedDise2 === void 0 ? void 0 : _dataset$selectedDise2.length) > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
196
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
197
- className: "d-flex justify-content-between",
198
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
199
- children: "Disease genes"
200
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
201
- variant: "link",
202
- onClick: () => {
203
- dispatch({
204
- type: "reset.disease"
205
- });
206
- },
207
- children: "clear"
208
- })]
209
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
210
- children: (_dataset$selectedDise3 = dataset.selectedDisease) === null || _dataset$selectedDise3 === void 0 ? void 0 : _dataset$selectedDise3.name
211
- }), diseaseVarList]
212
- })
224
+ }), !varList.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert, {
225
+ variant: "light",
226
+ children: "Search for a feature."
227
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
228
+ children: varList
229
+ }), showDiseaseVarList && /*#__PURE__*/(0, _jsxRuntime.jsx)(DiseaseVarList, {
230
+ makeListItem: makeListItem
213
231
  })]
214
232
  })
215
233
  });
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VarSet = VarSet;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
+ var _iconsMaterial = require("@mui/icons-material");
11
+ var _lodash = _interopRequireDefault(require("lodash"));
12
+ var _reactBootstrap = require("react-bootstrap");
13
+ var _VarItem = require("./VarItem");
14
+ var _constants = require("../../constants/constants");
15
+ var _DatasetContext = require("../../context/DatasetContext");
16
+ var _SearchBar = require("../search-bar/SearchBar");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
+ const addVarToSet = (dispatch, set, v) => {
22
+ dispatch({
23
+ type: "add.varSet.var",
24
+ varSet: set,
25
+ var: v
26
+ });
27
+ };
28
+ function SingleSelectionSet(_ref) {
29
+ let {
30
+ set,
31
+ isActive,
32
+ selectSet,
33
+ removeSet,
34
+ removeSetVar,
35
+ showSearchBar = true
36
+ } = _ref;
37
+ const [openSet, setOpenSet] = (0, _react.useState)(false);
38
+ const varList = set.vars.length ? _lodash.default.map(set.vars, v => {
39
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
40
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarItem.SingleSelectionItem, {
41
+ item: v,
42
+ showSetColorEncoding: false,
43
+ removeVar: () => removeSetVar(v)
44
+ })
45
+ }, v.name);
46
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
47
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
48
+ className: "text-muted",
49
+ children: "No features in this set"
50
+ })
51
+ });
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
53
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
54
+ className: "d-flex justify-content-between cursor-pointer",
55
+ onClick: () => {
56
+ setOpenSet(o => !o);
57
+ },
58
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
59
+ className: "d-flex justify-content-between align-items-center w-100",
60
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
61
+ children: set.name
62
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
63
+ className: "d-flex align-items-center gap-1",
64
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.List, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
65
+ type: "button",
66
+ variant: isActive ? "primary" : "outline-primary",
67
+ className: "m-0 p-0 px-1",
68
+ onClick: e => {
69
+ e.stopPropagation();
70
+ selectSet();
71
+ },
72
+ disabled: !set.vars.length,
73
+ title: "Set as color encoding",
74
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
75
+ icon: _freeSolidSvgIcons.faDroplet
76
+ })
77
+ }, set.name), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
78
+ type: "button",
79
+ className: "m-0 p-0 px-1",
80
+ variant: "outline-secondary",
81
+ title: "Remove from list",
82
+ onClick: e => {
83
+ e.stopPropagation();
84
+ removeSet();
85
+ },
86
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
87
+ icon: _freeSolidSvgIcons.faTrash
88
+ })
89
+ })]
90
+ })]
91
+ })
92
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Collapse, {
93
+ in: openSet,
94
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
95
+ className: "mt-2",
96
+ children: [showSearchBar &&
97
+ /*#__PURE__*/
98
+ // @TODO: fix how results are displayed, should be placed on top of parent components
99
+ (0, _jsxRuntime.jsx)(_SearchBar.SearchBar, {
100
+ handleSelect: (d, i) => addVarToSet(d, set, i)
101
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
102
+ className: "mx-2",
103
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
104
+ variant: "flush",
105
+ children: varList
106
+ })
107
+ })]
108
+ })
109
+ })]
110
+ });
111
+ }
112
+ function MultipleSelectionSet(_ref2) {
113
+ let {
114
+ set,
115
+ isActive,
116
+ toggleSet
117
+ } = _ref2;
118
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
119
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
120
+ className: "d-flex",
121
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
122
+ className: "flex-grow-1",
123
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
124
+ type: "button",
125
+ variant: isActive ? "primary" : "outline-primary",
126
+ className: "m-0 p-0 px-1",
127
+ onClick: toggleSet,
128
+ title: set.name,
129
+ children: set.name
130
+ }, set.name)
131
+ })
132
+ })
133
+ });
134
+ }
135
+ function VarSet(_ref3) {
136
+ let {
137
+ set,
138
+ active,
139
+ mode = _constants.SELECTION_MODES.SINGLE
140
+ } = _ref3;
141
+ const dataset = (0, _DatasetContext.useDataset)();
142
+ const dispatch = (0, _DatasetContext.useDatasetDispatch)();
143
+ const selectSet = () => {
144
+ if (mode === _constants.SELECTION_MODES.SINGLE) {
145
+ dispatch({
146
+ type: "select.var",
147
+ var: set
148
+ });
149
+ dispatch({
150
+ type: "set.colorEncoding",
151
+ value: "var"
152
+ });
153
+ } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
154
+ dispatch({
155
+ type: "select.multivar",
156
+ var: set
157
+ });
158
+ }
159
+ };
160
+ const removeSet = () => {
161
+ if (mode === _constants.SELECTION_MODES.SINGLE) {
162
+ if (active === set.name) {
163
+ dispatch({
164
+ type: "reset.var"
165
+ });
166
+ }
167
+ } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
168
+ if (active.includes(set.name)) {
169
+ dispatch({
170
+ type: "deselect.multivar",
171
+ var: set
172
+ });
173
+ }
174
+ }
175
+ dispatch({
176
+ type: "remove.varSet",
177
+ varSet: set
178
+ });
179
+ };
180
+ const removeSetVar = v => {
181
+ dispatch({
182
+ type: "remove.varSet.var",
183
+ varSet: set,
184
+ var: v
185
+ });
186
+ };
187
+ const toggleSet = () => {
188
+ if (active.includes(set.name)) {
189
+ dispatch({
190
+ type: "deselect.multivar",
191
+ var: set
192
+ });
193
+ } else {
194
+ selectSet();
195
+ }
196
+ };
197
+ if (set && mode === _constants.SELECTION_MODES.SINGLE) {
198
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(SingleSelectionSet, {
199
+ set: set,
200
+ isActive: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === set.name,
201
+ selectSet: selectSet,
202
+ removeSet: removeSet,
203
+ removeSetVar: v => removeSetVar(v)
204
+ });
205
+ } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
206
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(MultipleSelectionSet, {
207
+ set: set,
208
+ isActive: _lodash.default.includes(active, set.name),
209
+ toggleSet: () => toggleSet(set)
210
+ });
211
+ } else {
212
+ return null;
213
+ }
214
+ }