@atlaskit/link-create 0.3.0 → 0.3.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 +6 -0
- package/analytics.spec.yaml +85 -0
- package/dist/cjs/common/constants.js +10 -0
- package/dist/cjs/common/utils/analytics/analytics.codegen.js +27 -0
- package/dist/cjs/common/utils/analytics/context.js +103 -0
- package/dist/cjs/common/utils/analytics/index.js +18 -0
- package/dist/cjs/controllers/callback-context/main.js +17 -3
- package/dist/cjs/ui/create-form/main.js +18 -8
- package/dist/cjs/ui/error-boundary/index.js +22 -2
- package/dist/cjs/ui/main.js +51 -15
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/common/constants.js +2 -0
- package/dist/es2019/common/utils/analytics/analytics.codegen.js +20 -0
- package/dist/es2019/common/utils/analytics/context.js +86 -0
- package/dist/es2019/common/utils/analytics/index.js +1 -0
- package/dist/es2019/controllers/callback-context/main.js +18 -2
- package/dist/es2019/ui/create-form/main.js +15 -4
- package/dist/es2019/ui/error-boundary/index.js +20 -2
- package/dist/es2019/ui/main.js +53 -16
- package/dist/es2019/version.json +1 -1
- package/dist/esm/common/constants.js +2 -0
- package/dist/esm/common/utils/analytics/analytics.codegen.js +20 -0
- package/dist/esm/common/utils/analytics/context.js +91 -0
- package/dist/esm/common/utils/analytics/index.js +1 -0
- package/dist/esm/controllers/callback-context/main.js +16 -3
- package/dist/esm/ui/create-form/main.js +18 -8
- package/dist/esm/ui/error-boundary/index.js +19 -2
- package/dist/esm/ui/main.js +49 -15
- package/dist/esm/version.json +1 -1
- package/dist/types/common/constants.d.ts +2 -0
- package/dist/types/common/types.d.ts +80 -0
- package/dist/types/common/utils/analytics/analytics.codegen.d.ts +48 -0
- package/dist/types/common/utils/analytics/context.d.ts +29 -0
- package/dist/types/common/utils/analytics/index.d.ts +1 -0
- package/dist/types/controllers/callback-context/main.d.ts +5 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/ui/error-boundary/index.d.ts +2 -6
- package/dist/types/ui/group-selection/types.d.ts +1 -14
- package/dist/types/ui/main.d.ts +5 -3
- package/dist/types/ui/types.d.ts +0 -61
- package/package.json +7 -2
- package/report.api.md +12 -7
- package/tmp/api-report-tmp.d.ts +10 -5
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
common:
|
|
2
|
+
source: linkCreate
|
|
3
|
+
product: linkingPlatform
|
|
4
|
+
|
|
5
|
+
context:
|
|
6
|
+
PackageMetaData: &PackageMetaDataContext
|
|
7
|
+
packageName:
|
|
8
|
+
type: ['@atlaskit/link-create']
|
|
9
|
+
description: name of the package the event was fired from
|
|
10
|
+
packageVersion:
|
|
11
|
+
type: string
|
|
12
|
+
description: version of the package the event was fired from
|
|
13
|
+
source:
|
|
14
|
+
type: ['linkCreate']
|
|
15
|
+
description: the name of the ui source the event originated from (linkCreate)
|
|
16
|
+
componentName:
|
|
17
|
+
type: ['linkCreate']
|
|
18
|
+
description: the name of the component the event originated from (linkCreate)
|
|
19
|
+
LinkCreateAnalyticsContext: &LinkCreateAnalyticContext
|
|
20
|
+
triggeredFrom:
|
|
21
|
+
type: string
|
|
22
|
+
description: where the link create form was triggered from
|
|
23
|
+
objectName:
|
|
24
|
+
type: string
|
|
25
|
+
description: the object that the creation form is for
|
|
26
|
+
appearance:
|
|
27
|
+
type: ['modal', 'popup']
|
|
28
|
+
description: how the link create form was presented
|
|
29
|
+
|
|
30
|
+
events:
|
|
31
|
+
- linkCreateScreen viewed:
|
|
32
|
+
type: screen
|
|
33
|
+
description: fired when the link create is successfully submitted
|
|
34
|
+
attributes:
|
|
35
|
+
<<: *PackageMetaDataContext
|
|
36
|
+
<<: *LinkCreateAnalyticContext
|
|
37
|
+
|
|
38
|
+
- button clicked (create):
|
|
39
|
+
type: ui
|
|
40
|
+
description: fired when the create button is clicked
|
|
41
|
+
attributes:
|
|
42
|
+
<<: *PackageMetaDataContext
|
|
43
|
+
<<: *LinkCreateAnalyticContext
|
|
44
|
+
|
|
45
|
+
- button clicked (cancel):
|
|
46
|
+
type: ui
|
|
47
|
+
description: fired when the create button is clicked
|
|
48
|
+
attributes:
|
|
49
|
+
<<: *PackageMetaDataContext
|
|
50
|
+
<<: *LinkCreateAnalyticContext
|
|
51
|
+
|
|
52
|
+
- linkCreateScreen closed:
|
|
53
|
+
type: screen
|
|
54
|
+
description: fired when the link create component is unmounted/dismissed for any reason
|
|
55
|
+
attributes:
|
|
56
|
+
<<: *PackageMetaDataContext
|
|
57
|
+
<<: *LinkCreateAnalyticContext
|
|
58
|
+
|
|
59
|
+
- linkCreate unhandledErrorCaught:
|
|
60
|
+
type: operational
|
|
61
|
+
description: fired when the link create root error boundary catches an error
|
|
62
|
+
attributes:
|
|
63
|
+
<<: *PackageMetaDataContext
|
|
64
|
+
browserInfo:
|
|
65
|
+
type: string
|
|
66
|
+
description: the window navigator userAgent if it exists, else unknown
|
|
67
|
+
error:
|
|
68
|
+
type: string
|
|
69
|
+
description: the error that was caught by the error boundary
|
|
70
|
+
componentStack:
|
|
71
|
+
type: string
|
|
72
|
+
description: componentStack from componentDidCatch info
|
|
73
|
+
required: false
|
|
74
|
+
|
|
75
|
+
- object created (linkCreate):
|
|
76
|
+
type: track
|
|
77
|
+
description: fired when the object was successfully created
|
|
78
|
+
attributes:
|
|
79
|
+
<<: *PackageMetaDataContext
|
|
80
|
+
objectId:
|
|
81
|
+
type: string
|
|
82
|
+
description: the id of created content
|
|
83
|
+
objectType:
|
|
84
|
+
type: string
|
|
85
|
+
description: the type of created content
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.COMPONENT_NAME = exports.ANALYTICS_CHANNEL = void 0;
|
|
7
|
+
var ANALYTICS_CHANNEL = 'media';
|
|
8
|
+
exports.ANALYTICS_CHANNEL = ANALYTICS_CHANNEL;
|
|
9
|
+
var COMPONENT_NAME = 'linkCreate';
|
|
10
|
+
exports.COMPONENT_NAME = COMPONENT_NAME;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
|
|
9
|
+
*
|
|
10
|
+
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
11
|
+
*
|
|
12
|
+
* @codegen <<SignedSource::6d7803f5c035dc3cde1be03caa91eb04>>
|
|
13
|
+
* @codegenCommand yarn workspace @atlaskit/link-create run codegen-analytics
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
function createEventPayload(eventKey, attributes) {
|
|
17
|
+
var event = eventKey.split('.');
|
|
18
|
+
return {
|
|
19
|
+
eventType: event[0],
|
|
20
|
+
actionSubject: event[1],
|
|
21
|
+
action: event[2],
|
|
22
|
+
actionSubjectId: event[3],
|
|
23
|
+
attributes: attributes
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
var _default = createEventPayload;
|
|
27
|
+
exports.default = _default;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useLinkCreateAnalytics = void 0;
|
|
9
|
+
exports.withLinkCreateAnalyticsContext = withLinkCreateAnalyticsContext;
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
14
|
+
var _constants = require("../../constants");
|
|
15
|
+
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); }
|
|
16
|
+
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; }
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
|
+
var UNKNOWN = 'unknown';
|
|
20
|
+
var DEFAULT_CONTEXT_ATTRIBUTES = {
|
|
21
|
+
triggeredFrom: UNKNOWN,
|
|
22
|
+
objectName: UNKNOWN,
|
|
23
|
+
appearance: 'modal'
|
|
24
|
+
};
|
|
25
|
+
var LinkCreateAnalyticsContext = /*#__PURE__*/_react.default.createContext({
|
|
26
|
+
trackAttribute: function trackAttribute() {},
|
|
27
|
+
trackAttributes: function trackAttributes() {},
|
|
28
|
+
getAttributes: function getAttributes() {
|
|
29
|
+
return DEFAULT_CONTEXT_ATTRIBUTES;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
var LinkCreateAnalytics = function LinkCreateAnalytics(_ref) {
|
|
33
|
+
var initialContext = _ref.initialContext,
|
|
34
|
+
children = _ref.children;
|
|
35
|
+
var dataRef = (0, _react.useRef)(_objectSpread(_objectSpread({}, DEFAULT_CONTEXT_ATTRIBUTES), initialContext));
|
|
36
|
+
var methods = (0, _react.useMemo)(function () {
|
|
37
|
+
return {
|
|
38
|
+
trackAttribute: function trackAttribute(key, value) {
|
|
39
|
+
dataRef.current[key] = value;
|
|
40
|
+
},
|
|
41
|
+
trackAttributes: function trackAttributes(attributes) {
|
|
42
|
+
dataRef.current = _objectSpread(_objectSpread({}, dataRef.current), attributes);
|
|
43
|
+
},
|
|
44
|
+
getAttributes: function getAttributes() {
|
|
45
|
+
return dataRef.current;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}, []);
|
|
49
|
+
return /*#__PURE__*/_react.default.createElement(LinkCreateAnalyticsContext.Provider, {
|
|
50
|
+
value: methods
|
|
51
|
+
}, children);
|
|
52
|
+
};
|
|
53
|
+
var contextAttributesFromInitialProps = function contextAttributesFromInitialProps(props) {
|
|
54
|
+
return {
|
|
55
|
+
objectName: props.entityKey,
|
|
56
|
+
triggeredFrom: props.triggeredFrom
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Hook that exposes the context-level attribute getters and setters.
|
|
62
|
+
*/
|
|
63
|
+
var useLinkCreateAnalytics = function useLinkCreateAnalytics() {
|
|
64
|
+
return (0, _react.useContext)(LinkCreateAnalyticsContext);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Wrap component in "attributes" context store and initialise the initial context attributes from props.
|
|
69
|
+
*/
|
|
70
|
+
exports.useLinkCreateAnalytics = useLinkCreateAnalytics;
|
|
71
|
+
function withLinkCreateAnalytics(WrappedComponent) {
|
|
72
|
+
return function (props) {
|
|
73
|
+
var _useState = (0, _react.useState)(function () {
|
|
74
|
+
return contextAttributesFromInitialProps(props);
|
|
75
|
+
}),
|
|
76
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 1),
|
|
77
|
+
initialContext = _useState2[0];
|
|
78
|
+
return /*#__PURE__*/_react.default.createElement(LinkCreateAnalytics, {
|
|
79
|
+
initialContext: initialContext
|
|
80
|
+
}, /*#__PURE__*/_react.default.createElement(WrappedComponent, props));
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Wraps a component with the analytics context + listener to update events with contextual-level attributes.
|
|
86
|
+
* Should be implemented once at the root of the link create.
|
|
87
|
+
*/
|
|
88
|
+
function withLinkCreateAnalyticsContext(WrappedComponent) {
|
|
89
|
+
return withLinkCreateAnalytics(function (props) {
|
|
90
|
+
var _useLinkCreateAnalyti = useLinkCreateAnalytics(),
|
|
91
|
+
getAttributes = _useLinkCreateAnalyti.getAttributes;
|
|
92
|
+
var onEvent = (0, _react.useCallback)(function (event) {
|
|
93
|
+
var _event$payload$attrib;
|
|
94
|
+
event.update({
|
|
95
|
+
attributes: _objectSpread(_objectSpread({}, getAttributes()), (_event$payload$attrib = event.payload.attributes) !== null && _event$payload$attrib !== void 0 ? _event$payload$attrib : {})
|
|
96
|
+
});
|
|
97
|
+
}, [getAttributes]);
|
|
98
|
+
return /*#__PURE__*/_react.default.createElement(_analyticsNext.AnalyticsListener, {
|
|
99
|
+
channel: _constants.ANALYTICS_CHANNEL,
|
|
100
|
+
onEvent: onEvent
|
|
101
|
+
}, /*#__PURE__*/_react.default.createElement(WrappedComponent, props));
|
|
102
|
+
});
|
|
103
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useLinkCreateAnalytics", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _context.useLinkCreateAnalytics;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "withLinkCreateAnalyticsContext", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _context.withLinkCreateAnalyticsContext;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var _context = require("./context");
|
|
@@ -1,26 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.useLinkCreateCallback = exports.LinkCreateCallbackProvider = void 0;
|
|
8
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
11
|
+
var _constants = require("../../common/constants");
|
|
12
|
+
var _analytics = _interopRequireDefault(require("../../common/utils/analytics/analytics.codegen"));
|
|
9
13
|
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); }
|
|
10
14
|
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; }
|
|
11
15
|
var LinkCreateCallbackContext = /*#__PURE__*/_react.default.createContext({});
|
|
12
16
|
var LinkCreateCallbackProvider = function LinkCreateCallbackProvider(_ref) {
|
|
13
17
|
var children = _ref.children,
|
|
14
|
-
|
|
18
|
+
_onCreate = _ref.onCreate,
|
|
15
19
|
onFailure = _ref.onFailure,
|
|
16
20
|
onCancel = _ref.onCancel;
|
|
21
|
+
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
22
|
+
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
17
23
|
var value = (0, _react.useMemo)(function () {
|
|
18
24
|
return {
|
|
19
|
-
onCreate: onCreate
|
|
25
|
+
onCreate: function onCreate(result) {
|
|
26
|
+
var objectId = result.objectId,
|
|
27
|
+
objectType = result.objectType;
|
|
28
|
+
createAnalyticsEvent((0, _analytics.default)('track.object.created.linkCreate', {
|
|
29
|
+
objectId: objectId,
|
|
30
|
+
objectType: objectType
|
|
31
|
+
})).fire(_constants.ANALYTICS_CHANNEL);
|
|
32
|
+
_onCreate && _onCreate(result);
|
|
33
|
+
},
|
|
20
34
|
onFailure: onFailure,
|
|
21
35
|
onCancel: onCancel
|
|
22
36
|
};
|
|
23
|
-
}, [
|
|
37
|
+
}, [onFailure, onCancel, createAnalyticsEvent, _onCreate]);
|
|
24
38
|
return /*#__PURE__*/_react.default.createElement(LinkCreateCallbackContext.Provider, {
|
|
25
39
|
value: value
|
|
26
40
|
}, children);
|
|
@@ -8,11 +8,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.CreateForm = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
-
var _react =
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _react2 = require("@emotion/react");
|
|
13
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
13
14
|
var _loadingButton = _interopRequireDefault(require("@atlaskit/button/loading-button"));
|
|
14
15
|
var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
|
|
15
16
|
var _form = _interopRequireWildcard(require("@atlaskit/form"));
|
|
17
|
+
var _constants = require("../../common/constants");
|
|
18
|
+
var _analytics = _interopRequireDefault(require("../../common/utils/analytics/analytics.codegen"));
|
|
16
19
|
var _formContext = require("../../controllers/form-context");
|
|
17
20
|
var _styled = require("./styled");
|
|
18
21
|
var _utils = require("./utils");
|
|
@@ -29,38 +32,45 @@ var CreateFormWithoutContext = function CreateFormWithoutContext(_ref) {
|
|
|
29
32
|
testId = _ref.testId,
|
|
30
33
|
onCancel = _ref.onCancel,
|
|
31
34
|
onSubmit = _ref.onSubmit;
|
|
35
|
+
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
36
|
+
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
32
37
|
var _useFormContext = (0, _formContext.useFormContext)(),
|
|
33
38
|
getValidators = _useFormContext.getValidators;
|
|
34
|
-
var handleSubmit = /*#__PURE__*/function () {
|
|
39
|
+
var handleSubmit = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
35
40
|
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data) {
|
|
36
41
|
var validators, errors;
|
|
37
42
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
38
43
|
while (1) {
|
|
39
44
|
switch (_context.prev = _context.next) {
|
|
40
45
|
case 0:
|
|
46
|
+
createAnalyticsEvent((0, _analytics.default)('ui.button.clicked.create', {})).fire(_constants.ANALYTICS_CHANNEL);
|
|
41
47
|
validators = getValidators();
|
|
42
48
|
errors = (0, _utils.validateFormData)({
|
|
43
49
|
data: data,
|
|
44
50
|
validators: validators
|
|
45
51
|
});
|
|
46
52
|
if (!(Object.keys(errors).length !== 0)) {
|
|
47
|
-
_context.next =
|
|
53
|
+
_context.next = 5;
|
|
48
54
|
break;
|
|
49
55
|
}
|
|
50
56
|
return _context.abrupt("return", errors);
|
|
51
|
-
case 4:
|
|
52
|
-
onSubmit(data);
|
|
53
57
|
case 5:
|
|
58
|
+
onSubmit(data);
|
|
59
|
+
case 6:
|
|
54
60
|
case "end":
|
|
55
61
|
return _context.stop();
|
|
56
62
|
}
|
|
57
63
|
}
|
|
58
64
|
}, _callee);
|
|
59
65
|
}));
|
|
60
|
-
return function
|
|
66
|
+
return function (_x) {
|
|
61
67
|
return _ref2.apply(this, arguments);
|
|
62
68
|
};
|
|
63
|
-
}();
|
|
69
|
+
}(), [createAnalyticsEvent, getValidators, onSubmit]);
|
|
70
|
+
var handleCancel = (0, _react.useCallback)(function () {
|
|
71
|
+
createAnalyticsEvent((0, _analytics.default)('ui.button.clicked.cancel', {})).fire(_constants.ANALYTICS_CHANNEL);
|
|
72
|
+
onCancel && onCancel();
|
|
73
|
+
}, [createAnalyticsEvent, onCancel]);
|
|
64
74
|
return (0, _react2.jsx)(_form.default, {
|
|
65
75
|
onSubmit: handleSubmit
|
|
66
76
|
}, function (_ref3) {
|
|
@@ -74,7 +84,7 @@ var CreateFormWithoutContext = function CreateFormWithoutContext(_ref) {
|
|
|
74
84
|
css: _styled.formStyles
|
|
75
85
|
}), (0, _react2.jsx)(_form.FormSection, null, children), (0, _react2.jsx)(_form.FormFooter, null, (0, _react2.jsx)(_standardButton.default, {
|
|
76
86
|
appearance: "subtle",
|
|
77
|
-
onClick:
|
|
87
|
+
onClick: handleCancel,
|
|
78
88
|
testId: 'cancel-button'
|
|
79
89
|
}, "Cancel"), (0, _react2.jsx)(_loadingButton.default, {
|
|
80
90
|
appearance: "primary",
|
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.ErrorBoundary = void 0;
|
|
8
|
-
var _react =
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
11
|
+
var _constants = require("../../common/constants");
|
|
12
|
+
var _analytics = _interopRequireDefault(require("../../common/utils/analytics/analytics.codegen"));
|
|
9
13
|
var _errorBoundaryBase = require("./error-boundary-base");
|
|
10
14
|
var _errorBoundaryUi = require("./error-boundary-ui");
|
|
15
|
+
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); }
|
|
16
|
+
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; }
|
|
11
17
|
var ErrorBoundary = function ErrorBoundary(_ref) {
|
|
12
18
|
var children = _ref.children;
|
|
13
|
-
|
|
19
|
+
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
20
|
+
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
21
|
+
var handleError = (0, _react.useCallback)(function (error, info) {
|
|
22
|
+
var _window, _window$navigator, _info$componentStack;
|
|
23
|
+
// Fire Analytics event
|
|
24
|
+
createAnalyticsEvent((0, _analytics.default)('operational.linkCreate.unhandledErrorCaught', {
|
|
25
|
+
browserInfo: ((_window = window) === null || _window === void 0 ? void 0 : (_window$navigator = _window.navigator) === null || _window$navigator === void 0 ? void 0 : _window$navigator.userAgent) || 'unknown',
|
|
26
|
+
error: error.toString(),
|
|
27
|
+
componentStack: (_info$componentStack = info === null || info === void 0 ? void 0 : info.componentStack) !== null && _info$componentStack !== void 0 ? _info$componentStack : ''
|
|
28
|
+
})).fire(_constants.ANALYTICS_CHANNEL);
|
|
29
|
+
|
|
30
|
+
// Fire UFO failed experience
|
|
31
|
+
// failUfoExperience(ufoExperience.mounted);
|
|
32
|
+
}, [createAnalyticsEvent]);
|
|
14
33
|
return /*#__PURE__*/_react.default.createElement(_errorBoundaryBase.BaseErrorBoundary, {
|
|
34
|
+
onError: handleError,
|
|
15
35
|
ErrorComponent: _errorBoundaryUi.ErrorBoundaryUI
|
|
16
36
|
}, children);
|
|
17
37
|
};
|
package/dist/cjs/ui/main.js
CHANGED
|
@@ -1,46 +1,82 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
|
-
exports.default = void 0;
|
|
8
|
+
exports.default = exports.PACKAGE_DATA = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
10
|
var _react = require("react");
|
|
9
11
|
var _react2 = require("@emotion/react");
|
|
12
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
10
13
|
var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
|
|
14
|
+
var _constants = require("../common/constants");
|
|
15
|
+
var _analytics = require("../common/utils/analytics");
|
|
16
|
+
var _analytics2 = _interopRequireDefault(require("../common/utils/analytics/analytics.codegen"));
|
|
11
17
|
var _callbackContext = require("../controllers/callback-context");
|
|
18
|
+
var _version = require("../version.json");
|
|
12
19
|
var _errorBoundary = require("./error-boundary");
|
|
13
20
|
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); }
|
|
14
21
|
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; }
|
|
15
22
|
/** @jsx jsx */
|
|
16
23
|
|
|
17
|
-
function
|
|
24
|
+
var LinkCreate = function LinkCreate(_ref) {
|
|
18
25
|
var plugins = _ref.plugins,
|
|
19
|
-
testId = _ref.testId,
|
|
20
|
-
groupKey = _ref.groupKey,
|
|
21
26
|
entityKey = _ref.entityKey,
|
|
22
27
|
onCreate = _ref.onCreate,
|
|
23
28
|
onFailure = _ref.onFailure,
|
|
24
|
-
onCancel = _ref.onCancel
|
|
25
|
-
active = _ref.active;
|
|
29
|
+
onCancel = _ref.onCancel;
|
|
26
30
|
var chosenOne = plugins.find(function (plugin) {
|
|
27
31
|
return plugin.key === entityKey;
|
|
28
32
|
});
|
|
29
33
|
if (!chosenOne) {
|
|
30
34
|
throw new Error('Make sure you specified a valid entityKey');
|
|
31
35
|
}
|
|
36
|
+
var handleCreate = (0, _react.useCallback)(function (result) {
|
|
37
|
+
onCreate && onCreate(result.url);
|
|
38
|
+
}, [onCreate]);
|
|
32
39
|
return (0, _react2.jsx)(_callbackContext.LinkCreateCallbackProvider, {
|
|
33
|
-
onCreate:
|
|
40
|
+
onCreate: handleCreate,
|
|
34
41
|
onFailure: onFailure,
|
|
35
42
|
onCancel: onCancel
|
|
36
43
|
}, chosenOne.form);
|
|
37
|
-
}
|
|
38
|
-
var
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
};
|
|
45
|
+
var LinkCreateWithModal = function LinkCreateWithModal(props) {
|
|
46
|
+
var testId = props.testId,
|
|
47
|
+
onCancel = props.onCancel,
|
|
48
|
+
active = props.active;
|
|
49
|
+
var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
|
|
50
|
+
createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
|
|
51
|
+
var handleOpenComplete = (0, _react.useCallback)(function () {
|
|
52
|
+
createAnalyticsEvent((0, _analytics2.default)('screen.linkCreateScreen.viewed', {})).fire(_constants.ANALYTICS_CHANNEL);
|
|
53
|
+
}, [createAnalyticsEvent]);
|
|
54
|
+
var handleCloseComplete = (0, _react.useCallback)(function () {
|
|
55
|
+
createAnalyticsEvent((0, _analytics2.default)('screen.linkCreateScreen.closed', {})).fire(_constants.ANALYTICS_CHANNEL);
|
|
56
|
+
}, [createAnalyticsEvent]);
|
|
57
|
+
return (0, _react2.jsx)(_modalDialog.ModalTransition, null, !!active && (0, _react2.jsx)(_modalDialog.default, {
|
|
58
|
+
onClose: onCancel,
|
|
59
|
+
testId: testId,
|
|
60
|
+
shouldScrollInViewport: true,
|
|
61
|
+
onOpenComplete: handleOpenComplete,
|
|
62
|
+
onCloseComplete: handleCloseComplete
|
|
63
|
+
}, (0, _react2.jsx)(_modalDialog.ModalHeader, null, (0, _react2.jsx)(_modalDialog.ModalTitle, null, "Create New")), (0, _react2.jsx)(_modalDialog.ModalBody, null, (0, _react2.jsx)(_errorBoundary.ErrorBoundary, null, (0, _react2.jsx)(LinkCreate, props)))));
|
|
64
|
+
};
|
|
65
|
+
var LinkCreateWithAnalyticsContext = (0, _analytics.withLinkCreateAnalyticsContext)( /*#__PURE__*/(0, _react.memo)(function (_ref2) {
|
|
66
|
+
var props = (0, _extends2.default)({}, _ref2);
|
|
67
|
+
return (0, _react2.jsx)(LinkCreateWithModal, props);
|
|
68
|
+
}));
|
|
69
|
+
var PACKAGE_DATA = {
|
|
70
|
+
packageName: _version.name,
|
|
71
|
+
packageVersion: _version.version,
|
|
72
|
+
componentName: _constants.COMPONENT_NAME,
|
|
73
|
+
source: _constants.COMPONENT_NAME
|
|
74
|
+
};
|
|
75
|
+
exports.PACKAGE_DATA = PACKAGE_DATA;
|
|
76
|
+
var ComposedLinkCreate = /*#__PURE__*/(0, _react.memo)(function (props) {
|
|
77
|
+
return (0, _react2.jsx)(_analyticsNext.AnalyticsContext, {
|
|
78
|
+
data: PACKAGE_DATA
|
|
79
|
+
}, (0, _react2.jsx)(LinkCreateWithAnalyticsContext, props));
|
|
44
80
|
});
|
|
45
|
-
var _default =
|
|
81
|
+
var _default = ComposedLinkCreate;
|
|
46
82
|
exports.default = _default;
|
package/dist/cjs/version.json
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
|
|
3
|
+
*
|
|
4
|
+
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
|
+
*
|
|
6
|
+
* @codegen <<SignedSource::6d7803f5c035dc3cde1be03caa91eb04>>
|
|
7
|
+
* @codegenCommand yarn workspace @atlaskit/link-create run codegen-analytics
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
function createEventPayload(eventKey, attributes) {
|
|
11
|
+
const event = eventKey.split('.');
|
|
12
|
+
return {
|
|
13
|
+
eventType: event[0],
|
|
14
|
+
actionSubject: event[1],
|
|
15
|
+
action: event[2],
|
|
16
|
+
actionSubjectId: event[3],
|
|
17
|
+
attributes: attributes
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export default createEventPayload;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { useCallback, useContext, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { AnalyticsListener } from '@atlaskit/analytics-next';
|
|
3
|
+
import { ANALYTICS_CHANNEL } from '../../constants';
|
|
4
|
+
const UNKNOWN = 'unknown';
|
|
5
|
+
const DEFAULT_CONTEXT_ATTRIBUTES = {
|
|
6
|
+
triggeredFrom: UNKNOWN,
|
|
7
|
+
objectName: UNKNOWN,
|
|
8
|
+
appearance: 'modal'
|
|
9
|
+
};
|
|
10
|
+
const LinkCreateAnalyticsContext = /*#__PURE__*/React.createContext({
|
|
11
|
+
trackAttribute: () => {},
|
|
12
|
+
trackAttributes: () => {},
|
|
13
|
+
getAttributes: () => DEFAULT_CONTEXT_ATTRIBUTES
|
|
14
|
+
});
|
|
15
|
+
const LinkCreateAnalytics = ({
|
|
16
|
+
initialContext,
|
|
17
|
+
children
|
|
18
|
+
}) => {
|
|
19
|
+
const dataRef = useRef({
|
|
20
|
+
...DEFAULT_CONTEXT_ATTRIBUTES,
|
|
21
|
+
...initialContext
|
|
22
|
+
});
|
|
23
|
+
const methods = useMemo(() => ({
|
|
24
|
+
trackAttribute: (key, value) => {
|
|
25
|
+
dataRef.current[key] = value;
|
|
26
|
+
},
|
|
27
|
+
trackAttributes: attributes => {
|
|
28
|
+
dataRef.current = {
|
|
29
|
+
...dataRef.current,
|
|
30
|
+
...attributes
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
getAttributes: () => dataRef.current
|
|
34
|
+
}), []);
|
|
35
|
+
return /*#__PURE__*/React.createElement(LinkCreateAnalyticsContext.Provider, {
|
|
36
|
+
value: methods
|
|
37
|
+
}, children);
|
|
38
|
+
};
|
|
39
|
+
const contextAttributesFromInitialProps = props => {
|
|
40
|
+
return {
|
|
41
|
+
objectName: props.entityKey,
|
|
42
|
+
triggeredFrom: props.triggeredFrom
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Hook that exposes the context-level attribute getters and setters.
|
|
48
|
+
*/
|
|
49
|
+
export const useLinkCreateAnalytics = () => useContext(LinkCreateAnalyticsContext);
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Wrap component in "attributes" context store and initialise the initial context attributes from props.
|
|
53
|
+
*/
|
|
54
|
+
function withLinkCreateAnalytics(WrappedComponent) {
|
|
55
|
+
return props => {
|
|
56
|
+
const [initialContext] = useState(() => contextAttributesFromInitialProps(props));
|
|
57
|
+
return /*#__PURE__*/React.createElement(LinkCreateAnalytics, {
|
|
58
|
+
initialContext: initialContext
|
|
59
|
+
}, /*#__PURE__*/React.createElement(WrappedComponent, props));
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Wraps a component with the analytics context + listener to update events with contextual-level attributes.
|
|
65
|
+
* Should be implemented once at the root of the link create.
|
|
66
|
+
*/
|
|
67
|
+
export function withLinkCreateAnalyticsContext(WrappedComponent) {
|
|
68
|
+
return withLinkCreateAnalytics(props => {
|
|
69
|
+
const {
|
|
70
|
+
getAttributes
|
|
71
|
+
} = useLinkCreateAnalytics();
|
|
72
|
+
const onEvent = useCallback(event => {
|
|
73
|
+
var _event$payload$attrib;
|
|
74
|
+
event.update({
|
|
75
|
+
attributes: {
|
|
76
|
+
...getAttributes(),
|
|
77
|
+
...((_event$payload$attrib = event.payload.attributes) !== null && _event$payload$attrib !== void 0 ? _event$payload$attrib : {})
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}, [getAttributes]);
|
|
81
|
+
return /*#__PURE__*/React.createElement(AnalyticsListener, {
|
|
82
|
+
channel: ANALYTICS_CHANNEL,
|
|
83
|
+
onEvent: onEvent
|
|
84
|
+
}, /*#__PURE__*/React.createElement(WrappedComponent, props));
|
|
85
|
+
});
|
|
86
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useLinkCreateAnalytics, withLinkCreateAnalyticsContext } from './context';
|