@airtable/blocks 1.9.0-experimental-5565d56-20211029 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -4
- package/dist/cjs/error_utils.js +0 -17
- package/dist/cjs/models/grouped_record_query_result.js +14 -5
- package/dist/cjs/models/linked_records_query_result.js +27 -75
- package/dist/cjs/models/mutations.js +162 -18
- package/dist/cjs/models/record.js +56 -309
- package/dist/cjs/models/record_query_result.js +1 -4
- package/dist/cjs/models/record_store.js +765 -554
- package/dist/cjs/models/table.js +7 -7
- package/dist/cjs/models/table_or_view_query_result.js +414 -480
- package/dist/cjs/models/view.js +1 -1
- package/dist/cjs/models/view_data_store.js +295 -243
- package/dist/cjs/private_utils.js +0 -40
- package/dist/cjs/sdk.js +2 -12
- package/dist/cjs/testing/abstract_mock_airtable_interface.js +10 -55
- package/dist/cjs/ui/use_records.js +1 -5
- package/dist/cjs/watchable.js +1 -15
- package/dist/types/src/models/grouped_record_query_result.d.ts +3 -3
- package/dist/types/src/models/grouped_record_query_result.d.ts.map +1 -1
- package/dist/types/src/models/linked_records_query_result.d.ts.map +1 -1
- package/dist/types/src/models/mutations.d.ts.map +1 -1
- package/dist/types/src/models/record.d.ts +4 -13
- package/dist/types/src/models/record.d.ts.map +1 -1
- package/dist/types/src/models/record_query_result.d.ts +2 -3
- package/dist/types/src/models/record_query_result.d.ts.map +1 -1
- package/dist/types/src/models/record_store.d.ts.map +1 -1
- package/dist/types/src/models/table.d.ts +1 -1
- package/dist/types/src/models/table_or_view_query_result.d.ts +5 -3
- package/dist/types/src/models/table_or_view_query_result.d.ts.map +1 -1
- package/dist/types/src/models/view.d.ts +1 -1
- package/dist/types/src/models/view_data_store.d.ts +1 -0
- package/dist/types/src/models/view_data_store.d.ts.map +1 -1
- package/dist/types/src/models/view_metadata_query_result.d.ts +1 -1
- package/dist/types/src/models/view_metadata_query_result.d.ts.map +1 -1
- package/dist/types/src/private_utils.d.ts +3 -26
- package/dist/types/src/private_utils.d.ts.map +1 -1
- package/dist/types/src/sdk.d.ts.map +1 -1
- package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts +11 -11
- package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts.map +1 -1
- package/dist/types/src/types/airtable_interface.d.ts +19 -43
- package/dist/types/src/types/airtable_interface.d.ts.map +1 -1
- package/dist/types/src/types/table.d.ts +2 -0
- package/dist/types/src/types/table.d.ts.map +1 -1
- package/dist/types/src/types/view.d.ts +8 -3
- package/dist/types/src/types/view.d.ts.map +1 -1
- package/dist/types/src/watchable.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts +5 -7
- package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts +11 -18
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts.map +1 -1
- package/dist/types/test/test_helpers.d.ts +0 -2
- package/dist/types/test/test_helpers.d.ts.map +1 -1
- package/package.json +2 -3
- package/dist/cjs/models/query_manager.js +0 -327
- package/dist/cjs/types/block_query_spec.js +0 -85
- package/dist/types/src/models/query_manager.d.ts +0 -2
- package/dist/types/src/models/query_manager.d.ts.map +0 -1
- package/dist/types/src/types/block_query_spec.d.ts +0 -139
- package/dist/types/src/types/block_query_spec.d.ts.map +0 -1
- package/dist/types/test/airtable_interface_mocks/mock_base_data_stores.d.ts +0 -51
- package/dist/types/test/airtable_interface_mocks/mock_base_data_stores.d.ts.map +0 -1
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("core-js/modules/es.symbol");
|
|
6
|
-
|
|
7
|
-
require("core-js/modules/es.symbol.description");
|
|
8
|
-
|
|
9
|
-
require("core-js/modules/es.array.iterator");
|
|
10
|
-
|
|
11
|
-
require("core-js/modules/es.map");
|
|
12
|
-
|
|
13
|
-
require("core-js/modules/es.object.to-string");
|
|
14
|
-
|
|
15
|
-
require("core-js/modules/es.promise");
|
|
16
|
-
|
|
17
|
-
require("core-js/modules/web.dom-collections.for-each");
|
|
18
|
-
|
|
19
|
-
require("core-js/modules/web.dom-collections.iterator");
|
|
20
|
-
|
|
21
|
-
Object.defineProperty(exports, "__esModule", {
|
|
22
|
-
value: true
|
|
23
|
-
});
|
|
24
|
-
exports.QueryManager = void 0;
|
|
25
|
-
|
|
26
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
27
|
-
|
|
28
|
-
require("regenerator-runtime/runtime");
|
|
29
|
-
|
|
30
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
31
|
-
|
|
32
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
33
|
-
|
|
34
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
35
|
-
|
|
36
|
-
var _error_utils = require("../error_utils");
|
|
37
|
-
|
|
38
|
-
var _private_utils = require("../private_utils");
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* This provides a singleton instance which is responsible for all queries sent
|
|
42
|
-
* to PublicAirtableInterface.
|
|
43
|
-
*
|
|
44
|
-
* This can allow looking up queries by queryId.
|
|
45
|
-
*
|
|
46
|
-
* @internal
|
|
47
|
-
*/
|
|
48
|
-
var QueryManager =
|
|
49
|
-
/*#__PURE__*/
|
|
50
|
-
function () {
|
|
51
|
-
function QueryManager(sdk) {
|
|
52
|
-
(0, _classCallCheck2.default)(this, QueryManager);
|
|
53
|
-
(0, _defineProperty2.default)(this, "_airtableInterface", void 0);
|
|
54
|
-
(0, _defineProperty2.default)(this, "_sdk", void 0);
|
|
55
|
-
(0, _defineProperty2.default)(this, "_queryRegistrationInfosByWatchKey", new Map());
|
|
56
|
-
(0, _defineProperty2.default)(this, "fetchAndSubscribeToQueryAsync", (query, querySubscriptionOptions) => {
|
|
57
|
-
var queryResponse;
|
|
58
|
-
return _regenerator.default.async(function _callee$(_context) {
|
|
59
|
-
while (1) {
|
|
60
|
-
switch (_context.prev = _context.next) {
|
|
61
|
-
case 0:
|
|
62
|
-
_context.next = 2;
|
|
63
|
-
return _regenerator.default.awrap(this._airtableInterface.subscribeToQueryAndPopulateStoresAsync(query, querySubscriptionOptions !== null && querySubscriptionOptions !== void 0 ? querySubscriptionOptions : {}));
|
|
64
|
-
|
|
65
|
-
case 2:
|
|
66
|
-
queryResponse = _context.sent;
|
|
67
|
-
|
|
68
|
-
if (queryResponse.success) {
|
|
69
|
-
_context.next = 5;
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
throw (0, _error_utils.spawnError)('Subscription to query failed - unhandled error');
|
|
74
|
-
|
|
75
|
-
case 5:
|
|
76
|
-
return _context.abrupt("return", queryResponse.blockQueryId);
|
|
77
|
-
|
|
78
|
-
case 6:
|
|
79
|
-
case "end":
|
|
80
|
-
return _context.stop();
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}, null, this);
|
|
84
|
-
});
|
|
85
|
-
(0, _defineProperty2.default)(this, "unsubscribeFromQueryIds", queryIds => {
|
|
86
|
-
var _iteratorNormalCompletion = true;
|
|
87
|
-
var _didIteratorError = false;
|
|
88
|
-
var _iteratorError = undefined;
|
|
89
|
-
|
|
90
|
-
try {
|
|
91
|
-
for (var _iterator = queryIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
92
|
-
var queryId = _step.value;
|
|
93
|
-
// TODO: (#proj-blocks-sdk-record-limits) Add support for unsubscribing multiple at the same time
|
|
94
|
-
this.unsubscribeFromQueryId(queryId);
|
|
95
|
-
}
|
|
96
|
-
} catch (err) {
|
|
97
|
-
_didIteratorError = true;
|
|
98
|
-
_iteratorError = err;
|
|
99
|
-
} finally {
|
|
100
|
-
try {
|
|
101
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
102
|
-
_iterator.return();
|
|
103
|
-
}
|
|
104
|
-
} finally {
|
|
105
|
-
if (_didIteratorError) {
|
|
106
|
-
throw _iteratorError;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
(0, _defineProperty2.default)(this, "unsubscribeFromQueryId", queryId => {
|
|
112
|
-
(0, _private_utils.fireAndForgetPromise)(() => this._airtableInterface.unsubscribeFromQueryIdsAsync([queryId]));
|
|
113
|
-
});
|
|
114
|
-
(0, _defineProperty2.default)(this, "watchWithQuerySpec", (query, watchableModel, watchKey, watchOnChangeCallback, callbackForRegistration, context) => {
|
|
115
|
-
var isOnChangeCallbackCanceled = false;
|
|
116
|
-
|
|
117
|
-
var callbackForCancelOnChange = () => isOnChangeCallbackCanceled = true;
|
|
118
|
-
|
|
119
|
-
var onChangeCallback = changes => {
|
|
120
|
-
if (isOnChangeCallbackCanceled) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
watchableModel.__incrementOnChangeCount();
|
|
125
|
-
|
|
126
|
-
watchOnChangeCallback(changes);
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
var blockQueryIdPromise = this.fetchAndSubscribeToQueryAsync(query, {
|
|
130
|
-
onChangeCallback
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
var queryRegistrationInfosForKey = this._queryRegistrationInfosByWatchKey.get(watchKey);
|
|
134
|
-
|
|
135
|
-
if (!queryRegistrationInfosForKey) {
|
|
136
|
-
queryRegistrationInfosForKey = [];
|
|
137
|
-
|
|
138
|
-
this._queryRegistrationInfosByWatchKey.set(watchKey, queryRegistrationInfosForKey);
|
|
139
|
-
} // It is safe to push onto queryRegistrationInfosForKey (vs copying) as long
|
|
140
|
-
// as we don't release the event loop when we iterate over it, which only
|
|
141
|
-
// happens in unwatchFromQueryKeys
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
queryRegistrationInfosForKey.push({
|
|
145
|
-
blockQueryIdPromise,
|
|
146
|
-
callbackForCancelOnChange,
|
|
147
|
-
callbackForRegistration,
|
|
148
|
-
context,
|
|
149
|
-
onChangeCallback,
|
|
150
|
-
watchableModel
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
(0, _defineProperty2.default)(this, "_unwatchFromQueryRegistrationInfoAsync", queryRegistrationInfo => {
|
|
154
|
-
var blockQueryIdPromise, callbackForCancelOnChange, queryId;
|
|
155
|
-
return _regenerator.default.async(function _callee2$(_context2) {
|
|
156
|
-
while (1) {
|
|
157
|
-
switch (_context2.prev = _context2.next) {
|
|
158
|
-
case 0:
|
|
159
|
-
blockQueryIdPromise = queryRegistrationInfo.blockQueryIdPromise, callbackForCancelOnChange = queryRegistrationInfo.callbackForCancelOnChange;
|
|
160
|
-
callbackForCancelOnChange();
|
|
161
|
-
_context2.next = 4;
|
|
162
|
-
return _regenerator.default.awrap(blockQueryIdPromise);
|
|
163
|
-
|
|
164
|
-
case 4:
|
|
165
|
-
queryId = _context2.sent;
|
|
166
|
-
this.unsubscribeFromQueryId(queryId);
|
|
167
|
-
|
|
168
|
-
case 6:
|
|
169
|
-
case "end":
|
|
170
|
-
return _context2.stop();
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}, null, this);
|
|
174
|
-
});
|
|
175
|
-
(0, _defineProperty2.default)(this, "unwatchFromQueryKey", (watchKey, callbackForRegistration, context) => {
|
|
176
|
-
var queryRegistrationInfos = this._queryRegistrationInfosByWatchKey.get(watchKey);
|
|
177
|
-
|
|
178
|
-
if (queryRegistrationInfos) {
|
|
179
|
-
var watchersToUnwatch = [];
|
|
180
|
-
var watchersToKeep = [];
|
|
181
|
-
queryRegistrationInfos.forEach(watcher => {
|
|
182
|
-
var isCallbackToUnwatch = watcher.callbackForRegistration === callbackForRegistration && watcher.context === context;
|
|
183
|
-
|
|
184
|
-
if (isCallbackToUnwatch) {
|
|
185
|
-
watchersToUnwatch.push(watcher);
|
|
186
|
-
} else {
|
|
187
|
-
watchersToKeep.push(watcher);
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
if (watchersToKeep.length > 0) {
|
|
192
|
-
this._queryRegistrationInfosByWatchKey.set(watchKey, watchersToKeep);
|
|
193
|
-
} else {
|
|
194
|
-
this._queryRegistrationInfosByWatchKey.delete(watchKey);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (watchersToUnwatch.length > 0) {
|
|
198
|
-
// Do not await the response since unwatch is not async
|
|
199
|
-
watchersToUnwatch.forEach(this._unwatchFromQueryRegistrationInfoAsync);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
this._airtableInterface = sdk.__airtableInterface;
|
|
204
|
-
this._sdk = sdk;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
(0, _createClass2.default)(QueryManager, [{
|
|
208
|
-
key: "_onChange",
|
|
209
|
-
value: function _onChange(watchableModel, watchKey) {
|
|
210
|
-
var queryRegistrationInfos = this._queryRegistrationInfosByWatchKey.get(watchKey);
|
|
211
|
-
|
|
212
|
-
if (!queryRegistrationInfos) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
var _iteratorNormalCompletion2 = true;
|
|
217
|
-
var _didIteratorError2 = false;
|
|
218
|
-
var _iteratorError2 = undefined;
|
|
219
|
-
|
|
220
|
-
try {
|
|
221
|
-
for (var _iterator2 = queryRegistrationInfos[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
222
|
-
var watcher = _step2.value;
|
|
223
|
-
|
|
224
|
-
if (watcher.watchableModel === watchableModel) {
|
|
225
|
-
watcher.onChangeCallback([]);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
} catch (err) {
|
|
229
|
-
_didIteratorError2 = true;
|
|
230
|
-
_iteratorError2 = err;
|
|
231
|
-
} finally {
|
|
232
|
-
try {
|
|
233
|
-
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
234
|
-
_iterator2.return();
|
|
235
|
-
}
|
|
236
|
-
} finally {
|
|
237
|
-
if (_didIteratorError2) {
|
|
238
|
-
throw _iteratorError2;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}, {
|
|
244
|
-
key: "onLoadKeys",
|
|
245
|
-
value: function onLoadKeys(watchableModel, watchKeys) {
|
|
246
|
-
var _iteratorNormalCompletion3 = true;
|
|
247
|
-
var _didIteratorError3 = false;
|
|
248
|
-
var _iteratorError3 = undefined;
|
|
249
|
-
|
|
250
|
-
try {
|
|
251
|
-
for (var _iterator3 = watchKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
252
|
-
var key = _step3.value;
|
|
253
|
-
|
|
254
|
-
this._onChange(watchableModel, key);
|
|
255
|
-
}
|
|
256
|
-
} catch (err) {
|
|
257
|
-
_didIteratorError3 = true;
|
|
258
|
-
_iteratorError3 = err;
|
|
259
|
-
} finally {
|
|
260
|
-
try {
|
|
261
|
-
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
262
|
-
_iterator3.return();
|
|
263
|
-
}
|
|
264
|
-
} finally {
|
|
265
|
-
if (_didIteratorError3) {
|
|
266
|
-
throw _iteratorError3;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}, {
|
|
272
|
-
key: "forceUnloadWatchesOnWatchableModel",
|
|
273
|
-
value: function forceUnloadWatchesOnWatchableModel(watchableModel) {
|
|
274
|
-
var _iteratorNormalCompletion4 = true;
|
|
275
|
-
var _didIteratorError4 = false;
|
|
276
|
-
var _iteratorError4 = undefined;
|
|
277
|
-
|
|
278
|
-
try {
|
|
279
|
-
for (var _iterator4 = this._queryRegistrationInfosByWatchKey.values()[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
280
|
-
var queryRegistrationInfos = _step4.value;
|
|
281
|
-
var _iteratorNormalCompletion5 = true;
|
|
282
|
-
var _didIteratorError5 = false;
|
|
283
|
-
var _iteratorError5 = undefined;
|
|
284
|
-
|
|
285
|
-
try {
|
|
286
|
-
for (var _iterator5 = queryRegistrationInfos[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
|
287
|
-
var watcher = _step5.value;
|
|
288
|
-
|
|
289
|
-
if (watcher.watchableModel === watchableModel) {
|
|
290
|
-
this._unwatchFromQueryRegistrationInfoAsync(watcher);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
} catch (err) {
|
|
294
|
-
_didIteratorError5 = true;
|
|
295
|
-
_iteratorError5 = err;
|
|
296
|
-
} finally {
|
|
297
|
-
try {
|
|
298
|
-
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
|
|
299
|
-
_iterator5.return();
|
|
300
|
-
}
|
|
301
|
-
} finally {
|
|
302
|
-
if (_didIteratorError5) {
|
|
303
|
-
throw _iteratorError5;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
} catch (err) {
|
|
309
|
-
_didIteratorError4 = true;
|
|
310
|
-
_iteratorError4 = err;
|
|
311
|
-
} finally {
|
|
312
|
-
try {
|
|
313
|
-
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
|
314
|
-
_iterator4.return();
|
|
315
|
-
}
|
|
316
|
-
} finally {
|
|
317
|
-
if (_didIteratorError4) {
|
|
318
|
-
throw _iteratorError4;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}]);
|
|
324
|
-
return QueryManager;
|
|
325
|
-
}();
|
|
326
|
-
|
|
327
|
-
exports.QueryManager = QueryManager;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.BlockQuerySubscriptionChangeType = exports.BlockFieldSelectionSpecType = exports.BlockQuerySourceType = void 0;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Specification for data needed by both the Blocks SDK and the blocks iframe
|
|
10
|
-
* that spans across a few repos and run environments:
|
|
11
|
-
* +--------------------+--------------------+--------------------+
|
|
12
|
-
* | airtable.com | blocks iframe | blocks sdk |
|
|
13
|
-
* +--------------------+--------------------+--------------------+
|
|
14
|
-
* | repo: hyperbase | repo: hyperbase | repo: blocks-sdk |
|
|
15
|
-
* | run: airtable.com | run: iframe | run: iframe |
|
|
16
|
-
* +--------------------+--------------------+--------------------+
|
|
17
|
-
*
|
|
18
|
-
* A BlockQuerySpec has a required `source` and one or more `selection`s.
|
|
19
|
-
* The `source` is a top-level concept that defines where the data comes
|
|
20
|
-
* from, while the `selection`s define desired properties from the data.
|
|
21
|
-
* In other words, think of the data as a tree, the `source` defines the
|
|
22
|
-
* root, and the `selection`s define the branches and leaves.
|
|
23
|
-
*
|
|
24
|
-
* Note that instead of a sub-object `source`, we use `source`-prefixed
|
|
25
|
-
* properties for the same effect. This works around a TypeScript limitation
|
|
26
|
-
* of not being able to discriminate between the unions for BlockQuerySpec.
|
|
27
|
-
*
|
|
28
|
-
* The specification will be used for two parts of the data lifecycle:
|
|
29
|
-
* 1. An initial response, via BlockQuerySpecResponseForAirtableInterface
|
|
30
|
-
* 2. Subsequent updates to keep the date updated, via BlockQueryUpdate
|
|
31
|
-
*
|
|
32
|
-
* NOTE: Keep this in sync with the hyperbase repo's block_query_spec.tsx file!
|
|
33
|
-
*
|
|
34
|
-
* @hidden
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
/** @hidden */
|
|
38
|
-
|
|
39
|
-
/** @hidden */
|
|
40
|
-
|
|
41
|
-
/** @hidden */
|
|
42
|
-
var BlockQuerySourceType;
|
|
43
|
-
/** @hidden */
|
|
44
|
-
|
|
45
|
-
exports.BlockQuerySourceType = BlockQuerySourceType;
|
|
46
|
-
|
|
47
|
-
(function (BlockQuerySourceType) {
|
|
48
|
-
BlockQuerySourceType["TABLE"] = "table";
|
|
49
|
-
BlockQuerySourceType["VIEW"] = "view";
|
|
50
|
-
})(BlockQuerySourceType || (exports.BlockQuerySourceType = BlockQuerySourceType = {}));
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* The different ways fields can be queried
|
|
54
|
-
*
|
|
55
|
-
* @hidden
|
|
56
|
-
*/
|
|
57
|
-
var BlockFieldSelectionSpecType;
|
|
58
|
-
/**
|
|
59
|
-
* Allows querying for all fields, or a specified set of fields. In the latter
|
|
60
|
-
* case, we also allow specifying properties of a record like commentCount and
|
|
61
|
-
* recordCreatedTime that don't have fieldIds (ALL_FIELDS implies including all
|
|
62
|
-
* of these properties).
|
|
63
|
-
*
|
|
64
|
-
* @hidden
|
|
65
|
-
*/
|
|
66
|
-
|
|
67
|
-
exports.BlockFieldSelectionSpecType = BlockFieldSelectionSpecType;
|
|
68
|
-
|
|
69
|
-
(function (BlockFieldSelectionSpecType) {
|
|
70
|
-
BlockFieldSelectionSpecType["SPECIFIED_FIELDS"] = "specifiedFields";
|
|
71
|
-
BlockFieldSelectionSpecType["ALL_FIELDS_FROM_TABLE"] = "allFieldsFromTable";
|
|
72
|
-
})(BlockFieldSelectionSpecType || (exports.BlockFieldSelectionSpecType = BlockFieldSelectionSpecType = {}));
|
|
73
|
-
|
|
74
|
-
/** @hidden */
|
|
75
|
-
var BlockQuerySubscriptionChangeType;
|
|
76
|
-
/** @hidden */
|
|
77
|
-
|
|
78
|
-
exports.BlockQuerySubscriptionChangeType = BlockQuerySubscriptionChangeType;
|
|
79
|
-
|
|
80
|
-
(function (BlockQuerySubscriptionChangeType) {
|
|
81
|
-
BlockQuerySubscriptionChangeType["ADDED_RECORD_IDS"] = "addedRecordIds";
|
|
82
|
-
BlockQuerySubscriptionChangeType["REMOVED_RECORD_IDS"] = "removedRecordIds";
|
|
83
|
-
BlockQuerySubscriptionChangeType["MODIFIED_CELL_VALUES_FOR_TABLE"] = "modifiedCellValuesForTable";
|
|
84
|
-
BlockQuerySubscriptionChangeType["CHANGED_COLORS_BY_RECORD_ID_FOR_VIEW"] = "changedColorsByRecordIdForView";
|
|
85
|
-
})(BlockQuerySubscriptionChangeType || (exports.BlockQuerySubscriptionChangeType = BlockQuerySubscriptionChangeType = {}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query_manager.d.ts","sourceRoot":"","sources":["../../../../src/models/query_manager.ts"],"names":[],"mappings":""}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { ObjectMap } from '../private_utils';
|
|
2
|
-
import { TableId } from './table';
|
|
3
|
-
import { ViewId } from './view';
|
|
4
|
-
import { RecordId } from './record';
|
|
5
|
-
import { FieldId } from './field';
|
|
6
|
-
/**
|
|
7
|
-
* Specification for data needed by both the Blocks SDK and the blocks iframe
|
|
8
|
-
* that spans across a few repos and run environments:
|
|
9
|
-
* +--------------------+--------------------+--------------------+
|
|
10
|
-
* | airtable.com | blocks iframe | blocks sdk |
|
|
11
|
-
* +--------------------+--------------------+--------------------+
|
|
12
|
-
* | repo: hyperbase | repo: hyperbase | repo: blocks-sdk |
|
|
13
|
-
* | run: airtable.com | run: iframe | run: iframe |
|
|
14
|
-
* +--------------------+--------------------+--------------------+
|
|
15
|
-
*
|
|
16
|
-
* A BlockQuerySpec has a required `source` and one or more `selection`s.
|
|
17
|
-
* The `source` is a top-level concept that defines where the data comes
|
|
18
|
-
* from, while the `selection`s define desired properties from the data.
|
|
19
|
-
* In other words, think of the data as a tree, the `source` defines the
|
|
20
|
-
* root, and the `selection`s define the branches and leaves.
|
|
21
|
-
*
|
|
22
|
-
* Note that instead of a sub-object `source`, we use `source`-prefixed
|
|
23
|
-
* properties for the same effect. This works around a TypeScript limitation
|
|
24
|
-
* of not being able to discriminate between the unions for BlockQuerySpec.
|
|
25
|
-
*
|
|
26
|
-
* The specification will be used for two parts of the data lifecycle:
|
|
27
|
-
* 1. An initial response, via BlockQuerySpecResponseForAirtableInterface
|
|
28
|
-
* 2. Subsequent updates to keep the date updated, via BlockQueryUpdate
|
|
29
|
-
*
|
|
30
|
-
* NOTE: Keep this in sync with the hyperbase repo's block_query_spec.tsx file!
|
|
31
|
-
*
|
|
32
|
-
* @hidden
|
|
33
|
-
*/
|
|
34
|
-
export declare type BlockQuerySpec = BlockTableQuerySpec | BlockViewQuerySpec;
|
|
35
|
-
/** @hidden */
|
|
36
|
-
export interface BlockTableQuerySpec {
|
|
37
|
-
sourceType: BlockQuerySourceType.TABLE;
|
|
38
|
-
sourceTableId: TableId;
|
|
39
|
-
recordSelection: BlockRecordSelectionSpec;
|
|
40
|
-
}
|
|
41
|
-
/** @hidden */
|
|
42
|
-
export interface BlockViewQuerySpec {
|
|
43
|
-
sourceType: BlockQuerySourceType.VIEW;
|
|
44
|
-
sourceTableId: TableId;
|
|
45
|
-
sourceViewId: ViewId;
|
|
46
|
-
recordSelection?: BlockRecordSelectionSpec;
|
|
47
|
-
viewMetadataSelection?: BlockViewMetadataSelectionSpec;
|
|
48
|
-
}
|
|
49
|
-
/** @hidden */
|
|
50
|
-
export declare enum BlockQuerySourceType {
|
|
51
|
-
TABLE = "table",
|
|
52
|
-
VIEW = "view"
|
|
53
|
-
}
|
|
54
|
-
/** @hidden */
|
|
55
|
-
export interface BlockRecordSelectionSpec {
|
|
56
|
-
readonly fieldSelection: BlockFieldSelectionSpec;
|
|
57
|
-
/** Optionally filter down to more specific recordIds from the source */
|
|
58
|
-
readonly recordIds?: Array<RecordId>;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* The different ways fields can be queried
|
|
62
|
-
*
|
|
63
|
-
* @hidden
|
|
64
|
-
*/
|
|
65
|
-
export declare enum BlockFieldSelectionSpecType {
|
|
66
|
-
SPECIFIED_FIELDS = "specifiedFields",
|
|
67
|
-
ALL_FIELDS_FROM_TABLE = "allFieldsFromTable"
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Allows querying for all fields, or a specified set of fields. In the latter
|
|
71
|
-
* case, we also allow specifying properties of a record like commentCount and
|
|
72
|
-
* recordCreatedTime that don't have fieldIds (ALL_FIELDS implies including all
|
|
73
|
-
* of these properties).
|
|
74
|
-
*
|
|
75
|
-
* @hidden
|
|
76
|
-
*/
|
|
77
|
-
export declare type BlockFieldSelectionSpec = {
|
|
78
|
-
readonly type: BlockFieldSelectionSpecType.SPECIFIED_FIELDS;
|
|
79
|
-
readonly fieldIds: Array<FieldId>;
|
|
80
|
-
readonly shouldIncludeCommentCount?: boolean;
|
|
81
|
-
readonly shouldIncludeRecordCreatedTime?: boolean;
|
|
82
|
-
} | {
|
|
83
|
-
readonly type: BlockFieldSelectionSpecType.ALL_FIELDS_FROM_TABLE;
|
|
84
|
-
};
|
|
85
|
-
/** @hidden */
|
|
86
|
-
export interface BlockViewMetadataSelectionSpec {
|
|
87
|
-
readonly shouldIncludeVisibleRecordIds?: boolean;
|
|
88
|
-
readonly shouldIncludeFieldOrder?: boolean;
|
|
89
|
-
readonly shouldIncludeGroups?: boolean;
|
|
90
|
-
readonly shouldIncludeGroupingLevels?: boolean;
|
|
91
|
-
readonly shouldIncludeColorsForRecordId?: boolean;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Response recieved from an executed query.
|
|
95
|
-
*
|
|
96
|
-
* @hidden
|
|
97
|
-
*/
|
|
98
|
-
export declare type QuerySpecsResponse = {
|
|
99
|
-
readonly success: true;
|
|
100
|
-
readonly blockQueryId: BlockQueryId;
|
|
101
|
-
} | {
|
|
102
|
-
readonly success: false;
|
|
103
|
-
};
|
|
104
|
-
/**
|
|
105
|
-
* An id returned from airtable for an active and executing query. If two queries sent
|
|
106
|
-
* to airtable return the same queryId this means the queries are semantically the same.
|
|
107
|
-
* It is however possible for two canonically identical queries to be tracked via two
|
|
108
|
-
* separate blockQueryIds (in the case realtime subscriptions are made with different
|
|
109
|
-
* callbacks).
|
|
110
|
-
*
|
|
111
|
-
* @hidden
|
|
112
|
-
*/
|
|
113
|
-
export declare type BlockQueryId = string;
|
|
114
|
-
/** @hidden */
|
|
115
|
-
export declare enum BlockQuerySubscriptionChangeType {
|
|
116
|
-
ADDED_RECORD_IDS = "addedRecordIds",
|
|
117
|
-
REMOVED_RECORD_IDS = "removedRecordIds",
|
|
118
|
-
MODIFIED_CELL_VALUES_FOR_TABLE = "modifiedCellValuesForTable",
|
|
119
|
-
CHANGED_COLORS_BY_RECORD_ID_FOR_VIEW = "changedColorsByRecordIdForView"
|
|
120
|
-
}
|
|
121
|
-
/** @hidden */
|
|
122
|
-
export declare type BlockQuerySubscriptionChange = {
|
|
123
|
-
type: BlockQuerySubscriptionChangeType.ADDED_RECORD_IDS | BlockQuerySubscriptionChangeType.REMOVED_RECORD_IDS;
|
|
124
|
-
tableId: TableId;
|
|
125
|
-
recordIds: Array<RecordId>;
|
|
126
|
-
} | {
|
|
127
|
-
type: BlockQuerySubscriptionChangeType.MODIFIED_CELL_VALUES_FOR_TABLE;
|
|
128
|
-
tableId: TableId;
|
|
129
|
-
fieldIdsByRecordId: ObjectMap<RecordId, Array<FieldId>>;
|
|
130
|
-
fieldIds: Array<FieldId>;
|
|
131
|
-
} | {
|
|
132
|
-
type: BlockQuerySubscriptionChangeType.CHANGED_COLORS_BY_RECORD_ID_FOR_VIEW;
|
|
133
|
-
tableId: TableId;
|
|
134
|
-
viewId: ViewId;
|
|
135
|
-
recordIds: Array<RecordId>;
|
|
136
|
-
};
|
|
137
|
-
/** @hidden */
|
|
138
|
-
export declare type BlockQuerySubscriptionOnChangeCallback = (changes: Array<BlockQuerySubscriptionChange>) => void;
|
|
139
|
-
//# sourceMappingURL=block_query_spec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"block_query_spec.d.ts","sourceRoot":"","sources":["../../../../src/types/block_query_spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { BlockQuerySubscriptionOptions, RecordStoreForTable, ViewStore } from '../../src/types/airtable_interface';
|
|
2
|
-
import { BlockQuerySpec, BlockQueryId, BlockQuerySubscriptionOnChangeCallback, QuerySpecsResponse } from '../../src/types/block_query_spec';
|
|
3
|
-
import { Color } from '../../src/colors';
|
|
4
|
-
import { FieldId } from '../../src/types/field';
|
|
5
|
-
import { RecordId } from '../../src/types/record';
|
|
6
|
-
import { TableId } from '../../src/types/table';
|
|
7
|
-
import { ViewId } from '../../src/types/view';
|
|
8
|
-
import { ObjectMap } from '../../src/private_utils';
|
|
9
|
-
import { MockAirtableInterface } from './mock_airtable_interface';
|
|
10
|
-
import { FixtureData, TableFixtureData, RecordFixtureData, ViewFixtureData, FieldFixtureData } from './fixture_data';
|
|
11
|
-
export declare class MockBaseDataStore {
|
|
12
|
-
_mockAirtableInterface: MockAirtableInterface;
|
|
13
|
-
_fixtureData: FixtureData;
|
|
14
|
-
_tablesById: ObjectMap<TableId, TableFixtureData>;
|
|
15
|
-
_subscribedQuerySpecs: ObjectMap<BlockQueryId, {
|
|
16
|
-
querySpec: BlockQuerySpec;
|
|
17
|
-
onChangeCallback?: BlockQuerySubscriptionOnChangeCallback;
|
|
18
|
-
}>;
|
|
19
|
-
_deletedRecordIds: Array<RecordId>;
|
|
20
|
-
_onUnsubscribeFromQueryCallback: (() => void) | null;
|
|
21
|
-
_upperQueryIdsFromPreviousTests: number;
|
|
22
|
-
_shouldQueriesFail: boolean;
|
|
23
|
-
constructor(mockAirtableInterface: MockAirtableInterface, fixtureData: FixtureData);
|
|
24
|
-
setSubscribeToQueryFailureMode(shouldQueriesFail: boolean): void;
|
|
25
|
-
subscribeToQueryAndPopulateStoresAsync(querySpec: BlockQuerySpec, options: BlockQuerySubscriptionOptions): Promise<QuerySpecsResponse>;
|
|
26
|
-
unsubscribeFromQueryIdsAsync(querySpecIds: Array<BlockQueryId>): Promise<{
|
|
27
|
-
status: boolean;
|
|
28
|
-
}>;
|
|
29
|
-
setTableRecordsAsync(tableId: TableId, fixtureRecords: Array<RecordFixtureData>): Promise<void>;
|
|
30
|
-
deleteRecordAsync(tableId: TableId, recordId: RecordId): Promise<void>;
|
|
31
|
-
createRecordAsync(tableId: TableId, initialFixtureRecord: RecordFixtureData): Promise<void>;
|
|
32
|
-
updateRecord(tableId: TableId, recordId: RecordId, fieldId: FieldId, newValue: unknown, opts?: {
|
|
33
|
-
allowUnexpected?: boolean;
|
|
34
|
-
shouldForceOnChangeCallbackWhenNoQueriesMatchRecord?: boolean;
|
|
35
|
-
shouldCallSubscriptionChangesWithEmptyArray?: boolean;
|
|
36
|
-
}): void;
|
|
37
|
-
updateCommentCount(tableId: TableId, recordId: RecordId, newCommentCount: number): void;
|
|
38
|
-
updateColorInView(tableId: TableId, viewId: ViewId, recordId: RecordId, newColor: Color | null): void;
|
|
39
|
-
getTableRecordStoreIfExists(tableId: TableId): RecordStoreForTable | null;
|
|
40
|
-
_getPartiallyLoadedRecordIds(fixtureTable: TableFixtureData): string[];
|
|
41
|
-
addFieldToFixtureTable(tableId: TableId, fieldFixtureData: FieldFixtureData): void;
|
|
42
|
-
_isRecordCellValueLoadedForFieldId(fixtureTable: TableFixtureData, recordId: RecordId, fieldId: FieldId): boolean;
|
|
43
|
-
_getRecordCellValueByFieldId(fixtureTable: TableFixtureData, recordId: RecordId, fieldId: FieldId): unknown;
|
|
44
|
-
_getRecordCommentCount(fixtureTable: TableFixtureData, recordId: RecordId): number;
|
|
45
|
-
_getRecordCreatedTime(fixtureTable: TableFixtureData, recordId: RecordId): Date;
|
|
46
|
-
setViewData(tableId: TableId, viewId: ViewId, viewFixtureData: Partial<ViewFixtureData>): void;
|
|
47
|
-
getViewMetadataStoreIfExists(tableId: TableId, viewId: ViewId): ViewStore | null;
|
|
48
|
-
getCountOfQueriesSubscribed(): number;
|
|
49
|
-
onUnsubscribeFromQuery(onUnsubscribeFromQueryCallback: () => void): void;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=mock_base_data_stores.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock_base_data_stores.d.ts","sourceRoot":"","sources":["../../../../test/airtable_interface_mocks/mock_base_data_stores.ts"],"names":[],"mappings":"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"}
|