@pioneer-platform/pioneer 1.0.5

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 (81) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +204 -0
  3. package/es/assets/chat-icon.svg +1 -0
  4. package/es/assets/close-icon.png +0 -0
  5. package/es/assets/image.png +0 -0
  6. package/es/assets/logo-no-bg.svg +1 -0
  7. package/es/assets/paperclip-icon.png +0 -0
  8. package/es/assets/sounds/notification.mp3 +0 -0
  9. package/es/components/ChatWindow.js +59 -0
  10. package/es/components/Header.js +20 -0
  11. package/es/components/Launcher.js +96 -0
  12. package/es/components/LauncherNew.js +130 -0
  13. package/es/components/MessageList.js +22 -0
  14. package/es/components/Messages/EmojiMessage.js +7 -0
  15. package/es/components/Messages/FileMessage.js +10 -0
  16. package/es/components/Messages/TextMessage.js +12 -0
  17. package/es/components/Messages/index.js +40 -0
  18. package/es/components/PinMessage.js +42 -0
  19. package/es/components/UserInput.js +190 -0
  20. package/es/components/emoji-picker/EmojiPicker.js +34 -0
  21. package/es/components/emoji-picker/emojiData.json +1 -0
  22. package/es/components/icons/EmojiIcon.js +36 -0
  23. package/es/components/icons/FileIcon.js +36 -0
  24. package/es/components/icons/SendIcon.js +38 -0
  25. package/es/components/popups/PopupWindow.js +51 -0
  26. package/es/index.js +4 -0
  27. package/es/messageTypes.js +12 -0
  28. package/es/styles/chat-window.css +55 -0
  29. package/es/styles/emojiPicker.css +38 -0
  30. package/es/styles/header.css +53 -0
  31. package/es/styles/index.js +8 -0
  32. package/es/styles/launcher.css +87 -0
  33. package/es/styles/message.css +88 -0
  34. package/es/styles/pin-message.css +24 -0
  35. package/es/styles/popup-window.css +61 -0
  36. package/es/styles/user-input.css +140 -0
  37. package/lib/assets/chat-icon.svg +1 -0
  38. package/lib/assets/close-icon.png +0 -0
  39. package/lib/assets/image.png +0 -0
  40. package/lib/assets/logo-no-bg.svg +1 -0
  41. package/lib/assets/paperclip-icon.png +0 -0
  42. package/lib/assets/sounds/notification.mp3 +0 -0
  43. package/lib/components/ChatWindow.js +66 -0
  44. package/lib/components/Header.js +27 -0
  45. package/lib/components/Launcher.js +105 -0
  46. package/lib/components/LauncherNew.js +139 -0
  47. package/lib/components/MessageList.js +31 -0
  48. package/lib/components/Messages/EmojiMessage.js +14 -0
  49. package/lib/components/Messages/FileMessage.js +17 -0
  50. package/lib/components/Messages/TextMessage.js +19 -0
  51. package/lib/components/Messages/index.js +47 -0
  52. package/lib/components/PinMessage.js +49 -0
  53. package/lib/components/UserInput.js +199 -0
  54. package/lib/components/emoji-picker/EmojiPicker.js +41 -0
  55. package/lib/components/emoji-picker/emojiData.json +1 -0
  56. package/lib/components/icons/EmojiIcon.js +43 -0
  57. package/lib/components/icons/FileIcon.js +44 -0
  58. package/lib/components/icons/SendIcon.js +46 -0
  59. package/lib/components/popups/PopupWindow.js +59 -0
  60. package/lib/index.js +7 -0
  61. package/lib/messageTypes.js +14 -0
  62. package/lib/styles/chat-window.css +55 -0
  63. package/lib/styles/emojiPicker.css +38 -0
  64. package/lib/styles/header.css +53 -0
  65. package/lib/styles/index.js +10 -0
  66. package/lib/styles/launcher.css +87 -0
  67. package/lib/styles/message.css +88 -0
  68. package/lib/styles/pin-message.css +24 -0
  69. package/lib/styles/popup-window.css +61 -0
  70. package/lib/styles/user-input.css +140 -0
  71. package/package.json +53 -0
  72. package/umd/chat-icon.f032be1d.svg +1 -0
  73. package/umd/close-icon.3faa3158.png +0 -0
  74. package/umd/image.6779a2a6.png +0 -0
  75. package/umd/logo-no-bg.4d881dc9.svg +1 -0
  76. package/umd/main.8da8d3c4.css +5 -0
  77. package/umd/main.8da8d3c4.css.map +1 -0
  78. package/umd/notification.aa8f8c40.mp3 +0 -0
  79. package/umd/pioneer.js +6684 -0
  80. package/umd/pioneer.min.js +11 -0
  81. package/umd/pioneer.min.js.map +1 -0
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _propTypes = _interopRequireDefault(require("prop-types"));
6
+ var _react = _interopRequireWildcard(require("react"));
7
+ var _ChatWindow = _interopRequireDefault(require("./ChatWindow"));
8
+ var _logoNoBg = _interopRequireDefault(require("./../assets/logo-no-bg.svg"));
9
+ var _notification = _interopRequireDefault(require("./../assets/sounds/notification.mp3"));
10
+ var _closeIcon = _interopRequireDefault(require("./../assets/close-icon.png"));
11
+ 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); }
12
+ 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; }
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
14
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
15
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
16
+ var Launcher = /*#__PURE__*/function (_Component) {
17
+ _inheritsLoose(Launcher, _Component);
18
+ function Launcher() {
19
+ var _this;
20
+ _this = _Component.call(this) || this;
21
+ _this.state = {
22
+ launcherIcon: _logoNoBg["default"],
23
+ isOpen: false
24
+ };
25
+ return _this;
26
+ }
27
+ var _proto = Launcher.prototype;
28
+ _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
29
+ if (this.props.mute) {
30
+ return;
31
+ }
32
+ var nextMessage = nextProps.messageList[nextProps.messageList.length - 1];
33
+ var isIncoming = (nextMessage || {}).author === 'them';
34
+ var isNew = nextProps.messageList.length > this.props.messageList.length;
35
+ if (isIncoming && isNew) {
36
+ this.playIncomingMessageSound();
37
+ }
38
+ };
39
+ _proto.playIncomingMessageSound = function playIncomingMessageSound() {
40
+ var audio = new Audio(_notification["default"]);
41
+ audio.play();
42
+ };
43
+ _proto.handleClick = function handleClick() {
44
+ if (this.props.handleClick !== undefined) {
45
+ this.props.handleClick();
46
+ } else {
47
+ this.setState({
48
+ isOpen: !this.state.isOpen
49
+ });
50
+ }
51
+ };
52
+ _proto.render = function render() {
53
+ var isOpen = this.props.hasOwnProperty('isOpen') ? this.props.isOpen : this.state.isOpen;
54
+ var classList = ['sc-launcher', isOpen ? 'opened' : ''];
55
+ return /*#__PURE__*/_react["default"].createElement("div", {
56
+ id: "sc-launcher"
57
+ }, /*#__PURE__*/_react["default"].createElement("div", {
58
+ className: classList.join(' '),
59
+ onClick: this.handleClick.bind(this)
60
+ }, /*#__PURE__*/_react["default"].createElement(MessageCount, {
61
+ count: this.props.newMessagesCount,
62
+ isOpen: isOpen
63
+ }), /*#__PURE__*/_react["default"].createElement("img", {
64
+ className: 'sc-open-icon',
65
+ src: _closeIcon["default"]
66
+ }), /*#__PURE__*/_react["default"].createElement("img", {
67
+ className: 'sc-closed-icon',
68
+ src: _logoNoBg["default"]
69
+ })), /*#__PURE__*/_react["default"].createElement(_ChatWindow["default"], {
70
+ messageList: this.props.messageList,
71
+ onUserInputSubmit: this.props.onMessageWasSent,
72
+ onFilesSelected: this.props.onFilesSelected,
73
+ agentProfile: this.props.agentProfile,
74
+ isOpen: isOpen,
75
+ onClose: this.handleClick.bind(this),
76
+ showEmoji: this.props.showEmoji
77
+ }));
78
+ };
79
+ return Launcher;
80
+ }(_react.Component);
81
+ var MessageCount = function MessageCount(props) {
82
+ if (props.count === 0 || props.isOpen === true) {
83
+ return null;
84
+ }
85
+ return /*#__PURE__*/_react["default"].createElement("div", {
86
+ className: 'sc-new-messages-count'
87
+ }, props.count);
88
+ };
89
+ Launcher.propTypes = process.env.NODE_ENV !== "production" ? {
90
+ onMessageWasReceived: _propTypes["default"].func,
91
+ onMessageWasSent: _propTypes["default"].func,
92
+ newMessagesCount: _propTypes["default"].number,
93
+ isOpen: _propTypes["default"].bool,
94
+ handleClick: _propTypes["default"].func,
95
+ messageList: _propTypes["default"].arrayOf(_propTypes["default"].object),
96
+ mute: _propTypes["default"].bool,
97
+ showEmoji: _propTypes["default"].bool
98
+ } : {};
99
+ Launcher.defaultProps = {
100
+ newMessagesCount: 0,
101
+ showEmoji: true
102
+ };
103
+ var _default = Launcher;
104
+ exports["default"] = _default;
105
+ module.exports = exports.default;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _ramda = require("ramda");
6
+ var _react = _interopRequireWildcard(require("react"));
7
+ var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _classnames = _interopRequireDefault(require("classnames"));
9
+ var _ChatWindow = _interopRequireDefault(require("./ChatWindow"));
10
+ var _logoNoBg = _interopRequireDefault(require("../assets/logo-no-bg.svg"));
11
+ var _closeIcon = _interopRequireDefault(require("../assets/close-icon.png"));
12
+ var _notification = _interopRequireDefault(require("../assets/sounds/notification.mp3"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
14
+ 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); }
15
+ 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; }
16
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+ function LauncherNew(props) {
18
+ var isOpen = props.isOpen,
19
+ onClick = props.onClick,
20
+ mute = props.mute,
21
+ showEmoji = props.showEmoji,
22
+ agentProfile = props.agentProfile,
23
+ messageList = props.messageList,
24
+ newMessagesCount = props.newMessagesCount,
25
+ onMessageWasSent = props.onMessageWasSent,
26
+ onFilesSelected = props.onFilesSelected,
27
+ fileUpload = props.fileUpload,
28
+ pinMessage = props.pinMessage,
29
+ onPinMessage = props.onPinMessage,
30
+ placeholder = props.placeholder;
31
+ var defaultState = {
32
+ isOpen: false,
33
+ messageList: messageList
34
+ };
35
+ var _useState = (0, _react.useState)(defaultState),
36
+ state = _useState[0],
37
+ setState = _useState[1];
38
+ (0, _react.useEffect)(function () {
39
+ setState(function (state) {
40
+ return _extends({}, state, {
41
+ isOpen: isOpen
42
+ });
43
+ });
44
+ }, [isOpen]);
45
+ (0, _react.useEffect)(function () {
46
+ var prevMessageListLength = (0, _ramda.pipe)((0, _ramda.prop)('messageList'), _ramda.length)(state);
47
+ var massageListLength = (0, _ramda.length)(messageList);
48
+ var isIncoming = (0, _ramda.pipe)(_ramda.last, (0, _ramda.prop)('author'), (0, _ramda.equals)('them'))(messageList);
49
+ var isNew = massageListLength > prevMessageListLength;
50
+ if (isIncoming && isNew) {
51
+ if (!mute) {
52
+ playIncomingMessageSound();
53
+ }
54
+ setState(function (state) {
55
+ return _extends({}, state, {
56
+ messageList: messageList
57
+ });
58
+ });
59
+ }
60
+ }, [messageList]);
61
+ function playIncomingMessageSound() {
62
+ var audio = new Audio(_notification["default"]);
63
+ audio.play();
64
+ }
65
+ function handleClick() {
66
+ if (onClick) {
67
+ onClick();
68
+ } else {
69
+ setState(function (state) {
70
+ return _extends({}, state, {
71
+ isOpen: !state.isOpen
72
+ });
73
+ });
74
+ }
75
+ }
76
+ return /*#__PURE__*/_react["default"].createElement("div", {
77
+ id: "sc-launcher"
78
+ }, /*#__PURE__*/_react["default"].createElement("div", {
79
+ className: (0, _classnames["default"])('sc-launcher', {
80
+ 'opened': state.isOpen
81
+ }),
82
+ onClick: handleClick
83
+ }, /*#__PURE__*/_react["default"].createElement(MessageCount, {
84
+ count: newMessagesCount,
85
+ isOpen: state.isOpen
86
+ }), /*#__PURE__*/_react["default"].createElement("img", {
87
+ className: 'sc-open-icon',
88
+ src: _closeIcon["default"]
89
+ }), /*#__PURE__*/_react["default"].createElement("img", {
90
+ className: 'sc-closed-icon',
91
+ src: _logoNoBg["default"]
92
+ })), /*#__PURE__*/_react["default"].createElement(_ChatWindow["default"], {
93
+ messageList: messageList,
94
+ onUserInputSubmit: onMessageWasSent,
95
+ onFilesSelected: onFilesSelected,
96
+ agentProfile: agentProfile,
97
+ isOpen: state.isOpen,
98
+ onClose: onClick,
99
+ showEmoji: showEmoji,
100
+ fileUpload: fileUpload,
101
+ pinMessage: pinMessage,
102
+ onPinMessage: onPinMessage,
103
+ placeholder: placeholder
104
+ }));
105
+ }
106
+ var MessageCount = function MessageCount(_ref) {
107
+ var count = _ref.count,
108
+ isOpen = _ref.isOpen;
109
+ if (count === 0 || isOpen === true) return null;
110
+ return /*#__PURE__*/_react["default"].createElement("div", {
111
+ className: "sc-new-messages-count"
112
+ }, count);
113
+ };
114
+ LauncherNew.propTypes = process.env.NODE_ENV !== "production" ? {
115
+ isOpen: _propTypes["default"].bool,
116
+ onClick: _propTypes["default"].func,
117
+ mute: _propTypes["default"].bool,
118
+ showEmoji: _propTypes["default"].bool,
119
+ messageList: _propTypes["default"].arrayOf(_propTypes["default"].object),
120
+ newMessagesCount: _propTypes["default"].number,
121
+ onMessageWasSent: _propTypes["default"].func,
122
+ onMessageWasReceived: _propTypes["default"].func,
123
+ fileUpload: _propTypes["default"].bool,
124
+ pinMessage: _propTypes["default"].object,
125
+ onPinMessage: _propTypes["default"].func,
126
+ placeholder: _propTypes["default"].string
127
+ } : {};
128
+ LauncherNew.defaultProps = {
129
+ isOpen: false,
130
+ mute: false,
131
+ showEmoji: true,
132
+ messageList: [],
133
+ newMessagesCount: 0,
134
+ fileUpload: true,
135
+ placeholder: 'Write a reply...'
136
+ };
137
+ var _default = LauncherNew;
138
+ exports["default"] = _default;
139
+ module.exports = exports.default;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _ramda = require("ramda");
6
+ var _react = _interopRequireWildcard(require("react"));
7
+ var _Messages = _interopRequireDefault(require("./Messages"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
9
+ 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
+ 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
+ function MessageList(props) {
12
+ var element = (0, _react.useRef)(null);
13
+ var elementCurrent = (0, _ramda.prop)('current', element);
14
+ (0, _react.useEffect)(function () {
15
+ if (elementCurrent) {
16
+ elementCurrent.scrollTop = elementCurrent.scrollHeight;
17
+ }
18
+ }, [props]);
19
+ return /*#__PURE__*/_react["default"].createElement("div", {
20
+ className: "sc-message-list",
21
+ ref: element
22
+ }, props.messages.map(function (message, i) {
23
+ return /*#__PURE__*/_react["default"].createElement(_Messages["default"], {
24
+ message: message,
25
+ key: i
26
+ });
27
+ }));
28
+ }
29
+ var _default = MessageList;
30
+ exports["default"] = _default;
31
+ module.exports = exports.default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _react = _interopRequireDefault(require("react"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
7
+ var EmojiMessage = function EmojiMessage(props) {
8
+ return /*#__PURE__*/_react["default"].createElement("div", {
9
+ className: "sc-message--emoji"
10
+ }, props.data.emoji);
11
+ };
12
+ var _default = EmojiMessage;
13
+ exports["default"] = _default;
14
+ module.exports = exports.default;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _FileIcon = _interopRequireDefault(require("./../icons/FileIcon"));
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
8
+ var FileMessage = function FileMessage(props) {
9
+ return /*#__PURE__*/_react["default"].createElement("a", {
10
+ className: "sc-message--file",
11
+ href: props.data.url,
12
+ download: props.data.fileName
13
+ }, /*#__PURE__*/_react["default"].createElement(_FileIcon["default"], null), /*#__PURE__*/_react["default"].createElement("p", null, props.data.fileName));
14
+ };
15
+ var _default = FileMessage;
16
+ exports["default"] = _default;
17
+ module.exports = exports.default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _reactLinkify = _interopRequireDefault(require("react-linkify"));
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
8
+ var TextMessage = function TextMessage(props) {
9
+ return /*#__PURE__*/_react["default"].createElement("div", {
10
+ className: "sc-message--text"
11
+ }, /*#__PURE__*/_react["default"].createElement(_reactLinkify["default"], {
12
+ properties: {
13
+ target: '_blank'
14
+ }
15
+ }, props.data.text));
16
+ };
17
+ var _default = TextMessage;
18
+ exports["default"] = _default;
19
+ module.exports = exports.default;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _ramda = require("ramda");
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _classnames = _interopRequireDefault(require("classnames"));
8
+ var _TextMessage = _interopRequireDefault(require("./TextMessage"));
9
+ var _EmojiMessage = _interopRequireDefault(require("./EmojiMessage"));
10
+ var _FileMessage = _interopRequireDefault(require("./FileMessage"));
11
+ var _chatIcon = _interopRequireDefault(require("./../../assets/chat-icon.svg"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+ function Message(_ref) {
14
+ var message = _ref.message;
15
+ var type = (0, _ramda.prop)('type', message);
16
+ var author = (0, _ramda.prop)('author', message);
17
+ var me = (0, _ramda.equals)(author, 'me');
18
+ function renderMessageOfType(type) {
19
+ switch (type) {
20
+ case 'text':
21
+ return /*#__PURE__*/_react["default"].createElement(_TextMessage["default"], message);
22
+ case 'emoji':
23
+ return /*#__PURE__*/_react["default"].createElement(_EmojiMessage["default"], message);
24
+ case 'file':
25
+ return /*#__PURE__*/_react["default"].createElement(_FileMessage["default"], message);
26
+ default:
27
+ console.error("Attempting to load message with unsupported file type '" + type + "'");
28
+ }
29
+ }
30
+ return /*#__PURE__*/_react["default"].createElement("div", {
31
+ className: "sc-message"
32
+ }, /*#__PURE__*/_react["default"].createElement("div", {
33
+ className: (0, _classnames["default"])('sc-message--content', {
34
+ 'sent': me
35
+ }, {
36
+ 'received': !me
37
+ })
38
+ }, /*#__PURE__*/_react["default"].createElement("div", {
39
+ className: "sc-message--avatar",
40
+ style: {
41
+ backgroundImage: "url(" + _chatIcon["default"] + ")"
42
+ }
43
+ }), renderMessageOfType(type)));
44
+ }
45
+ var _default = Message;
46
+ exports["default"] = _default;
47
+ module.exports = exports.default;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _ramda = require("ramda");
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _image = _interopRequireDefault(require("../assets/image.png"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
10
+ function PinMessage(_ref) {
11
+ var pinMessage = _ref.pinMessage,
12
+ onPinMessage = _ref.onPinMessage;
13
+ var image = (0, _ramda.propOr)(_image["default"], 'imageUrl', pinMessage);
14
+ var title = (0, _ramda.pipe)((0, _ramda.prop)('title'), (0, _ramda.ifElse)(function (item) {
15
+ return (0, _ramda.length)(item) > 34;
16
+ }, function (item) {
17
+ return item.slice(0, 34) + "...";
18
+ }, function (item) {
19
+ return item;
20
+ }))(pinMessage);
21
+ var text = (0, _ramda.pipe)((0, _ramda.prop)('text'), (0, _ramda.ifElse)(function (item) {
22
+ return (0, _ramda.length)(item) > 50;
23
+ }, function (item) {
24
+ return item.slice(0, 50) + "...";
25
+ }, function (item) {
26
+ return item;
27
+ }))(pinMessage);
28
+ return /*#__PURE__*/_react["default"].createElement("div", {
29
+ className: "sc-pin--message",
30
+ onClick: function onClick() {
31
+ return onPinMessage(pinMessage);
32
+ }
33
+ }, /*#__PURE__*/_react["default"].createElement("img", {
34
+ className: "sc-pin--message--img",
35
+ src: image,
36
+ alt: ""
37
+ }), /*#__PURE__*/_react["default"].createElement("div", {
38
+ className: "sc-pin--message--desc"
39
+ }, /*#__PURE__*/_react["default"].createElement("div", {
40
+ className: "sc-pin--message--title"
41
+ }, title), /*#__PURE__*/_react["default"].createElement("div", null, text)));
42
+ }
43
+ PinMessage.propTypes = process.env.NODE_ENV !== "production" ? {
44
+ pinMessage: _propTypes["default"].object,
45
+ onPinMessage: _propTypes["default"].func
46
+ } : {};
47
+ var _default = PinMessage;
48
+ exports["default"] = _default;
49
+ module.exports = exports.default;
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _propTypes = _interopRequireDefault(require("prop-types"));
6
+ var _react = _interopRequireWildcard(require("react"));
7
+ var _SendIcon = _interopRequireDefault(require("./icons/SendIcon"));
8
+ var _FileIcon = _interopRequireDefault(require("./icons/FileIcon"));
9
+ var _EmojiIcon = _interopRequireDefault(require("./icons/EmojiIcon"));
10
+ var _PopupWindow = _interopRequireDefault(require("./popups/PopupWindow"));
11
+ var _EmojiPicker = _interopRequireDefault(require("./emoji-picker/EmojiPicker"));
12
+ 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); }
13
+ 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; }
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
16
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
17
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
18
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
20
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
21
+ var UserInput = /*#__PURE__*/function (_Component) {
22
+ _inheritsLoose(UserInput, _Component);
23
+ function UserInput() {
24
+ var _this;
25
+ _this = _Component.call(this) || this;
26
+ _defineProperty(_assertThisInitialized(_this), "toggleEmojiPicker", function (e) {
27
+ e.preventDefault();
28
+ if (!_this.state.emojiPickerIsOpen) {
29
+ _this.setState({
30
+ emojiPickerIsOpen: true
31
+ });
32
+ }
33
+ });
34
+ _defineProperty(_assertThisInitialized(_this), "closeEmojiPicker", function (e) {
35
+ if (_this.emojiPickerButton.contains(e.target)) {
36
+ e.stopPropagation();
37
+ e.preventDefault();
38
+ }
39
+ _this.setState({
40
+ emojiPickerIsOpen: false
41
+ });
42
+ });
43
+ _defineProperty(_assertThisInitialized(_this), "_handleEmojiPicked", function (emoji) {
44
+ _this.setState({
45
+ emojiPickerIsOpen: false
46
+ });
47
+ if (_this.state.inputHasText) {
48
+ _this.userInput.innerHTML += emoji;
49
+ } else {
50
+ _this.props.onSubmit({
51
+ author: 'me',
52
+ type: 'emoji',
53
+ data: {
54
+ emoji: emoji
55
+ }
56
+ });
57
+ }
58
+ });
59
+ _defineProperty(_assertThisInitialized(_this), "handleEmojiFilterChange", function (event) {
60
+ var emojiFilter = event.target.value;
61
+ _this.setState({
62
+ emojiFilter: emojiFilter
63
+ });
64
+ });
65
+ _defineProperty(_assertThisInitialized(_this), "_renderEmojiPopup", function () {
66
+ return /*#__PURE__*/_react["default"].createElement(_PopupWindow["default"], {
67
+ isOpen: _this.state.emojiPickerIsOpen,
68
+ onClickedOutside: _this.closeEmojiPicker,
69
+ onInputChange: _this.handleEmojiFilterChange
70
+ }, /*#__PURE__*/_react["default"].createElement(_EmojiPicker["default"], {
71
+ onEmojiPicked: _this._handleEmojiPicked,
72
+ filter: _this.state.emojiFilter
73
+ }));
74
+ });
75
+ _this.state = {
76
+ inputActive: false,
77
+ inputHasText: false,
78
+ emojiPickerIsOpen: false,
79
+ emojiFilter: ''
80
+ };
81
+ return _this;
82
+ }
83
+ var _proto = UserInput.prototype;
84
+ _proto.componentDidMount = function componentDidMount() {
85
+ this.emojiPickerButton = document.querySelector('#sc-emoji-picker-button');
86
+ };
87
+ _proto.handleKeyDown = function handleKeyDown(event) {
88
+ if (event.keyCode === 13 && !event.shiftKey) {
89
+ return this._submitText(event);
90
+ }
91
+ };
92
+ _proto.handleKeyUp = function handleKeyUp(event) {
93
+ var inputHasText = event.target.innerHTML.length !== 0 && event.target.innerText !== '\n';
94
+ this.setState({
95
+ inputHasText: inputHasText
96
+ });
97
+ };
98
+ _proto._showFilePicker = function _showFilePicker() {
99
+ this._fileUploadButton.click();
100
+ };
101
+ _proto._submitText = function _submitText(event) {
102
+ event.preventDefault();
103
+ var text = this.userInput.textContent;
104
+ if (text && text.length > 0) {
105
+ this.props.onSubmit({
106
+ author: 'me',
107
+ type: 'text',
108
+ data: {
109
+ text: text
110
+ }
111
+ });
112
+ this.userInput.innerHTML = '';
113
+ }
114
+ };
115
+ _proto._onFilesSelected = function _onFilesSelected(event) {
116
+ if (event.target.files && event.target.files.length > 0) {
117
+ this.props.onFilesSelected(event.target.files);
118
+ }
119
+ };
120
+ _proto._renderSendOrFileIcon = function _renderSendOrFileIcon() {
121
+ var _this2 = this;
122
+ if (!this.props.fileUpload) {
123
+ return /*#__PURE__*/_react["default"].createElement("div", {
124
+ className: "sc-user-input--button"
125
+ }, /*#__PURE__*/_react["default"].createElement(_SendIcon["default"], {
126
+ onClick: this._submitText.bind(this)
127
+ }));
128
+ }
129
+ if (this.state.inputHasText) {
130
+ return /*#__PURE__*/_react["default"].createElement("div", {
131
+ className: "sc-user-input--button"
132
+ }, /*#__PURE__*/_react["default"].createElement(_SendIcon["default"], {
133
+ onClick: this._submitText.bind(this)
134
+ }));
135
+ }
136
+ return /*#__PURE__*/_react["default"].createElement("div", {
137
+ className: "sc-user-input--button"
138
+ }, /*#__PURE__*/_react["default"].createElement(_FileIcon["default"], {
139
+ onClick: this._showFilePicker.bind(this)
140
+ }), /*#__PURE__*/_react["default"].createElement("input", {
141
+ type: "file",
142
+ name: "files[]",
143
+ multiple: true,
144
+ ref: function ref(e) {
145
+ _this2._fileUploadButton = e;
146
+ },
147
+ onChange: this._onFilesSelected.bind(this)
148
+ }));
149
+ };
150
+ _proto.render = function render() {
151
+ var _this3 = this;
152
+ var _this$state = this.state,
153
+ emojiPickerIsOpen = _this$state.emojiPickerIsOpen,
154
+ inputActive = _this$state.inputActive;
155
+ return /*#__PURE__*/_react["default"].createElement("form", {
156
+ className: "sc-user-input " + (inputActive ? 'active' : '')
157
+ }, /*#__PURE__*/_react["default"].createElement("div", {
158
+ role: "button",
159
+ tabIndex: "0",
160
+ onFocus: function onFocus() {
161
+ _this3.setState({
162
+ inputActive: true
163
+ });
164
+ },
165
+ onBlur: function onBlur() {
166
+ _this3.setState({
167
+ inputActive: false
168
+ });
169
+ },
170
+ ref: function ref(e) {
171
+ _this3.userInput = e;
172
+ },
173
+ onKeyDown: this.handleKeyDown.bind(this),
174
+ onKeyUp: this.handleKeyUp.bind(this),
175
+ contentEditable: "true",
176
+ placeholder: this.props.placeholder,
177
+ className: "sc-user-input--text"
178
+ }), /*#__PURE__*/_react["default"].createElement("div", {
179
+ className: "sc-user-input--buttons"
180
+ }, /*#__PURE__*/_react["default"].createElement("div", {
181
+ className: "sc-user-input--button"
182
+ }), /*#__PURE__*/_react["default"].createElement("div", {
183
+ className: "sc-user-input--button"
184
+ }, this.props.showEmoji && /*#__PURE__*/_react["default"].createElement(_EmojiIcon["default"], {
185
+ onClick: this.toggleEmojiPicker,
186
+ isActive: emojiPickerIsOpen,
187
+ tooltip: this._renderEmojiPopup()
188
+ })), this._renderSendOrFileIcon()));
189
+ };
190
+ return UserInput;
191
+ }(_react.Component);
192
+ UserInput.propTypes = process.env.NODE_ENV !== "production" ? {
193
+ onSubmit: _propTypes["default"].func.isRequired,
194
+ onFilesSelected: _propTypes["default"].func.isRequired,
195
+ showEmoji: _propTypes["default"].bool
196
+ } : {};
197
+ var _default = UserInput;
198
+ exports["default"] = _default;
199
+ module.exports = exports.default;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _emojiJs = _interopRequireDefault(require("emoji-js"));
7
+ var _emojiData = _interopRequireDefault(require("./emojiData"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
9
+ var emojiConvertor = new _emojiJs["default"]();
10
+ emojiConvertor.init_env();
11
+ var EmojiPicker = function EmojiPicker(_ref) {
12
+ var onEmojiPicked = _ref.onEmojiPicked,
13
+ filter = _ref.filter;
14
+ return /*#__PURE__*/_react["default"].createElement("div", {
15
+ className: "sc-emoji-picker"
16
+ }, _emojiData["default"].map(function (category) {
17
+ var filteredEmojis = category.emojis.filter(function (_ref2) {
18
+ var name = _ref2.name;
19
+ return name.includes(filter);
20
+ });
21
+ return /*#__PURE__*/_react["default"].createElement("div", {
22
+ className: "sc-emoji-picker--category",
23
+ key: category.name
24
+ }, filteredEmojis.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
25
+ className: "sc-emoji-picker--category-title"
26
+ }, category.name), filteredEmojis.map(function (_ref3) {
27
+ var _char = _ref3["char"],
28
+ _name = _ref3._name;
29
+ return /*#__PURE__*/_react["default"].createElement("span", {
30
+ key: _char,
31
+ className: "sc-emoji-picker--emoji",
32
+ onClick: function onClick() {
33
+ return onEmojiPicked(_char);
34
+ }
35
+ }, _char);
36
+ }));
37
+ }));
38
+ };
39
+ var _default = EmojiPicker;
40
+ exports["default"] = _default;
41
+ module.exports = exports.default;