@atlaskit/link-picker 1.27.2 → 1.28.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.
- package/CHANGELOG.md +12 -0
- package/compass.yml +1 -1
- package/dist/cjs/common/utils/analytics/analytics.codegen.js +1 -1
- package/dist/cjs/ui/index.js +2 -3
- package/dist/cjs/ui/link-picker/form-footer/feature-discovery/index.js +52 -0
- package/dist/cjs/ui/link-picker/form-footer/feature-discovery/styled.js +16 -0
- package/dist/cjs/ui/link-picker/form-footer/index.js +21 -11
- package/dist/cjs/ui/link-picker/index.js +12 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/common/utils/analytics/analytics.codegen.js +1 -1
- package/dist/es2019/ui/index.js +2 -3
- package/dist/es2019/ui/link-picker/form-footer/feature-discovery/index.js +41 -0
- package/dist/es2019/ui/link-picker/form-footer/feature-discovery/styled.js +15 -0
- package/dist/es2019/ui/link-picker/form-footer/index.js +15 -8
- package/dist/es2019/ui/link-picker/index.js +11 -2
- package/dist/es2019/version.json +1 -1
- package/dist/esm/common/utils/analytics/analytics.codegen.js +1 -1
- package/dist/esm/ui/index.js +2 -3
- package/dist/esm/ui/link-picker/form-footer/feature-discovery/index.js +44 -0
- package/dist/esm/ui/link-picker/form-footer/feature-discovery/styled.js +8 -0
- package/dist/esm/ui/link-picker/form-footer/index.js +21 -11
- package/dist/esm/ui/link-picker/index.js +12 -3
- package/dist/esm/version.json +1 -1
- package/dist/types/common/types.d.ts +1 -0
- package/dist/types/common/utils/analytics/analytics.codegen.d.ts +2 -2
- package/dist/types/ui/link-picker/form-footer/feature-discovery/index.d.ts +15 -0
- package/dist/types/ui/link-picker/form-footer/feature-discovery/styled.d.ts +1 -0
- package/dist/types/ui/link-picker/form-footer/index.d.ts +4 -1
- package/dist/types/ui/link-picker/index.d.ts +1 -0
- package/dist/types-ts4.5/common/types.d.ts +1 -0
- package/dist/types-ts4.5/common/utils/analytics/analytics.codegen.d.ts +2 -2
- package/dist/types-ts4.5/ui/link-picker/form-footer/feature-discovery/index.d.ts +15 -0
- package/dist/types-ts4.5/ui/link-picker/form-footer/feature-discovery/styled.d.ts +1 -0
- package/dist/types-ts4.5/ui/link-picker/form-footer/index.d.ts +4 -1
- package/dist/types-ts4.5/ui/link-picker/index.d.ts +1 -0
- package/package.json +10 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/link-picker
|
|
2
2
|
|
|
3
|
+
## 1.28.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`f01deb5e6ab`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f01deb5e6ab) - Use injected env vars instead of version.json
|
|
8
|
+
|
|
9
|
+
## 1.28.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [`db2a42eb771`](https://bitbucket.org/atlassian/atlassian-frontend/commits/db2a42eb771) - [ux] EDM-7273 Jira create feature discovery
|
|
14
|
+
|
|
3
15
|
## 1.27.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/compass.yml
CHANGED
|
@@ -21,7 +21,7 @@ links:
|
|
|
21
21
|
url: 'https://product-fabric.atlassian.net/jira/software/c/projects/EDM/boards/893'
|
|
22
22
|
- name: ''
|
|
23
23
|
type: ON_CALL
|
|
24
|
-
url: 'https://atlassian.app.opsgenie.com/settings/schedule/detail/
|
|
24
|
+
url: 'https://atlassian.app.opsgenie.com/settings/schedule/detail/b9c8b313-dd6d-4a41-8eeb-d7a9df55be9d'
|
|
25
25
|
- name: ''
|
|
26
26
|
type: DASHBOARD
|
|
27
27
|
url: 'https://atlassian.signalfx.com/#/dashboard/EXwrMgYAwAA?groupId=EXwtbIrA4AA&configId=EXwrNLcA4AA'
|
|
@@ -11,7 +11,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
11
11
|
*
|
|
12
12
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
13
13
|
*
|
|
14
|
-
* @codegen <<SignedSource::
|
|
14
|
+
* @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
|
|
15
15
|
* @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
|
|
16
16
|
*/
|
|
17
17
|
|
package/dist/cjs/ui/index.js
CHANGED
|
@@ -14,7 +14,6 @@ var _analyticsNext = require("@atlaskit/analytics-next");
|
|
|
14
14
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
15
15
|
var _constants = require("../common/constants");
|
|
16
16
|
var _sessionProvider = require("../controllers/session-provider");
|
|
17
|
-
var _version = require("../version.json");
|
|
18
17
|
var _errorBoundary = require("./error-boundary");
|
|
19
18
|
var _loaderFallback = require("./loader-fallback");
|
|
20
19
|
var _messagesProvider = require("./messages-provider");
|
|
@@ -26,8 +25,8 @@ var testIds = {
|
|
|
26
25
|
};
|
|
27
26
|
exports.testIds = testIds;
|
|
28
27
|
var PACKAGE_DATA = {
|
|
29
|
-
packageName:
|
|
30
|
-
packageVersion:
|
|
28
|
+
packageName: "@atlaskit/link-picker",
|
|
29
|
+
packageVersion: "1.28.1",
|
|
31
30
|
componentName: _constants.COMPONENT_NAME,
|
|
32
31
|
source: _constants.COMPONENT_NAME
|
|
33
32
|
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _react2 = require("@emotion/react");
|
|
9
|
+
var _storageClient = require("@atlaskit/frontend-utilities/storage-client");
|
|
10
|
+
var _styled = require("./styled");
|
|
11
|
+
/** @jsx jsx */
|
|
12
|
+
|
|
13
|
+
var LOCAL_STORAGE_CLIENT_KEY = '@atlaskit/link-picker';
|
|
14
|
+
var LOCAL_STORAGE_DISCOVERY_KEY = 'action-discovery-jira-create';
|
|
15
|
+
var LOCAL_STORAGE_DISCOVERY_VALUE = 'discovered';
|
|
16
|
+
var LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS = 15552000000; // 180 days
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* This is a hacky solution to help with the feature discovery.
|
|
20
|
+
* This implementation must be removed once the experiment is completed.
|
|
21
|
+
*
|
|
22
|
+
* Cleanup ticket:
|
|
23
|
+
* https://product-fabric.atlassian.net/browse/EDM-7480
|
|
24
|
+
*/
|
|
25
|
+
var FeatureDiscovery = function FeatureDiscovery(_ref) {
|
|
26
|
+
var children = _ref.children,
|
|
27
|
+
testId = _ref.testId;
|
|
28
|
+
var storageClient = (0, _react.useMemo)(function () {
|
|
29
|
+
return new _storageClient.StorageClient(LOCAL_STORAGE_CLIENT_KEY);
|
|
30
|
+
}, []);
|
|
31
|
+
// Set this to `false` if you want to always show the feature discovery pulse.
|
|
32
|
+
// (or open Application tab in your devtools and delete the relevent row)
|
|
33
|
+
var discovered = (0, _react.useMemo)(function () {
|
|
34
|
+
return storageClient.getItem(LOCAL_STORAGE_DISCOVERY_KEY) === LOCAL_STORAGE_DISCOVERY_VALUE;
|
|
35
|
+
}, [storageClient]);
|
|
36
|
+
(0, _react.useEffect)(function () {
|
|
37
|
+
return function () {
|
|
38
|
+
if (!discovered) {
|
|
39
|
+
storageClient.setItemWithExpiry(LOCAL_STORAGE_DISCOVERY_KEY, LOCAL_STORAGE_DISCOVERY_VALUE, LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}, [storageClient, discovered]);
|
|
43
|
+
if (discovered) {
|
|
44
|
+
return children;
|
|
45
|
+
}
|
|
46
|
+
return (0, _react2.jsx)("span", {
|
|
47
|
+
css: _styled.pulseStyles,
|
|
48
|
+
"data-testid": "".concat(testId, "-discovery")
|
|
49
|
+
}, children);
|
|
50
|
+
};
|
|
51
|
+
var _default = FeatureDiscovery;
|
|
52
|
+
exports.default = _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.pulseStyles = void 0;
|
|
8
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
9
|
+
var _react = require("@emotion/react");
|
|
10
|
+
var _templateObject, _templateObject2;
|
|
11
|
+
var pulseKeyframes = (0, _react.keyframes)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n to {\n box-shadow: 0 0 0 7px rgba(0, 0, 0, 0);\n }\n"])));
|
|
12
|
+
|
|
13
|
+
// Styling from atlassian-frontend/packages/design-system/onboarding/src/styled/target.tsx
|
|
14
|
+
var pulseColor = 'rgb(101, 84, 192)';
|
|
15
|
+
var pulseStyles = (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n display: inline-flex;\n border-radius: 3px;\n box-shadow: 0 0 0 0 ", ";\n animation: ", " 1.45s cubic-bezier(0.5, 0, 0, 1) infinite;\n"])), pulseColor, pulseKeyframes);
|
|
16
|
+
exports.pulseStyles = pulseStyles;
|
|
@@ -14,9 +14,10 @@ var _reactIntlNext = require("react-intl-next");
|
|
|
14
14
|
var _button = _interopRequireWildcard(require("@atlaskit/button"));
|
|
15
15
|
var _add = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/add"));
|
|
16
16
|
var _errors = require("../../../common/utils/errors");
|
|
17
|
+
var _featureDiscovery = _interopRequireDefault(require("./feature-discovery"));
|
|
17
18
|
var _styled = require("./styled");
|
|
18
19
|
var _utils = require("./utils");
|
|
19
|
-
var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action"];
|
|
20
|
+
var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action", "createFeatureDiscovery"];
|
|
20
21
|
/** @jsx jsx */
|
|
21
22
|
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); }
|
|
22
23
|
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; }
|
|
@@ -40,7 +41,9 @@ var messages = (0, _reactIntlNext.defineMessages)({
|
|
|
40
41
|
var testIds = {
|
|
41
42
|
insertButton: 'link-picker-insert-button',
|
|
42
43
|
cancelButton: 'link-picker-cancel-button',
|
|
43
|
-
actionButton: 'link-picker-action-button'
|
|
44
|
+
actionButton: 'link-picker-action-button',
|
|
45
|
+
/** Feature discovery for action button (css pulse) */
|
|
46
|
+
actionButtonDiscovery: 'link-picker-action-button-discovery'
|
|
44
47
|
};
|
|
45
48
|
exports.testIds = testIds;
|
|
46
49
|
var FormFooter = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
@@ -52,6 +55,8 @@ var FormFooter = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
52
55
|
isEditing = _ref.isEditing,
|
|
53
56
|
onCancel = _ref.onCancel,
|
|
54
57
|
action = _ref.action,
|
|
58
|
+
_ref$createFeatureDis = _ref.createFeatureDiscovery,
|
|
59
|
+
createFeatureDiscovery = _ref$createFeatureDis === void 0 ? false : _ref$createFeatureDis,
|
|
55
60
|
restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
56
61
|
var intl = (0, _reactIntlNext.useIntl)();
|
|
57
62
|
if (error && error instanceof _errors.UnauthenticatedError) {
|
|
@@ -59,19 +64,24 @@ var FormFooter = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
59
64
|
}
|
|
60
65
|
var isSubmitDisabled = (0, _utils.checkSubmitDisabled)(isLoading, error, url, queryState, items);
|
|
61
66
|
var insertButtonMsg = isEditing ? messages.saveButton : messages.insertButton;
|
|
67
|
+
var createButton = function createButton(pluginAction) {
|
|
68
|
+
return (0, _react2.jsx)(_button.default, {
|
|
69
|
+
testId: testIds.actionButton,
|
|
70
|
+
onClick: pluginAction.callback,
|
|
71
|
+
appearance: "default",
|
|
72
|
+
iconBefore: (0, _react2.jsx)(_add.default, {
|
|
73
|
+
label: "",
|
|
74
|
+
size: "medium"
|
|
75
|
+
})
|
|
76
|
+
}, typeof pluginAction.label === 'string' ? pluginAction.label : intl.formatMessage(pluginAction.label));
|
|
77
|
+
};
|
|
62
78
|
return (0, _react2.jsx)("footer", (0, _extends2.default)({
|
|
63
79
|
css: _styled.formFooterStyles
|
|
64
80
|
}, restProps), action && (0, _react2.jsx)("div", {
|
|
65
81
|
css: _styled.formFooterActionStyles
|
|
66
|
-
}, (0, _react2.jsx)(
|
|
67
|
-
testId: testIds.
|
|
68
|
-
|
|
69
|
-
appearance: "default",
|
|
70
|
-
iconBefore: (0, _react2.jsx)(_add.default, {
|
|
71
|
-
label: "",
|
|
72
|
-
size: "medium"
|
|
73
|
-
})
|
|
74
|
-
}, typeof action.label === 'string' ? action.label : intl.formatMessage(action.label))), (0, _react2.jsx)(_button.ButtonGroup, null, (0, _react2.jsx)(_button.default, {
|
|
82
|
+
}, createFeatureDiscovery ? (0, _react2.jsx)(_featureDiscovery.default, {
|
|
83
|
+
testId: testIds.actionButtonDiscovery
|
|
84
|
+
}, createButton(action)) : createButton(action)), (0, _react2.jsx)(_button.ButtonGroup, null, (0, _react2.jsx)(_button.default, {
|
|
75
85
|
appearance: "subtle",
|
|
76
86
|
onClick: onCancel,
|
|
77
87
|
testId: testIds.cancelButton
|
|
@@ -13,6 +13,7 @@ var _reactIntlNext = require("react-intl-next");
|
|
|
13
13
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
14
14
|
var _url2 = require("@atlaskit/linking-common/url");
|
|
15
15
|
var _userAgent = require("@atlaskit/linking-common/user-agent");
|
|
16
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
16
17
|
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
17
18
|
var _analytics = require("../../common/analytics");
|
|
18
19
|
var _constants = require("../../common/constants");
|
|
@@ -44,13 +45,17 @@ var initState = {
|
|
|
44
45
|
selectedIndex: -1,
|
|
45
46
|
invalidUrl: false,
|
|
46
47
|
activeTab: 0,
|
|
47
|
-
preventHidingRecents: false
|
|
48
|
+
preventHidingRecents: false,
|
|
49
|
+
/** This only allows the feature discovery pulse - to be shown the ff must be on and active tab be Jira */
|
|
50
|
+
allowCreateFeatureDiscovery: true
|
|
48
51
|
};
|
|
49
52
|
function reducer(state, payload) {
|
|
50
53
|
if (payload.url && state.url !== payload.url) {
|
|
51
54
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
52
55
|
invalidUrl: false,
|
|
53
|
-
selectedIndex: (0, _url2.isSafeUrl)(payload.url) && payload.url.length ? -1 : state.selectedIndex
|
|
56
|
+
selectedIndex: (0, _url2.isSafeUrl)(payload.url) && payload.url.length ? -1 : state.selectedIndex,
|
|
57
|
+
/** When the user starts entering a url, stop pulsing the create button */
|
|
58
|
+
allowCreateFeatureDiscovery: false
|
|
54
59
|
}, payload);
|
|
55
60
|
}
|
|
56
61
|
return _objectSpread(_objectSpread({}, state), payload);
|
|
@@ -96,7 +101,8 @@ var LinkPicker = (0, _analytics.withLinkPickerAnalyticsContext)( /*#__PURE__*/(0
|
|
|
96
101
|
url = state.url,
|
|
97
102
|
displayText = state.displayText,
|
|
98
103
|
invalidUrl = state.invalidUrl,
|
|
99
|
-
activeTab = state.activeTab
|
|
104
|
+
activeTab = state.activeTab,
|
|
105
|
+
allowCreateFeatureDiscovery = state.allowCreateFeatureDiscovery;
|
|
100
106
|
var intl = (0, _reactIntlNext.useIntl)();
|
|
101
107
|
var queryState = (0, _useSearchQuery.useSearchQuery)(state);
|
|
102
108
|
var _usePlugins = (0, _usePlugins2.usePlugins)(queryState, activeTab, plugins),
|
|
@@ -345,6 +351,9 @@ var LinkPicker = (0, _analytics.withLinkPickerAnalyticsContext)( /*#__PURE__*/(0
|
|
|
345
351
|
onCancel: onCancel,
|
|
346
352
|
action: pluginAction,
|
|
347
353
|
css: !queryState || !(plugins !== null && plugins !== void 0 && plugins.length) ? _styled.formFooterMargin : undefined
|
|
354
|
+
/* Show the feature discovery pulse when we're on the Jira tab, we haven't started typing a url and
|
|
355
|
+
the feature flag is enabled */,
|
|
356
|
+
createFeatureDiscovery: (activePlugin === null || activePlugin === void 0 ? void 0 : activePlugin.tabKey) === 'jira' && allowCreateFeatureDiscovery && (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.link-picker.enable-jira-create')
|
|
348
357
|
}));
|
|
349
358
|
}));
|
|
350
359
|
exports.LinkPicker = LinkPicker;
|
package/dist/cjs/version.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
5
|
*
|
|
6
|
-
* @codegen <<SignedSource::
|
|
6
|
+
* @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
|
|
7
7
|
* @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
|
|
8
8
|
*/
|
|
9
9
|
|
package/dist/es2019/ui/index.js
CHANGED
|
@@ -7,7 +7,6 @@ import { AnalyticsContext } from '@atlaskit/analytics-next';
|
|
|
7
7
|
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
8
8
|
import { COMPONENT_NAME } from '../common/constants';
|
|
9
9
|
import { LinkPickerSessionProvider } from '../controllers/session-provider';
|
|
10
|
-
import { name as packageName, version as packageVersion } from '../version.json';
|
|
11
10
|
import { ErrorBoundary } from './error-boundary';
|
|
12
11
|
import { LoaderFallback } from './loader-fallback';
|
|
13
12
|
import { MessagesProvider } from './messages-provider';
|
|
@@ -16,8 +15,8 @@ export const testIds = {
|
|
|
16
15
|
linkPickerRoot: 'link-picker-root'
|
|
17
16
|
};
|
|
18
17
|
export const PACKAGE_DATA = {
|
|
19
|
-
packageName,
|
|
20
|
-
packageVersion,
|
|
18
|
+
packageName: "@atlaskit/link-picker",
|
|
19
|
+
packageVersion: "1.28.1",
|
|
21
20
|
componentName: COMPONENT_NAME,
|
|
22
21
|
source: COMPONENT_NAME
|
|
23
22
|
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { useEffect, useMemo } from 'react';
|
|
3
|
+
import { jsx } from '@emotion/react';
|
|
4
|
+
import { StorageClient } from '@atlaskit/frontend-utilities/storage-client';
|
|
5
|
+
import { pulseStyles } from './styled';
|
|
6
|
+
const LOCAL_STORAGE_CLIENT_KEY = '@atlaskit/link-picker';
|
|
7
|
+
const LOCAL_STORAGE_DISCOVERY_KEY = 'action-discovery-jira-create';
|
|
8
|
+
const LOCAL_STORAGE_DISCOVERY_VALUE = 'discovered';
|
|
9
|
+
const LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS = 15552000000; // 180 days
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This is a hacky solution to help with the feature discovery.
|
|
13
|
+
* This implementation must be removed once the experiment is completed.
|
|
14
|
+
*
|
|
15
|
+
* Cleanup ticket:
|
|
16
|
+
* https://product-fabric.atlassian.net/browse/EDM-7480
|
|
17
|
+
*/
|
|
18
|
+
const FeatureDiscovery = ({
|
|
19
|
+
children,
|
|
20
|
+
testId
|
|
21
|
+
}) => {
|
|
22
|
+
const storageClient = useMemo(() => new StorageClient(LOCAL_STORAGE_CLIENT_KEY), []);
|
|
23
|
+
// Set this to `false` if you want to always show the feature discovery pulse.
|
|
24
|
+
// (or open Application tab in your devtools and delete the relevent row)
|
|
25
|
+
const discovered = useMemo(() => storageClient.getItem(LOCAL_STORAGE_DISCOVERY_KEY) === LOCAL_STORAGE_DISCOVERY_VALUE, [storageClient]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
return () => {
|
|
28
|
+
if (!discovered) {
|
|
29
|
+
storageClient.setItemWithExpiry(LOCAL_STORAGE_DISCOVERY_KEY, LOCAL_STORAGE_DISCOVERY_VALUE, LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}, [storageClient, discovered]);
|
|
33
|
+
if (discovered) {
|
|
34
|
+
return children;
|
|
35
|
+
}
|
|
36
|
+
return jsx("span", {
|
|
37
|
+
css: pulseStyles,
|
|
38
|
+
"data-testid": `${testId}-discovery`
|
|
39
|
+
}, children);
|
|
40
|
+
};
|
|
41
|
+
export default FeatureDiscovery;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { css, keyframes } from '@emotion/react';
|
|
2
|
+
const pulseKeyframes = keyframes`
|
|
3
|
+
to {
|
|
4
|
+
box-shadow: 0 0 0 7px rgba(0, 0, 0, 0);
|
|
5
|
+
}
|
|
6
|
+
`;
|
|
7
|
+
|
|
8
|
+
// Styling from atlassian-frontend/packages/design-system/onboarding/src/styled/target.tsx
|
|
9
|
+
const pulseColor = 'rgb(101, 84, 192)';
|
|
10
|
+
export const pulseStyles = css`
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
border-radius: 3px;
|
|
13
|
+
box-shadow: 0 0 0 0 ${pulseColor};
|
|
14
|
+
animation: ${pulseKeyframes} 1.45s cubic-bezier(0.5, 0, 0, 1) infinite;
|
|
15
|
+
`;
|
|
@@ -6,6 +6,7 @@ import { defineMessages, useIntl } from 'react-intl-next';
|
|
|
6
6
|
import Button, { ButtonGroup } from '@atlaskit/button';
|
|
7
7
|
import EditorAddIcon from '@atlaskit/icon/glyph/editor/add';
|
|
8
8
|
import { UnauthenticatedError } from '../../../common/utils/errors';
|
|
9
|
+
import FeatureDiscovery from './feature-discovery';
|
|
9
10
|
import { formFooterActionStyles, formFooterStyles } from './styled';
|
|
10
11
|
import { checkSubmitDisabled } from './utils';
|
|
11
12
|
const messages = defineMessages({
|
|
@@ -28,7 +29,9 @@ const messages = defineMessages({
|
|
|
28
29
|
export const testIds = {
|
|
29
30
|
insertButton: 'link-picker-insert-button',
|
|
30
31
|
cancelButton: 'link-picker-cancel-button',
|
|
31
|
-
actionButton: 'link-picker-action-button'
|
|
32
|
+
actionButton: 'link-picker-action-button',
|
|
33
|
+
/** Feature discovery for action button (css pulse) */
|
|
34
|
+
actionButtonDiscovery: 'link-picker-action-button-discovery'
|
|
32
35
|
};
|
|
33
36
|
export const FormFooter = /*#__PURE__*/memo(({
|
|
34
37
|
isLoading,
|
|
@@ -39,6 +42,7 @@ export const FormFooter = /*#__PURE__*/memo(({
|
|
|
39
42
|
isEditing,
|
|
40
43
|
onCancel,
|
|
41
44
|
action,
|
|
45
|
+
createFeatureDiscovery = false,
|
|
42
46
|
...restProps
|
|
43
47
|
}) => {
|
|
44
48
|
const intl = useIntl();
|
|
@@ -47,19 +51,22 @@ export const FormFooter = /*#__PURE__*/memo(({
|
|
|
47
51
|
}
|
|
48
52
|
const isSubmitDisabled = checkSubmitDisabled(isLoading, error, url, queryState, items);
|
|
49
53
|
const insertButtonMsg = isEditing ? messages.saveButton : messages.insertButton;
|
|
50
|
-
|
|
51
|
-
css: formFooterStyles
|
|
52
|
-
}, restProps), action && jsx("div", {
|
|
53
|
-
css: formFooterActionStyles
|
|
54
|
-
}, jsx(Button, {
|
|
54
|
+
const createButton = pluginAction => jsx(Button, {
|
|
55
55
|
testId: testIds.actionButton,
|
|
56
|
-
onClick:
|
|
56
|
+
onClick: pluginAction.callback,
|
|
57
57
|
appearance: "default",
|
|
58
58
|
iconBefore: jsx(EditorAddIcon, {
|
|
59
59
|
label: "",
|
|
60
60
|
size: "medium"
|
|
61
61
|
})
|
|
62
|
-
}, typeof
|
|
62
|
+
}, typeof pluginAction.label === 'string' ? pluginAction.label : intl.formatMessage(pluginAction.label));
|
|
63
|
+
return jsx("footer", _extends({
|
|
64
|
+
css: formFooterStyles
|
|
65
|
+
}, restProps), action && jsx("div", {
|
|
66
|
+
css: formFooterActionStyles
|
|
67
|
+
}, createFeatureDiscovery ? jsx(FeatureDiscovery, {
|
|
68
|
+
testId: testIds.actionButtonDiscovery
|
|
69
|
+
}, createButton(action)) : createButton(action)), jsx(ButtonGroup, null, jsx(Button, {
|
|
63
70
|
appearance: "subtle",
|
|
64
71
|
onClick: onCancel,
|
|
65
72
|
testId: testIds.cancelButton
|
|
@@ -5,6 +5,7 @@ import { FormattedMessage, useIntl } from 'react-intl-next';
|
|
|
5
5
|
import { useAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
6
6
|
import { isSafeUrl, normalizeUrl } from '@atlaskit/linking-common/url';
|
|
7
7
|
import { browser } from '@atlaskit/linking-common/user-agent';
|
|
8
|
+
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
8
9
|
import VisuallyHidden from '@atlaskit/visually-hidden';
|
|
9
10
|
import { useLinkPickerAnalytics, withInputFieldTracking, withLinkPickerAnalyticsContext } from '../../common/analytics';
|
|
10
11
|
import { ANALYTICS_CHANNEL } from '../../common/constants';
|
|
@@ -36,7 +37,9 @@ const initState = {
|
|
|
36
37
|
selectedIndex: -1,
|
|
37
38
|
invalidUrl: false,
|
|
38
39
|
activeTab: 0,
|
|
39
|
-
preventHidingRecents: false
|
|
40
|
+
preventHidingRecents: false,
|
|
41
|
+
/** This only allows the feature discovery pulse - to be shown the ff must be on and active tab be Jira */
|
|
42
|
+
allowCreateFeatureDiscovery: true
|
|
40
43
|
};
|
|
41
44
|
function reducer(state, payload) {
|
|
42
45
|
if (payload.url && state.url !== payload.url) {
|
|
@@ -44,6 +47,8 @@ function reducer(state, payload) {
|
|
|
44
47
|
...state,
|
|
45
48
|
invalidUrl: false,
|
|
46
49
|
selectedIndex: isSafeUrl(payload.url) && payload.url.length ? -1 : state.selectedIndex,
|
|
50
|
+
/** When the user starts entering a url, stop pulsing the create button */
|
|
51
|
+
allowCreateFeatureDiscovery: false,
|
|
47
52
|
...payload
|
|
48
53
|
};
|
|
49
54
|
}
|
|
@@ -93,7 +98,8 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
|
|
|
93
98
|
url,
|
|
94
99
|
displayText,
|
|
95
100
|
invalidUrl,
|
|
96
|
-
activeTab
|
|
101
|
+
activeTab,
|
|
102
|
+
allowCreateFeatureDiscovery
|
|
97
103
|
} = state;
|
|
98
104
|
const intl = useIntl();
|
|
99
105
|
const queryState = useSearchQuery(state);
|
|
@@ -345,5 +351,8 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
|
|
|
345
351
|
onCancel: onCancel,
|
|
346
352
|
action: pluginAction,
|
|
347
353
|
css: !queryState || !(plugins !== null && plugins !== void 0 && plugins.length) ? formFooterMargin : undefined
|
|
354
|
+
/* Show the feature discovery pulse when we're on the Jira tab, we haven't started typing a url and
|
|
355
|
+
the feature flag is enabled */,
|
|
356
|
+
createFeatureDiscovery: (activePlugin === null || activePlugin === void 0 ? void 0 : activePlugin.tabKey) === 'jira' && allowCreateFeatureDiscovery && getBooleanFF('platform.linking-platform.link-picker.enable-jira-create')
|
|
348
357
|
}));
|
|
349
358
|
}));
|
package/dist/es2019/version.json
CHANGED
|
@@ -4,7 +4,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
4
4
|
*
|
|
5
5
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
6
6
|
*
|
|
7
|
-
* @codegen <<SignedSource::
|
|
7
|
+
* @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
|
|
8
8
|
* @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
|
|
9
9
|
*/
|
|
10
10
|
|
package/dist/esm/ui/index.js
CHANGED
|
@@ -7,7 +7,6 @@ import { AnalyticsContext } from '@atlaskit/analytics-next';
|
|
|
7
7
|
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
8
8
|
import { COMPONENT_NAME } from '../common/constants';
|
|
9
9
|
import { LinkPickerSessionProvider } from '../controllers/session-provider';
|
|
10
|
-
import { name as packageName, version as packageVersion } from '../version.json';
|
|
11
10
|
import { ErrorBoundary } from './error-boundary';
|
|
12
11
|
import { LoaderFallback } from './loader-fallback';
|
|
13
12
|
import { MessagesProvider } from './messages-provider';
|
|
@@ -16,8 +15,8 @@ export var testIds = {
|
|
|
16
15
|
linkPickerRoot: 'link-picker-root'
|
|
17
16
|
};
|
|
18
17
|
export var PACKAGE_DATA = {
|
|
19
|
-
packageName:
|
|
20
|
-
packageVersion:
|
|
18
|
+
packageName: "@atlaskit/link-picker",
|
|
19
|
+
packageVersion: "1.28.1",
|
|
21
20
|
componentName: COMPONENT_NAME,
|
|
22
21
|
source: COMPONENT_NAME
|
|
23
22
|
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { useEffect, useMemo } from 'react';
|
|
3
|
+
import { jsx } from '@emotion/react';
|
|
4
|
+
import { StorageClient } from '@atlaskit/frontend-utilities/storage-client';
|
|
5
|
+
import { pulseStyles } from './styled';
|
|
6
|
+
var LOCAL_STORAGE_CLIENT_KEY = '@atlaskit/link-picker';
|
|
7
|
+
var LOCAL_STORAGE_DISCOVERY_KEY = 'action-discovery-jira-create';
|
|
8
|
+
var LOCAL_STORAGE_DISCOVERY_VALUE = 'discovered';
|
|
9
|
+
var LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS = 15552000000; // 180 days
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This is a hacky solution to help with the feature discovery.
|
|
13
|
+
* This implementation must be removed once the experiment is completed.
|
|
14
|
+
*
|
|
15
|
+
* Cleanup ticket:
|
|
16
|
+
* https://product-fabric.atlassian.net/browse/EDM-7480
|
|
17
|
+
*/
|
|
18
|
+
var FeatureDiscovery = function FeatureDiscovery(_ref) {
|
|
19
|
+
var children = _ref.children,
|
|
20
|
+
testId = _ref.testId;
|
|
21
|
+
var storageClient = useMemo(function () {
|
|
22
|
+
return new StorageClient(LOCAL_STORAGE_CLIENT_KEY);
|
|
23
|
+
}, []);
|
|
24
|
+
// Set this to `false` if you want to always show the feature discovery pulse.
|
|
25
|
+
// (or open Application tab in your devtools and delete the relevent row)
|
|
26
|
+
var discovered = useMemo(function () {
|
|
27
|
+
return storageClient.getItem(LOCAL_STORAGE_DISCOVERY_KEY) === LOCAL_STORAGE_DISCOVERY_VALUE;
|
|
28
|
+
}, [storageClient]);
|
|
29
|
+
useEffect(function () {
|
|
30
|
+
return function () {
|
|
31
|
+
if (!discovered) {
|
|
32
|
+
storageClient.setItemWithExpiry(LOCAL_STORAGE_DISCOVERY_KEY, LOCAL_STORAGE_DISCOVERY_VALUE, LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}, [storageClient, discovered]);
|
|
36
|
+
if (discovered) {
|
|
37
|
+
return children;
|
|
38
|
+
}
|
|
39
|
+
return jsx("span", {
|
|
40
|
+
css: pulseStyles,
|
|
41
|
+
"data-testid": "".concat(testId, "-discovery")
|
|
42
|
+
}, children);
|
|
43
|
+
};
|
|
44
|
+
export default FeatureDiscovery;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
|
2
|
+
var _templateObject, _templateObject2;
|
|
3
|
+
import { css, keyframes } from '@emotion/react';
|
|
4
|
+
var pulseKeyframes = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n to {\n box-shadow: 0 0 0 7px rgba(0, 0, 0, 0);\n }\n"])));
|
|
5
|
+
|
|
6
|
+
// Styling from atlassian-frontend/packages/design-system/onboarding/src/styled/target.tsx
|
|
7
|
+
var pulseColor = 'rgb(101, 84, 192)';
|
|
8
|
+
export var pulseStyles = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: inline-flex;\n border-radius: 3px;\n box-shadow: 0 0 0 0 ", ";\n animation: ", " 1.45s cubic-bezier(0.5, 0, 0, 1) infinite;\n"])), pulseColor, pulseKeyframes);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action"];
|
|
3
|
+
var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action", "createFeatureDiscovery"];
|
|
4
4
|
/** @jsx jsx */
|
|
5
5
|
import { memo } from 'react';
|
|
6
6
|
import { jsx } from '@emotion/react';
|
|
@@ -8,6 +8,7 @@ import { defineMessages, useIntl } from 'react-intl-next';
|
|
|
8
8
|
import Button, { ButtonGroup } from '@atlaskit/button';
|
|
9
9
|
import EditorAddIcon from '@atlaskit/icon/glyph/editor/add';
|
|
10
10
|
import { UnauthenticatedError } from '../../../common/utils/errors';
|
|
11
|
+
import FeatureDiscovery from './feature-discovery';
|
|
11
12
|
import { formFooterActionStyles, formFooterStyles } from './styled';
|
|
12
13
|
import { checkSubmitDisabled } from './utils';
|
|
13
14
|
var messages = defineMessages({
|
|
@@ -30,7 +31,9 @@ var messages = defineMessages({
|
|
|
30
31
|
export var testIds = {
|
|
31
32
|
insertButton: 'link-picker-insert-button',
|
|
32
33
|
cancelButton: 'link-picker-cancel-button',
|
|
33
|
-
actionButton: 'link-picker-action-button'
|
|
34
|
+
actionButton: 'link-picker-action-button',
|
|
35
|
+
/** Feature discovery for action button (css pulse) */
|
|
36
|
+
actionButtonDiscovery: 'link-picker-action-button-discovery'
|
|
34
37
|
};
|
|
35
38
|
export var FormFooter = /*#__PURE__*/memo(function (_ref) {
|
|
36
39
|
var isLoading = _ref.isLoading,
|
|
@@ -41,6 +44,8 @@ export var FormFooter = /*#__PURE__*/memo(function (_ref) {
|
|
|
41
44
|
isEditing = _ref.isEditing,
|
|
42
45
|
onCancel = _ref.onCancel,
|
|
43
46
|
action = _ref.action,
|
|
47
|
+
_ref$createFeatureDis = _ref.createFeatureDiscovery,
|
|
48
|
+
createFeatureDiscovery = _ref$createFeatureDis === void 0 ? false : _ref$createFeatureDis,
|
|
44
49
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
45
50
|
var intl = useIntl();
|
|
46
51
|
if (error && error instanceof UnauthenticatedError) {
|
|
@@ -48,19 +53,24 @@ export var FormFooter = /*#__PURE__*/memo(function (_ref) {
|
|
|
48
53
|
}
|
|
49
54
|
var isSubmitDisabled = checkSubmitDisabled(isLoading, error, url, queryState, items);
|
|
50
55
|
var insertButtonMsg = isEditing ? messages.saveButton : messages.insertButton;
|
|
56
|
+
var createButton = function createButton(pluginAction) {
|
|
57
|
+
return jsx(Button, {
|
|
58
|
+
testId: testIds.actionButton,
|
|
59
|
+
onClick: pluginAction.callback,
|
|
60
|
+
appearance: "default",
|
|
61
|
+
iconBefore: jsx(EditorAddIcon, {
|
|
62
|
+
label: "",
|
|
63
|
+
size: "medium"
|
|
64
|
+
})
|
|
65
|
+
}, typeof pluginAction.label === 'string' ? pluginAction.label : intl.formatMessage(pluginAction.label));
|
|
66
|
+
};
|
|
51
67
|
return jsx("footer", _extends({
|
|
52
68
|
css: formFooterStyles
|
|
53
69
|
}, restProps), action && jsx("div", {
|
|
54
70
|
css: formFooterActionStyles
|
|
55
|
-
}, jsx(
|
|
56
|
-
testId: testIds.
|
|
57
|
-
|
|
58
|
-
appearance: "default",
|
|
59
|
-
iconBefore: jsx(EditorAddIcon, {
|
|
60
|
-
label: "",
|
|
61
|
-
size: "medium"
|
|
62
|
-
})
|
|
63
|
-
}, typeof action.label === 'string' ? action.label : intl.formatMessage(action.label))), jsx(ButtonGroup, null, jsx(Button, {
|
|
71
|
+
}, createFeatureDiscovery ? jsx(FeatureDiscovery, {
|
|
72
|
+
testId: testIds.actionButtonDiscovery
|
|
73
|
+
}, createButton(action)) : createButton(action)), jsx(ButtonGroup, null, jsx(Button, {
|
|
64
74
|
appearance: "subtle",
|
|
65
75
|
onClick: onCancel,
|
|
66
76
|
testId: testIds.cancelButton
|
|
@@ -9,6 +9,7 @@ import { FormattedMessage, useIntl } from 'react-intl-next';
|
|
|
9
9
|
import { useAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
10
10
|
import { isSafeUrl, normalizeUrl } from '@atlaskit/linking-common/url';
|
|
11
11
|
import { browser } from '@atlaskit/linking-common/user-agent';
|
|
12
|
+
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
12
13
|
import VisuallyHidden from '@atlaskit/visually-hidden';
|
|
13
14
|
import { useLinkPickerAnalytics, withInputFieldTracking, withLinkPickerAnalyticsContext } from '../../common/analytics';
|
|
14
15
|
import { ANALYTICS_CHANNEL } from '../../common/constants';
|
|
@@ -37,13 +38,17 @@ var initState = {
|
|
|
37
38
|
selectedIndex: -1,
|
|
38
39
|
invalidUrl: false,
|
|
39
40
|
activeTab: 0,
|
|
40
|
-
preventHidingRecents: false
|
|
41
|
+
preventHidingRecents: false,
|
|
42
|
+
/** This only allows the feature discovery pulse - to be shown the ff must be on and active tab be Jira */
|
|
43
|
+
allowCreateFeatureDiscovery: true
|
|
41
44
|
};
|
|
42
45
|
function reducer(state, payload) {
|
|
43
46
|
if (payload.url && state.url !== payload.url) {
|
|
44
47
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
45
48
|
invalidUrl: false,
|
|
46
|
-
selectedIndex: isSafeUrl(payload.url) && payload.url.length ? -1 : state.selectedIndex
|
|
49
|
+
selectedIndex: isSafeUrl(payload.url) && payload.url.length ? -1 : state.selectedIndex,
|
|
50
|
+
/** When the user starts entering a url, stop pulsing the create button */
|
|
51
|
+
allowCreateFeatureDiscovery: false
|
|
47
52
|
}, payload);
|
|
48
53
|
}
|
|
49
54
|
return _objectSpread(_objectSpread({}, state), payload);
|
|
@@ -89,7 +94,8 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
|
|
|
89
94
|
url = state.url,
|
|
90
95
|
displayText = state.displayText,
|
|
91
96
|
invalidUrl = state.invalidUrl,
|
|
92
|
-
activeTab = state.activeTab
|
|
97
|
+
activeTab = state.activeTab,
|
|
98
|
+
allowCreateFeatureDiscovery = state.allowCreateFeatureDiscovery;
|
|
93
99
|
var intl = useIntl();
|
|
94
100
|
var queryState = useSearchQuery(state);
|
|
95
101
|
var _usePlugins = usePlugins(queryState, activeTab, plugins),
|
|
@@ -338,5 +344,8 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
|
|
|
338
344
|
onCancel: onCancel,
|
|
339
345
|
action: pluginAction,
|
|
340
346
|
css: !queryState || !(plugins !== null && plugins !== void 0 && plugins.length) ? formFooterMargin : undefined
|
|
347
|
+
/* Show the feature discovery pulse when we're on the Jira tab, we haven't started typing a url and
|
|
348
|
+
the feature flag is enabled */,
|
|
349
|
+
createFeatureDiscovery: (activePlugin === null || activePlugin === void 0 ? void 0 : activePlugin.tabKey) === 'jira' && allowCreateFeatureDiscovery && getBooleanFF('platform.linking-platform.link-picker.enable-jira-create')
|
|
341
350
|
}));
|
|
342
351
|
}));
|
package/dist/esm/version.json
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
5
|
*
|
|
6
|
-
* @codegen <<SignedSource::
|
|
6
|
+
* @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
|
|
7
7
|
* @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
|
|
8
8
|
*/
|
|
9
9
|
export type PackageMetaDataType = {
|
|
10
|
-
packageName:
|
|
10
|
+
packageName: string;
|
|
11
11
|
packageVersion: string;
|
|
12
12
|
source: 'linkPicker';
|
|
13
13
|
componentName: 'linkPicker';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { type FC } from 'react';
|
|
3
|
+
type FeatureDiscoveryProps = {
|
|
4
|
+
children: React.ReactElement;
|
|
5
|
+
testId?: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* This is a hacky solution to help with the feature discovery.
|
|
9
|
+
* This implementation must be removed once the experiment is completed.
|
|
10
|
+
*
|
|
11
|
+
* Cleanup ticket:
|
|
12
|
+
* https://product-fabric.atlassian.net/browse/EDM-7480
|
|
13
|
+
*/
|
|
14
|
+
declare const FeatureDiscovery: FC<FeatureDiscoveryProps>;
|
|
15
|
+
export default FeatureDiscovery;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const pulseStyles: import("@emotion/react").SerializedStyles;
|
|
@@ -5,6 +5,8 @@ export declare const testIds: {
|
|
|
5
5
|
readonly insertButton: "link-picker-insert-button";
|
|
6
6
|
readonly cancelButton: "link-picker-cancel-button";
|
|
7
7
|
readonly actionButton: "link-picker-action-button";
|
|
8
|
+
/** Feature discovery for action button (css pulse) */
|
|
9
|
+
readonly actionButtonDiscovery: "link-picker-action-button-discovery";
|
|
8
10
|
};
|
|
9
11
|
interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
|
|
10
12
|
/** If the results section appears to be loading, impact whether the submit button is disabled */
|
|
@@ -16,6 +18,7 @@ interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
16
18
|
isEditing?: boolean;
|
|
17
19
|
onCancel?: () => void;
|
|
18
20
|
action?: LinkPickerPluginAction;
|
|
21
|
+
createFeatureDiscovery?: boolean;
|
|
19
22
|
}
|
|
20
|
-
export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
|
|
23
|
+
export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, createFeatureDiscovery, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
|
|
21
24
|
export {};
|
|
@@ -7,6 +7,7 @@ export declare const testIds: {
|
|
|
7
7
|
readonly insertButton: "link-picker-insert-button";
|
|
8
8
|
readonly cancelButton: "link-picker-cancel-button";
|
|
9
9
|
readonly actionButton: "link-picker-action-button";
|
|
10
|
+
readonly actionButtonDiscovery: "link-picker-action-button-discovery";
|
|
10
11
|
readonly tabsLoadingIndicator: string;
|
|
11
12
|
readonly tabList: string;
|
|
12
13
|
readonly tabItem: string;
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
5
|
*
|
|
6
|
-
* @codegen <<SignedSource::
|
|
6
|
+
* @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
|
|
7
7
|
* @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
|
|
8
8
|
*/
|
|
9
9
|
export type PackageMetaDataType = {
|
|
10
|
-
packageName:
|
|
10
|
+
packageName: string;
|
|
11
11
|
packageVersion: string;
|
|
12
12
|
source: 'linkPicker';
|
|
13
13
|
componentName: 'linkPicker';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { type FC } from 'react';
|
|
3
|
+
type FeatureDiscoveryProps = {
|
|
4
|
+
children: React.ReactElement;
|
|
5
|
+
testId?: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* This is a hacky solution to help with the feature discovery.
|
|
9
|
+
* This implementation must be removed once the experiment is completed.
|
|
10
|
+
*
|
|
11
|
+
* Cleanup ticket:
|
|
12
|
+
* https://product-fabric.atlassian.net/browse/EDM-7480
|
|
13
|
+
*/
|
|
14
|
+
declare const FeatureDiscovery: FC<FeatureDiscoveryProps>;
|
|
15
|
+
export default FeatureDiscovery;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const pulseStyles: import("@emotion/react").SerializedStyles;
|
|
@@ -5,6 +5,8 @@ export declare const testIds: {
|
|
|
5
5
|
readonly insertButton: "link-picker-insert-button";
|
|
6
6
|
readonly cancelButton: "link-picker-cancel-button";
|
|
7
7
|
readonly actionButton: "link-picker-action-button";
|
|
8
|
+
/** Feature discovery for action button (css pulse) */
|
|
9
|
+
readonly actionButtonDiscovery: "link-picker-action-button-discovery";
|
|
8
10
|
};
|
|
9
11
|
interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
|
|
10
12
|
/** If the results section appears to be loading, impact whether the submit button is disabled */
|
|
@@ -16,6 +18,7 @@ interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
16
18
|
isEditing?: boolean;
|
|
17
19
|
onCancel?: () => void;
|
|
18
20
|
action?: LinkPickerPluginAction;
|
|
21
|
+
createFeatureDiscovery?: boolean;
|
|
19
22
|
}
|
|
20
|
-
export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
|
|
23
|
+
export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, createFeatureDiscovery, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
|
|
21
24
|
export {};
|
|
@@ -7,6 +7,7 @@ export declare const testIds: {
|
|
|
7
7
|
readonly insertButton: "link-picker-insert-button";
|
|
8
8
|
readonly cancelButton: "link-picker-cancel-button";
|
|
9
9
|
readonly actionButton: "link-picker-action-button";
|
|
10
|
+
readonly actionButtonDiscovery: "link-picker-action-button-discovery";
|
|
10
11
|
readonly tabsLoadingIndicator: string;
|
|
11
12
|
readonly tabList: string;
|
|
12
13
|
readonly tabItem: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/link-picker",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.1",
|
|
4
4
|
"description": "Standalone link picker",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"publishConfig": {
|
|
@@ -42,6 +42,9 @@
|
|
|
42
42
|
},
|
|
43
43
|
"platform.linking-platform.link-picker.fixed-height-search-results": {
|
|
44
44
|
"type": "boolean"
|
|
45
|
+
},
|
|
46
|
+
"platform.linking-platform.link-picker.enable-jira-create": {
|
|
47
|
+
"type": "boolean"
|
|
45
48
|
}
|
|
46
49
|
},
|
|
47
50
|
"scripts": {
|
|
@@ -50,19 +53,19 @@
|
|
|
50
53
|
},
|
|
51
54
|
"dependencies": {
|
|
52
55
|
"@atlaskit/analytics-next": "^9.1.0",
|
|
53
|
-
"@atlaskit/button": "^16.
|
|
56
|
+
"@atlaskit/button": "^16.9.0",
|
|
54
57
|
"@atlaskit/empty-state": "^7.6.0",
|
|
55
58
|
"@atlaskit/form": "^8.11.0",
|
|
56
59
|
"@atlaskit/frontend-utilities": "^2.7.0",
|
|
57
60
|
"@atlaskit/icon": "^21.12.0",
|
|
58
|
-
"@atlaskit/linking-common": "^4.
|
|
61
|
+
"@atlaskit/linking-common": "^4.4.0",
|
|
59
62
|
"@atlaskit/onboarding": "^10.8.2",
|
|
60
63
|
"@atlaskit/platform-feature-flags": "^0.2.1",
|
|
61
64
|
"@atlaskit/spinner": "^15.5.0",
|
|
62
65
|
"@atlaskit/tabs": "^13.4.0",
|
|
63
66
|
"@atlaskit/textfield": "^5.6.0",
|
|
64
67
|
"@atlaskit/theme": "^12.5.0",
|
|
65
|
-
"@atlaskit/tokens": "^1.
|
|
68
|
+
"@atlaskit/tokens": "^1.14.0",
|
|
66
69
|
"@atlaskit/tooltip": "^17.8.0",
|
|
67
70
|
"@atlaskit/ufo": "^0.2.0",
|
|
68
71
|
"@atlaskit/visually-hidden": "^1.2.0",
|
|
@@ -81,10 +84,10 @@
|
|
|
81
84
|
"devDependencies": {
|
|
82
85
|
"@af/analytics-codegen": "^0.1.0",
|
|
83
86
|
"@af/visual-regression": "*",
|
|
84
|
-
"@atlaskit/dropdown-menu": "^11.
|
|
87
|
+
"@atlaskit/dropdown-menu": "^11.11.0",
|
|
85
88
|
"@atlaskit/link-provider": "^1.6.0",
|
|
86
|
-
"@atlaskit/link-test-helpers": "^
|
|
87
|
-
"@atlaskit/linking-common": "^4.
|
|
89
|
+
"@atlaskit/link-test-helpers": "^6.0.0",
|
|
90
|
+
"@atlaskit/linking-common": "^4.4.0",
|
|
88
91
|
"@atlaskit/visual-regression": "*",
|
|
89
92
|
"@atlaskit/webdriver-runner": "*",
|
|
90
93
|
"@atlassian/atlassian-frontend-prettier-config-1.0.0": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.0",
|