@bigbinary/neeto-molecules 1.19.9 → 1.19.10-beta
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/README.md +0 -2
- package/dist/{Chevron-c639aa31.js → Chevron-e9377de4.js} +6 -5
- package/dist/Chevron-e9377de4.js.map +1 -0
- package/dist/ConfigurePageSidebar.js +4 -8
- package/dist/ConfigurePageSidebar.js.map +1 -1
- package/dist/FloatingActionMenu.js +1 -1
- package/dist/MadeWith.js +2 -1
- package/dist/MadeWith.js.map +1 -1
- package/dist/Sidebar.js +3 -9
- package/dist/Sidebar.js.map +1 -1
- package/dist/cjs/{Chevron-5fe59f57.js → Chevron-90e580d5.js} +6 -5
- package/dist/cjs/Chevron-90e580d5.js.map +1 -0
- package/dist/cjs/ConfigurePageSidebar.js +4 -8
- package/dist/cjs/ConfigurePageSidebar.js.map +1 -1
- package/dist/cjs/FloatingActionMenu.js +1 -1
- package/dist/cjs/MadeWith.js +2 -1
- package/dist/cjs/MadeWith.js.map +1 -1
- package/dist/cjs/Sidebar.js +3 -9
- package/dist/cjs/Sidebar.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/en.json +0 -84
- package/types/ProductEmbed.d.ts +53 -9
- package/dist/Chevron-c639aa31.js.map +0 -1
- package/dist/Security.js +0 -341
- package/dist/Security.js.map +0 -1
- package/dist/ThemeSidebar.js +0 -1410
- package/dist/ThemeSidebar.js.map +0 -1
- package/dist/cjs/Chevron-5fe59f57.js.map +0 -1
- package/dist/cjs/Security.js +0 -372
- package/dist/cjs/Security.js.map +0 -1
- package/dist/cjs/ThemeSidebar.js +0 -1443
- package/dist/cjs/ThemeSidebar.js.map +0 -1
- package/types/Security.d.ts +0 -35
- package/types/themeSidebar.d.ts +0 -80
package/dist/Security.js
DELETED
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
-
import React__default, { useState, useEffect } from 'react';
|
|
3
|
-
import '@bigbinary/neeto-cist';
|
|
4
|
-
import { Input, Radio, Form, ActionBlock } from '@bigbinary/neetoui/formik';
|
|
5
|
-
import Container from './Container.js';
|
|
6
|
-
import Header from './Header.js';
|
|
7
|
-
import PageLoader from './PageLoader.js';
|
|
8
|
-
import Scrollable from './Scrollable.js';
|
|
9
|
-
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
10
|
-
import { useFormikContext, ErrorMessage } from 'formik';
|
|
11
|
-
import { globalProps } from '@bigbinary/neeto-commons-frontend/initializers';
|
|
12
|
-
import { Button, Label } from '@bigbinary/neetoui';
|
|
13
|
-
import { remove, isEmpty, identity } from 'ramda';
|
|
14
|
-
import { useTranslation } from 'react-i18next';
|
|
15
|
-
import classnames from 'classnames';
|
|
16
|
-
import { Delete } from '@bigbinary/neeto-icons';
|
|
17
|
-
import { t } from 'i18next';
|
|
18
|
-
import * as yup from 'yup';
|
|
19
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
20
|
-
import useMutationWithInvalidation from '@bigbinary/neeto-commons-frontend/react-utils/useMutationWithInvalidation';
|
|
21
|
-
import { useQuery } from 'react-query';
|
|
22
|
-
import axios from 'axios';
|
|
23
|
-
import './index-e5588516.js';
|
|
24
|
-
import './inject-css-c86de496.js';
|
|
25
|
-
import '@babel/runtime/helpers/extends';
|
|
26
|
-
import '@babel/runtime/helpers/objectWithoutProperties';
|
|
27
|
-
import './Breadcrumbs.js';
|
|
28
|
-
import '@bigbinary/neeto-commons-frontend/utils/general';
|
|
29
|
-
import 'react-router-dom';
|
|
30
|
-
import './MoreDropdown.js';
|
|
31
|
-
import './Search.js';
|
|
32
|
-
import '@bigbinary/neeto-commons-frontend/react-utils/useFuncDebounce';
|
|
33
|
-
import '@bigbinary/neeto-commons-frontend/react-utils/useQueryParams';
|
|
34
|
-
import '@bigbinary/neeto-commons-frontend/react-utils/useUpdateEffect';
|
|
35
|
-
import '@bigbinary/neeto-commons-frontend/utils';
|
|
36
|
-
|
|
37
|
-
var Add = function Add() {
|
|
38
|
-
var _useTranslation = useTranslation(),
|
|
39
|
-
t = _useTranslation.t;
|
|
40
|
-
var _useFormikContext = useFormikContext(),
|
|
41
|
-
setFieldValue = _useFormikContext.setFieldValue,
|
|
42
|
-
allowedKeywords = _useFormikContext.values.allowedKeywords;
|
|
43
|
-
var removeKeyword = function removeKeyword(index) {
|
|
44
|
-
return setFieldValue("allowedKeywords", remove(index, 1, allowedKeywords));
|
|
45
|
-
};
|
|
46
|
-
if (!allowedKeywords) return null;
|
|
47
|
-
return allowedKeywords.map(function (_, index) {
|
|
48
|
-
return /*#__PURE__*/React__default.createElement("div", {
|
|
49
|
-
className: classnames("flex w-full items-start justify-between gap-x-2"),
|
|
50
|
-
key: index
|
|
51
|
-
}, /*#__PURE__*/React__default.createElement(Input, {
|
|
52
|
-
autoFocus: true,
|
|
53
|
-
"data-cy": "keyword-input-field-".concat(index),
|
|
54
|
-
name: "allowedKeywords[".concat(index, "]"),
|
|
55
|
-
placeholder: t("neetoMolecules.security.placeholders.enterKeyword")
|
|
56
|
-
}), /*#__PURE__*/React__default.createElement(Button, {
|
|
57
|
-
"data-cy": "keyword-remove-button-".concat(index),
|
|
58
|
-
icon: Delete,
|
|
59
|
-
style: "text",
|
|
60
|
-
onClick: function onClick() {
|
|
61
|
-
return removeKeyword(index);
|
|
62
|
-
}
|
|
63
|
-
}));
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
68
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
69
|
-
var buildSecuritySettings = function buildSecuritySettings(settings) {
|
|
70
|
-
return _objectSpread(_objectSpread({}, settings.setting), {}, {
|
|
71
|
-
addEmail: false
|
|
72
|
-
});
|
|
73
|
-
};
|
|
74
|
-
var findKeywordDuplicates = function findKeywordDuplicates(list, message, createError) {
|
|
75
|
-
var duplicates = {};
|
|
76
|
-
list === null || list === void 0 ? void 0 : list.forEach(function (value, index) {
|
|
77
|
-
if (duplicates[value]) {
|
|
78
|
-
duplicates[value].push(index);
|
|
79
|
-
} else {
|
|
80
|
-
duplicates[value] = [index];
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
var errors = Object.values(duplicates).map(function (index) {
|
|
84
|
-
return index.length > 1 && new yup.ValidationError(message, list[index.at(-1)], "setting.allowedKeywords[".concat(index.at(-1), "]"));
|
|
85
|
-
});
|
|
86
|
-
if (isEmpty(errors)) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
return createError({
|
|
90
|
-
message: function message() {
|
|
91
|
-
return errors;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
var NOT_SECURED = "no_auth";
|
|
97
|
-
var SESSION_AUTH = "session_auth";
|
|
98
|
-
yup.addMethod(yup.array, "unique", function (message) {
|
|
99
|
-
var mapper = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity;
|
|
100
|
-
return this.test("unique", message, function (list, _ref) {
|
|
101
|
-
var authKind = _ref.parent.authKind;
|
|
102
|
-
return authKind === OTP_ENABLED && (list === null || list === void 0 ? void 0 : list.length) === new Set(list === null || list === void 0 ? void 0 : list.map(mapper)).size ? true : findKeywordDuplicates(list, message, this.createError);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
var QUERY_KEYS = {
|
|
106
|
-
SETTINGS_LIST: "settings-list",
|
|
107
|
-
GETTING_STARTED: "getting-started",
|
|
108
|
-
INTEGRATION_SETTINGS: "integration_settings",
|
|
109
|
-
THEMES_SETTINGS: "themes_setting"
|
|
110
|
-
};
|
|
111
|
-
var SETTINGS_STALE_TIME = 900000; // 15 mins
|
|
112
|
-
var PASSWORD_ENABLED = "basic_auth";
|
|
113
|
-
var OTP_ENABLED = "otp_auth";
|
|
114
|
-
var APP_NAME = {
|
|
115
|
-
neetoKB: "KB",
|
|
116
|
-
neetoCourse: "Course"
|
|
117
|
-
};
|
|
118
|
-
[{
|
|
119
|
-
label: t("neetoMolecules.security.labels.notSecured"),
|
|
120
|
-
value: NOT_SECURED
|
|
121
|
-
}, {
|
|
122
|
-
label: t("neetoMolecules.security.labels.passwordEnabled"),
|
|
123
|
-
value: PASSWORD_ENABLED
|
|
124
|
-
}, {
|
|
125
|
-
label: t("neetoMolecules.security.labels.otpEnabled"),
|
|
126
|
-
value: OTP_ENABLED
|
|
127
|
-
}, {
|
|
128
|
-
label: t("neetoMolecules.security.labels.private"),
|
|
129
|
-
value: SESSION_AUTH
|
|
130
|
-
}];
|
|
131
|
-
var SECURITY_SETTINGS_VALIDATION_SCHEMA = yup.object({
|
|
132
|
-
password: yup.string().when("authKind", {
|
|
133
|
-
is: PASSWORD_ENABLED,
|
|
134
|
-
then: yup.string().required(t("neetoMolecules.security.validation.required", {
|
|
135
|
-
what: t("neetoMolecules.security.labels.password")
|
|
136
|
-
})).min(4, t("neetoMolecules.security.validation.min", {
|
|
137
|
-
entity: t("neetoMolecules.security.labels.password"),
|
|
138
|
-
min: 4
|
|
139
|
-
}))
|
|
140
|
-
}),
|
|
141
|
-
allowedKeywords: yup.array().when("authKind", {
|
|
142
|
-
is: OTP_ENABLED,
|
|
143
|
-
then: yup.array().of(yup.string().trim().required(t("neetoMolecules.security.validation.required", {
|
|
144
|
-
what: t("neetoMolecules.security.labels.keyword")
|
|
145
|
-
}))).unique(t("neetoMolecules.security.placeholders.exists", {
|
|
146
|
-
what: t("neetoMolecules.security.labels.keyword")
|
|
147
|
-
}))
|
|
148
|
-
})
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
var AllowedKeywords = function AllowedKeywords() {
|
|
152
|
-
var _useTranslation = useTranslation(),
|
|
153
|
-
t = _useTranslation.t;
|
|
154
|
-
var _useFormikContext = useFormikContext(),
|
|
155
|
-
setFieldValue = _useFormikContext.setFieldValue,
|
|
156
|
-
_useFormikContext$val = _useFormikContext.values,
|
|
157
|
-
allowedKeywords = _useFormikContext$val.allowedKeywords,
|
|
158
|
-
authKind = _useFormikContext$val.authKind;
|
|
159
|
-
if (authKind !== OTP_ENABLED) return null;
|
|
160
|
-
var appName = APP_NAME[globalProps.appName];
|
|
161
|
-
return /*#__PURE__*/React__default.createElement("div", {
|
|
162
|
-
className: "flex-col space-y-2 py-2"
|
|
163
|
-
}, appName && /*#__PURE__*/React__default.createElement(Label, null, t("neetoMolecules.security.labels.keywordForm.".concat(appName))), /*#__PURE__*/React__default.createElement("div", {
|
|
164
|
-
className: "neeto-ui-bg-pastel-blue neeto-ui-rounded-sm w-full space-y-4 p-6"
|
|
165
|
-
}, /*#__PURE__*/React__default.createElement(Add, null), /*#__PURE__*/React__default.createElement(Button, {
|
|
166
|
-
"data-cy": "add-allowed-keyword-button",
|
|
167
|
-
"data-testid": "add-allowed-keyword-button",
|
|
168
|
-
label: t("neetoMolecules.security.labels.addKeyWord"),
|
|
169
|
-
style: "link",
|
|
170
|
-
onClick: function onClick() {
|
|
171
|
-
return setFieldValue("allowedKeywords", [].concat(_toConsumableArray(allowedKeywords), [""]));
|
|
172
|
-
}
|
|
173
|
-
})), isEmpty(allowedKeywords) && /*#__PURE__*/React__default.createElement(ErrorMessage, {
|
|
174
|
-
className: "neeto-ui-text-error-600",
|
|
175
|
-
component: "div",
|
|
176
|
-
name: "allowedKeywords"
|
|
177
|
-
}));
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
var Password = function Password() {
|
|
181
|
-
var _useTranslation = useTranslation(),
|
|
182
|
-
t = _useTranslation.t;
|
|
183
|
-
var _useFormikContext = useFormikContext(),
|
|
184
|
-
authKind = _useFormikContext.values.authKind,
|
|
185
|
-
getFieldProps = _useFormikContext.getFieldProps;
|
|
186
|
-
if (authKind !== PASSWORD_ENABLED) return null;
|
|
187
|
-
var _getFieldProps = getFieldProps("password"),
|
|
188
|
-
onPasswordChange = _getFieldProps.onChange;
|
|
189
|
-
return /*#__PURE__*/React__default.createElement("div", {
|
|
190
|
-
className: "space-y-4 pb-2"
|
|
191
|
-
}, /*#__PURE__*/React__default.createElement(Input, {
|
|
192
|
-
autoFocus: true,
|
|
193
|
-
unlimitedChars: true,
|
|
194
|
-
className: "w-7/12",
|
|
195
|
-
"data-testid": "password-block",
|
|
196
|
-
label: t("neetoMolecules.security.labels.password"),
|
|
197
|
-
name: "password",
|
|
198
|
-
placeholder: t("neetoMolecules.security.placeholders.enterPassword"),
|
|
199
|
-
onChange: function onChange(e) {
|
|
200
|
-
e.target.value = e.target.value.trim();
|
|
201
|
-
onPasswordChange(e);
|
|
202
|
-
}
|
|
203
|
-
}));
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
var RadioBlock = function RadioBlock(_ref) {
|
|
207
|
-
var radioItems = _ref.radioItems;
|
|
208
|
-
var _useFormikContext = useFormikContext(),
|
|
209
|
-
_useFormikContext$val = _useFormikContext.values.allowedKeywords,
|
|
210
|
-
allowedKeywords = _useFormikContext$val === void 0 ? [] : _useFormikContext$val,
|
|
211
|
-
setFieldValue = _useFormikContext.setFieldValue;
|
|
212
|
-
var handleRadioChange = function handleRadioChange(_ref2) {
|
|
213
|
-
var value = _ref2.event.target.value,
|
|
214
|
-
allowedKeywords = _ref2.allowedKeywords;
|
|
215
|
-
var allowedKeywordsValue = value === OTP_ENABLED ? [].concat(_toConsumableArray(allowedKeywords), [""]) : [];
|
|
216
|
-
setFieldValue("allowedKeywords", allowedKeywordsValue);
|
|
217
|
-
setFieldValue("authKind", value);
|
|
218
|
-
};
|
|
219
|
-
return /*#__PURE__*/React__default.createElement(Radio, {
|
|
220
|
-
stacked: true,
|
|
221
|
-
name: "authKind",
|
|
222
|
-
onChange: function onChange(event) {
|
|
223
|
-
return handleRadioChange({
|
|
224
|
-
event: event,
|
|
225
|
-
allowedKeywords: allowedKeywords
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
}, radioItems.map(function (_ref3) {
|
|
229
|
-
var label = _ref3.label,
|
|
230
|
-
value = _ref3.value;
|
|
231
|
-
return /*#__PURE__*/React__default.createElement(Radio.Item, {
|
|
232
|
-
key: value,
|
|
233
|
-
label: label,
|
|
234
|
-
value: value
|
|
235
|
-
});
|
|
236
|
-
}));
|
|
237
|
-
};
|
|
238
|
-
|
|
239
|
-
var fetch = function fetch(url) {
|
|
240
|
-
return axios.get(url);
|
|
241
|
-
};
|
|
242
|
-
var update = function update(url, payload) {
|
|
243
|
-
return axios.put(url, payload);
|
|
244
|
-
};
|
|
245
|
-
var settingsApi = {
|
|
246
|
-
fetch: fetch,
|
|
247
|
-
update: update
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
var SETTINGS_LIST = QUERY_KEYS.SETTINGS_LIST,
|
|
251
|
-
GETTING_STARTED = QUERY_KEYS.GETTING_STARTED,
|
|
252
|
-
THEMES_SETTINGS = QUERY_KEYS.THEMES_SETTINGS;
|
|
253
|
-
var useFetchSettings = function useFetchSettings(url) {
|
|
254
|
-
return useQuery(SETTINGS_LIST, function () {
|
|
255
|
-
return settingsApi.fetch(url);
|
|
256
|
-
}, {
|
|
257
|
-
staleTime: SETTINGS_STALE_TIME
|
|
258
|
-
});
|
|
259
|
-
};
|
|
260
|
-
var useUpdateSetting = function useUpdateSetting(url) {
|
|
261
|
-
return useMutationWithInvalidation(function (payload) {
|
|
262
|
-
return settingsApi.update(url, payload);
|
|
263
|
-
}, {
|
|
264
|
-
keysToInvalidate: [SETTINGS_LIST, GETTING_STARTED, THEMES_SETTINGS]
|
|
265
|
-
});
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
var Security = function Security(_ref) {
|
|
269
|
-
var url = _ref.url,
|
|
270
|
-
breadcrumbs = _ref.breadcrumbs,
|
|
271
|
-
title = _ref.title,
|
|
272
|
-
radioItems = _ref.radioItems;
|
|
273
|
-
var _useFetchSettings = useFetchSettings(url),
|
|
274
|
-
_useFetchSettings$dat = _useFetchSettings.data,
|
|
275
|
-
settings = _useFetchSettings$dat === void 0 ? {} : _useFetchSettings$dat,
|
|
276
|
-
isLoading = _useFetchSettings.isLoading;
|
|
277
|
-
var _useUpdateSetting = useUpdateSetting(url),
|
|
278
|
-
updateSettings = _useUpdateSetting.mutate;
|
|
279
|
-
var _useState = useState(false),
|
|
280
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
281
|
-
isMobileScreen = _useState2[0],
|
|
282
|
-
setIsMobileScreen = _useState2[1];
|
|
283
|
-
var isLargerScreen = function isLargerScreen() {
|
|
284
|
-
return window.innerWidth > 1024;
|
|
285
|
-
};
|
|
286
|
-
var handleSubmit = function handleSubmit(values, _ref2) {
|
|
287
|
-
var setSubmitting = _ref2.setSubmitting;
|
|
288
|
-
updateSettings(values, {
|
|
289
|
-
onSettled: function onSettled() {
|
|
290
|
-
return setSubmitting(false);
|
|
291
|
-
}
|
|
292
|
-
});
|
|
293
|
-
};
|
|
294
|
-
useEffect(function () {
|
|
295
|
-
var handleResize = function handleResize() {
|
|
296
|
-
if (isLargerScreen()) setIsMobileScreen(false);else setIsMobileScreen(true);
|
|
297
|
-
};
|
|
298
|
-
window.addEventListener("resize", handleResize);
|
|
299
|
-
return function () {
|
|
300
|
-
return window.removeEventListener("resize", handleResize);
|
|
301
|
-
};
|
|
302
|
-
}, []);
|
|
303
|
-
if (isLoading) return /*#__PURE__*/React__default.createElement(PageLoader, null);
|
|
304
|
-
return /*#__PURE__*/React__default.createElement(Container, {
|
|
305
|
-
isHeaderFixed: true
|
|
306
|
-
}, /*#__PURE__*/React__default.createElement(Header, {
|
|
307
|
-
breadcrumbs: breadcrumbs,
|
|
308
|
-
title: title,
|
|
309
|
-
"data-cy": "general-settings-heading",
|
|
310
|
-
size: isMobileScreen ? "small" : "large"
|
|
311
|
-
}), /*#__PURE__*/React__default.createElement(Scrollable, {
|
|
312
|
-
className: "w-full pb-6"
|
|
313
|
-
}, /*#__PURE__*/React__default.createElement(Form, {
|
|
314
|
-
className: "mx-auto w-full max-w-3xl space-y-6 md:px-0 lg:px-6",
|
|
315
|
-
formikProps: {
|
|
316
|
-
initialValues: buildSecuritySettings(settings),
|
|
317
|
-
validationSchema: SECURITY_SETTINGS_VALIDATION_SCHEMA,
|
|
318
|
-
onSubmit: handleSubmit,
|
|
319
|
-
enableReinitialize: true
|
|
320
|
-
}
|
|
321
|
-
}, function (_ref3) {
|
|
322
|
-
var dirty = _ref3.dirty,
|
|
323
|
-
isSubmitting = _ref3.isSubmitting;
|
|
324
|
-
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(RadioBlock, {
|
|
325
|
-
radioItems: radioItems
|
|
326
|
-
}), /*#__PURE__*/React__default.createElement(Password, null), /*#__PURE__*/React__default.createElement(AllowedKeywords, null), /*#__PURE__*/React__default.createElement(ActionBlock, {
|
|
327
|
-
cancelButtonProps: {
|
|
328
|
-
disabled: false,
|
|
329
|
-
className: "ml-3"
|
|
330
|
-
},
|
|
331
|
-
className: "mt-6 w-full justify-start",
|
|
332
|
-
submitButtonProps: {
|
|
333
|
-
loading: isSubmitting,
|
|
334
|
-
disabled: !dirty || isSubmitting
|
|
335
|
-
}
|
|
336
|
-
}));
|
|
337
|
-
})));
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
export { Security as default };
|
|
341
|
-
//# sourceMappingURL=Security.js.map
|
package/dist/Security.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Security.js","sources":["../src/components/Security/AllowedKeywords/Add.jsx","../src/components/Security/utils.js","../src/components/Security/constants.js","../src/components/Security/AllowedKeywords/index.jsx","../src/components/Security/PasswordBlock.jsx","../src/components/Security/RadioBlock.jsx","../src/components/Security/api.js","../src/components/Security/useSecurityApi.js","../src/components/Security/index.jsx"],"sourcesContent":["import React from \"react\";\n\nimport classNames from \"classnames\";\nimport { useFormikContext } from \"formik\";\nimport { Delete } from \"neetoicons\";\nimport { Button } from \"neetoui\";\nimport { Input } from \"neetoui/formik\";\nimport { remove } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Add = () => {\n const { t } = useTranslation();\n const {\n setFieldValue,\n values: { allowedKeywords },\n } = useFormikContext();\n\n const removeKeyword = index =>\n setFieldValue(\"allowedKeywords\", remove(index, 1, allowedKeywords));\n\n if (!allowedKeywords) return null;\n\n return allowedKeywords.map((_, index) => (\n <div\n className={classNames(\"flex w-full items-start justify-between gap-x-2\")}\n key={index}\n >\n <Input\n autoFocus\n data-cy={`keyword-input-field-${index}`}\n name={`allowedKeywords[${index}]`}\n placeholder={t(\"neetoMolecules.security.placeholders.enterKeyword\")}\n />\n <Button\n data-cy={`keyword-remove-button-${index}`}\n icon={Delete}\n style=\"text\"\n onClick={() => removeKeyword(index)}\n />\n </div>\n ));\n};\n\nexport default Add;\n","import { isEmpty } from \"ramda\";\nimport * as yup from \"yup\";\n\nexport const buildSecuritySettings = settings => ({\n ...settings.setting,\n addEmail: false,\n});\n\nexport const findKeywordDuplicates = (list, message, createError) => {\n const duplicates = {};\n\n list?.forEach((value, index) => {\n if (duplicates[value]) {\n duplicates[value].push(index);\n } else {\n duplicates[value] = [index];\n }\n });\n\n const errors = Object.values(duplicates).map(\n index =>\n index.length > 1 &&\n new yup.ValidationError(\n message,\n list[index.at(-1)],\n `setting.allowedKeywords[${index.at(-1)}]`\n )\n );\n\n if (isEmpty(errors)) {\n return true;\n }\n\n return createError({ message: () => errors });\n};\n","import { t } from \"i18next\";\nimport { identity } from \"ramda\";\nimport * as yup from \"yup\";\n\nimport { findKeywordDuplicates } from \"./utils\";\n\nconst NOT_SECURED = \"no_auth\";\nconst SESSION_AUTH = \"session_auth\";\n\nyup.addMethod(yup.array, \"unique\", function (message, mapper = identity) {\n return this.test(\n \"unique\",\n message,\n function (list, { parent: { authKind } }) {\n return authKind === OTP_ENABLED &&\n list?.length === new Set(list?.map(mapper)).size\n ? true\n : findKeywordDuplicates(list, message, this.createError);\n }\n );\n});\n\nexport const QUERY_KEYS = {\n SETTINGS_LIST: \"settings-list\",\n GETTING_STARTED: \"getting-started\",\n INTEGRATION_SETTINGS: \"integration_settings\",\n THEMES_SETTINGS: \"themes_setting\",\n};\nexport const SETTINGS_STALE_TIME = 900_000; // 15 mins\nexport const PASSWORD_ENABLED = \"basic_auth\";\nexport const OTP_ENABLED = \"otp_auth\";\n\nexport const APP_NAME = { neetoKB: \"KB\", neetoCourse: \"Course\" };\n\nexport const AUTH_KINDS = [\n {\n label: t(\"neetoMolecules.security.labels.notSecured\"),\n value: NOT_SECURED,\n },\n {\n label: t(\"neetoMolecules.security.labels.passwordEnabled\"),\n value: PASSWORD_ENABLED,\n },\n {\n label: t(\"neetoMolecules.security.labels.otpEnabled\"),\n value: OTP_ENABLED,\n },\n {\n label: t(\"neetoMolecules.security.labels.private\"),\n value: SESSION_AUTH,\n },\n];\n\nexport const SECURITY_SETTINGS_VALIDATION_SCHEMA = yup.object({\n password: yup.string().when(\"authKind\", {\n is: PASSWORD_ENABLED,\n then: yup\n .string()\n .required(\n t(\"neetoMolecules.security.validation.required\", {\n what: t(\"neetoMolecules.security.labels.password\"),\n })\n )\n .min(\n 4,\n t(\"neetoMolecules.security.validation.min\", {\n entity: t(\"neetoMolecules.security.labels.password\"),\n min: 4,\n })\n ),\n }),\n allowedKeywords: yup.array().when(\"authKind\", {\n is: OTP_ENABLED,\n then: yup\n .array()\n .of(\n yup\n .string()\n .trim()\n .required(\n t(\"neetoMolecules.security.validation.required\", {\n what: t(\"neetoMolecules.security.labels.keyword\"),\n })\n )\n )\n .unique(\n t(\"neetoMolecules.security.placeholders.exists\", {\n what: t(\"neetoMolecules.security.labels.keyword\"),\n })\n ),\n }),\n});\n","import React from \"react\";\n\nimport { ErrorMessage, useFormikContext } from \"formik\";\nimport { globalProps } from \"neetocommons/initializers\";\nimport { Button, Label } from \"neetoui\";\nimport { isEmpty } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Add from \"./Add\";\n\nimport { OTP_ENABLED, APP_NAME } from \"../constants\";\n\nconst AllowedKeywords = () => {\n const { t } = useTranslation();\n const {\n setFieldValue,\n values: { allowedKeywords, authKind },\n } = useFormikContext();\n\n if (authKind !== OTP_ENABLED) return null;\n\n const appName = APP_NAME[globalProps.appName];\n\n return (\n <div className=\"flex-col space-y-2 py-2\">\n {appName && (\n <Label>\n {t(`neetoMolecules.security.labels.keywordForm.${appName}`)}\n </Label>\n )}\n <div className=\"neeto-ui-bg-pastel-blue neeto-ui-rounded-sm w-full space-y-4 p-6\">\n <Add />\n <Button\n data-cy=\"add-allowed-keyword-button\"\n data-testid=\"add-allowed-keyword-button\"\n label={t(\"neetoMolecules.security.labels.addKeyWord\")}\n style=\"link\"\n onClick={() =>\n setFieldValue(\"allowedKeywords\", [...allowedKeywords, \"\"])\n }\n />\n </div>\n {isEmpty(allowedKeywords) && (\n <ErrorMessage\n className=\"neeto-ui-text-error-600\"\n component=\"div\"\n name=\"allowedKeywords\"\n />\n )}\n </div>\n );\n};\n\nexport default AllowedKeywords;\n","import React from \"react\";\n\nimport { useFormikContext } from \"formik\";\nimport { Input } from \"neetoui/formik\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { PASSWORD_ENABLED } from \"./constants\";\n\nconst Password = () => {\n const { t } = useTranslation();\n const {\n values: { authKind },\n getFieldProps,\n } = useFormikContext();\n\n if (authKind !== PASSWORD_ENABLED) return null;\n\n const { onChange: onPasswordChange } = getFieldProps(\"password\");\n\n return (\n <div className=\"space-y-4 pb-2\">\n <Input\n autoFocus\n unlimitedChars\n className=\"w-7/12\"\n data-testid=\"password-block\"\n label={t(\"neetoMolecules.security.labels.password\")}\n name=\"password\"\n placeholder={t(\"neetoMolecules.security.placeholders.enterPassword\")}\n onChange={e => {\n e.target.value = e.target.value.trim();\n onPasswordChange(e);\n }}\n />\n </div>\n );\n};\n\nexport default Password;\n","import React from \"react\";\n\nimport { useFormikContext } from \"formik\";\nimport { Radio } from \"neetoui/formik\";\n\nimport { OTP_ENABLED } from \"./constants\";\n\nconst RadioBlock = ({ radioItems }) => {\n const {\n values: { allowedKeywords = [] },\n setFieldValue,\n } = useFormikContext();\n\n const handleRadioChange = ({\n event: {\n target: { value },\n },\n allowedKeywords,\n }) => {\n const allowedKeywordsValue =\n value === OTP_ENABLED ? [...allowedKeywords, \"\"] : [];\n setFieldValue(\"allowedKeywords\", allowedKeywordsValue);\n setFieldValue(\"authKind\", value);\n };\n\n return (\n <Radio\n stacked\n name=\"authKind\"\n onChange={event => handleRadioChange({ event, allowedKeywords })}\n >\n {radioItems.map(({ label, value }) => (\n <Radio.Item key={value} {...{ label, value }} />\n ))}\n </Radio>\n );\n};\n\nexport default RadioBlock;\n","import axios from \"axios\";\n\nconst fetch = url => axios.get(url);\n\nconst update = (url, payload) => axios.put(url, payload);\n\nconst settingsApi = { fetch, update };\n\nexport default settingsApi;\n","import useMutationWithInvalidation from \"neetocommons/react-utils/useMutationWithInvalidation\";\nimport { useQuery } from \"react-query\";\n\nimport settingsApi from \"./api\";\nimport { QUERY_KEYS, SETTINGS_STALE_TIME } from \"./constants\";\n\nconst { SETTINGS_LIST, GETTING_STARTED, THEMES_SETTINGS } = QUERY_KEYS;\n\nconst useFetchSettings = url =>\n useQuery(SETTINGS_LIST, () => settingsApi.fetch(url), {\n staleTime: SETTINGS_STALE_TIME,\n });\n\nconst useUpdateSetting = url =>\n useMutationWithInvalidation(payload => settingsApi.update(url, payload), {\n keysToInvalidate: [SETTINGS_LIST, GETTING_STARTED, THEMES_SETTINGS],\n });\n\nexport { useFetchSettings, useUpdateSetting };\n","import React, { useState, useEffect } from \"react\";\n\nimport { toLabelAndValue } from \"neetocist\";\nimport { Form, ActionBlock } from \"neetoui/formik\";\nimport PropTypes from \"prop-types\";\n\nimport Container from \"components/Container\";\nimport Header from \"components/Header\";\nimport PageLoader from \"components/PageLoader\";\nimport Scrollable from \"components/Scrollable\";\n\nimport AllowedKeywords from \"./AllowedKeywords\";\nimport { SECURITY_SETTINGS_VALIDATION_SCHEMA } from \"./constants\";\nimport Password from \"./PasswordBlock\";\nimport RadioBlock from \"./RadioBlock\";\nimport { useFetchSettings, useUpdateSetting } from \"./useSecurityApi\";\nimport { buildSecuritySettings } from \"./utils\";\n\nconst Security = ({ url, breadcrumbs, title, radioItems }) => {\n const { data: settings = {}, isLoading } = useFetchSettings(url);\n const { mutate: updateSettings } = useUpdateSetting(url);\n\n const [isMobileScreen, setIsMobileScreen] = useState(false);\n\n const isLargerScreen = () => window.innerWidth > 1024;\n\n const handleSubmit = (values, { setSubmitting }) => {\n updateSettings(values, { onSettled: () => setSubmitting(false) });\n };\n\n useEffect(() => {\n const handleResize = () => {\n if (isLargerScreen()) setIsMobileScreen(false);\n else setIsMobileScreen(true);\n };\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n if (isLoading) return <PageLoader />;\n\n return (\n <Container isHeaderFixed>\n <Header\n {...{ breadcrumbs, title }}\n data-cy=\"general-settings-heading\"\n size={isMobileScreen ? \"small\" : \"large\"}\n />\n <Scrollable className=\"w-full pb-6\">\n <Form\n className=\"mx-auto w-full max-w-3xl space-y-6 md:px-0 lg:px-6\"\n formikProps={{\n initialValues: buildSecuritySettings(settings),\n validationSchema: SECURITY_SETTINGS_VALIDATION_SCHEMA,\n onSubmit: handleSubmit,\n enableReinitialize: true,\n }}\n >\n {({ dirty, isSubmitting }) => (\n <>\n <RadioBlock {...{ radioItems }} />\n <Password />\n <AllowedKeywords />\n <ActionBlock\n cancelButtonProps={{ disabled: false, className: \"ml-3\" }}\n className=\"mt-6 w-full justify-start\"\n submitButtonProps={{\n loading: isSubmitting,\n disabled: !dirty || isSubmitting,\n }}\n />\n </>\n )}\n </Form>\n </Scrollable>\n </Container>\n );\n};\n\nSecurity.propTypes = {\n /**\n * To set a title in the Header section.\n */\n title: PropTypes.node,\n /**\n * API path to manage security record.\n */\n url: PropTypes.string,\n /**\n * To show breadcrumbs in the Header section. `text` accepts a text string to be shown as the breadcrumb and `link` accepts relative URL path for the breadcrumb.\n */\n breadcrumbs: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string,\n link: PropTypes.string,\n })\n ),\n radioItems: PropTypes.arrayOf(\n PropTypes.shape(toLabelAndValue(PropTypes.string))\n ),\n};\n\nexport default Security;\n"],"names":["Add","_useTranslation","useTranslation","t","_useFormikContext","useFormikContext","setFieldValue","allowedKeywords","values","removeKeyword","index","remove","map","_","React","createElement","className","classNames","key","Input","autoFocus","concat","name","placeholder","Button","icon","Delete","style","onClick","buildSecuritySettings","settings","_objectSpread","setting","addEmail","findKeywordDuplicates","list","message","createError","duplicates","forEach","value","push","errors","Object","length","yup","ValidationError","at","isEmpty","NOT_SECURED","SESSION_AUTH","addMethod","array","mapper","arguments","undefined","identity","test","_ref","authKind","parent","OTP_ENABLED","Set","size","QUERY_KEYS","SETTINGS_LIST","GETTING_STARTED","INTEGRATION_SETTINGS","THEMES_SETTINGS","SETTINGS_STALE_TIME","PASSWORD_ENABLED","APP_NAME","neetoKB","neetoCourse","label","SECURITY_SETTINGS_VALIDATION_SCHEMA","object","password","string","when","is","then","required","what","min","entity","of","trim","unique","AllowedKeywords","_useFormikContext$val","appName","globalProps","Label","_toConsumableArray","ErrorMessage","component","Password","getFieldProps","_getFieldProps","onPasswordChange","onChange","unlimitedChars","e","target","RadioBlock","radioItems","handleRadioChange","_ref2","event","allowedKeywordsValue","Radio","stacked","_ref3","Item","fetch","url","axios","get","update","payload","put","settingsApi","useFetchSettings","useQuery","staleTime","useUpdateSetting","useMutationWithInvalidation","keysToInvalidate","Security","breadcrumbs","title","_useFetchSettings","_useFetchSettings$dat","data","isLoading","_useUpdateSetting","updateSettings","mutate","_useState","useState","_useState2","_slicedToArray","isMobileScreen","setIsMobileScreen","isLargerScreen","window","innerWidth","handleSubmit","setSubmitting","onSettled","useEffect","handleResize","addEventListener","removeEventListener","PageLoader","Container","isHeaderFixed","Header","Scrollable","Form","formikProps","initialValues","validationSchema","onSubmit","enableReinitialize","dirty","isSubmitting","Fragment","ActionBlock","cancelButtonProps","disabled","submitButtonProps","loading"],"mappings":"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"}
|