@haniffalab/cherita-react 0.1.0 → 0.1.2

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.
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Dotplot = Dotplot;
8
+ exports.DotplotControls = DotplotControls;
9
+ require("bootstrap/dist/css/bootstrap.min.css");
10
+ var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
11
+ var _react = require("react");
12
+ var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
13
+ var _DatasetContext = require("./DatasetContext");
14
+ var _constants = require("./lib/constants/constants");
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
20
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
21
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
22
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
24
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
25
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
26
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
+ function DotplotControls() {
28
+ var dataset = (0, _DatasetContext.useDataset)();
29
+ var dispatch = (0, _DatasetContext.useDatasetDispatch)();
30
+ var _useState = (0, _react.useState)(dataset.colorscale),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ active = _useState2[0],
33
+ setActive = _useState2[1];
34
+ (0, _react.useEffect)(function () {
35
+ setActive(dataset.colorscale);
36
+ }, [dataset.colorscale]);
37
+ var colormapList = _constants.PLOTLY_COLORSCALES.map(function (item) {
38
+ return /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
39
+ key: item,
40
+ active: active === item,
41
+ onClick: function onClick() {
42
+ dispatch({
43
+ type: "colorscaleSelected",
44
+ colorscale: item
45
+ });
46
+ }
47
+ }, item);
48
+ });
49
+ return /*#__PURE__*/_react.React.createElement(_Dropdown.default, null, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Toggle, {
50
+ id: "dropdownColorscale",
51
+ variant: "light"
52
+ }, dataset.colorscale), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Menu, null, colormapList));
53
+ }
54
+ function Dotplot() {
55
+ var dataset = (0, _DatasetContext.useDataset)();
56
+ var colorscale = (0, _react.useRef)(dataset.colorscale);
57
+ var _useState3 = (0, _react.useState)([]),
58
+ _useState4 = _slicedToArray(_useState3, 2),
59
+ data = _useState4[0],
60
+ setData = _useState4[1];
61
+ var _useState5 = (0, _react.useState)({}),
62
+ _useState6 = _slicedToArray(_useState5, 2),
63
+ layout = _useState6[0],
64
+ setLayout = _useState6[1];
65
+ var _useState7 = (0, _react.useState)(false),
66
+ _useState8 = _slicedToArray(_useState7, 2),
67
+ hasSelections = _useState8[0],
68
+ setHasSelections = _useState8[1];
69
+ var updateColorscale = (0, _react.useCallback)(function (colorscale) {
70
+ setLayout(function (l) {
71
+ return _objectSpread(_objectSpread({}, l), {}, {
72
+ coloraxis: _objectSpread(_objectSpread({}, l.coloraxis), {}, {
73
+ colorscale: colorscale
74
+ })
75
+ });
76
+ });
77
+ }, []);
78
+ (0, _react.useEffect)(function () {
79
+ if (dataset.selectedObs && dataset.selectedMultiVar.length) {
80
+ setHasSelections(true);
81
+ fetch(new URL("dotplot", process.env.REACT_APP_API_URL), {
82
+ method: "POST",
83
+ mode: "cors",
84
+ headers: {
85
+ "Content-Type": "application/json",
86
+ Accept: "application/json"
87
+ },
88
+ body: JSON.stringify({
89
+ url: dataset.url,
90
+ selectedObs: dataset.selectedObs,
91
+ selectedMultiVar: dataset.selectedMultiVar
92
+ })
93
+ }).then(function (response) {
94
+ return response.json();
95
+ }).then(function (data) {
96
+ setData(data.data);
97
+ setLayout(data.layout);
98
+ updateColorscale(colorscale.current);
99
+ });
100
+ } else {
101
+ setHasSelections(false);
102
+ }
103
+ }, [dataset.url, dataset.selectedObs, dataset.selectedMultiVar, updateColorscale]);
104
+ (0, _react.useEffect)(function () {
105
+ console.log("update colorscale");
106
+ colorscale.current = dataset.colorscale;
107
+ updateColorscale(colorscale.current);
108
+ }, [dataset.colorscale, updateColorscale]);
109
+ if (hasSelections) {
110
+ return /*#__PURE__*/_react.React.createElement("div", {
111
+ className: "container text-center"
112
+ }, /*#__PURE__*/_react.React.createElement("h5", null, dataset.url), /*#__PURE__*/_react.React.createElement(DotplotControls, null), /*#__PURE__*/_react.React.createElement(_reactPlotly.default, {
113
+ data: data,
114
+ layout: layout,
115
+ useResizeHandler: true,
116
+ style: {
117
+ width: "100%",
118
+ height: "100%"
119
+ }
120
+ }));
121
+ }
122
+ return /*#__PURE__*/_react.React.createElement("div", {
123
+ className: "h-100"
124
+ }, /*#__PURE__*/_react.React.createElement("h5", null, dataset.url), /*#__PURE__*/_react.React.createElement("p", null, "Select OBS and VAR"));
125
+ }
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.Heatmap = Heatmap;
8
+ exports.HeatmapControls = HeatmapControls;
9
+ require("bootstrap/dist/css/bootstrap.min.css");
10
+ var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
11
+ var _react = require("react");
12
+ var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
13
+ var _DatasetContext = require("./DatasetContext");
14
+ var _constants = require("./lib/constants/constants");
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
20
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
21
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
22
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
24
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
25
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
26
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
+ function HeatmapControls() {
28
+ var dataset = (0, _DatasetContext.useDataset)();
29
+ var dispatch = (0, _DatasetContext.useDatasetDispatch)();
30
+ var _useState = (0, _react.useState)(dataset.colorscale),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ active = _useState2[0],
33
+ setActive = _useState2[1];
34
+ (0, _react.useEffect)(function () {
35
+ setActive(dataset.colorscale);
36
+ }, [dataset.colorscale]);
37
+ var colormapList = _constants.PLOTLY_COLORSCALES.map(function (item) {
38
+ return /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
39
+ key: item,
40
+ active: active === item,
41
+ onClick: function onClick() {
42
+ dispatch({
43
+ type: "colorscaleSelected",
44
+ colorscale: item
45
+ });
46
+ }
47
+ }, item);
48
+ });
49
+ return /*#__PURE__*/_react.React.createElement(_Dropdown.default, null, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Toggle, {
50
+ id: "dropdownColorscale",
51
+ variant: "light"
52
+ }, dataset.colorscale), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Menu, null, colormapList));
53
+ }
54
+ function Heatmap() {
55
+ var dataset = (0, _DatasetContext.useDataset)();
56
+ var colorscale = (0, _react.useRef)(dataset.colorscale);
57
+ var _useState3 = (0, _react.useState)([]),
58
+ _useState4 = _slicedToArray(_useState3, 2),
59
+ data = _useState4[0],
60
+ setData = _useState4[1];
61
+ var _useState5 = (0, _react.useState)({}),
62
+ _useState6 = _slicedToArray(_useState5, 2),
63
+ layout = _useState6[0],
64
+ setLayout = _useState6[1];
65
+ var _useState7 = (0, _react.useState)(false),
66
+ _useState8 = _slicedToArray(_useState7, 2),
67
+ hasSelections = _useState8[0],
68
+ setHasSelections = _useState8[1];
69
+ var updateColorscale = (0, _react.useCallback)(function (colorscale) {
70
+ setData(function (d) {
71
+ return d.map(function (i) {
72
+ return _objectSpread(_objectSpread({}, i), {}, {
73
+ colorscale: colorscale
74
+ });
75
+ });
76
+ });
77
+ }, []);
78
+ (0, _react.useEffect)(function () {
79
+ if (dataset.selectedObs && dataset.selectedMultiVar.length) {
80
+ setHasSelections(true);
81
+ fetch(new URL("heatmap", process.env.REACT_APP_API_URL), {
82
+ method: "POST",
83
+ mode: "cors",
84
+ headers: {
85
+ "Content-Type": "application/json",
86
+ Accept: "application/json"
87
+ },
88
+ body: JSON.stringify({
89
+ url: dataset.url,
90
+ selectedObs: dataset.selectedObs,
91
+ selectedMultiVar: dataset.selectedMultiVar
92
+ })
93
+ }).then(function (response) {
94
+ return response.json();
95
+ }).then(function (data) {
96
+ setData(data.data);
97
+ setLayout(data.layout);
98
+ updateColorscale(colorscale.current);
99
+ });
100
+ } else {
101
+ setHasSelections(false);
102
+ }
103
+ }, [dataset.url, dataset.selectedObs, dataset.selectedMultiVar, updateColorscale]);
104
+ (0, _react.useEffect)(function () {
105
+ console.log("update colorscale");
106
+ colorscale.current = dataset.colorscale;
107
+ updateColorscale(colorscale.current);
108
+ }, [dataset.colorscale, updateColorscale]);
109
+ if (hasSelections) {
110
+ return /*#__PURE__*/_react.React.createElement("div", {
111
+ className: "container text-center"
112
+ }, /*#__PURE__*/_react.React.createElement("h5", null, dataset.url), /*#__PURE__*/_react.React.createElement(HeatmapControls, null), /*#__PURE__*/_react.React.createElement(_reactPlotly.default, {
113
+ data: data,
114
+ layout: layout,
115
+ useResizeHandler: true,
116
+ style: {
117
+ width: "100%",
118
+ height: "100%"
119
+ }
120
+ }));
121
+ }
122
+ return /*#__PURE__*/_react.React.createElement("div", {
123
+ className: "h-100"
124
+ }, /*#__PURE__*/_react.React.createElement("h5", null, dataset.url), /*#__PURE__*/_react.React.createElement("p", null, "Select OBS and VAR"));
125
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ObsColsList = ObsColsList;
7
+ require("bootstrap/dist/css/bootstrap.min.css");
8
+ require("bootstrap/dist/js/bootstrap.bundle.min.js");
9
+ var _react = require("react");
10
+ var _DatasetContext = require("./DatasetContext");
11
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
12
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
15
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
16
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
17
+ function ObsColsList() {
18
+ var dataset = (0, _DatasetContext.useDataset)();
19
+ var dispatch = (0, _DatasetContext.useDatasetDispatch)();
20
+ var _useState = (0, _react.useState)([]),
21
+ _useState2 = _slicedToArray(_useState, 2),
22
+ obsColsList = _useState2[0],
23
+ setObsColsList = _useState2[1];
24
+ var _useState3 = (0, _react.useState)(null),
25
+ _useState4 = _slicedToArray(_useState3, 2),
26
+ active = _useState4[0],
27
+ setActive = _useState4[1];
28
+ (0, _react.useEffect)(function () {
29
+ fetch(new URL("obs/cols", process.env.REACT_APP_API_URL), {
30
+ method: "POST",
31
+ mode: "cors",
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ Accept: "application/json"
35
+ },
36
+ body: JSON.stringify({
37
+ url: dataset.url
38
+ })
39
+ }).then(function (response) {
40
+ return response.json();
41
+ }).then(function (data) {
42
+ setObsColsList(data);
43
+ });
44
+ }, [dataset.url]);
45
+ (0, _react.useEffect)(function () {
46
+ setActive(dataset.selectedObs);
47
+ }, [dataset.selectedObs]);
48
+ var obsList = obsColsList.map(function (item) {
49
+ return /*#__PURE__*/_react.React.createElement("button", {
50
+ type: "button",
51
+ key: item,
52
+ className: "list-group-item list-grou-item-action ".concat(active === item && "active"),
53
+ onClick: function onClick() {
54
+ dispatch({
55
+ type: "obsSelected",
56
+ obs: item
57
+ });
58
+ }
59
+ }, item);
60
+ });
61
+ return /*#__PURE__*/_react.React.createElement("div", {
62
+ className: "h-100"
63
+ }, /*#__PURE__*/_react.React.createElement("h5", null, dataset.url), /*#__PURE__*/_react.React.createElement("div", {
64
+ className: "list-group overflow-auto mh-100"
65
+ }, obsList));
66
+ }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MultiVarNamesList = MultiVarNamesList;
7
+ exports.VarNamesList = VarNamesList;
8
+ require("bootstrap/dist/css/bootstrap.min.css");
9
+ var _react = require("react");
10
+ var _DatasetContext = require("./DatasetContext");
11
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
12
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
15
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
16
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
17
+ function VarNamesList() {
18
+ var dataset = (0, _DatasetContext.useDataset)();
19
+ var dispatch = (0, _DatasetContext.useDatasetDispatch)();
20
+ var _useState = (0, _react.useState)([]),
21
+ _useState2 = _slicedToArray(_useState, 2),
22
+ varNames = _useState2[0],
23
+ setVarNames = _useState2[1];
24
+ var _useState3 = (0, _react.useState)([]),
25
+ _useState4 = _slicedToArray(_useState3, 2),
26
+ active = _useState4[0],
27
+ setActive = _useState4[1];
28
+ (0, _react.useEffect)(function () {
29
+ fetch(new URL("var/names", process.env.REACT_APP_API_URL), {
30
+ method: "POST",
31
+ mode: "cors",
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ Accept: "application/json"
35
+ },
36
+ body: JSON.stringify({
37
+ url: dataset.url
38
+ })
39
+ }).then(function (response) {
40
+ return response.json();
41
+ }).then(function (data) {
42
+ setVarNames(data);
43
+ });
44
+ }, [dataset.url]);
45
+ (0, _react.useEffect)(function () {
46
+ setActive(dataset.selectedVar);
47
+ }, [dataset.selectedVar]);
48
+ var varList = varNames.map(function (item) {
49
+ return /*#__PURE__*/_react.React.createElement("button", {
50
+ type: "button",
51
+ key: item,
52
+ className: "list-group-item list-grou-item-action ".concat(active === item && "active"),
53
+ onClick: function onClick() {
54
+ dispatch({
55
+ type: "varSelected",
56
+ var: item
57
+ });
58
+ }
59
+ }, item);
60
+ });
61
+ return /*#__PURE__*/_react.React.createElement("div", {
62
+ className: "h-100"
63
+ }, /*#__PURE__*/_react.React.createElement("h5", null, dataset.url), /*#__PURE__*/_react.React.createElement("div", {
64
+ className: "list-group overflow-auto mh-100"
65
+ }, varList));
66
+ }
67
+ function MultiVarNamesList() {
68
+ var dataset = (0, _DatasetContext.useDataset)();
69
+ var dispatch = (0, _DatasetContext.useDatasetDispatch)();
70
+ var _useState5 = (0, _react.useState)([]),
71
+ _useState6 = _slicedToArray(_useState5, 2),
72
+ varNames = _useState6[0],
73
+ setVarNames = _useState6[1];
74
+ var _useState7 = (0, _react.useState)([]),
75
+ _useState8 = _slicedToArray(_useState7, 2),
76
+ active = _useState8[0],
77
+ setActive = _useState8[1];
78
+ (0, _react.useEffect)(function () {
79
+ fetch(new URL("var/names", process.env.REACT_APP_API_URL), {
80
+ method: "POST",
81
+ mode: "cors",
82
+ headers: {
83
+ "Content-Type": "application/json",
84
+ Accept: "application/json"
85
+ },
86
+ body: JSON.stringify({
87
+ url: dataset.url
88
+ })
89
+ }).then(function (response) {
90
+ return response.json();
91
+ }).then(function (data) {
92
+ setVarNames(data);
93
+ });
94
+ }, [dataset.url]);
95
+ (0, _react.useEffect)(function () {
96
+ setActive(dataset.selectedMultiVar);
97
+ }, [dataset.selectedMultiVar]);
98
+ var varList = varNames.map(function (item) {
99
+ return /*#__PURE__*/_react.React.createElement("button", {
100
+ type: "button",
101
+ key: item,
102
+ className: "list-group-item list-grou-item-action ".concat(active.includes(item) && "active"),
103
+ onClick: function onClick() {
104
+ if (active.includes(item)) {
105
+ dispatch({
106
+ type: "multiVarDeselected",
107
+ var: item
108
+ });
109
+ } else {
110
+ dispatch({
111
+ type: "multiVarSelected",
112
+ var: item
113
+ });
114
+ }
115
+ }
116
+ }, item);
117
+ });
118
+ return /*#__PURE__*/_react.React.createElement("div", {
119
+ className: "h-100"
120
+ }, /*#__PURE__*/_react.React.createElement("h5", null, dataset.url), /*#__PURE__*/_react.React.createElement("div", {
121
+ className: "list-group overflow-auto mh-100"
122
+ }, varList));
123
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PLOTLY_COLORSCALES = void 0;
7
+ var PLOTLY_COLORSCALES = ["Blackbody", "Bluered", "Blues", "Cividis", "Earth", "Electric", "Greens", "Greys", "Hot", "Jet", "Picnic", "Portland", "Rainbow", "RdBu", "Reds", "Viridis", "YlGnBu", "YlOrRd"];
8
+ exports.PLOTLY_COLORSCALES = PLOTLY_COLORSCALES;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DatasetDispatchContext = exports.DatasetContext = void 0;
8
+ exports.DatasetProvider = DatasetProvider;
9
+ exports.useDataset = useDataset;
10
+ exports.useDatasetDispatch = useDatasetDispatch;
11
+ var _react = require("react");
12
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
13
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
15
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
20
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
21
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
22
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
24
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
25
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
26
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
+ var DatasetContext = /*#__PURE__*/(0, _react.createContext)(null);
28
+ exports.DatasetContext = DatasetContext;
29
+ var DatasetDispatchContext = /*#__PURE__*/(0, _react.createContext)(null);
30
+ exports.DatasetDispatchContext = DatasetDispatchContext;
31
+ function DatasetProvider(_ref) {
32
+ var dataset_url = _ref.dataset_url,
33
+ children = _ref.children;
34
+ var _useReducer = (0, _react.useReducer)(datasetReducer, {
35
+ url: dataset_url,
36
+ selectedObs: null,
37
+ selectedVar: null,
38
+ selectedMultiObs: [],
39
+ selectedMultiVar: [],
40
+ colorscale: "Viridis"
41
+ }),
42
+ _useReducer2 = _slicedToArray(_useReducer, 2),
43
+ dataset = _useReducer2[0],
44
+ dispatch = _useReducer2[1];
45
+ return /*#__PURE__*/React.createElement(DatasetContext.Provider, {
46
+ value: dataset
47
+ }, /*#__PURE__*/React.createElement(DatasetDispatchContext.Provider, {
48
+ value: dispatch
49
+ }, children));
50
+ }
51
+ function useDataset() {
52
+ return (0, _react.useContext)(DatasetContext);
53
+ }
54
+ function useDatasetDispatch() {
55
+ return (0, _react.useContext)(DatasetDispatchContext);
56
+ }
57
+ function datasetReducer(dataset, action) {
58
+ switch (action.type) {
59
+ case "setDataset":
60
+ {
61
+ return action.dataset;
62
+ }
63
+ case "obsSelected":
64
+ {
65
+ return _objectSpread(_objectSpread({}, dataset), {}, {
66
+ selectedObs: action.obs
67
+ });
68
+ }
69
+ case "varSelected":
70
+ {
71
+ return _objectSpread(_objectSpread({}, dataset), {}, {
72
+ selectedVar: action.var
73
+ });
74
+ }
75
+ case "multiVarSelected":
76
+ {
77
+ return _objectSpread(_objectSpread({}, dataset), {}, {
78
+ selectedMultiVar: [].concat(_toConsumableArray(dataset.selectedMultiVar), [action.var])
79
+ });
80
+ }
81
+ case "multiVarDeselected":
82
+ {
83
+ return _objectSpread(_objectSpread({}, dataset), {}, {
84
+ selectedMultiVar: dataset.selectedMultiVar.filter(function (a) {
85
+ return a !== action.var;
86
+ })
87
+ });
88
+ }
89
+ case "colorscaleSelected":
90
+ {
91
+ return _objectSpread(_objectSpread({}, dataset), {}, {
92
+ colorscale: action.colorscale
93
+ });
94
+ }
95
+ default:
96
+ {
97
+ throw Error("Unknown action: " + action.type);
98
+ }
99
+ }
100
+ }
package/package.json CHANGED
@@ -1,46 +1,53 @@
1
- {
2
- "name": "@haniffalab/cherita-react",
3
- "version": "0.1.0",
4
- "author": "",
5
- "license": "",
6
- "dependencies": {
7
- "bootstrap": "^5.3.0",
8
- "jquery": "^3.7.0",
9
- "plotly.js": "^2.23.2",
10
- "popper.js": "^1.16.1",
11
- "react": "^18.2.0",
12
- "react-bootstrap": "^2.7.4",
13
- "react-dom": "^18.2.0",
14
- "react-plotly.js": "^2.6.0",
15
- "react-scripts": "^5.0.1"
16
- },
17
- "devDependencies": {
18
- "eslint": "^8.42.0",
19
- "eslint-config-prettier": "^8.8.0",
20
- "eslint-config-react-app": "^7.0.1"
21
- },
22
- "scripts": {
23
- "start": "react-scripts start",
24
- "build": "react-scripts build",
25
- "test": "react-scripts test",
26
- "eject": "react-scripts eject"
27
- },
28
- "eslintConfig": {
29
- "extends": [
30
- "react-app",
31
- "prettier"
32
- ]
33
- },
34
- "browserslist": {
35
- "production": [
36
- ">0.2%",
37
- "not dead",
38
- "not op_mini all"
39
- ],
40
- "development": [
41
- "last 1 chrome version",
42
- "last 1 firefox version",
43
- "last 1 safari version"
44
- ]
45
- }
46
- }
1
+ {
2
+ "name": "@haniffalab/cherita-react",
3
+ "version": "0.1.2",
4
+ "author": "",
5
+ "license": "",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "files": ["dist"],
9
+ "dependencies": {
10
+ "bootstrap": "^5.3.0",
11
+ "jquery": "^3.7.0",
12
+ "plotly.js": "^2.23.2",
13
+ "popper.js": "^1.16.1",
14
+ "react": "^18.2.0",
15
+ "react-bootstrap": "^2.7.4",
16
+ "react-dom": "^18.2.0",
17
+ "react-plotly.js": "^2.6.0",
18
+ "react-scripts": "^5.0.1"
19
+ },
20
+ "devDependencies": {
21
+ "@babel/cli": "^7.22.5",
22
+ "@babel/core": "^7.22.5",
23
+ "@babel/preset-env": "^7.22.5",
24
+ "@babel/preset-react": "^7.22.5",
25
+ "eslint": "^8.42.0",
26
+ "eslint-config-prettier": "^8.8.0",
27
+ "eslint-config-react-app": "^7.0.1"
28
+ },
29
+ "scripts": {
30
+ "start": "react-scripts start",
31
+ "build": "babel src/lib --out-dir dist --copy-files",
32
+ "test": "react-scripts test",
33
+ "eject": "react-scripts eject"
34
+ },
35
+ "eslintConfig": {
36
+ "extends": [
37
+ "react-app",
38
+ "prettier"
39
+ ]
40
+ },
41
+ "browserslist": {
42
+ "production": [
43
+ ">0.2%",
44
+ "not dead",
45
+ "not op_mini all"
46
+ ],
47
+ "development": [
48
+ "last 1 chrome version",
49
+ "last 1 firefox version",
50
+ "last 1 safari version"
51
+ ]
52
+ }
53
+ }