@atlaskit/editor-plugin-extension 5.2.5 → 5.2.6

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 (70) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/extensionPlugin.js +1 -1
  3. package/dist/cjs/pm-plugins/toolbar.js +5 -3
  4. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +29 -10
  5. package/dist/cjs/ui/ConfigPanel/ConfigPanelFieldsLoader.js +7 -1
  6. package/dist/cjs/ui/ConfigPanel/Fields/Boolean.js +8 -4
  7. package/dist/cjs/ui/ConfigPanel/Fields/CheckboxGroup.js +4 -2
  8. package/dist/cjs/ui/ConfigPanel/Fields/ColorPicker.js +4 -2
  9. package/dist/cjs/ui/ConfigPanel/Fields/CustomSelect.js +4 -2
  10. package/dist/cjs/ui/ConfigPanel/Fields/Date.js +4 -2
  11. package/dist/cjs/ui/ConfigPanel/Fields/DateRange.js +10 -5
  12. package/dist/cjs/ui/ConfigPanel/Fields/Fieldset.js +2 -1
  13. package/dist/cjs/ui/ConfigPanel/Fields/Number.js +4 -2
  14. package/dist/cjs/ui/ConfigPanel/Fields/RadioGroup.js +2 -1
  15. package/dist/cjs/ui/ConfigPanel/Fields/Select.js +2 -1
  16. package/dist/cjs/ui/ConfigPanel/Fields/String.js +4 -2
  17. package/dist/cjs/ui/ConfigPanel/Fields/UserSelect.js +5 -3
  18. package/dist/cjs/ui/ConfigPanel/FormContent.js +18 -5
  19. package/dist/cjs/ui/ConfigPanel/LoadingState.js +28 -1
  20. package/dist/es2019/extensionPlugin.js +1 -1
  21. package/dist/es2019/pm-plugins/toolbar.js +5 -4
  22. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +18 -6
  23. package/dist/es2019/ui/ConfigPanel/ConfigPanelFieldsLoader.js +7 -1
  24. package/dist/es2019/ui/ConfigPanel/Fields/Boolean.js +8 -4
  25. package/dist/es2019/ui/ConfigPanel/Fields/CheckboxGroup.js +4 -2
  26. package/dist/es2019/ui/ConfigPanel/Fields/ColorPicker.js +4 -2
  27. package/dist/es2019/ui/ConfigPanel/Fields/CustomSelect.js +4 -2
  28. package/dist/es2019/ui/ConfigPanel/Fields/Date.js +4 -2
  29. package/dist/es2019/ui/ConfigPanel/Fields/DateRange.js +10 -5
  30. package/dist/es2019/ui/ConfigPanel/Fields/Fieldset.js +2 -1
  31. package/dist/es2019/ui/ConfigPanel/Fields/Number.js +4 -2
  32. package/dist/es2019/ui/ConfigPanel/Fields/RadioGroup.js +2 -1
  33. package/dist/es2019/ui/ConfigPanel/Fields/Select.js +2 -1
  34. package/dist/es2019/ui/ConfigPanel/Fields/String.js +4 -2
  35. package/dist/es2019/ui/ConfigPanel/Fields/UserSelect.js +5 -3
  36. package/dist/es2019/ui/ConfigPanel/FormContent.js +19 -5
  37. package/dist/es2019/ui/ConfigPanel/LoadingState.js +26 -1
  38. package/dist/esm/extensionPlugin.js +1 -1
  39. package/dist/esm/pm-plugins/toolbar.js +5 -3
  40. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +29 -10
  41. package/dist/esm/ui/ConfigPanel/ConfigPanelFieldsLoader.js +7 -1
  42. package/dist/esm/ui/ConfigPanel/Fields/Boolean.js +8 -4
  43. package/dist/esm/ui/ConfigPanel/Fields/CheckboxGroup.js +4 -2
  44. package/dist/esm/ui/ConfigPanel/Fields/ColorPicker.js +4 -2
  45. package/dist/esm/ui/ConfigPanel/Fields/CustomSelect.js +4 -2
  46. package/dist/esm/ui/ConfigPanel/Fields/Date.js +4 -2
  47. package/dist/esm/ui/ConfigPanel/Fields/DateRange.js +10 -5
  48. package/dist/esm/ui/ConfigPanel/Fields/Fieldset.js +2 -1
  49. package/dist/esm/ui/ConfigPanel/Fields/Number.js +4 -2
  50. package/dist/esm/ui/ConfigPanel/Fields/RadioGroup.js +2 -1
  51. package/dist/esm/ui/ConfigPanel/Fields/Select.js +2 -1
  52. package/dist/esm/ui/ConfigPanel/Fields/String.js +4 -2
  53. package/dist/esm/ui/ConfigPanel/Fields/UserSelect.js +5 -3
  54. package/dist/esm/ui/ConfigPanel/FormContent.js +18 -5
  55. package/dist/esm/ui/ConfigPanel/LoadingState.js +28 -1
  56. package/dist/types/extensionPluginType.d.ts +3 -1
  57. package/dist/types/pm-plugins/toolbar.d.ts +2 -1
  58. package/dist/types/ui/ConfigPanel/ConfigPanel.d.ts +4 -3
  59. package/dist/types/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +2 -2
  60. package/dist/types/ui/ConfigPanel/FormContent.d.ts +1 -1
  61. package/dist/types/ui/ConfigPanel/LoadingState.d.ts +3 -1
  62. package/dist/types/ui/ConfigPanel/types.d.ts +1 -0
  63. package/dist/types-ts4.5/extensionPluginType.d.ts +3 -1
  64. package/dist/types-ts4.5/pm-plugins/toolbar.d.ts +3 -1
  65. package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanel.d.ts +4 -3
  66. package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +2 -2
  67. package/dist/types-ts4.5/ui/ConfigPanel/FormContent.d.ts +1 -1
  68. package/dist/types-ts4.5/ui/ConfigPanel/LoadingState.d.ts +3 -1
  69. package/dist/types-ts4.5/ui/ConfigPanel/types.d.ts +1 -0
  70. package/package.json +7 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @atlaskit/editor-plugin-extension
2
2
 
3
+ ## 5.2.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [#142403](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/142403)
8
+ [`152f0ebf88ba6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/152f0ebf88ba6) -
9
+ [ux] Fix a bug where autosave errors in the config panel would fail silently and prevent closing.
10
+ Additionally add support for disabling unsupported UI elements related to the macro config panel
11
+ while the user is offline, as part of the offline editor experiment.
12
+ - Updated dependencies
13
+
3
14
  ## 5.2.5
4
15
 
5
16
  ### Patch Changes
@@ -182,7 +182,7 @@ var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
182
182
  hoverDecoration: _api === null || _api === void 0 || (_api$decorations = _api.decorations) === null || _api$decorations === void 0 ? void 0 : _api$decorations.actions.hoverDecoration,
183
183
  applyChangeToContextPanel: _api === null || _api === void 0 || (_api$contextPanel5 = _api.contextPanel) === null || _api$contextPanel5 === void 0 ? void 0 : _api$contextPanel5.actions.applyChange,
184
184
  editorAnalyticsAPI: _api === null || _api === void 0 || (_api$analytics4 = _api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions,
185
- extensionApi: (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1') ? _api : undefined
185
+ extensionApi: (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1') || (0, _experiments.editorExperiment)('platform_editor_offline_editing_web', true) ? _api : undefined
186
186
  }),
187
187
  contextPanel:
188
188
  // if showContextPanel action is not available, or platform_editor_ai_object_sidebar_injection feature flag is off
@@ -189,6 +189,7 @@ var breakoutOptions = function breakoutOptions(state, formatMessage, extensionSt
189
189
  return (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1') ? breakoutDropdownOptions(state, formatMessage, breakoutEnabled, editorAnalyticsAPI) : breakoutButtonListOptions(state, formatMessage, extensionState, breakoutEnabled, editorAnalyticsAPI);
190
190
  };
191
191
  var editButton = function editButton(formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI) {
192
+ var isDisabled = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
192
193
  if (!extensionState.showEditButton) {
193
194
  return [];
194
195
  }
@@ -208,7 +209,8 @@ var editButton = function editButton(formatMessage, extensionState, applyChangeT
208
209
  },
209
210
  title: formatMessage(_extensions.messages.edit),
210
211
  tabIndex: null,
211
- focusEditoronEnter: true
212
+ focusEditoronEnter: true,
213
+ disabled: isDisabled
212
214
  }];
213
215
  if ((0, _experiments.editorExperiment)('platform_editor_controls', 'variant1')) {
214
216
  editButtonItems.push({
@@ -268,7 +270,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig(_ref
268
270
  editorAnalyticsAPI = _ref.editorAnalyticsAPI,
269
271
  extensionApi = _ref.extensionApi;
270
272
  return function (state, intl) {
271
- var _hoverDecoration5, _hoverDecoration6, _hoverDecoration7, _hoverDecoration8;
273
+ var _extensionApi$connect, _hoverDecoration5, _hoverDecoration6, _hoverDecoration7, _hoverDecoration8;
272
274
  var formatMessage = intl.formatMessage;
273
275
  var extensionState = (0, _pluginFactory.getPluginState)(state);
274
276
  if ((0, _platformFeatureFlags.fg)('platform_editor_legacy_content_macro')) {
@@ -282,7 +284,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig(_ref
282
284
  return;
283
285
  }
284
286
  var nodeType = [state.schema.nodes.extension, state.schema.nodes.inlineExtension, state.schema.nodes.bodiedExtension, state.schema.nodes.multiBodiedExtension];
285
- var editButtonItems = editButton(formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI);
287
+ var editButtonItems = editButton(formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI, (0, _experiments.editorExperiment)('platform_editor_offline_editing_web', true) && (extensionApi === null || extensionApi === void 0 || (_extensionApi$connect = extensionApi.connectivity) === null || _extensionApi$connect === void 0 || (_extensionApi$connect = _extensionApi$connect.sharedState) === null || _extensionApi$connect === void 0 || (_extensionApi$connect = _extensionApi$connect.currentState()) === null || _extensionApi$connect === void 0 ? void 0 : _extensionApi$connect.mode) === 'offline');
286
288
  var breakoutItems = breakoutOptions(state, formatMessage, extensionState, breakoutEnabled, editorAnalyticsAPI);
287
289
  var extensionObj = (0, _utils3.getSelectedExtension)(state, true);
288
290
 
@@ -28,6 +28,7 @@ var _extensions = require("@atlaskit/editor-common/extensions");
28
28
  var _hooks = require("@atlaskit/editor-common/hooks");
29
29
  var _form = _interopRequireWildcard(require("@atlaskit/form"));
30
30
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
31
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
31
32
  var _constants = require("./constants");
32
33
  var _DescriptionSummary = require("./DescriptionSummary");
33
34
  var _ErrorMessage = _interopRequireDefault(require("./ErrorMessage"));
@@ -57,7 +58,8 @@ function ConfigForm(_ref) {
57
58
  parameters = _ref.parameters,
58
59
  submitting = _ref.submitting,
59
60
  contextIdentifierProvider = _ref.contextIdentifierProvider,
60
- featureFlags = _ref.featureFlags;
61
+ featureFlags = _ref.featureFlags,
62
+ disableFields = _ref.disableFields;
61
63
  (0, _react.useEffect)(function () {
62
64
  if (fields) {
63
65
  var firstDuplicateField = (0, _transformers.findDuplicateFields)(fields);
@@ -81,7 +83,8 @@ function ConfigForm(_ref) {
81
83
  onFieldChange: onFieldChange,
82
84
  firstVisibleFieldName: firstVisibleFieldName,
83
85
  contextIdentifierProvider: contextIdentifierProvider,
84
- featureFlags: featureFlags
86
+ featureFlags: featureFlags,
87
+ isDisabled: disableFields
85
88
  }), /*#__PURE__*/_react.default.createElement("div", {
86
89
  style: canSave ? {} : {
87
90
  display: 'none'
@@ -210,20 +213,33 @@ var ConfigPanel = /*#__PURE__*/function (_React$Component) {
210
213
  return (0, _transformers.serialize)(extensionManifest, _this.backfillTabFormData(fields, formData, _this.state.currentParameters), fields);
211
214
  case 7:
212
215
  serializedData = _context.sent;
216
+ if (!(0, _experiments.editorExperiment)('platform_editor_offline_editing_web', true, {
217
+ exposure: true
218
+ })) {
219
+ _context.next = 13;
220
+ break;
221
+ }
222
+ _context.next = 11;
223
+ return onChange(serializedData);
224
+ case 11:
225
+ _context.next = 14;
226
+ break;
227
+ case 13:
213
228
  onChange(serializedData);
214
- _context.next = 15;
229
+ case 14:
230
+ _context.next = 20;
215
231
  break;
216
- case 11:
217
- _context.prev = 11;
232
+ case 16:
233
+ _context.prev = 16;
218
234
  _context.t0 = _context["catch"](4);
219
235
  autoSaveReject === null || autoSaveReject === void 0 || autoSaveReject(_context.t0);
220
236
  // eslint-disable-next-line no-console
221
237
  console.error("Error serializing parameters", _context.t0);
222
- case 15:
238
+ case 20:
223
239
  case "end":
224
240
  return _context.stop();
225
241
  }
226
- }, _callee, null, [[4, 11]]);
242
+ }, _callee, null, [[4, 16]]);
227
243
  }));
228
244
  return function (_x) {
229
245
  return _ref3.apply(this, arguments);
@@ -463,7 +479,8 @@ var ConfigPanel = /*#__PURE__*/function (_React$Component) {
463
479
  onFieldChange: onFieldChange,
464
480
  parameters: currentParameters,
465
481
  submitting: submitting,
466
- featureFlags: featureFlags
482
+ featureFlags: featureFlags,
483
+ disableFields: _this2.props.disableFields
467
484
  }))
468
485
  );
469
486
  });
@@ -484,7 +501,8 @@ function ConfigFormIntlWithBoundary(_ref6) {
484
501
  isLoading = _ref6.isLoading,
485
502
  hasParsedParameters = _ref6.hasParsedParameters,
486
503
  firstVisibleFieldName = _ref6.firstVisibleFieldName,
487
- errorMessage = _ref6.errorMessage;
504
+ errorMessage = _ref6.errorMessage,
505
+ disableFields = _ref6.disableFields;
488
506
  var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['contextIdentifier']),
489
507
  contextIdentifierState = _useSharedPluginState.contextIdentifierState;
490
508
  var _ref7 = contextIdentifierState !== null && contextIdentifierState !== void 0 ? contextIdentifierState : {},
@@ -506,7 +524,8 @@ function ConfigFormIntlWithBoundary(_ref6) {
506
524
  parameters: parameters,
507
525
  submitting: submitting,
508
526
  contextIdentifierProvider: contextIdentifierProvider,
509
- featureFlags: featureFlags
527
+ featureFlags: featureFlags,
528
+ disableFields: disableFields
510
529
  }));
511
530
  }
512
531
  var result = (0, _analyticsNext.withAnalyticsContext)({
@@ -9,6 +9,8 @@ exports.default = FieldsLoader;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _bindEventListener = require("bind-event-listener");
12
+ var _useSharedPluginStateSelector = require("@atlaskit/editor-common/use-shared-plugin-state-selector");
13
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
12
14
  var _ConfigPanel = _interopRequireDefault(require("./ConfigPanel"));
13
15
  var _useStateFromPromise3 = require("./use-state-from-promise");
14
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
@@ -126,6 +128,9 @@ function FieldsLoader(_ref) {
126
128
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
127
129
  errorMessage = _useState6[0],
128
130
  setErrorMessage = _useState6[1];
131
+ var connectivityState = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'connectivity.mode', {
132
+ disabled: (0, _experiments.editorExperiment)('platform_editor_offline_editing_web', false)
133
+ });
129
134
  return /*#__PURE__*/_react.default.createElement(FieldDefinitionsPromiseResolver, {
130
135
  setErrorMessage: setErrorMessage,
131
136
  extensionManifest: extensionManifest,
@@ -148,7 +153,8 @@ function FieldsLoader(_ref) {
148
153
  featureFlags: featureFlags
149
154
  // Remove below prop when cleaning platform_editor_ai_object_sidebar_injection FG
150
155
  ,
151
- usingObjectSidebarPanel: usingObjectSidebarPanel
156
+ usingObjectSidebarPanel: usingObjectSidebarPanel,
157
+ disableFields: connectivityState === 'offline'
152
158
  });
153
159
  });
154
160
  }
@@ -64,14 +64,16 @@ function Checkbox(_ref) {
64
64
  _field$isRequired = field.isRequired,
65
65
  isRequired = _field$isRequired === void 0 ? false : _field$isRequired,
66
66
  _field$defaultValue = field.defaultValue,
67
- defaultValue = _field$defaultValue === void 0 ? false : _field$defaultValue;
67
+ defaultValue = _field$defaultValue === void 0 ? false : _field$defaultValue,
68
+ isDisabled = field.isDisabled;
68
69
  return (0, _react2.jsx)(_form.Field, {
69
70
  name: name,
70
71
  isRequired: isRequired,
71
72
  validate: function validate(value) {
72
73
  return _validate(value, isRequired);
73
74
  },
74
- defaultValue: defaultValue
75
+ defaultValue: defaultValue,
76
+ isDisabled: isDisabled
75
77
  }, function (_ref2) {
76
78
  var fieldProps = _ref2.fieldProps,
77
79
  error = _ref2.error;
@@ -101,7 +103,8 @@ function Toggle(_ref3) {
101
103
  _field$isRequired2 = field.isRequired,
102
104
  isRequired = _field$isRequired2 === void 0 ? false : _field$isRequired2,
103
105
  _field$defaultValue2 = field.defaultValue,
104
- defaultValue = _field$defaultValue2 === void 0 ? false : _field$defaultValue2;
106
+ defaultValue = _field$defaultValue2 === void 0 ? false : _field$defaultValue2,
107
+ isDisabled = field.isDisabled;
105
108
  return (0, _react2.jsx)(_form.Field, {
106
109
  name: name,
107
110
  isRequired: isRequired,
@@ -109,7 +112,8 @@ function Toggle(_ref3) {
109
112
  return _validate(value, isRequired);
110
113
  },
111
114
  defaultValue: defaultValue,
112
- testId: "config-panel-toggle-".concat(name)
115
+ testId: "config-panel-toggle-".concat(name),
116
+ isDisabled: isDisabled
113
117
  }, function (_ref4) {
114
118
  var fieldProps = _ref4.fieldProps,
115
119
  error = _ref4.error;
@@ -84,7 +84,8 @@ function CheckboxGroup(_ref3) {
84
84
  defaultValue = field.defaultValue,
85
85
  _field$isRequired = field.isRequired,
86
86
  isRequired = _field$isRequired === void 0 ? false : _field$isRequired,
87
- options = field.items;
87
+ options = field.items,
88
+ isDisabled = field.isDisabled;
88
89
  var label = (0, _react2.jsx)(_react.Fragment, null, labelBase, isRequired ? (0, _react2.jsx)("span", {
89
90
  css: requiredIndicatorStyles,
90
91
  "aria-hidden": "true"
@@ -98,7 +99,8 @@ function CheckboxGroup(_ref3) {
98
99
  defaultValue: defaultValue,
99
100
  validate: function validate(value) {
100
101
  return _validate(value, isRequired);
101
- }
102
+ },
103
+ isDisabled: isDisabled
102
104
  }, function (props) {
103
105
  return (0, _react2.jsx)(CheckboxGroupInner, (0, _extends2.default)({
104
106
  label: label,
@@ -379,7 +379,8 @@ var ColorPickerField = function ColorPickerField(_ref) {
379
379
  featureFlags = _ref.featureFlags;
380
380
  var label = field.label,
381
381
  defaultValue = field.defaultValue,
382
- isRequired = field.isRequired;
382
+ isRequired = field.isRequired,
383
+ isDisabled = field.isDisabled;
383
384
  return (0, _react2.jsx)(_form.Field, {
384
385
  name: name,
385
386
  isRequired: isRequired,
@@ -387,7 +388,8 @@ var ColorPickerField = function ColorPickerField(_ref) {
387
388
  testId: "config-panel-color-picker-".concat(name),
388
389
  validate: function validate(value) {
389
390
  return (0, _utils.validate)(field, value || '');
390
- }
391
+ },
392
+ isDisabled: isDisabled
391
393
  }, function (_ref2) {
392
394
  var fieldProps = _ref2.fieldProps,
393
395
  error = _ref2.error;
@@ -45,7 +45,8 @@ function CustomSelect(_ref2) {
45
45
  isMultiple = field.isMultiple,
46
46
  isRequired = field.isRequired,
47
47
  label = field.label,
48
- options = field.options;
48
+ options = field.options,
49
+ isDisabled = field.isDisabled;
49
50
  var _useState = (0, _react.useState)(true),
50
51
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
51
52
  loading = _useState2[0],
@@ -151,7 +152,8 @@ function CustomSelect(_ref2) {
151
152
  validate: function validate(value) {
152
153
  return (0, _utils.validate)(field, value);
153
154
  },
154
- testId: "config-panel-custom-select-".concat(name)
155
+ testId: "config-panel-custom-select-".concat(name),
156
+ isDisabled: isDisabled
155
157
  }, function (_ref3) {
156
158
  var fieldProps = _ref3.fieldProps,
157
159
  error = _ref3.error;
@@ -22,7 +22,8 @@ function Date(_ref) {
22
22
  var label = field.label,
23
23
  description = field.description,
24
24
  defaultValue = field.defaultValue,
25
- isRequired = field.isRequired;
25
+ isRequired = field.isRequired,
26
+ isDisabled = field.isDisabled;
26
27
  return /*#__PURE__*/_react.default.createElement(_form.Field, {
27
28
  name: name,
28
29
  label: label,
@@ -31,7 +32,8 @@ function Date(_ref) {
31
32
  validate: function validate(value) {
32
33
  return (0, _utils.validate)(field, value);
33
34
  },
34
- testId: "config-panel-date-picker-".concat(name)
35
+ testId: "config-panel-date-picker-".concat(name),
36
+ isDisabled: isDisabled
35
37
  }, function (_ref2) {
36
38
  var fieldProps = _ref2.fieldProps,
37
39
  error = _ref2.error;
@@ -46,7 +46,8 @@ var DateField = function DateField(_ref) {
46
46
  fieldName = _ref.fieldName,
47
47
  onFieldChange = _ref.onFieldChange,
48
48
  intl = _ref.intl,
49
- isRequired = _ref.isRequired;
49
+ isRequired = _ref.isRequired,
50
+ isDisabled = _ref.isDisabled;
50
51
  return (0, _react2.jsx)("div", {
51
52
  css: horizontalFieldWrapperStyles,
52
53
  key: fieldName
@@ -59,7 +60,8 @@ var DateField = function DateField(_ref) {
59
60
  return (0, _utils.validateRequired)({
60
61
  isRequired: isRequired
61
62
  }, value);
62
- }
63
+ },
64
+ isDisabled: isDisabled
63
65
  }, function (_ref2) {
64
66
  var fieldProps = _ref2.fieldProps,
65
67
  error = _ref2.error;
@@ -124,7 +126,8 @@ var DateRange = function DateRange(_ref3) {
124
126
  validate: function validate(value) {
125
127
  return (0, _utils.validate)(field, value || '');
126
128
  },
127
- testId: "config-panel-date-range-".concat(name)
129
+ testId: "config-panel-date-range-".concat(name),
130
+ isDisabled: field.isDisabled
128
131
  }, function (_ref5) {
129
132
  var fieldProps = _ref5.fieldProps,
130
133
  error = _ref5.error;
@@ -161,14 +164,16 @@ var DateRange = function DateRange(_ref3) {
161
164
  fieldName: "from",
162
165
  onFieldChange: onFieldChange,
163
166
  intl: intl,
164
- isRequired: field.isRequired
167
+ isRequired: field.isRequired,
168
+ isDisabled: field.isDisabled
165
169
  }), (0, _react2.jsx)(DateField, {
166
170
  scope: name,
167
171
  parentField: field,
168
172
  fieldName: "to",
169
173
  onFieldChange: onFieldChange,
170
174
  intl: intl,
171
- isRequired: field.isRequired
175
+ isRequired: field.isRequired,
176
+ isDisabled: field.isDisabled
172
177
  })), (0, _react2.jsx)(_FieldMessages.default, {
173
178
  description: field.description
174
179
  }));
@@ -259,7 +259,8 @@ var FieldsetField = /*#__PURE__*/function (_React$Component) {
259
259
  canRemoveFields: field.options.isDynamic && visibleFields.size > 1,
260
260
  onClickRemove: this.onClickRemove,
261
261
  onFieldChange: onFieldChange,
262
- firstVisibleFieldName: firstVisibleFieldName
262
+ firstVisibleFieldName: firstVisibleFieldName,
263
+ isDisabled: field.isDisabled
263
264
  }), children && (0, _react2.jsx)("div", {
264
265
  css: actionsWrapperStyles,
265
266
  "data-testId": "fieldset-actions"
@@ -22,7 +22,8 @@ function Number(_ref) {
22
22
  var label = field.label,
23
23
  description = field.description,
24
24
  defaultValue = field.defaultValue,
25
- isRequired = field.isRequired;
25
+ isRequired = field.isRequired,
26
+ isDisabled = field.isDisabled;
26
27
  function validateNumber(value) {
27
28
  var error = (0, _utils.validate)(field, value || '');
28
29
  if (error) {
@@ -42,7 +43,8 @@ function Number(_ref) {
42
43
  defaultValue: defaultValue === undefined ? '' : String(defaultValue),
43
44
  isRequired: isRequired,
44
45
  validate: validateNumber,
45
- testId: "config-panel-number-".concat(name)
46
+ testId: "config-panel-number-".concat(name),
47
+ isDisabled: isDisabled
46
48
  }, function (_ref2) {
47
49
  var fieldProps = _ref2.fieldProps,
48
50
  error = _ref2.error,
@@ -35,7 +35,8 @@ function RadioField(_ref) {
35
35
  validate: function validate(value) {
36
36
  return (0, _utils.validate)(field, value);
37
37
  },
38
- testId: "config-panel-radio-group-".concat(field.name)
38
+ testId: "config-panel-radio-group-".concat(field.name),
39
+ isDisabled: field.isDisabled
39
40
  }, function (_ref2) {
40
41
  var fieldProps = _ref2.fieldProps,
41
42
  error = _ref2.error;
@@ -38,7 +38,8 @@ function SelectField(_ref) {
38
38
  // Ignored via go/ees005
39
39
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
40
40
  return (0, _utils.validate)(field, value);
41
- }
41
+ },
42
+ isDisabled: field.isDisabled
42
43
  }, function (_ref2) {
43
44
  var fieldProps = _ref2.fieldProps,
44
45
  error = _ref2.error;
@@ -26,7 +26,8 @@ function String(_ref) {
26
26
  var label = field.label,
27
27
  description = field.description,
28
28
  defaultValue = field.defaultValue,
29
- isRequired = field.isRequired;
29
+ isRequired = field.isRequired,
30
+ isDisabled = field.isDisabled;
30
31
  return /*#__PURE__*/_react.default.createElement(_form.Field, {
31
32
  name: name,
32
33
  label: label,
@@ -35,7 +36,8 @@ function String(_ref) {
35
36
  validate: function validate(value) {
36
37
  return (0, _utils.validate)(field, value || '');
37
38
  },
38
- testId: "config-panel-string-".concat(name)
39
+ testId: "config-panel-string-".concat(name),
40
+ isDisabled: isDisabled
39
41
  }, function (_ref2) {
40
42
  var fieldProps = _ref2.fieldProps,
41
43
  error = _ref2.error,
@@ -182,7 +182,8 @@ function UserSelect(_ref2) {
182
182
  defaultValue = field.defaultValue,
183
183
  description = field.description,
184
184
  isRequired = field.isRequired,
185
- options = field.options;
185
+ options = field.options,
186
+ isDisabled = field.isDisabled;
186
187
  var type = options.provider.type;
187
188
  (0, _react.useEffect)(function () {
188
189
  var cancel = false;
@@ -239,7 +240,8 @@ function UserSelect(_ref2) {
239
240
  validate: function validate(value) {
240
241
  return (0, _utils.validate)(field, value);
241
242
  },
242
- testId: "config-panel-user-select-".concat(name)
243
+ testId: "config-panel-user-select-".concat(name),
244
+ isDisabled: isDisabled
243
245
  }, function (_ref3) {
244
246
  var fieldProps = _ref3.fieldProps,
245
247
  error = _ref3.error,
@@ -249,7 +251,7 @@ function UserSelect(_ref2) {
249
251
  return /*#__PURE__*/_react.default.createElement(_UnhandledType.default, {
250
252
  key: name,
251
253
  field: field,
252
- errorMessage: "Field \"".concat(name, "\" can't be renderered. Missing provider for \"").concat(type, "\".")
254
+ errorMessage: "Field \"".concat(name, "\" can't be rendered. Missing provider for \"").concat(type, "\".")
253
255
  });
254
256
  }
255
257
  function onChange(newValue) {
@@ -9,6 +9,7 @@ exports.default = FormContent;
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
  var _extensions = require("@atlaskit/editor-common/extensions");
12
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
12
13
  var _Boolean = _interopRequireDefault(require("./Fields/Boolean"));
13
14
  var _ColorPicker = _interopRequireDefault(require("./Fields/ColorPicker"));
14
15
  var _CustomSelect = _interopRequireDefault(require("./Fields/CustomSelect"));
@@ -147,7 +148,8 @@ function FieldComponent(_ref) {
147
148
  parameters: resolvedParameters,
148
149
  onFieldChange: onFieldChange,
149
150
  extensionManifest: extensionManifest,
150
- featureFlags: featureFlags
151
+ featureFlags: featureFlags,
152
+ isDisabled: field.isDisabled
151
153
  }));
152
154
  }
153
155
  case 'tab-group':
@@ -165,7 +167,8 @@ function FieldComponent(_ref) {
165
167
  parameters: tabParameters,
166
168
  onFieldChange: onFieldChange,
167
169
  extensionManifest: extensionManifest,
168
- featureFlags: featureFlags
170
+ featureFlags: featureFlags,
171
+ isDisabled: field.isDisabled
169
172
  });
170
173
  };
171
174
  return /*#__PURE__*/_react.default.createElement(_TabGroup.default, {
@@ -199,12 +202,22 @@ function FormContent(_ref3) {
199
202
  onFieldChange = _ref3.onFieldChange,
200
203
  firstVisibleFieldName = _ref3.firstVisibleFieldName,
201
204
  contextIdentifierProvider = _ref3.contextIdentifierProvider,
202
- featureFlags = _ref3.featureFlags;
205
+ featureFlags = _ref3.featureFlags,
206
+ isDisabled = _ref3.isDisabled;
207
+ var mappedFields = fields;
208
+ if ((0, _experiments.editorExperiment)('platform_editor_offline_editing_web', true)) {
209
+ mappedFields = fields.map(function (field) {
210
+ var _field$isDisabled;
211
+ return _objectSpread(_objectSpread({}, field), {}, {
212
+ isDisabled: (_field$isDisabled = field.isDisabled) !== null && _field$isDisabled !== void 0 ? _field$isDisabled : isDisabled
213
+ });
214
+ });
215
+ }
203
216
  return /*#__PURE__*/_react.default.createElement(_FormErrorBoundary.FormErrorBoundary, {
204
217
  contextIdentifierProvider: contextIdentifierProvider,
205
218
  extensionKey: extensionManifest.key,
206
- fields: fields
207
- }, fields.map(function (field) {
219
+ fields: mappedFields
220
+ }, mappedFields.map(function (field) {
208
221
  var fieldElement = /*#__PURE__*/_react.default.createElement(FieldComponent, {
209
222
  field: field,
210
223
  parameters: parameters || {},
@@ -6,7 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _react = require("@emotion/react");
9
+ var _reactIntlNext = require("react-intl-next");
10
+ var _extensions = require("@atlaskit/editor-common/extensions");
11
+ var _sectionMessage = _interopRequireDefault(require("@atlaskit/section-message"));
9
12
  var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
13
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
10
14
  /**
11
15
  * @jsxRuntime classic
12
16
  * @jsx jsx
@@ -18,7 +22,27 @@ var spinnerWrapperStyles = (0, _react.css)({
18
22
  justifyContent: 'center',
19
23
  marginTop: "var(--ds-space-800, 64px)"
20
24
  });
21
- var LoadingState = function LoadingState() {
25
+ var errorWrapperStyles = (0, _react.css)({
26
+ marginTop: "var(--ds-space-400, 32px)" // Add some padding to the top to make sure we place this below the offline status banner
27
+ });
28
+ var LoadingStateWithErrorHandling = (0, _reactIntlNext.injectIntl)(function (props) {
29
+ if (props.error) {
30
+ return (0, _react.jsx)("div", {
31
+ css: errorWrapperStyles,
32
+ "data-testid": "ConfigPanelLoadingError"
33
+ }, (0, _react.jsx)(_sectionMessage.default, {
34
+ appearance: "error"
35
+ }, props.intl.formatMessage(_extensions.messages.panelLoadingError)));
36
+ }
37
+ return (0, _react.jsx)("div", {
38
+ css: spinnerWrapperStyles,
39
+ "data-testid": "ConfigPanelLoading"
40
+ }, (0, _react.jsx)(_spinner.default, {
41
+ size: "small",
42
+ interactionName: "config-panel-spinner"
43
+ }));
44
+ });
45
+ var LoadingStateWithoutErrorHandling = function LoadingStateWithoutErrorHandling() {
22
46
  return (0, _react.jsx)("div", {
23
47
  css: spinnerWrapperStyles,
24
48
  "data-testid": "ConfigPanelLoading"
@@ -27,4 +51,7 @@ var LoadingState = function LoadingState() {
27
51
  interactionName: "config-panel-spinner"
28
52
  }));
29
53
  };
54
+ var LoadingState = function LoadingState(props) {
55
+ return (0, _experiments.editorExperiment)('platform_editor_offline_editing_web', true) ? LoadingStateWithErrorHandling(props) : LoadingStateWithoutErrorHandling();
56
+ };
30
57
  var _default = exports.default = LoadingState;
@@ -170,7 +170,7 @@ export const extensionPlugin = ({
170
170
  hoverDecoration: api === null || api === void 0 ? void 0 : (_api$decorations = api.decorations) === null || _api$decorations === void 0 ? void 0 : _api$decorations.actions.hoverDecoration,
171
171
  applyChangeToContextPanel: api === null || api === void 0 ? void 0 : (_api$contextPanel5 = api.contextPanel) === null || _api$contextPanel5 === void 0 ? void 0 : _api$contextPanel5.actions.applyChange,
172
172
  editorAnalyticsAPI: api === null || api === void 0 ? void 0 : (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions,
173
- extensionApi: editorExperiment('platform_editor_controls', 'variant1') ? api : undefined
173
+ extensionApi: editorExperiment('platform_editor_controls', 'variant1') || editorExperiment('platform_editor_offline_editing_web', true) ? api : undefined
174
174
  }),
175
175
  contextPanel:
176
176
  // if showContextPanel action is not available, or platform_editor_ai_object_sidebar_injection feature flag is off
@@ -184,7 +184,7 @@ const breakoutDropdownOptions = (state, formatMessage, breakoutEnabled, editorAn
184
184
  const breakoutOptions = (state, formatMessage, extensionState, breakoutEnabled, editorAnalyticsAPI) => {
185
185
  return editorExperiment('platform_editor_controls', 'variant1') ? breakoutDropdownOptions(state, formatMessage, breakoutEnabled, editorAnalyticsAPI) : breakoutButtonListOptions(state, formatMessage, extensionState, breakoutEnabled, editorAnalyticsAPI);
186
186
  };
187
- const editButton = (formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI) => {
187
+ const editButton = (formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI, isDisabled = false) => {
188
188
  if (!extensionState.showEditButton) {
189
189
  return [];
190
190
  }
@@ -205,7 +205,8 @@ const editButton = (formatMessage, extensionState, applyChangeToContextPanel, ed
205
205
  },
206
206
  title: formatMessage(messages.edit),
207
207
  tabIndex: null,
208
- focusEditoronEnter: true
208
+ focusEditoronEnter: true,
209
+ disabled: isDisabled
209
210
  }];
210
211
  if (editorExperiment('platform_editor_controls', 'variant1')) {
211
212
  editButtonItems.push({
@@ -267,7 +268,7 @@ export const getToolbarConfig = ({
267
268
  editorAnalyticsAPI,
268
269
  extensionApi
269
270
  }) => (state, intl) => {
270
- var _hoverDecoration5, _hoverDecoration6, _hoverDecoration7, _hoverDecoration8;
271
+ var _extensionApi$connect, _extensionApi$connect2, _extensionApi$connect3, _hoverDecoration5, _hoverDecoration6, _hoverDecoration7, _hoverDecoration8;
271
272
  const {
272
273
  formatMessage
273
274
  } = intl;
@@ -283,7 +284,7 @@ export const getToolbarConfig = ({
283
284
  return;
284
285
  }
285
286
  const nodeType = [state.schema.nodes.extension, state.schema.nodes.inlineExtension, state.schema.nodes.bodiedExtension, state.schema.nodes.multiBodiedExtension];
286
- const editButtonItems = editButton(formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI);
287
+ const editButtonItems = editButton(formatMessage, extensionState, applyChangeToContextPanel, editorAnalyticsAPI, editorExperiment('platform_editor_offline_editing_web', true) && (extensionApi === null || extensionApi === void 0 ? void 0 : (_extensionApi$connect = extensionApi.connectivity) === null || _extensionApi$connect === void 0 ? void 0 : (_extensionApi$connect2 = _extensionApi$connect.sharedState) === null || _extensionApi$connect2 === void 0 ? void 0 : (_extensionApi$connect3 = _extensionApi$connect2.currentState()) === null || _extensionApi$connect3 === void 0 ? void 0 : _extensionApi$connect3.mode) === 'offline');
287
288
  const breakoutItems = breakoutOptions(state, formatMessage, extensionState, breakoutEnabled, editorAnalyticsAPI);
288
289
  const extensionObj = getSelectedExtension(state, true);
289
290