@bigbinary/neeto-molecules 1.16.3 → 1.17.0
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/dist/Onboarding.js +181 -9
- package/dist/Onboarding.js.map +1 -1
- package/dist/ProductEmbed.js +235 -102
- package/dist/ProductEmbed.js.map +1 -1
- package/dist/Settings.js +5 -2
- package/dist/Settings.js.map +1 -1
- package/dist/cjs/Onboarding.js +180 -7
- package/dist/cjs/Onboarding.js.map +1 -1
- package/dist/cjs/ProductEmbed.js +231 -98
- package/dist/cjs/ProductEmbed.js.map +1 -1
- package/dist/cjs/Settings.js +5 -2
- package/dist/cjs/Settings.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/en.json +9 -0
- package/types/Onboarding.d.ts +38 -108
- package/types/ProductEmbed.d.ts +1 -0
- package/types/Settings.d.ts +1 -0
- package/dist/ShareRecording.js +0 -218
- package/dist/ShareRecording.js.map +0 -1
- package/dist/cjs/ShareRecording.js +0 -224
- package/dist/cjs/ShareRecording.js.map +0 -1
- package/types/ShareRecording.d.ts +0 -35
package/types/Onboarding.d.ts
CHANGED
|
@@ -1,133 +1,63 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
description: string;
|
|
6
|
-
buttonProps: ButtonProps;
|
|
7
|
-
className: string;
|
|
2
|
+
interface OnboardingComponent {
|
|
3
|
+
element: React.ReactNode;
|
|
4
|
+
label: string;
|
|
8
5
|
}
|
|
9
|
-
;
|
|
10
6
|
export
|
|
11
7
|
/**
|
|
12
8
|
*
|
|
13
|
-
*
|
|
9
|
+
* The Onboarding component facilitates a smooth onboarding flow. It comprises
|
|
14
10
|
*
|
|
15
|
-
*
|
|
11
|
+
* three primary screens:
|
|
16
12
|
*
|
|
17
|
-
*
|
|
13
|
+
* Additionally, you can enhance the onboarding experience by passing custom
|
|
18
14
|
*
|
|
19
|
-
*
|
|
20
|
-
* WelcomeScreen,
|
|
21
|
-
* CompletedScreen,
|
|
22
|
-
* HelpScreen,
|
|
23
|
-
* } from "@bigbinary/neeto-molecules/Onboarding";
|
|
24
|
-
*
|
|
25
|
-
* const Onboarding = () => {
|
|
26
|
-
* const [currentStep, setCurrentStep] = useState(ONBOARDING_STEPS.WELCOME);
|
|
27
|
-
*
|
|
28
|
-
* return (
|
|
29
|
-
* <>
|
|
30
|
-
* {currentStep === ONBOARDING_STEPS.WELCOME && (
|
|
31
|
-
* <WelcomeScreen
|
|
32
|
-
* title="Welcome to neetoDesk"
|
|
33
|
-
* description="Let's customize neetoDesk so that it meets your needs."
|
|
34
|
-
* />
|
|
35
|
-
* )}
|
|
36
|
-
* {currentStep === ONBOARDING_STEPS.COMPLETED && (
|
|
37
|
-
* <CompletedScreen
|
|
38
|
-
* title="Your neetoDesk is ready."
|
|
39
|
-
* description="If you have any question at any time you can click on the help icon on the left hand side and have a 'live chat' with us."
|
|
40
|
-
* buttonProps={{ label: "Start using neetoDesk" }}
|
|
41
|
-
* />
|
|
42
|
-
* )}
|
|
43
|
-
* {currentStep === ONBOARDING_STEPS.HELP && <HelpScreen />}
|
|
44
|
-
* </>
|
|
45
|
-
* );
|
|
46
|
-
* };
|
|
47
|
-
* @endexample
|
|
48
|
-
*/
|
|
49
|
-
const WelcomeScreen: React.FC<OnboardingScreen>;
|
|
50
|
-
export
|
|
51
|
-
/**
|
|
15
|
+
* components using the onboardingSteps prop. These custom components will be
|
|
52
16
|
*
|
|
53
|
-
*
|
|
17
|
+
* rendered between the WelcomeScreen and HelpScreen, allowing for a more
|
|
54
18
|
*
|
|
55
|
-
*
|
|
19
|
+
* customized onboarding process.
|
|
56
20
|
*
|
|
57
21
|
* @example
|
|
58
22
|
*
|
|
59
|
-
* import
|
|
60
|
-
* WelcomeScreen,
|
|
61
|
-
* CompletedScreen,
|
|
62
|
-
* HelpScreen,
|
|
63
|
-
* } from "@bigbinary/neeto-molecules/Onboarding";
|
|
23
|
+
* import Onboarding from "@bigbinary/neeto-molecules/Onboarding";
|
|
64
24
|
*
|
|
65
25
|
* const Onboarding = () => {
|
|
66
|
-
* const [currentStep, setCurrentStep] = useState(
|
|
67
|
-
*
|
|
68
|
-
* return (
|
|
69
|
-
* <>
|
|
70
|
-
* {currentStep === ONBOARDING_STEPS.WELCOME && (
|
|
71
|
-
* <WelcomeScreen
|
|
72
|
-
* title="Welcome to neetoDesk"
|
|
73
|
-
* description="Let's customize neetoDesk so that it meets your needs."
|
|
74
|
-
* />
|
|
75
|
-
* )}
|
|
76
|
-
* {currentStep === ONBOARDING_STEPS.COMPLETED && (
|
|
77
|
-
* <CompletedScreen
|
|
78
|
-
* title="Your neetoDesk is ready."
|
|
79
|
-
* description="If you have any question at any time you can click on the help icon on the left hand side and have a 'live chat' with us."
|
|
80
|
-
* buttonProps={{ label: "Start using neetoDesk" }}
|
|
81
|
-
* />
|
|
82
|
-
* )}
|
|
83
|
-
* {currentStep === ONBOARDING_STEPS.HELP && <HelpScreen />}
|
|
84
|
-
* </>
|
|
85
|
-
* );
|
|
86
|
-
* };
|
|
87
|
-
* @endexample
|
|
88
|
-
*/
|
|
89
|
-
const CompletedScreen: React.FC<{
|
|
90
|
-
children: React.ReactNode;
|
|
91
|
-
}> & OnboardingScreen;
|
|
92
|
-
export
|
|
93
|
-
/**
|
|
94
|
-
*
|
|
95
|
-
* HelpScreen is used to show a help screen in the onboarding flow of neeto.
|
|
96
|
-
*
|
|
97
|
-
* @example
|
|
98
|
-
*
|
|
99
|
-
* import {
|
|
100
|
-
* WelcomeScreen,
|
|
101
|
-
* CompletedScreen,
|
|
102
|
-
* HelpScreen,
|
|
103
|
-
* } from "@bigbinary/neeto-molecules/Onboarding";
|
|
26
|
+
* const [currentStep, setCurrentStep] = useState(0);
|
|
104
27
|
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
28
|
+
* const CustomComponent = () => {
|
|
29
|
+
* return (
|
|
30
|
+
* <div>
|
|
31
|
+
* <h1>Custom Component</h1>
|
|
32
|
+
* </div>
|
|
33
|
+
* );
|
|
34
|
+
* };
|
|
107
35
|
*
|
|
108
36
|
* return (
|
|
109
37
|
* <>
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
38
|
+
* <Onboarding
|
|
39
|
+
* currentStep={currentStep}
|
|
40
|
+
* setCurrentStep={setCurrentStep}
|
|
41
|
+
* completeButtonProps={{
|
|
42
|
+
* onClick: () => {
|
|
43
|
+
* console.log("Onboarding completed");
|
|
44
|
+
* },
|
|
45
|
+
* }}
|
|
46
|
+
* onboardingSteps={[
|
|
47
|
+
* {
|
|
48
|
+
* label: "Custom Component",
|
|
49
|
+
* element: <CustomComponent />,
|
|
50
|
+
* },
|
|
51
|
+
* ]}
|
|
52
|
+
* />
|
|
124
53
|
* </>
|
|
125
54
|
* );
|
|
126
55
|
* };
|
|
127
56
|
* @endexample
|
|
128
57
|
*/
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
58
|
+
const Onboarding: React.FC<{
|
|
59
|
+
currentStep: number;
|
|
60
|
+
completeButtonProps: Object;
|
|
61
|
+
setCurrentStep: React.Dispatch<React.SetStateAction<number>>;
|
|
62
|
+
onboardingSteps?: OnboardingComponent[];
|
|
133
63
|
}>;
|
package/types/ProductEmbed.d.ts
CHANGED
package/types/Settings.d.ts
CHANGED
package/dist/ShareRecording.js
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
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 { Tooltip, Typography, Checkbox, Input, Modal, Spinner, Button } from '@bigbinary/neetoui';
|
|
7
|
-
import { useTranslation } from 'react-i18next';
|
|
8
|
-
import { n } from './inject-css-c86de496.js';
|
|
9
|
-
import { buildUrl } from '@bigbinary/neeto-commons-frontend/utils';
|
|
10
|
-
import { not } from 'ramda';
|
|
11
|
-
import CopyToClipboardButton from './CopyToClipboardButton.js';
|
|
12
|
-
import 'classnames';
|
|
13
|
-
import '@bigbinary/neeto-commons-frontend/utils/general';
|
|
14
|
-
import '@bigbinary/neeto-icons';
|
|
15
|
-
|
|
16
|
-
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}";
|
|
17
|
-
n(css,{});
|
|
18
|
-
|
|
19
|
-
var ONE_SECOND = 1;
|
|
20
|
-
var ONE_MINUTE = 60 * ONE_SECOND;
|
|
21
|
-
var ONE_HOUR = 60 * ONE_MINUTE;
|
|
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
|
-
function ownKeys$1(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; }
|
|
52
|
-
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
53
|
-
var ShareModalBody = function ShareModalBody(_ref) {
|
|
54
|
-
var recordingUrl = _ref.recordingUrl,
|
|
55
|
-
totalDuration = _ref.totalDuration,
|
|
56
|
-
getCurrentTimestamp = _ref.getCurrentTimestamp,
|
|
57
|
-
isOpen = _ref.isOpen;
|
|
58
|
-
var _useTranslation = useTranslation(),
|
|
59
|
-
t = _useTranslation.t;
|
|
60
|
-
var currentTimestamp = getCurrentTimestamp();
|
|
61
|
-
var _useState = useState(""),
|
|
62
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
63
|
-
shareLink = _useState2[0],
|
|
64
|
-
setShareLink = _useState2[1];
|
|
65
|
-
var _useState3 = useState(currentTimestamp),
|
|
66
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
67
|
-
currentPlaybackTime = _useState4[0],
|
|
68
|
-
setCurrentPlaybackTime = _useState4[1];
|
|
69
|
-
var _useState5 = useState(currentTimestamp > 0),
|
|
70
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
71
|
-
isPlaybackTimeCheckboxChecked = _useState6[0],
|
|
72
|
-
setIsPlaybackTimeCheckboxChecked = _useState6[1];
|
|
73
|
-
var _getTimeValues = getTimeValues(currentPlaybackTime),
|
|
74
|
-
hour = _getTimeValues.hour,
|
|
75
|
-
minute = _getTimeValues.minute,
|
|
76
|
-
second = _getTimeValues.second;
|
|
77
|
-
var handlePlaybackTimestampChange = function handlePlaybackTimestampChange(_ref2) {
|
|
78
|
-
var valueInSec = _ref2.valueInSec,
|
|
79
|
-
offset = _ref2.offset;
|
|
80
|
-
var intendedTimeInSec = currentPlaybackTime + valueInSec - offset;
|
|
81
|
-
setCurrentPlaybackTime(Math.min(intendedTimeInSec, totalDuration));
|
|
82
|
-
};
|
|
83
|
-
var renderTimeInput = function renderTimeInput(_ref3) {
|
|
84
|
-
var value = _ref3.value,
|
|
85
|
-
onChange = _ref3.onChange,
|
|
86
|
-
max = _ref3.max;
|
|
87
|
-
return /*#__PURE__*/React__default.createElement(Input, {
|
|
88
|
-
max: max,
|
|
89
|
-
onChange: onChange,
|
|
90
|
-
value: value,
|
|
91
|
-
className: "w-14",
|
|
92
|
-
disabled: not(isPlaybackTimeCheckboxChecked),
|
|
93
|
-
min: 0,
|
|
94
|
-
type: "number",
|
|
95
|
-
unlimitedChars: false
|
|
96
|
-
});
|
|
97
|
-
};
|
|
98
|
-
useEffect(function () {
|
|
99
|
-
if (not(isOpen)) return;
|
|
100
|
-
setIsPlaybackTimeCheckboxChecked(currentTimestamp > 0);
|
|
101
|
-
setCurrentPlaybackTime(currentTimestamp > 0 ? currentTimestamp : 0);
|
|
102
|
-
}, [isOpen]);
|
|
103
|
-
useEffect(function () {
|
|
104
|
-
var playbackUrl = buildUrl(recordingUrl, _objectSpread$1({}, isPlaybackTimeCheckboxChecked && currentPlaybackTime > 0 && {
|
|
105
|
-
time: currentPlaybackTime
|
|
106
|
-
}));
|
|
107
|
-
setShareLink(playbackUrl);
|
|
108
|
-
}, [recordingUrl, isPlaybackTimeCheckboxChecked, currentPlaybackTime]);
|
|
109
|
-
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
|
|
110
|
-
className: "neeto-ui-bg-gray-100 neeto-ui-rounded-lg mb-3 flex items-center justify-between p-2"
|
|
111
|
-
}, /*#__PURE__*/React__default.createElement(Tooltip, {
|
|
112
|
-
content: shareLink
|
|
113
|
-
}, /*#__PURE__*/React__default.createElement(Typography, {
|
|
114
|
-
className: "truncate",
|
|
115
|
-
style: "body2"
|
|
116
|
-
}, shareLink)), /*#__PURE__*/React__default.createElement(CopyToClipboardButton, {
|
|
117
|
-
className: "flex-shrink-0",
|
|
118
|
-
style: "secondary",
|
|
119
|
-
tooltipContent: t("neetoMolecules.shareRecording.tooltipContent"),
|
|
120
|
-
value: shareLink,
|
|
121
|
-
successTooltipContent: t("neetoMolecules.shareRecording.successTooltipContent")
|
|
122
|
-
})), /*#__PURE__*/React__default.createElement("div", {
|
|
123
|
-
className: "flex items-center gap-x-2"
|
|
124
|
-
}, /*#__PURE__*/React__default.createElement(Checkbox, {
|
|
125
|
-
checked: isPlaybackTimeCheckboxChecked,
|
|
126
|
-
className: "grow-0",
|
|
127
|
-
"data-cy": "time-checkbox",
|
|
128
|
-
label: t("neetoMolecules.shareRecording.checkboxLabel"),
|
|
129
|
-
onChange: function onChange(_ref4) {
|
|
130
|
-
var checked = _ref4.target.checked;
|
|
131
|
-
return setIsPlaybackTimeCheckboxChecked(checked);
|
|
132
|
-
}
|
|
133
|
-
}), /*#__PURE__*/React__default.createElement("div", {
|
|
134
|
-
className: "neeto-molecules-share-timestamp-input flex items-center gap-x-3",
|
|
135
|
-
"data-cy": "time-inputs"
|
|
136
|
-
}, shouldRenderHoursInput(totalDuration) && renderTimeInput({
|
|
137
|
-
max: 99,
|
|
138
|
-
value: padZero(hour),
|
|
139
|
-
onChange: function onChange(e) {
|
|
140
|
-
return handlePlaybackTimestampChange({
|
|
141
|
-
valueInSec: e.target.value * ONE_HOUR,
|
|
142
|
-
offset: hour * ONE_HOUR
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
}), renderTimeInput({
|
|
146
|
-
max: 59,
|
|
147
|
-
value: padZero(minute),
|
|
148
|
-
onChange: function onChange(e) {
|
|
149
|
-
return handlePlaybackTimestampChange({
|
|
150
|
-
valueInSec: e.target.value * ONE_MINUTE,
|
|
151
|
-
offset: minute * ONE_MINUTE
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
}), renderTimeInput({
|
|
155
|
-
max: 59,
|
|
156
|
-
value: padZero(second),
|
|
157
|
-
onChange: function onChange(e) {
|
|
158
|
-
return handlePlaybackTimestampChange({
|
|
159
|
-
valueInSec: e.target.value * ONE_SECOND,
|
|
160
|
-
offset: second * ONE_SECOND
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
}))));
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
var _excluded = ["recordingUrl", "totalDuration", "getCurrentTimestamp", "buttonProps", "isLoading"];
|
|
167
|
-
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; }
|
|
168
|
-
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; }
|
|
169
|
-
var ShareRecording = function ShareRecording(_ref) {
|
|
170
|
-
var recordingUrl = _ref.recordingUrl,
|
|
171
|
-
totalDuration = _ref.totalDuration,
|
|
172
|
-
getCurrentTimestamp = _ref.getCurrentTimestamp,
|
|
173
|
-
_ref$buttonProps = _ref.buttonProps,
|
|
174
|
-
buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
|
|
175
|
-
_ref$isLoading = _ref.isLoading,
|
|
176
|
-
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
|
|
177
|
-
otherProps = _objectWithoutProperties(_ref, _excluded);
|
|
178
|
-
var _useTranslation = useTranslation(),
|
|
179
|
-
t = _useTranslation.t;
|
|
180
|
-
var _useState = useState(false),
|
|
181
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
182
|
-
isOpen = _useState2[0],
|
|
183
|
-
setIsOpen = _useState2[1];
|
|
184
|
-
var handleClick = function handleClick() {
|
|
185
|
-
var _buttonProps$onClick;
|
|
186
|
-
setIsOpen(true);
|
|
187
|
-
buttonProps === null || buttonProps === void 0 ? void 0 : (_buttonProps$onClick = buttonProps.onClick) === null || _buttonProps$onClick === void 0 ? void 0 : _buttonProps$onClick.call(buttonProps);
|
|
188
|
-
};
|
|
189
|
-
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Modal, _extends({}, _objectSpread({
|
|
190
|
-
isOpen: isOpen
|
|
191
|
-
}, otherProps), {
|
|
192
|
-
"data-cy": "share-modal",
|
|
193
|
-
size: "large",
|
|
194
|
-
onClose: function onClose() {
|
|
195
|
-
return setIsOpen(false);
|
|
196
|
-
}
|
|
197
|
-
}), /*#__PURE__*/React__default.createElement(Modal.Header, null, /*#__PURE__*/React__default.createElement(Typography, {
|
|
198
|
-
style: "h2"
|
|
199
|
-
}, t("neetoMolecules.shareRecording.title"))), /*#__PURE__*/React__default.createElement(Modal.Body, {
|
|
200
|
-
className: "flex flex-col space-y-2"
|
|
201
|
-
}, isLoading ? /*#__PURE__*/React__default.createElement(Spinner, {
|
|
202
|
-
className: "mx-auto"
|
|
203
|
-
}) : /*#__PURE__*/React__default.createElement(ShareModalBody, {
|
|
204
|
-
getCurrentTimestamp: getCurrentTimestamp,
|
|
205
|
-
isOpen: isOpen,
|
|
206
|
-
recordingUrl: recordingUrl,
|
|
207
|
-
totalDuration: totalDuration
|
|
208
|
-
}))), /*#__PURE__*/React__default.createElement(Button, _extends({
|
|
209
|
-
"data-cy": "share-button",
|
|
210
|
-
label: t("neetoMolecules.common.actions.share"),
|
|
211
|
-
style: "secondary"
|
|
212
|
-
}, buttonProps, {
|
|
213
|
-
onClick: handleClick
|
|
214
|
-
})));
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
export { ShareRecording as default };
|
|
218
|
-
//# sourceMappingURL=ShareRecording.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ShareRecording.js","sources":["../src/components/ShareRecording/constants.js","../src/components/ShareRecording/utils.js","../src/components/ShareRecording/ShareModalBody.jsx","../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 { Typography, Input, Checkbox, Tooltip } from \"neetoui\";\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 ShareModalBody = ({\n recordingUrl,\n totalDuration,\n getCurrentTimestamp,\n isOpen,\n}) => {\n const { t } = useTranslation();\n const currentTimestamp = getCurrentTimestamp();\n\n const [shareLink, setShareLink] = useState(\"\");\n const [currentPlaybackTime, setCurrentPlaybackTime] =\n useState(currentTimestamp);\n\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 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 && { time: currentPlaybackTime }),\n });\n\n setShareLink(playbackUrl);\n }, [recordingUrl, isPlaybackTimeCheckboxChecked, currentPlaybackTime]);\n\n return (\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 tooltipContent={t(\"neetoMolecules.shareRecording.tooltipContent\")}\n value={shareLink}\n successTooltipContent={t(\n \"neetoMolecules.shareRecording.successTooltipContent\"\n )}\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};\n\nexport default ShareModalBody;\n","import React, { useState } from \"react\";\n\nimport { Modal, Typography, Spinner, Button } from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\n\nimport \"./share-modal.scss\";\nimport ShareModalBody from \"./ShareModalBody\";\n\nconst ShareRecording = ({\n recordingUrl,\n totalDuration,\n getCurrentTimestamp,\n buttonProps = {},\n isLoading = false,\n ...otherProps\n}) => {\n const { t } = useTranslation();\n\n const [isOpen, setIsOpen] = useState(false);\n\n const handleClick = () => {\n setIsOpen(true);\n buttonProps?.onClick?.();\n };\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 <ShareModalBody\n {...{ getCurrentTimestamp, isOpen, recordingUrl, totalDuration }}\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 * A function that returns current playback time of the recorded content in seconds.\n */\n getCurrentTimestamp: PropTypes.func.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","ShareModalBody","_ref","recordingUrl","totalDuration","getCurrentTimestamp","isOpen","_useTranslation","useTranslation","t","currentTimestamp","_useState","useState","_useState2","_slicedToArray","shareLink","setShareLink","_useState3","_useState4","currentPlaybackTime","setCurrentPlaybackTime","_useState5","_useState6","isPlaybackTimeCheckboxChecked","setIsPlaybackTimeCheckboxChecked","_getTimeValues","handlePlaybackTimestampChange","_ref2","valueInSec","offset","intendedTimeInSec","min","renderTimeInput","_ref3","value","onChange","max","React","createElement","Input","className","disabled","not","type","unlimitedChars","useEffect","playbackUrl","buildUrl","_objectSpread","time","Fragment","Tooltip","content","Typography","style","CopyToClipboardButton","tooltipContent","successTooltipContent","Checkbox","checked","label","_ref4","target","e","ShareRecording","_ref$buttonProps","buttonProps","_ref$isLoading","isLoading","otherProps","_objectWithoutProperties","_excluded","setIsOpen","handleClick","_buttonProps$onClick","onClick","call","Modal","_extends","size","onClose","Header","Body","Spinner","Button"],"mappings":"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"}
|