@atlaskit/link-picker 1.10.2 → 1.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/common/analytics/experiences.js +62 -0
  3. package/dist/cjs/controllers/session-provider/index.js +61 -0
  4. package/dist/cjs/ui/error-boundary/error-boundary-base/index.js +76 -0
  5. package/dist/cjs/ui/{error-boundary-fallback → error-boundary/error-boundary-fallback}/index.js +2 -2
  6. package/dist/cjs/ui/error-boundary/index.js +33 -81
  7. package/dist/cjs/ui/index.js +6 -9
  8. package/dist/cjs/ui/link-picker/index.js +15 -7
  9. package/dist/cjs/version.json +1 -1
  10. package/dist/es2019/common/analytics/experiences.js +39 -0
  11. package/dist/es2019/controllers/session-provider/index.js +32 -0
  12. package/dist/es2019/ui/error-boundary/error-boundary-base/index.js +37 -0
  13. package/dist/es2019/ui/{error-boundary-fallback → error-boundary/error-boundary-fallback}/index.js +2 -2
  14. package/dist/es2019/ui/error-boundary/index.js +30 -59
  15. package/dist/es2019/ui/index.js +5 -8
  16. package/dist/es2019/ui/link-picker/index.js +13 -7
  17. package/dist/es2019/version.json +1 -1
  18. package/dist/esm/common/analytics/experiences.js +40 -0
  19. package/dist/esm/controllers/session-provider/index.js +38 -0
  20. package/dist/esm/ui/error-boundary/error-boundary-base/index.js +56 -0
  21. package/dist/esm/ui/{error-boundary-fallback → error-boundary/error-boundary-fallback}/index.js +2 -2
  22. package/dist/esm/ui/error-boundary/index.js +30 -79
  23. package/dist/esm/ui/index.js +5 -8
  24. package/dist/esm/ui/link-picker/index.js +13 -7
  25. package/dist/esm/version.json +1 -1
  26. package/dist/types/common/analytics/experiences.d.ts +11 -0
  27. package/dist/types/controllers/session-provider/index.d.ts +10 -0
  28. package/dist/types/ui/error-boundary/error-boundary-base/index.d.ts +18 -0
  29. package/dist/types/ui/error-boundary/error-boundary-fallback/index.d.ts +3 -0
  30. package/dist/types/ui/error-boundary/index.d.ts +4 -24
  31. package/dist/types-ts4.0/analytics.codegen.d.ts +52 -0
  32. package/dist/types-ts4.0/common/analytics/context.d.ts +28 -0
  33. package/dist/types-ts4.0/common/analytics/experiences.d.ts +11 -0
  34. package/dist/types-ts4.0/common/analytics/index.d.ts +2 -0
  35. package/dist/types-ts4.0/common/analytics/input-field-tracking.d.ts +17 -0
  36. package/dist/types-ts4.0/common/constants.d.ts +2 -0
  37. package/dist/types-ts4.0/common/generic-error-svg/index.d.ts +4 -0
  38. package/dist/types-ts4.0/common/generic-error-svg/styled.d.ts +1 -0
  39. package/dist/types-ts4.0/common/utils/url.d.ts +5 -0
  40. package/dist/types-ts4.0/controllers/session-provider/index.d.ts +10 -0
  41. package/dist/types-ts4.0/controllers/use-fix-height/index.d.ts +8 -0
  42. package/dist/types-ts4.0/index.d.ts +3 -0
  43. package/dist/types-ts4.0/services/use-plugins/index.d.ts +14 -0
  44. package/dist/types-ts4.0/services/use-plugins/reducer.d.ts +33 -0
  45. package/dist/types-ts4.0/services/use-plugins/utils.d.ts +18 -0
  46. package/dist/types-ts4.0/services/use-search-query/index.d.ts +3 -0
  47. package/dist/types-ts4.0/ui/error-boundary/error-boundary-base/index.d.ts +18 -0
  48. package/dist/{types/ui → types-ts4.0/ui/error-boundary}/error-boundary-fallback/index.d.ts +0 -0
  49. package/dist/types-ts4.0/ui/error-boundary/index.d.ts +7 -0
  50. package/dist/types-ts4.0/ui/index.d.ts +5 -0
  51. package/dist/types-ts4.0/ui/link-picker/announcer.d.ts +22 -0
  52. package/dist/types-ts4.0/ui/link-picker/browser.d.ts +15 -0
  53. package/dist/types-ts4.0/ui/link-picker/form-footer/index.d.ts +13 -0
  54. package/dist/types-ts4.0/ui/link-picker/form-footer/styled.d.ts +1 -0
  55. package/dist/types-ts4.0/ui/link-picker/index.d.ts +69 -0
  56. package/dist/types-ts4.0/ui/link-picker/link-search-error/index.d.ts +20 -0
  57. package/dist/types-ts4.0/ui/link-picker/link-search-list/index.d.ts +43 -0
  58. package/dist/types-ts4.0/ui/link-picker/link-search-list/link-search-no-results/index.d.ts +19 -0
  59. package/dist/types-ts4.0/ui/link-picker/link-search-list/link-search-no-results/no-results-svg/index.d.ts +4 -0
  60. package/dist/types-ts4.0/ui/link-picker/link-search-list/link-search-no-results/no-results-svg/styled.d.ts +1 -0
  61. package/dist/types-ts4.0/ui/link-picker/link-search-list/link-search-no-results/styled.d.ts +1 -0
  62. package/dist/types-ts4.0/ui/link-picker/link-search-list/styled.d.ts +4 -0
  63. package/dist/types-ts4.0/ui/link-picker/list-item/index.d.ts +17 -0
  64. package/dist/types-ts4.0/ui/link-picker/list-item/styled.d.ts +9 -0
  65. package/dist/types-ts4.0/ui/link-picker/messages.d.ts +85 -0
  66. package/dist/types-ts4.0/ui/link-picker/styled.d.ts +9 -0
  67. package/dist/types-ts4.0/ui/link-picker/text-input/index.d.ts +14 -0
  68. package/dist/types-ts4.0/ui/link-picker/text-input/styled.d.ts +2 -0
  69. package/dist/types-ts4.0/ui/link-picker/transformTimeStamp.d.ts +3 -0
  70. package/dist/types-ts4.0/ui/link-picker/utils.d.ts +10 -0
  71. package/dist/types-ts4.0/ui/loader-fallback/index.d.ts +3 -0
  72. package/dist/types-ts4.0/ui/types.d.ts +57 -0
  73. package/package.json +15 -5
  74. package/report.api.md +45 -65
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/link-picker
2
2
 
3
+ ## 1.10.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`a3358adb9f1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a3358adb9f1) - Basic UFO Instrumentation for LinkPicker
8
+
9
+ ## 1.10.3
10
+
11
+ ### Patch Changes
12
+
13
+ - [`8cc2f888c83`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8cc2f888c83) - Upgrade Typescript from `4.3.5` to `4.5.5`
14
+
3
15
  ## 1.10.2
4
16
 
5
17
  ### Patch Changes
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ufoExperience = exports.succeedUfoExperience = exports.startUfoExperience = exports.failUfoExperience = exports.abortUfoExperience = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _ufo = require("@atlaskit/ufo");
13
+
14
+ var ufoExperience = {
15
+ mounted: 'component-mounted'
16
+ };
17
+ exports.ufoExperience = ufoExperience;
18
+ var ufoExperiences = (0, _defineProperty2.default)({}, ufoExperience.mounted, new _ufo.ConcurrentExperience(ufoExperience.mounted, {
19
+ type: _ufo.ExperienceTypes.Load,
20
+ performanceType: _ufo.ExperiencePerformanceTypes.PageSegmentLoad,
21
+ platform: {
22
+ component: 'link-picker'
23
+ }
24
+ }));
25
+
26
+ var startUfoExperience = function startUfoExperience(experienceName, id, metadata) {
27
+ var experience = ufoExperiences[experienceName].getInstance(id);
28
+ experience.start();
29
+
30
+ if (metadata) {
31
+ experience.addMetadata(metadata);
32
+ }
33
+ };
34
+
35
+ exports.startUfoExperience = startUfoExperience;
36
+
37
+ var succeedUfoExperience = function succeedUfoExperience(experienceName, id, metadata) {
38
+ var experience = ufoExperiences[experienceName].getInstance(id);
39
+ experience.success({
40
+ metadata: metadata
41
+ });
42
+ };
43
+
44
+ exports.succeedUfoExperience = succeedUfoExperience;
45
+
46
+ var failUfoExperience = function failUfoExperience(experienceName, id, metadata) {
47
+ var experience = ufoExperiences[experienceName].getInstance(id);
48
+ experience.failure({
49
+ metadata: metadata
50
+ });
51
+ };
52
+
53
+ exports.failUfoExperience = failUfoExperience;
54
+
55
+ var abortUfoExperience = function abortUfoExperience(experienceName, id, metadata) {
56
+ var experience = ufoExperiences[experienceName].getInstance(id);
57
+ experience.abort({
58
+ metadata: metadata
59
+ });
60
+ };
61
+
62
+ exports.abortUfoExperience = abortUfoExperience;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useLinkPickerSessionId = exports.SessionContext = exports.LinkPickerSessionProvider = exports.INIT_CONTEXT = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _uuid = require("uuid");
13
+
14
+ var _experiences = require("../../common/analytics/experiences");
15
+
16
+ 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); }
17
+
18
+ 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; }
19
+
20
+ var INIT_CONTEXT = 'SESSION_UNINITIALIZED';
21
+ exports.INIT_CONTEXT = INIT_CONTEXT;
22
+ var SessionContext = /*#__PURE__*/(0, _react.createContext)(INIT_CONTEXT);
23
+ exports.SessionContext = SessionContext;
24
+
25
+ var useConstructor = function useConstructor(callback) {
26
+ var hasBeenFired = (0, _react.useRef)(false);
27
+
28
+ if (!hasBeenFired.current) {
29
+ callback();
30
+ hasBeenFired.current = true;
31
+ }
32
+
33
+ return null;
34
+ };
35
+
36
+ var LinkPickerSessionProvider = function LinkPickerSessionProvider(_ref) {
37
+ var children = _ref.children;
38
+
39
+ var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
40
+ sessionId = _useRef.current;
41
+
42
+ (0, _react.useEffect)(function () {
43
+ return function () {
44
+ return (0, _experiences.abortUfoExperience)(_experiences.ufoExperience.mounted, sessionId);
45
+ };
46
+ }, [sessionId]);
47
+ useConstructor(function () {
48
+ return (0, _experiences.startUfoExperience)(_experiences.ufoExperience.mounted, sessionId);
49
+ });
50
+ return /*#__PURE__*/_react.default.createElement(SessionContext.Provider, {
51
+ value: sessionId
52
+ }, children);
53
+ };
54
+
55
+ exports.LinkPickerSessionProvider = LinkPickerSessionProvider;
56
+
57
+ var useLinkPickerSessionId = function useLinkPickerSessionId() {
58
+ return (0, _react.useContext)(SessionContext);
59
+ };
60
+
61
+ exports.useLinkPickerSessionId = useLinkPickerSessionId;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.BaseErrorBoundary = void 0;
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _react = _interopRequireWildcard(require("react"));
23
+
24
+ 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); }
25
+
26
+ 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; }
27
+
28
+ 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); }; }
29
+
30
+ 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; } }
31
+
32
+ // eslint-disable-next-line @repo/internal/react/no-class-components
33
+ var BaseErrorBoundary = /*#__PURE__*/function (_Component) {
34
+ (0, _inherits2.default)(BaseErrorBoundary, _Component);
35
+
36
+ var _super = _createSuper(BaseErrorBoundary);
37
+
38
+ function BaseErrorBoundary(props) {
39
+ var _this;
40
+
41
+ (0, _classCallCheck2.default)(this, BaseErrorBoundary);
42
+ _this = _super.call(this, props);
43
+ _this.state = {
44
+ hasError: false
45
+ };
46
+ return _this;
47
+ }
48
+
49
+ (0, _createClass2.default)(BaseErrorBoundary, [{
50
+ key: "componentDidCatch",
51
+ value: function componentDidCatch(error, info) {
52
+ var onError = this.props.onError;
53
+ onError && onError(error, info);
54
+ this.setState({
55
+ hasError: true
56
+ });
57
+ }
58
+ }, {
59
+ key: "render",
60
+ value: function render() {
61
+ var _this$props = this.props,
62
+ children = _this$props.children,
63
+ ErrorComponent = _this$props.ErrorComponent;
64
+ var hasError = this.state.hasError;
65
+
66
+ if (hasError && ErrorComponent) {
67
+ return /*#__PURE__*/_react.default.createElement(ErrorComponent, null);
68
+ }
69
+
70
+ return children;
71
+ }
72
+ }]);
73
+ return BaseErrorBoundary;
74
+ }(_react.Component);
75
+
76
+ exports.BaseErrorBoundary = BaseErrorBoundary;
@@ -13,9 +13,9 @@ var _emptyState = _interopRequireDefault(require("@atlaskit/empty-state"));
13
13
 
14
14
  var _reactIntlNext = require("react-intl-next");
15
15
 
16
- var _genericErrorSvg = _interopRequireDefault(require("../../common/generic-error-svg"));
16
+ var _genericErrorSvg = _interopRequireDefault(require("../../../common/generic-error-svg"));
17
17
 
18
- var _styled = require("../link-picker/styled");
18
+ var _styled = require("../../link-picker/styled");
19
19
 
20
20
  /** @jsx jsx */
21
21
  var messages = (0, _reactIntlNext.defineMessages)({
@@ -7,98 +7,50 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = exports.BaseErrorBoundary = void 0;
10
+ exports.default = void 0;
11
11
 
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+ var _react = _interopRequireWildcard(require("react"));
13
13
 
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+ var _analyticsNext = require("@atlaskit/analytics-next");
15
15
 
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
16
+ var _analytics = _interopRequireDefault(require("../../analytics.codegen"));
17
17
 
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
18
+ var _constants = require("../../common/constants");
19
19
 
20
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
20
+ var _experiences = require("../../common/analytics/experiences");
21
21
 
22
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
22
+ var _sessionProvider = require("../../controllers/session-provider");
23
23
 
24
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
24
+ var _errorBoundaryFallback = require("./error-boundary-fallback");
25
25
 
26
- var _react = _interopRequireWildcard(require("react"));
27
-
28
- var _analyticsNext = require("@atlaskit/analytics-next");
29
-
30
- var _analytics = _interopRequireDefault(require("../../analytics.codegen"));
26
+ var _errorBoundaryBase = require("./error-boundary-base");
31
27
 
32
28
  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); }
33
29
 
34
30
  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; }
35
31
 
36
- 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); }; }
37
-
38
- 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; } }
39
-
40
- // eslint-disable-next-line @repo/internal/react/no-class-components
41
- var BaseErrorBoundary = /*#__PURE__*/function (_Component) {
42
- (0, _inherits2.default)(BaseErrorBoundary, _Component);
43
-
44
- var _super = _createSuper(BaseErrorBoundary);
45
-
46
- function BaseErrorBoundary(props) {
47
- var _this;
48
-
49
- (0, _classCallCheck2.default)(this, BaseErrorBoundary);
50
- _this = _super.call(this, props);
51
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireAnalytics", function (analyticsErrorPayload) {
52
- var _window, _window$navigator, _analyticsErrorPayloa, _analyticsErrorPayloa2;
53
-
54
- var _this$props = _this.props,
55
- createAnalyticsEvent = _this$props.createAnalyticsEvent,
56
- channel = _this$props.channel;
57
- createAnalyticsEvent((0, _analytics.default)('ui.linkPicker.unhandledErrorCaught', {
58
- browserInfo: ((_window = window) === null || _window === void 0 ? void 0 : (_window$navigator = _window.navigator) === null || _window$navigator === void 0 ? void 0 : _window$navigator.userAgent) || 'unknown',
59
- error: analyticsErrorPayload.error.toString(),
60
- componentStack: (_analyticsErrorPayloa = (_analyticsErrorPayloa2 = analyticsErrorPayload.info) === null || _analyticsErrorPayloa2 === void 0 ? void 0 : _analyticsErrorPayloa2.componentStack) !== null && _analyticsErrorPayloa !== void 0 ? _analyticsErrorPayloa : ''
61
- })).fire(channel);
62
- });
63
- _this.state = {
64
- hasError: false
65
- };
66
- return _this;
67
- }
68
-
69
- (0, _createClass2.default)(BaseErrorBoundary, [{
70
- key: "componentDidCatch",
71
- value: function componentDidCatch(error, info) {
72
- var onError = this.props.onError;
73
- var payload = {
74
- error: error,
75
- info: info
76
- };
77
- this.fireAnalytics(payload);
78
- onError && onError(error, info);
79
- this.setState({
80
- hasError: true
81
- });
82
- }
83
- }, {
84
- key: "render",
85
- value: function render() {
86
- var _this$props2 = this.props,
87
- children = _this$props2.children,
88
- ErrorComponent = _this$props2.ErrorComponent;
89
- var hasError = this.state.hasError;
90
-
91
- if (hasError && ErrorComponent) {
92
- return /*#__PURE__*/_react.default.createElement(ErrorComponent, null);
93
- }
94
-
95
- return children;
96
- }
97
- }]);
98
- return BaseErrorBoundary;
99
- }(_react.Component);
100
-
101
- exports.BaseErrorBoundary = BaseErrorBoundary;
102
- var ErrorBoundary = (0, _analyticsNext.withAnalyticsEvents)()(BaseErrorBoundary);
103
- var _default = ErrorBoundary;
32
+ function ErrorBoundary(_ref) {
33
+ var children = _ref.children,
34
+ createAnalyticsEvent = _ref.createAnalyticsEvent;
35
+ var linkPickerSessionId = (0, _sessionProvider.useLinkPickerSessionId)();
36
+ var handleError = (0, _react.useCallback)(function (error, info) {
37
+ var _window, _window$navigator, _info$componentStack;
38
+
39
+ // Fire Analytics event
40
+ createAnalyticsEvent((0, _analytics.default)('ui.linkPicker.unhandledErrorCaught', {
41
+ browserInfo: ((_window = window) === null || _window === void 0 ? void 0 : (_window$navigator = _window.navigator) === null || _window$navigator === void 0 ? void 0 : _window$navigator.userAgent) || 'unknown',
42
+ error: error.toString(),
43
+ componentStack: (_info$componentStack = info === null || info === void 0 ? void 0 : info.componentStack) !== null && _info$componentStack !== void 0 ? _info$componentStack : ''
44
+ })).fire(_constants.ANALYTICS_CHANNEL); // Fire UFO failed experience
45
+
46
+ (0, _experiences.failUfoExperience)(_experiences.ufoExperience.mounted, linkPickerSessionId);
47
+ }, [createAnalyticsEvent, linkPickerSessionId]);
48
+ return /*#__PURE__*/_react.default.createElement(_errorBoundaryBase.BaseErrorBoundary, {
49
+ onError: handleError,
50
+ ErrorComponent: _errorBoundaryFallback.ErrorBoundaryFallback
51
+ }, children);
52
+ }
53
+
54
+ var _default = (0, _analyticsNext.withAnalyticsEvents)()(ErrorBoundary);
55
+
104
56
  exports.default = _default;
@@ -9,22 +9,22 @@ exports.PACKAGE_DATA = exports.ComposedLinkPicker = void 0;
9
9
 
10
10
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
11
 
12
+ var _analyticsNext = require("@atlaskit/analytics-next");
13
+
12
14
  var _react = _interopRequireWildcard(require("react"));
13
15
 
14
16
  var _reactLooselyLazy = require("react-loosely-lazy");
15
17
 
16
- var _analyticsNext = require("@atlaskit/analytics-next");
17
-
18
18
  var _constants = require("../common/constants");
19
19
 
20
20
  var _version = require("../version.json");
21
21
 
22
22
  var _errorBoundary = _interopRequireDefault(require("./error-boundary"));
23
23
 
24
- var _errorBoundaryFallback = require("./error-boundary-fallback");
25
-
26
24
  var _loaderFallback = require("./loader-fallback");
27
25
 
26
+ var _sessionProvider = require("../controllers/session-provider");
27
+
28
28
  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); }
29
29
 
30
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2.default)(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; }
@@ -44,11 +44,8 @@ var LazyLinkPicker = (0, _reactLooselyLazy.lazyForPaint)(function () {
44
44
  var ComposedLinkPicker = /*#__PURE__*/(0, _react.memo)(function (props) {
45
45
  return /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsContext, {
46
46
  data: PACKAGE_DATA
47
- }, /*#__PURE__*/_react.default.createElement(_errorBoundary.default, {
48
- channel: _constants.ANALYTICS_CHANNEL,
49
- ErrorComponent: _errorBoundaryFallback.ErrorBoundaryFallback
50
- }, /*#__PURE__*/_react.default.createElement(_reactLooselyLazy.LazySuspense, {
47
+ }, /*#__PURE__*/_react.default.createElement(_sessionProvider.LinkPickerSessionProvider, null, /*#__PURE__*/_react.default.createElement(_errorBoundary.default, null, /*#__PURE__*/_react.default.createElement(_reactLooselyLazy.LazySuspense, {
51
48
  fallback: _loaderFallback.LoaderFallback
52
- }, /*#__PURE__*/_react.default.createElement(LazyLinkPicker, props))));
49
+ }, /*#__PURE__*/_react.default.createElement(LazyLinkPicker, props)))));
53
50
  });
54
51
  exports.ComposedLinkPicker = ComposedLinkPicker;
@@ -61,6 +61,10 @@ var _formFooter = _interopRequireWildcard(require("./form-footer"));
61
61
 
62
62
  var _utils = require("./utils");
63
63
 
64
+ var _experiences = require("../../common/analytics/experiences");
65
+
66
+ var _sessionProvider = require("../../controllers/session-provider");
67
+
64
68
  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); }
65
69
 
66
70
  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; }
@@ -173,6 +177,10 @@ function LinkPicker(_ref) {
173
177
  trackAttribute = _useLinkPickerAnalyti.trackAttribute,
174
178
  getAttributes = _useLinkPickerAnalyti.getAttributes;
175
179
 
180
+ var linkPickerSessionId = (0, _sessionProvider.useLinkPickerSessionId)();
181
+ (0, _react.useLayoutEffect)(function () {
182
+ (0, _experiences.succeedUfoExperience)(_experiences.ufoExperience.mounted, linkPickerSessionId);
183
+ }, [linkPickerSessionId]);
176
184
  (0, _react.useEffect)(function () {
177
185
  // Anything in here is fired on component mount.
178
186
  var event = createAnalyticsEvent((0, _analytics.default)('ui.inlineDialog.viewed.linkPicker', {}));
@@ -201,9 +209,9 @@ function LinkPicker(_ref) {
201
209
  });
202
210
  }, []);
203
211
  var handleKeyDown = (0, _react.useCallback)(function (event) {
204
- var keyCode = event.keyCode;
205
- var KEY_CODE_ARROW_DOWN = 40;
206
- var KEY_CODE_ARROW_UP = 38;
212
+ var key = event.key;
213
+ var KEY_ARROW_DOWN = 'ArrowDown';
214
+ var KEY_ARROW_UP = 'ArrowUp';
207
215
 
208
216
  if (!items || !items.length) {
209
217
  return;
@@ -211,14 +219,14 @@ function LinkPicker(_ref) {
211
219
 
212
220
  var updatedIndex = activeIndex;
213
221
 
214
- switch (keyCode) {
215
- case KEY_CODE_ARROW_DOWN:
222
+ switch (key) {
223
+ case KEY_ARROW_DOWN:
216
224
  // down
217
225
  event.preventDefault();
218
226
  updatedIndex = (activeIndex + 1) % items.length;
219
227
  break;
220
228
 
221
- case KEY_CODE_ARROW_UP:
229
+ case KEY_ARROW_UP:
222
230
  // up
223
231
  event.preventDefault();
224
232
  updatedIndex = activeIndex > 0 ? activeIndex - 1 : items.length - 1;
@@ -227,7 +235,7 @@ function LinkPicker(_ref) {
227
235
 
228
236
  var item = items[updatedIndex];
229
237
 
230
- if ([KEY_CODE_ARROW_DOWN, KEY_CODE_ARROW_UP].includes(keyCode) && item) {
238
+ if ([KEY_ARROW_DOWN, KEY_ARROW_UP].includes(key) && item) {
231
239
  /**
232
240
  * Manually track that the url has been updated using searchResult method
233
241
  */
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-picker",
3
- "version": "1.10.2",
3
+ "version": "1.10.4",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1,39 @@
1
+ import { ConcurrentExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
2
+ export const ufoExperience = {
3
+ mounted: 'component-mounted'
4
+ };
5
+ const ufoExperiences = {
6
+ [ufoExperience.mounted]: new ConcurrentExperience(ufoExperience.mounted, {
7
+ type: ExperienceTypes.Load,
8
+ performanceType: ExperiencePerformanceTypes.PageSegmentLoad,
9
+ platform: {
10
+ component: 'link-picker'
11
+ }
12
+ })
13
+ };
14
+ export const startUfoExperience = (experienceName, id, metadata) => {
15
+ const experience = ufoExperiences[experienceName].getInstance(id);
16
+ experience.start();
17
+
18
+ if (metadata) {
19
+ experience.addMetadata(metadata);
20
+ }
21
+ };
22
+ export const succeedUfoExperience = (experienceName, id, metadata) => {
23
+ const experience = ufoExperiences[experienceName].getInstance(id);
24
+ experience.success({
25
+ metadata
26
+ });
27
+ };
28
+ export const failUfoExperience = (experienceName, id, metadata) => {
29
+ const experience = ufoExperiences[experienceName].getInstance(id);
30
+ experience.failure({
31
+ metadata
32
+ });
33
+ };
34
+ export const abortUfoExperience = (experienceName, id, metadata) => {
35
+ const experience = ufoExperiences[experienceName].getInstance(id);
36
+ experience.abort({
37
+ metadata
38
+ });
39
+ };
@@ -0,0 +1,32 @@
1
+ import React, { createContext, useContext, useEffect, useRef } from 'react';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { abortUfoExperience, startUfoExperience, ufoExperience } from '../../common/analytics/experiences';
4
+ export const INIT_CONTEXT = 'SESSION_UNINITIALIZED';
5
+ export const SessionContext = /*#__PURE__*/createContext(INIT_CONTEXT);
6
+
7
+ const useConstructor = callback => {
8
+ const hasBeenFired = useRef(false);
9
+
10
+ if (!hasBeenFired.current) {
11
+ callback();
12
+ hasBeenFired.current = true;
13
+ }
14
+
15
+ return null;
16
+ };
17
+
18
+ export const LinkPickerSessionProvider = ({
19
+ children
20
+ }) => {
21
+ const {
22
+ current: sessionId
23
+ } = useRef(uuidv4());
24
+ useEffect(() => {
25
+ return () => abortUfoExperience(ufoExperience.mounted, sessionId);
26
+ }, [sessionId]);
27
+ useConstructor(() => startUfoExperience(ufoExperience.mounted, sessionId));
28
+ return /*#__PURE__*/React.createElement(SessionContext.Provider, {
29
+ value: sessionId
30
+ }, children);
31
+ };
32
+ export const useLinkPickerSessionId = () => useContext(SessionContext);
@@ -0,0 +1,37 @@
1
+ import React, { Component } from 'react';
2
+ // eslint-disable-next-line @repo/internal/react/no-class-components
3
+ export class BaseErrorBoundary extends Component {
4
+ constructor(props) {
5
+ super(props);
6
+ this.state = {
7
+ hasError: false
8
+ };
9
+ }
10
+
11
+ componentDidCatch(error, info) {
12
+ const {
13
+ onError
14
+ } = this.props;
15
+ onError && onError(error, info);
16
+ this.setState({
17
+ hasError: true
18
+ });
19
+ }
20
+
21
+ render() {
22
+ const {
23
+ children,
24
+ ErrorComponent
25
+ } = this.props;
26
+ const {
27
+ hasError
28
+ } = this.state;
29
+
30
+ if (hasError && ErrorComponent) {
31
+ return /*#__PURE__*/React.createElement(ErrorComponent, null);
32
+ }
33
+
34
+ return children;
35
+ }
36
+
37
+ }
@@ -2,8 +2,8 @@
2
2
  import { jsx } from '@emotion/react';
3
3
  import EmptyState from '@atlaskit/empty-state';
4
4
  import { defineMessages, useIntl } from 'react-intl-next';
5
- import GenericErrorSVG from '../../common/generic-error-svg';
6
- import { rootContainerStyles } from '../link-picker/styled';
5
+ import GenericErrorSVG from '../../../common/generic-error-svg';
6
+ import { rootContainerStyles } from '../../link-picker/styled';
7
7
  const messages = defineMessages({
8
8
  heading: {
9
9
  defaultMessage: 'Something went wrong!',