@kepler.gl/reducers 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/combined-updaters.d.ts +50 -0
  2. package/dist/combined-updaters.js +212 -0
  3. package/dist/composer-helpers.d.ts +21 -0
  4. package/dist/composer-helpers.js +133 -0
  5. package/dist/composers.d.ts +12 -0
  6. package/dist/composers.js +47 -0
  7. package/dist/core.d.ts +64 -0
  8. package/dist/core.js +149 -0
  9. package/dist/data-utils.d.ts +8 -0
  10. package/dist/data-utils.js +60 -0
  11. package/dist/export-utils.d.ts +21 -0
  12. package/dist/export-utils.js +124 -0
  13. package/dist/index.d.ts +36 -0
  14. package/dist/index.js +372 -0
  15. package/dist/interaction-utils.d.ts +35 -0
  16. package/dist/interaction-utils.js +149 -0
  17. package/dist/layer-utils.d.ts +66 -0
  18. package/dist/layer-utils.js +289 -0
  19. package/dist/map-state-updaters.d.ts +62 -0
  20. package/dist/map-state-updaters.js +250 -0
  21. package/dist/map-state.d.ts +3 -0
  22. package/dist/map-state.js +67 -0
  23. package/dist/map-style-updaters.d.ts +173 -0
  24. package/dist/map-style-updaters.js +538 -0
  25. package/dist/map-style.d.ts +4 -0
  26. package/dist/map-style.js +66 -0
  27. package/dist/middleware.d.ts +8 -0
  28. package/dist/middleware.js +46 -0
  29. package/dist/provider-state-updaters.d.ts +42 -0
  30. package/dist/provider-state-updaters.js +512 -0
  31. package/dist/provider-state.d.ts +4 -0
  32. package/dist/provider-state.js +66 -0
  33. package/dist/root.d.ts +31 -0
  34. package/dist/root.js +235 -0
  35. package/dist/ui-state-updaters.d.ts +355 -0
  36. package/dist/ui-state-updaters.js +866 -0
  37. package/dist/ui-state.d.ts +3 -0
  38. package/dist/ui-state.js +68 -0
  39. package/dist/vis-state-merger.d.ts +102 -0
  40. package/dist/vis-state-merger.js +635 -0
  41. package/dist/vis-state-selectors.d.ts +2 -0
  42. package/dist/vis-state-selectors.js +53 -0
  43. package/dist/vis-state-updaters.d.ts +419 -0
  44. package/dist/vis-state-updaters.js +2472 -0
  45. package/dist/vis-state.d.ts +3 -0
  46. package/dist/vis-state.js +66 -0
  47. package/package.json +83 -0
package/dist/root.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ export declare function provideInitialState(initialState: any): (state: {} | undefined, action: any) => {
2
+ id: any;
3
+ mint: any;
4
+ mapboxApiAccessToken: any;
5
+ mapboxApiUrl: any;
6
+ mapStylesReplaceDefault: any;
7
+ initialUiState: any;
8
+ };
9
+ /**
10
+ * Kepler.gl reducer to be mounted to your store. You can mount `keplerGlReducer` at property `keplerGl`, if you choose
11
+ * to mount it at another address e.g. `foo` you will need to specify it when you mount `KeplerGl` component in your app with `getState: state => state.foo`
12
+ * @public
13
+ * @example
14
+ * import keplerGlReducer from 'kepler.gl/reducers';
15
+ * import {createStore, combineReducers, applyMiddleware, compose} from 'redux';
16
+ * import {taskMiddleware} from 'react-palm/tasks';
17
+ *
18
+ * const initialState = {};
19
+ * const reducers = combineReducers({
20
+ * // <-- mount kepler.gl reducer in your app
21
+ * keplerGl: keplerGlReducer,
22
+ *
23
+ * // Your other reducers here
24
+ * app: appReducer
25
+ * });
26
+ *
27
+ * // using createStore
28
+ * export default createStore(reducer, initialState, applyMiddleware(taskMiddleware));
29
+ */
30
+ declare const keplerGlReducer: any;
31
+ export default keplerGlReducer;
package/dist/root.js ADDED
@@ -0,0 +1,235 @@
1
+ // Copyright (c) 2022 Uber Technologies, Inc.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ // of this software and associated documentation files (the "Software"), to deal
5
+ // in the Software without restriction, including without limitation the rights
6
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ // copies of the Software, and to permit persons to whom the Software is
8
+ // furnished to do so, subject to the following conditions:
9
+ //
10
+ // The above copyright notice and this permission notice shall be included in
11
+ // all copies or substantial portions of the Software.
12
+ //
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ // THE SOFTWARE.
20
+
21
+ "use strict";
22
+
23
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
24
+
25
+ Object.defineProperty(exports, "__esModule", {
26
+ value: true
27
+ });
28
+ exports.provideInitialState = provideInitialState;
29
+ exports["default"] = void 0;
30
+
31
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
32
+
33
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
34
+
35
+ var _actions = require("@kepler.gl/actions");
36
+
37
+ var _reduxActions = require("redux-actions");
38
+
39
+ var _core = require("./core");
40
+
41
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
42
+
43
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
44
+
45
+ // INITIAL_STATE
46
+ var initialCoreState = {};
47
+
48
+ function provideInitialState(initialState) {
49
+ var coreReducer = (0, _core.coreReducerFactory)(initialState);
50
+
51
+ var handleRegisterEntry = function handleRegisterEntry(state, _ref) {
52
+ var _ref$payload = _ref.payload,
53
+ id = _ref$payload.id,
54
+ mint = _ref$payload.mint,
55
+ mapboxApiAccessToken = _ref$payload.mapboxApiAccessToken,
56
+ mapboxApiUrl = _ref$payload.mapboxApiUrl,
57
+ mapStylesReplaceDefault = _ref$payload.mapStylesReplaceDefault,
58
+ initialUiState = _ref$payload.initialUiState;
59
+ // by default, always create a mint state even if the same id already exist
60
+ // if state.id exist and mint=false, keep the existing state
61
+ var previousState = state[id] && mint === false ? state[id] : undefined;
62
+ return _objectSpread(_objectSpread({}, state), {}, (0, _defineProperty2["default"])({}, id, coreReducer(previousState, (0, _actions.keplerGlInit)({
63
+ mapboxApiAccessToken: mapboxApiAccessToken,
64
+ mapboxApiUrl: mapboxApiUrl,
65
+ mapStylesReplaceDefault: mapStylesReplaceDefault,
66
+ initialUiState: initialUiState
67
+ }))));
68
+ };
69
+
70
+ var handleDeleteEntry = function handleDeleteEntry(state, _ref2) {
71
+ var id = _ref2.payload;
72
+ return Object.keys(state).reduce(function (accu, curr) {
73
+ return _objectSpread(_objectSpread({}, accu), curr === id ? {} : (0, _defineProperty2["default"])({}, curr, state[curr]));
74
+ }, {});
75
+ };
76
+
77
+ var handleRenameEntry = function handleRenameEntry(state, _ref4) {
78
+ var _ref4$payload = _ref4.payload,
79
+ oldId = _ref4$payload.oldId,
80
+ newId = _ref4$payload.newId;
81
+ return Object.keys(state).reduce(function (accu, curr) {
82
+ return _objectSpread(_objectSpread({}, accu), (0, _defineProperty2["default"])({}, curr === oldId ? newId : curr, state[curr]));
83
+ }, {});
84
+ };
85
+
86
+ return function () {
87
+ var _handlers;
88
+
89
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialCoreState;
90
+ var action = arguments.length > 1 ? arguments[1] : undefined;
91
+ // update child states
92
+ Object.keys(state).forEach(function (id) {
93
+ var updateItemState = coreReducer(state[id], (0, _actions._actionFor)(id, action));
94
+ state = (0, _actions._updateProperty)(state, id, updateItemState);
95
+ }); // perform additional state reducing (e.g. switch action.type etc...)
96
+
97
+ var handlers = (_handlers = {}, (0, _defineProperty2["default"])(_handlers, _actions.ActionTypes.REGISTER_ENTRY, handleRegisterEntry), (0, _defineProperty2["default"])(_handlers, _actions.ActionTypes.DELETE_ENTRY, handleDeleteEntry), (0, _defineProperty2["default"])(_handlers, _actions.ActionTypes.RENAME_ENTRY, handleRenameEntry), _handlers); // TODO: Understand why the Lint sees an error here, while the IDE does not.
98
+ // @ts-expect-error
99
+
100
+ return (0, _reduxActions.handleActions)(handlers, initialCoreState)(state, action);
101
+ };
102
+ }
103
+
104
+ var _keplerGlReducer = provideInitialState(initialCoreState);
105
+
106
+ function mergeInitialState() {
107
+ var saved = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
108
+ var provided = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
109
+ var keys = ['mapState', 'mapStyle', 'visState', 'uiState']; // shallow merge each reducer
110
+
111
+ return keys.reduce(function (accu, key) {
112
+ return _objectSpread(_objectSpread({}, accu), saved[key] && provided[key] ? (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, saved[key]), provided[key])) : (0, _defineProperty2["default"])({}, key, saved[key] || provided[key] || {}));
113
+ }, {});
114
+ }
115
+
116
+ function decorate(target) {
117
+ var savedInitialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
118
+ var targetInitialState = savedInitialState;
119
+ /**
120
+ * Returns a kepler.gl reducer that will also pass each action through additional reducers spiecified.
121
+ * The parameter should be either a reducer map or a reducer function.
122
+ * The state passed into the additional action handler is the instance state.
123
+ * It will include all the subreducers `visState`, `uiState`, `mapState` and `mapStyle`.
124
+ * `.plugin` is only meant to be called once when mounting the keplerGlReducer to the store.
125
+ * **Note** This is an advanced option to give you more freedom to modify the internal state of the kepler.gl instance.
126
+ * You should only use this to adding additional actions instead of replacing default actions.
127
+ *
128
+ * @mixin keplerGlReducer.plugin
129
+ * @memberof keplerGlReducer
130
+ * @param {Object|Function} customReducer - A reducer map or a reducer
131
+ * @public
132
+ * @example
133
+ * const myKeplerGlReducer = keplerGlReducer
134
+ * .plugin({
135
+ * // 1. as reducer map
136
+ * HIDE_AND_SHOW_SIDE_PANEL: (state, action) => ({
137
+ * ...state,
138
+ * uiState: {
139
+ * ...state.uiState,
140
+ * readOnly: !state.uiState.readOnly
141
+ * }
142
+ * })
143
+ * })
144
+ * .plugin(handleActions({
145
+ * // 2. as reducer
146
+ * 'HIDE_MAP_CONTROLS': (state, action) => ({
147
+ * ...state,
148
+ * uiState: {
149
+ * ...state.uiState,
150
+ * mapControls: hiddenMapControl
151
+ * }
152
+ * })
153
+ * }, {}));
154
+ */
155
+
156
+ target.plugin = function plugin(customReducer) {
157
+ var _this = this;
158
+
159
+ if ((0, _typeof2["default"])(customReducer) === 'object') {
160
+ // if only provided a reducerMap, wrap it in a reducer
161
+ customReducer = (0, _reduxActions.handleActions)(customReducer, {});
162
+ } // use 'function' keyword to enable 'this'
163
+
164
+
165
+ return decorate(function () {
166
+ var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
167
+ var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
168
+
169
+ var nextState = _this(state, action); // for each entry in the staten
170
+
171
+
172
+ Object.keys(nextState).forEach(function (id) {
173
+ // update child states
174
+ nextState = (0, _actions._updateProperty)(nextState, id, customReducer(nextState[id], (0, _actions._actionFor)(id, action)));
175
+ });
176
+ return nextState;
177
+ });
178
+ };
179
+ /**
180
+ * Return a reducer that initiated with custom initial state.
181
+ * The parameter should be an object mapping from `subreducer` name to custom subreducer state,
182
+ * which will be shallow **merged** with default initial state.
183
+ *
184
+ * Default subreducer state:
185
+ * - [`visState`](./vis-state.md#INITIAL_VIS_STATE)
186
+ * - [`mapState`](./map-state.md#INITIAL_MAP_STATE)
187
+ * - [`mapStyle`](./map-style.md#INITIAL_MAP_STYLE)
188
+ * - [`uiState`](./ui-state.md#INITIAL_UI_STATE)
189
+ * @mixin keplerGlReducer.initialState
190
+ * @memberof keplerGlReducer
191
+ * @param {Object} iniSt - custom state to be merged with default initial state
192
+ * @public
193
+ * @example
194
+ * const myKeplerGlReducer = keplerGlReducer
195
+ * .initialState({
196
+ * uiState: {readOnly: true}
197
+ * });
198
+ */
199
+
200
+
201
+ target.initialState = function initialState(iniSt) {
202
+ var merged = mergeInitialState(targetInitialState, iniSt);
203
+ var targetReducer = provideInitialState(merged);
204
+ return decorate(targetReducer, merged);
205
+ };
206
+
207
+ return target;
208
+ }
209
+ /**
210
+ * Kepler.gl reducer to be mounted to your store. You can mount `keplerGlReducer` at property `keplerGl`, if you choose
211
+ * to mount it at another address e.g. `foo` you will need to specify it when you mount `KeplerGl` component in your app with `getState: state => state.foo`
212
+ * @public
213
+ * @example
214
+ * import keplerGlReducer from 'kepler.gl/reducers';
215
+ * import {createStore, combineReducers, applyMiddleware, compose} from 'redux';
216
+ * import {taskMiddleware} from 'react-palm/tasks';
217
+ *
218
+ * const initialState = {};
219
+ * const reducers = combineReducers({
220
+ * // <-- mount kepler.gl reducer in your app
221
+ * keplerGl: keplerGlReducer,
222
+ *
223
+ * // Your other reducers here
224
+ * app: appReducer
225
+ * });
226
+ *
227
+ * // using createStore
228
+ * export default createStore(reducer, initialState, applyMiddleware(taskMiddleware));
229
+ */
230
+
231
+
232
+ var keplerGlReducer = decorate(_keplerGlReducer);
233
+ var _default = keplerGlReducer;
234
+ exports["default"] = _default;
235
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yb290LnRzIl0sIm5hbWVzIjpbImluaXRpYWxDb3JlU3RhdGUiLCJwcm92aWRlSW5pdGlhbFN0YXRlIiwiaW5pdGlhbFN0YXRlIiwiY29yZVJlZHVjZXIiLCJoYW5kbGVSZWdpc3RlckVudHJ5Iiwic3RhdGUiLCJwYXlsb2FkIiwiaWQiLCJtaW50IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCIsImluaXRpYWxVaVN0YXRlIiwicHJldmlvdXNTdGF0ZSIsInVuZGVmaW5lZCIsImhhbmRsZURlbGV0ZUVudHJ5IiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsImFjY3UiLCJjdXJyIiwiaGFuZGxlUmVuYW1lRW50cnkiLCJvbGRJZCIsIm5ld0lkIiwiYWN0aW9uIiwiZm9yRWFjaCIsInVwZGF0ZUl0ZW1TdGF0ZSIsImhhbmRsZXJzIiwiQWN0aW9uVHlwZXMiLCJSRUdJU1RFUl9FTlRSWSIsIkRFTEVURV9FTlRSWSIsIlJFTkFNRV9FTlRSWSIsIl9rZXBsZXJHbFJlZHVjZXIiLCJtZXJnZUluaXRpYWxTdGF0ZSIsInNhdmVkIiwicHJvdmlkZWQiLCJrZXkiLCJkZWNvcmF0ZSIsInRhcmdldCIsInNhdmVkSW5pdGlhbFN0YXRlIiwidGFyZ2V0SW5pdGlhbFN0YXRlIiwicGx1Z2luIiwiY3VzdG9tUmVkdWNlciIsIm5leHRTdGF0ZSIsImluaVN0IiwibWVyZ2VkIiwidGFyZ2V0UmVkdWNlciIsImtlcGxlckdsUmVkdWNlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBRUE7Ozs7OztBQUVBO0FBQ0EsSUFBTUEsZ0JBQWdCLEdBQUcsRUFBekI7O0FBRU8sU0FBU0MsbUJBQVQsQ0FBNkJDLFlBQTdCLEVBQTJDO0FBQ2hELE1BQU1DLFdBQVcsR0FBRyw4QkFBbUJELFlBQW5CLENBQXBCOztBQUVBLE1BQU1FLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0Is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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxJQUFNUyxlQUFlLEdBQUdWLFFBQVEsQ0FBQ0wsZ0JBQUQsQ0FBaEM7ZUFDZWUsZSIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7QWN0aW9uVHlwZXMsIGtlcGxlckdsSW5pdCwgX2FjdGlvbkZvciwgX3VwZGF0ZVByb3BlcnR5fSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtoYW5kbGVBY3Rpb25zfSBmcm9tICdyZWR1eC1hY3Rpb25zJztcblxuaW1wb3J0IHtjb3JlUmVkdWNlckZhY3Rvcnl9IGZyb20gJy4vY29yZSc7XG5cbi8vIElOSVRJQUxfU1RBVEVcbmNvbnN0IGluaXRpYWxDb3JlU3RhdGUgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVJbml0aWFsU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIGNvbnN0IGNvcmVSZWR1Y2VyID0gY29yZVJlZHVjZXJGYWN0b3J5KGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3QgaGFuZGxlUmVnaXN0ZXJFbnRyeSA9IChcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGlkLFxuICAgICAgICBtaW50LFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCxcbiAgICAgICAgaW5pdGlhbFVpU3RhdGVcbiAgICAgIH1cbiAgICB9XG4gICkgPT4ge1xuICAgIC8vIGJ5IGRlZmF1bHQsIGFsd2F5cyBjcmVhdGUgYSBtaW50IHN0YXRlIGV2ZW4gaWYgdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdFxuICAgIC8vIGlmIHN0YXRlLmlkIGV4aXN0IGFuZCBtaW50PWZhbHNlLCBrZWVwIHRoZSBleGlzdGluZyBzdGF0ZVxuICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBzdGF0ZVtpZF0gJiYgbWludCA9PT0gZmFsc2UgPyBzdGF0ZVtpZF0gOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gcmVnaXN0ZXIgZW50cnkgdG8ga2VwbGVyLmdsIHBhc3NpbmcgaW4gbWFwYm94IGNvbmZpZyB0byBtYXBTdHlsZVxuICAgICAgLi4uc3RhdGUsXG4gICAgICBbaWRdOiBjb3JlUmVkdWNlcihcbiAgICAgICAgcHJldmlvdXNTdGF0ZSxcbiAgICAgICAga2VwbGVyR2xJbml0KHttYXBib3hBcGlBY2Nlc3NUb2tlbiwgbWFwYm94QXBpVXJsLCBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCwgaW5pdGlhbFVpU3RhdGV9KVxuICAgICAgKVxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlRW50cnkgPSAoc3RhdGUsIHtwYXlsb2FkOiBpZH0pID0+XG4gICAgT2JqZWN0LmtleXMoc3RhdGUpLnJlZHVjZShcbiAgICAgIChhY2N1LCBjdXJyKSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICAuLi4oY3VyciA9PT0gaWQgPyB7fSA6IHtbY3Vycl06IHN0YXRlW2N1cnJdfSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gIGNvbnN0IGhhbmRsZVJlbmFtZUVudHJ5ID0gKHN0YXRlLCB7cGF5bG9hZDoge29sZElkLCBuZXdJZH19KSA9PlxuICAgIE9iamVjdC5rZXlzKHN0YXRlKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgY3VycikgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4ue1tjdXJyID09PSBvbGRJZCA/IG5ld0lkIDogY3Vycl06IHN0YXRlW2N1cnJdfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgcmV0dXJuIChzdGF0ZSA9IGluaXRpYWxDb3JlU3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIC8vIHVwZGF0ZSBjaGlsZCBzdGF0ZXNcbiAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVJdGVtU3RhdGUgPSBjb3JlUmVkdWNlcihzdGF0ZVtpZF0sIF9hY3Rpb25Gb3IoaWQsIGFjdGlvbikpO1xuICAgICAgc3RhdGUgPSBfdXBkYXRlUHJvcGVydHkoc3RhdGUsIGlkLCB1cGRhdGVJdGVtU3RhdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gcGVyZm9ybSBhZGRpdGlvbmFsIHN0YXRlIHJlZHVjaW5nIChlLmcuIHN3aXRjaCBhY3Rpb24udHlwZSBldGMuLi4pXG4gICAgY29uc3QgaGFuZGxlcnMgPSB7XG4gICAgICBbQWN0aW9uVHlwZXMuUkVHSVNURVJfRU5UUlldOiBoYW5kbGVSZWdpc3RlckVudHJ5LFxuICAgICAgW0FjdGlvblR5cGVzLkRFTEVURV9FTlRSWV06IGhhbmRsZURlbGV0ZUVudHJ5LFxuICAgICAgW0FjdGlvblR5cGVzLlJFTkFNRV9FTlRSWV06IGhhbmRsZVJlbmFtZUVudHJ5XG4gICAgfTtcblxuICAgIC8vIFRPRE86IFVuZGVyc3RhbmQgd2h5IHRoZSBMaW50IHNlZXMgYW4gZXJyb3IgaGVyZSwgd2hpbGUgdGhlIElERSBkb2VzIG5vdC5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIGhhbmRsZUFjdGlvbnMoaGFuZGxlcnMsIGluaXRpYWxDb3JlU3RhdGUpKHN0YXRlLCBhY3Rpb24pO1xuICB9O1xufVxuXG5jb25zdCBfa2VwbGVyR2xSZWR1Y2VyID0gcHJvdmlkZUluaXRpYWxTdGF0ZShpbml0aWFsQ29yZVN0YXRlKTtcblxuZnVuY3Rpb24gbWVyZ2VJbml0aWFsU3RhdGUoc2F2ZWQgPSB7fSwgcHJvdmlkZWQgPSB7fSkge1xuICBjb25zdCBrZXlzID0gWydtYXBTdGF0ZScsICdtYXBTdHlsZScsICd2aXNTdGF0ZScsICd1aVN0YXRlJ107XG5cbiAgLy8gc2hhbGxvdyBtZXJnZSBlYWNoIHJlZHVjZXJcbiAgcmV0dXJuIGtleXMucmVkdWNlKFxuICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgLi4uKHNhdmVkW2tleV0gJiYgcHJvdmlkZWRba2V5XVxuICAgICAgICA/IHtba2V5XTogey4uLnNhdmVkW2tleV0sIC4uLnByb3ZpZGVkW2tleV19fVxuICAgICAgICA6IHtba2V5XTogc2F2ZWRba2V5XSB8fCBwcm92aWRlZFtrZXldIHx8IHt9fSlcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZSh0YXJnZXQsIHNhdmVkSW5pdGlhbFN0YXRlID0ge30pIHtcbiAgY29uc3QgdGFyZ2V0SW5pdGlhbFN0YXRlID0gc2F2ZWRJbml0aWFsU3RhdGU7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBrZXBsZXIuZ2wgcmVkdWNlciB0aGF0IHdpbGwgYWxzbyBwYXNzIGVhY2ggYWN0aW9uIHRocm91Z2ggYWRkaXRpb25hbCByZWR1Y2VycyBzcGllY2lmaWVkLlxuICAgKiBUaGUgcGFyYW1ldGVyIHNob3VsZCBiZSBlaXRoZXIgYSByZWR1Y2VyIG1hcCBvciBhIHJlZHVjZXIgZnVuY3Rpb24uXG4gICAqIFRoZSBzdGF0ZSBwYXNzZWQgaW50byB0aGUgYWRkaXRpb25hbCBhY3Rpb24gaGFuZGxlciBpcyB0aGUgaW5zdGFuY2Ugc3RhdGUuXG4gICAqIEl0IHdpbGwgaW5jbHVkZSBhbGwgdGhlIHN1YnJlZHVjZXJzIGB2aXNTdGF0ZWAsIGB1aVN0YXRlYCwgYG1hcFN0YXRlYCBhbmQgYG1hcFN0eWxlYC5cbiAgICogYC5wbHVnaW5gIGlzIG9ubHkgbWVhbnQgdG8gYmUgY2FsbGVkIG9uY2Ugd2hlbiBtb3VudGluZyB0aGUga2VwbGVyR2xSZWR1Y2VyIHRvIHRoZSBzdG9yZS5cbiAgICogKipOb3RlKiogVGhpcyBpcyBhbiBhZHZhbmNlZCBvcHRpb24gdG8gZ2l2ZSB5b3UgbW9yZSBmcmVlZG9tIHRvIG1vZGlmeSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGtlcGxlci5nbCBpbnN0YW5jZS5cbiAgICogWW91IHNob3VsZCBvbmx5IHVzZSB0aGlzIHRvIGFkZGluZyBhZGRpdGlvbmFsIGFjdGlvbnMgaW5zdGVhZCBvZiByZXBsYWNpbmcgZGVmYXVsdCBhY3Rpb25zLlxuICAgKlxuICAgKiBAbWl4aW4ga2VwbGVyR2xSZWR1Y2VyLnBsdWdpblxuICAgKiBAbWVtYmVyb2Yga2VwbGVyR2xSZWR1Y2VyXG4gICAqIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSBjdXN0b21SZWR1Y2VyIC0gQSByZWR1Y2VyIG1hcCBvciBhIHJlZHVjZXJcbiAgICogQHB1YmxpY1xuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBteUtlcGxlckdsUmVkdWNlciA9IGtlcGxlckdsUmVkdWNlclxuICAgKiAgLnBsdWdpbih7XG4gICAqICAgIC8vIDEuIGFzIHJlZHVjZXIgbWFwXG4gICAqICAgIEhJREVfQU5EX1NIT1dfU0lERV9QQU5FTDogKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gICAqICAgICAgLi4uc3RhdGUsXG4gICAqICAgICAgdWlTdGF0ZToge1xuICAgKiAgICAgICAgLi4uc3RhdGUudWlTdGF0ZSxcbiAgICogICAgICAgIHJlYWRPbmx5OiAhc3RhdGUudWlTdGF0ZS5yZWFkT25seVxuICAgKiAgICAgIH1cbiAgICogICAgfSlcbiAgICogIH0pXG4gICAqIC5wbHVnaW4oaGFuZGxlQWN0aW9ucyh7XG4gICAqICAgLy8gMi4gYXMgcmVkdWNlclxuICAgKiAgICdISURFX01BUF9DT05UUk9MUyc6IChzdGF0ZSwgYWN0aW9uKSA9PiAoe1xuICAgKiAgICAgLi4uc3RhdGUsXG4gICAqICAgICB1aVN0YXRlOiB7XG4gICAqICAgICAgIC4uLnN0YXRlLnVpU3RhdGUsXG4gICAqICAgICAgIG1hcENvbnRyb2xzOiBoaWRkZW5NYXBDb250cm9sXG4gICAqICAgICB9XG4gICAqICAgfSlcbiAgICogfSwge30pKTtcbiAgICovXG4gIHRhcmdldC5wbHVnaW4gPSBmdW5jdGlvbiBwbHVnaW4oY3VzdG9tUmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgY3VzdG9tUmVkdWNlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIGlmIG9ubHkgcHJvdmlkZWQgYSByZWR1Y2VyTWFwLCB3cmFwIGl0IGluIGEgcmVkdWNlclxuICAgICAgY3VzdG9tUmVkdWNlciA9IGhhbmRsZUFjdGlvbnMoY3VzdG9tUmVkdWNlciwge30pO1xuICAgIH1cblxuICAgIC8vIHVzZSAnZnVuY3Rpb24nIGtleXdvcmQgdG8gZW5hYmxlICd0aGlzJ1xuICAgIHJldHVybiBkZWNvcmF0ZSgoc3RhdGUgPSB7fSwgYWN0aW9uID0ge30pID0+IHtcbiAgICAgIGxldCBuZXh0U3RhdGUgPSB0aGlzKHN0YXRlLCBhY3Rpb24pO1xuXG4gICAgICAvLyBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgc3RhdGVuXG4gICAgICBPYmplY3Qua2V5cyhuZXh0U3RhdGUpLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAvLyB1cGRhdGUgY2hpbGQgc3RhdGVzXG4gICAgICAgIG5leHRTdGF0ZSA9IF91cGRhdGVQcm9wZXJ0eShcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY3VzdG9tUmVkdWNlcihuZXh0U3RhdGVbaWRdLCBfYWN0aW9uRm9yKGlkLCBhY3Rpb24pKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJlZHVjZXIgdGhhdCBpbml0aWF0ZWQgd2l0aCBjdXN0b20gaW5pdGlhbCBzdGF0ZS5cbiAgICogVGhlIHBhcmFtZXRlciBzaG91bGQgYmUgYW4gb2JqZWN0IG1hcHBpbmcgZnJvbSBgc3VicmVkdWNlcmAgbmFtZSB0byBjdXN0b20gc3VicmVkdWNlciBzdGF0ZSxcbiAgICogd2hpY2ggd2lsbCBiZSBzaGFsbG93ICoqbWVyZ2VkKiogd2l0aCBkZWZhdWx0IGluaXRpYWwgc3RhdGUuXG4gICAqXG4gICAqIERlZmF1bHQgc3VicmVkdWNlciBzdGF0ZTpcbiAgICogIC0gW2B2aXNTdGF0ZWBdKC4vdmlzLXN0YXRlLm1kI0lOSVRJQUxfVklTX1NUQVRFKVxuICAgKiAgLSBbYG1hcFN0YXRlYF0oLi9tYXAtc3RhdGUubWQjSU5JVElBTF9NQVBfU1RBVEUpXG4gICAqICAtIFtgbWFwU3R5bGVgXSguL21hcC1zdHlsZS5tZCNJTklUSUFMX01BUF9TVFlMRSlcbiAgICogIC0gW2B1aVN0YXRlYF0oLi91aS1zdGF0ZS5tZCNJTklUSUFMX1VJX1NUQVRFKVxuICAgKiBAbWl4aW4ga2VwbGVyR2xSZWR1Y2VyLmluaXRpYWxTdGF0ZVxuICAgKiBAbWVtYmVyb2Yga2VwbGVyR2xSZWR1Y2VyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbmlTdCAtIGN1c3RvbSBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBkZWZhdWx0IGluaXRpYWwgc3RhdGVcbiAgICogQHB1YmxpY1xuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBteUtlcGxlckdsUmVkdWNlciA9IGtlcGxlckdsUmVkdWNlclxuICAgKiAgLmluaXRpYWxTdGF0ZSh7XG4gICAqICAgIHVpU3RhdGU6IHtyZWFkT25seTogdHJ1ZX1cbiAgICogIH0pO1xuICAgKi9cbiAgdGFyZ2V0LmluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uIGluaXRpYWxTdGF0ZShpbmlTdCkge1xuICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlSW5pdGlhbFN0YXRlKHRhcmdldEluaXRpYWxTdGF0ZSwgaW5pU3QpO1xuICAgIGNvbnN0IHRhcmdldFJlZHVjZXIgPSBwcm92aWRlSW5pdGlhbFN0YXRlKG1lcmdlZCk7XG5cbiAgICByZXR1cm4gZGVjb3JhdGUodGFyZ2V0UmVkdWNlciwgbWVyZ2VkKTtcbiAgfTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEtlcGxlci5nbCByZWR1Y2VyIHRvIGJlIG1vdW50ZWQgdG8geW91ciBzdG9yZS4gWW91IGNhbiBtb3VudCBga2VwbGVyR2xSZWR1Y2VyYCBhdCBwcm9wZXJ0eSBga2VwbGVyR2xgLCBpZiB5b3UgY2hvb3NlXG4gKiB0byBtb3VudCBpdCBhdCBhbm90aGVyIGFkZHJlc3MgZS5nLiBgZm9vYCB5b3Ugd2lsbCBuZWVkIHRvIHNwZWNpZnkgaXQgd2hlbiB5b3UgbW91bnQgYEtlcGxlckdsYCBjb21wb25lbnQgaW4geW91ciBhcHAgd2l0aCBgZ2V0U3RhdGU6IHN0YXRlID0+IHN0YXRlLmZvb2BcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyIGZyb20gJ2tlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiBpbXBvcnQge2NyZWF0ZVN0b3JlLCBjb21iaW5lUmVkdWNlcnMsIGFwcGx5TWlkZGxld2FyZSwgY29tcG9zZX0gZnJvbSAncmVkdXgnO1xuICogaW1wb3J0IHt0YXNrTWlkZGxld2FyZX0gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4gKlxuICogY29uc3QgaW5pdGlhbFN0YXRlID0ge307XG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAgIC8vIDwtLSBtb3VudCBrZXBsZXIuZ2wgcmVkdWNlciBpbiB5b3VyIGFwcFxuICogICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICpcbiAqICAgLy8gWW91ciBvdGhlciByZWR1Y2VycyBoZXJlXG4gKiAgIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogLy8gdXNpbmcgY3JlYXRlU3RvcmVcbiAqIGV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSwgYXBwbHlNaWRkbGV3YXJlKHRhc2tNaWRkbGV3YXJlKSk7XG4gKi9cbmNvbnN0IGtlcGxlckdsUmVkdWNlciA9IGRlY29yYXRlKF9rZXBsZXJHbFJlZHVjZXIpO1xuZXhwb3J0IGRlZmF1bHQga2VwbGVyR2xSZWR1Y2VyO1xuIl19
@@ -0,0 +1,355 @@
1
+ import { ExportImage } from '@kepler.gl/constants';
2
+ import { ActionTypes, KeplerGlInitPayload, LoadFilesErrUpdaterAction, UIStateActions } from '@kepler.gl/actions';
3
+ import { ExportData, ExportHtml, ExportJson, ExportMap, MapControls, UiState } from '@kepler.gl/types';
4
+ export declare const DEFAULT_ACTIVE_SIDE_PANEL = "layer";
5
+ export declare const DEFAULT_MODAL = "addData";
6
+ /**
7
+ * A list of map control visibility and whether is it active.
8
+ * @memberof uiStateUpdaters
9
+ * @constant
10
+ * @property visibleLayers Default: `{show: true, active: false}`
11
+ * @property mapLegend Default: `{show: true, active: false}`
12
+ * @property toggle3d Default: `{show: true}`
13
+ * @property splitMap Default: `{show: true}`
14
+ * @property mapDraw Default: `{show: true, active: false}`
15
+ * @property mapLocale Default: `{show: false, active: false}`
16
+ * @public
17
+ */
18
+ export declare const DEFAULT_MAP_CONTROLS: MapControls;
19
+ /**
20
+ * Default image export config
21
+ * @memberof uiStateUpdaters
22
+ * @constant
23
+ * @property ratio Default: `'SCREEN'`,
24
+ * @property resolution Default: `'ONE_X'`,
25
+ * @property legend Default: `false`,
26
+ * @property mapH Default: 0,
27
+ * @property mapW Default: 0,
28
+ * @property imageSize Default: {zoomOffset: 0, scale: 1, imageW: 0, imageH: 0},
29
+ * @property imageDataUri Default: `''`,
30
+ * @property exporting Default: `false`
31
+ * @property error Default: `false`
32
+ * @public
33
+ */
34
+ export declare const DEFAULT_EXPORT_IMAGE: ExportImage;
35
+ export declare const DEFAULT_LOAD_FILES: {
36
+ fileLoading: boolean;
37
+ };
38
+ /**
39
+ * Default initial `exportData` settings
40
+ * @memberof uiStateUpdaters
41
+ * @constant
42
+ * @property selectedDataset Default: `''`,
43
+ * @property dataType Default: `'csv'`,
44
+ * @property filtered Default: `true`,
45
+ * @public
46
+ */
47
+ export declare const DEFAULT_EXPORT_DATA: ExportData;
48
+ /**
49
+ * @constant
50
+ */
51
+ export declare const DEFAULT_NOTIFICATIONS: never[];
52
+ /**
53
+ * @constant
54
+ * @property exportMapboxAccessToken - Default: null, this is used when we provide a default mapbox token for users to take advantage of
55
+ * @property userMapboxToken - Default: '', mapbox token provided by user through input field
56
+ * @property mode - Default: 'READ', read only or editable
57
+ * @public
58
+ */
59
+ export declare const DEFAULT_EXPORT_HTML: ExportHtml;
60
+ /**
61
+ * @constant
62
+ * @property hasData - Default: 'true',
63
+ * @public
64
+ */
65
+ export declare const DEFAULT_EXPORT_JSON: ExportJson;
66
+ /**
67
+ * Export Map Config
68
+ * @constant
69
+ * @property HTML - Default: 'DEFAULT_EXPORT_HTML',
70
+ * @property JSON - Default: 'DEFAULT_EXPORT_JSON',
71
+ * @property format - Default: 'HTML',
72
+ * @public
73
+ */
74
+ export declare const DEFAULT_EXPORT_MAP: ExportMap;
75
+ /**
76
+ * Default initial `uiState`
77
+ * @memberof uiStateUpdaters
78
+ * @constant
79
+ * @property readOnly Default: `false`
80
+ * @property activeSidePanel Default: `'layer'`
81
+ * @property currentModal Default: `'addData'`
82
+ * @property datasetKeyToRemove Default: `null`
83
+ * @property visibleDropdown Default: `null`
84
+ * @property exportImage Default: [`DEFAULT_EXPORT_IMAGE`](#default_export_image)
85
+ * @property exportData Default: [`DEFAULT_EXPORT_DATA`](#default_export_data)
86
+ * @property exportMap Default: [`DEFAULT_EXPORT_MAP`](#default_export_map)
87
+ * @property mapControls Default: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
88
+ * @property notifications Default: `[]`
89
+ * @property notifications Default: `[]`
90
+ * @property loadFiles
91
+ * @public
92
+ */
93
+ export declare const INITIAL_UI_STATE: UiState;
94
+ /**
95
+ * @memberof uiStateUpdaters
96
+
97
+ */
98
+ export declare const initUiStateUpdater: (state: UiState, action: {
99
+ type?: typeof ActionTypes['INIT'];
100
+ payload: KeplerGlInitPayload;
101
+ }) => UiState;
102
+ /**
103
+ * Toggle active side panel
104
+ * @memberof uiStateUpdaters
105
+ * @param state `uiState`
106
+ * @param action
107
+ * @param action.payload id of side panel to be shown, one of `layer`, `filter`, `interaction`, `map`. close side panel if `null`
108
+ * @returns nextState
109
+ * @public
110
+ */
111
+ export declare const toggleSidePanelUpdater: (state: UiState, { payload: id }: UIStateActions.ToggleSidePanelUpdaterAction) => UiState;
112
+ /**
113
+ * Show and hide modal dialog
114
+ * @memberof uiStateUpdaters
115
+ * @param state `uiState`
116
+ * @param action
117
+ * @paramaction.payload id of modal to be shown, null to hide modals. One of:
118
+ * - [`DATA_TABLE_ID`](../constants/default-settings.md#data_table_id)
119
+ * - [`DELETE_DATA_ID`](../constants/default-settings.md#delete_data_id)
120
+ * - [`ADD_DATA_ID`](../constants/default-settings.md#add_data_id)
121
+ * - [`EXPORT_IMAGE_ID`](../constants/default-settings.md#export_image_id)
122
+ * - [`EXPORT_DATA_ID`](../constants/default-settings.md#export_data_id)
123
+ * - [`ADD_MAP_STYLE_ID`](../constants/default-settings.md#add_map_style_id)
124
+ * @returns nextState
125
+ * @public
126
+ */
127
+ export declare const toggleModalUpdater: (state: UiState, { payload: id }: UIStateActions.ToggleModalUpdaterAction) => UiState;
128
+ /**
129
+ * Hide and show side panel header dropdown, activated by clicking the share link on top of the side panel
130
+ * @memberof uiStateUpdaters
131
+ * @public
132
+ */
133
+ export declare const showExportDropdownUpdater: (state: UiState, { payload: id }: UIStateActions.ShowExportDropdownUpdaterAction) => UiState;
134
+ /**
135
+ * Hide side panel header dropdown, activated by clicking the share link on top of the side panel
136
+ * @memberof uiStateUpdaters
137
+ * @public
138
+ */
139
+ export declare const hideExportDropdownUpdater: (state: UiState) => UiState;
140
+ /**
141
+ * Toggle active map control panel
142
+ * @memberof uiStateUpdaters
143
+ * @param state `uiState`
144
+ * @param action action
145
+ * @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
146
+ * @returns nextState
147
+ * @public
148
+ */
149
+ export declare const toggleMapControlUpdater: (state: UiState, { payload: { panelId, index } }: UIStateActions.ToggleMapControlUpdaterAction) => UiState;
150
+ /**
151
+ * Toggle map control visibility
152
+ * @memberof uiStateUpdaters
153
+ * @param state `uiState`
154
+ * @param action action
155
+ * @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
156
+ * @returns nextState
157
+ * @public
158
+ */
159
+ export declare const setMapControlVisibilityUpdater: (state: UiState, { payload: { panelId, show } }: UIStateActions.setMapControlVisibilityUpdaterAction) => UiState;
160
+ /**
161
+ * Toggle active map control panel
162
+ * @memberof uiStateUpdaters
163
+ * @param state `uiState`
164
+ * @param action
165
+ * @param action.payload dataset id
166
+ * @returns nextState
167
+ * @public
168
+ */
169
+ export declare const openDeleteModalUpdater: (state: UiState, { payload: datasetKeyToRemove }: UIStateActions.OpenDeleteModalUpdaterAction) => UiState;
170
+ /**
171
+ * Set `exportImage.legend` to `true` or `false`
172
+ * @memberof uiStateUpdaters
173
+ * @param state `uiState`
174
+ * @returns nextState
175
+ * @public
176
+ */
177
+ export declare const setExportImageSettingUpdater: (state: UiState, { payload: newSetting }: UIStateActions.SetExportImageSettingUpdaterAction) => UiState;
178
+ /**
179
+ * Set `exportImage.setExportImageDataUri` to a image dataUri
180
+ * @memberof uiStateUpdaters
181
+ * @param state `uiState`
182
+ * @param action
183
+ * @param action.payload export image data uri
184
+ * @returns nextState
185
+ * @public
186
+ */
187
+ export declare const setExportImageDataUriUpdater: (state: UiState, { payload: dataUri }: UIStateActions.SetExportImageDataUriUpdaterAction) => UiState;
188
+ /**
189
+ * @memberof uiStateUpdaters
190
+ * @public
191
+ */
192
+ export declare const setExportImageErrorUpdater: (state: UiState, { payload: error }: UIStateActions.SetExportImageErrorUpdaterAction) => UiState;
193
+ /**
194
+ * Delete cached export image
195
+ * @memberof uiStateUpdaters
196
+ * @public
197
+ */
198
+ export declare const cleanupExportImageUpdater: (state: UiState) => UiState;
199
+ /**
200
+ * Start image exporting flow
201
+ * @memberof uiStateUpdaters
202
+ * @param state
203
+ * @param options
204
+ * @returns {UiState}
205
+ * @public
206
+ */
207
+ export declare const startExportingImageUpdater: (state: UiState, { payload: options }: {
208
+ payload: Partial<ExportImage>;
209
+ }) => UiState;
210
+ /**
211
+ * Set selected dataset for export
212
+ * @memberof uiStateUpdaters
213
+ * @param state `uiState`
214
+ * @param action
215
+ * @param action.payload dataset id
216
+ * @returns nextState
217
+ * @public
218
+ */
219
+ export declare const setExportSelectedDatasetUpdater: (state: UiState, { payload: dataset }: UIStateActions.SetExportSelectedDatasetUpdaterAction) => UiState;
220
+ /**
221
+ * Set data format for exporting data
222
+ * @memberof uiStateUpdaters
223
+ * @param state `uiState`
224
+ * @param action
225
+ * @param action.payload one of `'text/csv'`
226
+ * @returns nextState
227
+ * @public
228
+ */
229
+ export declare const setExportDataTypeUpdater: (state: UiState, { payload: dataType }: UIStateActions.SetExportDataTypeUpdaterAction) => UiState;
230
+ /**
231
+ * Whether to export filtered data, `true` or `false`
232
+ * @memberof uiStateUpdaters
233
+ * @param state `uiState`
234
+ * @param action
235
+ * @param action.payload
236
+ * @returns nextState
237
+ * @public
238
+ */
239
+ export declare const setExportFilteredUpdater: (state: UiState, { payload: filtered }: UIStateActions.SetExportFilteredUpdaterAction) => UiState;
240
+ /**
241
+ * Whether to including data in map config, toggle between `true` or `false`
242
+ * @memberof uiStateUpdaters
243
+ * @param state `uiState`
244
+ * @returns nextState
245
+ * @public
246
+ */
247
+ export declare const setExportDataUpdater: (state: UiState) => UiState;
248
+ /**
249
+ * whether to export a mapbox access to HTML single page
250
+ * @param state - `uiState`
251
+ * @param action
252
+ * @param action.payload
253
+ * @returns nextState
254
+ * @public
255
+ */
256
+ export declare const setUserMapboxAccessTokenUpdater: (state: UiState, { payload: userMapboxToken }: UIStateActions.SetUserMapboxAccessTokenUpdaterAction) => UiState;
257
+ /**
258
+ * Sets the export map format
259
+ * @param state - `uiState`
260
+ * @param action
261
+ * @param action.payload format to use to export the map into
262
+ * @return nextState
263
+ */
264
+ export declare const setExportMapFormatUpdater: (state: UiState, { payload: format }: UIStateActions.SetExportMapFormatUpdaterAction) => UiState;
265
+ /**
266
+ * Set the export html map mode
267
+ * @param state - `uiState`
268
+ * @param action
269
+ * @param action.payload to be set (available modes: EXPORT_HTML_MAP_MODES)
270
+ * @return nextState
271
+ */
272
+ export declare const setExportMapHTMLModeUpdater: (state: UiState, { payload: mode }: UIStateActions.SetExportHTMLMapModeUpdaterAction) => UiState;
273
+ /**
274
+ * Adds a new notification.
275
+ * Updates a notification in case of matching ids.
276
+ * @memberof uiStateUpdaters
277
+ * @param state `uiState`
278
+ * @param action
279
+ * @param action.payload Params of a notification
280
+ * @returns nextState
281
+ * @public
282
+ */
283
+ export declare const addNotificationUpdater: (state: UiState, { payload }: UIStateActions.AddNotificationUpdaterAction) => UiState;
284
+ /**
285
+ * Remove a notification
286
+ * @memberof uiStateUpdaters
287
+ * @param state `uiState`
288
+ * @param action
289
+ * @param action.payload id of the notification to be removed
290
+ * @returns nextState
291
+ * @public
292
+ */
293
+ export declare const removeNotificationUpdater: (state: UiState, { payload: id }: UIStateActions.RemoveNotificationUpdaterAction) => UiState;
294
+ /**
295
+ * Fired when file loading begin
296
+ * @memberof uiStateUpdaters
297
+ * @param state `uiState`
298
+ * @returns nextState
299
+ * @public
300
+ */
301
+ export declare const loadFilesUpdater: (state: UiState) => UiState;
302
+ /**
303
+ * Handles loading file success and set fileLoading property to false
304
+ * @memberof uiStateUpdaters
305
+ * @param state `uiState`
306
+ * @returns nextState
307
+ */
308
+ export declare const loadFilesSuccessUpdater: (state: UiState) => UiState;
309
+ /**
310
+ * Handles load file error and set fileLoading property to false
311
+ * @memberof uiStateUpdaters
312
+ * @param state
313
+ * @param action
314
+ * @param action.error
315
+ * @returns nextState
316
+ * @public
317
+ */
318
+ export declare const loadFilesErrUpdater: (state: UiState, { error }: LoadFilesErrUpdaterAction) => UiState;
319
+ /**
320
+ * Handles toggle map split and reset all map control index to 0
321
+ * @memberof uiStateUpdaters
322
+ * @param state
323
+ * @returns nextState
324
+ * @public
325
+ */
326
+ export declare const toggleSplitMapUpdater: (state: UiState) => UiState;
327
+ /**
328
+ * Toggle modal data
329
+ * @memberof uiStateUpdaters
330
+ * @param state
331
+ * @returns nextState
332
+ * @public
333
+ */
334
+ export declare const showDatasetTableUpdater: (state: UiState) => UiState;
335
+ /**
336
+ * Set the locale of the UI
337
+ * @memberof uiStateUpdaters
338
+ * @param state `uiState`
339
+ * @param action
340
+ * @param action.payload
341
+ * @param action.payload.locale locale
342
+ * @returns nextState
343
+ * @public
344
+ */
345
+ export declare const setLocaleUpdater: (state: UiState, { payload: { locale } }: UIStateActions.SetLocaleUpdaterAction) => UiState;
346
+ /**
347
+ * Toggle layer panel list view
348
+ * @memberof uiStateUpdaters
349
+ * @param state `uiState`
350
+ * @param action
351
+ * @param action.payload layer panel listView value. Can be 'list' or 'sortByDataset'
352
+ * @returns nextState
353
+ * @public
354
+ */
355
+ export declare const toggleLayerPanelListViewUpdater: (state: UiState, { payload: listView }: UIStateActions.ToggleLayerPanelListViewAction) => UiState;