@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.
- package/dist/Onboarding.js +391 -8
- package/dist/Onboarding.js.map +1 -1
- package/dist/circle-user-ieD_gMjm.js +19 -0
- package/dist/circle-user-ieD_gMjm.js.map +1 -0
- package/dist/cjs/Onboarding.js +409 -7
- package/dist/cjs/Onboarding.js.map +1 -1
- package/dist/cjs/circle-user-D5aGw9mw.js +21 -0
- package/dist/cjs/circle-user-D5aGw9mw.js.map +1 -0
- package/dist/cjs/v2/AuditLogs.js +2 -16
- package/dist/cjs/v2/AuditLogs.js.map +1 -1
- package/dist/cjs/v2/Onboarding.js +435 -10
- package/dist/cjs/v2/Onboarding.js.map +1 -1
- package/dist/v2/AuditLogs.js +1 -15
- package/dist/v2/AuditLogs.js.map +1 -1
- package/dist/v2/Onboarding.js +418 -12
- package/dist/v2/Onboarding.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/en.json +14 -7
- package/types/Onboarding.d.ts +1 -0
- package/types/v2/Onboarding.d.ts +1 -0
package/dist/Onboarding.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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", {
|
package/dist/Onboarding.js.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;;;AAAO,IAAMA,wBAAwB,GAAG;AACtCC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,IAAI,EAAE,MAAM;AACZC,EAAAA,MAAM,EAAE;AACV,CAAC;;ACID,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAAC,IAAA,EAAgD;AAAA,EAAA,IAA1CC,cAAc,GAAAD,IAAA,CAAdC,cAAc;IAAEC,mBAAmB,GAAAF,IAAA,CAAnBE,mBAAmB;AACvD,EAAA,IAAAC,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AACT,EAAA,IAAAC,eAAA,GAAmBC,cAAc,EAAE;IAA3BC,MAAM,GAAAF,eAAA,CAANE,MAAM;AAEd,EAAA,oBACEC,IAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAEC,UAAU,CACnB,4EAA4E,EAC5ET,mBACF,CAAE;AAAAU,IAAAA,QAAA,gBAEFH,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,uBAAuB;MAAAE,QAAA,EAAA,cACpCC,GAAA,CAACC,UAAU,EAAA;AACTC,QAAAA,SAAS,EAAC,IAAI;AACd,QAAA,aAAA,EAAY,uBAAuB;AACnCC,QAAAA,KAAK,EAAC,IAAI;QAAAJ,QAAA,EAETP,CAAC,CAAC,4CAA4C;AAAC,OACtC,CAAC,eACbQ,GAAA,CAACC,UAAU,EAAA;AACT,QAAA,aAAA,EAAY,6BAA6B;AACzCG,QAAAA,UAAU,EAAC,QAAQ;AACnBD,QAAAA,KAAK,EAAC,OAAO;QAAAJ,QAAA,eAEbC,GAAA,CAACK,KAAK,EAAA;AAACC,UAAAA,OAAO,EAAC;SAAoD;OACzD,CAAC,eACbN,GAAA,CAAA,KAAA,EAAA;AAAKH,QAAAA,SAAS,EAAC,aAAa;AAAAE,QAAAA,QAAA,EACzBJ,MAAM,CAAC,QAAQ,CAAC,gBACfK,GAAA,CAAA,KAAA,EAAA;AACEO,UAAAA,GAAG,EAAC,EAAE;AACNC,UAAAA,GAAG,EAAC;SACL,CAAC,gBAEFR,GAAA,CAAA,KAAA,EAAA;AACEO,UAAAA,GAAG,EAAC,EAAE;AACNC,UAAAA,GAAG,EAAC;SACL;AACF,OACE,CAAC;AAAA,KACH,CAAC,eACNR,GAAA,CAACS,MAAM,EAAA;AACL,MAAA,aAAA,EAAY,wBAAwB;MACpCC,IAAI,EAAE,SAANA,IAAIA,GAAA;QAAA,oBAAQV,GAAA,CAACW,UAAU,EAAA;AAACd,UAAAA,SAAS,EAAC,kBAAkB;AAACe,UAAAA,IAAI,EAAE;AAAG,SAAE,CAAC;MAAA,CAAC;AAClEC,MAAAA,YAAY,EAAC,OAAO;AACpBC,MAAAA,KAAK,EAAEtB,CAAC,CAAC,qDAAqD,CAAE;MAChEuB,OAAO,EAAE,SAATA,OAAOA,GAAA;AAAA,QAAA,OAAQ3B,cAAc,CAACN,wBAAwB,CAACG,MAAM,CAAC;AAAA,MAAA;AAAC,KAChE,CAAC;AAAA,GACC,CAAC;AAEV,CAAC;;;;ACpDM,IAAM+B,WAAW,GAAG,SAAdA,WAAWA,CACtBC,eAAe,EACf7B,cAAc,EACd8B,WAAW,EACX7B,mBAAmB,EAChB;AACH,EAAA,IAAM8B,QAAQ,GAAG;IACfC,GAAG,EAAEtC,wBAAwB,CAACE,IAAI;AAClC8B,IAAAA,KAAK,EAAEtB,CAAC,CAAC,qCAAqC,CAAC;IAC/C6B,OAAO,eACLrB,GAAA,CAACd,UAAU,EAAA;AAAOgC,MAAAA,WAAW,EAAXA,WAAW;AAAE7B,MAAAA,mBAAmB,EAAnBA,mBAAmB;AAAED,MAAAA,cAAc,EAAdA;KAAmB;GAE1E;AAED,EAAA,OAAO6B,eAAe,CACnBK,MAAM,CAACH,QAAQ,CAAC,CAChBI,GAAG,CAAC,UAACC,IAAI,EAAEC,GAAG,EAAA;AAAA,IAAA,OAAAC,eAAA,CAAAA,eAAA,CAAA,EAAA,EAAWF,IAAI,CAAA,EAAA,EAAA,EAAA;MAAEG,EAAE,EAAEF,GAAG,GAAG;AAAC,KAAA,CAAA;AAAA,EAAA,CAAG,CAAC;AACnD,CAAC;AAEM,IAAMG,mBAAmB,GAAG,SAAtBA,mBAAmBA,GAAA;AAAA,EAAA,OAC9B,OAAOC,MAAM,KAAK,WAAW,GACzB;IAAEC,KAAK,EAAED,MAAM,CAACE,UAAU;IAAEC,MAAM,EAAEH,MAAM,CAACI;AAAY,GAAC,GACxD;AAAEH,IAAAA,KAAK,EAAE,GAAG;AAAEE,IAAAA,MAAM,EAAE;GAAK;AAAA,CAAA;;ACvBjC,IAAME,mBAAmB,GAAG,SAAtBA,mBAAmBA,GAAS;EAChC,IAAAC,SAAA,GAAgDC,QAAQ,CAAC;AACvDN,MAAAA,KAAK,EAAE,GAAG;AACVE,MAAAA,MAAM,EAAE;AACV,KAAC,CAAC;IAAAK,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAHKI,IAAAA,gBAAgB,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,mBAAmB,GAAAH,UAAA,CAAA,CAAA,CAAA;AAK5CI,EAAAA,eAAe,CAAC,YAAM;AACpBD,IAAAA,mBAAmB,CAACZ,mBAAmB,EAAE,CAAC;IAE1C,SAASc,YAAYA,GAAG;AACtBF,MAAAA,mBAAmB,CAACZ,mBAAmB,EAAE,CAAC;AAC5C,IAAA;AAEAC,IAAAA,MAAM,CAACc,gBAAgB,CAAC,QAAQ,EAAED,YAAY,CAAC;IAE/C,OAAO,YAAA;AAAA,MAAA,OAAMb,MAAM,CAACe,mBAAmB,CAAC,QAAQ,EAAEF,YAAY,CAAC;AAAA,IAAA,CAAA;EACjE,CAAC,EAAE,EAAE,CAAC;AAEN,EAAA,OAAOH,gBAAgB;AACzB,CAAC;;;;ACZD,IAAMM,eAAe,GAAG,SAAlBA,eAAeA,CAAA1D,IAAA,EAIf;AAAA,EAAA,IAHJ2D,mBAAmB,GAAA3D,IAAA,CAAnB2D,mBAAmB;IACnBC,6BAA6B,GAAA5D,IAAA,CAA7B4D,6BAA6B;IAC7BlD,SAAS,GAAAV,IAAA,CAATU,SAAS;AAET,EAAA,IAAAP,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AAET,EAAA,IAAA2C,SAAA,GAAwCC,QAAQ,CAAC,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAA/Ca,IAAAA,YAAY,GAAAX,UAAA,CAAA,CAAA,CAAA;AAAEY,IAAAA,eAAe,GAAAZ,UAAA,CAAA,CAAA,CAAA;AACpC,EAAA,IAAAa,oBAAA,GAA0BhB,mBAAmB,EAAE;IAAvCF,MAAM,GAAAkB,oBAAA,CAANlB,MAAM;IAAEF,KAAK,GAAAoB,oBAAA,CAALpB,KAAK;AAErBqB,EAAAA,SAAS,CAAC,YAAM;IACd,IAAMC,KAAK,GAAGC,UAAU,CAAC,YAAA;MAAA,OAAMJ,eAAe,CAAC,KAAK,CAAC;AAAA,IAAA,CAAA,EAAE,KAAK,CAAC;IAE7D,OAAO,YAAA;MAAA,OAAMK,YAAY,CAACF,KAAK,CAAC;AAAA,IAAA,CAAA;EAClC,CAAC,EAAE,EAAE,CAAC;AAEN,EAAA,oBACExD,IAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAE0D,UAAU,CAAC,qCAAqC,EAAE1D,SAAS,CAAE;AACxE,IAAA,aAAA,EAAY,oCAAoC;IAAAE,QAAA,EAAA,cAEhDC,GAAA,CAACwD,aAAQ,EAAA;AAAOxB,MAAAA,MAAM,EAANA,MAAM;AAAEF,MAAAA,KAAK,EAALA,KAAK;AAAI2B,MAAAA,OAAO,EAAET;KAAe,CAAC,EACzDU,SAAS,CAACX,6BAA6B,CAAC,GACvCA,6BAA6B,gBAE7BnD,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,gEAAgE;MAAAE,QAAA,EAAA,cAC7EC,GAAA,CAACC,UAAU,EAAA;AACTJ,QAAAA,SAAS,EAAC,aAAa;AACvB,QAAA,aAAA,EAAY,kCAAkC;AAC9CM,QAAAA,KAAK,EAAC,IAAI;AAAAJ,QAAAA,QAAA,EACX;AAED,OAAY,CAAC,eACbH,IAAA,CAACK,UAAU,EAAA;AACTJ,QAAAA,SAAS,EAAC,aAAa;AACvB,QAAA,aAAA,EAAY,kCAAkC;AAC9CM,QAAAA,KAAK,EAAC,IAAI;AAAAJ,QAAAA,QAAA,gBAEVC,GAAA,CAAA,MAAA,EAAA;AAAMH,UAAAA,SAAS,EAAC,2BAA2B;UAAAE,QAAA,EACxCP,CAAC,CAAC,2CAA2C;SAC1C,CAAC,eACPQ,GAAA,CAAA,IAAA,EAAA,EAAK,CAAC,EACLR,CAAC,CAAC,sCAAsC,EAAE;AACzCmE,UAAAA,OAAO,EAAEC,UAAU,CAACC,WAAW,CAACF,OAAO;AACzC,SAAC,CAAC;AAAA,OACQ,CAAC;AAAA,KACV,CACN,eACD3D,GAAA,CAACS,MAAM,EAAAiB,aAAA,CAAA;AACL,MAAA,aAAA,EAAY,mCAAmC;AAC/CZ,MAAAA,KAAK,EAAEtB,CAAC,CAAC,uDAAuD,EAAE;QAChEmE,OAAO,EAAEE,WAAW,CAACF;OACtB;KAAE,EACCb,mBAAmB,CACxB,CAAC;AAAA,GACC,CAAC;AAEV,CAAC;;;;;AC7DD,IAAMgB,aAAa,GAAGC,KAAK,CAAC,UAAA5E,IAAA,EAAA;AAAA,EAAA,IAAGK,CAAC,GAAAL,IAAA,CAADK,CAAC;IAAEJ,cAAc,GAAAD,IAAA,CAAdC,cAAc;IAAE4E,QAAQ,GAAA7E,IAAA,CAAR6E,QAAQ;IAAEnE,SAAS,GAAAV,IAAA,CAATU,SAAS;AAAA,EAAA,oBACnED,IAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAE0D,UAAU,CAAC,qCAAqC,EAAE1D,SAAS,CAAE;AACxE,IAAA,aAAA,EAAY,4BAA4B;AAAAE,IAAAA,QAAA,gBAExCH,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,gEAAgE;MAAAE,QAAA,EAAA,cAC7EC,GAAA,CAACC,UAAU,EAAA;AACTJ,QAAAA,SAAS,EAAC,aAAa;AACvB,QAAA,aAAA,EAAY,0BAA0B;AACtCM,QAAAA,KAAK,EAAC,IAAI;AAAAJ,QAAAA,QAAA,EAETP,CAAC,CAAC,qDAAqD,EAAE;AACxDmE,UAAAA,OAAO,EAAEC,UAAU,CAACC,WAAW,CAACF,OAAO;SACxC;AAAC,OACQ,CAAC,eACb3D,GAAA,CAACC,UAAU,EAAA;AACTJ,QAAAA,SAAS,EAAC,aAAa;AACvB,QAAA,aAAA,EAAY,gCAAgC;AAC5CO,QAAAA,UAAU,EAAC,QAAQ;AACnBD,QAAAA,KAAK,EAAC,OAAO;AAAAJ,QAAAA,QAAA,EAEZP,CAAC,CAAC,0CAA0C,EAAE;AAC7CmE,UAAAA,OAAO,EAAEC,UAAU,CAACC,WAAW,CAACF,OAAO;SACxC;AAAC,OACQ,CAAC;AAAA,KACV,CAAC,eACN3D,GAAA,CAACS,MAAM,EAAA;AACL,MAAA,aAAA,EAAY,2BAA2B;MACvCC,IAAI,EAAE,SAANA,IAAIA,GAAA;QAAA,oBAAQV,GAAA,CAACW,UAAU,EAAA;AAACd,UAAAA,SAAS,EAAC,kBAAkB;AAACe,UAAAA,IAAI,EAAE;AAAG,SAAE,CAAC;MAAA,CAAC;AAClEE,MAAAA,KAAK,EAAEtB,CAAC,CAAC,sCAAsC,CAAE;MACjDuB,OAAO,EAAE,SAATA,OAAOA,GAAA;QAAA,OAAQ3B,cAAc,CAAC4E,QAAQ,CAAC;AAAA,MAAA;AAAC,KACzC,CAAC;AAAA,GACC,CAAC;AAAA,CACP,CAAC;;AC3BF,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAA9E,IAAA,EAWV;AAAA,EAAA,IAAA+E,gBAAA,GAAA/E,IAAA,CAVJ+B,WAAW;AAAXA,IAAAA,WAAW,GAAAgD,gBAAA,KAAA,MAAA,GAAGpF,wBAAwB,CAACC,OAAO,GAAAmF,gBAAA;IAAAC,mBAAA,GAAAhF,IAAA,CAC9CC,cAAc;AAAdA,IAAAA,cAAc,GAAA+E,mBAAA,KAAA,MAAA,GAAGC,IAAI,GAAAD,mBAAA;IAAAE,oBAAA,GAAAlF,IAAA,CACrB8B,eAAe;AAAfA,IAAAA,eAAe,GAAAoD,oBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,oBAAA;IAAAC,qBAAA,GAAAnF,IAAA,CACpB2D,mBAAmB;AAAnBA,IAAAA,mBAAmB,GAAAwB,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IAAAC,qBAAA,GAAApF,IAAA,CACxBE,mBAAmB;AAAnBA,IAAAA,mBAAmB,GAAAkF,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IAAAC,eAAA,GAAArF,IAAA,CACxBsF,UAAU;AAAVA,IAAAA,UAAU,GAAAD,eAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,eAAA;IAAAE,qBAAA,GAAAvF,IAAA,CACjBwF,gBAAgB;AAAhBA,IAAAA,gBAAgB,GAAAD,qBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,qBAAA;IAAAE,qBAAA,GAAAzF,IAAA,CACxB0F,sBAAsB;AAAtBA,IAAAA,sBAAsB,GAAAD,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IAAAE,qBAAA,GAAA3F,IAAA,CAC3B4F,wBAAwB;AAAxBA,IAAAA,wBAAwB,GAAAD,qBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,qBAAA;IAC7B/B,6BAA6B,GAAA5D,IAAA,CAA7B4D,6BAA6B;EAE7B,IAAMiC,KAAK,GAAGC,OAAO,CACnB,YAAA;IAAA,OACEjE,WAAW,CACTC,eAAe,EACf7B,cAAc,EACd8B,WAAW,EACX7B,mBACF,CAAC;EAAA,CAAA,EACH,CAAC4B,eAAe,CAClB,CAAC;AAED,EAAA,IAAMiE,QAAQ,GAAGC,MAAM,CAACjE,WAAW,CAAC;AAEpC,EAAA,IAAAiB,SAAA,GAAkCC,QAAQ,CAAC,EAAE,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAvCiD,IAAAA,SAAS,GAAA/C,UAAA,CAAA,CAAA,CAAA;AAAEgD,IAAAA,YAAY,GAAAhD,UAAA,CAAA,CAAA,CAAA;AAE9B,EAAA,IAAMiD,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAGC,OAAO,EAAA;AAAA,IAAA,OACpCP,KAAK,CAACQ,SAAS,CAAC,UAAAhE,IAAI,EAAA;AAAA,MAAA,OAAIA,IAAI,CAACJ,GAAG,KAAKmE,OAAO;IAAA,CAAA,CAAC;AAAA,EAAA,CAAA;AAE/CpC,EAAAA,SAAS,CAAC,YAAM;AACd,IAAA,IAAIjC,WAAW,KAAKgE,QAAQ,CAACO,OAAO,EAAE;AAEtCJ,IAAAA,YAAY,CACVC,sBAAsB,CAACpE,WAAW,CAAC,GACjCoE,sBAAsB,CAACJ,QAAQ,CAACO,OAAO,CAAC,GACtC,SAAS,GACT,UACN,CAAC;IACDP,QAAQ,CAACO,OAAO,GAAGvE,WAAW;AAChC,EAAA,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;AAEjB,EAAA,IAAIA,WAAW,KAAKpC,wBAAwB,CAACC,OAAO,EAAE;IACpD,oBACEiB,GAAA,CAAC8D,aAAa,EAAA;AACN5C,MAAAA,WAAW,EAAXA,WAAW;AAAE9B,MAAAA,cAAc,EAAdA,cAAc;AACjCS,MAAAA,SAAS,EAAEgF,sBAAuB;AAClCb,MAAAA,QAAQ,EAAEgB,KAAK,CAAC,CAAC,CAAC,CAAC5D;AAAI,KACxB,CAAC;AAEN,EAAA;AAEA,EAAA,IAAIF,WAAW,KAAKpC,wBAAwB,CAACG,MAAM,EAAE;IACnD,oBACEe,GAAA,CAAC6C,eAAe,EAAA;AACRC,MAAAA,mBAAmB,EAAnBA,mBAAmB;AAAEC,MAAAA,6BAA6B,EAA7BA,6BAA6B;AACxDlD,MAAAA,SAAS,EAAEkF;AAAyB,KACrC,CAAC;AAEN,EAAA;AAEA,EAAA,IAAMW,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAGC,KAAK,EAAA;IAAA,OAAIvG,cAAc,CAAC4F,KAAK,CAACW,KAAK,CAAC,CAACvE,GAAG,CAAC;AAAA,EAAA,CAAA;AAElE,EAAA,IAAMwE,gBAAgB,GAAGZ,KAAK,CAACa,MAAM,GAAG,CAAC;AAEzC,EAAA,oBACEjG,IAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAEC,UAAU,CAAC,uCAAuC,EAAE;AAC7D,MAAA,qCAAqC,EAAE,CAAC8F;AAC1C,KAAC,CAAE;IAAA7F,QAAA,EAAA,CAEF6F,gBAAgB,iBACf5F,GAAA,CAAA,KAAA,EAAA;AAAKH,MAAAA,SAAS,EAAC,6CAA6C;MAAAE,QAAA,eAC1DC,GAAA,CAAC8F,OAAO,EAAA;AACAd,QAAAA,KAAK,EAALA,KAAK;QACXe,WAAW,EAAEC,WAAW,CAAC;AAAE5E,UAAAA,GAAG,EAAEF;SAAa,EAAE8D,KAAK,CAAE;AACtDiB,QAAAA,cAAc,EAAEtB,gBAAgB,GAAGP,IAAI,GAAGsB;OAC3C;KACE,CACN,EACAV,KAAK,CAACzD,GAAG,CAAC,UAACC,IAAI,EAAEmE,KAAK,EAAA;AAAA,MAAA,oBACrB3F,GAAA,CAAA,KAAA,EAAA;AAEEH,QAAAA,SAAS,EAAEC,UAAU,CAAC,qCAAqC,EAAE;AAC3D,UAAA,gEAAgE,EAC9D2E,UAAU,IAAIW,SAAS,KAAK,SAAS;AACvC,UAAA,iEAAiE,EAC/DX,UAAU,IAAIW,SAAS,KAAK,UAAU;AACxCc,UAAAA,MAAM,EAAEhF,WAAW,KAAKM,IAAI,CAACJ;AAC/B,SAAC,CAAE;AAAArB,QAAAA,QAAA,EAEFyB,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJA,IAAI,CAAEH;AAAO,OAAA,EATTsE,KAUF,CAAC;AAAA,IAAA,CACP,CAAC;AAAA,GACC,CAAC;AAEV;;;;"}
|
|
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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"}
|