@bigbinary/neeto-molecules 1.15.34 → 1.15.35

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.
@@ -0,0 +1,198 @@
1
+ import { _ as _extends } from './extends-093996c9.js';
2
+ import { _ as _defineProperty } from './defineProperty-549061a7.js';
3
+ import { _ as _slicedToArray } from './slicedToArray-b4278ecd.js';
4
+ import { _ as _objectWithoutProperties } from './objectWithoutProperties-a0edb288.js';
5
+ import React__default, { useState, useEffect } from 'react';
6
+ import { buildUrl } from '@bigbinary/neeto-commons-frontend/utils';
7
+ import { Modal, Typography, Spinner, Tooltip, Checkbox, Button, Input } from '@bigbinary/neetoui';
8
+ import { not } from 'ramda';
9
+ import { useTranslation } from 'react-i18next';
10
+ import CopyToClipboardButton from './CopyToClipboardButton.js';
11
+ import { n } from './inject-css-c86de496.js';
12
+ import 'classnames';
13
+ import '@bigbinary/neeto-commons-frontend/utils/general';
14
+ import '@bigbinary/neeto-icons';
15
+
16
+ var ONE_SECOND = 1;
17
+ var ONE_MINUTE = 60 * ONE_SECOND;
18
+ var ONE_HOUR = 60 * ONE_MINUTE;
19
+
20
+ var css = ".neeto-molecules-share-timestamp-input .neeto-ui-input__wrapper{position:relative}.neeto-molecules-share-timestamp-input .neeto-ui-input__wrapper:not(:last-child):after{content:\":\";font-weight:bolder;position:absolute;right:-8px;top:4px}";
21
+ n(css,{});
22
+
23
+ var getTimeValues = function getTimeValues(playbackTimeInSec) {
24
+ var hour = Math.floor(playbackTimeInSec / ONE_HOUR);
25
+ playbackTimeInSec = playbackTimeInSec % ONE_HOUR;
26
+ var minute = Math.floor(playbackTimeInSec / ONE_MINUTE);
27
+ playbackTimeInSec = playbackTimeInSec % ONE_MINUTE;
28
+ var second = Math.floor(playbackTimeInSec / ONE_SECOND);
29
+ return {
30
+ hour: hour,
31
+ minute: minute,
32
+ second: second
33
+ };
34
+ };
35
+ var padZero = function padZero(number) {
36
+ var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
37
+ var string = String(number);
38
+ var threshold = Math.pow(10, length - 1);
39
+ if (number < threshold) {
40
+ while (String(threshold).length > string.length) {
41
+ string = "0".concat(number);
42
+ }
43
+ }
44
+ return string;
45
+ };
46
+ var shouldRenderHoursInput = function shouldRenderHoursInput(duration) {
47
+ var hours = Math.floor(duration / ONE_HOUR);
48
+ return hours > 0;
49
+ };
50
+
51
+ var _excluded = ["recordingUrl", "totalDuration", "currentTimestamp", "buttonProps", "isLoading"];
52
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
53
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
54
+ var ShareRecording = function ShareRecording(_ref) {
55
+ var recordingUrl = _ref.recordingUrl,
56
+ totalDuration = _ref.totalDuration,
57
+ currentTimestamp = _ref.currentTimestamp,
58
+ _ref$buttonProps = _ref.buttonProps,
59
+ buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
60
+ _ref$isLoading = _ref.isLoading,
61
+ isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
62
+ otherProps = _objectWithoutProperties(_ref, _excluded);
63
+ var _useTranslation = useTranslation(),
64
+ t = _useTranslation.t;
65
+ var _useState = useState(false),
66
+ _useState2 = _slicedToArray(_useState, 2),
67
+ isOpen = _useState2[0],
68
+ setIsOpen = _useState2[1];
69
+ var _useState3 = useState(""),
70
+ _useState4 = _slicedToArray(_useState3, 2),
71
+ shareLink = _useState4[0],
72
+ setShareLink = _useState4[1];
73
+ var _useState5 = useState(0),
74
+ _useState6 = _slicedToArray(_useState5, 2),
75
+ currentPlaybackTime = _useState6[0],
76
+ setCurrentPlaybackTime = _useState6[1];
77
+ var _useState7 = useState(currentTimestamp > 0),
78
+ _useState8 = _slicedToArray(_useState7, 2),
79
+ isPlaybackTimeCheckboxChecked = _useState8[0],
80
+ setIsPlaybackTimeCheckboxChecked = _useState8[1];
81
+ var _getTimeValues = getTimeValues(currentPlaybackTime),
82
+ hour = _getTimeValues.hour,
83
+ minute = _getTimeValues.minute,
84
+ second = _getTimeValues.second;
85
+ var handlePlaybackTimestampChange = function handlePlaybackTimestampChange(_ref2) {
86
+ var valueInSec = _ref2.valueInSec,
87
+ offset = _ref2.offset;
88
+ var intendedTimeInSec = currentPlaybackTime + valueInSec - offset;
89
+ setCurrentPlaybackTime(Math.min(intendedTimeInSec, totalDuration));
90
+ };
91
+ var handleClick = function handleClick() {
92
+ var _buttonProps$onClick;
93
+ setIsOpen(true);
94
+ buttonProps === null || buttonProps === void 0 ? void 0 : (_buttonProps$onClick = buttonProps.onClick) === null || _buttonProps$onClick === void 0 ? void 0 : _buttonProps$onClick.call(buttonProps);
95
+ };
96
+ var renderTimeInput = function renderTimeInput(_ref3) {
97
+ var value = _ref3.value,
98
+ onChange = _ref3.onChange,
99
+ max = _ref3.max;
100
+ return /*#__PURE__*/React__default.createElement(Input, {
101
+ max: max,
102
+ onChange: onChange,
103
+ value: value,
104
+ className: "w-14",
105
+ disabled: not(isPlaybackTimeCheckboxChecked),
106
+ min: 0,
107
+ type: "number",
108
+ unlimitedChars: false
109
+ });
110
+ };
111
+ useEffect(function () {
112
+ if (not(isOpen)) return;
113
+ setIsPlaybackTimeCheckboxChecked(currentTimestamp > 0);
114
+ setCurrentPlaybackTime(currentTimestamp > 0 ? currentTimestamp : 0);
115
+ }, [isOpen]);
116
+ useEffect(function () {
117
+ var playbackUrl = buildUrl(recordingUrl, _objectSpread({}, isPlaybackTimeCheckboxChecked && currentPlaybackTime > 0 && {
118
+ t: currentPlaybackTime
119
+ }));
120
+ setShareLink(playbackUrl);
121
+ }, [recordingUrl, isPlaybackTimeCheckboxChecked, currentPlaybackTime]);
122
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Modal, _extends({}, _objectSpread({
123
+ isOpen: isOpen
124
+ }, otherProps), {
125
+ "data-cy": "share-modal",
126
+ size: "large",
127
+ onClose: function onClose() {
128
+ return setIsOpen(false);
129
+ }
130
+ }), /*#__PURE__*/React__default.createElement(Modal.Header, null, /*#__PURE__*/React__default.createElement(Typography, {
131
+ style: "h2"
132
+ }, t("neetoMolecules.shareRecording.title"))), /*#__PURE__*/React__default.createElement(Modal.Body, {
133
+ className: "flex flex-col space-y-2"
134
+ }, isLoading ? /*#__PURE__*/React__default.createElement(Spinner, {
135
+ className: "mx-auto"
136
+ }) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
137
+ className: "neeto-ui-bg-gray-100 neeto-ui-rounded-lg mb-3 flex items-center justify-between p-2"
138
+ }, /*#__PURE__*/React__default.createElement(Tooltip, {
139
+ content: shareLink
140
+ }, /*#__PURE__*/React__default.createElement(Typography, {
141
+ className: "truncate",
142
+ style: "body2"
143
+ }, shareLink)), /*#__PURE__*/React__default.createElement(CopyToClipboardButton, {
144
+ className: "flex-shrink-0",
145
+ style: "secondary",
146
+ value: shareLink
147
+ })), /*#__PURE__*/React__default.createElement("div", {
148
+ className: "flex items-center gap-x-2"
149
+ }, /*#__PURE__*/React__default.createElement(Checkbox, {
150
+ checked: isPlaybackTimeCheckboxChecked,
151
+ className: "grow-0",
152
+ "data-cy": "time-checkbox",
153
+ label: t("neetoMolecules.shareRecording.checkboxLabel"),
154
+ onChange: function onChange(_ref4) {
155
+ var checked = _ref4.target.checked;
156
+ return setIsPlaybackTimeCheckboxChecked(checked);
157
+ }
158
+ }), /*#__PURE__*/React__default.createElement("div", {
159
+ className: "neeto-molecules-share-timestamp-input flex items-center gap-x-3",
160
+ "data-cy": "time-inputs"
161
+ }, shouldRenderHoursInput(totalDuration) && renderTimeInput({
162
+ max: 99,
163
+ value: padZero(hour),
164
+ onChange: function onChange(e) {
165
+ return handlePlaybackTimestampChange({
166
+ valueInSec: e.target.value * ONE_HOUR,
167
+ offset: hour * ONE_HOUR
168
+ });
169
+ }
170
+ }), renderTimeInput({
171
+ max: 59,
172
+ value: padZero(minute),
173
+ onChange: function onChange(e) {
174
+ return handlePlaybackTimestampChange({
175
+ valueInSec: e.target.value * ONE_MINUTE,
176
+ offset: minute * ONE_MINUTE
177
+ });
178
+ }
179
+ }), renderTimeInput({
180
+ max: 59,
181
+ value: padZero(second),
182
+ onChange: function onChange(e) {
183
+ return handlePlaybackTimestampChange({
184
+ valueInSec: e.target.value * ONE_SECOND,
185
+ offset: second * ONE_SECOND
186
+ });
187
+ }
188
+ })))))), /*#__PURE__*/React__default.createElement(Button, _extends({
189
+ "data-cy": "share-button",
190
+ label: t("neetoMolecules.common.actions.share"),
191
+ style: "secondary"
192
+ }, buttonProps, {
193
+ onClick: handleClick
194
+ })));
195
+ };
196
+
197
+ export { ShareRecording as default };
198
+ //# sourceMappingURL=ShareRecording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareRecording.js","sources":["../src/components/ShareRecording/constants.js","../src/components/ShareRecording/utils.js","../src/components/ShareRecording/index.jsx"],"sourcesContent":["export const ONE_SECOND = 1;\nexport const ONE_MINUTE = 60 * ONE_SECOND;\nexport const ONE_HOUR = 60 * ONE_MINUTE;\n","import { ONE_HOUR, ONE_MINUTE, ONE_SECOND } from \"./constants\";\n\nexport const getTimeValues = playbackTimeInSec => {\n const hour = Math.floor(playbackTimeInSec / ONE_HOUR);\n playbackTimeInSec = playbackTimeInSec % ONE_HOUR;\n const minute = Math.floor(playbackTimeInSec / ONE_MINUTE);\n playbackTimeInSec = playbackTimeInSec % ONE_MINUTE;\n const second = Math.floor(playbackTimeInSec / ONE_SECOND);\n\n return { hour, minute, second };\n};\n\nexport const padZero = (number, length = 2) => {\n let string = String(number);\n const threshold = Math.pow(10, length - 1);\n\n if (number < threshold) {\n while (String(threshold).length > string.length) {\n string = `0${number}`;\n }\n }\n\n return string;\n};\n\nexport const shouldRenderHoursInput = duration => {\n const hours = Math.floor(duration / ONE_HOUR);\n\n return hours > 0;\n};\n","import React, { useState, useEffect } from \"react\";\n\nimport { buildUrl } from \"neetocommons/utils\";\nimport {\n Modal,\n Typography,\n Input,\n Checkbox,\n Tooltip,\n Spinner,\n Button,\n} from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { not } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport CopyToClipboardButton from \"components/CopyToClipboardButton\";\n\nimport { ONE_HOUR, ONE_MINUTE, ONE_SECOND } from \"./constants\";\nimport \"./share-modal.scss\";\nimport { getTimeValues, padZero, shouldRenderHoursInput } from \"./utils\";\n\nconst ShareRecording = ({\n recordingUrl,\n totalDuration,\n currentTimestamp,\n buttonProps = {},\n isLoading = false,\n ...otherProps\n}) => {\n const { t } = useTranslation();\n\n const [isOpen, setIsOpen] = useState(false);\n const [shareLink, setShareLink] = useState(\"\");\n const [currentPlaybackTime, setCurrentPlaybackTime] = useState(0);\n const [isPlaybackTimeCheckboxChecked, setIsPlaybackTimeCheckboxChecked] =\n useState(currentTimestamp > 0);\n\n const { hour, minute, second } = getTimeValues(currentPlaybackTime);\n\n const handlePlaybackTimestampChange = ({ valueInSec, offset }) => {\n const intendedTimeInSec = currentPlaybackTime + valueInSec - offset;\n\n setCurrentPlaybackTime(Math.min(intendedTimeInSec, totalDuration));\n };\n\n const handleClick = () => {\n setIsOpen(true);\n buttonProps?.onClick?.();\n };\n\n const renderTimeInput = ({ value, onChange, max }) => (\n <Input\n {...{ max, onChange, value }}\n className=\"w-14\"\n disabled={not(isPlaybackTimeCheckboxChecked)}\n min={0}\n type=\"number\"\n unlimitedChars={false}\n />\n );\n\n useEffect(() => {\n if (not(isOpen)) return;\n\n setIsPlaybackTimeCheckboxChecked(currentTimestamp > 0);\n setCurrentPlaybackTime(currentTimestamp > 0 ? currentTimestamp : 0);\n }, [isOpen]);\n\n useEffect(() => {\n const playbackUrl = buildUrl(recordingUrl, {\n ...(isPlaybackTimeCheckboxChecked &&\n currentPlaybackTime > 0 && { t: currentPlaybackTime }),\n });\n\n setShareLink(playbackUrl);\n }, [recordingUrl, isPlaybackTimeCheckboxChecked, currentPlaybackTime]);\n\n return (\n <>\n <Modal\n {...{ isOpen, ...otherProps }}\n data-cy=\"share-modal\"\n size=\"large\"\n onClose={() => setIsOpen(false)}\n >\n <Modal.Header>\n <Typography style=\"h2\">\n {t(\"neetoMolecules.shareRecording.title\")}\n </Typography>\n </Modal.Header>\n <Modal.Body className=\"flex flex-col space-y-2\">\n {isLoading ? (\n <Spinner className=\"mx-auto\" />\n ) : (\n <>\n <div className=\"neeto-ui-bg-gray-100 neeto-ui-rounded-lg mb-3 flex items-center justify-between p-2\">\n <Tooltip content={shareLink}>\n <Typography className=\"truncate\" style=\"body2\">\n {shareLink}\n </Typography>\n </Tooltip>\n <CopyToClipboardButton\n className=\"flex-shrink-0\"\n style=\"secondary\"\n value={shareLink}\n />\n </div>\n <div className=\"flex items-center gap-x-2\">\n <Checkbox\n checked={isPlaybackTimeCheckboxChecked}\n className=\"grow-0\"\n data-cy=\"time-checkbox\"\n label={t(\"neetoMolecules.shareRecording.checkboxLabel\")}\n onChange={({ target: { checked } }) =>\n setIsPlaybackTimeCheckboxChecked(checked)\n }\n />\n <div\n className=\"neeto-molecules-share-timestamp-input flex items-center gap-x-3\"\n data-cy=\"time-inputs\"\n >\n {shouldRenderHoursInput(totalDuration) &&\n renderTimeInput({\n max: 99,\n value: padZero(hour),\n onChange: e =>\n handlePlaybackTimestampChange({\n valueInSec: e.target.value * ONE_HOUR,\n offset: hour * ONE_HOUR,\n }),\n })}\n {renderTimeInput({\n max: 59,\n value: padZero(minute),\n onChange: e =>\n handlePlaybackTimestampChange({\n valueInSec: e.target.value * ONE_MINUTE,\n offset: minute * ONE_MINUTE,\n }),\n })}\n {renderTimeInput({\n max: 59,\n value: padZero(second),\n onChange: e =>\n handlePlaybackTimestampChange({\n valueInSec: e.target.value * ONE_SECOND,\n offset: second * ONE_SECOND,\n }),\n })}\n </div>\n </div>\n </>\n )}\n </Modal.Body>\n </Modal>\n <Button\n data-cy=\"share-button\"\n label={t(\"neetoMolecules.common.actions.share\")}\n style=\"secondary\"\n {...buttonProps}\n onClick={handleClick}\n />\n </>\n );\n};\n\nShareRecording.propTypes = {\n /**\n * Recording URL used for building the share link.\n */\n recordingUrl: PropTypes.string.isRequired,\n /**\n * Total duration of the content being shared.\n */\n totalDuration: PropTypes.number.isRequired,\n /**\n * Current playback time of the recorded content in seconds.\n */\n currentTimestamp: PropTypes.number.isRequired,\n /**\n * Additional props for the button component.\n */\n buttonProps: PropTypes.object,\n /**\n * Boolean indicating whether content is loading or not.\n */\n isLoading: PropTypes.bool,\n};\n\nexport default ShareRecording;\n"],"names":["ONE_SECOND","ONE_MINUTE","ONE_HOUR","getTimeValues","playbackTimeInSec","hour","Math","floor","minute","second","padZero","number","length","arguments","undefined","string","String","threshold","pow","concat","shouldRenderHoursInput","duration","hours","ShareRecording","_ref","recordingUrl","totalDuration","currentTimestamp","_ref$buttonProps","buttonProps","_ref$isLoading","isLoading","otherProps","_objectWithoutProperties","_excluded","_useTranslation","useTranslation","t","_useState","useState","_useState2","_slicedToArray","isOpen","setIsOpen","_useState3","_useState4","shareLink","setShareLink","_useState5","_useState6","currentPlaybackTime","setCurrentPlaybackTime","_useState7","_useState8","isPlaybackTimeCheckboxChecked","setIsPlaybackTimeCheckboxChecked","_getTimeValues","handlePlaybackTimestampChange","_ref2","valueInSec","offset","intendedTimeInSec","min","handleClick","_buttonProps$onClick","onClick","call","renderTimeInput","_ref3","value","onChange","max","React","createElement","Input","className","disabled","not","type","unlimitedChars","useEffect","playbackUrl","buildUrl","_objectSpread","Fragment","Modal","_extends","size","onClose","Header","Typography","style","Body","Spinner","Tooltip","content","CopyToClipboardButton","Checkbox","checked","label","_ref4","target","e","Button"],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ 'use strict';
2
+
3
+ var _extends = require('./extends-1b35a664.js');
4
+ var defineProperty = require('./defineProperty-886ed289.js');
5
+ var slicedToArray = require('./slicedToArray-f320d9e7.js');
6
+ var objectWithoutProperties = require('./objectWithoutProperties-2fed2d7d.js');
7
+ var React = require('react');
8
+ var utils = require('@bigbinary/neeto-commons-frontend/utils');
9
+ var neetoui = require('@bigbinary/neetoui');
10
+ var ramda = require('ramda');
11
+ var reactI18next = require('react-i18next');
12
+ var CopyToClipboardButton = require('./CopyToClipboardButton.js');
13
+ var injectCss = require('./inject-css-80a5faa3.js');
14
+ require('classnames');
15
+ require('@bigbinary/neeto-commons-frontend/utils/general');
16
+ require('@bigbinary/neeto-icons');
17
+
18
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
+
20
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
+
22
+ var ONE_SECOND = 1;
23
+ var ONE_MINUTE = 60 * ONE_SECOND;
24
+ var ONE_HOUR = 60 * ONE_MINUTE;
25
+
26
+ var css = ".neeto-molecules-share-timestamp-input .neeto-ui-input__wrapper{position:relative}.neeto-molecules-share-timestamp-input .neeto-ui-input__wrapper:not(:last-child):after{content:\":\";font-weight:bolder;position:absolute;right:-8px;top:4px}";
27
+ injectCss.n(css,{});
28
+
29
+ var getTimeValues = function getTimeValues(playbackTimeInSec) {
30
+ var hour = Math.floor(playbackTimeInSec / ONE_HOUR);
31
+ playbackTimeInSec = playbackTimeInSec % ONE_HOUR;
32
+ var minute = Math.floor(playbackTimeInSec / ONE_MINUTE);
33
+ playbackTimeInSec = playbackTimeInSec % ONE_MINUTE;
34
+ var second = Math.floor(playbackTimeInSec / ONE_SECOND);
35
+ return {
36
+ hour: hour,
37
+ minute: minute,
38
+ second: second
39
+ };
40
+ };
41
+ var padZero = function padZero(number) {
42
+ var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
43
+ var string = String(number);
44
+ var threshold = Math.pow(10, length - 1);
45
+ if (number < threshold) {
46
+ while (String(threshold).length > string.length) {
47
+ string = "0".concat(number);
48
+ }
49
+ }
50
+ return string;
51
+ };
52
+ var shouldRenderHoursInput = function shouldRenderHoursInput(duration) {
53
+ var hours = Math.floor(duration / ONE_HOUR);
54
+ return hours > 0;
55
+ };
56
+
57
+ var _excluded = ["recordingUrl", "totalDuration", "currentTimestamp", "buttonProps", "isLoading"];
58
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
59
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { defineProperty._defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
60
+ var ShareRecording = function ShareRecording(_ref) {
61
+ var recordingUrl = _ref.recordingUrl,
62
+ totalDuration = _ref.totalDuration,
63
+ currentTimestamp = _ref.currentTimestamp,
64
+ _ref$buttonProps = _ref.buttonProps,
65
+ buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
66
+ _ref$isLoading = _ref.isLoading,
67
+ isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
68
+ otherProps = objectWithoutProperties._objectWithoutProperties(_ref, _excluded);
69
+ var _useTranslation = reactI18next.useTranslation(),
70
+ t = _useTranslation.t;
71
+ var _useState = React.useState(false),
72
+ _useState2 = slicedToArray._slicedToArray(_useState, 2),
73
+ isOpen = _useState2[0],
74
+ setIsOpen = _useState2[1];
75
+ var _useState3 = React.useState(""),
76
+ _useState4 = slicedToArray._slicedToArray(_useState3, 2),
77
+ shareLink = _useState4[0],
78
+ setShareLink = _useState4[1];
79
+ var _useState5 = React.useState(0),
80
+ _useState6 = slicedToArray._slicedToArray(_useState5, 2),
81
+ currentPlaybackTime = _useState6[0],
82
+ setCurrentPlaybackTime = _useState6[1];
83
+ var _useState7 = React.useState(currentTimestamp > 0),
84
+ _useState8 = slicedToArray._slicedToArray(_useState7, 2),
85
+ isPlaybackTimeCheckboxChecked = _useState8[0],
86
+ setIsPlaybackTimeCheckboxChecked = _useState8[1];
87
+ var _getTimeValues = getTimeValues(currentPlaybackTime),
88
+ hour = _getTimeValues.hour,
89
+ minute = _getTimeValues.minute,
90
+ second = _getTimeValues.second;
91
+ var handlePlaybackTimestampChange = function handlePlaybackTimestampChange(_ref2) {
92
+ var valueInSec = _ref2.valueInSec,
93
+ offset = _ref2.offset;
94
+ var intendedTimeInSec = currentPlaybackTime + valueInSec - offset;
95
+ setCurrentPlaybackTime(Math.min(intendedTimeInSec, totalDuration));
96
+ };
97
+ var handleClick = function handleClick() {
98
+ var _buttonProps$onClick;
99
+ setIsOpen(true);
100
+ buttonProps === null || buttonProps === void 0 ? void 0 : (_buttonProps$onClick = buttonProps.onClick) === null || _buttonProps$onClick === void 0 ? void 0 : _buttonProps$onClick.call(buttonProps);
101
+ };
102
+ var renderTimeInput = function renderTimeInput(_ref3) {
103
+ var value = _ref3.value,
104
+ onChange = _ref3.onChange,
105
+ max = _ref3.max;
106
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Input, {
107
+ max: max,
108
+ onChange: onChange,
109
+ value: value,
110
+ className: "w-14",
111
+ disabled: ramda.not(isPlaybackTimeCheckboxChecked),
112
+ min: 0,
113
+ type: "number",
114
+ unlimitedChars: false
115
+ });
116
+ };
117
+ React.useEffect(function () {
118
+ if (ramda.not(isOpen)) return;
119
+ setIsPlaybackTimeCheckboxChecked(currentTimestamp > 0);
120
+ setCurrentPlaybackTime(currentTimestamp > 0 ? currentTimestamp : 0);
121
+ }, [isOpen]);
122
+ React.useEffect(function () {
123
+ var playbackUrl = utils.buildUrl(recordingUrl, _objectSpread({}, isPlaybackTimeCheckboxChecked && currentPlaybackTime > 0 && {
124
+ t: currentPlaybackTime
125
+ }));
126
+ setShareLink(playbackUrl);
127
+ }, [recordingUrl, isPlaybackTimeCheckboxChecked, currentPlaybackTime]);
128
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Modal, _extends._extends({}, _objectSpread({
129
+ isOpen: isOpen
130
+ }, otherProps), {
131
+ "data-cy": "share-modal",
132
+ size: "large",
133
+ onClose: function onClose() {
134
+ return setIsOpen(false);
135
+ }
136
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
137
+ style: "h2"
138
+ }, t("neetoMolecules.shareRecording.title"))), /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Body, {
139
+ className: "flex flex-col space-y-2"
140
+ }, isLoading ? /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, {
141
+ className: "mx-auto"
142
+ }) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
143
+ className: "neeto-ui-bg-gray-100 neeto-ui-rounded-lg mb-3 flex items-center justify-between p-2"
144
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Tooltip, {
145
+ content: shareLink
146
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
147
+ className: "truncate",
148
+ style: "body2"
149
+ }, shareLink)), /*#__PURE__*/React__default["default"].createElement(CopyToClipboardButton, {
150
+ className: "flex-shrink-0",
151
+ style: "secondary",
152
+ value: shareLink
153
+ })), /*#__PURE__*/React__default["default"].createElement("div", {
154
+ className: "flex items-center gap-x-2"
155
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Checkbox, {
156
+ checked: isPlaybackTimeCheckboxChecked,
157
+ className: "grow-0",
158
+ "data-cy": "time-checkbox",
159
+ label: t("neetoMolecules.shareRecording.checkboxLabel"),
160
+ onChange: function onChange(_ref4) {
161
+ var checked = _ref4.target.checked;
162
+ return setIsPlaybackTimeCheckboxChecked(checked);
163
+ }
164
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
165
+ className: "neeto-molecules-share-timestamp-input flex items-center gap-x-3",
166
+ "data-cy": "time-inputs"
167
+ }, shouldRenderHoursInput(totalDuration) && renderTimeInput({
168
+ max: 99,
169
+ value: padZero(hour),
170
+ onChange: function onChange(e) {
171
+ return handlePlaybackTimestampChange({
172
+ valueInSec: e.target.value * ONE_HOUR,
173
+ offset: hour * ONE_HOUR
174
+ });
175
+ }
176
+ }), renderTimeInput({
177
+ max: 59,
178
+ value: padZero(minute),
179
+ onChange: function onChange(e) {
180
+ return handlePlaybackTimestampChange({
181
+ valueInSec: e.target.value * ONE_MINUTE,
182
+ offset: minute * ONE_MINUTE
183
+ });
184
+ }
185
+ }), renderTimeInput({
186
+ max: 59,
187
+ value: padZero(second),
188
+ onChange: function onChange(e) {
189
+ return handlePlaybackTimestampChange({
190
+ valueInSec: e.target.value * ONE_SECOND,
191
+ offset: second * ONE_SECOND
192
+ });
193
+ }
194
+ })))))), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, _extends._extends({
195
+ "data-cy": "share-button",
196
+ label: t("neetoMolecules.common.actions.share"),
197
+ style: "secondary"
198
+ }, buttonProps, {
199
+ onClick: handleClick
200
+ })));
201
+ };
202
+
203
+ module.exports = ShareRecording;
204
+ //# sourceMappingURL=ShareRecording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareRecording.js","sources":["../../src/components/ShareRecording/constants.js","../../src/components/ShareRecording/utils.js","../../src/components/ShareRecording/index.jsx"],"sourcesContent":["export const ONE_SECOND = 1;\nexport const ONE_MINUTE = 60 * ONE_SECOND;\nexport const ONE_HOUR = 60 * ONE_MINUTE;\n","import { ONE_HOUR, ONE_MINUTE, ONE_SECOND } from \"./constants\";\n\nexport const getTimeValues = playbackTimeInSec => {\n const hour = Math.floor(playbackTimeInSec / ONE_HOUR);\n playbackTimeInSec = playbackTimeInSec % ONE_HOUR;\n const minute = Math.floor(playbackTimeInSec / ONE_MINUTE);\n playbackTimeInSec = playbackTimeInSec % ONE_MINUTE;\n const second = Math.floor(playbackTimeInSec / ONE_SECOND);\n\n return { hour, minute, second };\n};\n\nexport const padZero = (number, length = 2) => {\n let string = String(number);\n const threshold = Math.pow(10, length - 1);\n\n if (number < threshold) {\n while (String(threshold).length > string.length) {\n string = `0${number}`;\n }\n }\n\n return string;\n};\n\nexport const shouldRenderHoursInput = duration => {\n const hours = Math.floor(duration / ONE_HOUR);\n\n return hours > 0;\n};\n","import React, { useState, useEffect } from \"react\";\n\nimport { buildUrl } from \"neetocommons/utils\";\nimport {\n Modal,\n Typography,\n Input,\n Checkbox,\n Tooltip,\n Spinner,\n Button,\n} from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { not } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport CopyToClipboardButton from \"components/CopyToClipboardButton\";\n\nimport { ONE_HOUR, ONE_MINUTE, ONE_SECOND } from \"./constants\";\nimport \"./share-modal.scss\";\nimport { getTimeValues, padZero, shouldRenderHoursInput } from \"./utils\";\n\nconst ShareRecording = ({\n recordingUrl,\n totalDuration,\n currentTimestamp,\n buttonProps = {},\n isLoading = false,\n ...otherProps\n}) => {\n const { t } = useTranslation();\n\n const [isOpen, setIsOpen] = useState(false);\n const [shareLink, setShareLink] = useState(\"\");\n const [currentPlaybackTime, setCurrentPlaybackTime] = useState(0);\n const [isPlaybackTimeCheckboxChecked, setIsPlaybackTimeCheckboxChecked] =\n useState(currentTimestamp > 0);\n\n const { hour, minute, second } = getTimeValues(currentPlaybackTime);\n\n const handlePlaybackTimestampChange = ({ valueInSec, offset }) => {\n const intendedTimeInSec = currentPlaybackTime + valueInSec - offset;\n\n setCurrentPlaybackTime(Math.min(intendedTimeInSec, totalDuration));\n };\n\n const handleClick = () => {\n setIsOpen(true);\n buttonProps?.onClick?.();\n };\n\n const renderTimeInput = ({ value, onChange, max }) => (\n <Input\n {...{ max, onChange, value }}\n className=\"w-14\"\n disabled={not(isPlaybackTimeCheckboxChecked)}\n min={0}\n type=\"number\"\n unlimitedChars={false}\n />\n );\n\n useEffect(() => {\n if (not(isOpen)) return;\n\n setIsPlaybackTimeCheckboxChecked(currentTimestamp > 0);\n setCurrentPlaybackTime(currentTimestamp > 0 ? currentTimestamp : 0);\n }, [isOpen]);\n\n useEffect(() => {\n const playbackUrl = buildUrl(recordingUrl, {\n ...(isPlaybackTimeCheckboxChecked &&\n currentPlaybackTime > 0 && { t: currentPlaybackTime }),\n });\n\n setShareLink(playbackUrl);\n }, [recordingUrl, isPlaybackTimeCheckboxChecked, currentPlaybackTime]);\n\n return (\n <>\n <Modal\n {...{ isOpen, ...otherProps }}\n data-cy=\"share-modal\"\n size=\"large\"\n onClose={() => setIsOpen(false)}\n >\n <Modal.Header>\n <Typography style=\"h2\">\n {t(\"neetoMolecules.shareRecording.title\")}\n </Typography>\n </Modal.Header>\n <Modal.Body className=\"flex flex-col space-y-2\">\n {isLoading ? (\n <Spinner className=\"mx-auto\" />\n ) : (\n <>\n <div className=\"neeto-ui-bg-gray-100 neeto-ui-rounded-lg mb-3 flex items-center justify-between p-2\">\n <Tooltip content={shareLink}>\n <Typography className=\"truncate\" style=\"body2\">\n {shareLink}\n </Typography>\n </Tooltip>\n <CopyToClipboardButton\n className=\"flex-shrink-0\"\n style=\"secondary\"\n value={shareLink}\n />\n </div>\n <div className=\"flex items-center gap-x-2\">\n <Checkbox\n checked={isPlaybackTimeCheckboxChecked}\n className=\"grow-0\"\n data-cy=\"time-checkbox\"\n label={t(\"neetoMolecules.shareRecording.checkboxLabel\")}\n onChange={({ target: { checked } }) =>\n setIsPlaybackTimeCheckboxChecked(checked)\n }\n />\n <div\n className=\"neeto-molecules-share-timestamp-input flex items-center gap-x-3\"\n data-cy=\"time-inputs\"\n >\n {shouldRenderHoursInput(totalDuration) &&\n renderTimeInput({\n max: 99,\n value: padZero(hour),\n onChange: e =>\n handlePlaybackTimestampChange({\n valueInSec: e.target.value * ONE_HOUR,\n offset: hour * ONE_HOUR,\n }),\n })}\n {renderTimeInput({\n max: 59,\n value: padZero(minute),\n onChange: e =>\n handlePlaybackTimestampChange({\n valueInSec: e.target.value * ONE_MINUTE,\n offset: minute * ONE_MINUTE,\n }),\n })}\n {renderTimeInput({\n max: 59,\n value: padZero(second),\n onChange: e =>\n handlePlaybackTimestampChange({\n valueInSec: e.target.value * ONE_SECOND,\n offset: second * ONE_SECOND,\n }),\n })}\n </div>\n </div>\n </>\n )}\n </Modal.Body>\n </Modal>\n <Button\n data-cy=\"share-button\"\n label={t(\"neetoMolecules.common.actions.share\")}\n style=\"secondary\"\n {...buttonProps}\n onClick={handleClick}\n />\n </>\n );\n};\n\nShareRecording.propTypes = {\n /**\n * Recording URL used for building the share link.\n */\n recordingUrl: PropTypes.string.isRequired,\n /**\n * Total duration of the content being shared.\n */\n totalDuration: PropTypes.number.isRequired,\n /**\n * Current playback time of the recorded content in seconds.\n */\n currentTimestamp: PropTypes.number.isRequired,\n /**\n * Additional props for the button component.\n */\n buttonProps: PropTypes.object,\n /**\n * Boolean indicating whether content is loading or not.\n */\n isLoading: PropTypes.bool,\n};\n\nexport default ShareRecording;\n"],"names":["ONE_SECOND","ONE_MINUTE","ONE_HOUR","getTimeValues","playbackTimeInSec","hour","Math","floor","minute","second","padZero","number","length","arguments","undefined","string","String","threshold","pow","concat","shouldRenderHoursInput","duration","hours","ShareRecording","_ref","recordingUrl","totalDuration","currentTimestamp","_ref$buttonProps","buttonProps","_ref$isLoading","isLoading","otherProps","_objectWithoutProperties","_excluded","_useTranslation","useTranslation","t","_useState","useState","_useState2","_slicedToArray","isOpen","setIsOpen","_useState3","_useState4","shareLink","setShareLink","_useState5","_useState6","currentPlaybackTime","setCurrentPlaybackTime","_useState7","_useState8","isPlaybackTimeCheckboxChecked","setIsPlaybackTimeCheckboxChecked","_getTimeValues","handlePlaybackTimestampChange","_ref2","valueInSec","offset","intendedTimeInSec","min","handleClick","_buttonProps$onClick","onClick","call","renderTimeInput","_ref3","value","onChange","max","React","createElement","Input","className","disabled","not","type","unlimitedChars","useEffect","playbackUrl","buildUrl","_objectSpread","Fragment","Modal","_extends","size","onClose","Header","Typography","style","Body","Spinner","Tooltip","content","CopyToClipboardButton","Checkbox","checked","label","_ref4","target","e","Button"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-molecules",
3
- "version": "1.15.34",
3
+ "version": "1.15.35",
4
4
  "description": "A package of reusable molecular components for neeto products.",
5
5
  "repository": "git@github.com:bigbinary/neeto-molecules.git",
6
6
  "author": "Amaljith K <amaljith.k@bigbinary.com>",
@@ -29,7 +29,8 @@
29
29
  "archive": "Archive",
30
30
  "unArchive": "Unarchive",
31
31
  "enable": "Enable",
32
- "disable": "Disable"
32
+ "disable": "Disable",
33
+ "share": "Share"
33
34
  },
34
35
  "or": "or",
35
36
  "name": "name",
@@ -762,6 +763,10 @@
762
763
  },
763
764
  "reactions": {
764
765
  "content": "{{groupedNames, anyCase}} reacted."
766
+ },
767
+ "shareRecording": {
768
+ "title": "Share recording",
769
+ "checkboxLabel": "Start playback at"
765
770
  }
766
771
  }
767
772
  }
@@ -0,0 +1,35 @@
1
+ import { ButtonProps } from "@bigbinary/neetoui";
2
+ import React from "react";
3
+ /**
4
+ *
5
+ * The ShareRecording component provides a modal interface for sharing recordings.
6
+ *
7
+ * It includes options for specifying playback timestamps and generates shareable
8
+ *
9
+ * links accordingly. The modal interface allows users to copy the shareable link
10
+ *
11
+ * and adjust playback timestamps.
12
+ *
13
+ * @example
14
+ *
15
+ * <ShareRecording
16
+ * recordingUrl="https://example.com/recording"
17
+ * totalDuration={3600} // Total duration in seconds (e.g., 1 hour)
18
+ * currentTimestamp={300} // Current playback time in seconds
19
+ * buttonProps={{
20
+ * onClick: () => {
21
+ * console.log("Share button has been clicked");
22
+ * },
23
+ * }}
24
+ * isLoading={false}
25
+ * />
26
+ * @endexample
27
+ */
28
+ declare const ShareRecording: React.FC<{
29
+ recordingUrl: string;
30
+ totalDuration: number;
31
+ currentTimestamp: number;
32
+ buttonProps?: ButtonProps;
33
+ isLoading?: boolean;
34
+ }>;
35
+ export default ShareRecording;