@haniffalab/cherita-react 0.1.12 → 0.2.0-dev.2024-02-12.4d768f57

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.
@@ -7,21 +7,28 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.Scatterplot = Scatterplot;
8
8
  exports.ScatterplotControls = ScatterplotControls;
9
9
  require("bootstrap/dist/css/bootstrap.min.css");
10
- var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
11
- var _react = require("react");
10
+ var _react = _interopRequireWildcard(require("react"));
12
11
  var _lodash = _interopRequireDefault(require("lodash"));
13
12
  var _chromaJs = _interopRequireDefault(require("chroma-js"));
14
13
  var _react2 = _interopRequireDefault(require("@deck.gl/react"));
15
14
  var _layers = require("@deck.gl/layers");
16
- var _DatasetContext = require("../../context/DatasetContext");
17
- var _constants = require("../../constants/constants");
18
- var _map = require("../../helpers/map");
19
- var _zarr = require("../../helpers/zarr");
20
15
  var _layers2 = require("@nebula.gl/layers");
21
16
  var _editModes = require("@nebula.gl/edit-modes");
22
- var _editor = require("@nebula.gl/editor");
17
+ var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
23
18
  var _Toolbox = require("./Toolbox");
19
+ var _Legend = require("./Legend");
20
+ var _constants = require("../../constants/constants");
21
+ var _DatasetContext = require("../../context/DatasetContext");
22
+ var _map = require("../../helpers/map");
23
+ var _zarr = require("../../helpers/zarr");
24
+ var _color = require("../../helpers/color");
24
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
29
+ 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."); }
30
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
31
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
25
32
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
26
33
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
27
34
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -35,69 +42,62 @@ window.deck.log.level = 1;
35
42
  function ScatterplotControls() {
36
43
  var dataset = (0, _DatasetContext.useDataset)();
37
44
  var dispatch = (0, _DatasetContext.useDatasetDispatch)();
38
- var _useState = (0, _react.useState)(dataset.embedding),
39
- _useState2 = _slicedToArray(_useState, 2),
40
- active = _useState2[0],
41
- setActive = _useState2[1];
42
- (0, _react.useEffect)(function () {
43
- setActive(dataset.embedding);
44
- }, [dataset.embedding]);
45
- var colormapList = _constants.EMBEDDINGS.map(function (item) {
46
- return /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
45
+ var colormapList = _constants.PLOTLY_COLORSCALES.map(function (item) {
46
+ return /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
47
47
  key: item,
48
- active: active === item,
48
+ active: dataset.controls.colorScale === item,
49
49
  onClick: function onClick() {
50
- setActive(item);
51
50
  dispatch({
52
- type: "embeddingSelected",
53
- embedding: item
51
+ type: "set.controls.colorScale",
52
+ colorScale: item
54
53
  });
55
54
  }
56
55
  }, item);
57
56
  });
58
- return /*#__PURE__*/_react.React.createElement(_Dropdown.default, null, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Toggle, {
59
- id: "dropdownEmbedding",
57
+ return /*#__PURE__*/_react.default.createElement(_Dropdown.default, null, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Toggle, {
58
+ id: "dropdownColorscale",
60
59
  variant: "light"
61
- }, dataset.embedding), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Menu, null, colormapList));
60
+ }, dataset.controls.colorScale), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Menu, null, colormapList));
62
61
  }
63
62
  function Scatterplot(_ref) {
64
63
  var _ref$radius = _ref.radius,
65
64
  radius = _ref$radius === void 0 ? 30 : _ref$radius;
66
65
  var dataset = (0, _DatasetContext.useDataset)();
67
- var _useState3 = (0, _react.useState)({
66
+ var dispatch = (0, _DatasetContext.useDatasetDispatch)();
67
+ var _useState = (0, _react.useState)({
68
68
  type: "FeatureCollection",
69
69
  features: []
70
70
  }),
71
- _useState4 = _slicedToArray(_useState3, 2),
72
- features = _useState4[0],
73
- setFeatures = _useState4[1];
74
- var _useState5 = (0, _react.useState)(function () {
75
- return _editModes.DrawPolygonByDraggingMode;
71
+ _useState2 = _slicedToArray(_useState, 2),
72
+ features = _useState2[0],
73
+ setFeatures = _useState2[1];
74
+ var _useState3 = (0, _react.useState)(function () {
75
+ return _editModes.ViewMode;
76
76
  }),
77
+ _useState4 = _slicedToArray(_useState3, 2),
78
+ mode = _useState4[0],
79
+ setMode = _useState4[1];
80
+ var _useState5 = (0, _react.useState)([]),
77
81
  _useState6 = _slicedToArray(_useState5, 2),
78
- mode = _useState6[0],
79
- setMode = _useState6[1];
80
- var _useState7 = (0, _react.useState)({}),
82
+ selectedFeatureIndexes = _useState6[0],
83
+ setSelectedFeatureIndexes = _useState6[1];
84
+ var _useState7 = (0, _react.useState)([]),
81
85
  _useState8 = _slicedToArray(_useState7, 2),
82
- modeConfig = _useState8[0],
83
- setModeConfig = _useState8[1];
86
+ featureState = _useState8[0],
87
+ setFeatureState = _useState8[1];
84
88
  var _useState9 = (0, _react.useState)([]),
85
89
  _useState10 = _slicedToArray(_useState9, 2),
86
- selectedFeatureIndexes = _useState10[0],
87
- setSelectedFeatureIndexes = _useState10[1];
90
+ data = _useState10[0],
91
+ setData = _useState10[1];
88
92
  var _useState11 = (0, _react.useState)([]),
89
93
  _useState12 = _slicedToArray(_useState11, 2),
90
- data = _useState12[0],
91
- setData = _useState12[1];
94
+ position = _useState12[0],
95
+ setPosition = _useState12[1];
92
96
  var _useState13 = (0, _react.useState)([]),
93
97
  _useState14 = _slicedToArray(_useState13, 2),
94
- position = _useState14[0],
95
- setPosition = _useState14[1];
96
- var _useState15 = (0, _react.useState)([]),
97
- _useState16 = _slicedToArray(_useState15, 2),
98
- values = _useState16[0],
99
- setValues = _useState16[1];
100
- var _useState17 = (0, _react.useState)({
98
+ values = _useState14[0],
99
+ setValues = _useState14[1];
100
+ var _useState15 = (0, _react.useState)({
101
101
  longitude: 0,
102
102
  latitude: 0,
103
103
  zoom: 0,
@@ -105,25 +105,26 @@ function Scatterplot(_ref) {
105
105
  pitch: 0,
106
106
  bearing: 0
107
107
  }),
108
- _useState18 = _slicedToArray(_useState17, 2),
109
- viewport = _useState18[0],
110
- setViewport = _useState18[1];
108
+ _useState16 = _slicedToArray(_useState15, 2),
109
+ viewport = _useState16[0],
110
+ setViewport = _useState16[1];
111
111
  (0, _react.useEffect)(function () {
112
112
  setData(function (prevState, props) {
113
- var colorScale = _chromaJs.default.scale(["yellow", "008ae5"]).domain([_lodash.default.min(values), _lodash.default.max(values)]);
113
+ var colorHelper = new _color.ColorHelper();
114
+ var scale = dataset.colorEncoding === "var" ? colorHelper.getScale(dataset, values) : null;
114
115
  var data = position.map(function (e, i) {
115
116
  return {
116
117
  index: i,
117
118
  position: [position[i][0], position[i][1]],
118
119
  value: values[i],
119
- color: colorScale(values[i]).rgb()
120
+ color: colorHelper.getColor(dataset, values[i], scale)
120
121
  };
121
122
  });
122
123
  return data;
123
124
  });
124
- }, [position, values]);
125
+ }, [position, values, dataset.controls.colorScale]);
125
126
  (0, _react.useEffect)(function () {
126
- if (dataset.embedding) {
127
+ if (dataset.selectedObsm) {
127
128
  var helper = new _map.MapHelper();
128
129
  var zarrHelper = new _zarr.ZarrHelper();
129
130
  var fetchObsm = /*#__PURE__*/function () {
@@ -133,7 +134,7 @@ function Scatterplot(_ref) {
133
134
  while (1) switch (_context.prev = _context.next) {
134
135
  case 0:
135
136
  _context.next = 2;
136
- return zarrHelper.open(dataset.url, "obsm/" + dataset.embedding);
137
+ return zarrHelper.open(dataset.url, "obsm/" + dataset.selectedObsm);
137
138
  case 2:
138
139
  z = _context.sent;
139
140
  _context.next = 5;
@@ -164,7 +165,7 @@ function Scatterplot(_ref) {
164
165
  }();
165
166
  fetchObsm().catch(console.error);
166
167
  }
167
- }, [dataset.url, dataset.embedding]);
168
+ }, [dataset.url, dataset.selectedObsm]);
168
169
  (0, _react.useEffect)(function () {
169
170
  if (dataset.selectedVar) {
170
171
  var zarrHelper = new _zarr.ZarrHelper();
@@ -181,6 +182,10 @@ function Scatterplot(_ref) {
181
182
  _context2.next = 5;
182
183
  return z.get([null, dataset.selectedVar.matrix_index], _zarr.GET_OPTIONS).then(function (result) {
183
184
  setValues(result.data);
185
+ dispatch({
186
+ type: "set.colorEncoding",
187
+ value: "var"
188
+ });
184
189
  });
185
190
  case 5:
186
191
  case "end":
@@ -194,9 +199,43 @@ function Scatterplot(_ref) {
194
199
  }();
195
200
  fetchData().catch(console.error);
196
201
  }
197
- }, [dataset.url, dataset.selectedObs, dataset.selectedVar]);
202
+ }, [dataset.url, dataset.selectedVar]);
203
+ (0, _react.useEffect)(function () {
204
+ if (dataset.selectedObs) {
205
+ var zarrHelper = new _zarr.ZarrHelper();
206
+ var fetchData = /*#__PURE__*/function () {
207
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
208
+ var z;
209
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
210
+ while (1) switch (_context3.prev = _context3.next) {
211
+ case 0:
212
+ _context3.next = 2;
213
+ return zarrHelper.open(dataset.url, "obs/" + dataset.selectedObs.name + "/codes");
214
+ case 2:
215
+ z = _context3.sent;
216
+ _context3.next = 5;
217
+ return z.get().then(function (result) {
218
+ setValues(result.data);
219
+ dispatch({
220
+ type: "set.colorEncoding",
221
+ value: "obs"
222
+ });
223
+ });
224
+ case 5:
225
+ case "end":
226
+ return _context3.stop();
227
+ }
228
+ }, _callee3);
229
+ }));
230
+ return function fetchData() {
231
+ return _ref4.apply(this, arguments);
232
+ };
233
+ }();
234
+ fetchData().catch(console.error);
235
+ }
236
+ }, [dataset.url, dataset.selectedObs]);
198
237
  var layers = [new _layers.ScatterplotLayer({
199
- id: "scatter-plot",
238
+ id: "cherita-layer-scatterplot",
200
239
  data: data,
201
240
  radiusScale: radius,
202
241
  radiusMinPixels: 1,
@@ -208,16 +247,28 @@ function Scatterplot(_ref) {
208
247
  },
209
248
  getRadius: 1
210
249
  }), new _layers2.EditableGeoJsonLayer({
211
- // id: "geojson-layer",
250
+ id: "cherita-layer-draw",
212
251
  data: features,
213
252
  mode: mode,
214
- modeConfig: modeConfig,
215
253
  selectedFeatureIndexes: selectedFeatureIndexes,
216
- onEdit: function onEdit(_ref4) {
217
- var updatedData = _ref4.updatedData;
254
+ onEdit: function onEdit(_ref5) {
255
+ var updatedData = _ref5.updatedData,
256
+ editType = _ref5.editType,
257
+ editContext = _ref5.editContext;
218
258
  setFeatures(updatedData);
259
+ var updatedSelectedFeatureIndexes = selectedFeatureIndexes;
260
+ setFeatureState({
261
+ data: updatedData
262
+ });
263
+ if (editType === "addFeature") {
264
+ // when a drawing is complete, the value of editType becomes addFeature
265
+ var featureIndexes = editContext.featureIndexes; //extracting indexes of current features selected
266
+ updatedSelectedFeatureIndexes = [].concat(_toConsumableArray(selectedFeatureIndexes), _toConsumableArray(featureIndexes));
267
+ }
268
+ setSelectedFeatureIndexes(updatedSelectedFeatureIndexes); //now update your state
219
269
  }
220
270
  })];
271
+
221
272
  function onLayerClick(info) {
222
273
  if (mode !== _editModes.ViewMode) {
223
274
  // don't change selection while editing
@@ -225,34 +276,19 @@ function Scatterplot(_ref) {
225
276
  }
226
277
  setSelectedFeatureIndexes(info.object ? [info.index] : []);
227
278
  }
228
- return /*#__PURE__*/_react.React.createElement(_react.React.Fragment, null, /*#__PURE__*/_react.React.createElement("div", {
279
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
229
280
  className: "cherita-scatterplot"
230
- }, /*#__PURE__*/_react.React.createElement(_react2.default, {
281
+ }, /*#__PURE__*/_react.default.createElement(_react2.default, {
231
282
  layers: layers,
232
283
  initialViewState: viewport,
233
284
  controller: true,
234
285
  onClick: onLayerClick
235
- }), /*#__PURE__*/_react.React.createElement(_editor.Toolbox, {
286
+ }), /*#__PURE__*/_react.default.createElement(_Toolbox.Toolbox, {
236
287
  mode: mode,
237
- onSetMode: function onSetMode(m) {
238
- setModeConfig(null);
239
- setMode(m);
240
- },
241
- modeConfig: modeConfig,
242
- onSetModeConfig: setModeConfig,
243
- geoJson: features,
244
- onSetGeoJson: setFeatures,
245
- onImport: setFeatures
246
- }), /*#__PURE__*/_react.React.createElement(_Toolbox.Toolbox2, {
247
- mode: mode,
248
- onSetMode: function onSetMode(m) {
249
- setModeConfig(null);
250
- setMode(m);
251
- },
252
- modeConfig: modeConfig,
253
- onSetModeConfig: setModeConfig,
254
- geoJson: features,
255
- onSetGeoJson: setFeatures,
256
- onImport: setFeatures
288
+ setMode: setMode,
289
+ features: mode,
290
+ setFeatures: setFeatures
291
+ }), /*#__PURE__*/_react.default.createElement(_Legend.Legend, {
292
+ values: values
257
293
  })));
258
294
  }
@@ -3,66 +3,86 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Toolbox2 = Toolbox2;
6
+ exports.Toolbox = Toolbox;
7
7
  require("bootstrap/dist/css/bootstrap.min.css");
8
8
  var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
9
9
  var _react = require("react");
10
- var _lodash = _interopRequireDefault(require("lodash"));
11
- var _chromaJs = _interopRequireDefault(require("chroma-js"));
12
- var _react2 = _interopRequireDefault(require("@deck.gl/react"));
13
- var _layers = require("@deck.gl/layers");
14
- var _DatasetContext = require("../../context/DatasetContext");
15
- var _constants = require("../../constants/constants");
16
- var _map = require("../../helpers/map");
17
- var _zarr = require("../../helpers/zarr");
18
- var _layers2 = require("@nebula.gl/layers");
19
10
  var _editModes = require("@nebula.gl/edit-modes");
20
- var _editor = require("@nebula.gl/editor");
21
11
  var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
22
12
  var _DropdownButton = _interopRequireDefault(require("react-bootstrap/DropdownButton"));
23
13
  var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
24
14
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
25
15
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
26
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
28
- 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."); }
29
- 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); }
30
- 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; }
31
- 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; } }
32
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
33
- window.deck.log.level = 1;
34
- function Toolbox2() {
35
- var dataset = (0, _DatasetContext.useDataset)();
36
- var dispatch = (0, _DatasetContext.useDatasetDispatch)();
37
- var _useState = (0, _react.useState)(dataset.embedding),
38
- _useState2 = _slicedToArray(_useState, 2),
39
- active = _useState2[0],
40
- setActive = _useState2[1];
41
- (0, _react.useEffect)(function () {
42
- setActive(dataset.embedding);
43
- }, [dataset.embedding]);
17
+ function Toolbox(_ref) {
18
+ var mode = _ref.mode,
19
+ setMode = _ref.setMode,
20
+ features = _ref.features,
21
+ setFeatures = _ref.setFeatures;
22
+ var onSelect = function onSelect(eventKey, event) {
23
+ console.log(eventKey); // selected event will trigger
24
+ switch (eventKey) {
25
+ case "DrawPolygonMode":
26
+ setMode(function () {
27
+ return _editModes.DrawPolygonMode;
28
+ });
29
+ break;
30
+ case "DrawLineStringMode":
31
+ setMode(function () {
32
+ return _editModes.DrawLineStringMode;
33
+ });
34
+ break;
35
+ case "DrawPolygonByDraggingMode":
36
+ setMode(function () {
37
+ return _editModes.DrawPolygonByDraggingMode;
38
+ });
39
+ break;
40
+ case "DrawRectangleMode":
41
+ setMode(function () {
42
+ return _editModes.DrawRectangleMode;
43
+ });
44
+ break;
45
+ case "ModifyMode":
46
+ setMode(function () {
47
+ return _editModes.ModifyMode;
48
+ });
49
+ break;
50
+ default:
51
+ setMode(function () {
52
+ return _editModes.ViewMode;
53
+ });
54
+ }
55
+ };
56
+ var deleteFeatures = function deleteFeatures(eventKey, event) {
57
+ console.log(eventKey); // selected event will trigger
58
+ setFeatures({
59
+ type: "FeatureCollection",
60
+ features: []
61
+ });
62
+ };
44
63
  return /*#__PURE__*/_react.React.createElement("div", {
45
64
  className: "cherita-toolbox"
46
- }, /*#__PURE__*/_react.React.createElement(_Dropdown.default, null, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Toggle, {
47
- variant: "success",
48
- id: "dropdown-basic"
49
- }, "Dropdown Button"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Menu, null, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
50
- href: "#/action-1"
51
- }, "Action"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
52
- href: "#/action-2"
53
- }, "Another action"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
54
- href: "#/action-3"
55
- }, "Something else"))), /*#__PURE__*/_react.React.createElement(_ButtonGroup.default, null, /*#__PURE__*/_react.React.createElement(_Button.default, null, /*#__PURE__*/_react.React.createElement(_reactFontawesome.FontAwesomeIcon, {
56
- icon: _freeSolidSvgIcons.faArrowPointer
57
- }), " Mode"), /*#__PURE__*/_react.React.createElement(_Button.default, null, "2"), /*#__PURE__*/_react.React.createElement(_DropdownButton.default, {
65
+ }, /*#__PURE__*/_react.React.createElement(_ButtonGroup.default, null, /*#__PURE__*/_react.React.createElement(_DropdownButton.default, {
58
66
  as: _ButtonGroup.default,
59
- title: "test" + /*#__PURE__*/_react.React.createElement(_reactFontawesome.FontAwesomeIcon, {
67
+ title: /*#__PURE__*/_react.React.createElement(_react.React.Fragment, null, /*#__PURE__*/_react.React.createElement(_reactFontawesome.FontAwesomeIcon, {
60
68
  icon: _freeSolidSvgIcons.faArrowPointer
61
- }),
62
- id: "bg-nested-dropdown"
69
+ }), " Mode"),
70
+ id: "bg-nested-dropdown",
71
+ onSelect: onSelect
63
72
  }, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
64
- eventKey: "1"
65
- }, "Dropdown link"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
66
- eventKey: "2"
67
- }, "Dropdown link"))));
73
+ eventKey: "DrawPolygonMode"
74
+ }, "DrawPolygonMode"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
75
+ eventKey: "DrawLineStringMode"
76
+ }, "DrawLineStringMode"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
77
+ eventKey: "DrawPolygonByDraggingMode"
78
+ }, "DrawPolygonByDraggingMode"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
79
+ eventKey: "DrawRectangleMode"
80
+ }, "DrawRectangleMode"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
81
+ eventKey: "ModifyMode"
82
+ }, "ModifyMode"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
83
+ eventKey: "ViewMode"
84
+ }, "ViewMode")), /*#__PURE__*/_react.React.createElement(_Button.default, {
85
+ variant: "primary",
86
+ onClick: deleteFeatures
87
+ }, "Delete")));
68
88
  }