@airtable/blocks 1.3.0 → 1.5.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.
Files changed (125) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/dist/cjs/index.js +30 -11
  3. package/dist/cjs/injected/airtable_interface.js +2 -1
  4. package/dist/cjs/models/cursor.js +4 -6
  5. package/dist/cjs/models/field.js +24 -0
  6. package/dist/cjs/models/grouped_record_query_result.js +475 -0
  7. package/dist/cjs/models/models.js +30 -0
  8. package/dist/cjs/models/mutations.js +41 -9
  9. package/dist/cjs/models/record_query_result.js +37 -12
  10. package/dist/cjs/models/session.js +65 -23
  11. package/dist/cjs/models/table_or_view_query_result.js +306 -97
  12. package/dist/cjs/models/view.js +71 -1
  13. package/dist/cjs/models/view_data_store.js +62 -20
  14. package/dist/cjs/models/view_metadata_query_result.js +41 -8
  15. package/dist/cjs/sdk.js +2 -2
  16. package/dist/cjs/testing/mock_airtable_interface.js +1 -110
  17. package/dist/cjs/types/airtable_interface.js +19 -1
  18. package/dist/cjs/types/mutations.js +2 -1
  19. package/dist/cjs/types/view.js +1 -0
  20. package/dist/cjs/ui/confirmation_dialog.js +12 -4
  21. package/dist/cjs/ui/expand_record.js +5 -5
  22. package/dist/cjs/ui/expand_record_list.js +2 -5
  23. package/dist/cjs/ui/expand_record_picker_async.js +9 -16
  24. package/dist/cjs/ui/form_field.js +2 -2
  25. package/dist/cjs/ui/icon_config.js +11 -4
  26. package/dist/cjs/ui/initialize_block.js +62 -10
  27. package/dist/cjs/ui/ui.js +9 -2
  28. package/dist/cjs/ui/use_loadable.js +2 -2
  29. package/dist/cjs/ui/use_records.js +54 -40
  30. package/dist/cjs/ui/use_view_metadata.js +1 -1
  31. package/dist/cjs/unstable_testing_utils.js +163 -0
  32. package/dist/types/src/color_utils.d.ts +4 -4
  33. package/dist/types/src/color_utils.d.ts.map +1 -1
  34. package/dist/types/src/index.d.ts +2 -2
  35. package/dist/types/src/index.d.ts.map +1 -1
  36. package/dist/types/src/injected/airtable_interface.d.ts.map +1 -1
  37. package/dist/types/src/models/cursor.d.ts +4 -6
  38. package/dist/types/src/models/cursor.d.ts.map +1 -1
  39. package/dist/types/src/models/field.d.ts +17 -1
  40. package/dist/types/src/models/field.d.ts.map +1 -1
  41. package/dist/types/src/models/grouped_record_query_result.d.ts +61 -0
  42. package/dist/types/src/models/grouped_record_query_result.d.ts.map +1 -0
  43. package/dist/types/src/models/models.d.ts +4 -1
  44. package/dist/types/src/models/models.d.ts.map +1 -1
  45. package/dist/types/src/models/mutations.d.ts.map +1 -1
  46. package/dist/types/src/models/record.d.ts +0 -2
  47. package/dist/types/src/models/record.d.ts.map +1 -1
  48. package/dist/types/src/models/record_query_result.d.ts +22 -0
  49. package/dist/types/src/models/record_query_result.d.ts.map +1 -1
  50. package/dist/types/src/models/session.d.ts +65 -23
  51. package/dist/types/src/models/session.d.ts.map +1 -1
  52. package/dist/types/src/models/table_or_view_query_result.d.ts +21 -0
  53. package/dist/types/src/models/table_or_view_query_result.d.ts.map +1 -1
  54. package/dist/types/src/models/view.d.ts +26 -1
  55. package/dist/types/src/models/view.d.ts.map +1 -1
  56. package/dist/types/src/models/view_data_store.d.ts +2 -0
  57. package/dist/types/src/models/view_data_store.d.ts.map +1 -1
  58. package/dist/types/src/models/view_metadata_query_result.d.ts +21 -0
  59. package/dist/types/src/models/view_metadata_query_result.d.ts.map +1 -1
  60. package/dist/types/src/sdk.d.ts +3 -0
  61. package/dist/types/src/sdk.d.ts.map +1 -1
  62. package/dist/types/src/testing/mock_airtable_interface.d.ts +79 -0
  63. package/dist/types/src/testing/mock_airtable_interface.d.ts.map +1 -1
  64. package/dist/types/src/types/airtable_interface.d.ts +28 -1
  65. package/dist/types/src/types/airtable_interface.d.ts.map +1 -1
  66. package/dist/types/src/types/field.d.ts +241 -1
  67. package/dist/types/src/types/field.d.ts.map +1 -1
  68. package/dist/types/src/types/mutations.d.ts +19 -3
  69. package/dist/types/src/types/mutations.d.ts.map +1 -1
  70. package/dist/types/src/types/view.d.ts +26 -1
  71. package/dist/types/src/types/view.d.ts.map +1 -1
  72. package/dist/types/src/ui/confirmation_dialog.d.ts +8 -0
  73. package/dist/types/src/ui/confirmation_dialog.d.ts.map +1 -1
  74. package/dist/types/src/ui/expand_record.d.ts +1 -0
  75. package/dist/types/src/ui/expand_record.d.ts.map +1 -1
  76. package/dist/types/src/ui/expand_record_list.d.ts.map +1 -1
  77. package/dist/types/src/ui/expand_record_picker_async.d.ts +0 -3
  78. package/dist/types/src/ui/expand_record_picker_async.d.ts.map +1 -1
  79. package/dist/types/src/ui/icon_config.d.ts +15 -8
  80. package/dist/types/src/ui/icon_config.d.ts.map +1 -1
  81. package/dist/types/src/ui/initialize_block.d.ts +19 -2
  82. package/dist/types/src/ui/initialize_block.d.ts.map +1 -1
  83. package/dist/types/src/ui/ui.d.ts +2 -2
  84. package/dist/types/src/ui/ui.d.ts.map +1 -1
  85. package/dist/types/src/ui/use_loadable.d.ts +2 -2
  86. package/dist/types/src/ui/use_records.d.ts +11 -1
  87. package/dist/types/src/ui/use_records.d.ts.map +1 -1
  88. package/dist/types/src/unstable_testing_utils.d.ts +13 -0
  89. package/dist/types/src/unstable_testing_utils.d.ts.map +1 -0
  90. package/dist/types/test/airtable_interface_mocks/linked_records.d.ts.map +1 -1
  91. package/dist/types/test/airtable_interface_mocks/mock_airtable_interface_internal.d.ts +32 -1
  92. package/dist/types/test/airtable_interface_mocks/mock_airtable_interface_internal.d.ts.map +1 -1
  93. package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts.map +1 -1
  94. package/dist/types/test/ui/expand_record.test.d.ts +2 -0
  95. package/dist/types/test/ui/expand_record.test.d.ts.map +1 -0
  96. package/dist/types/test/ui/expand_record_list.test.d.ts +2 -0
  97. package/dist/types/test/ui/expand_record_list.test.d.ts.map +1 -0
  98. package/dist/types/test/ui/expand_record_picker_async.test.d.ts +2 -0
  99. package/dist/types/test/ui/expand_record_picker_async.test.d.ts.map +1 -0
  100. package/index.d.ts +4 -2
  101. package/package.json +4 -4
  102. package/types.d.ts +3 -0
  103. package/unstable_testing_utils.d.ts +1 -0
  104. package/unstable_testing_utils.js +1 -0
  105. package/dist/cjs/testing/inject_mock_airtable_interface.js +0 -63
  106. package/dist/cjs/testing/mock_airtable_interface_external.js +0 -741
  107. package/dist/cjs/testing/test_driver.js +0 -260
  108. package/dist/cjs/types/test_mutations.js +0 -32
  109. package/dist/cjs/unstable_testing.js +0 -17
  110. package/dist/types/src/testing/inject_mock_airtable_interface.d.ts +0 -2
  111. package/dist/types/src/testing/inject_mock_airtable_interface.d.ts.map +0 -1
  112. package/dist/types/src/testing/mock_airtable_interface_external.d.ts +0 -107
  113. package/dist/types/src/testing/mock_airtable_interface_external.d.ts.map +0 -1
  114. package/dist/types/src/testing/test_driver.d.ts +0 -90
  115. package/dist/types/src/testing/test_driver.d.ts.map +0 -1
  116. package/dist/types/src/types/test_mutations.d.ts +0 -27
  117. package/dist/types/src/types/test_mutations.d.ts.map +0 -1
  118. package/dist/types/src/unstable_testing.d.ts +0 -3
  119. package/dist/types/src/unstable_testing.d.ts.map +0 -1
  120. package/dist/types/test/testing/mock_airtable_interface_external.test.d.ts +0 -2
  121. package/dist/types/test/testing/mock_airtable_interface_external.test.d.ts.map +0 -1
  122. package/dist/types/test/testing/test_driver.test.d.ts +0 -2
  123. package/dist/types/test/testing/test_driver.test.d.ts.map +0 -1
  124. package/unstable_testing.d.ts +0 -1
  125. package/unstable_testing.js +0 -1
@@ -41,11 +41,13 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
41
41
 
42
42
  var _private_utils = require("../private_utils");
43
43
 
44
+ var _mutations = require("../types/mutations");
45
+
44
46
  var _abstract_model = _interopRequireDefault(require("./abstract_model"));
45
47
 
46
48
  var _object_pool = _interopRequireDefault(require("./object_pool"));
47
49
 
48
- var _record_query_result = _interopRequireDefault(require("./record_query_result"));
50
+ var _record_query_result = _interopRequireWildcard(require("./record_query_result"));
49
51
 
50
52
  var _view_metadata_query_result = _interopRequireDefault(require("./view_metadata_query_result"));
51
53
 
@@ -284,6 +286,74 @@ function (_AbstractModel) {
284
286
  }
285
287
  }, null, this);
286
288
  }
289
+ /**
290
+ * Checks whether the current user has permission to update view metadata.
291
+ *
292
+ * @param viewMetadata
293
+ * @hidden
294
+ */
295
+
296
+ }, {
297
+ key: "checkPermissionsForUpdateMetadata",
298
+ value: function checkPermissionsForUpdateMetadata(viewMetadata) {
299
+ var metadata = {
300
+ groupLevels: (0, _record_query_result.normalizeSortsOrGroups)(this.parentTable, viewMetadata.groupLevels)
301
+ };
302
+ return this._sdk.__mutations.checkPermissionsForMutation({
303
+ type: _mutations.MutationTypes.UPDATE_VIEW_METADATA,
304
+ tableId: this.parentTable.id,
305
+ viewId: this.id,
306
+ metadata
307
+ });
308
+ }
309
+ /**
310
+ * An alias for `checkPermissionsForUpdateMetadata(viewMetadata).hasPermission`.
311
+ *
312
+ * Checks whether the current user has permission to update view metadata.
313
+ *
314
+ * @param viewMetadata
315
+ * @hidden
316
+ */
317
+
318
+ }, {
319
+ key: "hasPermissionToUpdateMetadata",
320
+ value: function hasPermissionToUpdateMetadata(viewMetadata) {
321
+ return this.checkPermissionsForUpdateMetadata(viewMetadata).hasPermission;
322
+ }
323
+ /**
324
+ * Updates view metadata, this is currently only supported from block views
325
+ * altering their own view's grouping config.
326
+ *
327
+ * @param ViewMetadataForUpdate
328
+ * @hidden
329
+ */
330
+
331
+ }, {
332
+ key: "updateMetadataAsync",
333
+ value: function updateMetadataAsync(viewMetadata) {
334
+ var metadata;
335
+ return _regenerator.default.async(function updateMetadataAsync$(_context3) {
336
+ while (1) {
337
+ switch (_context3.prev = _context3.next) {
338
+ case 0:
339
+ metadata = {
340
+ groupLevels: (0, _record_query_result.normalizeSortsOrGroups)(this.parentTable, viewMetadata.groupLevels)
341
+ };
342
+ _context3.next = 3;
343
+ return _regenerator.default.awrap(this._sdk.__mutations.applyMutationAsync({
344
+ type: _mutations.MutationTypes.UPDATE_VIEW_METADATA,
345
+ tableId: this.parentTable.id,
346
+ viewId: this.id,
347
+ metadata
348
+ }));
349
+
350
+ case 3:
351
+ case "end":
352
+ return _context3.stop();
353
+ }
354
+ }
355
+ }, null, this);
356
+ }
287
357
  /**
288
358
  * @internal
289
359
  */
@@ -56,6 +56,8 @@ var _abstract_model_with_async_data = _interopRequireDefault(require("./abstract
56
56
  var WatchableViewDataStoreKeys = Object.freeze({
57
57
  visibleRecords: 'visibleRecords',
58
58
  visibleRecordIds: 'visibleRecordIds',
59
+ groups: 'groups',
60
+ groupLevels: 'groupLevels',
59
61
  recordColors: 'recordColors',
60
62
  allFieldIds: 'allFieldIds',
61
63
  visibleFieldIds: 'visibleFieldIds'
@@ -157,17 +159,19 @@ function (_AbstractModelWithAsy) {
157
159
  viewData = _ref2[0];
158
160
  this._data.visibleRecordIds = viewData.visibleRecordIds;
159
161
  this._data.fieldOrder = viewData.fieldOrder;
162
+ this._data.groups = viewData.groups;
163
+ this._data.groupLevels = viewData.groupLevels;
160
164
  this._data.colorsByRecordId = viewData.colorsByRecordId;
161
165
 
162
166
  if (!this._data.colorsByRecordId) {
163
- _context2.next = 30;
167
+ _context2.next = 32;
164
168
  break;
165
169
  }
166
170
 
167
171
  _iteratorNormalCompletion = true;
168
172
  _didIteratorError = false;
169
173
  _iteratorError = undefined;
170
- _context2.prev = 14;
174
+ _context2.prev = 16;
171
175
 
172
176
  for (_iterator = this.visibleRecords[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
173
177
  record = _step.value;
@@ -177,48 +181,48 @@ function (_AbstractModelWithAsy) {
177
181
  }
178
182
  }
179
183
 
180
- _context2.next = 22;
184
+ _context2.next = 24;
181
185
  break;
182
186
 
183
- case 18:
184
- _context2.prev = 18;
185
- _context2.t0 = _context2["catch"](14);
187
+ case 20:
188
+ _context2.prev = 20;
189
+ _context2.t0 = _context2["catch"](16);
186
190
  _didIteratorError = true;
187
191
  _iteratorError = _context2.t0;
188
192
 
189
- case 22:
190
- _context2.prev = 22;
191
- _context2.prev = 23;
193
+ case 24:
194
+ _context2.prev = 24;
195
+ _context2.prev = 25;
192
196
 
193
197
  if (!_iteratorNormalCompletion && _iterator.return != null) {
194
198
  _iterator.return();
195
199
  }
196
200
 
197
- case 25:
198
- _context2.prev = 25;
201
+ case 27:
202
+ _context2.prev = 27;
199
203
 
200
204
  if (!_didIteratorError) {
201
- _context2.next = 28;
205
+ _context2.next = 30;
202
206
  break;
203
207
  }
204
208
 
205
209
  throw _iteratorError;
206
210
 
207
- case 28:
208
- return _context2.finish(25);
209
-
210
- case 29:
211
- return _context2.finish(22);
212
-
213
211
  case 30:
214
- return _context2.abrupt("return", [WatchableViewDataStoreKeys.visibleRecords, WatchableViewDataStoreKeys.visibleRecordIds, WatchableViewDataStoreKeys.allFieldIds, WatchableViewDataStoreKeys.visibleFieldIds, WatchableViewDataStoreKeys.recordColors]);
212
+ return _context2.finish(27);
215
213
 
216
214
  case 31:
215
+ return _context2.finish(24);
216
+
217
+ case 32:
218
+ return _context2.abrupt("return", [WatchableViewDataStoreKeys.visibleRecords, WatchableViewDataStoreKeys.visibleRecordIds, WatchableViewDataStoreKeys.allFieldIds, WatchableViewDataStoreKeys.groups, WatchableViewDataStoreKeys.groupLevels, WatchableViewDataStoreKeys.visibleFieldIds, WatchableViewDataStoreKeys.recordColors]);
219
+
220
+ case 33:
217
221
  case "end":
218
222
  return _context2.stop();
219
223
  }
220
224
  }
221
- }, null, this, [[14, 18, 22, 30], [23,, 25, 29]]);
225
+ }, null, this, [[16, 20, 24, 32], [25,, 27, 31]]);
222
226
  }
223
227
  }, {
224
228
  key: "unloadData",
@@ -239,6 +243,7 @@ function (_AbstractModelWithAsy) {
239
243
 
240
244
  if (!this.isDeleted) {
241
245
  this._data.visibleRecordIds = undefined;
246
+ this._data.groups = undefined;
242
247
  this._data.colorsByRecordId = undefined;
243
248
  }
244
249
  }
@@ -322,6 +327,16 @@ function (_AbstractModelWithAsy) {
322
327
 
323
328
 
324
329
  this._onChange(WatchableViewDataStoreKeys.visibleFieldIds);
330
+ } // Technically it's possible for groupLevels changing to cause a groups
331
+ // change since we derive group information from the groupLevels (fieldId)
332
+
333
+
334
+ if (dirtyPaths.groups || dirtyPaths.groupLevels) {
335
+ this._onChange(WatchableViewDataStoreKeys.groups);
336
+ }
337
+
338
+ if (dirtyPaths.groupLevels) {
339
+ this._onChange(WatchableViewDataStoreKeys.groupLevels);
325
340
  }
326
341
 
327
342
  if (dirtyPaths.colorsByRecordId) {
@@ -414,6 +429,33 @@ function (_AbstractModelWithAsy) {
414
429
  return record;
415
430
  });
416
431
  }
432
+ /**
433
+ * Gets the groups in a view, can be watched to be notified if a record changes groups,
434
+ * if a record is changed/deleted/created, if sort order of groups changes, grouping
435
+ * heirarchy changes, or grouping field changes.
436
+ *
437
+ * @hidden
438
+ */
439
+
440
+ }, {
441
+ key: "groups",
442
+ get: function get() {
443
+ (0, _error_utils.invariant)(this.parentRecordStore.isRecordMetadataLoaded, 'Table data is not loaded');
444
+ var groups = this._data.groups;
445
+ return groups !== null && groups !== void 0 ? groups : null;
446
+ }
447
+ /**
448
+ * Gets the group config for this view, can be watched to know when groupLevels
449
+ * changes (reorder, groups deleted, groups changed, grouped field changes)
450
+ */
451
+
452
+ }, {
453
+ key: "groupLevels",
454
+ get: function get() {
455
+ (0, _error_utils.invariant)(this.parentRecordStore.isRecordMetadataLoaded, 'Table data is not loaded');
456
+ var groupLevels = this._data.groupLevels;
457
+ return groupLevels !== null && groupLevels !== void 0 ? groupLevels : null;
458
+ }
417
459
  }, {
418
460
  key: "allFieldIds",
419
461
  get: function get() {
@@ -2,12 +2,20 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ require("core-js/modules/es.symbol");
6
+
7
+ require("core-js/modules/es.array.filter");
8
+
5
9
  require("core-js/modules/es.array.map");
6
10
 
11
+ require("core-js/modules/es.object.get-own-property-descriptors");
12
+
7
13
  require("core-js/modules/es.object.to-string");
8
14
 
9
15
  require("core-js/modules/es.promise");
10
16
 
17
+ require("core-js/modules/web.dom-collections.for-each");
18
+
11
19
  Object.defineProperty(exports, "__esModule", {
12
20
  value: true
13
21
  });
@@ -37,13 +45,15 @@ var _private_utils = require("../private_utils");
37
45
 
38
46
  var _abstract_model_with_async_data = _interopRequireDefault(require("./abstract_model_with_async_data"));
39
47
 
40
- /** @module @airtable/blocks/models: View */
48
+ 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; }
49
+
50
+ 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; }
41
51
 
42
- /** */
43
52
  var WatchableViewMetadataKeys = {
44
53
  allFields: 'allFields',
45
54
  visibleFields: 'visibleFields',
46
- isDataLoaded: 'isDataLoaded'
55
+ isDataLoaded: 'isDataLoaded',
56
+ groupLevels: 'groupLevels'
47
57
  };
48
58
  /**
49
59
  * A key in {@link ViewMetadataQueryResult} that can be watched.
@@ -92,7 +102,7 @@ function (_AbstractModelWithAsy) {
92
102
  }, {
93
103
  key: "_shouldLoadDataForKey",
94
104
  value: function _shouldLoadDataForKey(key) {
95
- return key === WatchableViewMetadataKeys.allFields || key === WatchableViewMetadataKeys.visibleFields;
105
+ return key === WatchableViewMetadataKeys.allFields || key === WatchableViewMetadataKeys.visibleFields || key === WatchableViewMetadataKeys.groupLevels;
96
106
  }
97
107
  /** */
98
108
 
@@ -112,6 +122,9 @@ function (_AbstractModelWithAsy) {
112
122
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_onAllFieldIdsChange", () => {
113
123
  _this._onChange(WatchableViewMetadataKeys.allFields);
114
124
  });
125
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_onGroupLevelsChange", () => {
126
+ _this._onChange(WatchableViewMetadataKeys.groupLevels);
127
+ });
115
128
  _this.parentView = parentView;
116
129
  _this._viewDataStore = viewDataStore;
117
130
  return _this;
@@ -143,9 +156,11 @@ function (_AbstractModelWithAsy) {
143
156
 
144
157
  this._viewDataStore.watch('allFieldIds', this._onAllFieldIdsChange);
145
158
 
146
- return _context.abrupt("return", [WatchableViewMetadataKeys.allFields, WatchableViewMetadataKeys.visibleFields]);
159
+ this._viewDataStore.watch('groupLevels', this._onGroupLevelsChange);
160
+
161
+ return _context.abrupt("return", [WatchableViewMetadataKeys.visibleFields, WatchableViewMetadataKeys.allFields, WatchableViewMetadataKeys.groupLevels]);
147
162
 
148
- case 5:
163
+ case 6:
149
164
  case "end":
150
165
  return _context.stop();
151
166
  }
@@ -161,6 +176,8 @@ function (_AbstractModelWithAsy) {
161
176
 
162
177
  this._viewDataStore.unwatch('allFieldIds', this._onAllFieldIdsChange);
163
178
 
179
+ this._viewDataStore.unwatch('groupLevels', this._onGroupLevelsChange);
180
+
164
181
  this._viewDataStore.unloadData();
165
182
  }
166
183
  /** @internal */
@@ -182,13 +199,15 @@ function (_AbstractModelWithAsy) {
182
199
  if (!this._viewDataStore.isDataLoaded) {
183
200
  return {
184
201
  visibleFieldIds: null,
185
- allFieldIds: null
202
+ allFieldIds: null,
203
+ groupLevels: null
186
204
  };
187
205
  }
188
206
 
189
207
  return {
190
208
  visibleFieldIds: this._viewDataStore.visibleFieldIds,
191
- allFieldIds: this._viewDataStore.allFieldIds
209
+ allFieldIds: this._viewDataStore.allFieldIds,
210
+ groupLevels: this._viewDataStore.groupLevels
192
211
  };
193
212
  }
194
213
  }, {
@@ -213,6 +232,20 @@ function (_AbstractModelWithAsy) {
213
232
  (0, _error_utils.invariant)(visibleFieldIds, 'view meta data is not loaded');
214
233
  return visibleFieldIds.map(fieldId => this.parentView.parentTable.getFieldById(fieldId));
215
234
  }
235
+ /**
236
+ * Returns group levels for this view. Watchable.
237
+ *
238
+ * @hidden
239
+ */
240
+
241
+ }, {
242
+ key: "groupLevels",
243
+ get: function get() {
244
+ var groupLevels = this._data.groupLevels;
245
+ return groupLevels ? groupLevels.map(singleConfig => _objectSpread({}, singleConfig, {
246
+ field: this.parentView.parentTable.getFieldById(singleConfig.fieldId)
247
+ })) : null;
248
+ }
216
249
  }]);
217
250
  return ViewMetadataQueryResult;
218
251
  }(_abstract_model_with_async_data.default);
package/dist/cjs/sdk.js CHANGED
@@ -141,7 +141,7 @@ function () {
141
141
 
142
142
  /** @internal */
143
143
 
144
- /** @internal */
144
+ /** @hidden */
145
145
  function BlockSdk(airtableInterface) {
146
146
  (0, _classCallCheck2.default)(this, BlockSdk);
147
147
  (0, _defineProperty2.default)(this, "__airtableInterface", void 0);
@@ -325,4 +325,4 @@ function () {
325
325
  }();
326
326
 
327
327
  exports.default = BlockSdk;
328
- (0, _defineProperty2.default)(BlockSdk, "VERSION", "1.3.0");
328
+ (0, _defineProperty2.default)(BlockSdk, "VERSION", "1.5.1");
@@ -15,10 +15,6 @@ Object.defineProperty(exports, "__esModule", {
15
15
  });
16
16
  exports.default = void 0;
17
17
 
18
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
19
-
20
- require("regenerator-runtime/runtime");
21
-
22
18
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
23
19
 
24
20
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -161,7 +157,7 @@ var idGenerator = {
161
157
  generateFieldId: () => 'fldGeneratedMockId',
162
158
  generateTableId: () => 'tblGeneratedMockId'
163
159
  };
164
- /** @internal */
160
+ /** @hidden */
165
161
 
166
162
  var MockAirtableInterface =
167
163
  /*#__PURE__*/
@@ -253,42 +249,6 @@ function (_EventEmitter) {
253
249
  }, {
254
250
  key: "subscribeToFocus",
255
251
  value: function subscribeToFocus() {}
256
- }, {
257
- key: "fetchAndSubscribeToCellValuesInFieldsAsync",
258
- value: function fetchAndSubscribeToCellValuesInFieldsAsync(tableId, fieldIds) {
259
- throw (0, _error_utils.spawnError)('fetchAndSubscribeToCellValuesInFieldsAsync unimplemented');
260
- }
261
- }, {
262
- key: "fetchAndSubscribeToCursorDataAsync",
263
- value: function fetchAndSubscribeToCursorDataAsync() {
264
- throw (0, _error_utils.spawnError)('fetchAndSubscribeToCursorDataAsync unimplemented');
265
- }
266
- }, {
267
- key: "fetchAndSubscribeToTableDataAsync",
268
- value: function fetchAndSubscribeToTableDataAsync(tableId) {
269
- throw (0, _error_utils.spawnError)('fetchAndSubscribeToTableDataAsync unimplemented');
270
- }
271
- }, {
272
- key: "fetchAndSubscribeToViewDataAsync",
273
- value: function fetchAndSubscribeToViewDataAsync(tableId, viewId) {
274
- return _regenerator.default.async(function fetchAndSubscribeToViewDataAsync$(_context) {
275
- while (1) {
276
- switch (_context.prev = _context.next) {
277
- case 0:
278
- throw (0, _error_utils.spawnError)('fetchAndSubscribeToViewDataAsync unimplemented');
279
-
280
- case 1:
281
- case "end":
282
- return _context.stop();
283
- }
284
- }
285
- });
286
- }
287
- }, {
288
- key: "fetchDefaultCellValuesByFieldIdAsync",
289
- value: function fetchDefaultCellValuesByFieldIdAsync() {
290
- throw (0, _error_utils.spawnError)('fetchDefaultCellValuesByFieldIdAsync unimplemented');
291
- }
292
252
  }, {
293
253
  key: "triggerModelUpdates",
294
254
  value: function triggerModelUpdates(changes) {
@@ -324,75 +284,6 @@ function (_EventEmitter) {
324
284
  }, {
325
285
  key: "unsubscribeFromViewData",
326
286
  value: function unsubscribeFromViewData() {}
327
- }, {
328
- key: "expandRecord",
329
- value: function expandRecord(tableId, recordId, recordIds) {
330
- throw (0, _error_utils.spawnError)('expandRecord unimplemented');
331
- }
332
- }, {
333
- key: "expandRecordList",
334
- value: function expandRecordList() {
335
- throw (0, _error_utils.spawnError)('expandRecordList unimplemented');
336
- }
337
- }, {
338
- key: "expandRecordPickerAsync",
339
- value: function expandRecordPickerAsync() {
340
- throw (0, _error_utils.spawnError)('expandRecordPickerAsync unimplemented');
341
- }
342
- }, {
343
- key: "reloadFrame",
344
- value: function reloadFrame() {
345
- throw (0, _error_utils.spawnError)('reloadFrame unimplemented');
346
- }
347
- }, {
348
- key: "setSettingsButtonVisibility",
349
- value: function setSettingsButtonVisibility() {
350
- throw (0, _error_utils.spawnError)('setSettingsButtonVisibility unimplemented');
351
- }
352
- }, {
353
- key: "setUndoRedoMode",
354
- value: function setUndoRedoMode() {
355
- throw (0, _error_utils.spawnError)('setUndoRedoMode unimplemented');
356
- }
357
- }, {
358
- key: "setFullscreenMaxSize",
359
- value: function setFullscreenMaxSize() {
360
- throw (0, _error_utils.spawnError)('setFullscreenMaxSize unimplemented');
361
- }
362
- }, {
363
- key: "enterFullscreen",
364
- value: function enterFullscreen() {
365
- throw (0, _error_utils.spawnError)('enterFullscreen unimplemented');
366
- }
367
- }, {
368
- key: "exitFullscreen",
369
- value: function exitFullscreen() {
370
- throw (0, _error_utils.spawnError)('exitFullscreen unimplemented');
371
- }
372
- }, {
373
- key: "fetchAndSubscribeToPerformRecordActionAsync",
374
- value: function fetchAndSubscribeToPerformRecordActionAsync() {
375
- throw (0, _error_utils.spawnError)('fetchAndSubscribeToPerformRecordActionAsync unimplemented');
376
- }
377
- }, {
378
- key: "trackEvent",
379
- value: function trackEvent() {
380
- throw (0, _error_utils.spawnError)('trackEvent unimplemented');
381
- }
382
- }, {
383
- key: "trackExposure",
384
- value: function trackExposure() {// No-op to allow tests that happen to use session.__isFeatureEnabled to pass.
385
- }
386
- }, {
387
- key: "sendStat",
388
- value: function sendStat() {
389
- throw (0, _error_utils.spawnError)('sendStat unimplemented');
390
- }
391
- }, {
392
- key: "performBackendFetchAsync",
393
- value: function performBackendFetchAsync(requestJson) {
394
- throw (0, _error_utils.spawnError)('performBackendFetchAsync unimplemented');
395
- }
396
287
  }, {
397
288
  key: "aggregators",
398
289
  get: function get() {
@@ -1 +1,19 @@
1
- "use strict";
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BlockRunContextType = void 0;
7
+ // BlockRunContextType, BlockInstallationPageBlockRunContext, ViewBlockRunContext, BlockRunContext
8
+ // must be kept in sync with block_run_context.tsx in hyperbase repo
9
+
10
+ /** @hidden */
11
+ var BlockRunContextType;
12
+ /** @hidden */
13
+
14
+ exports.BlockRunContextType = BlockRunContextType;
15
+
16
+ (function (BlockRunContextType) {
17
+ BlockRunContextType["DASHBOARD_APP"] = "dashboardApp";
18
+ BlockRunContextType["VIEW"] = "view";
19
+ })(BlockRunContextType || (exports.BlockRunContextType = BlockRunContextType = {}));
@@ -17,7 +17,8 @@ var MutationTypes = Object.freeze({
17
17
  SET_MULTIPLE_GLOBAL_CONFIG_PATHS: 'setMultipleGlobalConfigPaths',
18
18
  CREATE_SINGLE_FIELD: 'createSingleField',
19
19
  UPDATE_SINGLE_FIELD_CONFIG: 'updateSingleFieldConfig',
20
- CREATE_SINGLE_TABLE: 'createSingleTable'
20
+ CREATE_SINGLE_TABLE: 'createSingleTable',
21
+ UPDATE_VIEW_METADATA: 'updateViewMetadata'
21
22
  });
22
23
  /** @hidden */
23
24
 
@@ -33,4 +33,5 @@ exports.ViewType = ViewType;
33
33
  ViewType["CALENDAR"] = "calendar";
34
34
  ViewType["GALLERY"] = "gallery";
35
35
  ViewType["KANBAN"] = "kanban";
36
+ ViewType["BLOCK"] = "block";
36
37
  })(ViewType || (exports.ViewType = ViewType = {}));
@@ -105,7 +105,9 @@ function (_React$Component) {
105
105
  backgroundStyle = _this$props.backgroundStyle,
106
106
  onCancel = _this$props.onCancel,
107
107
  onConfirm = _this$props.onConfirm,
108
- restOfProps = (0, _objectWithoutProperties2.default)(_this$props, ["title", "body", "cancelButtonText", "confirmButtonText", "isConfirmActionDangerous", "className", "style", "backgroundClassName", "backgroundStyle", "onCancel", "onConfirm"]);
108
+ isCancelButtonDisabled = _this$props.isCancelButtonDisabled,
109
+ isConfirmButtonDisabled = _this$props.isConfirmButtonDisabled,
110
+ restOfProps = (0, _objectWithoutProperties2.default)(_this$props, ["title", "body", "cancelButtonText", "confirmButtonText", "isConfirmActionDangerous", "className", "style", "backgroundClassName", "backgroundStyle", "onCancel", "onConfirm", "isCancelButtonDisabled", "isConfirmButtonDisabled"]);
109
111
  return React.createElement(_dialog.default, (0, _extends2.default)({
110
112
  onClose: onCancel,
111
113
  className: className,
@@ -126,12 +128,14 @@ function (_React$Component) {
126
128
  }, React.createElement(_button.default, {
127
129
  ref: this._confirmButtonRef,
128
130
  onClick: onConfirm,
129
- variant: isConfirmActionDangerous ? 'danger' : 'primary'
131
+ variant: isConfirmActionDangerous ? 'danger' : 'primary',
132
+ disabled: isConfirmButtonDisabled
130
133
  }, confirmButtonText), React.createElement(_button.default, {
131
134
  onClick: onCancel,
132
135
  variant: "secondary",
133
136
  alignSelf: "end",
134
- marginRight: 2
137
+ marginRight: 2,
138
+ disabled: isCancelButtonDisabled
135
139
  }, cancelButtonText)));
136
140
  }
137
141
  }]);
@@ -149,12 +153,16 @@ function (_React$Component) {
149
153
  backgroundClassName: _propTypes.default.string,
150
154
  backgroundStyle: _propTypes.default.object,
151
155
  onCancel: _propTypes.default.func.isRequired,
152
- onConfirm: _propTypes.default.func.isRequired
156
+ onConfirm: _propTypes.default.func.isRequired,
157
+ isCancelButtonDisabled: _propTypes.default.bool,
158
+ isConfirmButtonDisabled: _propTypes.default.bool
153
159
  }, _dialog.dialogStylePropTypes));
154
160
  (0, _defineProperty2.default)(ConfirmationDialog, "defaultProps", {
155
161
  cancelButtonText: 'Cancel',
156
162
  confirmButtonText: 'Confirm',
157
163
  isConfirmActionDangerous: false,
164
+ isCancelButtonDisabled: false,
165
+ isConfirmButtonDisabled: false,
158
166
  width: '400px'
159
167
  });
160
168
  var _default = ConfirmationDialog;
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  require("core-js/modules/es.array.map");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
@@ -9,12 +7,14 @@ Object.defineProperty(exports, "__esModule", {
9
7
  });
10
8
  exports.default = void 0;
11
9
 
12
- var _airtable_interface = _interopRequireDefault(require("../injected/airtable_interface"));
13
-
14
10
  /** @module @airtable/blocks/ui: expandRecord */
15
11
 
16
12
  /** */
17
13
 
14
+ /**
15
+ * Options object for expanding a record.
16
+ */
17
+
18
18
  /**
19
19
  * Expands the given record in the Airtable UI.
20
20
  *
@@ -40,7 +40,7 @@ function expandRecord(record, opts) {
40
40
  recordIds = opts.records.map(r => r.id);
41
41
  }
42
42
 
43
- (0, _airtable_interface.default)().expandRecord(record.parentTable.id, record.id, recordIds);
43
+ record.parentTable.parentBase.__sdk.__airtableInterface.expandRecord(record.parentTable.id, record.id, recordIds);
44
44
  }
45
45
 
46
46
  var _default = expandRecord;
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  require("core-js/modules/es.array.map");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
@@ -9,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
9
7
  });
10
8
  exports.default = void 0;
11
9
 
12
- var _airtable_interface = _interopRequireDefault(require("../injected/airtable_interface"));
13
-
14
10
  var _error_utils = require("../error_utils");
15
11
 
16
12
  /** @module @airtable/blocks/ui: expandRecordList */
@@ -48,7 +44,8 @@ function expandRecordList(records, opts) {
48
44
  (0, _error_utils.invariant)(field.parentTable.id === tableId, 'all fields must belong to the same table');
49
45
  return field.id;
50
46
  }) : null;
51
- (0, _airtable_interface.default)().expandRecordList(tableId, recordIds, fieldIds);
47
+
48
+ records[0].parentTable.parentBase.__sdk.__airtableInterface.expandRecordList(tableId, recordIds, fieldIds);
52
49
  }
53
50
 
54
51
  var _default = expandRecordList;