@bigbinary/neeto-molecules 5.5.1 → 5.6.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.
@@ -1,7 +1,7 @@
1
1
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
2
  import { useState, useLayoutEffect, useEffect, useMemo, useRef } from 'react';
3
3
  import classnames from 'classnames';
4
- import { isPresent, capitalize, noop, findIndexBy } from '@bigbinary/neeto-cist';
4
+ import { capitalize, isPresent, noop, findIndexBy } from '@bigbinary/neeto-cist';
5
5
  import Stepper from '@bigbinary/neetoui/Stepper';
6
6
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
7
7
  import { globalProps } from '@bigbinary/neeto-commons-frontend/initializers';
@@ -10,18 +10,368 @@ import Typography from '@bigbinary/neetoui/Typography';
10
10
  import { R as ReactConfetti } from './react-confetti-BnGq_LBE.js';
11
11
  import { useTranslation, Trans } from 'react-i18next';
12
12
  import { t } from 'i18next';
13
- import useBreakpoints from '@bigbinary/neeto-commons-frontend/react-utils/useBreakpoints';
14
13
  import RightArrow from '@bigbinary/neeto-icons/RightArrow';
14
+ import Checkbox from '@bigbinary/neetoui/Checkbox';
15
+ import { assoc, dissoc } from 'ramda';
16
+ import Notes from '@bigbinary/neeto-icons/Notes';
17
+ import UserCircle from '@bigbinary/neeto-icons/UserCircle';
18
+ import Email from '@bigbinary/neeto-icons/Email';
19
+ import Input from '@bigbinary/neetoui/Input';
15
20
  import { jsxs, jsx } from 'react/jsx-runtime';
21
+ import { useMutation } from '@tanstack/react-query';
22
+ import axios from 'axios';
23
+ import { BASE_API_V1_URL } from '@bigbinary/neeto-commons-frontend/constants';
24
+ import * as yup from 'yup';
25
+ import useBreakpoints from '@bigbinary/neeto-commons-frontend/react-utils/useBreakpoints';
16
26
  import { n } from './inject-css-C2dztUxs.js';
17
27
  import withT from '@bigbinary/neeto-commons-frontend/react-utils/withT';
18
28
 
29
+ var COMMUNITY_OPTIONS = [{
30
+ key: "slack",
31
+ icon: UserCircle,
32
+ dataTestid: "onboarding-community-slack-checkbox",
33
+ recipientDataTestids: {
34
+ change: "onboarding-community-slack-email-change-button",
35
+ input: "onboarding-community-slack-email-input",
36
+ save: "onboarding-community-slack-email-save-button",
37
+ cancel: "onboarding-community-slack-email-cancel-button"
38
+ }
39
+ }, {
40
+ key: "blog",
41
+ icon: Notes,
42
+ dataTestid: "onboarding-community-blog-checkbox",
43
+ recipientDataTestids: {
44
+ change: "onboarding-community-blog-email-change-button",
45
+ input: "onboarding-community-blog-email-input",
46
+ save: "onboarding-community-blog-email-save-button",
47
+ cancel: "onboarding-community-blog-email-cancel-button"
48
+ }
49
+ }];
50
+
51
+ var EmailRecipient = function EmailRecipient(_ref) {
52
+ var email = _ref.email,
53
+ edit = _ref.edit,
54
+ onStartEditing = _ref.onStartEditing,
55
+ onDraftChange = _ref.onDraftChange,
56
+ onSave = _ref.onSave,
57
+ onCancel = _ref.onCancel,
58
+ recipientKey = _ref.recipientKey,
59
+ inputLabelKey = _ref.inputLabelKey,
60
+ dataTestids = _ref.dataTestids;
61
+ var _useTranslation = useTranslation(),
62
+ t = _useTranslation.t;
63
+ var handleKeyDown = function handleKeyDown(event) {
64
+ if (event.key === "Enter") {
65
+ event.preventDefault();
66
+ onSave();
67
+ }
68
+ if (event.key === "Escape") onCancel();
69
+ };
70
+ if (edit) {
71
+ return /*#__PURE__*/jsxs("div", {
72
+ className: "flex items-start gap-2 ps-6 pt-3",
73
+ children: [/*#__PURE__*/jsx("div", {
74
+ className: "w-72",
75
+ children: /*#__PURE__*/jsx(Input, {
76
+ autoFocus: true,
77
+ "aria-label": t(inputLabelKey),
78
+ "data-testid": dataTestids.input,
79
+ error: edit.error,
80
+ type: "email",
81
+ value: edit.draft,
82
+ onChange: function onChange(event) {
83
+ return onDraftChange(event.target.value);
84
+ },
85
+ onKeyDown: handleKeyDown
86
+ })
87
+ }), /*#__PURE__*/jsx(Button, {
88
+ "data-testid": dataTestids.save,
89
+ label: t("neetoMolecules.common.actions.save"),
90
+ onClick: onSave
91
+ }), /*#__PURE__*/jsx(Button, {
92
+ "data-testid": dataTestids.cancel,
93
+ label: t("neetoMolecules.common.actions.cancel"),
94
+ style: "text",
95
+ onClick: onCancel
96
+ })]
97
+ });
98
+ }
99
+ return /*#__PURE__*/jsxs("div", {
100
+ className: "flex flex-wrap items-center gap-2 ps-6 pt-3",
101
+ children: [/*#__PURE__*/jsx(Email, {
102
+ "aria-hidden": true,
103
+ className: "neeto-ui-text-gray-500",
104
+ size: 16
105
+ }), /*#__PURE__*/jsx(Typography, {
106
+ className: "neeto-ui-text-gray-600",
107
+ style: "body2",
108
+ children: /*#__PURE__*/jsx(Trans, {
109
+ components: {
110
+ strong: /*#__PURE__*/jsx("strong", {
111
+ className: "neeto-ui-text-gray-800"
112
+ })
113
+ },
114
+ i18nKey: recipientKey,
115
+ values: {
116
+ email: email
117
+ }
118
+ })
119
+ }), /*#__PURE__*/jsx(Button, {
120
+ "data-testid": dataTestids.change,
121
+ label: t("neetoMolecules.onboarding.communityScreen.changeButton"),
122
+ size: "small",
123
+ style: "link",
124
+ onClick: onStartEditing
125
+ })]
126
+ });
127
+ };
128
+
129
+ var joinCommunity = function joinCommunity(communityJoin) {
130
+ return axios.post("".concat(BASE_API_V1_URL, "/community_join"), {
131
+ communityJoin: communityJoin
132
+ }, {
133
+ showToastr: false
134
+ });
135
+ };
136
+ var communityApi = {
137
+ joinCommunity: joinCommunity
138
+ };
139
+
140
+ var useJoinCommunity = function useJoinCommunity() {
141
+ return useMutation({
142
+ mutationFn: communityApi.joinCommunity
143
+ });
144
+ };
145
+
146
+ var isValidEmail = function isValidEmail(email) {
147
+ return !!email && yup.string().email().isValidSync(email);
148
+ };
149
+
150
+ function ownKeys$3(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; }
151
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
152
+
153
+ // Tracks the email each option goes to, plus any address being edited, so
154
+ // Continue can pick up a draft the user typed but did not save.
155
+ var useRecipientEmails = function useRecipientEmails(defaultEmail) {
156
+ var _useState = useState({
157
+ slack: defaultEmail,
158
+ blog: defaultEmail
159
+ }),
160
+ _useState2 = _slicedToArray(_useState, 2),
161
+ emails = _useState2[0],
162
+ setEmails = _useState2[1];
163
+
164
+ // { [key]: { draft, error } } for the options whose email field is open.
165
+ var _useState3 = useState({}),
166
+ _useState4 = _slicedToArray(_useState3, 2),
167
+ edits = _useState4[0],
168
+ setEdits = _useState4[1];
169
+ var startEditing = function startEditing(key) {
170
+ return setEdits(assoc(key, {
171
+ draft: emails[key],
172
+ error: ""
173
+ }));
174
+ };
175
+ var changeDraft = function changeDraft(key, draft) {
176
+ return setEdits(assoc(key, {
177
+ draft: draft,
178
+ error: ""
179
+ }));
180
+ };
181
+ var cancel = function cancel(key) {
182
+ return setEdits(dissoc(key));
183
+ };
184
+ var validate = function validate(key) {
185
+ var draft = edits[key].draft.trim();
186
+ return isValidEmail(draft) ? {
187
+ draft: draft
188
+ } : {
189
+ error: t("neetoMolecules.onboarding.communityScreen.invalidEmail")
190
+ };
191
+ };
192
+ var save = function save(key) {
193
+ var _validate = validate(key),
194
+ draft = _validate.draft,
195
+ error = _validate.error;
196
+ if (error) {
197
+ setEdits(assoc(key, _objectSpread$3(_objectSpread$3({}, edits[key]), {}, {
198
+ error: error
199
+ })));
200
+ return;
201
+ }
202
+ setEmails(assoc(key, draft));
203
+ setEdits(dissoc(key));
204
+ };
205
+
206
+ // Applies every open draft of the given options. Returns the final emails,
207
+ // or null when a draft is invalid, after showing its error.
208
+ var applyDrafts = function applyDrafts(keys) {
209
+ var nextEmails = emails;
210
+ var nextEdits = edits;
211
+ keys.filter(function (key) {
212
+ return edits[key];
213
+ }).forEach(function (key) {
214
+ var _validate2 = validate(key),
215
+ draft = _validate2.draft,
216
+ error = _validate2.error;
217
+ if (error) {
218
+ nextEdits = assoc(key, _objectSpread$3(_objectSpread$3({}, edits[key]), {}, {
219
+ error: error
220
+ }), nextEdits);
221
+ } else {
222
+ nextEmails = assoc(key, draft, nextEmails);
223
+ nextEdits = dissoc(key, nextEdits);
224
+ }
225
+ });
226
+ setEmails(nextEmails);
227
+ setEdits(nextEdits);
228
+ var hasInvalidDraft = keys.some(function (key) {
229
+ return nextEdits[key];
230
+ });
231
+ return hasInvalidDraft ? null : nextEmails;
232
+ };
233
+ return {
234
+ emails: emails,
235
+ edits: edits,
236
+ startEditing: startEditing,
237
+ changeDraft: changeDraft,
238
+ cancel: cancel,
239
+ save: save,
240
+ applyDrafts: applyDrafts
241
+ };
242
+ };
243
+
19
244
  var GENERAL_ONBOARDING_STEPS = {
20
245
  WELCOME: "welcome",
246
+ COMMUNITY: "community",
21
247
  HELP: "help",
22
248
  FINISH: "finish"
23
249
  };
24
250
 
251
+ function ownKeys$2(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; }
252
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
253
+ var Community = function Community(_ref) {
254
+ var _globalProps$user, _globalProps$appName;
255
+ var setCurrentStep = _ref.setCurrentStep,
256
+ communityScreenClassName = _ref.communityScreenClassName;
257
+ var _useTranslation = useTranslation(),
258
+ t = _useTranslation.t;
259
+ var _useState = useState({
260
+ slack: true,
261
+ blog: true
262
+ }),
263
+ _useState2 = _slicedToArray(_useState, 2),
264
+ selected = _useState2[0],
265
+ setSelected = _useState2[1];
266
+
267
+ // Both start at the signed-in user's email; each can be changed separately.
268
+ var recipients = useRecipientEmails((_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.email);
269
+ var _useJoinCommunity = useJoinCommunity(),
270
+ joinCommunity = _useJoinCommunity.mutate;
271
+ var appName = capitalize((_globalProps$appName = globalProps.appName) !== null && _globalProps$appName !== void 0 ? _globalProps$appName : "");
272
+ var handleContinue = function handleContinue() {
273
+ var selectedKeys = Object.keys(selected).filter(function (key) {
274
+ return selected[key];
275
+ });
276
+
277
+ // An address typed but not saved still counts; an invalid one keeps the
278
+ // user here with its error showing.
279
+ var emails = recipients.applyDrafts(selectedKeys);
280
+ if (!emails) return;
281
+
282
+ // The Slack invite and blog subscription are both sent by email in the
283
+ // background, so onboarding moves on without waiting for them.
284
+ if (selectedKeys.length > 0) {
285
+ joinCommunity(_objectSpread$2(_objectSpread$2({}, selected), {}, {
286
+ slackEmail: emails.slack,
287
+ blogEmail: emails.blog
288
+ }));
289
+ }
290
+ setCurrentStep(GENERAL_ONBOARDING_STEPS.HELP);
291
+ };
292
+ return /*#__PURE__*/jsxs("div", {
293
+ className: classnames("mx-auto flex w-full max-w-3xl flex-col items-start gap-y-6 px-6 pt-16 pb-6", communityScreenClassName),
294
+ children: [/*#__PURE__*/jsxs("div", {
295
+ className: "space-y-2",
296
+ children: [/*#__PURE__*/jsx(Typography, {
297
+ "data-testid": "onboarding-community-title",
298
+ style: "h1",
299
+ children: t("neetoMolecules.onboarding.communityScreen.title")
300
+ }), /*#__PURE__*/jsx(Typography, {
301
+ "data-testid": "onboarding-community-description",
302
+ style: "body1",
303
+ children: t("neetoMolecules.onboarding.communityScreen.description", {
304
+ appName: appName
305
+ })
306
+ })]
307
+ }), /*#__PURE__*/jsx("div", {
308
+ className: "neeto-ui-rounded-lg neeto-ui-border-gray-200 flex w-full flex-col gap-6 border p-3 lg:p-6",
309
+ children: COMMUNITY_OPTIONS.map(function (_ref2) {
310
+ var key = _ref2.key,
311
+ Icon = _ref2.icon,
312
+ dataTestid = _ref2.dataTestid,
313
+ recipientDataTestids = _ref2.recipientDataTestids;
314
+ return /*#__PURE__*/jsxs("div", {
315
+ className: "w-full",
316
+ children: [/*#__PURE__*/jsx(Checkbox, {
317
+ checked: selected[key],
318
+ "data-testid": dataTestid,
319
+ id: dataTestid,
320
+ labelProps: {
321
+ className: "text-xl font-semibold"
322
+ },
323
+ label: /*#__PURE__*/jsxs("span", {
324
+ className: "flex flex-wrap items-center gap-2",
325
+ children: [t("neetoMolecules.onboarding.communityScreen.".concat(key, ".title"), {
326
+ appName: appName
327
+ }), /*#__PURE__*/jsx(Icon, {
328
+ "aria-hidden": true,
329
+ size: 24
330
+ })]
331
+ }),
332
+ onChange: function onChange(event) {
333
+ setSelected(assoc(key, event.target.checked));
334
+ if (!event.target.checked) recipients.cancel(key);
335
+ }
336
+ }), /*#__PURE__*/jsx(Typography, {
337
+ className: "neeto-ui-text-gray-600 ps-6 pt-2",
338
+ style: "body1",
339
+ children: t("neetoMolecules.onboarding.communityScreen.".concat(key, ".description"))
340
+ }), selected[key] && /*#__PURE__*/jsx(EmailRecipient, {
341
+ dataTestids: recipientDataTestids,
342
+ edit: recipients.edits[key],
343
+ email: recipients.emails[key],
344
+ inputLabelKey: "neetoMolecules.onboarding.communityScreen.".concat(key, ".emailInputLabel"),
345
+ recipientKey: "neetoMolecules.onboarding.communityScreen.".concat(key, ".recipient"),
346
+ onCancel: function onCancel() {
347
+ return recipients.cancel(key);
348
+ },
349
+ onDraftChange: function onDraftChange(draft) {
350
+ return recipients.changeDraft(key, draft);
351
+ },
352
+ onSave: function onSave() {
353
+ return recipients.save(key);
354
+ },
355
+ onStartEditing: function onStartEditing() {
356
+ return recipients.startEditing(key);
357
+ }
358
+ })]
359
+ }, key);
360
+ })
361
+ }), /*#__PURE__*/jsx(Typography, {
362
+ className: "neeto-ui-text-gray-600",
363
+ style: "body2",
364
+ children: t("neetoMolecules.onboarding.communityScreen.unsubscribe")
365
+ }), /*#__PURE__*/jsx(Button, {
366
+ "data-testid": "community-onboarding-continue-button",
367
+ icon: RightArrow,
368
+ iconPosition: "right",
369
+ label: t("neetoMolecules.onboarding.communityScreen.continueButton"),
370
+ onClick: handleContinue
371
+ })]
372
+ });
373
+ };
374
+
25
375
  var HelpScreen = function HelpScreen(_ref) {
26
376
  var setCurrentStep = _ref.setCurrentStep,
27
377
  helpScreenClassName = _ref.helpScreenClassName;
@@ -74,7 +424,14 @@ var HelpScreen = function HelpScreen(_ref) {
74
424
 
75
425
  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; }
76
426
  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), true).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; }
77
- var createSteps = function createSteps(onboardingSteps, setCurrentStep, currentStep, helpScreenClassName) {
427
+ var createSteps = function createSteps(onboardingSteps, setCurrentStep, currentStep, helpScreenClassName, isCommunityStepVisible) {
428
+ var communityStep = {
429
+ key: GENERAL_ONBOARDING_STEPS.COMMUNITY,
430
+ label: t("neetoMolecules.onboarding.communityLabel"),
431
+ element: /*#__PURE__*/jsx(Community, {
432
+ setCurrentStep: setCurrentStep
433
+ })
434
+ };
78
435
  var helpStep = {
79
436
  key: GENERAL_ONBOARDING_STEPS.HELP,
80
437
  label: t("neetoMolecules.onboarding.helpLabel"),
@@ -84,7 +441,7 @@ var createSteps = function createSteps(onboardingSteps, setCurrentStep, currentS
84
441
  setCurrentStep: setCurrentStep
85
442
  })
86
443
  };
87
- return onboardingSteps.concat(helpStep).map(function (step, idx) {
444
+ return onboardingSteps.concat(isCommunityStepVisible ? [communityStep, helpStep] : helpStep).map(function (step, idx) {
88
445
  return _objectSpread$1(_objectSpread$1({}, step), {}, {
89
446
  id: idx + 1
90
447
  });
@@ -242,11 +599,27 @@ var Onboarding = function Onboarding(_ref) {
242
599
  welcomeScreenClassName = _ref$welcomeScreenCla === void 0 ? "" : _ref$welcomeScreenCla,
243
600
  _ref$completedScreenC = _ref.completedScreenClassName,
244
601
  completedScreenClassName = _ref$completedScreenC === void 0 ? "" : _ref$completedScreenC,
245
- completedScreenSuccessMessage = _ref.completedScreenSuccessMessage;
602
+ completedScreenSuccessMessage = _ref.completedScreenSuccessMessage,
603
+ _ref$isCommunityStepV = _ref.isCommunityStepVisible,
604
+ isCommunityStepVisible = _ref$isCommunityStepV === void 0 ? true : _ref$isCommunityStepV;
246
605
  var steps = useMemo(function () {
247
- return createSteps(onboardingSteps, setCurrentStep, currentStep, helpScreenClassName);
248
- }, [onboardingSteps]);
606
+ return createSteps(onboardingSteps, setCurrentStep, currentStep, helpScreenClassName, isCommunityStepVisible);
607
+ }, [onboardingSteps, isCommunityStepVisible]);
249
608
  var prevStep = useRef(currentStep);
609
+ var isStepperNavigation = useRef(false);
610
+ var isRedirectingToCommunity = useRef(false);
611
+
612
+ // Products move from their last step straight to Help. Send them through
613
+ // the community step first, unless they picked Help in the stepper.
614
+ useLayoutEffect(function () {
615
+ var isFromStepper = isStepperNavigation.current;
616
+ isStepperNavigation.current = false;
617
+ var shouldShowCommunityFirst = isCommunityStepVisible && !isFromStepper && currentStep === GENERAL_ONBOARDING_STEPS.HELP && prevStep.current !== currentStep && prevStep.current !== GENERAL_ONBOARDING_STEPS.COMMUNITY;
618
+ if (shouldShowCommunityFirst) {
619
+ isRedirectingToCommunity.current = true;
620
+ setCurrentStep(GENERAL_ONBOARDING_STEPS.COMMUNITY);
621
+ }
622
+ }, [currentStep]);
250
623
  var _useState = useState(""),
251
624
  _useState2 = _slicedToArray(_useState, 2),
252
625
  direction = _useState2[0],
@@ -258,6 +631,13 @@ var Onboarding = function Onboarding(_ref) {
258
631
  };
259
632
  useEffect(function () {
260
633
  if (currentStep === prevStep.current) return;
634
+
635
+ // Help is skipped over on the way to the community step, so the
636
+ // animation should run from the step before it.
637
+ if (isRedirectingToCommunity.current) {
638
+ isRedirectingToCommunity.current = false;
639
+ return;
640
+ }
261
641
  setDirection(getOnboardingStepIndex(currentStep) > getOnboardingStepIndex(prevStep.current) ? "forward" : "backward");
262
642
  prevStep.current = currentStep;
263
643
  }, [currentStep]);
@@ -277,7 +657,10 @@ var Onboarding = function Onboarding(_ref) {
277
657
  });
278
658
  }
279
659
  var handleStepChange = function handleStepChange(index) {
280
- return setCurrentStep(steps[index].key);
660
+ var stepKey = steps[index].key;
661
+ if (stepKey === currentStep) return;
662
+ isStepperNavigation.current = true;
663
+ setCurrentStep(stepKey);
281
664
  };
282
665
  var isStepperVisible = steps.length > 1;
283
666
  return /*#__PURE__*/jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"Onboarding.js","sources":["../src/components/Onboarding/constants.js","../src/components/Onboarding/HelpScreen.jsx","../src/components/Onboarding/utils.jsx","../src/components/Onboarding/hooks/useWindowDimensions.js","../src/components/Onboarding/CompletedScreen.jsx","../src/components/Onboarding/WelcomeScreen.jsx","../src/components/Onboarding/index.jsx"],"sourcesContent":["export const GENERAL_ONBOARDING_STEPS = {\n WELCOME: \"welcome\",\n HELP: \"help\",\n FINISH: \"finish\",\n};\n","import classNames from \"classnames\";\nimport useBreakpoints from \"neetocommons/react-utils/useBreakpoints\";\nimport { RightArrow } from \"neetoicons\";\nimport { Button, Typography } from \"neetoui\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport { GENERAL_ONBOARDING_STEPS } from \"./constants\";\n\nconst HelpScreen = ({ setCurrentStep, helpScreenClassName }) => {\n const { t } = useTranslation();\n const { isSize } = useBreakpoints();\n\n return (\n <div\n className={classNames(\n \"mx-auto flex w-full max-w-3xl flex-col items-start gap-y-6 px-6 pb-6 pt-16\",\n helpScreenClassName\n )}\n >\n <div className=\"flex flex-col gap-y-3\">\n <Typography\n component=\"h1\"\n data-testid=\"onboarding-help-title\"\n style=\"h1\"\n >\n {t(\"neetoMolecules.onboarding.helpScreen.title\")}\n </Typography>\n <Typography\n data-testid=\"onboarding-help-description\"\n lineHeight=\"normal\"\n style=\"body1\"\n >\n <Trans i18nKey=\"neetoMolecules.onboarding.helpScreen.description\" />\n </Typography>\n <div className=\"w-full pt-3\">\n {isSize(\"mobile\") ? (\n <img\n alt=\"\"\n src=\"https://ik.imagekit.io/d9mvewbju/Commons/NeetoMolecules/help-support-mobile_fgsI9Cx-IC.svg\"\n />\n ) : (\n <img\n alt=\"\"\n src=\"https://ik.imagekit.io/d9mvewbju/Commons/NeetoMolecules/help-support-desktop_CSOh3DrKTR.svg\"\n />\n )}\n </div>\n </div>\n <Button\n data-testid=\"onboarding-help-button\"\n icon={() => <RightArrow className=\"rtl:scale-x-[-1]\" size={16} />}\n iconPosition=\"right\"\n label={t(\"neetoMolecules.onboarding.helpScreen.continueButton\")}\n onClick={() => setCurrentStep(GENERAL_ONBOARDING_STEPS.FINISH)}\n />\n </div>\n );\n};\n\nexport default HelpScreen;\n","import { t } from \"i18next\";\n\nimport { GENERAL_ONBOARDING_STEPS } from \"./constants\";\nimport HelpScreen from \"./HelpScreen\";\n\nexport const createSteps = (\n onboardingSteps,\n setCurrentStep,\n currentStep,\n helpScreenClassName\n) => {\n const helpStep = {\n key: GENERAL_ONBOARDING_STEPS.HELP,\n label: t(\"neetoMolecules.onboarding.helpLabel\"),\n element: (\n <HelpScreen {...{ currentStep, helpScreenClassName, setCurrentStep }} />\n ),\n };\n\n return onboardingSteps\n .concat(helpStep)\n .map((step, idx) => ({ ...step, id: idx + 1 }));\n};\n\nexport const getWindowDimensions = () =>\n typeof window !== \"undefined\"\n ? { width: window.innerWidth, height: window.innerHeight }\n : { width: 100, height: 100 };\n","import { useState, useLayoutEffect } from \"react\";\n\nimport { getWindowDimensions } from \"../utils\";\n\nconst useWindowDimensions = () => {\n const [windowDimensions, setWindowDimensions] = useState({\n width: 100,\n height: 100,\n });\n\n useLayoutEffect(() => {\n setWindowDimensions(getWindowDimensions());\n\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return windowDimensions;\n};\n\nexport default useWindowDimensions;\n","import { useState, useEffect } from \"react\";\n\nimport classnames from \"classnames\";\nimport { isPresent, capitalize } from \"neetocist\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { Button, Typography } from \"neetoui\";\nimport Confetti from \"react-confetti\";\nimport { useTranslation } from \"react-i18next\";\n\nimport useWindowDimensions from \"./hooks/useWindowDimensions.js\";\n\nconst CompletedScreen = ({\n completeButtonProps,\n completedScreenSuccessMessage,\n className,\n}) => {\n const { t } = useTranslation();\n\n const [dropConfetti, setDropConfetti] = useState(true);\n const { height, width } = useWindowDimensions();\n\n useEffect(() => {\n const timer = setTimeout(() => setDropConfetti(false), 10000);\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <div\n className={classnames(\"neeto-molecules-onboarding__wrapper\", className)}\n data-testid=\"onboarding-congratulations-wrapper\"\n >\n <Confetti {...{ height, width }} recycle={dropConfetti} />\n {isPresent(completedScreenSuccessMessage) ? (\n completedScreenSuccessMessage\n ) : (\n <div className=\"mx-auto mb-6 flex w-full max-w-2xl flex-col gap-y-2 px-6 pt-16\">\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-congratulations-emoji\"\n style=\"h1\"\n >\n 🎉\n </Typography>\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-congratulations-title\"\n style=\"h1\"\n >\n <span className=\"neeto-ui-text-success-500\">\n {t(\"neetoMolecules.onboarding.congratulations\")}\n </span>\n <br />\n {t(\"neetoMolecules.onboarding.readyToUse\", {\n appName: capitalize(globalProps.appName),\n })}\n </Typography>\n </div>\n )}\n <Button\n data-testid=\"onboarding-congratulations-button\"\n label={t(\"neetoMolecules.onboarding.helpScreen.startUsingButton\", {\n appName: globalProps.appName,\n })}\n {...completeButtonProps}\n />\n </div>\n );\n};\n\nexport default CompletedScreen;\n","import classnames from \"classnames\";\nimport { capitalize } from \"neetocist\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport withT from \"neetocommons/react-utils/withT\";\nimport { RightArrow } from \"neetoicons\";\nimport { Button, Typography } from \"neetoui\";\n\nconst WelcomeScreen = withT(({ t, setCurrentStep, nextStep, className }) => (\n <div\n className={classnames(\"neeto-molecules-onboarding__wrapper\", className)}\n data-testid=\"onboarding-welcome-wrapper\"\n >\n <div className=\"mx-auto mb-6 flex w-full max-w-2xl flex-col gap-y-2 px-6 pt-16\">\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-welcome-title\"\n style=\"h1\"\n >\n {t(\"neetoMolecules.onboarding.helpScreen.welcomeToTitle\", {\n appName: capitalize(globalProps.appName),\n })}\n </Typography>\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-welcome-description\"\n lineHeight=\"normal\"\n style=\"body1\"\n >\n {t(\"neetoMolecules.onboarding.letUsCustomize\", {\n appName: capitalize(globalProps.appName),\n })}\n </Typography>\n </div>\n <Button\n data-testid=\"onboarding-welcome-button\"\n icon={() => <RightArrow className=\"rtl:scale-x-[-1]\" size={16} />}\n label={t(\"neetoMolecules.onboarding.getStarted\")}\n onClick={() => setCurrentStep(nextStep)}\n />\n </div>\n));\n\nexport default WelcomeScreen;\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport { findIndexBy, noop } from \"neetocist\";\nimport { Stepper } from \"neetoui\";\nimport PropTypes from \"prop-types\";\n\nimport CompletedScreen from \"./CompletedScreen\";\nimport { GENERAL_ONBOARDING_STEPS } from \"./constants\";\nimport \"./onboarding.scss\";\nimport { createSteps } from \"./utils\";\nimport WelcomeScreen from \"./WelcomeScreen\";\n\nconst Onboarding = ({\n currentStep = GENERAL_ONBOARDING_STEPS.WELCOME,\n setCurrentStep = noop,\n onboardingSteps = [],\n completeButtonProps = {},\n helpScreenClassName = \"\",\n isAnimated = true,\n disableStepClick = false,\n welcomeScreenClassName = \"\",\n completedScreenClassName = \"\",\n completedScreenSuccessMessage,\n}) => {\n const steps = useMemo(\n () =>\n createSteps(\n onboardingSteps,\n setCurrentStep,\n currentStep,\n helpScreenClassName\n ),\n [onboardingSteps]\n );\n\n const prevStep = useRef(currentStep);\n\n const [direction, setDirection] = useState(\"\");\n\n const getOnboardingStepIndex = stepKey =>\n steps.findIndex(step => step.key === stepKey);\n\n useEffect(() => {\n if (currentStep === prevStep.current) return;\n\n setDirection(\n getOnboardingStepIndex(currentStep) >\n getOnboardingStepIndex(prevStep.current)\n ? \"forward\"\n : \"backward\"\n );\n prevStep.current = currentStep;\n }, [currentStep]);\n\n if (currentStep === GENERAL_ONBOARDING_STEPS.WELCOME) {\n return (\n <WelcomeScreen\n {...{ currentStep, setCurrentStep }}\n className={welcomeScreenClassName}\n nextStep={steps[0].key}\n />\n );\n }\n\n if (currentStep === GENERAL_ONBOARDING_STEPS.FINISH) {\n return (\n <CompletedScreen\n {...{ completeButtonProps, completedScreenSuccessMessage }}\n className={completedScreenClassName}\n />\n );\n }\n\n const handleStepChange = index => setCurrentStep(steps[index].key);\n\n const isStepperVisible = steps.length > 1;\n\n return (\n <div\n className={classNames(\"neeto-molecules-onboarding__container\", {\n \"neeto-molecules-onboarding__wrapper\": !isStepperVisible,\n })}\n >\n {isStepperVisible && (\n <div className=\"neeto-molecules-onboarding__stepper-wrapper\">\n <Stepper\n {...{ steps }}\n activeIndex={findIndexBy({ key: currentStep }, steps)}\n setActiveIndex={disableStepClick ? noop : handleStepChange}\n />\n </div>\n )}\n {steps.map((step, index) => (\n <div\n key={index}\n className={classNames(\"neeto-molecules-onboarding__content\", {\n \"neeto-molecules-onboarding__content--forward overflow-x-hidden\":\n isAnimated && direction === \"forward\",\n \"neeto-molecules-onboarding__content--backward overflow-x-hidden\":\n isAnimated && direction === \"backward\",\n hidden: currentStep !== step.key,\n })}\n >\n {step?.element}\n </div>\n ))}\n </div>\n );\n};\n\nOnboarding.propTypes = {\n /**\n * To specify the current step of the onboarding\n */\n currentStep: PropTypes.string,\n /**\n * List of Custom components for the onboarding\n */\n onboardingSteps: PropTypes.array,\n /**\n * Props for the complete button\n */\n completeButtonProps: PropTypes.object,\n /**\n * To set the step of the onboarding\n */\n setCurrentStep: PropTypes.func,\n /**\n * To pass additional classes to the help screen\n */\n helpScreenClassName: PropTypes.string,\n /**\n * A boolean value to enable or disable the animation for the stepper.\n */\n isAnimated: PropTypes.bool,\n};\n\nexport default Onboarding;\n"],"names":["GENERAL_ONBOARDING_STEPS","WELCOME","HELP","FINISH","HelpScreen","_ref","setCurrentStep","helpScreenClassName","_useTranslation","useTranslation","t","_useBreakpoints","useBreakpoints","isSize","_jsxs","className","classNames","children","_jsx","Typography","component","style","lineHeight","Trans","i18nKey","alt","src","Button","icon","RightArrow","size","iconPosition","label","onClick","createSteps","onboardingSteps","currentStep","helpStep","key","element","concat","map","step","idx","_objectSpread","id","getWindowDimensions","window","width","innerWidth","height","innerHeight","useWindowDimensions","_useState","useState","_useState2","_slicedToArray","windowDimensions","setWindowDimensions","useLayoutEffect","handleResize","addEventListener","removeEventListener","CompletedScreen","completeButtonProps","completedScreenSuccessMessage","dropConfetti","setDropConfetti","_useWindowDimensions","useEffect","timer","setTimeout","clearTimeout","classnames","Confetti","recycle","isPresent","appName","capitalize","globalProps","WelcomeScreen","withT","nextStep","Onboarding","_ref$currentStep","_ref$setCurrentStep","noop","_ref$onboardingSteps","_ref$completeButtonPr","_ref$helpScreenClassN","_ref$isAnimated","isAnimated","_ref$disableStepClick","disableStepClick","_ref$welcomeScreenCla","welcomeScreenClassName","_ref$completedScreenC","completedScreenClassName","steps","useMemo","prevStep","useRef","direction","setDirection","getOnboardingStepIndex","stepKey","findIndex","current","handleStepChange","index","isStepperVisible","length","Stepper","activeIndex","findIndexBy","setActiveIndex","hidden"],"mappings":"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"}
1
+ {"version":3,"file":"Onboarding.js","sources":["../src/components/Onboarding/Community/constants.js","../src/components/Onboarding/Community/EmailRecipient.jsx","../src/components/Onboarding/Community/api.js","../src/components/Onboarding/Community/hooks/useJoinCommunity.js","../src/components/Onboarding/Community/utils.js","../src/components/Onboarding/Community/hooks/useRecipientEmails.js","../src/components/Onboarding/constants.js","../src/components/Onboarding/Community/index.jsx","../src/components/Onboarding/HelpScreen.jsx","../src/components/Onboarding/utils.jsx","../src/components/Onboarding/hooks/useWindowDimensions.js","../src/components/Onboarding/CompletedScreen.jsx","../src/components/Onboarding/WelcomeScreen.jsx","../src/components/Onboarding/index.jsx"],"sourcesContent":["import { Notes, UserCircle } from \"neetoicons\";\n\nexport const COMMUNITY_OPTIONS = [\n {\n key: \"slack\",\n icon: UserCircle,\n dataTestid: \"onboarding-community-slack-checkbox\",\n recipientDataTestids: {\n change: \"onboarding-community-slack-email-change-button\",\n input: \"onboarding-community-slack-email-input\",\n save: \"onboarding-community-slack-email-save-button\",\n cancel: \"onboarding-community-slack-email-cancel-button\",\n },\n },\n {\n key: \"blog\",\n icon: Notes,\n dataTestid: \"onboarding-community-blog-checkbox\",\n recipientDataTestids: {\n change: \"onboarding-community-blog-email-change-button\",\n input: \"onboarding-community-blog-email-input\",\n save: \"onboarding-community-blog-email-save-button\",\n cancel: \"onboarding-community-blog-email-cancel-button\",\n },\n },\n];\n","import { Email } from \"neetoicons\";\nimport { Button, Input, Typography } from \"neetoui\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nconst EmailRecipient = ({\n email,\n edit,\n onStartEditing,\n onDraftChange,\n onSave,\n onCancel,\n recipientKey,\n inputLabelKey,\n dataTestids,\n}) => {\n const { t } = useTranslation();\n\n const handleKeyDown = event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n onSave();\n }\n\n if (event.key === \"Escape\") onCancel();\n };\n\n if (edit) {\n return (\n <div className=\"flex items-start gap-2 ps-6 pt-3\">\n <div className=\"w-72\">\n <Input\n autoFocus\n aria-label={t(inputLabelKey)}\n data-testid={dataTestids.input}\n error={edit.error}\n type=\"email\"\n value={edit.draft}\n onChange={event => onDraftChange(event.target.value)}\n onKeyDown={handleKeyDown}\n />\n </div>\n <Button\n data-testid={dataTestids.save}\n label={t(\"neetoMolecules.common.actions.save\")}\n onClick={onSave}\n />\n <Button\n data-testid={dataTestids.cancel}\n label={t(\"neetoMolecules.common.actions.cancel\")}\n style=\"text\"\n onClick={onCancel}\n />\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-wrap items-center gap-2 ps-6 pt-3\">\n <Email aria-hidden className=\"neeto-ui-text-gray-500\" size={16} />\n <Typography className=\"neeto-ui-text-gray-600\" style=\"body2\">\n <Trans\n components={{ strong: <strong className=\"neeto-ui-text-gray-800\" /> }}\n i18nKey={recipientKey}\n values={{ email }}\n />\n </Typography>\n <Button\n data-testid={dataTestids.change}\n label={t(\"neetoMolecules.onboarding.communityScreen.changeButton\")}\n size=\"small\"\n style=\"link\"\n onClick={onStartEditing}\n />\n </div>\n );\n};\n\nexport default EmailRecipient;\n","import axios from \"axios\";\nimport { BASE_API_V1_URL } from \"neetocommons/constants\";\n\nconst joinCommunity = communityJoin =>\n axios.post(\n `${BASE_API_V1_URL}/community_join`,\n { communityJoin },\n { showToastr: false }\n );\n\nconst communityApi = { joinCommunity };\n\nexport default communityApi;\n","import { useMutation } from \"@tanstack/react-query\";\n\nimport communityApi from \"../api\";\n\nconst useJoinCommunity = () =>\n useMutation({ mutationFn: communityApi.joinCommunity });\n\nexport default useJoinCommunity;\n","import * as yup from \"yup\";\n\nexport const isValidEmail = email =>\n !!email && yup.string().email().isValidSync(email);\n","import { useState } from \"react\";\n\nimport { t } from \"i18next\";\nimport { assoc, dissoc } from \"ramda\";\n\nimport { isValidEmail } from \"../utils\";\n\n// Tracks the email each option goes to, plus any address being edited, so\n// Continue can pick up a draft the user typed but did not save.\nconst useRecipientEmails = defaultEmail => {\n const [emails, setEmails] = useState({\n slack: defaultEmail,\n blog: defaultEmail,\n });\n\n // { [key]: { draft, error } } for the options whose email field is open.\n const [edits, setEdits] = useState({});\n\n const startEditing = key =>\n setEdits(assoc(key, { draft: emails[key], error: \"\" }));\n\n const changeDraft = (key, draft) =>\n setEdits(assoc(key, { draft, error: \"\" }));\n\n const cancel = key => setEdits(dissoc(key));\n\n const validate = key => {\n const draft = edits[key].draft.trim();\n\n return isValidEmail(draft)\n ? { draft }\n : { error: t(\"neetoMolecules.onboarding.communityScreen.invalidEmail\") };\n };\n\n const save = key => {\n const { draft, error } = validate(key);\n\n if (error) {\n setEdits(assoc(key, { ...edits[key], error }));\n\n return;\n }\n\n setEmails(assoc(key, draft));\n setEdits(dissoc(key));\n };\n\n // Applies every open draft of the given options. Returns the final emails,\n // or null when a draft is invalid, after showing its error.\n const applyDrafts = keys => {\n let nextEmails = emails;\n let nextEdits = edits;\n\n keys\n .filter(key => edits[key])\n .forEach(key => {\n const { draft, error } = validate(key);\n\n if (error) {\n nextEdits = assoc(key, { ...edits[key], error }, nextEdits);\n } else {\n nextEmails = assoc(key, draft, nextEmails);\n nextEdits = dissoc(key, nextEdits);\n }\n });\n\n setEmails(nextEmails);\n setEdits(nextEdits);\n\n const hasInvalidDraft = keys.some(key => nextEdits[key]);\n\n return hasInvalidDraft ? null : nextEmails;\n };\n\n return {\n emails,\n edits,\n startEditing,\n changeDraft,\n cancel,\n save,\n applyDrafts,\n };\n};\n\nexport default useRecipientEmails;\n","export const GENERAL_ONBOARDING_STEPS = {\n WELCOME: \"welcome\",\n COMMUNITY: \"community\",\n HELP: \"help\",\n FINISH: \"finish\",\n};\n","import { useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport { capitalize } from \"neetocist\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { RightArrow } from \"neetoicons\";\nimport { Button, Checkbox, Typography } from \"neetoui\";\nimport { assoc } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { COMMUNITY_OPTIONS } from \"./constants\";\nimport EmailRecipient from \"./EmailRecipient\";\nimport useJoinCommunity from \"./hooks/useJoinCommunity\";\nimport useRecipientEmails from \"./hooks/useRecipientEmails\";\n\nimport { GENERAL_ONBOARDING_STEPS } from \"../constants\";\n\nconst Community = ({ setCurrentStep, communityScreenClassName }) => {\n const { t } = useTranslation();\n\n const [selected, setSelected] = useState({ slack: true, blog: true });\n\n // Both start at the signed-in user's email; each can be changed separately.\n const recipients = useRecipientEmails(globalProps.user?.email);\n\n const { mutate: joinCommunity } = useJoinCommunity();\n\n const appName = capitalize(globalProps.appName ?? \"\");\n\n const handleContinue = () => {\n const selectedKeys = Object.keys(selected).filter(key => selected[key]);\n\n // An address typed but not saved still counts; an invalid one keeps the\n // user here with its error showing.\n const emails = recipients.applyDrafts(selectedKeys);\n if (!emails) return;\n\n // The Slack invite and blog subscription are both sent by email in the\n // background, so onboarding moves on without waiting for them.\n if (selectedKeys.length > 0) {\n joinCommunity({\n ...selected,\n slackEmail: emails.slack,\n blogEmail: emails.blog,\n });\n }\n\n setCurrentStep(GENERAL_ONBOARDING_STEPS.HELP);\n };\n\n return (\n <div\n className={classNames(\n \"mx-auto flex w-full max-w-3xl flex-col items-start gap-y-6 px-6 pt-16 pb-6\",\n communityScreenClassName\n )}\n >\n <div className=\"space-y-2\">\n <Typography data-testid=\"onboarding-community-title\" style=\"h1\">\n {t(\"neetoMolecules.onboarding.communityScreen.title\")}\n </Typography>\n <Typography\n data-testid=\"onboarding-community-description\"\n style=\"body1\"\n >\n {t(\"neetoMolecules.onboarding.communityScreen.description\", {\n appName,\n })}\n </Typography>\n </div>\n <div className=\"neeto-ui-rounded-lg neeto-ui-border-gray-200 flex w-full flex-col gap-6 border p-3 lg:p-6\">\n {COMMUNITY_OPTIONS.map(\n ({ key, icon: Icon, dataTestid, recipientDataTestids }) => (\n <div className=\"w-full\" key={key}>\n <Checkbox\n checked={selected[key]}\n data-testid={dataTestid}\n id={dataTestid}\n labelProps={{ className: \"text-xl font-semibold\" }}\n label={\n <span className=\"flex flex-wrap items-center gap-2\">\n {t(\n `neetoMolecules.onboarding.communityScreen.${key}.title`,\n { appName }\n )}\n <Icon aria-hidden size={24} />\n </span>\n }\n onChange={event => {\n setSelected(assoc(key, event.target.checked));\n if (!event.target.checked) recipients.cancel(key);\n }}\n />\n <Typography\n className=\"neeto-ui-text-gray-600 ps-6 pt-2\"\n style=\"body1\"\n >\n {t(\n `neetoMolecules.onboarding.communityScreen.${key}.description`\n )}\n </Typography>\n {selected[key] && (\n <EmailRecipient\n dataTestids={recipientDataTestids}\n edit={recipients.edits[key]}\n email={recipients.emails[key]}\n inputLabelKey={`neetoMolecules.onboarding.communityScreen.${key}.emailInputLabel`}\n recipientKey={`neetoMolecules.onboarding.communityScreen.${key}.recipient`}\n onCancel={() => recipients.cancel(key)}\n onDraftChange={draft => recipients.changeDraft(key, draft)}\n onSave={() => recipients.save(key)}\n onStartEditing={() => recipients.startEditing(key)}\n />\n )}\n </div>\n )\n )}\n </div>\n <Typography className=\"neeto-ui-text-gray-600\" style=\"body2\">\n {t(\"neetoMolecules.onboarding.communityScreen.unsubscribe\")}\n </Typography>\n <Button\n data-testid=\"community-onboarding-continue-button\"\n icon={RightArrow}\n iconPosition=\"right\"\n label={t(\"neetoMolecules.onboarding.communityScreen.continueButton\")}\n onClick={handleContinue}\n />\n </div>\n );\n};\n\nexport default Community;\n","import classNames from \"classnames\";\nimport useBreakpoints from \"neetocommons/react-utils/useBreakpoints\";\nimport { RightArrow } from \"neetoicons\";\nimport { Button, Typography } from \"neetoui\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport { GENERAL_ONBOARDING_STEPS } from \"./constants\";\n\nconst HelpScreen = ({ setCurrentStep, helpScreenClassName }) => {\n const { t } = useTranslation();\n const { isSize } = useBreakpoints();\n\n return (\n <div\n className={classNames(\n \"mx-auto flex w-full max-w-3xl flex-col items-start gap-y-6 px-6 pb-6 pt-16\",\n helpScreenClassName\n )}\n >\n <div className=\"flex flex-col gap-y-3\">\n <Typography\n component=\"h1\"\n data-testid=\"onboarding-help-title\"\n style=\"h1\"\n >\n {t(\"neetoMolecules.onboarding.helpScreen.title\")}\n </Typography>\n <Typography\n data-testid=\"onboarding-help-description\"\n lineHeight=\"normal\"\n style=\"body1\"\n >\n <Trans i18nKey=\"neetoMolecules.onboarding.helpScreen.description\" />\n </Typography>\n <div className=\"w-full pt-3\">\n {isSize(\"mobile\") ? (\n <img\n alt=\"\"\n src=\"https://ik.imagekit.io/d9mvewbju/Commons/NeetoMolecules/help-support-mobile_fgsI9Cx-IC.svg\"\n />\n ) : (\n <img\n alt=\"\"\n src=\"https://ik.imagekit.io/d9mvewbju/Commons/NeetoMolecules/help-support-desktop_CSOh3DrKTR.svg\"\n />\n )}\n </div>\n </div>\n <Button\n data-testid=\"onboarding-help-button\"\n icon={() => <RightArrow className=\"rtl:scale-x-[-1]\" size={16} />}\n iconPosition=\"right\"\n label={t(\"neetoMolecules.onboarding.helpScreen.continueButton\")}\n onClick={() => setCurrentStep(GENERAL_ONBOARDING_STEPS.FINISH)}\n />\n </div>\n );\n};\n\nexport default HelpScreen;\n","import { t } from \"i18next\";\n\nimport Community from \"./Community\";\nimport { GENERAL_ONBOARDING_STEPS } from \"./constants\";\nimport HelpScreen from \"./HelpScreen\";\n\nexport const createSteps = (\n onboardingSteps,\n setCurrentStep,\n currentStep,\n helpScreenClassName,\n isCommunityStepVisible\n) => {\n const communityStep = {\n key: GENERAL_ONBOARDING_STEPS.COMMUNITY,\n label: t(\"neetoMolecules.onboarding.communityLabel\"),\n element: <Community {...{ setCurrentStep }} />,\n };\n\n const helpStep = {\n key: GENERAL_ONBOARDING_STEPS.HELP,\n label: t(\"neetoMolecules.onboarding.helpLabel\"),\n element: (\n <HelpScreen {...{ currentStep, helpScreenClassName, setCurrentStep }} />\n ),\n };\n\n return onboardingSteps\n .concat(isCommunityStepVisible ? [communityStep, helpStep] : helpStep)\n .map((step, idx) => ({ ...step, id: idx + 1 }));\n};\n\nexport const getWindowDimensions = () =>\n typeof window !== \"undefined\"\n ? { width: window.innerWidth, height: window.innerHeight }\n : { width: 100, height: 100 };\n","import { useState, useLayoutEffect } from \"react\";\n\nimport { getWindowDimensions } from \"../utils\";\n\nconst useWindowDimensions = () => {\n const [windowDimensions, setWindowDimensions] = useState({\n width: 100,\n height: 100,\n });\n\n useLayoutEffect(() => {\n setWindowDimensions(getWindowDimensions());\n\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return windowDimensions;\n};\n\nexport default useWindowDimensions;\n","import { useState, useEffect } from \"react\";\n\nimport classnames from \"classnames\";\nimport { isPresent, capitalize } from \"neetocist\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { Button, Typography } from \"neetoui\";\nimport Confetti from \"react-confetti\";\nimport { useTranslation } from \"react-i18next\";\n\nimport useWindowDimensions from \"./hooks/useWindowDimensions.js\";\n\nconst CompletedScreen = ({\n completeButtonProps,\n completedScreenSuccessMessage,\n className,\n}) => {\n const { t } = useTranslation();\n\n const [dropConfetti, setDropConfetti] = useState(true);\n const { height, width } = useWindowDimensions();\n\n useEffect(() => {\n const timer = setTimeout(() => setDropConfetti(false), 10000);\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <div\n className={classnames(\"neeto-molecules-onboarding__wrapper\", className)}\n data-testid=\"onboarding-congratulations-wrapper\"\n >\n <Confetti {...{ height, width }} recycle={dropConfetti} />\n {isPresent(completedScreenSuccessMessage) ? (\n completedScreenSuccessMessage\n ) : (\n <div className=\"mx-auto mb-6 flex w-full max-w-2xl flex-col gap-y-2 px-6 pt-16\">\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-congratulations-emoji\"\n style=\"h1\"\n >\n 🎉\n </Typography>\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-congratulations-title\"\n style=\"h1\"\n >\n <span className=\"neeto-ui-text-success-500\">\n {t(\"neetoMolecules.onboarding.congratulations\")}\n </span>\n <br />\n {t(\"neetoMolecules.onboarding.readyToUse\", {\n appName: capitalize(globalProps.appName),\n })}\n </Typography>\n </div>\n )}\n <Button\n data-testid=\"onboarding-congratulations-button\"\n label={t(\"neetoMolecules.onboarding.helpScreen.startUsingButton\", {\n appName: globalProps.appName,\n })}\n {...completeButtonProps}\n />\n </div>\n );\n};\n\nexport default CompletedScreen;\n","import classnames from \"classnames\";\nimport { capitalize } from \"neetocist\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport withT from \"neetocommons/react-utils/withT\";\nimport { RightArrow } from \"neetoicons\";\nimport { Button, Typography } from \"neetoui\";\n\nconst WelcomeScreen = withT(({ t, setCurrentStep, nextStep, className }) => (\n <div\n className={classnames(\"neeto-molecules-onboarding__wrapper\", className)}\n data-testid=\"onboarding-welcome-wrapper\"\n >\n <div className=\"mx-auto mb-6 flex w-full max-w-2xl flex-col gap-y-2 px-6 pt-16\">\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-welcome-title\"\n style=\"h1\"\n >\n {t(\"neetoMolecules.onboarding.helpScreen.welcomeToTitle\", {\n appName: capitalize(globalProps.appName),\n })}\n </Typography>\n <Typography\n className=\"text-center\"\n data-testid=\"onboarding-welcome-description\"\n lineHeight=\"normal\"\n style=\"body1\"\n >\n {t(\"neetoMolecules.onboarding.letUsCustomize\", {\n appName: capitalize(globalProps.appName),\n })}\n </Typography>\n </div>\n <Button\n data-testid=\"onboarding-welcome-button\"\n icon={() => <RightArrow className=\"rtl:scale-x-[-1]\" size={16} />}\n label={t(\"neetoMolecules.onboarding.getStarted\")}\n onClick={() => setCurrentStep(nextStep)}\n />\n </div>\n));\n\nexport default WelcomeScreen;\n","import { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport { findIndexBy, noop } from \"neetocist\";\nimport { Stepper } from \"neetoui\";\nimport PropTypes from \"prop-types\";\n\nimport CompletedScreen from \"./CompletedScreen\";\nimport { GENERAL_ONBOARDING_STEPS } from \"./constants\";\nimport \"./onboarding.scss\";\nimport { createSteps } from \"./utils\";\nimport WelcomeScreen from \"./WelcomeScreen\";\n\nconst Onboarding = ({\n currentStep = GENERAL_ONBOARDING_STEPS.WELCOME,\n setCurrentStep = noop,\n onboardingSteps = [],\n completeButtonProps = {},\n helpScreenClassName = \"\",\n isAnimated = true,\n disableStepClick = false,\n welcomeScreenClassName = \"\",\n completedScreenClassName = \"\",\n completedScreenSuccessMessage,\n isCommunityStepVisible = true,\n}) => {\n const steps = useMemo(\n () =>\n createSteps(\n onboardingSteps,\n setCurrentStep,\n currentStep,\n helpScreenClassName,\n isCommunityStepVisible\n ),\n [onboardingSteps, isCommunityStepVisible]\n );\n\n const prevStep = useRef(currentStep);\n const isStepperNavigation = useRef(false);\n const isRedirectingToCommunity = useRef(false);\n\n // Products move from their last step straight to Help. Send them through\n // the community step first, unless they picked Help in the stepper.\n useLayoutEffect(() => {\n const isFromStepper = isStepperNavigation.current;\n isStepperNavigation.current = false;\n\n const shouldShowCommunityFirst =\n isCommunityStepVisible &&\n !isFromStepper &&\n currentStep === GENERAL_ONBOARDING_STEPS.HELP &&\n prevStep.current !== currentStep &&\n prevStep.current !== GENERAL_ONBOARDING_STEPS.COMMUNITY;\n\n if (shouldShowCommunityFirst) {\n isRedirectingToCommunity.current = true;\n setCurrentStep(GENERAL_ONBOARDING_STEPS.COMMUNITY);\n }\n }, [currentStep]);\n\n const [direction, setDirection] = useState(\"\");\n\n const getOnboardingStepIndex = stepKey =>\n steps.findIndex(step => step.key === stepKey);\n\n useEffect(() => {\n if (currentStep === prevStep.current) return;\n\n // Help is skipped over on the way to the community step, so the\n // animation should run from the step before it.\n if (isRedirectingToCommunity.current) {\n isRedirectingToCommunity.current = false;\n\n return;\n }\n\n setDirection(\n getOnboardingStepIndex(currentStep) >\n getOnboardingStepIndex(prevStep.current)\n ? \"forward\"\n : \"backward\"\n );\n prevStep.current = currentStep;\n }, [currentStep]);\n\n if (currentStep === GENERAL_ONBOARDING_STEPS.WELCOME) {\n return (\n <WelcomeScreen\n {...{ currentStep, setCurrentStep }}\n className={welcomeScreenClassName}\n nextStep={steps[0].key}\n />\n );\n }\n\n if (currentStep === GENERAL_ONBOARDING_STEPS.FINISH) {\n return (\n <CompletedScreen\n {...{ completeButtonProps, completedScreenSuccessMessage }}\n className={completedScreenClassName}\n />\n );\n }\n\n const handleStepChange = index => {\n const stepKey = steps[index].key;\n if (stepKey === currentStep) return;\n\n isStepperNavigation.current = true;\n setCurrentStep(stepKey);\n };\n\n const isStepperVisible = steps.length > 1;\n\n return (\n <div\n className={classNames(\"neeto-molecules-onboarding__container\", {\n \"neeto-molecules-onboarding__wrapper\": !isStepperVisible,\n })}\n >\n {isStepperVisible && (\n <div className=\"neeto-molecules-onboarding__stepper-wrapper\">\n <Stepper\n {...{ steps }}\n activeIndex={findIndexBy({ key: currentStep }, steps)}\n setActiveIndex={disableStepClick ? noop : handleStepChange}\n />\n </div>\n )}\n {steps.map((step, index) => (\n <div\n key={index}\n className={classNames(\"neeto-molecules-onboarding__content\", {\n \"neeto-molecules-onboarding__content--forward overflow-x-hidden\":\n isAnimated && direction === \"forward\",\n \"neeto-molecules-onboarding__content--backward overflow-x-hidden\":\n isAnimated && direction === \"backward\",\n hidden: currentStep !== step.key,\n })}\n >\n {step?.element}\n </div>\n ))}\n </div>\n );\n};\n\nOnboarding.propTypes = {\n /**\n * To specify the current step of the onboarding\n */\n currentStep: PropTypes.string,\n /**\n * List of Custom components for the onboarding\n */\n onboardingSteps: PropTypes.array,\n /**\n * Props for the complete button\n */\n completeButtonProps: PropTypes.object,\n /**\n * To set the step of the onboarding\n */\n setCurrentStep: PropTypes.func,\n /**\n * To pass additional classes to the help screen\n */\n helpScreenClassName: PropTypes.string,\n /**\n * A boolean value to enable or disable the animation for the stepper.\n */\n isAnimated: PropTypes.bool,\n /**\n * To show the community step, where users can join the Neeto Slack\n * community and subscribe to the product's blog. It sits just before Help.\n */\n isCommunityStepVisible: PropTypes.bool,\n};\n\nexport default Onboarding;\n"],"names":["COMMUNITY_OPTIONS","key","icon","UserCircle","dataTestid","recipientDataTestids","change","input","save","cancel","Notes","EmailRecipient","_ref","email","edit","onStartEditing","onDraftChange","onSave","onCancel","recipientKey","inputLabelKey","dataTestids","_useTranslation","useTranslation","t","handleKeyDown","event","preventDefault","_jsxs","className","children","_jsx","Input","autoFocus","error","type","value","draft","onChange","target","onKeyDown","Button","label","onClick","style","Email","size","Typography","Trans","components","strong","i18nKey","values","joinCommunity","communityJoin","axios","post","concat","BASE_API_V1_URL","showToastr","communityApi","useJoinCommunity","useMutation","mutationFn","isValidEmail","yup","string","isValidSync","useRecipientEmails","defaultEmail","_useState","useState","slack","blog","_useState2","_slicedToArray","emails","setEmails","_useState3","_useState4","edits","setEdits","startEditing","assoc","changeDraft","dissoc","validate","trim","_validate","_objectSpread","applyDrafts","keys","nextEmails","nextEdits","filter","forEach","_validate2","hasInvalidDraft","some","GENERAL_ONBOARDING_STEPS","WELCOME","COMMUNITY","HELP","FINISH","Community","_globalProps$user","_globalProps$appName","setCurrentStep","communityScreenClassName","selected","setSelected","recipients","globalProps","user","_useJoinCommunity","mutate","appName","capitalize","handleContinue","selectedKeys","Object","length","slackEmail","blogEmail","classNames","map","_ref2","Icon","Checkbox","checked","id","labelProps","RightArrow","iconPosition","HelpScreen","helpScreenClassName","_useBreakpoints","useBreakpoints","isSize","component","lineHeight","alt","src","createSteps","onboardingSteps","currentStep","isCommunityStepVisible","communityStep","element","helpStep","step","idx","getWindowDimensions","window","width","innerWidth","height","innerHeight","useWindowDimensions","windowDimensions","setWindowDimensions","useLayoutEffect","handleResize","addEventListener","removeEventListener","CompletedScreen","completeButtonProps","completedScreenSuccessMessage","dropConfetti","setDropConfetti","_useWindowDimensions","useEffect","timer","setTimeout","clearTimeout","classnames","Confetti","recycle","isPresent","WelcomeScreen","withT","nextStep","Onboarding","_ref$currentStep","_ref$setCurrentStep","noop","_ref$onboardingSteps","_ref$completeButtonPr","_ref$helpScreenClassN","_ref$isAnimated","isAnimated","_ref$disableStepClick","disableStepClick","_ref$welcomeScreenCla","welcomeScreenClassName","_ref$completedScreenC","completedScreenClassName","_ref$isCommunityStepV","steps","useMemo","prevStep","useRef","isStepperNavigation","isRedirectingToCommunity","isFromStepper","current","shouldShowCommunityFirst","direction","setDirection","getOnboardingStepIndex","stepKey","findIndex","handleStepChange","index","isStepperVisible","Stepper","activeIndex","findIndexBy","setActiveIndex","hidden"],"mappings":"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"}