@atlaskit/reactions 21.1.0 → 21.2.2
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 +18 -0
- package/dist/cjs/analytics/index.js +11 -1
- package/dist/cjs/analytics/ufo.js +73 -0
- package/dist/cjs/components/ReactionPicker.js +17 -4
- package/dist/cjs/components/UfoErrorBoundary.js +68 -0
- package/dist/cjs/components/index.js +9 -1
- package/dist/cjs/containers/ConnectedReactionPicker.js +44 -0
- package/dist/cjs/containers/ConnectedReactionsView.js +131 -0
- package/dist/cjs/containers/index.js +4 -6
- package/dist/cjs/index.js +11 -3
- package/dist/cjs/{reaction-store → store}/ReactionConsumer.js +0 -0
- package/dist/cjs/{reaction-store → store}/ReactionsStore.js +63 -14
- package/dist/cjs/{reaction-store → store}/batched.js +0 -0
- package/dist/cjs/{reaction-store → store}/index.js +0 -0
- package/dist/cjs/{reaction-store → store}/utils.js +0 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/analytics/index.js +2 -0
- package/dist/es2019/analytics/ufo.js +62 -0
- package/dist/es2019/components/ReactionPicker.js +13 -3
- package/dist/es2019/components/UfoErrorBoundary.js +13 -0
- package/dist/es2019/components/index.js +2 -1
- package/dist/es2019/containers/ConnectedReactionPicker.js +27 -0
- package/dist/es2019/containers/ConnectedReactionsView.js +112 -0
- package/dist/es2019/containers/index.js +2 -2
- package/dist/es2019/index.js +2 -1
- package/dist/es2019/{reaction-store → store}/ReactionConsumer.js +0 -0
- package/dist/es2019/{reaction-store → store}/ReactionsStore.js +59 -13
- package/dist/es2019/{reaction-store → store}/batched.js +0 -0
- package/dist/es2019/{reaction-store → store}/index.js +0 -0
- package/dist/es2019/{reaction-store → store}/utils.js +0 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/analytics/index.js +2 -0
- package/dist/esm/analytics/ufo.js +62 -0
- package/dist/esm/components/ReactionPicker.js +13 -3
- package/dist/esm/components/UfoErrorBoundary.js +54 -0
- package/dist/esm/components/index.js +2 -1
- package/dist/esm/containers/ConnectedReactionPicker.js +29 -0
- package/dist/esm/containers/ConnectedReactionsView.js +108 -0
- package/dist/esm/containers/index.js +2 -2
- package/dist/esm/index.js +2 -1
- package/dist/esm/{reaction-store → store}/ReactionConsumer.js +0 -0
- package/dist/esm/{reaction-store → store}/ReactionsStore.js +61 -13
- package/dist/esm/{reaction-store → store}/batched.js +0 -0
- package/dist/esm/{reaction-store → store}/index.js +0 -0
- package/dist/esm/{reaction-store → store}/utils.js +0 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/analytics/index.d.ts +1 -0
- package/dist/types/analytics/ufo.d.ts +33 -0
- package/dist/types/components/ReactionPicker.d.ts +2 -1
- package/dist/types/components/Reactions.d.ts +7 -5
- package/dist/types/components/UfoErrorBoundary.d.ts +8 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/containers/ConnectedReactionPicker.d.ts +10 -0
- package/dist/types/containers/ConnectedReactionsView.d.ts +19 -0
- package/dist/types/containers/index.d.ts +2 -2
- package/dist/types/index.d.ts +3 -2
- package/dist/types/store/ReactionConsumer.d.ts +29 -0
- package/dist/types/{reaction-store → store}/ReactionsStore.d.ts +11 -7
- package/dist/types/{reaction-store → store}/batched.d.ts +0 -0
- package/dist/types/{reaction-store → store}/index.d.ts +0 -0
- package/dist/types/{reaction-store → store}/utils.d.ts +0 -0
- package/dist/types/types/Actions.d.ts +6 -0
- package/dist/types/types/index.d.ts +1 -1
- package/docs/0-intro.tsx +1 -1
- package/package.json +5 -3
- package/dist/cjs/containers/ReactionsContainer.js +0 -142
- package/dist/cjs/containers/ReactionsPickerContainer.js +0 -76
- package/dist/es2019/containers/ReactionsContainer.js +0 -96
- package/dist/es2019/containers/ReactionsPickerContainer.js +0 -26
- package/dist/esm/containers/ReactionsContainer.js +0 -125
- package/dist/esm/containers/ReactionsPickerContainer.js +0 -62
- package/dist/types/containers/ReactionsContainer.d.ts +0 -22
- package/dist/types/containers/ReactionsPickerContainer.d.ts +0 -18
- package/dist/types/reaction-store/ReactionConsumer.d.ts +0 -32
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ConcurrentExperience, UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
|
|
2
|
+
/**
|
|
3
|
+
* Initial experience config object (deferred from @atlaskit/ufo inner types)
|
|
4
|
+
* TODO: Check if possible to add this to exported types from @atlaskit/ufo
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Helper method for create the config type for an individual/Concurrent experience
|
|
9
|
+
* @param componentName
|
|
10
|
+
*/
|
|
11
|
+
var createExperienceConfig = function createExperienceConfig(componentName, type, performanceType) {
|
|
12
|
+
return {
|
|
13
|
+
platform: {
|
|
14
|
+
component: componentName
|
|
15
|
+
},
|
|
16
|
+
type: type,
|
|
17
|
+
performanceType: performanceType
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Types of experiences
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
export var ExperienceName;
|
|
26
|
+
/**
|
|
27
|
+
* UFO types of components been instrumented
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
(function (ExperienceName) {
|
|
31
|
+
ExperienceName["REACTIONS_RENDERED"] = "reactions-rendered";
|
|
32
|
+
ExperienceName["PICKER_OPENED"] = "reactions-picker-opened";
|
|
33
|
+
ExperienceName["REACTION_ADDED"] = "reaction-added";
|
|
34
|
+
ExperienceName["REACTION_REMOVED"] = "reaction-removed";
|
|
35
|
+
})(ExperienceName || (ExperienceName = {}));
|
|
36
|
+
|
|
37
|
+
export var ComponentName;
|
|
38
|
+
/**
|
|
39
|
+
* Experience when the emoji picker is opened
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
(function (ComponentName) {
|
|
43
|
+
ComponentName["PICKER_RENDERED"] = "reactions-picker";
|
|
44
|
+
ComponentName["REACTIONS"] = "reactions-list";
|
|
45
|
+
})(ComponentName || (ComponentName = {}));
|
|
46
|
+
|
|
47
|
+
export var PickerRender = new UFOExperience(ExperienceName.PICKER_OPENED, createExperienceConfig(ComponentName.PICKER_RENDERED, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
48
|
+
/**
|
|
49
|
+
* Experience when the list of reactions gets rendered
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
export var ReactionsRendered = new ConcurrentExperience(ExperienceName.REACTIONS_RENDERED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Load, ExperiencePerformanceTypes.PageSegmentLoad));
|
|
53
|
+
/**
|
|
54
|
+
* Experience when a reaction emoji gets added
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
export var ReactionsAdd = new ConcurrentExperience(ExperienceName.REACTION_ADDED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
58
|
+
/**
|
|
59
|
+
* Experience when a reaction emoji gets removed/decrement
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
export var ReactionsRemove = new ConcurrentExperience(ExperienceName.REACTION_REMOVED, createExperienceConfig(ComponentName.REACTIONS, ExperienceTypes.Experience, ExperiencePerformanceTypes.InlineResult));
|
|
@@ -15,17 +15,17 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
15
15
|
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; } }
|
|
16
16
|
|
|
17
17
|
/** @jsx jsx */
|
|
18
|
+
import React, { Fragment, PureComponent } from 'react';
|
|
19
|
+
import ReactDOM from 'react-dom';
|
|
18
20
|
import { jsx, css } from '@emotion/core';
|
|
19
21
|
import { EmojiPicker } from '@atlaskit/emoji/picker';
|
|
20
22
|
import { Manager, Popper, Reference } from '@atlaskit/popper';
|
|
21
23
|
import { borderRadius } from '@atlaskit/theme/constants';
|
|
22
24
|
import { N0, N50A, N60A } from '@atlaskit/theme/colors';
|
|
23
25
|
import { token } from '@atlaskit/tokens';
|
|
24
|
-
import React, { Fragment } from 'react';
|
|
25
|
-
import { PureComponent } from 'react';
|
|
26
|
-
import ReactDOM from 'react-dom';
|
|
27
26
|
import { Selector } from './Selector';
|
|
28
27
|
import { Trigger } from './Trigger';
|
|
28
|
+
import { UFO } from '../analytics';
|
|
29
29
|
import { layers } from '@atlaskit/theme/constants';
|
|
30
30
|
var pickerStyle = css({
|
|
31
31
|
verticalAlign: 'middle',
|
|
@@ -110,6 +110,9 @@ export var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
_defineProperty(_assertThisInitialized(_this), "onTriggerClick", function () {
|
|
113
|
+
// ufo start reaction experience
|
|
114
|
+
UFO.PickerRender.start();
|
|
115
|
+
|
|
113
116
|
if (_this.props.onOpen) {
|
|
114
117
|
_this.props.onOpen();
|
|
115
118
|
}
|
|
@@ -117,6 +120,9 @@ export var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
117
120
|
_this.setState({
|
|
118
121
|
isOpen: !_this.state.isOpen,
|
|
119
122
|
showFullPicker: false
|
|
123
|
+
}, function () {
|
|
124
|
+
// ufo add reaction success
|
|
125
|
+
UFO.PickerRender.success();
|
|
120
126
|
});
|
|
121
127
|
});
|
|
122
128
|
|
|
@@ -160,6 +166,7 @@ export var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
160
166
|
key: "componentWillUnmount",
|
|
161
167
|
value: function componentWillUnmount() {
|
|
162
168
|
document.removeEventListener('click', this.handleClickOutside);
|
|
169
|
+
UFO.PickerRender.abort();
|
|
163
170
|
}
|
|
164
171
|
}, {
|
|
165
172
|
key: "close",
|
|
@@ -167,6 +174,9 @@ export var ReactionPicker = /*#__PURE__*/function (_PureComponent) {
|
|
|
167
174
|
this.setState({
|
|
168
175
|
isOpen: false,
|
|
169
176
|
showFullPicker: false
|
|
177
|
+
}, function () {
|
|
178
|
+
// ufo abort reaction experience
|
|
179
|
+
UFO.PickerRender.abort();
|
|
170
180
|
});
|
|
171
181
|
}
|
|
172
182
|
}, {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
+
import _inherits from "@babel/runtime/helpers/inherits";
|
|
4
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
5
|
+
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
6
|
+
|
|
7
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
8
|
+
|
|
9
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
+
|
|
11
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
12
|
+
|
|
13
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
14
|
+
|
|
15
|
+
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; } }
|
|
16
|
+
|
|
17
|
+
import React from 'react';
|
|
18
|
+
export var UfoErrorBoundary = /*#__PURE__*/function (_React$Component) {
|
|
19
|
+
_inherits(UfoErrorBoundary, _React$Component);
|
|
20
|
+
|
|
21
|
+
var _super = _createSuper(UfoErrorBoundary);
|
|
22
|
+
|
|
23
|
+
function UfoErrorBoundary() {
|
|
24
|
+
_classCallCheck(this, UfoErrorBoundary);
|
|
25
|
+
|
|
26
|
+
return _super.apply(this, arguments);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
_createClass(UfoErrorBoundary, [{
|
|
30
|
+
key: "componentDidCatch",
|
|
31
|
+
value: function componentDidCatch() {
|
|
32
|
+
var _iterator = _createForOfIteratorHelper(this.props.experiences),
|
|
33
|
+
_step;
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
37
|
+
var e = _step.value;
|
|
38
|
+
e.failure();
|
|
39
|
+
}
|
|
40
|
+
} catch (err) {
|
|
41
|
+
_iterator.e(err);
|
|
42
|
+
} finally {
|
|
43
|
+
_iterator.f();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
key: "render",
|
|
48
|
+
value: function render() {
|
|
49
|
+
return this.props.children;
|
|
50
|
+
}
|
|
51
|
+
}]);
|
|
52
|
+
|
|
53
|
+
return UfoErrorBoundary;
|
|
54
|
+
}(React.Component);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ReactionPicker, UfoErrorBoundary } from '../components';
|
|
4
|
+
import { ReactionConsumer } from '../store/ReactionConsumer';
|
|
5
|
+
import { UFO } from '../analytics';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* UFO Instance for picker
|
|
9
|
+
*/
|
|
10
|
+
export var ConnectedReactionPicker = function ConnectedReactionPicker(props) {
|
|
11
|
+
var renderChild = function renderChild(innerProps) {
|
|
12
|
+
return /*#__PURE__*/React.createElement(ReactionPicker, _extends({}, props, innerProps));
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
var actionsMapper = function actionsMapper(actions) {
|
|
16
|
+
return {
|
|
17
|
+
onSelection: function onSelection(emojiId) {
|
|
18
|
+
actions.addReaction(props.containerAri, props.ari, emojiId);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
return /*#__PURE__*/React.createElement(UfoErrorBoundary, {
|
|
24
|
+
experiences: [UFO.PickerRender]
|
|
25
|
+
}, /*#__PURE__*/React.createElement(ReactionConsumer, {
|
|
26
|
+
store: props.store,
|
|
27
|
+
actionsMapper: actionsMapper
|
|
28
|
+
}, renderChild));
|
|
29
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React, { useEffect, useRef } from 'react';
|
|
3
|
+
import { FabricElementsAnalyticsContext } from '@atlaskit/analytics-namespaced-context';
|
|
4
|
+
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
5
|
+
import { Reactions, UfoErrorBoundary } from '../components';
|
|
6
|
+
import { ReactionConsumer } from '../store/ReactionConsumer';
|
|
7
|
+
import { ReactionStatus } from '../types/ReactionStatus';
|
|
8
|
+
import { ufoExperiences } from '../store/ReactionsStore';
|
|
9
|
+
|
|
10
|
+
var ReactionsView = function ReactionsView(props) {
|
|
11
|
+
// // compose a UFO experience object
|
|
12
|
+
var experienceInstance = useRef();
|
|
13
|
+
var ari = props.ari,
|
|
14
|
+
createAnalyticsEvent = props.createAnalyticsEvent,
|
|
15
|
+
store = props.store;
|
|
16
|
+
useEffect(function () {
|
|
17
|
+
experienceInstance.current = ufoExperiences.render.getInstance(ari);
|
|
18
|
+
}, [ari]);
|
|
19
|
+
useEffect(function () {
|
|
20
|
+
Promise.resolve(store).then(function (_store) {
|
|
21
|
+
if (_store.setCreateAnalyticsEvent && createAnalyticsEvent) {
|
|
22
|
+
_store.setCreateAnalyticsEvent(createAnalyticsEvent);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}, [createAnalyticsEvent, store]); // abort when component gets unmounted
|
|
26
|
+
|
|
27
|
+
useEffect(function () {
|
|
28
|
+
return function () {
|
|
29
|
+
var _experienceInstance$c;
|
|
30
|
+
|
|
31
|
+
(_experienceInstance$c = experienceInstance.current) === null || _experienceInstance$c === void 0 ? void 0 : _experienceInstance$c.abort();
|
|
32
|
+
};
|
|
33
|
+
}, [experienceInstance]);
|
|
34
|
+
|
|
35
|
+
var renderChildren = function renderChildren(innerProps) {
|
|
36
|
+
var containerAri = props.containerAri,
|
|
37
|
+
ari = props.ari;
|
|
38
|
+
return /*#__PURE__*/React.createElement(FabricElementsAnalyticsContext, {
|
|
39
|
+
data: {
|
|
40
|
+
containerAri: containerAri,
|
|
41
|
+
ari: ari
|
|
42
|
+
}
|
|
43
|
+
}, /*#__PURE__*/React.createElement(Reactions, _extends({
|
|
44
|
+
key: "".concat(props.containerAri, "|").concat(props.ari)
|
|
45
|
+
}, props, innerProps)));
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
var stateMapper = function stateMapper(state) {
|
|
49
|
+
var containerAri = props.containerAri,
|
|
50
|
+
ari = props.ari;
|
|
51
|
+
var reactionsState = state && state.reactions["".concat(containerAri, "|").concat(ari)];
|
|
52
|
+
|
|
53
|
+
if (!state || !reactionsState) {
|
|
54
|
+
return {
|
|
55
|
+
status: ReactionStatus.notLoaded,
|
|
56
|
+
reactions: []
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
switch (reactionsState.status) {
|
|
61
|
+
case ReactionStatus.ready:
|
|
62
|
+
return {
|
|
63
|
+
reactions: reactionsState.reactions,
|
|
64
|
+
status: reactionsState.status,
|
|
65
|
+
flash: state.flash["".concat(containerAri, "|").concat(ari)]
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
case ReactionStatus.error:
|
|
69
|
+
return {
|
|
70
|
+
status: ReactionStatus.error,
|
|
71
|
+
reactions: []
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
default:
|
|
75
|
+
return {
|
|
76
|
+
status: ReactionStatus.loading,
|
|
77
|
+
reactions: []
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
var actionsMapper = function actionsMapper(actions) {
|
|
83
|
+
return {
|
|
84
|
+
loadReaction: function loadReaction() {
|
|
85
|
+
actions.getReactions(props.containerAri, props.ari);
|
|
86
|
+
},
|
|
87
|
+
onReactionClick: function onReactionClick(emojiId) {
|
|
88
|
+
actions.toggleReaction(props.containerAri, props.ari, emojiId);
|
|
89
|
+
},
|
|
90
|
+
onReactionHover: function onReactionHover(emojiId) {
|
|
91
|
+
actions.getDetailedReaction(props.containerAri, props.ari, emojiId);
|
|
92
|
+
},
|
|
93
|
+
onSelection: function onSelection(emojiId) {
|
|
94
|
+
actions.addReaction(props.containerAri, props.ari, emojiId);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
return /*#__PURE__*/React.createElement(UfoErrorBoundary, {
|
|
100
|
+
experiences: experienceInstance.current ? [experienceInstance.current] : []
|
|
101
|
+
}, /*#__PURE__*/React.createElement(ReactionConsumer, {
|
|
102
|
+
store: props.store,
|
|
103
|
+
actionsMapper: actionsMapper,
|
|
104
|
+
stateMapper: stateMapper
|
|
105
|
+
}, renderChildren));
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export var ConnectedReactionsView = withAnalyticsEvents()(ReactionsView);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { ConnectedReactionPicker } from './ConnectedReactionPicker';
|
|
2
|
+
export { ConnectedReactionsView } from './ConnectedReactionsView';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
export { UFO } from './analytics';
|
|
1
2
|
export { ReactionServiceClient } from './client';
|
|
2
3
|
export { Reaction, ReactionPicker, Reactions } from './components';
|
|
3
4
|
export { ConnectedReactionPicker, ConnectedReactionsView } from './containers';
|
|
4
|
-
export { MemoryReactionsStore, ReactionConsumer } from './
|
|
5
|
+
export { MemoryReactionsStore, ReactionConsumer } from './store';
|
|
File without changes
|
|
@@ -6,11 +6,20 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
6
6
|
|
|
7
7
|
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) { _defineProperty(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; }
|
|
8
8
|
|
|
9
|
-
import
|
|
10
|
-
import
|
|
9
|
+
import * as Analytics from '../analytics';
|
|
10
|
+
import * as Types from '../types';
|
|
11
11
|
import { batch, batchByKey } from './batched';
|
|
12
12
|
import * as utils from './utils';
|
|
13
13
|
import { isRealErrorFromService } from './utils';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Set of all available UFO experiences relating to reaction element
|
|
17
|
+
*/
|
|
18
|
+
export var ufoExperiences = {
|
|
19
|
+
add: Analytics.UFO.ReactionsAdd,
|
|
20
|
+
remove: Analytics.UFO.ReactionsRemove,
|
|
21
|
+
render: Analytics.UFO.ReactionsRendered
|
|
22
|
+
};
|
|
14
23
|
export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
15
24
|
function MemoryReactionsStore(client) {
|
|
16
25
|
var _this = this;
|
|
@@ -112,13 +121,26 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
112
121
|
|
|
113
122
|
_this.flash(reaction);
|
|
114
123
|
|
|
124
|
+
var exp = ufoExperiences.add.getInstance("".concat(ari, "|").concat(emojiId)); // ufo start reaction experience
|
|
125
|
+
|
|
126
|
+
exp.start();
|
|
127
|
+
|
|
115
128
|
_this.client.addReaction(containerAri, ari, emojiId, _this.metadata).then(function (_) {
|
|
116
129
|
if (_this.createAnalyticsEvent) {
|
|
117
|
-
createAndFireSafe(_this.createAnalyticsEvent, createRestSucceededEvent, 'addReaction');
|
|
118
|
-
}
|
|
130
|
+
Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestSucceededEvent, 'addReaction');
|
|
131
|
+
} // ufo add reaction success
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
exp.success();
|
|
119
135
|
}).catch(function (error) {
|
|
120
136
|
if (_this.createAnalyticsEvent && isRealErrorFromService(error.code)) {
|
|
121
|
-
createAndFireSafe(_this.createAnalyticsEvent, createRestFailedEvent, 'addReaction', error.code);
|
|
137
|
+
_this.createAnalyticsEvent && Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'addReaction', error.code); // ufo add reaction failure
|
|
138
|
+
|
|
139
|
+
exp.failure({
|
|
140
|
+
metadata: {
|
|
141
|
+
error: error
|
|
142
|
+
}
|
|
143
|
+
});
|
|
122
144
|
}
|
|
123
145
|
|
|
124
146
|
return Promise.reject(error);
|
|
@@ -129,10 +151,23 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
129
151
|
var containerAri = reaction.containerAri,
|
|
130
152
|
ari = reaction.ari,
|
|
131
153
|
emojiId = reaction.emojiId;
|
|
154
|
+
var exp = ufoExperiences.remove.getInstance("".concat(ari, "|").concat(emojiId)); // ufo start reaction experience
|
|
155
|
+
|
|
156
|
+
exp.start();
|
|
132
157
|
|
|
133
158
|
_this.optmisticUpdate(containerAri, ari, emojiId)(utils.removeOne);
|
|
134
159
|
|
|
135
|
-
_this.client.deleteReaction(containerAri, ari, emojiId, _this.metadata)
|
|
160
|
+
_this.client.deleteReaction(containerAri, ari, emojiId, _this.metadata).then(function (_) {
|
|
161
|
+
// ufo add reaction success
|
|
162
|
+
exp.success();
|
|
163
|
+
}).catch(function (error) {
|
|
164
|
+
// ufo add reaction failure
|
|
165
|
+
exp.failure({
|
|
166
|
+
metadata: {
|
|
167
|
+
error: error
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
});
|
|
136
171
|
});
|
|
137
172
|
|
|
138
173
|
_defineProperty(this, "setCreateAnalyticsEvent", function (createAnalyticsEvent) {
|
|
@@ -140,24 +175,37 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
140
175
|
});
|
|
141
176
|
|
|
142
177
|
_defineProperty(this, "getReactions", batchByKey(function (containerAri, aris) {
|
|
178
|
+
/**
|
|
179
|
+
* TODO:
|
|
180
|
+
* All reactions are usually fetched in a single call to reactions-service. Need to check why "getReactions" gets called randomly 1-2 times everytime on each fetch request despite using same containerAri.
|
|
181
|
+
*/
|
|
182
|
+
var exp = ufoExperiences.render.getInstance(containerAri); // ufo start reaction experience
|
|
183
|
+
|
|
184
|
+
exp.start();
|
|
185
|
+
|
|
143
186
|
_this.client.getReactions(containerAri, aris.reduce(utils.flattenAris)).then(function (value) {
|
|
144
187
|
Object.keys(value).map(function (ari) {
|
|
145
188
|
var reactionsState = _this.getReactionsState(containerAri, ari);
|
|
146
189
|
|
|
147
|
-
var reactions = reactionsState && reactionsState.status === ReactionStatus.ready ? reactionsState.reactions : undefined;
|
|
190
|
+
var reactions = reactionsState && reactionsState.status === Types.ReactionStatus.ready ? reactionsState.reactions : undefined;
|
|
148
191
|
|
|
149
192
|
_this.setReactions(containerAri, ari, utils.readyState(value[ari].sort(utils.getReactionsSortFunction(reactions))));
|
|
150
193
|
});
|
|
151
194
|
}).then(function () {
|
|
152
195
|
if (_this.createAnalyticsEvent) {
|
|
153
|
-
createAndFireSafe(_this.createAnalyticsEvent, createRestSucceededEvent, 'getReactions');
|
|
196
|
+
Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestSucceededEvent, 'getReactions');
|
|
154
197
|
}
|
|
198
|
+
|
|
199
|
+
exp.success();
|
|
155
200
|
}).catch(function (error) {
|
|
156
|
-
if (
|
|
157
|
-
|
|
158
|
-
|
|
201
|
+
if (isRealErrorFromService(error.code)) {
|
|
202
|
+
if (_this.createAnalyticsEvent) {
|
|
203
|
+
Analytics.createAndFireSafe(_this.createAnalyticsEvent, Analytics.createRestFailedEvent, 'getReactions', error.code);
|
|
204
|
+
}
|
|
159
205
|
|
|
160
|
-
|
|
206
|
+
exp.failure();
|
|
207
|
+
return Promise.reject(error);
|
|
208
|
+
}
|
|
161
209
|
});
|
|
162
210
|
}));
|
|
163
211
|
|
|
@@ -220,7 +268,7 @@ export var MemoryReactionsStore = /*#__PURE__*/function () {
|
|
|
220
268
|
return function (updater) {
|
|
221
269
|
var reactionsState = _this2.getReactionsState(containerAri, ari);
|
|
222
270
|
|
|
223
|
-
if (reactionsState.status === ReactionStatus.ready) {
|
|
271
|
+
if (reactionsState.status === Types.ReactionStatus.ready) {
|
|
224
272
|
var updated = updater(reactionsState);
|
|
225
273
|
|
|
226
274
|
if (updated) {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/esm/version.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AnalyticsEventPayload, CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
|
|
2
2
|
import { EventType } from '@atlaskit/analytics-gas-types';
|
|
3
3
|
import { ReactionSummary, ReactionSource } from '../types';
|
|
4
|
+
export * as UFO from './ufo';
|
|
4
5
|
export declare type PreviousState = 'new' | 'existingNotReacted' | 'existingReacted';
|
|
5
6
|
export declare const createAndFireEventInElementsChannel: (payload: Record<string, any>) => (createAnalyticsEvent: CreateUIAnalyticsEvent) => import("@atlaskit/analytics-next").UIAnalyticsEvent;
|
|
6
7
|
export declare const createAndFireSafe: <U extends any[], T extends (...args: U) => AnalyticsEventPayload>(createAnalyticsEvent: CreateUIAnalyticsEvent | void, creator: T, ...args: U) => void;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ConcurrentExperience, UFOExperience } from '@atlaskit/ufo';
|
|
2
|
+
/**
|
|
3
|
+
* Types of experiences
|
|
4
|
+
*/
|
|
5
|
+
export declare enum ExperienceName {
|
|
6
|
+
REACTIONS_RENDERED = "reactions-rendered",
|
|
7
|
+
PICKER_OPENED = "reactions-picker-opened",
|
|
8
|
+
REACTION_ADDED = "reaction-added",
|
|
9
|
+
REACTION_REMOVED = "reaction-removed"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* UFO types of components been instrumented
|
|
13
|
+
*/
|
|
14
|
+
export declare enum ComponentName {
|
|
15
|
+
PICKER_RENDERED = "reactions-picker",
|
|
16
|
+
REACTIONS = "reactions-list"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Experience when the emoji picker is opened
|
|
20
|
+
*/
|
|
21
|
+
export declare const PickerRender: UFOExperience;
|
|
22
|
+
/**
|
|
23
|
+
* Experience when the list of reactions gets rendered
|
|
24
|
+
*/
|
|
25
|
+
export declare const ReactionsRendered: ConcurrentExperience;
|
|
26
|
+
/**
|
|
27
|
+
* Experience when a reaction emoji gets added
|
|
28
|
+
*/
|
|
29
|
+
export declare const ReactionsAdd: ConcurrentExperience;
|
|
30
|
+
/**
|
|
31
|
+
* Experience when a reaction emoji gets removed/decrement
|
|
32
|
+
*/
|
|
33
|
+
export declare const ReactionsRemove: ConcurrentExperience;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
/** @jsx jsx */
|
|
2
2
|
import { PureComponent } from 'react';
|
|
3
|
+
import { EmojiProvider } from '@atlaskit/emoji/resource';
|
|
3
4
|
import { ReactionSource } from '../types';
|
|
4
5
|
export interface Props {
|
|
5
6
|
emojiProvider: Promise<EmojiProvider>;
|
|
@@ -4,17 +4,19 @@ import React from 'react';
|
|
|
4
4
|
import { OnEmoji, OnReaction } from '../types';
|
|
5
5
|
import { ReactionStatus } from '../types/ReactionStatus';
|
|
6
6
|
import { ReactionSummary } from '../types/ReactionSummary';
|
|
7
|
-
export interface
|
|
7
|
+
export interface StateMapperProps {
|
|
8
8
|
reactions: ReactionSummary[];
|
|
9
9
|
status: ReactionStatus;
|
|
10
|
+
flash?: {
|
|
11
|
+
[emojiId: string]: boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface Props extends StateMapperProps {
|
|
10
15
|
loadReaction: () => void;
|
|
11
16
|
onSelection: OnEmoji;
|
|
12
17
|
onReactionClick: OnEmoji;
|
|
13
18
|
onReactionHover?: OnReaction;
|
|
14
19
|
allowAllEmojis?: boolean;
|
|
15
|
-
flash?: {
|
|
16
|
-
[emojiId: string]: boolean;
|
|
17
|
-
};
|
|
18
20
|
boundariesElement?: string;
|
|
19
21
|
errorMessage?: string;
|
|
20
22
|
emojiProvider: Promise<EmojiProvider>;
|
|
@@ -41,7 +43,7 @@ export declare class ReactionsWithoutAnalytics extends React.PureComponent<Props
|
|
|
41
43
|
private renderReaction;
|
|
42
44
|
render(): JSX.Element;
|
|
43
45
|
}
|
|
44
|
-
export declare const Reactions: React.ForwardRefExoticComponent<Pick<Pick<Props & WithAnalyticsEventsProps, "reactions" | "emojiProvider" | "flash" | "onSelection" | "boundariesElement" | "allowAllEmojis" | "
|
|
46
|
+
export declare const Reactions: React.ForwardRefExoticComponent<Pick<Pick<Props & WithAnalyticsEventsProps, "reactions" | "emojiProvider" | "flash" | "onSelection" | "boundariesElement" | "allowAllEmojis" | "loadReaction" | "onReactionClick" | "onReactionHover" | "errorMessage" | "status">, "emojiProvider" | "onSelection" | "boundariesElement" | "allowAllEmojis" | "loadReaction" | "onReactionClick" | "onReactionHover" | "errorMessage" | "status"> & Partial<Pick<Pick<Props & WithAnalyticsEventsProps, "reactions" | "emojiProvider" | "flash" | "onSelection" | "boundariesElement" | "allowAllEmojis" | "loadReaction" | "onReactionClick" | "onReactionHover" | "errorMessage" | "status">, "reactions" | "flash">> & Partial<Pick<{
|
|
45
47
|
flash: {};
|
|
46
48
|
reactions: never[];
|
|
47
49
|
}, never>> & React.RefAttributes<any>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Props as ReactionsViewProps } from './ConnectedReactionsView';
|
|
3
|
+
export declare type Props = ReactionsViewProps & {
|
|
4
|
+
miniMode?: boolean;
|
|
5
|
+
className?: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* UFO Instance for picker
|
|
9
|
+
*/
|
|
10
|
+
export declare const ConnectedReactionPicker: React.FC<Props>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { WithAnalyticsEventsProps } from '@atlaskit/analytics-next';
|
|
3
|
+
import { EmojiProvider } from '@atlaskit/emoji/resource';
|
|
4
|
+
import { ReactionStoreProp } from '../store/ReactionConsumer';
|
|
5
|
+
export declare type Props = {
|
|
6
|
+
/**
|
|
7
|
+
* Wrapper id for reactions list
|
|
8
|
+
*/
|
|
9
|
+
containerAri: string;
|
|
10
|
+
/**
|
|
11
|
+
* Individual id for a reaction
|
|
12
|
+
*/
|
|
13
|
+
ari: string;
|
|
14
|
+
allowAllEmojis?: boolean;
|
|
15
|
+
boundariesElement?: string;
|
|
16
|
+
emojiProvider: Promise<EmojiProvider>;
|
|
17
|
+
store: ReactionStoreProp;
|
|
18
|
+
};
|
|
19
|
+
export declare const ConnectedReactionsView: React.ForwardRefExoticComponent<Pick<React.PropsWithChildren<Props & WithAnalyticsEventsProps>, "children" | "emojiProvider" | "boundariesElement" | "allowAllEmojis" | "containerAri" | "ari" | "store"> & React.RefAttributes<any>>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { ConnectedReactionPicker } from './ConnectedReactionPicker';
|
|
2
|
+
export { ConnectedReactionsView } from './ConnectedReactionsView';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
export { UFO } from './analytics';
|
|
1
2
|
export { ReactionServiceClient } from './client';
|
|
2
3
|
export type { ReactionClient, ReactionRequest } from './client';
|
|
3
4
|
export { Reaction, ReactionPicker, Reactions } from './components';
|
|
4
5
|
export { ConnectedReactionPicker, ConnectedReactionsView } from './containers';
|
|
5
|
-
export { MemoryReactionsStore, ReactionConsumer } from './
|
|
6
|
-
export type { ReactionsStore } from './
|
|
6
|
+
export { MemoryReactionsStore, ReactionConsumer } from './store';
|
|
7
|
+
export type { ReactionsStore } from './store';
|