@haniffalab/cherita-react 1.2.0-dev.2025-05-21.e8f5ce54 → 1.2.0-dev.2025-05-21.6154c7e3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/controls/Controls.js +60 -0
- package/dist/cjs/components/dotplot/Dotplot.js +29 -22
- package/dist/cjs/components/dotplot/DotplotControls.js +62 -99
- package/dist/cjs/components/full-page/FullPage.js +9 -7
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +9 -7
- package/dist/cjs/components/heatmap/Heatmap.js +22 -13
- package/dist/cjs/components/heatmap/HeatmapControls.js +2 -19
- package/dist/cjs/components/matrixplot/Matrixplot.js +25 -16
- package/dist/cjs/components/matrixplot/MatrixplotControls.js +4 -34
- package/dist/cjs/components/obs-list/ObsItem.js +37 -29
- package/dist/cjs/components/obs-list/ObsList.js +47 -44
- package/dist/cjs/components/obsm-list/ObsmList.js +9 -6
- package/dist/cjs/components/offcanvas/index.js +13 -9
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +61 -53
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +17 -11
- package/dist/cjs/components/scatterplot/Scatterplot.js +52 -52
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +11 -24
- package/dist/cjs/components/scatterplot/SpatialControls.js +4 -4
- package/dist/cjs/components/search-bar/SearchBar.js +12 -10
- package/dist/cjs/components/search-bar/SearchInfo.js +14 -13
- package/dist/cjs/components/search-bar/SearchResults.js +16 -14
- package/dist/cjs/components/var-list/VarItem.js +10 -7
- package/dist/cjs/components/var-list/VarList.js +14 -9
- package/dist/cjs/components/var-list/VarListToolbar.js +1 -2
- package/dist/cjs/components/var-list/VarSet.js +1 -2
- package/dist/cjs/components/violin/Violin.js +48 -39
- package/dist/cjs/components/violin/ViolinControls.js +4 -20
- package/dist/cjs/context/DatasetContext.js +17 -11
- package/dist/cjs/context/FilterContext.js +9 -8
- package/dist/cjs/context/SettingsContext.js +172 -240
- package/dist/cjs/context/ZarrDataContext.js +1 -2
- package/dist/cjs/helpers/color-helper.js +3 -3
- package/dist/cjs/helpers/zarr-helper.js +15 -12
- package/dist/cjs/utils/Filter.js +13 -9
- package/dist/cjs/utils/Histogram.js +4 -3
- package/dist/cjs/utils/ImageViewer.js +1 -2
- package/dist/cjs/utils/Legend.js +3 -3
- package/dist/cjs/utils/LoadingIndicators.js +1 -1
- package/dist/cjs/utils/VirtualizedList.js +16 -13
- package/dist/cjs/utils/errors.js +20 -22
- package/dist/cjs/utils/requests.js +13 -10
- package/dist/cjs/utils/zarrData.js +12 -8
- package/dist/css/cherita.css +13 -9
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/controls/Controls.js +51 -0
- package/dist/esm/components/dotplot/Dotplot.js +28 -20
- package/dist/esm/components/dotplot/DotplotControls.js +62 -97
- package/dist/esm/components/full-page/FullPage.js +8 -5
- package/dist/esm/components/full-page/FullPagePseudospatial.js +8 -5
- package/dist/esm/components/heatmap/Heatmap.js +21 -11
- package/dist/esm/components/heatmap/HeatmapControls.js +3 -20
- package/dist/esm/components/matrixplot/Matrixplot.js +24 -14
- package/dist/esm/components/matrixplot/MatrixplotControls.js +5 -35
- package/dist/esm/components/obs-list/ObsItem.js +36 -27
- package/dist/esm/components/obs-list/ObsList.js +46 -42
- package/dist/esm/components/obsm-list/ObsmList.js +8 -4
- package/dist/esm/components/offcanvas/index.js +13 -9
- package/dist/esm/components/pseudospatial/Pseudospatial.js +60 -51
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +16 -9
- package/dist/esm/components/scatterplot/Scatterplot.js +51 -50
- package/dist/esm/components/scatterplot/ScatterplotControls.js +11 -22
- package/dist/esm/components/scatterplot/SpatialControls.js +3 -2
- package/dist/esm/components/search-bar/SearchBar.js +11 -8
- package/dist/esm/components/search-bar/SearchInfo.js +13 -11
- package/dist/esm/components/search-bar/SearchResults.js +15 -12
- package/dist/esm/components/var-list/VarItem.js +9 -5
- package/dist/esm/components/var-list/VarList.js +13 -7
- package/dist/esm/components/violin/Violin.js +47 -37
- package/dist/esm/components/violin/ViolinControls.js +5 -21
- package/dist/esm/context/DatasetContext.js +16 -9
- package/dist/esm/context/FilterContext.js +8 -6
- package/dist/esm/context/SettingsContext.js +171 -238
- package/dist/esm/helpers/color-helper.js +3 -3
- package/dist/esm/helpers/zarr-helper.js +15 -12
- package/dist/esm/utils/Filter.js +13 -9
- package/dist/esm/utils/Histogram.js +4 -3
- package/dist/esm/utils/Legend.js +2 -1
- package/dist/esm/utils/LoadingIndicators.js +1 -1
- package/dist/esm/utils/VirtualizedList.js +15 -11
- package/dist/esm/utils/errors.js +20 -22
- package/dist/esm/utils/requests.js +13 -10
- package/dist/esm/utils/zarrData.js +12 -8
- package/package.json +4 -2
|
@@ -5,41 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.MatrixplotControls = MatrixplotControls;
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
8
|
var _reactBootstrap = require("react-bootstrap");
|
|
10
|
-
var
|
|
11
|
-
var _constants = require("../../constants/constants");
|
|
12
|
-
var _SettingsContext = require("../../context/SettingsContext");
|
|
9
|
+
var _Controls = require("../controls/Controls");
|
|
13
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
11
|
function MatrixplotControls() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
key: key,
|
|
19
|
-
active: settings.controls.colorScale === key,
|
|
20
|
-
onClick: () => {
|
|
21
|
-
dispatch({
|
|
22
|
-
type: "set.controls.colorScale",
|
|
23
|
-
colorScale: key
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
}, key));
|
|
27
|
-
const standardScaleList = _lodash.default.values(_constants.MATRIXPLOT_SCALES).map(scale => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
28
|
-
key: scale.value,
|
|
29
|
-
active: settings.controls.scale.matrixplot.name === scale.name,
|
|
30
|
-
onClick: () => {
|
|
31
|
-
dispatch({
|
|
32
|
-
type: "set.controls.scale",
|
|
33
|
-
plot: "matrixplot",
|
|
34
|
-
scale: scale
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}, scale.name));
|
|
38
|
-
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonToolbar, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Toggle, {
|
|
39
|
-
id: "dropdownColorscale",
|
|
40
|
-
variant: "light"
|
|
41
|
-
}, settings.controls.colorScale), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, null, colorScaleList))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup.Text, null, "Standard scale"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Toggle, {
|
|
42
|
-
id: "dropdownStandardScale",
|
|
43
|
-
variant: "light"
|
|
44
|
-
}, settings.controls.scale.matrixplot.name), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, null, standardScaleList)))));
|
|
12
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, null, /*#__PURE__*/_react.default.createElement(_Controls.ColorscaleSelect, null), /*#__PURE__*/_react.default.createElement(_Controls.ScaleSelect, {
|
|
13
|
+
plot: "matrixplot"
|
|
14
|
+
})));
|
|
45
15
|
}
|
|
@@ -23,8 +23,12 @@ var _string = require("../../utils/string");
|
|
|
23
23
|
var _VirtualizedList = require("../../utils/VirtualizedList");
|
|
24
24
|
var _zarrData = require("../../utils/zarrData");
|
|
25
25
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
|
-
function
|
|
27
|
-
function
|
|
26
|
+
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); }
|
|
27
|
+
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; }
|
|
28
|
+
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; }
|
|
29
|
+
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
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
31
|
+
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); }
|
|
28
32
|
// const N_BINS = 5;
|
|
29
33
|
|
|
30
34
|
// function binContinuous(data, nBins) {
|
|
@@ -46,9 +50,10 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
46
50
|
// }
|
|
47
51
|
|
|
48
52
|
function getContinuousLabel(code, binEdges) {
|
|
49
|
-
return
|
|
53
|
+
return "[ ".concat((0, _string.formatNumerical)(binEdges[code][0]), ", ").concat((0, _string.formatNumerical)(binEdges[code][1], _string.FORMATS.EXPONENTIAL)).concat(code === binEdges.length - 1 ? " ]" : " )");
|
|
50
54
|
}
|
|
51
55
|
const useObsHistogram = obs => {
|
|
56
|
+
var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedVar9, _settings$selectedVar0, _settings$selectedVar1, _settings$selectedVar10;
|
|
52
57
|
const ENDPOINT = "obs/histograms";
|
|
53
58
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
54
59
|
const settings = (0, _SettingsContext.useSettings)();
|
|
@@ -60,25 +65,25 @@ const useObsHistogram = obs => {
|
|
|
60
65
|
url: dataset.url,
|
|
61
66
|
obsCol: _lodash.default.omit(obs, "omit"),
|
|
62
67
|
// avoid re-rendering when toggling unselected obs
|
|
63
|
-
varKey: settings.selectedVar
|
|
64
|
-
name: settings.selectedVar
|
|
65
|
-
indices: settings.selectedVar
|
|
66
|
-
} : settings.selectedVar
|
|
68
|
+
varKey: (_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet ? {
|
|
69
|
+
name: (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name,
|
|
70
|
+
indices: (_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars.map(v => v.index)
|
|
71
|
+
} : (_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.index,
|
|
67
72
|
obsIndices: isSliced ? [...(obsIndices || [])] : null
|
|
68
73
|
});
|
|
69
74
|
(0, _react.useEffect)(() => {
|
|
70
75
|
setParams(p => {
|
|
71
|
-
|
|
72
|
-
|
|
76
|
+
var _settings$selectedVar5, _settings$selectedVar6, _settings$selectedVar7, _settings$selectedVar8;
|
|
77
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
73
78
|
obsCol: _lodash.default.omit(obs, "omit"),
|
|
74
|
-
varKey: settings.selectedVar
|
|
75
|
-
name: settings.selectedVar
|
|
76
|
-
indices: settings.selectedVar
|
|
77
|
-
} : settings.selectedVar
|
|
79
|
+
varKey: (_settings$selectedVar5 = settings.selectedVar) !== null && _settings$selectedVar5 !== void 0 && _settings$selectedVar5.isSet ? {
|
|
80
|
+
name: (_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.name,
|
|
81
|
+
indices: (_settings$selectedVar7 = settings.selectedVar) === null || _settings$selectedVar7 === void 0 ? void 0 : _settings$selectedVar7.vars.map(v => v.index)
|
|
82
|
+
} : (_settings$selectedVar8 = settings.selectedVar) === null || _settings$selectedVar8 === void 0 ? void 0 : _settings$selectedVar8.index,
|
|
78
83
|
obsIndices: isSliced ? [...(obsIndices || [])] : null
|
|
79
|
-
};
|
|
84
|
+
});
|
|
80
85
|
});
|
|
81
|
-
}, [settings.selectedVar
|
|
86
|
+
}, [(_settings$selectedVar9 = settings.selectedVar) === null || _settings$selectedVar9 === void 0 ? void 0 : _settings$selectedVar9.index, (_settings$selectedVar0 = settings.selectedVar) === null || _settings$selectedVar0 === void 0 ? void 0 : _settings$selectedVar0.isSet, (_settings$selectedVar1 = settings.selectedVar) === null || _settings$selectedVar1 === void 0 ? void 0 : _settings$selectedVar1.name, (_settings$selectedVar10 = settings.selectedVar) === null || _settings$selectedVar10 === void 0 ? void 0 : _settings$selectedVar10.vars, obsIndices, isSliced, obs]);
|
|
82
87
|
return (0, _requests.useFetch)(ENDPOINT, params, {
|
|
83
88
|
enabled: !!settings.selectedVar && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR,
|
|
84
89
|
refetchOnMount: false
|
|
@@ -92,6 +97,7 @@ const getBinIndex = (v, binEdges) => {
|
|
|
92
97
|
return _lodash.default.findIndex(modifiedBinEdges, range => _lodash.default.inRange(v, ...range));
|
|
93
98
|
};
|
|
94
99
|
const useFilteredObsData = obs => {
|
|
100
|
+
var _obs$bins2;
|
|
95
101
|
const {
|
|
96
102
|
obsIndices
|
|
97
103
|
} = (0, _FilterContext.useFilteredData)();
|
|
@@ -107,19 +113,20 @@ const useFilteredObsData = obs => {
|
|
|
107
113
|
valueCounts = _lodash.default.countBy(filteredObsValues);
|
|
108
114
|
} else {
|
|
109
115
|
valueCounts = _lodash.default.countBy(filteredObsValues, v => {
|
|
110
|
-
|
|
116
|
+
var _obs$bins;
|
|
117
|
+
return getBinIndex(v, ((_obs$bins = obs.bins) === null || _obs$bins === void 0 ? void 0 : _obs$bins.binEdges) || [[null, null]]);
|
|
111
118
|
});
|
|
112
119
|
}
|
|
113
120
|
valueCounts = _lodash.default.mapKeys(valueCounts, (_v, i) => {
|
|
114
121
|
return obs.codesMap[i];
|
|
115
122
|
});
|
|
116
|
-
const totalCounts = obsIndices
|
|
123
|
+
const totalCounts = obsIndices === null || obsIndices === void 0 ? void 0 : obsIndices.size;
|
|
117
124
|
const pct = _lodash.default.mapValues(valueCounts, v => v / totalCounts * 100);
|
|
118
125
|
return {
|
|
119
126
|
valueCounts,
|
|
120
127
|
pct
|
|
121
128
|
};
|
|
122
|
-
}, [isCategorical, obs.bins
|
|
129
|
+
}, [isCategorical, (_obs$bins2 = obs.bins) === null || _obs$bins2 === void 0 ? void 0 : _obs$bins2.binEdges, obs.codesMap, obsData.data, obsIndices]);
|
|
123
130
|
return {
|
|
124
131
|
value_counts: valueCounts,
|
|
125
132
|
pct: pct
|
|
@@ -179,7 +186,7 @@ function CategoricalItem(_ref) {
|
|
|
179
186
|
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
180
187
|
className: "pl-1 m-0"
|
|
181
188
|
}, /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
|
|
182
|
-
title: isSliced ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Filtered:", " ", (0, _string.formatNumerical)(filteredStats.pct, _string.FORMATS.EXPONENTIAL), "%", /*#__PURE__*/_react.default.createElement("br", null), "Total: ", (0, _string.formatNumerical)(stats.pct, _string.FORMATS.EXPONENTIAL), "%") :
|
|
189
|
+
title: isSliced ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Filtered:", " ", (0, _string.formatNumerical)(filteredStats.pct, _string.FORMATS.EXPONENTIAL), "%", /*#__PURE__*/_react.default.createElement("br", null), "Total: ", (0, _string.formatNumerical)(stats.pct, _string.FORMATS.EXPONENTIAL), "%") : "".concat((0, _string.formatNumerical)(stats.pct, _string.FORMATS.EXPONENTIAL), "%"),
|
|
183
190
|
placement: "left",
|
|
184
191
|
arrow: true
|
|
185
192
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -234,7 +241,7 @@ function CategoricalItem(_ref) {
|
|
|
234
241
|
y: "0",
|
|
235
242
|
width: "10",
|
|
236
243
|
height: "10",
|
|
237
|
-
fill:
|
|
244
|
+
fill: "rgb(".concat(getColor({
|
|
238
245
|
value: (code - min) / (max - min),
|
|
239
246
|
categorical: true,
|
|
240
247
|
grayOut: isOmitted,
|
|
@@ -242,7 +249,7 @@ function CategoricalItem(_ref) {
|
|
|
242
249
|
alpha: 1
|
|
243
250
|
},
|
|
244
251
|
colorEncoding: "obs"
|
|
245
|
-
})
|
|
252
|
+
}), ")")
|
|
246
253
|
}))) : null))));
|
|
247
254
|
}
|
|
248
255
|
function CategoricalObs(_ref2) {
|
|
@@ -262,6 +269,7 @@ function CategoricalObs(_ref2) {
|
|
|
262
269
|
const obsHistograms = useObsHistogram(obs);
|
|
263
270
|
const filteredObsData = useFilteredObsData(obs);
|
|
264
271
|
const getDataAtIndex = (0, _react.useCallback)(index => {
|
|
272
|
+
var _obsHistograms$fetche;
|
|
265
273
|
return {
|
|
266
274
|
value: obs.values[index],
|
|
267
275
|
code: obs.codes[obs.values[index]],
|
|
@@ -272,7 +280,7 @@ function CategoricalObs(_ref2) {
|
|
|
272
280
|
isOmitted: _lodash.default.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
273
281
|
label: obs.values[index],
|
|
274
282
|
histogramData: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
275
|
-
data: obsHistograms.fetchedData
|
|
283
|
+
data: (_obsHistograms$fetche = obsHistograms.fetchedData) === null || _obsHistograms$fetche === void 0 ? void 0 : _obsHistograms$fetche[obs.values[index]],
|
|
276
284
|
isPending: obsHistograms.isPending,
|
|
277
285
|
altColor: isSliced
|
|
278
286
|
} : {
|
|
@@ -280,12 +288,12 @@ function CategoricalObs(_ref2) {
|
|
|
280
288
|
isPending: false
|
|
281
289
|
},
|
|
282
290
|
filteredStats: {
|
|
283
|
-
value_counts: filteredObsData
|
|
284
|
-
pct: filteredObsData
|
|
291
|
+
value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
|
|
292
|
+
pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
|
|
285
293
|
},
|
|
286
294
|
isSliced: isSliced
|
|
287
295
|
};
|
|
288
|
-
}, [settings.colorEncoding, filteredObsData
|
|
296
|
+
}, [settings.colorEncoding, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, isSliced, obs.codes, obs.omit, obs.value_counts, obs.values, obsHistograms.fetchedData, obsHistograms.isPending, totalCounts]);
|
|
289
297
|
showColor &= settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS;
|
|
290
298
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
291
299
|
variant: "flush",
|
|
@@ -348,9 +356,9 @@ function ObsContinuousStats(_ref3) {
|
|
|
348
356
|
},
|
|
349
357
|
xAxis: {
|
|
350
358
|
data: fetchedData.kde_values[0],
|
|
351
|
-
valueFormatter: v =>
|
|
359
|
+
valueFormatter: v => "".concat((0, _string.formatNumerical)(v, _string.FORMATS.EXPONENTIAL))
|
|
352
360
|
},
|
|
353
|
-
valueFormatter: v =>
|
|
361
|
+
valueFormatter: v => "".concat((0, _string.formatNumerical)(v, _string.FORMATS.EXPONENTIAL)),
|
|
354
362
|
slotProps: {
|
|
355
363
|
popper: {
|
|
356
364
|
className: "feature-histogram-tooltip"
|
|
@@ -395,8 +403,8 @@ function ContinuousObs(_ref4) {
|
|
|
395
403
|
isOmitted: _lodash.default.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
396
404
|
label: isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges),
|
|
397
405
|
filteredStats: {
|
|
398
|
-
value_counts: filteredObsData
|
|
399
|
-
pct: filteredObsData
|
|
406
|
+
value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
|
|
407
|
+
pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
|
|
400
408
|
},
|
|
401
409
|
isSliced: isSliced
|
|
402
410
|
};
|
|
@@ -22,8 +22,12 @@ var _SettingsContext = require("../../context/SettingsContext");
|
|
|
22
22
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
23
23
|
var _requests = require("../../utils/requests");
|
|
24
24
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
|
-
function
|
|
26
|
-
function
|
|
25
|
+
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); }
|
|
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; }
|
|
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; }
|
|
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
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
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); }
|
|
27
31
|
const ObsAccordionToggle = _ref => {
|
|
28
32
|
let {
|
|
29
33
|
children,
|
|
@@ -38,7 +42,7 @@ const ObsAccordionToggle = _ref => {
|
|
|
38
42
|
handleAccordionToggle(eventKey, isCurrentEventKey);
|
|
39
43
|
});
|
|
40
44
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
41
|
-
className:
|
|
45
|
+
className: "obs-accordion-header ".concat(isCurrentEventKey ? "active" : ""),
|
|
42
46
|
onClick: decoratedOnClick
|
|
43
47
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
44
48
|
className: "obs-accordion-header-chevron"
|
|
@@ -49,6 +53,7 @@ const ObsAccordionToggle = _ref => {
|
|
|
49
53
|
}, children));
|
|
50
54
|
};
|
|
51
55
|
function ObsColsList(_ref2) {
|
|
56
|
+
var _settings$selectedObs;
|
|
52
57
|
let {
|
|
53
58
|
showColor = true,
|
|
54
59
|
enableObsGroups = true
|
|
@@ -59,20 +64,21 @@ function ObsColsList(_ref2) {
|
|
|
59
64
|
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
60
65
|
const [enableGroups, setEnableGroups] = (0, _react.useState)(enableObsGroups);
|
|
61
66
|
const [obsCols, setObsCols] = (0, _react.useState)(null);
|
|
62
|
-
const [active, setActive] = (0, _react.useState)([...[settings.selectedObs
|
|
67
|
+
const [active, setActive] = (0, _react.useState)([...[(_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.name]]);
|
|
63
68
|
const [params, setParams] = (0, _react.useState)({
|
|
64
69
|
url: dataset.url
|
|
65
70
|
});
|
|
66
|
-
const obsGroups = (0, _react.useMemo)(() =>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
const obsGroups = (0, _react.useMemo)(() => {
|
|
72
|
+
var _dataset$obsGroups;
|
|
73
|
+
return _objectSpread({
|
|
74
|
+
default: _lodash.default.union(_constants.DEFAULT_OBS_GROUP, (_dataset$obsGroups = dataset.obsGroups) === null || _dataset$obsGroups === void 0 ? void 0 : _dataset$obsGroups.default)
|
|
75
|
+
}, _lodash.default.omit(dataset.obsGroups, "default"));
|
|
76
|
+
}, [dataset.obsGroups]);
|
|
70
77
|
(0, _react.useEffect)(() => {
|
|
71
78
|
setParams(p => {
|
|
72
|
-
return {
|
|
73
|
-
...p,
|
|
79
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
74
80
|
url: dataset.url
|
|
75
|
-
};
|
|
81
|
+
});
|
|
76
82
|
});
|
|
77
83
|
}, [dataset.url]);
|
|
78
84
|
const {
|
|
@@ -93,7 +99,7 @@ function ObsColsList(_ref2) {
|
|
|
93
99
|
});
|
|
94
100
|
if (!!filteredData.length && !groupFiltered.length) {
|
|
95
101
|
setEnableGroups(false);
|
|
96
|
-
console.warn(
|
|
102
|
+
console.warn("No obs found in obsGroups ".concat(JSON.stringify(obsGroups), ", disabling obsGroups"));
|
|
97
103
|
} else {
|
|
98
104
|
filteredData = groupFiltered;
|
|
99
105
|
}
|
|
@@ -104,17 +110,17 @@ function ObsColsList(_ref2) {
|
|
|
104
110
|
return d.type !== _constants.OBS_TYPES.DISCRETE;
|
|
105
111
|
});
|
|
106
112
|
setObsCols(_lodash.default.keyBy(_lodash.default.map(filteredData, d => {
|
|
107
|
-
return {
|
|
108
|
-
...d,
|
|
113
|
+
return _objectSpread(_objectSpread({}, d), {}, {
|
|
109
114
|
codesMap: _lodash.default.invert(d.codes),
|
|
110
115
|
omit: []
|
|
111
|
-
};
|
|
116
|
+
});
|
|
112
117
|
}), "name"));
|
|
113
118
|
}
|
|
114
119
|
}, [fetchedData, isPending, obsGroups, serverError, enableGroups]);
|
|
115
120
|
(0, _react.useEffect)(() => {
|
|
116
121
|
if (obsCols) {
|
|
117
|
-
|
|
122
|
+
var _settings$selectedObs2;
|
|
123
|
+
if (!obsCols[(_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.name]) {
|
|
118
124
|
setActive([]);
|
|
119
125
|
dispatch({
|
|
120
126
|
type: "select.obs",
|
|
@@ -131,23 +137,21 @@ function ObsColsList(_ref2) {
|
|
|
131
137
|
}
|
|
132
138
|
};
|
|
133
139
|
const toggleAll = item => {
|
|
140
|
+
var _settings$selectedObs3;
|
|
134
141
|
const omit = item.omit.length ? [] : _lodash.default.map(item.values, v => item.codes[v]);
|
|
135
142
|
setObsCols(o => {
|
|
136
|
-
return {
|
|
137
|
-
|
|
138
|
-
[item.name]: {
|
|
139
|
-
...item,
|
|
143
|
+
return _objectSpread(_objectSpread({}, o), {}, {
|
|
144
|
+
[item.name]: _objectSpread(_objectSpread({}, item), {}, {
|
|
140
145
|
omit: omit
|
|
141
|
-
}
|
|
142
|
-
};
|
|
146
|
+
})
|
|
147
|
+
});
|
|
143
148
|
});
|
|
144
|
-
if (settings.selectedObs
|
|
149
|
+
if (((_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.name) === item.name) {
|
|
145
150
|
dispatch({
|
|
146
151
|
type: "select.obs",
|
|
147
|
-
obs: {
|
|
148
|
-
...item,
|
|
152
|
+
obs: _objectSpread(_objectSpread({}, item), {}, {
|
|
149
153
|
omit: omit
|
|
150
|
-
}
|
|
154
|
+
})
|
|
151
155
|
});
|
|
152
156
|
}
|
|
153
157
|
};
|
|
@@ -186,6 +190,7 @@ function ObsColsList(_ref2) {
|
|
|
186
190
|
});
|
|
187
191
|
};
|
|
188
192
|
const toggleObs = (item, value) => {
|
|
193
|
+
var _settings$selectedObs4;
|
|
189
194
|
let omit;
|
|
190
195
|
if (_lodash.default.includes(item.omit, item.codes[value])) {
|
|
191
196
|
omit = item.omit.filter(i => i !== item.codes[value]);
|
|
@@ -193,25 +198,23 @@ function ObsColsList(_ref2) {
|
|
|
193
198
|
omit = [...item.omit, item.codes[value]];
|
|
194
199
|
}
|
|
195
200
|
setObsCols(o => {
|
|
196
|
-
return {
|
|
197
|
-
|
|
198
|
-
[item.name]: {
|
|
199
|
-
...item,
|
|
201
|
+
return _objectSpread(_objectSpread({}, o), {}, {
|
|
202
|
+
[item.name]: _objectSpread(_objectSpread({}, item), {}, {
|
|
200
203
|
omit: omit
|
|
201
|
-
}
|
|
202
|
-
};
|
|
204
|
+
})
|
|
205
|
+
});
|
|
203
206
|
});
|
|
204
|
-
if (settings.selectedObs
|
|
207
|
+
if (((_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.name) === item.name) {
|
|
205
208
|
dispatch({
|
|
206
209
|
type: "select.obs",
|
|
207
|
-
obs: {
|
|
208
|
-
...item,
|
|
210
|
+
obs: _objectSpread(_objectSpread({}, item), {}, {
|
|
209
211
|
omit: omit
|
|
210
|
-
}
|
|
212
|
+
})
|
|
211
213
|
});
|
|
212
214
|
}
|
|
213
215
|
};
|
|
214
216
|
const obsItem = item => {
|
|
217
|
+
var _settings$selectedObs5, _settings$selectedObs6;
|
|
215
218
|
if (!item) {
|
|
216
219
|
return null;
|
|
217
220
|
}
|
|
@@ -219,8 +222,8 @@ function ObsColsList(_ref2) {
|
|
|
219
222
|
return null;
|
|
220
223
|
}
|
|
221
224
|
const inLabelObs = _lodash.default.some(settings.labelObs, i => i.name === item.name);
|
|
222
|
-
const inSliceObs = settings.sliceBy.obs && settings.selectedObs
|
|
223
|
-
const isColorEncoding = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && settings.selectedObs
|
|
225
|
+
const inSliceObs = settings.sliceBy.obs && ((_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.name) === item.name;
|
|
226
|
+
const isColorEncoding = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name;
|
|
224
227
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
225
228
|
className: "accordion-item",
|
|
226
229
|
key: item.name
|
|
@@ -228,21 +231,21 @@ function ObsColsList(_ref2) {
|
|
|
228
231
|
eventKey: item.name,
|
|
229
232
|
handleAccordionToggle: handleAccordionToggle
|
|
230
233
|
}, /*#__PURE__*/_react.default.createElement("div", null, item.name), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("span", {
|
|
231
|
-
className:
|
|
234
|
+
className: "mx-1 cursor-pointer ".concat(inLabelObs ? "active-icon" : "text-muted opacity-50"),
|
|
232
235
|
onClick: event => {
|
|
233
236
|
event.stopPropagation();
|
|
234
237
|
toggleLabel(item);
|
|
235
238
|
},
|
|
236
239
|
title: "Add to tooltip"
|
|
237
240
|
}, /*#__PURE__*/_react.default.createElement(_Comment.default, null)), /*#__PURE__*/_react.default.createElement("span", {
|
|
238
|
-
className:
|
|
241
|
+
className: "mx-1 cursor-pointer ".concat(inSliceObs ? "active-icon" : "text-muted opacity-50"),
|
|
239
242
|
onClick: event => {
|
|
240
243
|
event.stopPropagation();
|
|
241
244
|
toggleSlice(item);
|
|
242
245
|
},
|
|
243
246
|
title: "Filter applied"
|
|
244
247
|
}, /*#__PURE__*/_react.default.createElement(_JoinInner.default, null)), /*#__PURE__*/_react.default.createElement("span", {
|
|
245
|
-
className:
|
|
248
|
+
className: "mx-1 cursor-pointer ".concat(isColorEncoding ? "active-icon" : "text-muted opacity-50"),
|
|
246
249
|
onClick: event => {
|
|
247
250
|
event.stopPropagation();
|
|
248
251
|
toggleColor(item);
|
|
@@ -272,9 +275,9 @@ function ObsColsList(_ref2) {
|
|
|
272
275
|
})))));
|
|
273
276
|
};
|
|
274
277
|
const groupList = _lodash.default.map(_lodash.default.keys(obsGroups), group => {
|
|
275
|
-
const key =
|
|
278
|
+
const key = "group-".concat(group);
|
|
276
279
|
const groupItems = _lodash.default.compact(_lodash.default.map(_lodash.default.sortBy(obsGroups[group], o => _lodash.default.lowerCase(o.name)), item => {
|
|
277
|
-
return obsItem(obsCols
|
|
280
|
+
return obsItem(obsCols === null || obsCols === void 0 ? void 0 : obsCols[item]);
|
|
278
281
|
}));
|
|
279
282
|
if (group === "default") {
|
|
280
283
|
return groupItems;
|
|
@@ -291,7 +294,7 @@ function ObsColsList(_ref2) {
|
|
|
291
294
|
}
|
|
292
295
|
});
|
|
293
296
|
const obsList = enableGroups ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, groupList) : _lodash.default.map(_lodash.default.sortBy(obsCols, o => _lodash.default.lowerCase(o.name)), item => obsItem(item));
|
|
294
|
-
const defaultActiveGroup = enableGroups ?
|
|
297
|
+
const defaultActiveGroup = enableGroups ? "group-".concat(_lodash.default.findKey(obsGroups, g => g.includes(active === null || active === void 0 ? void 0 : active[0]))) : null;
|
|
295
298
|
if (!serverError) {
|
|
296
299
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
297
300
|
className: "position-relative h-100"
|
|
@@ -10,8 +10,12 @@ var _DatasetContext = require("../../context/DatasetContext");
|
|
|
10
10
|
var _SettingsContext = require("../../context/SettingsContext");
|
|
11
11
|
var _requests = require("../../utils/requests");
|
|
12
12
|
var _Skeleton = require("../../utils/Skeleton");
|
|
13
|
-
function
|
|
14
|
-
function
|
|
13
|
+
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); }
|
|
14
|
+
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; }
|
|
15
|
+
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; }
|
|
16
|
+
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; }
|
|
17
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
18
|
+
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); }
|
|
15
19
|
function ObsmKeysList() {
|
|
16
20
|
const ENDPOINT = "obsm/keys";
|
|
17
21
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -24,10 +28,9 @@ function ObsmKeysList() {
|
|
|
24
28
|
});
|
|
25
29
|
(0, _react.useEffect)(() => {
|
|
26
30
|
setParams(p => {
|
|
27
|
-
return {
|
|
28
|
-
...p,
|
|
31
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
29
32
|
url: dataset.url
|
|
30
|
-
};
|
|
33
|
+
});
|
|
31
34
|
});
|
|
32
35
|
}, [dataset.url]);
|
|
33
36
|
const {
|
|
@@ -50,7 +53,7 @@ function ObsmKeysList() {
|
|
|
50
53
|
const obsmList = obsmKeysList.map(item => {
|
|
51
54
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
52
55
|
key: item,
|
|
53
|
-
className:
|
|
56
|
+
className: "custom ".concat(active === item && "active"),
|
|
54
57
|
onClick: () => {
|
|
55
58
|
dispatch({
|
|
56
59
|
type: "select.obsm",
|
|
@@ -14,13 +14,17 @@ var _ObsList = require("../obs-list/ObsList");
|
|
|
14
14
|
var _ObsmList = require("../obsm-list/ObsmList");
|
|
15
15
|
var _SearchBar = require("../search-bar/SearchBar");
|
|
16
16
|
var _VarList = require("../var-list/VarList");
|
|
17
|
+
const _excluded = ["show", "handleClose"],
|
|
18
|
+
_excluded2 = ["show", "handleClose", "Controls"];
|
|
17
19
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
21
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
18
22
|
function OffcanvasObs(_ref) {
|
|
19
23
|
let {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
show,
|
|
25
|
+
handleClose
|
|
26
|
+
} = _ref,
|
|
27
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
24
28
|
return /*#__PURE__*/_react.default.createElement(_Offcanvas.default, {
|
|
25
29
|
show: show,
|
|
26
30
|
onHide: handleClose,
|
|
@@ -62,11 +66,11 @@ function OffcanvasVars(_ref3) {
|
|
|
62
66
|
}
|
|
63
67
|
function OffcanvasControls(_ref4) {
|
|
64
68
|
let {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
show,
|
|
70
|
+
handleClose,
|
|
71
|
+
Controls
|
|
72
|
+
} = _ref4,
|
|
73
|
+
props = _objectWithoutProperties(_ref4, _excluded2);
|
|
70
74
|
return /*#__PURE__*/_react.default.createElement(_Offcanvas.default, {
|
|
71
75
|
show: show,
|
|
72
76
|
onHide: handleClose
|