@atlaskit/editor-plugin-card 0.10.4 → 0.10.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/editor-plugin-card
2
2
 
3
+ ## 0.10.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [#42350](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42350) [`5c905e458da`](https://bitbucket.org/atlassian/atlassian-frontend/commits/5c905e458da) - [ux] Fixed an issue where a blinking cursor would appear before a selected datasource node.
8
+
9
+ ## 0.10.5
10
+
11
+ ### Patch Changes
12
+
13
+ - [#42367](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42367) [`4f70009532a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/4f70009532a) - [ux] Refactored the inline card to be a functional component behind a FF
14
+
3
15
  ## 0.10.4
4
16
 
5
17
  ### Patch Changes
@@ -151,6 +151,7 @@ var Datasource = exports.Datasource = /*#__PURE__*/function (_ReactNodeView) {
151
151
  key: "createDomRef",
152
152
  value: function createDomRef() {
153
153
  var domRef = document.createElement('div');
154
+ domRef.setAttribute('contenteditable', 'true');
154
155
  domRef.classList.add(_styles.SmartCardSharedCssClassName.DATASOURCE_CONTAINER);
155
156
  return domRef;
156
157
  }
@@ -17,9 +17,11 @@ var _react = _interopRequireDefault(require("react"));
17
17
  var _propTypes = _interopRequireDefault(require("prop-types"));
18
18
  var _rafSchd = _interopRequireDefault(require("raf-schd"));
19
19
  var _ui = require("@atlaskit/editor-common/ui");
20
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
20
21
  var _smartCard = require("@atlaskit/smart-card");
21
22
  var _actions = require("../pm-plugins/actions");
22
23
  var _genericCard = require("./genericCard");
24
+ var _inlineCardWithAwareness = require("./inlineCardWithAwareness");
23
25
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
24
26
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
25
27
  // eslint-disable-next-line @repo/internal/react/no-class-components
@@ -115,13 +117,15 @@ var InlineCardComponent = exports.InlineCardComponent = /*#__PURE__*/function (_
115
117
  contextAdapter: _propTypes.default.object
116
118
  });
117
119
  var WrappedInlineCard = (0, _genericCard.Card)(InlineCardComponent, _ui.UnsupportedInline);
120
+ var WrappedInlineCardWithAwareness = (0, _genericCard.Card)(_inlineCardWithAwareness.InlineCardWithAwareness, _ui.UnsupportedInline);
118
121
  function InlineCardNodeView(props) {
119
122
  var useAlternativePreloader = props.useAlternativePreloader,
120
123
  node = props.node,
121
124
  view = props.view,
122
125
  getPos = props.getPos,
123
126
  showServerActions = props.showServerActions;
124
- return /*#__PURE__*/_react.default.createElement(WrappedInlineCard, {
127
+ var WrappedCard = (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.smart-card.inline-switcher') ? WrappedInlineCardWithAwareness : WrappedInlineCard;
128
+ return /*#__PURE__*/_react.default.createElement(WrappedCard, {
125
129
  node: node,
126
130
  view: view,
127
131
  getPos: getPos,
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.InlineCardWithAwareness = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _rafSchd = _interopRequireDefault(require("raf-schd"));
11
+ var _ui = require("@atlaskit/editor-common/ui");
12
+ var _smartCard = require("@atlaskit/smart-card");
13
+ var _actions = require("../pm-plugins/actions");
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ var InlineCard = function InlineCard(_ref) {
17
+ var node = _ref.node,
18
+ cardContext = _ref.cardContext,
19
+ showServerActions = _ref.showServerActions,
20
+ useAlternativePreloader = _ref.useAlternativePreloader,
21
+ view = _ref.view,
22
+ getPos = _ref.getPos;
23
+ var scrollContainer = (0, _react.useMemo)(function () {
24
+ return (0, _ui.findOverflowScrollParent)(view.dom) || undefined;
25
+ }, [view.dom]);
26
+ var _node$attrs = node.attrs,
27
+ url = _node$attrs.url,
28
+ data = _node$attrs.data;
29
+ var onClick = function onClick() {};
30
+ var onResolve = (0, _react.useCallback)(function (data) {
31
+ if (!getPos || typeof getPos === 'boolean') {
32
+ return;
33
+ }
34
+ var title = data.title,
35
+ url = data.url;
36
+ // don't dispatch immediately since we might be in the middle of
37
+ // rendering a nodeview
38
+ (0, _rafSchd.default)(function () {
39
+ // prosemirror-bump-fix
40
+ var pos = getPos();
41
+ if (typeof pos !== 'number') {
42
+ return;
43
+ }
44
+ view.dispatch((0, _actions.registerCard)({
45
+ title: title,
46
+ url: url,
47
+ pos: pos
48
+ })(view.state.tr));
49
+ })();
50
+ }, [view, getPos]);
51
+ var onError = (0, _react.useCallback)(function (data) {
52
+ var url = data.url,
53
+ err = data.err;
54
+ if (err) {
55
+ throw err;
56
+ }
57
+ onResolve({
58
+ url: url
59
+ });
60
+ }, [onResolve]);
61
+ var card = /*#__PURE__*/_react.default.createElement("span", {
62
+ className: "card"
63
+ }, /*#__PURE__*/_react.default.createElement(_smartCard.Card, {
64
+ key: url,
65
+ url: url,
66
+ data: data,
67
+ appearance: "inline",
68
+ onClick: onClick,
69
+ container: scrollContainer,
70
+ onResolve: onResolve,
71
+ onError: onError,
72
+ inlinePreloaderStyle: useAlternativePreloader ? 'on-right-without-skeleton' : undefined,
73
+ showServerActions: showServerActions
74
+ }));
75
+ // [WS-2307]: we only render card wrapped into a Provider when the value is ready,
76
+ // otherwise if we got data, we can render the card directly since it doesn't need the Provider
77
+ return cardContext && cardContext.value ? /*#__PURE__*/_react.default.createElement(cardContext.Provider, {
78
+ value: cardContext.value
79
+ }, card) : data ? card : null;
80
+ };
81
+ var InlineCardWithAwareness = exports.InlineCardWithAwareness = /*#__PURE__*/(0, _react.memo)(InlineCard);
@@ -118,6 +118,7 @@ export class Datasource extends ReactNodeView {
118
118
 
119
119
  createDomRef() {
120
120
  const domRef = document.createElement('div');
121
+ domRef.setAttribute('contenteditable', 'true');
121
122
  domRef.classList.add(SmartCardSharedCssClassName.DATASOURCE_CONTAINER);
122
123
  return domRef;
123
124
  }
@@ -3,9 +3,11 @@ import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import rafSchedule from 'raf-schd';
5
5
  import { findOverflowScrollParent, UnsupportedInline } from '@atlaskit/editor-common/ui';
6
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
6
7
  import { Card as SmartCard } from '@atlaskit/smart-card';
7
8
  import { registerCard } from '../pm-plugins/actions';
8
9
  import { Card } from './genericCard';
10
+ import { InlineCardWithAwareness } from './inlineCardWithAwareness';
9
11
 
10
12
  // eslint-disable-next-line @repo/internal/react/no-class-components
11
13
  export class InlineCardComponent extends React.PureComponent {
@@ -95,6 +97,7 @@ _defineProperty(InlineCardComponent, "contextTypes", {
95
97
  contextAdapter: PropTypes.object
96
98
  });
97
99
  const WrappedInlineCard = Card(InlineCardComponent, UnsupportedInline);
100
+ const WrappedInlineCardWithAwareness = Card(InlineCardWithAwareness, UnsupportedInline);
98
101
  export function InlineCardNodeView(props) {
99
102
  const {
100
103
  useAlternativePreloader,
@@ -103,7 +106,8 @@ export function InlineCardNodeView(props) {
103
106
  getPos,
104
107
  showServerActions
105
108
  } = props;
106
- return /*#__PURE__*/React.createElement(WrappedInlineCard, {
109
+ const WrappedCard = getBooleanFF('platform.linking-platform.smart-card.inline-switcher') ? WrappedInlineCardWithAwareness : WrappedInlineCard;
110
+ return /*#__PURE__*/React.createElement(WrappedCard, {
107
111
  node: node,
108
112
  view: view,
109
113
  getPos: getPos,
@@ -0,0 +1,75 @@
1
+ import React, { memo, useCallback, useMemo } from 'react';
2
+ import rafSchedule from 'raf-schd';
3
+ import { findOverflowScrollParent } from '@atlaskit/editor-common/ui';
4
+ import { Card as SmartCard } from '@atlaskit/smart-card';
5
+ import { registerCard } from '../pm-plugins/actions';
6
+ const InlineCard = ({
7
+ node,
8
+ cardContext,
9
+ showServerActions,
10
+ useAlternativePreloader,
11
+ view,
12
+ getPos
13
+ }) => {
14
+ const scrollContainer = useMemo(() => findOverflowScrollParent(view.dom) || undefined, [view.dom]);
15
+ const {
16
+ url,
17
+ data
18
+ } = node.attrs;
19
+ const onClick = () => {};
20
+ const onResolve = useCallback(data => {
21
+ if (!getPos || typeof getPos === 'boolean') {
22
+ return;
23
+ }
24
+ const {
25
+ title,
26
+ url
27
+ } = data;
28
+ // don't dispatch immediately since we might be in the middle of
29
+ // rendering a nodeview
30
+ rafSchedule(() => {
31
+ // prosemirror-bump-fix
32
+ const pos = getPos();
33
+ if (typeof pos !== 'number') {
34
+ return;
35
+ }
36
+ view.dispatch(registerCard({
37
+ title,
38
+ url,
39
+ pos
40
+ })(view.state.tr));
41
+ })();
42
+ }, [view, getPos]);
43
+ const onError = useCallback(data => {
44
+ const {
45
+ url,
46
+ err
47
+ } = data;
48
+ if (err) {
49
+ throw err;
50
+ }
51
+ onResolve({
52
+ url
53
+ });
54
+ }, [onResolve]);
55
+ const card = /*#__PURE__*/React.createElement("span", {
56
+ className: "card"
57
+ }, /*#__PURE__*/React.createElement(SmartCard, {
58
+ key: url,
59
+ url: url,
60
+ data: data,
61
+ appearance: "inline",
62
+ onClick: onClick,
63
+ container: scrollContainer,
64
+ onResolve: onResolve,
65
+ onError: onError,
66
+ inlinePreloaderStyle: useAlternativePreloader ? 'on-right-without-skeleton' : undefined,
67
+ showServerActions: showServerActions
68
+ }));
69
+ // [WS-2307]: we only render card wrapped into a Provider when the value is ready,
70
+ // otherwise if we got data, we can render the card directly since it doesn't need the Provider
71
+ return cardContext && cardContext.value ? /*#__PURE__*/React.createElement(cardContext.Provider, {
72
+ value: cardContext.value
73
+ }, card) : data ? card : null;
74
+ };
75
+ export const InlineCardWithAwareness = /*#__PURE__*/memo(InlineCard);
@@ -145,6 +145,7 @@ export var Datasource = /*#__PURE__*/function (_ReactNodeView) {
145
145
  key: "createDomRef",
146
146
  value: function createDomRef() {
147
147
  var domRef = document.createElement('div');
148
+ domRef.setAttribute('contenteditable', 'true');
148
149
  domRef.classList.add(SmartCardSharedCssClassName.DATASOURCE_CONTAINER);
149
150
  return domRef;
150
151
  }
@@ -11,9 +11,11 @@ import React from 'react';
11
11
  import PropTypes from 'prop-types';
12
12
  import rafSchedule from 'raf-schd';
13
13
  import { findOverflowScrollParent, UnsupportedInline } from '@atlaskit/editor-common/ui';
14
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
14
15
  import { Card as SmartCard } from '@atlaskit/smart-card';
15
16
  import { registerCard } from '../pm-plugins/actions';
16
17
  import { Card } from './genericCard';
18
+ import { InlineCardWithAwareness } from './inlineCardWithAwareness';
17
19
 
18
20
  // eslint-disable-next-line @repo/internal/react/no-class-components
19
21
  export var InlineCardComponent = /*#__PURE__*/function (_React$PureComponent) {
@@ -108,13 +110,15 @@ _defineProperty(InlineCardComponent, "contextTypes", {
108
110
  contextAdapter: PropTypes.object
109
111
  });
110
112
  var WrappedInlineCard = Card(InlineCardComponent, UnsupportedInline);
113
+ var WrappedInlineCardWithAwareness = Card(InlineCardWithAwareness, UnsupportedInline);
111
114
  export function InlineCardNodeView(props) {
112
115
  var useAlternativePreloader = props.useAlternativePreloader,
113
116
  node = props.node,
114
117
  view = props.view,
115
118
  getPos = props.getPos,
116
119
  showServerActions = props.showServerActions;
117
- return /*#__PURE__*/React.createElement(WrappedInlineCard, {
120
+ var WrappedCard = getBooleanFF('platform.linking-platform.smart-card.inline-switcher') ? WrappedInlineCardWithAwareness : WrappedInlineCard;
121
+ return /*#__PURE__*/React.createElement(WrappedCard, {
118
122
  node: node,
119
123
  view: view,
120
124
  getPos: getPos,
@@ -0,0 +1,71 @@
1
+ import React, { memo, useCallback, useMemo } from 'react';
2
+ import rafSchedule from 'raf-schd';
3
+ import { findOverflowScrollParent } from '@atlaskit/editor-common/ui';
4
+ import { Card as SmartCard } from '@atlaskit/smart-card';
5
+ import { registerCard } from '../pm-plugins/actions';
6
+ var InlineCard = function InlineCard(_ref) {
7
+ var node = _ref.node,
8
+ cardContext = _ref.cardContext,
9
+ showServerActions = _ref.showServerActions,
10
+ useAlternativePreloader = _ref.useAlternativePreloader,
11
+ view = _ref.view,
12
+ getPos = _ref.getPos;
13
+ var scrollContainer = useMemo(function () {
14
+ return findOverflowScrollParent(view.dom) || undefined;
15
+ }, [view.dom]);
16
+ var _node$attrs = node.attrs,
17
+ url = _node$attrs.url,
18
+ data = _node$attrs.data;
19
+ var onClick = function onClick() {};
20
+ var onResolve = useCallback(function (data) {
21
+ if (!getPos || typeof getPos === 'boolean') {
22
+ return;
23
+ }
24
+ var title = data.title,
25
+ url = data.url;
26
+ // don't dispatch immediately since we might be in the middle of
27
+ // rendering a nodeview
28
+ rafSchedule(function () {
29
+ // prosemirror-bump-fix
30
+ var pos = getPos();
31
+ if (typeof pos !== 'number') {
32
+ return;
33
+ }
34
+ view.dispatch(registerCard({
35
+ title: title,
36
+ url: url,
37
+ pos: pos
38
+ })(view.state.tr));
39
+ })();
40
+ }, [view, getPos]);
41
+ var onError = useCallback(function (data) {
42
+ var url = data.url,
43
+ err = data.err;
44
+ if (err) {
45
+ throw err;
46
+ }
47
+ onResolve({
48
+ url: url
49
+ });
50
+ }, [onResolve]);
51
+ var card = /*#__PURE__*/React.createElement("span", {
52
+ className: "card"
53
+ }, /*#__PURE__*/React.createElement(SmartCard, {
54
+ key: url,
55
+ url: url,
56
+ data: data,
57
+ appearance: "inline",
58
+ onClick: onClick,
59
+ container: scrollContainer,
60
+ onResolve: onResolve,
61
+ onError: onError,
62
+ inlinePreloaderStyle: useAlternativePreloader ? 'on-right-without-skeleton' : undefined,
63
+ showServerActions: showServerActions
64
+ }));
65
+ // [WS-2307]: we only render card wrapped into a Provider when the value is ready,
66
+ // otherwise if we got data, we can render the card directly since it doesn't need the Provider
67
+ return cardContext && cardContext.value ? /*#__PURE__*/React.createElement(cardContext.Provider, {
68
+ value: cardContext.value
69
+ }, card) : data ? card : null;
70
+ };
71
+ export var InlineCardWithAwareness = /*#__PURE__*/memo(InlineCard);
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import type { InlineNodeViewComponentProps } from '@atlaskit/editor-common/react-node-view';
4
- import { SmartCardProps } from './genericCard';
4
+ import type { SmartCardProps } from './genericCard';
5
5
  export declare class InlineCardComponent extends React.PureComponent<SmartCardProps> {
6
6
  private scrollContainer?;
7
7
  private onClick;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import type { SmartCardProps } from './genericCard';
3
+ export declare const InlineCardWithAwareness: React.MemoExoticComponent<({ node, cardContext, showServerActions, useAlternativePreloader, view, getPos, }: SmartCardProps) => JSX.Element | null>;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import type { InlineNodeViewComponentProps } from '@atlaskit/editor-common/react-node-view';
4
- import { SmartCardProps } from './genericCard';
4
+ import type { SmartCardProps } from './genericCard';
5
5
  export declare class InlineCardComponent extends React.PureComponent<SmartCardProps> {
6
6
  private scrollContainer?;
7
7
  private onClick;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import type { SmartCardProps } from './genericCard';
3
+ export declare const InlineCardWithAwareness: React.MemoExoticComponent<({ node, cardContext, showServerActions, useAlternativePreloader, view, getPos, }: SmartCardProps) => JSX.Element | null>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-card",
3
- "version": "0.10.4",
3
+ "version": "0.10.6",
4
4
  "description": "Card plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -46,7 +46,7 @@
46
46
  "@atlaskit/editor-shared-styles": "^2.8.0",
47
47
  "@atlaskit/icon": "^21.12.0",
48
48
  "@atlaskit/link-analytics": "^8.3.0",
49
- "@atlaskit/link-datasource": "^1.10.0",
49
+ "@atlaskit/link-datasource": "^1.11.0",
50
50
  "@atlaskit/platform-feature-flags": "^0.2.0",
51
51
  "@atlaskit/smart-card": "^26.41.0",
52
52
  "@atlaskit/theme": "^12.6.0",
@@ -124,6 +124,9 @@
124
124
  "platform.linking-platform.datasource.show-jlol-basic-filters": {
125
125
  "type": "boolean",
126
126
  "referenceOnly": "true"
127
+ },
128
+ "platform.linking-platform.smart-card.inline-switcher": {
129
+ "type": "boolean"
127
130
  }
128
131
  }
129
132
  }