@atlaskit/editor-plugin-card 2.13.5 → 2.14.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.
@@ -574,7 +574,8 @@ export const getStartingToolbarItems = (options, api) => {
574
574
  cardOptions: options,
575
575
  providerFactory: providerFactory,
576
576
  platform: options === null || options === void 0 ? void 0 : options.platform,
577
- editorAnalyticsApi: api === null || api === void 0 ? void 0 : (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions
577
+ editorAnalyticsApi: api === null || api === void 0 ? void 0 : (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions,
578
+ editorPluginApi: api
578
579
  });
579
580
  }
580
581
  }, ...editLinkItem];
@@ -1,25 +1,100 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import React, { Component } from 'react';
2
+ import React, { Component, useEffect, useRef, useState } from 'react';
3
3
  import { INPUT_METHOD } from '@atlaskit/editor-common/analytics';
4
4
  import { FloatingToolbarSeparator as Separator } from '@atlaskit/editor-common/ui';
5
- import { fg, getBooleanFF } from '@atlaskit/platform-feature-flags';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
6
6
  import { Flex } from '@atlaskit/primitives';
7
7
  import { DatasourceAppearanceButton } from './DatasourceAppearanceButton';
8
8
  import { EditDatasourceButton } from './EditDatasourceButton';
9
9
  import { LinkToolbarAppearance } from './LinkToolbarAppearance';
10
+ function HyperlinkToolbarAppearanceFunctional(props) {
11
+ var _props$cardOptions3;
12
+ const [supportedUrlsMap, setSupportedUrlsMap] = useState(new Map());
13
+ const cardProvider = useRef(undefined);
14
+ const {
15
+ url,
16
+ intl,
17
+ editorView,
18
+ editorState,
19
+ cardOptions,
20
+ platform,
21
+ editorAnalyticsApi
22
+ } = props;
23
+ const getProvider = async () => {
24
+ var _props$cardOptions;
25
+ if ((_props$cardOptions = props.cardOptions) !== null && _props$cardOptions !== void 0 && _props$cardOptions.provider) {
26
+ var _props$cardOptions2;
27
+ return (_props$cardOptions2 = props.cardOptions) === null || _props$cardOptions2 === void 0 ? void 0 : _props$cardOptions2.provider;
28
+ }
29
+ if (cardProvider.current) {
30
+ return cardProvider.current;
31
+ }
32
+ return new Promise(resolve => {
33
+ var _props$editorPluginAp, _props$editorPluginAp2, _props$editorPluginAp3, _props$editorPluginAp4;
34
+ const cardProvider = (_props$editorPluginAp = props.editorPluginApi) === null || _props$editorPluginAp === void 0 ? void 0 : (_props$editorPluginAp2 = _props$editorPluginAp.card) === null || _props$editorPluginAp2 === void 0 ? void 0 : (_props$editorPluginAp3 = _props$editorPluginAp2.sharedState) === null || _props$editorPluginAp3 === void 0 ? void 0 : (_props$editorPluginAp4 = _props$editorPluginAp3.currentState()) === null || _props$editorPluginAp4 === void 0 ? void 0 : _props$editorPluginAp4.provider;
35
+ if (cardProvider) {
36
+ resolve(cardProvider);
37
+ }
38
+ });
39
+ };
40
+ const resolveUrl = async url => {
41
+ if (supportedUrlsMap.has(url)) {
42
+ return;
43
+ }
44
+ let isUrlSupported = false;
45
+ try {
46
+ var _await$provider$findP;
47
+ const provider = await getProvider();
48
+ isUrlSupported = (_await$provider$findP = await (provider === null || provider === void 0 ? void 0 : provider.findPattern(url))) !== null && _await$provider$findP !== void 0 ? _await$provider$findP : false;
49
+ } catch (error) {
50
+ isUrlSupported = false;
51
+ }
52
+ const newMap = new Map(supportedUrlsMap);
53
+ newMap.set(url, isUrlSupported);
54
+ setSupportedUrlsMap(newMap);
55
+ };
56
+ useEffect(() => {
57
+ resolveUrl(url);
58
+ // before migrating from a class to a functional component, we were only reacting to changes in the url
59
+ // eslint-disable-next-line react-hooks/exhaustive-deps
60
+ }, [url, (_props$cardOptions3 = props.cardOptions) === null || _props$cardOptions3 === void 0 ? void 0 : _props$cardOptions3.provider, props.editorPluginApi]);
61
+ if (!supportedUrlsMap.get(url)) {
62
+ return null;
63
+ }
64
+ return /*#__PURE__*/React.createElement(Flex, null, !fg('platform.linking-platform.enable-datasource-edit-dropdown-toolbar') && /*#__PURE__*/React.createElement(EditDatasourceButton, {
65
+ url: url,
66
+ intl: intl,
67
+ editorView: editorView,
68
+ editorAnalyticsApi: editorAnalyticsApi,
69
+ currentAppearance: "url"
70
+ }), /*#__PURE__*/React.createElement(LinkToolbarAppearance, {
71
+ key: "link-appearance",
72
+ url: url,
73
+ intl: intl,
74
+ editorView: editorView,
75
+ editorState: editorState,
76
+ allowEmbeds: cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowEmbeds,
77
+ allowBlockCards: cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowBlockCards,
78
+ platform: platform,
79
+ editorAnalyticsApi: editorAnalyticsApi
80
+ }), (cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowDatasource) && fg('platform.linking-platform.enable-datasource-appearance-toolbar') && /*#__PURE__*/React.createElement(DatasourceAppearanceButton, {
81
+ intl: intl,
82
+ url: url,
83
+ editorState: editorState,
84
+ editorView: editorView,
85
+ editorAnalyticsApi: editorAnalyticsApi,
86
+ inputMethod: INPUT_METHOD.FLOATING_TB
87
+ }), /*#__PURE__*/React.createElement(Separator, null));
88
+ }
89
+
10
90
  // eslint-disable-next-line @repo/internal/react/no-class-components
11
- export class HyperlinkToolbarAppearance extends Component {
91
+ class HyperlinkToolbarAppearanceClass extends Component {
12
92
  constructor(...args) {
13
93
  super(...args);
14
94
  _defineProperty(this, "state", {
15
95
  supportedUrlsMap: new Map()
16
96
  });
17
97
  _defineProperty(this, "getProvider", async () => {
18
- var _this$props$cardOptio;
19
- if ((_this$props$cardOptio = this.props.cardOptions) !== null && _this$props$cardOptio !== void 0 && _this$props$cardOptio.provider && fg('platform_editor_get_card_provider_from_config')) {
20
- var _this$props$cardOptio2;
21
- return (_this$props$cardOptio2 = this.props.cardOptions) === null || _this$props$cardOptio2 === void 0 ? void 0 : _this$props$cardOptio2.provider;
22
- }
23
98
  if (this.cardProvider) {
24
99
  return this.cardProvider;
25
100
  }
@@ -45,9 +120,9 @@ export class HyperlinkToolbarAppearance extends Component {
45
120
  }
46
121
  let isUrlSupported = false;
47
122
  try {
48
- var _await$provider$findP;
123
+ var _await$provider$findP2;
49
124
  const provider = await this.getProvider();
50
- isUrlSupported = (_await$provider$findP = await (provider === null || provider === void 0 ? void 0 : provider.findPattern(url))) !== null && _await$provider$findP !== void 0 ? _await$provider$findP : false;
125
+ isUrlSupported = (_await$provider$findP2 = await (provider === null || provider === void 0 ? void 0 : provider.findPattern(url))) !== null && _await$provider$findP2 !== void 0 ? _await$provider$findP2 : false;
51
126
  } catch (error) {
52
127
  isUrlSupported = false;
53
128
  }
@@ -82,7 +157,7 @@ export class HyperlinkToolbarAppearance extends Component {
82
157
  if (!supportedUrlsMap.get(url)) {
83
158
  return null;
84
159
  }
85
- return /*#__PURE__*/React.createElement(Flex, null, !getBooleanFF('platform.linking-platform.enable-datasource-edit-dropdown-toolbar') && /*#__PURE__*/React.createElement(EditDatasourceButton, {
160
+ return /*#__PURE__*/React.createElement(Flex, null, !fg('platform.linking-platform.enable-datasource-edit-dropdown-toolbar') && /*#__PURE__*/React.createElement(EditDatasourceButton, {
86
161
  url: url,
87
162
  intl: intl,
88
163
  editorView: editorView,
@@ -98,7 +173,7 @@ export class HyperlinkToolbarAppearance extends Component {
98
173
  allowBlockCards: cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowBlockCards,
99
174
  platform: platform,
100
175
  editorAnalyticsApi: editorAnalyticsApi
101
- }), getBooleanFF('platform.linking-platform.enable-datasource-appearance-toolbar') && (cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowDatasource) && /*#__PURE__*/React.createElement(DatasourceAppearanceButton, {
176
+ }), (cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowDatasource) && fg('platform.linking-platform.enable-datasource-appearance-toolbar') && /*#__PURE__*/React.createElement(DatasourceAppearanceButton, {
102
177
  intl: intl,
103
178
  url: url,
104
179
  editorState: editorState,
@@ -107,4 +182,10 @@ export class HyperlinkToolbarAppearance extends Component {
107
182
  inputMethod: INPUT_METHOD.FLOATING_TB
108
183
  }), /*#__PURE__*/React.createElement(Separator, null));
109
184
  }
110
- }
185
+ }
186
+ export const HyperlinkToolbarAppearance = props => {
187
+ if (fg('platform_editor_get_card_provider_from_config')) {
188
+ return /*#__PURE__*/React.createElement(HyperlinkToolbarAppearanceFunctional, props);
189
+ }
190
+ return /*#__PURE__*/React.createElement(HyperlinkToolbarAppearanceClass, props);
191
+ };
@@ -1,5 +1,5 @@
1
1
  import React, { useCallback, useEffect } from 'react';
2
- import { useAnalyticsEvents } from '@atlaskit/analytics-next';
2
+ import { useAnalyticsEvents } from '@atlaskit/analytics-next/useAnalyticsEvents';
3
3
  import { Pulse } from '@atlaskit/linking-common';
4
4
  import { isLocalStorageKeyDiscovered, markLocalStorageKeyDiscovered } from '../../common/local-storage';
5
5
  export const DiscoveryPulse = ({
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect } from 'react';
2
- import { useAnalyticsEvents } from '@atlaskit/analytics-next';
2
+ import { useAnalyticsEvents } from '@atlaskit/analytics-next/useAnalyticsEvents';
3
3
  import { getResolvedAttributesFromStore } from '../utils';
4
4
  import { CardContextProvider } from './CardContextProvider';
5
5
  import { EditorAnalyticsContext } from './EditorAnalyticsContext';
@@ -1,4 +1,6 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
6
  import React from 'react';
@@ -8,7 +10,7 @@ import { IconDatasourceAssetsObjects, IconDatasourceConfluenceSearch, IconDataso
8
10
  import { canRenderDatasource } from '@atlaskit/editor-common/utils';
9
11
  import { ASSETS_LIST_OF_LINKS_DATASOURCE_ID, CONFLUENCE_SEARCH_DATASOURCE_ID } from '@atlaskit/link-datasource';
10
12
  import { createEventsQueue } from './analytics/create-events-queue';
11
- import { hideLinkToolbar, showDatasourceModal } from './pm-plugins/actions';
13
+ import { hideLinkToolbar, setProvider as _setProvider, showDatasourceModal } from './pm-plugins/actions';
12
14
  import { queueCardsFromChangedTr } from './pm-plugins/doc';
13
15
  import { cardKeymap } from './pm-plugins/keymap';
14
16
  import { createPlugin } from './pm-plugins/main';
@@ -25,6 +27,7 @@ export var cardPlugin = function cardPlugin(_ref) {
25
27
  var _options$lpLinkPicker;
26
28
  var options = _ref.config,
27
29
  api = _ref.api;
30
+ var previousCardProvider;
28
31
  var cardPluginEvents = createEventsQueue();
29
32
  return {
30
33
  name: 'card',
@@ -104,6 +107,39 @@ export var cardPlugin = function cardPlugin(_ref) {
104
107
  }));
105
108
  },
106
109
  actions: {
110
+ setProvider: function () {
111
+ var _setProvider2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(providerPromise) {
112
+ var _api$core$actions$exe;
113
+ var provider;
114
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
115
+ while (1) switch (_context.prev = _context.next) {
116
+ case 0:
117
+ _context.next = 2;
118
+ return providerPromise;
119
+ case 2:
120
+ provider = _context.sent;
121
+ if (!(previousCardProvider === provider)) {
122
+ _context.next = 5;
123
+ break;
124
+ }
125
+ return _context.abrupt("return", false);
126
+ case 5:
127
+ previousCardProvider = provider;
128
+ return _context.abrupt("return", (_api$core$actions$exe = api === null || api === void 0 ? void 0 : api.core.actions.execute(function (_ref4) {
129
+ var tr = _ref4.tr;
130
+ return _setProvider(provider)(tr);
131
+ })) !== null && _api$core$actions$exe !== void 0 ? _api$core$actions$exe : false);
132
+ case 7:
133
+ case "end":
134
+ return _context.stop();
135
+ }
136
+ }, _callee);
137
+ }));
138
+ function setProvider(_x) {
139
+ return _setProvider2.apply(this, arguments);
140
+ }
141
+ return setProvider;
142
+ }(),
107
143
  hideLinkToolbar: hideLinkToolbar,
108
144
  queueCardsFromChangedTr: queueCardsFromChangedTr,
109
145
  getStartingToolbarItems: getStartingToolbarItems(options, api),
@@ -111,8 +147,8 @@ export var cardPlugin = function cardPlugin(_ref) {
111
147
  },
112
148
  pluginsOptions: {
113
149
  floatingToolbar: floatingToolbar(options, (_options$lpLinkPicker = options.lpLinkPicker) !== null && _options$lpLinkPicker !== void 0 ? _options$lpLinkPicker : false, options.platform, options.linkPicker, api, options.disableFloatingToolbar),
114
- quickInsert: function quickInsert(_ref4) {
115
- var formatMessage = _ref4.formatMessage;
150
+ quickInsert: function quickInsert(_ref5) {
151
+ var formatMessage = _ref5.formatMessage;
116
152
  var quickInsertArray = [];
117
153
  if (!options.allowDatasource) {
118
154
  return quickInsertArray;
@@ -1,5 +1,5 @@
1
+ import { browser } from '@atlaskit/editor-common/browser';
1
2
  import { bindKeymapWithCommand, moveDown, moveUp } from '@atlaskit/editor-common/keymaps';
2
- import { browser } from '@atlaskit/editor-common/utils';
3
3
  import { keymap } from '@atlaskit/editor-prosemirror/keymap';
4
4
  import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
5
5
  import { findChildren, flatten } from '@atlaskit/editor-prosemirror/utils';
@@ -154,8 +154,10 @@ export var createPlugin = function createPlugin(options, pluginInjectionApi) {
154
154
  };
155
155
  var domAtPos = _view.domAtPos.bind(_view);
156
156
  var rafCancellationCallbacks = [];
157
- if (options.provider && fg('platform_editor_get_card_provider_from_config')) {
158
- handleProvider('cardProvider', options.provider, _view);
157
+ if (fg('platform_editor_get_card_provider_from_config')) {
158
+ if (options.provider) {
159
+ handleProvider('cardProvider', options.provider, _view);
160
+ }
159
161
  } else {
160
162
  pmPluginFactoryParams.providerFactory.subscribe('cardProvider', subscriptionHandler);
161
163
  }
@@ -579,7 +579,8 @@ export var getStartingToolbarItems = function getStartingToolbarItems(options, a
579
579
  cardOptions: options,
580
580
  providerFactory: providerFactory,
581
581
  platform: options === null || options === void 0 ? void 0 : options.platform,
582
- editorAnalyticsApi: api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions
582
+ editorAnalyticsApi: api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions,
583
+ editorPluginApi: api
583
584
  });
584
585
  }
585
586
  }].concat(editLinkItem);