@bigbinary/neeto-molecules 1.0.98 → 1.0.99
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 +1 -0
- package/dist/IntegrationCard.cjs.js +37 -2
- package/dist/IntegrationCard.cjs.js.map +1 -1
- package/dist/IntegrationCard.js +37 -2
- package/dist/IntegrationCard.js.map +1 -1
- package/dist/IpRestriction.cjs.js +7 -4
- package/dist/IpRestriction.cjs.js.map +1 -1
- package/dist/IpRestriction.js +7 -4
- package/dist/IpRestriction.js.map +1 -1
- package/dist/Settings.cjs.js +387 -0
- package/dist/Settings.cjs.js.map +1 -0
- package/dist/Settings.js +381 -0
- package/dist/Settings.js.map +1 -0
- package/package.json +1 -1
- package/src/translations/en.json +3 -0
- package/types/IntegrationCard.d.ts +23 -21
- package/types/Settings.d.ts +95 -0
package/dist/Settings.js
ADDED
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import React, { memo, useEffect } from 'react';
|
|
2
|
+
import { joinHyphenCase, getQueryParams } from '@bigbinary/neeto-commons-frontend/utils';
|
|
3
|
+
import { Dropdown as Dropdown$1, Tag, Tooltip, Typography, Spinner, Button, NoData } from '@bigbinary/neetoui';
|
|
4
|
+
import { isNotNil, isEmpty } from 'ramda';
|
|
5
|
+
import { useTranslation } from 'react-i18next';
|
|
6
|
+
import { noop, isNotEmpty } from '@bigbinary/neeto-commons-frontend/pure';
|
|
7
|
+
import { MenuVertical, Warning, Check } from '@bigbinary/neeto-icons';
|
|
8
|
+
import { withRouter, Link } from 'react-router-dom';
|
|
9
|
+
|
|
10
|
+
function _extends() {
|
|
11
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
12
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
13
|
+
var source = arguments[i];
|
|
14
|
+
for (var key in source) {
|
|
15
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
16
|
+
target[key] = source[key];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return target;
|
|
21
|
+
};
|
|
22
|
+
return _extends.apply(this, arguments);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
26
|
+
if (source == null) return {};
|
|
27
|
+
var target = {};
|
|
28
|
+
var sourceKeys = Object.keys(source);
|
|
29
|
+
var key, i;
|
|
30
|
+
for (i = 0; i < sourceKeys.length; i++) {
|
|
31
|
+
key = sourceKeys[i];
|
|
32
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
33
|
+
target[key] = source[key];
|
|
34
|
+
}
|
|
35
|
+
return target;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function _objectWithoutProperties(source, excluded) {
|
|
39
|
+
if (source == null) return {};
|
|
40
|
+
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
41
|
+
var key, i;
|
|
42
|
+
if (Object.getOwnPropertySymbols) {
|
|
43
|
+
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
44
|
+
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
45
|
+
key = sourceSymbolKeys[i];
|
|
46
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
47
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
48
|
+
target[key] = source[key];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
var classnames$1 = {exports: {}};
|
|
55
|
+
|
|
56
|
+
/*!
|
|
57
|
+
Copyright (c) 2018 Jed Watson.
|
|
58
|
+
Licensed under the MIT License (MIT), see
|
|
59
|
+
http://jedwatson.github.io/classnames
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
(function (module) {
|
|
63
|
+
/* global define */
|
|
64
|
+
|
|
65
|
+
(function () {
|
|
66
|
+
|
|
67
|
+
var hasOwn = {}.hasOwnProperty;
|
|
68
|
+
|
|
69
|
+
function classNames() {
|
|
70
|
+
var classes = [];
|
|
71
|
+
|
|
72
|
+
for (var i = 0; i < arguments.length; i++) {
|
|
73
|
+
var arg = arguments[i];
|
|
74
|
+
if (!arg) continue;
|
|
75
|
+
|
|
76
|
+
var argType = typeof arg;
|
|
77
|
+
|
|
78
|
+
if (argType === 'string' || argType === 'number') {
|
|
79
|
+
classes.push(arg);
|
|
80
|
+
} else if (Array.isArray(arg)) {
|
|
81
|
+
if (arg.length) {
|
|
82
|
+
var inner = classNames.apply(null, arg);
|
|
83
|
+
if (inner) {
|
|
84
|
+
classes.push(inner);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
} else if (argType === 'object') {
|
|
88
|
+
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
|
|
89
|
+
classes.push(arg.toString());
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
for (var key in arg) {
|
|
94
|
+
if (hasOwn.call(arg, key) && arg[key]) {
|
|
95
|
+
classes.push(key);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return classes.join(' ');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (module.exports) {
|
|
105
|
+
classNames.default = classNames;
|
|
106
|
+
module.exports = classNames;
|
|
107
|
+
} else {
|
|
108
|
+
window.classNames = classNames;
|
|
109
|
+
}
|
|
110
|
+
}());
|
|
111
|
+
} (classnames$1));
|
|
112
|
+
|
|
113
|
+
var classnames = classnames$1.exports;
|
|
114
|
+
|
|
115
|
+
var Menu = Dropdown$1.Menu,
|
|
116
|
+
MenuItem = Dropdown$1.MenuItem;
|
|
117
|
+
var Dropdown = function Dropdown(_ref) {
|
|
118
|
+
var customDropdown = _ref.customDropdown,
|
|
119
|
+
_ref$handleManage = _ref.handleManage,
|
|
120
|
+
handleManage = _ref$handleManage === void 0 ? noop : _ref$handleManage,
|
|
121
|
+
_ref$hideDisconnect = _ref.hideDisconnect,
|
|
122
|
+
hideDisconnect = _ref$hideDisconnect === void 0 ? false : _ref$hideDisconnect,
|
|
123
|
+
_ref$onDisconnect = _ref.onDisconnect,
|
|
124
|
+
onDisconnect = _ref$onDisconnect === void 0 ? noop : _ref$onDisconnect;
|
|
125
|
+
var _useTranslation = useTranslation(),
|
|
126
|
+
t = _useTranslation.t;
|
|
127
|
+
if (isNotNil(customDropdown)) {
|
|
128
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
129
|
+
onClick: function onClick(e) {
|
|
130
|
+
return e.stopPropagation();
|
|
131
|
+
}
|
|
132
|
+
}, customDropdown);
|
|
133
|
+
}
|
|
134
|
+
var isManageable = isNotNil(handleManage);
|
|
135
|
+
if (!isManageable && hideDisconnect) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
139
|
+
onClick: function onClick(e) {
|
|
140
|
+
return e.stopPropagation();
|
|
141
|
+
}
|
|
142
|
+
}, /*#__PURE__*/React.createElement(Dropdown$1, {
|
|
143
|
+
buttonStyle: "text",
|
|
144
|
+
icon: MenuVertical
|
|
145
|
+
}, /*#__PURE__*/React.createElement(Menu, null, isManageable && /*#__PURE__*/React.createElement(MenuItem.Button, {
|
|
146
|
+
onClick: handleManage
|
|
147
|
+
}, t("neetoMolecules.integrationCard.manage")), !hideDisconnect && /*#__PURE__*/React.createElement(MenuItem.Button, {
|
|
148
|
+
onClick: onDisconnect
|
|
149
|
+
}, t("neetoMolecules.integrationCard.disconnect")))));
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
var Status = function Status(_ref) {
|
|
153
|
+
var isExpired = _ref.isExpired;
|
|
154
|
+
var _useTranslation = useTranslation(),
|
|
155
|
+
t = _useTranslation.t;
|
|
156
|
+
var tagProps = isExpired ? {
|
|
157
|
+
icon: Warning,
|
|
158
|
+
label: t("neetoMolecules.integrationCard.tags.expired"),
|
|
159
|
+
style: "warning"
|
|
160
|
+
} : {
|
|
161
|
+
icon: Check,
|
|
162
|
+
label: t("neetoMolecules.integrationCard.tags.connected"),
|
|
163
|
+
style: "success"
|
|
164
|
+
};
|
|
165
|
+
return /*#__PURE__*/React.createElement(Tag, _extends({
|
|
166
|
+
className: "flex-row-reverse"
|
|
167
|
+
}, tagProps, {
|
|
168
|
+
"data-testid": "integration-status"
|
|
169
|
+
}));
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
var _excluded$1 = ["icon", "subIcons", "label", "description", "className", "onConnect", "onDisconnect", "onManage", "isLoading", "isConnected", "isFailed", "isExpired", "disabled", "hidden", "hideDisconnect", "onClick", "tooltipProps", "customDropdown", "dataCy", "children"];
|
|
173
|
+
var IntegrationCard = function IntegrationCard(_ref) {
|
|
174
|
+
var Icon = _ref.icon,
|
|
175
|
+
_ref$subIcons = _ref.subIcons,
|
|
176
|
+
subIcons = _ref$subIcons === void 0 ? [] : _ref$subIcons,
|
|
177
|
+
_ref$label = _ref.label,
|
|
178
|
+
label = _ref$label === void 0 ? "" : _ref$label,
|
|
179
|
+
_ref$description = _ref.description,
|
|
180
|
+
description = _ref$description === void 0 ? "" : _ref$description,
|
|
181
|
+
_ref$className = _ref.className,
|
|
182
|
+
className = _ref$className === void 0 ? "" : _ref$className,
|
|
183
|
+
_ref$onConnect = _ref.onConnect,
|
|
184
|
+
onConnect = _ref$onConnect === void 0 ? noop : _ref$onConnect,
|
|
185
|
+
_ref$onDisconnect = _ref.onDisconnect,
|
|
186
|
+
onDisconnect = _ref$onDisconnect === void 0 ? noop : _ref$onDisconnect,
|
|
187
|
+
_ref$onManage = _ref.onManage,
|
|
188
|
+
onManage = _ref$onManage === void 0 ? undefined : _ref$onManage,
|
|
189
|
+
_ref$isLoading = _ref.isLoading,
|
|
190
|
+
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
|
|
191
|
+
_ref$isConnected = _ref.isConnected,
|
|
192
|
+
isConnected = _ref$isConnected === void 0 ? false : _ref$isConnected,
|
|
193
|
+
_ref$isFailed = _ref.isFailed,
|
|
194
|
+
isFailed = _ref$isFailed === void 0 ? false : _ref$isFailed,
|
|
195
|
+
_ref$isExpired = _ref.isExpired,
|
|
196
|
+
isExpired = _ref$isExpired === void 0 ? false : _ref$isExpired,
|
|
197
|
+
_ref$disabled = _ref.disabled,
|
|
198
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
199
|
+
_ref$hidden = _ref.hidden,
|
|
200
|
+
hidden = _ref$hidden === void 0 ? false : _ref$hidden,
|
|
201
|
+
_ref$hideDisconnect = _ref.hideDisconnect,
|
|
202
|
+
hideDisconnect = _ref$hideDisconnect === void 0 ? false : _ref$hideDisconnect,
|
|
203
|
+
_ref$onClick = _ref.onClick,
|
|
204
|
+
onCardClick = _ref$onClick === void 0 ? undefined : _ref$onClick,
|
|
205
|
+
_ref$tooltipProps = _ref.tooltipProps,
|
|
206
|
+
tooltipProps = _ref$tooltipProps === void 0 ? {} : _ref$tooltipProps,
|
|
207
|
+
_ref$customDropdown = _ref.customDropdown,
|
|
208
|
+
customDropdown = _ref$customDropdown === void 0 ? null : _ref$customDropdown,
|
|
209
|
+
_ref$dataCy = _ref.dataCy,
|
|
210
|
+
dataCy = _ref$dataCy === void 0 ? "" : _ref$dataCy,
|
|
211
|
+
children = _ref.children,
|
|
212
|
+
otherProps = _objectWithoutProperties(_ref, _excluded$1);
|
|
213
|
+
var _useTranslation = useTranslation(),
|
|
214
|
+
t = _useTranslation.t;
|
|
215
|
+
if (hidden) return null;
|
|
216
|
+
var isCardClickable = isConnected && isNotNil(onCardClick);
|
|
217
|
+
var cardProps = isCardClickable ? {
|
|
218
|
+
onClick: onCardClick
|
|
219
|
+
} : {};
|
|
220
|
+
return /*#__PURE__*/React.createElement(Tooltip, _extends({
|
|
221
|
+
disabled: !disabled,
|
|
222
|
+
position: "top",
|
|
223
|
+
content: disabled && t("neetoMolecules.integrationCard.tooltip.integrationNotAvailable")
|
|
224
|
+
}, tooltipProps), /*#__PURE__*/React.createElement("div", _extends({
|
|
225
|
+
"data-cy": dataCy,
|
|
226
|
+
"data-testid": "integration-card",
|
|
227
|
+
className: classnames("outline-none neeto-ui-border-gray-300 neeto-ui-shadow-xs hover:neeto-ui-border-gray-500 focus:neeto-ui-border-gray-500 neeto-ui-rounded-lg flex flex-col border p-6 no-underline transition-colors", {
|
|
228
|
+
"hover:neeto-ui-bg-100 cursor-not-allowed opacity-50": disabled,
|
|
229
|
+
"cursor-pointer": isCardClickable
|
|
230
|
+
}, className)
|
|
231
|
+
}, cardProps, otherProps), /*#__PURE__*/React.createElement("div", {
|
|
232
|
+
className: "flex flex-grow justify-between",
|
|
233
|
+
"data-cy": "integration-tabs"
|
|
234
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
235
|
+
className: "flex min-w-0 flex-col justify-end"
|
|
236
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
237
|
+
className: "relative mb-4 flex h-8"
|
|
238
|
+
}, Icon && /*#__PURE__*/React.createElement(Icon, {
|
|
239
|
+
size: 32
|
|
240
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
241
|
+
className: "my-auto"
|
|
242
|
+
}, /*#__PURE__*/React.createElement(Typography, {
|
|
243
|
+
className: "mb-2",
|
|
244
|
+
"data-cy": "integration-card-label",
|
|
245
|
+
style: "h4",
|
|
246
|
+
weight: "semibold"
|
|
247
|
+
}, label), /*#__PURE__*/React.createElement(Typography, {
|
|
248
|
+
className: "break-words",
|
|
249
|
+
"data-cy": "".concat(joinHyphenCase(label), "-integration-description"),
|
|
250
|
+
style: "body2"
|
|
251
|
+
}, description), children)), isNotEmpty(subIcons) && /*#__PURE__*/React.createElement("div", {
|
|
252
|
+
className: "flex h-24 flex-col gap-2"
|
|
253
|
+
}, subIcons.map(function (Icon, index) {
|
|
254
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
255
|
+
className: "neeto-ui-text-gray-600",
|
|
256
|
+
key: index,
|
|
257
|
+
size: 24
|
|
258
|
+
});
|
|
259
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
260
|
+
className: "neeto-ui-border-gray-300 mt-4 w-full border-t pt-2"
|
|
261
|
+
}, isLoading ? /*#__PURE__*/React.createElement("div", {
|
|
262
|
+
className: "mt-3 flex items-center justify-start"
|
|
263
|
+
}, /*#__PURE__*/React.createElement(Spinner, null)) : /*#__PURE__*/React.createElement("div", {
|
|
264
|
+
className: "flex h-8 items-center justify-between"
|
|
265
|
+
}, isConnected && /*#__PURE__*/React.createElement(Status, {
|
|
266
|
+
isExpired: isExpired
|
|
267
|
+
}), isFailed && /*#__PURE__*/React.createElement(Button, {
|
|
268
|
+
className: "neeto-ui-text-warning-500",
|
|
269
|
+
"data-cy": "connect-button",
|
|
270
|
+
disabled: disabled || isLoading,
|
|
271
|
+
label: t("neetoMolecules.integrationCard.tryAgain"),
|
|
272
|
+
style: "link",
|
|
273
|
+
onClick: onConnect
|
|
274
|
+
}), !isConnected && !isFailed && /*#__PURE__*/React.createElement(Button, {
|
|
275
|
+
"data-cy": "connect-button",
|
|
276
|
+
"data-testid": "integraiton-card-connect-button",
|
|
277
|
+
disabled: disabled || isLoading,
|
|
278
|
+
label: t("neetoMolecules.integrationCard.connect"),
|
|
279
|
+
style: "link",
|
|
280
|
+
onClick: onConnect
|
|
281
|
+
}), (isConnected || isFailed) && /*#__PURE__*/React.createElement(Dropdown, {
|
|
282
|
+
customDropdown: customDropdown,
|
|
283
|
+
hideDisconnect: hideDisconnect,
|
|
284
|
+
onDisconnect: onDisconnect,
|
|
285
|
+
handleManage: onManage
|
|
286
|
+
})))));
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
var _excluded = ["label", "description", "icon", "path", "dataCy", "className"];
|
|
290
|
+
var Item = function Item(_ref) {
|
|
291
|
+
var label = _ref.label,
|
|
292
|
+
description = _ref.description,
|
|
293
|
+
_ref$icon = _ref.icon,
|
|
294
|
+
Icon = _ref$icon === void 0 ? null : _ref$icon,
|
|
295
|
+
path = _ref.path,
|
|
296
|
+
dataCy = _ref.dataCy,
|
|
297
|
+
_ref$className = _ref.className,
|
|
298
|
+
className = _ref$className === void 0 ? "" : _ref$className,
|
|
299
|
+
otherProps = _objectWithoutProperties(_ref, _excluded);
|
|
300
|
+
return /*#__PURE__*/React.createElement(Link, _extends({
|
|
301
|
+
"data-cy": dataCy,
|
|
302
|
+
to: path,
|
|
303
|
+
className: classnames("outline-none neeto-ui-border-gray-300 neeto-ui-shadow-xs hover:neeto-ui-border-gray-500 focus:neeto-ui-border-gray-500 neeto-ui-rounded-lg flex cursor-pointer flex-col border p-6 no-underline transition-colors", className)
|
|
304
|
+
}, otherProps), /*#__PURE__*/React.createElement("div", {
|
|
305
|
+
"data-testid": "settings-item-".concat(joinHyphenCase(label))
|
|
306
|
+
}, Icon && /*#__PURE__*/React.createElement(Icon, {
|
|
307
|
+
className: "neeto-ui-text-gray-600 mb-4",
|
|
308
|
+
size: 32
|
|
309
|
+
}), /*#__PURE__*/React.createElement(Typography, {
|
|
310
|
+
className: "mb-2",
|
|
311
|
+
"data-cy": "settings-item-heading",
|
|
312
|
+
style: "h4",
|
|
313
|
+
weight: "semibold"
|
|
314
|
+
}, label), /*#__PURE__*/React.createElement(Typography, {
|
|
315
|
+
"data-cy": "settings-item-description",
|
|
316
|
+
style: "body2"
|
|
317
|
+
}, description)));
|
|
318
|
+
};
|
|
319
|
+
var Item$1 = /*#__PURE__*/memo(withRouter(Item));
|
|
320
|
+
|
|
321
|
+
var Category = function Category(_ref) {
|
|
322
|
+
var items = _ref.items,
|
|
323
|
+
label = _ref.label,
|
|
324
|
+
id = _ref.id,
|
|
325
|
+
isIntegration = _ref.isIntegration;
|
|
326
|
+
var SettingsCard = isIntegration ? IntegrationCard : Item$1;
|
|
327
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
328
|
+
className: "flex flex-col py-6",
|
|
329
|
+
id: id
|
|
330
|
+
}, isNotEmpty(items) && /*#__PURE__*/React.createElement(Typography, {
|
|
331
|
+
className: "mb-6",
|
|
332
|
+
component: "h2",
|
|
333
|
+
"data-cy": "settings-category-heading",
|
|
334
|
+
style: "h2",
|
|
335
|
+
weight: "semibold"
|
|
336
|
+
}, label), /*#__PURE__*/React.createElement("div", {
|
|
337
|
+
className: "grid grid-cols-1 gap-3 lg:grid-cols-2 lg:gap-6 xl:grid-cols-3 2xl:grid-cols-4"
|
|
338
|
+
}, items.map(function (item) {
|
|
339
|
+
return /*#__PURE__*/React.createElement(SettingsCard, _extends({
|
|
340
|
+
key: item.label
|
|
341
|
+
}, item));
|
|
342
|
+
})));
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
var scrollIntoSettingCategory = function scrollIntoSettingCategory(activeCategory) {
|
|
346
|
+
var _document$getElementB;
|
|
347
|
+
(_document$getElementB = document.getElementById(activeCategory)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView();
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
var Settings = function Settings(_ref) {
|
|
351
|
+
var _ref$categories = _ref.categories,
|
|
352
|
+
categories = _ref$categories === void 0 ? [] : _ref$categories;
|
|
353
|
+
var _useTranslation = useTranslation(),
|
|
354
|
+
t = _useTranslation.t;
|
|
355
|
+
var _getQueryParams = getQueryParams(),
|
|
356
|
+
categoryParam = _getQueryParams.category;
|
|
357
|
+
useEffect(function () {
|
|
358
|
+
scrollIntoSettingCategory(categoryParam === null || categoryParam === void 0 ? void 0 : categoryParam.toUpperCase());
|
|
359
|
+
}, [categoryParam]);
|
|
360
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, isEmpty(categories) ? /*#__PURE__*/React.createElement("div", {
|
|
361
|
+
className: "flex h-full w-full flex-grow items-center justify-center",
|
|
362
|
+
"data-testid": "settings-no-data"
|
|
363
|
+
}, /*#__PURE__*/React.createElement(NoData, {
|
|
364
|
+
title: t("neetoMolecules.settingsPage.noData")
|
|
365
|
+
})) : categories.map(function (_ref2) {
|
|
366
|
+
var id = _ref2.id,
|
|
367
|
+
label = _ref2.label,
|
|
368
|
+
items = _ref2.items,
|
|
369
|
+
isIntegration = _ref2.isIntegration;
|
|
370
|
+
return /*#__PURE__*/React.createElement(Category, {
|
|
371
|
+
id: id,
|
|
372
|
+
isIntegration: isIntegration,
|
|
373
|
+
items: items,
|
|
374
|
+
label: label,
|
|
375
|
+
key: id
|
|
376
|
+
});
|
|
377
|
+
}));
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
export { Settings as default };
|
|
381
|
+
//# sourceMappingURL=Settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Settings.js","sources":["../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/classnames/index.js","../src/components/IntegrationCard/Dropdown.jsx","../src/components/IntegrationCard/Status.jsx","../src/components/IntegrationCard/index.jsx","../src/components/Settings/Item.jsx","../src/components/Settings/Category.jsx","../src/components/Settings/utils.js","../src/components/Settings/index.jsx"],"sourcesContent":["export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React from \"react\";\n\nimport { noop } from \"neetocommons/pure\";\nimport { MenuVertical } from \"neetoicons\";\nimport { Dropdown as NeetoUIDropdown } from \"neetoui\";\nimport { isNotNil } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nconst { Menu, MenuItem } = NeetoUIDropdown;\n\nconst Dropdown = ({\n customDropdown,\n handleManage = noop,\n hideDisconnect = false,\n onDisconnect = noop,\n}) => {\n const { t } = useTranslation();\n\n if (isNotNil(customDropdown)) {\n return <div onClick={e => e.stopPropagation()}>{customDropdown}</div>;\n }\n\n const isManageable = isNotNil(handleManage);\n\n if (!isManageable && hideDisconnect) {\n return null;\n }\n\n return (\n <div onClick={e => e.stopPropagation()}>\n <NeetoUIDropdown buttonStyle=\"text\" icon={MenuVertical}>\n <Menu>\n {isManageable && (\n <MenuItem.Button onClick={handleManage}>\n {t(\"neetoMolecules.integrationCard.manage\")}\n </MenuItem.Button>\n )}\n {!hideDisconnect && (\n <MenuItem.Button onClick={onDisconnect}>\n {t(\"neetoMolecules.integrationCard.disconnect\")}\n </MenuItem.Button>\n )}\n </Menu>\n </NeetoUIDropdown>\n </div>\n );\n};\n\nexport default Dropdown;\n","import React from \"react\";\n\nimport { Check, Warning } from \"neetoicons\";\nimport { Tag } from \"neetoui\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Status = ({ isExpired }) => {\n const { t } = useTranslation();\n\n const tagProps = isExpired\n ? {\n icon: Warning,\n label: t(\"neetoMolecules.integrationCard.tags.expired\"),\n style: \"warning\",\n }\n : {\n icon: Check,\n label: t(\"neetoMolecules.integrationCard.tags.connected\"),\n style: \"success\",\n };\n\n return (\n <Tag\n className=\"flex-row-reverse\"\n {...tagProps}\n data-testid=\"integration-status\"\n />\n );\n};\n\nexport default Status;\n","import React from \"react\";\n\nimport classnames from \"classnames\";\nimport { isNotEmpty, noop } from \"neetocommons/pure\";\nimport { joinHyphenCase } from \"neetocommons/utils\";\nimport { Typography, Button, Spinner, Tooltip } from \"neetoui\";\nimport PropTypes from \"prop-types\";\nimport { isNotNil } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Dropdown from \"./Dropdown\";\nimport Status from \"./Status\";\n\nconst IntegrationCard = ({\n icon: Icon,\n subIcons = [],\n label = \"\",\n description = \"\",\n className = \"\",\n onConnect = noop,\n onDisconnect = noop,\n onManage = undefined,\n isLoading = false,\n isConnected = false,\n isFailed = false,\n isExpired = false,\n disabled = false,\n hidden = false,\n hideDisconnect = false,\n onClick: onCardClick = undefined,\n tooltipProps = {},\n customDropdown = null,\n dataCy = \"\",\n children,\n ...otherProps\n}) => {\n const { t } = useTranslation();\n\n if (hidden) return null;\n\n const isCardClickable = isConnected && isNotNil(onCardClick);\n\n const cardProps = isCardClickable ? { onClick: onCardClick } : {};\n\n return (\n <Tooltip\n disabled={!disabled}\n position=\"top\"\n content={\n disabled &&\n t(\"neetoMolecules.integrationCard.tooltip.integrationNotAvailable\")\n }\n {...tooltipProps}\n >\n <div\n data-cy={dataCy}\n data-testid=\"integration-card\"\n className={classnames(\n \"outline-none neeto-ui-border-gray-300 neeto-ui-shadow-xs hover:neeto-ui-border-gray-500 focus:neeto-ui-border-gray-500 neeto-ui-rounded-lg flex flex-col border p-6 no-underline transition-colors\",\n {\n \"hover:neeto-ui-bg-100 cursor-not-allowed opacity-50\": disabled,\n \"cursor-pointer\": isCardClickable,\n },\n className\n )}\n {...cardProps}\n {...otherProps}\n >\n <div\n className=\"flex flex-grow justify-between\"\n data-cy=\"integration-tabs\"\n >\n <div className=\"flex min-w-0 flex-col justify-end\">\n <div className=\"relative mb-4 flex h-8\">\n {Icon && <Icon size={32} />}\n </div>\n <div className=\"my-auto\">\n <Typography\n className=\"mb-2\"\n data-cy=\"integration-card-label\"\n style=\"h4\"\n weight=\"semibold\"\n >\n {label}\n </Typography>\n <Typography\n className=\"break-words\"\n data-cy={`${joinHyphenCase(label)}-integration-description`}\n style=\"body2\"\n >\n {description}\n </Typography>\n {children}\n </div>\n </div>\n {isNotEmpty(subIcons) && (\n <div className=\"flex h-24 flex-col gap-2\">\n {subIcons.map((Icon, index) => (\n <Icon\n className=\"neeto-ui-text-gray-600\"\n key={index}\n size={24}\n />\n ))}\n </div>\n )}\n </div>\n <div className=\"neeto-ui-border-gray-300 mt-4 w-full border-t pt-2\">\n {isLoading ? (\n <div className=\"mt-3 flex items-center justify-start\">\n <Spinner />\n </div>\n ) : (\n <div className=\"flex h-8 items-center justify-between\">\n {isConnected && <Status {...{ isExpired }} />}\n {isFailed && (\n <Button\n className=\"neeto-ui-text-warning-500\"\n data-cy=\"connect-button\"\n disabled={disabled || isLoading}\n label={t(\"neetoMolecules.integrationCard.tryAgain\")}\n style=\"link\"\n onClick={onConnect}\n />\n )}\n {!isConnected && !isFailed && (\n <Button\n data-cy=\"connect-button\"\n data-testid=\"integraiton-card-connect-button\"\n disabled={disabled || isLoading}\n label={t(\"neetoMolecules.integrationCard.connect\")}\n style=\"link\"\n onClick={onConnect}\n />\n )}\n {(isConnected || isFailed) && (\n <Dropdown\n {...{ customDropdown, hideDisconnect, onDisconnect }}\n handleManage={onManage}\n />\n )}\n </div>\n )}\n </div>\n </div>\n </Tooltip>\n );\n};\n\nIntegrationCard.propTypes = {\n /**\n * The icon component to be displayed on the card.\n */\n icon: PropTypes.elementType,\n /**\n * Array of sub-icons to be displayed on the card.\n */\n subIcons: PropTypes.arrayOf(PropTypes.elementType),\n /**\n * The label to be displayed on the card.\n */\n label: PropTypes.string,\n /**\n * The description of the card.\n */\n description: PropTypes.string,\n /**\n * Additional class names for styling the card.\n */\n className: PropTypes.string,\n /**\n * Handler function called when the integration is connected.\n */\n onConnect: PropTypes.func,\n /**\n * Handler function called when the manage dropdown is clicked.\n */\n onManage: PropTypes.func,\n /**\n * Handler function called when clicked on integration card.\n */\n onClick: PropTypes.func,\n /**\n * Handler function called when the disconnect dropdown is clicked.\n */\n onDisconnect: PropTypes.func,\n /**\n * Flag indicating if the integration is currently loading.\n */\n isLoading: PropTypes.bool,\n /**\n * Flag indicating if the integration is connected.\n */\n isConnected: PropTypes.bool,\n /**\n * Flag indicating if the integration has failed.\n */\n isFailed: PropTypes.bool,\n /**\n * Flag indicating if the integration has expired.\n */\n isExpired: PropTypes.bool,\n /**\n * Flag indicating if the integration is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Flag indicating if the card should be hidden.\n */\n hidden: PropTypes.bool,\n /**\n * Flag indicating if the disconnect button should be hidden.\n */\n hideDisconnect: PropTypes.bool,\n /**\n * Additional props for customizing the tooltip wrapper.\n */\n tooltipProps: PropTypes.object,\n /**\n * Custom dropdown component to be rendered.\n */\n customDropdown: PropTypes.element,\n /**\n * Additional children elements to be rendered within the card.\n */\n children: PropTypes.node,\n};\n\nexport default IntegrationCard;\n","import React, { memo } from \"react\";\n\nimport classnames from \"classnames\";\nimport { joinHyphenCase } from \"neetocommons/utils\";\nimport { Typography } from \"neetoui\";\nimport { withRouter, Link } from \"react-router-dom\";\n\nconst Item = ({\n label,\n description,\n icon: Icon = null,\n path,\n dataCy,\n className = \"\",\n ...otherProps\n}) => (\n <Link\n data-cy={dataCy}\n to={path}\n className={classnames(\n \"outline-none neeto-ui-border-gray-300 neeto-ui-shadow-xs hover:neeto-ui-border-gray-500 focus:neeto-ui-border-gray-500 neeto-ui-rounded-lg flex cursor-pointer flex-col border p-6 no-underline transition-colors\",\n className\n )}\n {...otherProps}\n >\n <div data-testid={`settings-item-${joinHyphenCase(label)}`}>\n {Icon && <Icon className=\"neeto-ui-text-gray-600 mb-4\" size={32} />}\n <Typography\n className=\"mb-2\"\n data-cy=\"settings-item-heading\"\n style=\"h4\"\n weight=\"semibold\"\n >\n {label}\n </Typography>\n <Typography data-cy=\"settings-item-description\" style=\"body2\">\n {description}\n </Typography>\n </div>\n </Link>\n);\n\nexport default memo(withRouter(Item));\n","import React from \"react\";\n\nimport { isNotEmpty } from \"neetocommons/pure\";\nimport { Typography } from \"neetoui\";\n\nimport IntegrationCard from \"components/IntegrationCard\";\n\nimport Item from \"./Item\";\n\nconst Category = ({ items, label, id, isIntegration }) => {\n const SettingsCard = isIntegration ? IntegrationCard : Item;\n\n return (\n <div className=\"flex flex-col py-6\" {...{ id }}>\n {isNotEmpty(items) && (\n <Typography\n className=\"mb-6\"\n component=\"h2\"\n data-cy=\"settings-category-heading\"\n style=\"h2\"\n weight=\"semibold\"\n >\n {label}\n </Typography>\n )}\n <div className=\"grid grid-cols-1 gap-3 lg:grid-cols-2 lg:gap-6 xl:grid-cols-3 2xl:grid-cols-4\">\n {items.map(item => (\n <SettingsCard key={item.label} {...item} />\n ))}\n </div>\n </div>\n );\n};\n\nexport default Category;\n","export const scrollIntoSettingCategory = activeCategory => {\n document.getElementById(activeCategory)?.scrollIntoView();\n};\n","import React, { useEffect } from \"react\";\n\nimport { getQueryParams } from \"neetocommons/utils\";\nimport { NoData } from \"neetoui\";\nimport propTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Category from \"./Category\";\nimport { scrollIntoSettingCategory } from \"./utils\";\n\nconst Settings = ({ categories = [] }) => {\n const { t } = useTranslation();\n\n const { category: categoryParam } = getQueryParams();\n\n useEffect(() => {\n scrollIntoSettingCategory(categoryParam?.toUpperCase());\n }, [categoryParam]);\n\n return (\n <>\n {isEmpty(categories) ? (\n <div\n className=\"flex h-full w-full flex-grow items-center justify-center\"\n data-testid=\"settings-no-data\"\n >\n <NoData title={t(\"neetoMolecules.settingsPage.noData\")} />\n </div>\n ) : (\n categories.map(({ id, label, items, isIntegration }) => (\n <Category {...{ id, isIntegration, items, label }} key={id} />\n ))\n )}\n </>\n );\n};\n\nSettings.propTypes = {\n /**\n * An array of setting categories to be displayed.\n */\n categories: propTypes.array,\n};\n\nexport default Settings;\n"],"names":["objectWithoutPropertiesLoose","Menu","NeetoUIDropdown","MenuItem","Dropdown","_ref","customDropdown","_ref$handleManage","handleManage","noop","_ref$hideDisconnect","hideDisconnect","_ref$onDisconnect","onDisconnect","_useTranslation","useTranslation","t","isNotNil","React","createElement","onClick","e","stopPropagation","isManageable","buttonStyle","icon","MenuVertical","Button","Status","isExpired","tagProps","Warning","label","style","Check","Tag","_extends","className","IntegrationCard","Icon","_ref$subIcons","subIcons","_ref$label","_ref$description","description","_ref$className","_ref$onConnect","onConnect","_ref$onManage","onManage","undefined","_ref$isLoading","isLoading","_ref$isConnected","isConnected","_ref$isFailed","isFailed","_ref$isExpired","_ref$disabled","disabled","_ref$hidden","hidden","_ref$onClick","onCardClick","_ref$tooltipProps","tooltipProps","_ref$customDropdown","_ref$dataCy","dataCy","children","otherProps","_objectWithoutProperties","_excluded","isCardClickable","cardProps","Tooltip","position","content","classnames","size","Typography","weight","concat","joinHyphenCase","isNotEmpty","map","index","key","Spinner","Item","_ref$icon","path","Link","to","memo","withRouter","Category","items","id","isIntegration","SettingsCard","component","item","scrollIntoSettingCategory","activeCategory","_document$getElementB","document","getElementById","scrollIntoView","Settings","_ref$categories","categories","_getQueryParams","getQueryParams","categoryParam","category","useEffect","toUpperCase","Fragment","isEmpty","NoData","title","_ref2"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigbinary/neeto-molecules",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.99",
|
|
4
4
|
"description": "A package of reusable molecular components for neeto products.",
|
|
5
5
|
"repository": "git@github.com:bigbinary/neeto-molecules.git",
|
|
6
6
|
"author": "Amaljith K <amaljith.k@bigbinary.com>",
|
package/src/translations/en.json
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
import { IconProps } from "neetoicons";
|
|
2
2
|
import React, { ReactElement } from "react";
|
|
3
|
+
export interface IntegrationCardProps {
|
|
4
|
+
icon: React.FC<IconProps>;
|
|
5
|
+
subIcons?: React.FC<IconProps>[];
|
|
6
|
+
label: string;
|
|
7
|
+
description: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
onConnect: (...args: any[]) => any;
|
|
10
|
+
onDisconnect?: (...args: any[]) => any;
|
|
11
|
+
onManage?: (...args: any[]) => any;
|
|
12
|
+
onClick?: (...args: any[]) => any;
|
|
13
|
+
isLoading?: boolean;
|
|
14
|
+
isConnected?: boolean;
|
|
15
|
+
isFailed?: boolean;
|
|
16
|
+
isExpired?: boolean;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
hidden?: boolean;
|
|
19
|
+
hideDisconnect?: boolean;
|
|
20
|
+
tooltipProps?: Partial<TooltipProps>;
|
|
21
|
+
customDropdown?: React.ReactNode;
|
|
22
|
+
children?: React.ReactNode;
|
|
23
|
+
dataCy?: string;
|
|
24
|
+
}
|
|
3
25
|
/**
|
|
4
26
|
*
|
|
5
27
|
* A common component used for integrations across neeto products.
|
|
@@ -30,25 +52,5 @@ import React, { ReactElement } from "react";
|
|
|
30
52
|
* );
|
|
31
53
|
* @endexample
|
|
32
54
|
*/
|
|
33
|
-
const IntegrationCard: React.FC<
|
|
34
|
-
icon: React.FC<IconProps>;
|
|
35
|
-
subIcons?: React.FC<IconProps>[];
|
|
36
|
-
label: string;
|
|
37
|
-
description: string;
|
|
38
|
-
className?: string;
|
|
39
|
-
onConnect: (...args: any[]) => any;
|
|
40
|
-
onDisconnect?: (...args: any[]) => any;
|
|
41
|
-
onManage?: (...args: any[]) => any;
|
|
42
|
-
onClick?: (...args: any[]) => any;
|
|
43
|
-
isLoading?: boolean;
|
|
44
|
-
isConnected?: boolean;
|
|
45
|
-
isFailed?: boolean;
|
|
46
|
-
isExpired?: boolean;
|
|
47
|
-
disabled?: boolean;
|
|
48
|
-
hidden?: boolean;
|
|
49
|
-
hideDisconnect?: boolean;
|
|
50
|
-
tooltipProps?: Partial<TooltipProps>;
|
|
51
|
-
customDropdown?: React.ReactNode;
|
|
52
|
-
children?: React.ReactNode;
|
|
53
|
-
}>;
|
|
55
|
+
const IntegrationCard: React.FC<IntegrationCardProps>;
|
|
54
56
|
export default IntegrationCard;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import React, { ReactNode } from "react";
|
|
2
|
+
import { IntegrationCardProps } from "./IntegrationCard";
|
|
3
|
+
type SettingItem = {
|
|
4
|
+
label: string;
|
|
5
|
+
path: string;
|
|
6
|
+
} & Partial<IntegrationCardProps>;
|
|
7
|
+
type SettingCategory = {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
isIntegration?: boolean;
|
|
11
|
+
items: SettingItem[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
*
|
|
15
|
+
* Settings can be used to create a settings page card layout.
|
|
16
|
+
*
|
|
17
|
+
* 
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
*
|
|
21
|
+
* categories={[
|
|
22
|
+
* {
|
|
23
|
+
* id: "general-settings",
|
|
24
|
+
* label: "General Settings",
|
|
25
|
+
* items: [
|
|
26
|
+
* {
|
|
27
|
+
* label: 'Ticket tags',
|
|
28
|
+
* description: 'Create and manage tags',
|
|
29
|
+
* icon: TicketIcon,
|
|
30
|
+
* path: '/settings/general/ticket_tags'
|
|
31
|
+
* dataCy: 'Ticket tags' //dataCy can be passed here.
|
|
32
|
+
* // other props will be passed on to the setting card.
|
|
33
|
+
* }
|
|
34
|
+
* ...
|
|
35
|
+
* ...
|
|
36
|
+
* //more items
|
|
37
|
+
* ]
|
|
38
|
+
* },
|
|
39
|
+
* {
|
|
40
|
+
* id: "integrations",
|
|
41
|
+
* isIntegration: true //Integrations section MUST have 'isIntegration: true',
|
|
42
|
+
* label: "Integrations",
|
|
43
|
+
* items: [
|
|
44
|
+
* {
|
|
45
|
+
* label: 'Github',
|
|
46
|
+
* description: 'Connect with github',
|
|
47
|
+
* icon: GithubIcon
|
|
48
|
+
* onConnect: () => setIsIntegrationModalOpen(true)
|
|
49
|
+
* onDisconnect: ()=> setIsIntegrationDisconnectModalOpen(true)
|
|
50
|
+
* ...
|
|
51
|
+
* ...
|
|
52
|
+
* //rest of the props for IntegrationCard should be passed here.
|
|
53
|
+
* // other props will be passed on to the integration card.
|
|
54
|
+
* }
|
|
55
|
+
* ],
|
|
56
|
+
* },
|
|
57
|
+
* ...
|
|
58
|
+
* ...
|
|
59
|
+
* //more categories
|
|
60
|
+
* ]}
|
|
61
|
+
* @endexample
|
|
62
|
+
* Note: This component also supports "scroll-into-view" functionality to scroll
|
|
63
|
+
*
|
|
64
|
+
* specific setting categories into view, based on the query params. For example,
|
|
65
|
+
*
|
|
66
|
+
* the page will scroll to the "Integrations" category, when the query params
|
|
67
|
+
*
|
|
68
|
+
* contain ?category=integrations. The query param should be the id of the
|
|
69
|
+
*
|
|
70
|
+
* category.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
*
|
|
74
|
+
* import React, { useState } from "react";
|
|
75
|
+
* import Settings from "@bigbinary/neeto-molecules/Settings";
|
|
76
|
+
* import { Modal as IntegrationModal } from "neetointegrations"
|
|
77
|
+
* import { getCategories } from "./utils";
|
|
78
|
+
*
|
|
79
|
+
* const SettingsPage = () => {
|
|
80
|
+
* const [isOpen, setIsOpen] = useState(false);
|
|
81
|
+
*
|
|
82
|
+
* return (
|
|
83
|
+
* <div>
|
|
84
|
+
* <Settings categories={getCategories({setIsIntegrationModalOpen: setIsOpen})} />
|
|
85
|
+
* <IntegrationModal isOpen={isOpen}>
|
|
86
|
+
* </div>
|
|
87
|
+
* );
|
|
88
|
+
* };
|
|
89
|
+
* @endexample
|
|
90
|
+
*/
|
|
91
|
+
const Settings: React.FC<{
|
|
92
|
+
categories: SettingCategory[];
|
|
93
|
+
className?: string;
|
|
94
|
+
}>;
|
|
95
|
+
export default Settings;
|