@atlaskit/editor-plugin-synced-block 20.0.11 → 20.1.0
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 +12 -0
- package/dist/cjs/pm-plugins/main.js +2 -1
- package/dist/cjs/ui/Flag.js +47 -7
- package/dist/es2019/pm-plugins/main.js +2 -1
- package/dist/es2019/ui/Flag.js +43 -7
- package/dist/esm/pm-plugins/main.js +2 -1
- package/dist/esm/ui/Flag.js +47 -7
- package/dist/types/types/index.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-synced-block
|
|
2
2
|
|
|
3
|
+
## 20.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`70b2bc3a11027`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/70b2bc3a11027) -
|
|
8
|
+
[ux] EDITOR-9295 Link the unsaved Jira source from the "Pasted from unsaved item" flag, behind
|
|
9
|
+
`editor_synced_blocks_jira_custom_rich_text`. Adds optional `resourceId` to `ActiveFlag`.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
|
|
3
15
|
## 20.0.11
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -677,7 +677,8 @@ var createPlugin = exports.createPlugin = function createPlugin(options, pmPlugi
|
|
|
677
677
|
return tr.setMeta(syncedBlockPluginKey, {
|
|
678
678
|
activeFlag: {
|
|
679
679
|
id: _types.FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED,
|
|
680
|
-
sourceProduct: sourceProduct
|
|
680
|
+
sourceProduct: sourceProduct,
|
|
681
|
+
resourceId: resourceId
|
|
681
682
|
}
|
|
682
683
|
});
|
|
683
684
|
});
|
package/dist/cjs/ui/Flag.js
CHANGED
|
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.getSyncBlockCopiedDescription = exports.Flag = void 0;
|
|
9
9
|
require("./Flag.compiled.css");
|
|
10
10
|
var _runtime = require("@compiled/react/runtime");
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
13
|
var _react = _interopRequireDefault(require("react"));
|
|
13
14
|
var _reactIntl = require("react-intl");
|
|
@@ -22,6 +23,7 @@ var _megaphone = _interopRequireDefault(require("@atlaskit/icon/core/megaphone")
|
|
|
22
23
|
var _statusSuccess = _interopRequireDefault(require("@atlaskit/icon/core/status-success"));
|
|
23
24
|
var _statusWarning = _interopRequireDefault(require("@atlaskit/icon/core/status-warning"));
|
|
24
25
|
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
26
|
+
var _anchor = require("@atlaskit/primitives/compiled/anchor");
|
|
25
27
|
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
26
28
|
var _main = require("../pm-plugins/main");
|
|
27
29
|
var _types = require("../types");
|
|
@@ -85,22 +87,54 @@ var getSyncBlockCopiedDescription = exports.getSyncBlockCopiedDescription = func
|
|
|
85
87
|
}
|
|
86
88
|
return activeFlag.isLivePage || !activeFlag.isSourceContentUnpublished ? _messages.syncBlockMessages.syncBlockCopiedLivePageDescription : _messages.syncBlockMessages.syncBlockCopiedUnpublishedDescription;
|
|
87
89
|
};
|
|
90
|
+
var useSyncBlockSourceUrl = function useSyncBlockSourceUrl(syncBlockStore, resourceId) {
|
|
91
|
+
var _React$useState = _react.default.useState(),
|
|
92
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
93
|
+
sourceUrl = _React$useState2[0],
|
|
94
|
+
setSourceUrl = _React$useState2[1];
|
|
95
|
+
_react.default.useEffect(function () {
|
|
96
|
+
setSourceUrl(undefined);
|
|
97
|
+
if (!syncBlockStore || !resourceId) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
var referenceManager = syncBlockStore.referenceManager;
|
|
101
|
+
var cachedSourceUrl = referenceManager.getSyncBlockURL(resourceId);
|
|
102
|
+
if (cachedSourceUrl) {
|
|
103
|
+
setSourceUrl(cachedSourceUrl);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
var isCancelled = false;
|
|
107
|
+
void referenceManager.fetchSyncBlockSourceInfo(resourceId).then(function (sourceInfo) {
|
|
108
|
+
if (!isCancelled) {
|
|
109
|
+
setSourceUrl(sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.url);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return function () {
|
|
113
|
+
isCancelled = true;
|
|
114
|
+
};
|
|
115
|
+
}, [syncBlockStore, resourceId]);
|
|
116
|
+
return sourceUrl;
|
|
117
|
+
};
|
|
88
118
|
var Flag = exports.Flag = function Flag(_ref) {
|
|
89
119
|
var api = _ref.api,
|
|
90
120
|
onFeedbackPromptShown = _ref.onFeedbackPromptShown,
|
|
91
121
|
onGiveFeedback = _ref.onGiveFeedback;
|
|
92
122
|
var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['syncedBlock', 'connectivity'], function (states) {
|
|
93
|
-
var _states$syncedBlockSt, _states$connectivityS;
|
|
123
|
+
var _states$syncedBlockSt, _states$connectivityS, _states$syncedBlockSt2;
|
|
94
124
|
return {
|
|
95
125
|
activeFlag: (_states$syncedBlockSt = states.syncedBlockState) === null || _states$syncedBlockSt === void 0 ? void 0 : _states$syncedBlockSt.activeFlag,
|
|
96
|
-
mode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode
|
|
126
|
+
mode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode,
|
|
127
|
+
syncBlockStore: (_states$syncedBlockSt2 = states.syncedBlockState) === null || _states$syncedBlockSt2 === void 0 ? void 0 : _states$syncedBlockSt2.syncBlockStore
|
|
97
128
|
};
|
|
98
129
|
}),
|
|
99
130
|
activeFlag = _useSharedPluginState.activeFlag,
|
|
100
|
-
mode = _useSharedPluginState.mode
|
|
131
|
+
mode = _useSharedPluginState.mode,
|
|
132
|
+
syncBlockStore = _useSharedPluginState.syncBlockStore;
|
|
101
133
|
var _useIntl = (0, _reactIntl.useIntl)(),
|
|
102
134
|
formatMessage = _useIntl.formatMessage;
|
|
103
135
|
var isFeedbackPromptVisible = activeFlag && activeFlag.id === _types.FLAG_ID.SYNC_BLOCK_FEEDBACK_PROMPT;
|
|
136
|
+
var isJiraUnpublishedPaste = !!activeFlag && activeFlag.id === _types.FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED && activeFlag.sourceProduct === 'jira-work-item';
|
|
137
|
+
var sourceUrl = useSyncBlockSourceUrl(syncBlockStore, activeFlag && isJiraUnpublishedPaste && (0, _isExperimentEnabled.isExperimentEnabled)('editor_synced_blocks_jira_custom_rich_text') ? activeFlag.resourceId : undefined);
|
|
104
138
|
_react.default.useEffect(function () {
|
|
105
139
|
if (!isFeedbackPromptVisible || !onFeedbackPromptShown) {
|
|
106
140
|
return;
|
|
@@ -122,14 +156,20 @@ var Flag = exports.Flag = function Flag(_ref) {
|
|
|
122
156
|
type = _flagMap$activeFlag$i.type;
|
|
123
157
|
var onRetry = activeFlag.onRetry,
|
|
124
158
|
onDismissedCallback = activeFlag.onDismissed;
|
|
125
|
-
|
|
126
|
-
// Copy and unpublished-paste flags vary their guidance by source product.
|
|
127
|
-
var isJiraUnpublishedPaste = activeFlag.id === _types.FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED && activeFlag.sourceProduct === 'jira-work-item';
|
|
128
159
|
var isCopiedFlag = activeFlag.id === _types.FLAG_ID.SYNC_BLOCK_COPIED;
|
|
129
160
|
var isCopiedDescriptionEnabled = isCopiedFlag && ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_blocks_patch_11') || activeFlag.sourceProduct === 'confluence-page' && (0, _expValEquals.expValEquals)('platform_editor_sync_block_activation', 'isEnabled', true));
|
|
130
161
|
var copiedDescription = getSyncBlockCopiedDescription(activeFlag, isCopiedDescriptionEnabled);
|
|
131
162
|
var title = isJiraUnpublishedPaste ? _messages.syncBlockMessages.unpublishedSyncBlockPastedTitleJiraWorkItem : defaultTitle;
|
|
132
163
|
var description = copiedDescription !== null && copiedDescription !== void 0 ? copiedDescription : isJiraUnpublishedPaste ? _messages.syncBlockMessages.unpublishedSyncBlockPastedDescriptionJiraWorkItem : defaultDescription;
|
|
164
|
+
var descriptionContent = description ? formatMessage(description, {
|
|
165
|
+
link: function link(chunks) {
|
|
166
|
+
return sourceUrl ? /*#__PURE__*/_react.default.createElement(_anchor.Anchor, {
|
|
167
|
+
href: sourceUrl,
|
|
168
|
+
target: "_blank",
|
|
169
|
+
rel: "noopener noreferrer"
|
|
170
|
+
}, chunks) : chunks;
|
|
171
|
+
}
|
|
172
|
+
}) : undefined;
|
|
133
173
|
|
|
134
174
|
// Retry button often involves network request, hence we dismiss the flag in offline mode to avoid retry
|
|
135
175
|
if ((0, _editorPluginConnectivity.isOfflineMode)(mode) && !!onRetry) {
|
|
@@ -198,7 +238,7 @@ var Flag = exports.Flag = function Flag(_ref) {
|
|
|
198
238
|
var flag = /*#__PURE__*/_react.default.createElement(FlagComponent, {
|
|
199
239
|
onDismissed: onDismissed,
|
|
200
240
|
title: formatMessage(title),
|
|
201
|
-
description:
|
|
241
|
+
description: descriptionContent,
|
|
202
242
|
id: activeFlag.id,
|
|
203
243
|
testId: activeFlag.id,
|
|
204
244
|
icon: typeToIcon(type),
|
|
@@ -615,7 +615,8 @@ export const createPlugin = (options, pmPluginFactoryParams, syncBlockStore, api
|
|
|
615
615
|
}) => tr.setMeta(syncedBlockPluginKey, {
|
|
616
616
|
activeFlag: {
|
|
617
617
|
id: FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED,
|
|
618
|
-
sourceProduct
|
|
618
|
+
sourceProduct,
|
|
619
|
+
resourceId
|
|
619
620
|
}
|
|
620
621
|
}));
|
|
621
622
|
});
|
package/dist/es2019/ui/Flag.js
CHANGED
|
@@ -14,6 +14,7 @@ import MegaphoneIcon from '@atlaskit/icon/core/megaphone';
|
|
|
14
14
|
import StatusSuccessIcon from '@atlaskit/icon/core/status-success';
|
|
15
15
|
import StatusWarningIcon from '@atlaskit/icon/core/status-warning';
|
|
16
16
|
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
17
|
+
import { Anchor } from '@atlaskit/primitives/compiled/anchor';
|
|
17
18
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
18
19
|
import { syncedBlockPluginKey } from '../pm-plugins/main';
|
|
19
20
|
import { FLAG_ID } from '../types';
|
|
@@ -86,6 +87,33 @@ export const getSyncBlockCopiedDescription = (activeFlag, isCopiedDescriptionEna
|
|
|
86
87
|
}
|
|
87
88
|
return activeFlag.isLivePage || !activeFlag.isSourceContentUnpublished ? messages.syncBlockCopiedLivePageDescription : messages.syncBlockCopiedUnpublishedDescription;
|
|
88
89
|
};
|
|
90
|
+
const useSyncBlockSourceUrl = (syncBlockStore, resourceId) => {
|
|
91
|
+
const [sourceUrl, setSourceUrl] = React.useState();
|
|
92
|
+
React.useEffect(() => {
|
|
93
|
+
setSourceUrl(undefined);
|
|
94
|
+
if (!syncBlockStore || !resourceId) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const {
|
|
98
|
+
referenceManager
|
|
99
|
+
} = syncBlockStore;
|
|
100
|
+
const cachedSourceUrl = referenceManager.getSyncBlockURL(resourceId);
|
|
101
|
+
if (cachedSourceUrl) {
|
|
102
|
+
setSourceUrl(cachedSourceUrl);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
let isCancelled = false;
|
|
106
|
+
void referenceManager.fetchSyncBlockSourceInfo(resourceId).then(sourceInfo => {
|
|
107
|
+
if (!isCancelled) {
|
|
108
|
+
setSourceUrl(sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.url);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
return () => {
|
|
112
|
+
isCancelled = true;
|
|
113
|
+
};
|
|
114
|
+
}, [syncBlockStore, resourceId]);
|
|
115
|
+
return sourceUrl;
|
|
116
|
+
};
|
|
89
117
|
export const Flag = ({
|
|
90
118
|
api,
|
|
91
119
|
onFeedbackPromptShown,
|
|
@@ -93,18 +121,22 @@ export const Flag = ({
|
|
|
93
121
|
}) => {
|
|
94
122
|
const {
|
|
95
123
|
activeFlag,
|
|
96
|
-
mode
|
|
124
|
+
mode,
|
|
125
|
+
syncBlockStore
|
|
97
126
|
} = useSharedPluginStateWithSelector(api, ['syncedBlock', 'connectivity'], states => {
|
|
98
|
-
var _states$syncedBlockSt, _states$connectivityS;
|
|
127
|
+
var _states$syncedBlockSt, _states$connectivityS, _states$syncedBlockSt2;
|
|
99
128
|
return {
|
|
100
129
|
activeFlag: (_states$syncedBlockSt = states.syncedBlockState) === null || _states$syncedBlockSt === void 0 ? void 0 : _states$syncedBlockSt.activeFlag,
|
|
101
|
-
mode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode
|
|
130
|
+
mode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode,
|
|
131
|
+
syncBlockStore: (_states$syncedBlockSt2 = states.syncedBlockState) === null || _states$syncedBlockSt2 === void 0 ? void 0 : _states$syncedBlockSt2.syncBlockStore
|
|
102
132
|
};
|
|
103
133
|
});
|
|
104
134
|
const {
|
|
105
135
|
formatMessage
|
|
106
136
|
} = useIntl();
|
|
107
137
|
const isFeedbackPromptVisible = activeFlag && activeFlag.id === FLAG_ID.SYNC_BLOCK_FEEDBACK_PROMPT;
|
|
138
|
+
const isJiraUnpublishedPaste = !!activeFlag && activeFlag.id === FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED && activeFlag.sourceProduct === 'jira-work-item';
|
|
139
|
+
const sourceUrl = useSyncBlockSourceUrl(syncBlockStore, activeFlag && isJiraUnpublishedPaste && isExperimentEnabled('editor_synced_blocks_jira_custom_rich_text') ? activeFlag.resourceId : undefined);
|
|
108
140
|
React.useEffect(() => {
|
|
109
141
|
if (!isFeedbackPromptVisible || !onFeedbackPromptShown) {
|
|
110
142
|
return;
|
|
@@ -129,14 +161,18 @@ export const Flag = ({
|
|
|
129
161
|
onRetry,
|
|
130
162
|
onDismissed: onDismissedCallback
|
|
131
163
|
} = activeFlag;
|
|
132
|
-
|
|
133
|
-
// Copy and unpublished-paste flags vary their guidance by source product.
|
|
134
|
-
const isJiraUnpublishedPaste = activeFlag.id === FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED && activeFlag.sourceProduct === 'jira-work-item';
|
|
135
164
|
const isCopiedFlag = activeFlag.id === FLAG_ID.SYNC_BLOCK_COPIED;
|
|
136
165
|
const isCopiedDescriptionEnabled = isCopiedFlag && (isExperimentEnabled('platform_editor_blocks_patch_11') || activeFlag.sourceProduct === 'confluence-page' && expValEquals('platform_editor_sync_block_activation', 'isEnabled', true));
|
|
137
166
|
const copiedDescription = getSyncBlockCopiedDescription(activeFlag, isCopiedDescriptionEnabled);
|
|
138
167
|
const title = isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedTitleJiraWorkItem : defaultTitle;
|
|
139
168
|
const description = copiedDescription !== null && copiedDescription !== void 0 ? copiedDescription : isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedDescriptionJiraWorkItem : defaultDescription;
|
|
169
|
+
const descriptionContent = description ? formatMessage(description, {
|
|
170
|
+
link: chunks => sourceUrl ? /*#__PURE__*/React.createElement(Anchor, {
|
|
171
|
+
href: sourceUrl,
|
|
172
|
+
target: "_blank",
|
|
173
|
+
rel: "noopener noreferrer"
|
|
174
|
+
}, chunks) : chunks
|
|
175
|
+
}) : undefined;
|
|
140
176
|
|
|
141
177
|
// Retry button often involves network request, hence we dismiss the flag in offline mode to avoid retry
|
|
142
178
|
if (isOfflineMode(mode) && !!onRetry) {
|
|
@@ -206,7 +242,7 @@ export const Flag = ({
|
|
|
206
242
|
const flag = /*#__PURE__*/React.createElement(FlagComponent, {
|
|
207
243
|
onDismissed: onDismissed,
|
|
208
244
|
title: formatMessage(title),
|
|
209
|
-
description:
|
|
245
|
+
description: descriptionContent,
|
|
210
246
|
id: activeFlag.id,
|
|
211
247
|
testId: activeFlag.id,
|
|
212
248
|
icon: typeToIcon(type),
|
|
@@ -670,7 +670,8 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
|
|
|
670
670
|
return tr.setMeta(syncedBlockPluginKey, {
|
|
671
671
|
activeFlag: {
|
|
672
672
|
id: FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED,
|
|
673
|
-
sourceProduct: sourceProduct
|
|
673
|
+
sourceProduct: sourceProduct,
|
|
674
|
+
resourceId: resourceId
|
|
674
675
|
}
|
|
675
676
|
});
|
|
676
677
|
});
|
package/dist/esm/ui/Flag.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* Flag.tsx generated by @compiled/babel-plugin v3.0.2 */
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
3
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
4
|
var _flagMap;
|
|
4
5
|
import "./Flag.compiled.css";
|
|
@@ -18,6 +19,7 @@ import MegaphoneIcon from '@atlaskit/icon/core/megaphone';
|
|
|
18
19
|
import StatusSuccessIcon from '@atlaskit/icon/core/status-success';
|
|
19
20
|
import StatusWarningIcon from '@atlaskit/icon/core/status-warning';
|
|
20
21
|
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
22
|
+
import { Anchor } from '@atlaskit/primitives/compiled/anchor';
|
|
21
23
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
22
24
|
import { syncedBlockPluginKey } from '../pm-plugins/main';
|
|
23
25
|
import { FLAG_ID } from '../types';
|
|
@@ -78,22 +80,54 @@ export var getSyncBlockCopiedDescription = function getSyncBlockCopiedDescriptio
|
|
|
78
80
|
}
|
|
79
81
|
return activeFlag.isLivePage || !activeFlag.isSourceContentUnpublished ? messages.syncBlockCopiedLivePageDescription : messages.syncBlockCopiedUnpublishedDescription;
|
|
80
82
|
};
|
|
83
|
+
var useSyncBlockSourceUrl = function useSyncBlockSourceUrl(syncBlockStore, resourceId) {
|
|
84
|
+
var _React$useState = React.useState(),
|
|
85
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
86
|
+
sourceUrl = _React$useState2[0],
|
|
87
|
+
setSourceUrl = _React$useState2[1];
|
|
88
|
+
React.useEffect(function () {
|
|
89
|
+
setSourceUrl(undefined);
|
|
90
|
+
if (!syncBlockStore || !resourceId) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
var referenceManager = syncBlockStore.referenceManager;
|
|
94
|
+
var cachedSourceUrl = referenceManager.getSyncBlockURL(resourceId);
|
|
95
|
+
if (cachedSourceUrl) {
|
|
96
|
+
setSourceUrl(cachedSourceUrl);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
var isCancelled = false;
|
|
100
|
+
void referenceManager.fetchSyncBlockSourceInfo(resourceId).then(function (sourceInfo) {
|
|
101
|
+
if (!isCancelled) {
|
|
102
|
+
setSourceUrl(sourceInfo === null || sourceInfo === void 0 ? void 0 : sourceInfo.url);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return function () {
|
|
106
|
+
isCancelled = true;
|
|
107
|
+
};
|
|
108
|
+
}, [syncBlockStore, resourceId]);
|
|
109
|
+
return sourceUrl;
|
|
110
|
+
};
|
|
81
111
|
export var Flag = function Flag(_ref) {
|
|
82
112
|
var api = _ref.api,
|
|
83
113
|
onFeedbackPromptShown = _ref.onFeedbackPromptShown,
|
|
84
114
|
onGiveFeedback = _ref.onGiveFeedback;
|
|
85
115
|
var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['syncedBlock', 'connectivity'], function (states) {
|
|
86
|
-
var _states$syncedBlockSt, _states$connectivityS;
|
|
116
|
+
var _states$syncedBlockSt, _states$connectivityS, _states$syncedBlockSt2;
|
|
87
117
|
return {
|
|
88
118
|
activeFlag: (_states$syncedBlockSt = states.syncedBlockState) === null || _states$syncedBlockSt === void 0 ? void 0 : _states$syncedBlockSt.activeFlag,
|
|
89
|
-
mode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode
|
|
119
|
+
mode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode,
|
|
120
|
+
syncBlockStore: (_states$syncedBlockSt2 = states.syncedBlockState) === null || _states$syncedBlockSt2 === void 0 ? void 0 : _states$syncedBlockSt2.syncBlockStore
|
|
90
121
|
};
|
|
91
122
|
}),
|
|
92
123
|
activeFlag = _useSharedPluginState.activeFlag,
|
|
93
|
-
mode = _useSharedPluginState.mode
|
|
124
|
+
mode = _useSharedPluginState.mode,
|
|
125
|
+
syncBlockStore = _useSharedPluginState.syncBlockStore;
|
|
94
126
|
var _useIntl = useIntl(),
|
|
95
127
|
formatMessage = _useIntl.formatMessage;
|
|
96
128
|
var isFeedbackPromptVisible = activeFlag && activeFlag.id === FLAG_ID.SYNC_BLOCK_FEEDBACK_PROMPT;
|
|
129
|
+
var isJiraUnpublishedPaste = !!activeFlag && activeFlag.id === FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED && activeFlag.sourceProduct === 'jira-work-item';
|
|
130
|
+
var sourceUrl = useSyncBlockSourceUrl(syncBlockStore, activeFlag && isJiraUnpublishedPaste && isExperimentEnabled('editor_synced_blocks_jira_custom_rich_text') ? activeFlag.resourceId : undefined);
|
|
97
131
|
React.useEffect(function () {
|
|
98
132
|
if (!isFeedbackPromptVisible || !onFeedbackPromptShown) {
|
|
99
133
|
return;
|
|
@@ -115,14 +149,20 @@ export var Flag = function Flag(_ref) {
|
|
|
115
149
|
type = _flagMap$activeFlag$i.type;
|
|
116
150
|
var onRetry = activeFlag.onRetry,
|
|
117
151
|
onDismissedCallback = activeFlag.onDismissed;
|
|
118
|
-
|
|
119
|
-
// Copy and unpublished-paste flags vary their guidance by source product.
|
|
120
|
-
var isJiraUnpublishedPaste = activeFlag.id === FLAG_ID.UNPUBLISHED_SYNC_BLOCK_PASTED && activeFlag.sourceProduct === 'jira-work-item';
|
|
121
152
|
var isCopiedFlag = activeFlag.id === FLAG_ID.SYNC_BLOCK_COPIED;
|
|
122
153
|
var isCopiedDescriptionEnabled = isCopiedFlag && (isExperimentEnabled('platform_editor_blocks_patch_11') || activeFlag.sourceProduct === 'confluence-page' && expValEquals('platform_editor_sync_block_activation', 'isEnabled', true));
|
|
123
154
|
var copiedDescription = getSyncBlockCopiedDescription(activeFlag, isCopiedDescriptionEnabled);
|
|
124
155
|
var title = isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedTitleJiraWorkItem : defaultTitle;
|
|
125
156
|
var description = copiedDescription !== null && copiedDescription !== void 0 ? copiedDescription : isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedDescriptionJiraWorkItem : defaultDescription;
|
|
157
|
+
var descriptionContent = description ? formatMessage(description, {
|
|
158
|
+
link: function link(chunks) {
|
|
159
|
+
return sourceUrl ? /*#__PURE__*/React.createElement(Anchor, {
|
|
160
|
+
href: sourceUrl,
|
|
161
|
+
target: "_blank",
|
|
162
|
+
rel: "noopener noreferrer"
|
|
163
|
+
}, chunks) : chunks;
|
|
164
|
+
}
|
|
165
|
+
}) : undefined;
|
|
126
166
|
|
|
127
167
|
// Retry button often involves network request, hence we dismiss the flag in offline mode to avoid retry
|
|
128
168
|
if (isOfflineMode(mode) && !!onRetry) {
|
|
@@ -191,7 +231,7 @@ export var Flag = function Flag(_ref) {
|
|
|
191
231
|
var flag = /*#__PURE__*/React.createElement(FlagComponent, {
|
|
192
232
|
onDismissed: onDismissed,
|
|
193
233
|
title: formatMessage(title),
|
|
194
|
-
description:
|
|
234
|
+
description: descriptionContent,
|
|
195
235
|
id: activeFlag.id,
|
|
196
236
|
testId: activeFlag.id,
|
|
197
237
|
icon: typeToIcon(type),
|
|
@@ -26,6 +26,7 @@ type FlagConfig = {
|
|
|
26
26
|
isSourceContentUnpublished?: boolean;
|
|
27
27
|
onDismissed?: (tr: Transaction) => Transaction | void;
|
|
28
28
|
onRetry?: () => void;
|
|
29
|
+
resourceId?: string;
|
|
29
30
|
/**
|
|
30
31
|
* Optional source product for the synced block triggering this flag. Used to tailor
|
|
31
32
|
* unpublished paste copy and copied-block reuse guidance by product.
|