@bigbinary/neeto-molecules 4.3.3 → 4.3.4
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/PhoneNumber.js +3 -2
- package/dist/PhoneNumber.js.map +1 -1
- package/dist/SessionEnvironment.js +2 -1
- package/dist/SessionEnvironment.js.map +1 -1
- package/dist/cjs/PhoneNumber.js +2 -1
- package/dist/cjs/PhoneNumber.js.map +1 -1
- package/dist/cjs/SessionEnvironment.js +2 -1
- package/dist/cjs/SessionEnvironment.js.map +1 -1
- package/dist/cjs/{phone-number-ycxkC0mm.js → index.es5.min-CUvhPmKJ.js} +2 -324
- package/dist/cjs/index.es5.min-CUvhPmKJ.js.map +1 -0
- package/dist/cjs/phone-number-DIIlhFGA.js +328 -0
- package/dist/cjs/phone-number-DIIlhFGA.js.map +1 -0
- package/dist/cjs/v2/DynamicVariables.js +134 -0
- package/dist/cjs/v2/DynamicVariables.js.map +1 -0
- package/dist/cjs/v2/PhoneNumber.js +414 -0
- package/dist/cjs/v2/PhoneNumber.js.map +1 -0
- package/dist/{phone-number--BBsxLSh.js → index.es5.min-B2AiaKmd.js} +2 -301
- package/dist/index.es5.min-B2AiaKmd.js.map +1 -0
- package/dist/phone-number-B3OcwVZM.js +303 -0
- package/dist/phone-number-B3OcwVZM.js.map +1 -0
- package/dist/v2/DynamicVariables.js +132 -0
- package/dist/v2/DynamicVariables.js.map +1 -0
- package/dist/v2/PhoneNumber.js +389 -0
- package/dist/v2/PhoneNumber.js.map +1 -0
- package/package.json +1 -1
- package/src/translations/en.json +2 -0
- package/dist/cjs/phone-number-ycxkC0mm.js.map +0 -1
- package/dist/phone-number--BBsxLSh.js.map +0 -1
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
3
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
4
|
+
import { memo, useState, forwardRef } from 'react';
|
|
5
|
+
import { useQuery } from '@tanstack/react-query';
|
|
6
|
+
import { getCountries, parsePhoneNumber, formatIncompletePhoneNumber, isValidPhoneNumber, getCountryCallingCode } from 'libphonenumber-js/min';
|
|
7
|
+
import { findBy, noop } from '@bigbinary/neeto-cist';
|
|
8
|
+
import Input from '@bigbinary/neetoui/Input';
|
|
9
|
+
import classnames from 'classnames';
|
|
10
|
+
import Select from '@bigbinary/neetoui/Select';
|
|
11
|
+
import { useTranslation } from 'react-i18next';
|
|
12
|
+
import { i as index_es5_minExports } from './index.es5.min-B2AiaKmd.js';
|
|
13
|
+
import { assoc, mergeLeft } from 'ramda';
|
|
14
|
+
import Tooltip from '@bigbinary/neetoui/Tooltip';
|
|
15
|
+
import Typography from '@bigbinary/neetoui/Typography';
|
|
16
|
+
import { jsx } from 'react/jsx-runtime';
|
|
17
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
18
|
+
import i18next from 'i18next';
|
|
19
|
+
import { setToLocalStorage, getFromLocalStorage } from '@bigbinary/neeto-commons-frontend/utils';
|
|
20
|
+
import * as yup from 'yup';
|
|
21
|
+
import axios from 'axios';
|
|
22
|
+
import { n } from './inject-css-C2dztUxs.js';
|
|
23
|
+
|
|
24
|
+
var IP_LOOKUP_ACCESS_TOKEN = "083c694c79f119c7f227e737de9a5c8c";
|
|
25
|
+
var IP_LOOKUP_STORAGE_KEY = "IP_LOOKUP_DETAILS_STORAGE";
|
|
26
|
+
var MAX_CACHE_AGE = 60 * 60 * 1000;
|
|
27
|
+
|
|
28
|
+
var COUNTRY_PICKER_OPTIONS = getCountries().filter(function (code) {
|
|
29
|
+
return index_es5_minExports.countries[code];
|
|
30
|
+
}).map(function (code) {
|
|
31
|
+
return {
|
|
32
|
+
label: index_es5_minExports.countries[code].name,
|
|
33
|
+
value: code
|
|
34
|
+
};
|
|
35
|
+
}).sort(function (a, b) {
|
|
36
|
+
return a.label.localeCompare(b.label);
|
|
37
|
+
});
|
|
38
|
+
var COUNTRY_PICKER_STYLES = {
|
|
39
|
+
menuPortal: mergeLeft({
|
|
40
|
+
width: 196,
|
|
41
|
+
zIndex: 99999
|
|
42
|
+
}),
|
|
43
|
+
control: mergeLeft({
|
|
44
|
+
border: "none !important",
|
|
45
|
+
cursor: "pointer",
|
|
46
|
+
gap: 4
|
|
47
|
+
}),
|
|
48
|
+
input: assoc("position", "absolute !important"),
|
|
49
|
+
valueContainer: assoc("padding", "0 !important"),
|
|
50
|
+
indicatorsContainer: assoc("paddingRight", "0 !important")
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
var _excluded$2 = ["countryCode", "showEmoji"];
|
|
54
|
+
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; }
|
|
55
|
+
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; }
|
|
56
|
+
var SingleValue = function SingleValue(_ref) {
|
|
57
|
+
var countryCode = _ref.countryCode,
|
|
58
|
+
_ref$showEmoji = _ref.showEmoji,
|
|
59
|
+
showEmoji = _ref$showEmoji === void 0 ? false : _ref$showEmoji,
|
|
60
|
+
otherProps = _objectWithoutProperties(_ref, _excluded$2);
|
|
61
|
+
if (!showEmoji) return null;
|
|
62
|
+
var countryData = index_es5_minExports.countries[countryCode];
|
|
63
|
+
return /*#__PURE__*/jsx(Tooltip, {
|
|
64
|
+
content: countryData === null || countryData === void 0 ? void 0 : countryData.name,
|
|
65
|
+
children: /*#__PURE__*/jsx(Typography, _objectSpread$2(_objectSpread$2({
|
|
66
|
+
className: "neeto-molecules-phone-number-input__flag cursor-pointer text-center text-xl",
|
|
67
|
+
style: "body2"
|
|
68
|
+
}, otherProps), {}, {
|
|
69
|
+
children: countryData === null || countryData === void 0 ? void 0 : countryData.emoji
|
|
70
|
+
}))
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
var SingleValue$1 = /*#__PURE__*/memo(SingleValue);
|
|
74
|
+
|
|
75
|
+
var _excluded$1 = ["countryCode", "onChange"];
|
|
76
|
+
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; }
|
|
77
|
+
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; }
|
|
78
|
+
var CountryPicker = function CountryPicker(_ref) {
|
|
79
|
+
var countryCode = _ref.countryCode,
|
|
80
|
+
_onChange = _ref.onChange,
|
|
81
|
+
otherProps = _objectWithoutProperties(_ref, _excluded$1);
|
|
82
|
+
var _useState = useState(""),
|
|
83
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
84
|
+
searchTerm = _useState2[0],
|
|
85
|
+
setSearchTerm = _useState2[1];
|
|
86
|
+
var _useTranslation = useTranslation(),
|
|
87
|
+
t = _useTranslation.t;
|
|
88
|
+
return /*#__PURE__*/jsx("div", {
|
|
89
|
+
className: classnames("flex-shrink-0", {
|
|
90
|
+
"w-10": !searchTerm,
|
|
91
|
+
"w-24": searchTerm
|
|
92
|
+
}),
|
|
93
|
+
children: /*#__PURE__*/jsx(Select, _objectSpread$1({
|
|
94
|
+
isSearchable: true,
|
|
95
|
+
"aria-label": t("neetoMolecules.phoneNumberInput.countryCodeAriaLabel"),
|
|
96
|
+
"data-testid": "phonenumber-country-picker",
|
|
97
|
+
options: COUNTRY_PICKER_OPTIONS,
|
|
98
|
+
strategy: "fixed",
|
|
99
|
+
styles: COUNTRY_PICKER_STYLES,
|
|
100
|
+
value: {
|
|
101
|
+
value: countryCode
|
|
102
|
+
},
|
|
103
|
+
components: {
|
|
104
|
+
SingleValue: function SingleValue() {
|
|
105
|
+
return /*#__PURE__*/jsx(SingleValue$1, {
|
|
106
|
+
countryCode: countryCode,
|
|
107
|
+
showEmoji: true
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
isOptionSelected: function isOptionSelected(_ref2, _ref3) {
|
|
112
|
+
var value = _ref2.value;
|
|
113
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
114
|
+
selectedOption = _ref4[0];
|
|
115
|
+
return (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.name) === value;
|
|
116
|
+
},
|
|
117
|
+
onChange: function onChange(option) {
|
|
118
|
+
return _onChange(option.value);
|
|
119
|
+
},
|
|
120
|
+
onInputChange: setSearchTerm
|
|
121
|
+
}, otherProps))
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
var CountryPicker$1 = /*#__PURE__*/memo(CountryPicker);
|
|
125
|
+
|
|
126
|
+
var fetchLocationDetails$1 = function fetchLocationDetails() {
|
|
127
|
+
return axios.get("https://neeto-ip-lookup-web-production.neetodeployapp.com/location", {
|
|
128
|
+
headers: {
|
|
129
|
+
"X-ACCESS-TOKEN": IP_LOOKUP_ACCESS_TOKEN
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
var neetoIpLookupApi = {
|
|
134
|
+
fetchLocationDetails: fetchLocationDetails$1
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = false, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = true, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), true), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
138
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
139
|
+
var isPhoneNumberValid = function isPhoneNumberValid() {
|
|
140
|
+
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
141
|
+
for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
142
|
+
rest[_key - 1] = arguments[_key];
|
|
143
|
+
}
|
|
144
|
+
return isValidPhoneNumber.apply(void 0, [value].concat(rest));
|
|
145
|
+
};
|
|
146
|
+
var validation = function validation() {
|
|
147
|
+
var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : i18next.t("neetoMolecules.phoneNumberInput.validations.invalid");
|
|
148
|
+
return yup.string().test("phoneNumber", message, function (phoneNumber) {
|
|
149
|
+
return phoneNumber ? isValidPhoneNumber(phoneNumber) : true;
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
var getPhoneData = function getPhoneData(value, defaultCountryCode) {
|
|
153
|
+
try {
|
|
154
|
+
var parsedValue = parsePhoneNumber(value, defaultCountryCode);
|
|
155
|
+
return {
|
|
156
|
+
phoneNumber: parsedValue.number,
|
|
157
|
+
international: parsedValue.formatInternational(),
|
|
158
|
+
countryCode: parsedValue.country || defaultCountryCode
|
|
159
|
+
};
|
|
160
|
+
} catch (_unused) {
|
|
161
|
+
return {
|
|
162
|
+
phoneNumber: value,
|
|
163
|
+
international: formatIncompletePhoneNumber(value, defaultCountryCode),
|
|
164
|
+
countryCode: defaultCountryCode
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
var fetchLocationDetails = /*#__PURE__*/function () {
|
|
169
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
170
|
+
var stored, _ref2, data, timestamp, isCacheValid, details, _timestamp;
|
|
171
|
+
return _regenerator().w(function (_context) {
|
|
172
|
+
while (1) switch (_context.p = _context.n) {
|
|
173
|
+
case 0:
|
|
174
|
+
stored = getFromLocalStorage(IP_LOOKUP_STORAGE_KEY);
|
|
175
|
+
_ref2 = stored || {}, data = _ref2.data, timestamp = _ref2.timestamp;
|
|
176
|
+
isCacheValid = timestamp && Date.now() - timestamp < MAX_CACHE_AGE;
|
|
177
|
+
if (!isCacheValid) {
|
|
178
|
+
_context.n = 1;
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
return _context.a(2, data);
|
|
182
|
+
case 1:
|
|
183
|
+
_context.p = 1;
|
|
184
|
+
_context.n = 2;
|
|
185
|
+
return neetoIpLookupApi.fetchLocationDetails();
|
|
186
|
+
case 2:
|
|
187
|
+
details = _context.v;
|
|
188
|
+
_timestamp = Date.now();
|
|
189
|
+
setToLocalStorage(IP_LOOKUP_STORAGE_KEY, {
|
|
190
|
+
data: details,
|
|
191
|
+
timestamp: _timestamp
|
|
192
|
+
});
|
|
193
|
+
return _context.a(2, details);
|
|
194
|
+
case 3:
|
|
195
|
+
_context.p = 3;
|
|
196
|
+
_context.v;
|
|
197
|
+
return _context.a(2, data || null);
|
|
198
|
+
}
|
|
199
|
+
}, _callee, null, [[1, 3]]);
|
|
200
|
+
}));
|
|
201
|
+
return function fetchLocationDetails() {
|
|
202
|
+
return _ref.apply(this, arguments);
|
|
203
|
+
};
|
|
204
|
+
}();
|
|
205
|
+
var isNumeric = function isNumeric(_char) {
|
|
206
|
+
return _char >= "0" && _char <= "9";
|
|
207
|
+
};
|
|
208
|
+
var preserveCursor = function preserveCursor(callback) {
|
|
209
|
+
return function (event) {
|
|
210
|
+
var start = event.target.selectionStart;
|
|
211
|
+
var end = event.target.selectionEnd;
|
|
212
|
+
var len = event.target.value.length;
|
|
213
|
+
var result = callback(event);
|
|
214
|
+
var delta = event.target.value.length - len;
|
|
215
|
+
event.target.setSelectionRange(start + delta, end + delta);
|
|
216
|
+
return result;
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
var _excluded = ["value", "onChange", "className", "error", "selectProps", "initialCountryCode"];
|
|
221
|
+
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; }
|
|
222
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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; }
|
|
223
|
+
var PhoneNumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
224
|
+
var _ref$value = _ref.value,
|
|
225
|
+
value = _ref$value === void 0 ? "" : _ref$value,
|
|
226
|
+
_ref$onChange = _ref.onChange,
|
|
227
|
+
onChange = _ref$onChange === void 0 ? noop : _ref$onChange,
|
|
228
|
+
className = _ref.className,
|
|
229
|
+
error = _ref.error,
|
|
230
|
+
selectProps = _ref.selectProps,
|
|
231
|
+
initialCountryCode = _ref.initialCountryCode,
|
|
232
|
+
inputProps = _objectWithoutProperties(_ref, _excluded);
|
|
233
|
+
var _useState = useState(function () {
|
|
234
|
+
return getPhoneData(value).countryCode || initialCountryCode;
|
|
235
|
+
}),
|
|
236
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
237
|
+
countryCode = _useState2[0],
|
|
238
|
+
setCountryCode = _useState2[1];
|
|
239
|
+
var _useQuery = useQuery({
|
|
240
|
+
queryKey: [IP_LOOKUP_STORAGE_KEY],
|
|
241
|
+
queryFn: fetchLocationDetails,
|
|
242
|
+
enabled: !countryCode,
|
|
243
|
+
staleTime: Infinity,
|
|
244
|
+
gcTime: Infinity,
|
|
245
|
+
select: function select(data) {
|
|
246
|
+
return findBy({
|
|
247
|
+
value: data.countryCode
|
|
248
|
+
}, COUNTRY_PICKER_OPTIONS);
|
|
249
|
+
}
|
|
250
|
+
}),
|
|
251
|
+
ipCountry = _useQuery.data;
|
|
252
|
+
var finalCountryCode = countryCode || (ipCountry === null || ipCountry === void 0 ? void 0 : ipCountry.value) || "US";
|
|
253
|
+
var formattedValue = formatIncompletePhoneNumber(value, finalCountryCode);
|
|
254
|
+
var onKeyDown = preserveCursor(function (event) {
|
|
255
|
+
// Handles special characters in the phone number formatting like brackets and spaces.
|
|
256
|
+
if (event.key !== "Backspace") return;
|
|
257
|
+
var left = event.target.value.substring(0, event.target.selectionStart);
|
|
258
|
+
var right = event.target.value.substring(event.target.selectionEnd);
|
|
259
|
+
var index = left.length - 1;
|
|
260
|
+
while (index > 0 && !isNumeric(left[index])) index--;
|
|
261
|
+
var newValue = left.substring(0, index + 1) + right;
|
|
262
|
+
if (newValue) event.target.value = newValue;
|
|
263
|
+
});
|
|
264
|
+
var onInputChange = preserveCursor(function (event) {
|
|
265
|
+
var phoneData = getPhoneData(event.target.value, finalCountryCode);
|
|
266
|
+
event.target.value = formatIncompletePhoneNumber(event.target.value);
|
|
267
|
+
setCountryCode(phoneData.countryCode);
|
|
268
|
+
onChange(phoneData.phoneNumber);
|
|
269
|
+
});
|
|
270
|
+
var onChangeCountry = function onChangeCountry(countryCode) {
|
|
271
|
+
var phoneData = getPhoneData(value, finalCountryCode);
|
|
272
|
+
var prevPrefix = "+".concat(getCountryCallingCode(phoneData.countryCode));
|
|
273
|
+
var nextPrefix = "+".concat(getCountryCallingCode(countryCode));
|
|
274
|
+
setCountryCode(countryCode);
|
|
275
|
+
onChange(nextPrefix + value.replace(prevPrefix, ""));
|
|
276
|
+
};
|
|
277
|
+
return /*#__PURE__*/jsx("div", {
|
|
278
|
+
className: className,
|
|
279
|
+
children: /*#__PURE__*/jsx(Input, _objectSpread({
|
|
280
|
+
error: error,
|
|
281
|
+
onKeyDown: onKeyDown,
|
|
282
|
+
ref: ref,
|
|
283
|
+
autoComplete: "tel",
|
|
284
|
+
className: "neeto-molecules-phone-number-input__input",
|
|
285
|
+
"data-testid": "phonenumber-input",
|
|
286
|
+
inputMode: "tel",
|
|
287
|
+
type: "tel",
|
|
288
|
+
value: formattedValue,
|
|
289
|
+
prefix: /*#__PURE__*/jsx(CountryPicker$1, _objectSpread({
|
|
290
|
+
countryCode: finalCountryCode,
|
|
291
|
+
onChange: onChangeCountry
|
|
292
|
+
}, selectProps)),
|
|
293
|
+
onChange: onInputChange
|
|
294
|
+
}, inputProps))
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
PhoneNumberInput.displayName = "PhoneNumberInput";
|
|
298
|
+
|
|
299
|
+
var css = "@import url(\"https://fonts.googleapis.com/css2?family=Noto+Color+Emoji&display=swap\");.neeto-molecules-phone-number-input__flag{font-family:-apple-system,Noto Color Emoji,BlinkMacSystemFont,Inter,Arial,Segoe UI,Roboto,Oxygen,Ubuntu,Fira Sans,Droid Sans,Helvetica Neue,sans-serif!important;font-style:normal;font-weight:400}.neeto-molecules-phone-number{display:block!important}.neeto-molecules-phone-number-input__input .neeto-ui-react-select__indicators{padding-inline:0!important}.neeto-molecules-phone-number-input__input .neeto-ui-input input{direction:inherit}";
|
|
300
|
+
n(css,{});
|
|
301
|
+
|
|
302
|
+
export { PhoneNumberInput as P, SingleValue$1 as S, getPhoneData as g, isPhoneNumberValid as i, validation as v };
|
|
303
|
+
//# sourceMappingURL=phone-number-B3OcwVZM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone-number-B3OcwVZM.js","sources":["../src/components/PhoneNumber/constants.js","../src/components/PhoneNumber/CountryPicker/constants.js","../src/components/PhoneNumber/CountryPicker/SingleValue.jsx","../src/components/PhoneNumber/CountryPicker/index.jsx","../src/components/PhoneNumber/apis/neeto_ip_lookup.js","../src/components/PhoneNumber/utils.js","../src/components/PhoneNumber/PhoneNumberInput.jsx"],"sourcesContent":["export const IP_LOOKUP_ACCESS_TOKEN = \"083c694c79f119c7f227e737de9a5c8c\";\nexport const IP_LOOKUP_STORAGE_KEY = \"IP_LOOKUP_DETAILS_STORAGE\";\nexport const MAX_CACHE_AGE = 60 * 60 * 1000;\n","import { countries } from \"countries-list\";\nimport { getCountries } from \"libphonenumber-js/min\";\nimport { mergeLeft, assoc } from \"ramda\";\n\nexport const COUNTRY_PICKER_OPTIONS = getCountries()\n .filter(code => countries[code])\n .map(code => ({ label: countries[code].name, value: code }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\nexport const COUNTRY_PICKER_STYLES = {\n menuPortal: mergeLeft({ width: 196, zIndex: 99999 }),\n control: mergeLeft({\n border: \"none !important\",\n cursor: \"pointer\",\n gap: 4,\n }),\n input: assoc(\"position\", \"absolute !important\"),\n valueContainer: assoc(\"padding\", \"0 !important\"),\n indicatorsContainer: assoc(\"paddingRight\", \"0 !important\"),\n};\n","import { memo } from \"react\";\n\nimport { countries } from \"countries-list\";\nimport { Tooltip, Typography } from \"neetoui\";\n\nconst SingleValue = ({ countryCode, showEmoji = false, ...otherProps }) => {\n if (!showEmoji) return null;\n\n const countryData = countries[countryCode];\n\n return (\n <Tooltip content={countryData?.name}>\n <Typography\n className=\"neeto-molecules-phone-number-input__flag cursor-pointer text-center text-xl\"\n style=\"body2\"\n {...otherProps}\n >\n {countryData?.emoji}\n </Typography>\n </Tooltip>\n );\n};\n\nexport default memo(SingleValue);\n","import { memo, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport { Select } from \"neetoui\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { COUNTRY_PICKER_OPTIONS, COUNTRY_PICKER_STYLES } from \"./constants\";\nimport SingleValue from \"./SingleValue\";\n\nconst CountryPicker = ({ countryCode, onChange, ...otherProps }) => {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const { t } = useTranslation();\n\n return (\n <div\n className={classnames(\"flex-shrink-0\", {\n \"w-10\": !searchTerm,\n \"w-24\": searchTerm,\n })}\n >\n <Select\n isSearchable\n aria-label={t(\"neetoMolecules.phoneNumberInput.countryCodeAriaLabel\")}\n data-testid=\"phonenumber-country-picker\"\n options={COUNTRY_PICKER_OPTIONS}\n strategy=\"fixed\"\n styles={COUNTRY_PICKER_STYLES}\n value={{ value: countryCode }}\n components={{\n SingleValue: () => <SingleValue {...{ countryCode }} showEmoji />,\n }}\n isOptionSelected={({ value }, [selectedOption]) =>\n selectedOption?.name === value\n }\n onChange={option => onChange(option.value)}\n onInputChange={setSearchTerm}\n {...otherProps}\n />\n </div>\n );\n};\n\nexport default memo(CountryPicker);\n","import axios from \"axios\";\n\nimport { IP_LOOKUP_ACCESS_TOKEN } from \"../constants\";\n\nconst fetchLocationDetails = () =>\n axios.get(\n \"https://neeto-ip-lookup-web-production.neetodeployapp.com/location\",\n { headers: { \"X-ACCESS-TOKEN\": IP_LOOKUP_ACCESS_TOKEN } }\n );\n\nconst neetoIpLookupApi = { fetchLocationDetails };\nexport default neetoIpLookupApi;\n","import i18next from \"i18next\";\nimport {\n formatIncompletePhoneNumber,\n isValidPhoneNumber,\n parsePhoneNumber,\n} from \"libphonenumber-js/min\";\nimport { getFromLocalStorage, setToLocalStorage } from \"neetocommons/utils\";\nimport * as yup from \"yup\";\n\nimport neetoIpLookupApi from \"./apis/neeto_ip_lookup\";\nimport { IP_LOOKUP_STORAGE_KEY, MAX_CACHE_AGE } from \"./constants\";\n\nexport const isPhoneNumberValid = (value = \"\", ...rest) =>\n isValidPhoneNumber(value, ...rest);\n\nexport const validation = (\n message = i18next.t(\"neetoMolecules.phoneNumberInput.validations.invalid\")\n) =>\n yup\n .string()\n .test(\"phoneNumber\", message, phoneNumber =>\n phoneNumber ? isValidPhoneNumber(phoneNumber) : true\n );\n\nexport const getPhoneData = (value, defaultCountryCode) => {\n try {\n const parsedValue = parsePhoneNumber(value, defaultCountryCode);\n\n return {\n phoneNumber: parsedValue.number,\n international: parsedValue.formatInternational(),\n countryCode: parsedValue.country || defaultCountryCode,\n };\n } catch {\n return {\n phoneNumber: value,\n international: formatIncompletePhoneNumber(value, defaultCountryCode),\n countryCode: defaultCountryCode,\n };\n }\n};\n\nexport const fetchLocationDetails = async () => {\n const stored = getFromLocalStorage(IP_LOOKUP_STORAGE_KEY);\n const { data, timestamp } = stored || {};\n const isCacheValid = timestamp && Date.now() - timestamp < MAX_CACHE_AGE;\n\n if (isCacheValid) return data;\n\n try {\n const details = await neetoIpLookupApi.fetchLocationDetails();\n const timestamp = Date.now();\n setToLocalStorage(IP_LOOKUP_STORAGE_KEY, { data: details, timestamp });\n\n return details;\n } catch {\n return data || null;\n }\n};\n\nexport const isNumeric = char => char >= \"0\" && char <= \"9\";\n\nexport const preserveCursor = callback => event => {\n const start = event.target.selectionStart;\n const end = event.target.selectionEnd;\n const len = event.target.value.length;\n const result = callback(event);\n const delta = event.target.value.length - len;\n event.target.setSelectionRange(start + delta, end + delta);\n\n return result;\n};\n","import { forwardRef, useState } from \"react\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport {\n formatIncompletePhoneNumber,\n getCountryCallingCode,\n} from \"libphonenumber-js/min\";\nimport { noop, findBy } from \"neetocist\";\nimport { Input } from \"neetoui\";\nimport PropTypes from \"prop-types\";\n\nimport { IP_LOOKUP_STORAGE_KEY } from \"./constants\";\nimport CountryPicker from \"./CountryPicker\";\nimport { COUNTRY_PICKER_OPTIONS } from \"./CountryPicker/constants\";\nimport {\n getPhoneData,\n isNumeric,\n preserveCursor,\n fetchLocationDetails,\n} from \"./utils\";\n\nconst PhoneNumberInput = forwardRef(\n (\n {\n value = \"\",\n onChange = noop,\n className,\n error,\n selectProps,\n initialCountryCode,\n ...inputProps\n },\n ref\n ) => {\n const [countryCode, setCountryCode] = useState(\n () => getPhoneData(value).countryCode || initialCountryCode\n );\n\n const { data: ipCountry } = useQuery({\n queryKey: [IP_LOOKUP_STORAGE_KEY],\n queryFn: fetchLocationDetails,\n enabled: !countryCode,\n staleTime: Infinity,\n gcTime: Infinity,\n select: data =>\n findBy({ value: data.countryCode }, COUNTRY_PICKER_OPTIONS),\n });\n\n const finalCountryCode = countryCode || ipCountry?.value || \"US\";\n const formattedValue = formatIncompletePhoneNumber(value, finalCountryCode);\n\n const onKeyDown = preserveCursor(event => {\n // Handles special characters in the phone number formatting like brackets and spaces.\n if (event.key !== \"Backspace\") return;\n const left = event.target.value.substring(0, event.target.selectionStart);\n const right = event.target.value.substring(event.target.selectionEnd);\n let index = left.length - 1;\n while (index > 0 && !isNumeric(left[index])) index--;\n const newValue = left.substring(0, index + 1) + right;\n if (newValue) event.target.value = newValue;\n });\n\n const onInputChange = preserveCursor(event => {\n const phoneData = getPhoneData(event.target.value, finalCountryCode);\n event.target.value = formatIncompletePhoneNumber(event.target.value);\n setCountryCode(phoneData.countryCode);\n onChange(phoneData.phoneNumber);\n });\n\n const onChangeCountry = countryCode => {\n const phoneData = getPhoneData(value, finalCountryCode);\n const prevPrefix = `+${getCountryCallingCode(phoneData.countryCode)}`;\n const nextPrefix = `+${getCountryCallingCode(countryCode)}`;\n setCountryCode(countryCode);\n onChange(nextPrefix + value.replace(prevPrefix, \"\"));\n };\n\n return (\n <div {...{ className }}>\n <Input\n {...{ error, onKeyDown, ref }}\n autoComplete=\"tel\"\n className=\"neeto-molecules-phone-number-input__input\"\n data-testid=\"phonenumber-input\"\n inputMode=\"tel\"\n type=\"tel\"\n value={formattedValue}\n prefix={\n <CountryPicker\n countryCode={finalCountryCode}\n onChange={onChangeCountry}\n {...selectProps}\n />\n }\n onChange={onInputChange}\n {...inputProps}\n />\n </div>\n );\n }\n);\n\nPhoneNumberInput.displayName = \"PhoneNumberInput\";\n\nPhoneNumberInput.propTypes = {\n /**\n * To specify the text to be displayed in the component.\n */\n value: PropTypes.string,\n /**\n * To specify the function to be triggered when the `value` is updated.\n */\n onChange: PropTypes.func,\n /**\n * To specify external classNames that can be provided as overrides to the main wrapper.\n */\n className: PropTypes.string,\n /**\n * To specify the error message to be displayed below the input field.\n */\n error: PropTypes.string,\n /**\n * To specify the additional props to be provided to the country picker `Select` component.\n */\n selectProps: PropTypes.object,\n /**\n * To specify the initial country to be set when component is mounted. Setting this\n * disables the feature of setting the initial country based on user's IP address.\n */\n initialCountryCode: PropTypes.string,\n};\n\nexport default PhoneNumberInput;\n"],"names":["IP_LOOKUP_ACCESS_TOKEN","IP_LOOKUP_STORAGE_KEY","MAX_CACHE_AGE","COUNTRY_PICKER_OPTIONS","getCountries","filter","code","countries","map","label","name","value","sort","a","b","localeCompare","COUNTRY_PICKER_STYLES","menuPortal","mergeLeft","width","zIndex","control","border","cursor","gap","input","assoc","valueContainer","indicatorsContainer","SingleValue","_ref","countryCode","_ref$showEmoji","showEmoji","otherProps","_objectWithoutProperties","_excluded","countryData","_jsx","Tooltip","content","children","Typography","_objectSpread","className","style","emoji","memo","CountryPicker","onChange","_useState","useState","_useState2","_slicedToArray","searchTerm","setSearchTerm","_useTranslation","useTranslation","t","classnames","Select","isSearchable","options","strategy","styles","components","_SingleValue","isOptionSelected","_ref2","_ref3","_ref4","selectedOption","option","onInputChange","fetchLocationDetails","axios","get","headers","neetoIpLookupApi","e","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","d","bind","length","l","TypeError","call","done","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","isPhoneNumberValid","arguments","undefined","_len","rest","Array","_key","isValidPhoneNumber","apply","concat","validation","message","i18next","yup","string","test","phoneNumber","getPhoneData","defaultCountryCode","parsedValue","parsePhoneNumber","number","international","formatInternational","country","_unused","formatIncompletePhoneNumber","_asyncToGenerator","_callee","stored","data","timestamp","isCacheValid","details","_timestamp","_context","getFromLocalStorage","Date","now","setToLocalStorage","isNumeric","char","preserveCursor","callback","event","start","target","selectionStart","end","selectionEnd","len","result","delta","setSelectionRange","PhoneNumberInput","forwardRef","ref","_ref$value","_ref$onChange","noop","error","selectProps","initialCountryCode","inputProps","setCountryCode","_useQuery","useQuery","queryKey","queryFn","enabled","staleTime","Infinity","gcTime","select","findBy","ipCountry","finalCountryCode","formattedValue","onKeyDown","key","left","substring","right","index","newValue","phoneData","onChangeCountry","prevPrefix","getCountryCallingCode","nextPrefix","replace","Input","autoComplete","inputMode","type","prefix"],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
3
|
+
import { Fragment } from 'react';
|
|
4
|
+
import { DropdownMenu, Typography, Button } from '@bigbinary/neeto-atoms';
|
|
5
|
+
import { findBy, noop } from '@bigbinary/neeto-cist';
|
|
6
|
+
import { joinHyphenCase } from '@bigbinary/neeto-commons-frontend/v2/utils/general';
|
|
7
|
+
import { mergeLeft, uniqBy, prop, isEmpty } from 'ramda';
|
|
8
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
9
|
+
import { c as createLucideIcon } from '../createLucideIcon-mNMhCCpf.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @license lucide-react v1.7.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
const __iconNode = [
|
|
20
|
+
[
|
|
21
|
+
"path",
|
|
22
|
+
{ d: "M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1", key: "ezmyqa" }
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
"path",
|
|
26
|
+
{
|
|
27
|
+
d: "M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1",
|
|
28
|
+
key: "e1hn23"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
];
|
|
32
|
+
const Braces = createLucideIcon("braces", __iconNode);
|
|
33
|
+
|
|
34
|
+
var parseVariables = function parseVariables() {
|
|
35
|
+
var variableArr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
36
|
+
var uncategorized = [];
|
|
37
|
+
var groupedVariables = [];
|
|
38
|
+
var categorySet = new Set();
|
|
39
|
+
variableArr.forEach(function (variable) {
|
|
40
|
+
var category = variable.category,
|
|
41
|
+
label = variable.label,
|
|
42
|
+
variables = variable.variables;
|
|
43
|
+
if (category && variables) {
|
|
44
|
+
var parsedVariables = variables.map(mergeLeft({
|
|
45
|
+
category: category,
|
|
46
|
+
categoryLabel: label
|
|
47
|
+
}));
|
|
48
|
+
if (!categorySet.has(category)) {
|
|
49
|
+
categorySet.add(category);
|
|
50
|
+
groupedVariables.push({
|
|
51
|
+
label: label,
|
|
52
|
+
variables: parsedVariables
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
var existingGroup = findBy({
|
|
56
|
+
label: label
|
|
57
|
+
}, groupedVariables);
|
|
58
|
+
existingGroup.variables = uniqBy(prop("key"), existingGroup.variables.concat(parsedVariables));
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
uncategorized.push(variable);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
if (!isEmpty(uncategorized)) {
|
|
65
|
+
groupedVariables.push({
|
|
66
|
+
label: !isEmpty(groupedVariables) ? "Others" : null,
|
|
67
|
+
variables: uncategorized
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return groupedVariables;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
var _excluded = ["onVariableClick", "variables", "buttonProps"];
|
|
74
|
+
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; }
|
|
75
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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; }
|
|
76
|
+
var DynamicVariables = function DynamicVariables(_ref) {
|
|
77
|
+
var _ref$onVariableClick = _ref.onVariableClick,
|
|
78
|
+
onVariableClick = _ref$onVariableClick === void 0 ? noop : _ref$onVariableClick,
|
|
79
|
+
_ref$variables = _ref.variables,
|
|
80
|
+
variables = _ref$variables === void 0 ? [] : _ref$variables,
|
|
81
|
+
buttonProps = _ref.buttonProps,
|
|
82
|
+
dropdownProps = _objectWithoutProperties(_ref, _excluded);
|
|
83
|
+
if (isEmpty(variables)) return null;
|
|
84
|
+
var parsedVariables = parseVariables(variables);
|
|
85
|
+
return /*#__PURE__*/jsx(DropdownMenu, _objectSpread(_objectSpread({
|
|
86
|
+
customTarget: /*#__PURE__*/jsx(Button, _objectSpread({
|
|
87
|
+
"data-testid": "dynamic-variables-button",
|
|
88
|
+
icon: Braces,
|
|
89
|
+
size: "icon",
|
|
90
|
+
variant: "outline"
|
|
91
|
+
}, buttonProps))
|
|
92
|
+
}, dropdownProps), {}, {
|
|
93
|
+
dropdownProps: _objectSpread({
|
|
94
|
+
className: "min-w-56"
|
|
95
|
+
}, dropdownProps === null || dropdownProps === void 0 ? void 0 : dropdownProps.dropdownProps),
|
|
96
|
+
children: /*#__PURE__*/jsx("div", {
|
|
97
|
+
className: "flex max-w-[22.5rem] min-w-[11.5rem] flex-col gap-1.5 p-2",
|
|
98
|
+
"data-testid": "dynamic-variables-list",
|
|
99
|
+
children: parsedVariables.map(function (_ref2) {
|
|
100
|
+
var label = _ref2.label,
|
|
101
|
+
variables = _ref2.variables;
|
|
102
|
+
return /*#__PURE__*/jsxs(Fragment, {
|
|
103
|
+
children: [label && /*#__PURE__*/jsxs("div", {
|
|
104
|
+
className: "flex flex-row items-center gap-x-2",
|
|
105
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
106
|
+
variant: "h6",
|
|
107
|
+
children: label
|
|
108
|
+
}), /*#__PURE__*/jsx("hr", {
|
|
109
|
+
className: "border-border flex flex-grow"
|
|
110
|
+
})]
|
|
111
|
+
}), /*#__PURE__*/jsx("div", {
|
|
112
|
+
className: "flex flex-wrap items-center gap-2",
|
|
113
|
+
"data-testid": joinHyphenCase("dynamic-variables-list", label),
|
|
114
|
+
children: variables.map(function (item) {
|
|
115
|
+
return /*#__PURE__*/jsx("button", {
|
|
116
|
+
className: "border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary rounded-md border p-1.5 text-start transition-colors select-none focus:outline-none",
|
|
117
|
+
"data-testid": joinHyphenCase("dynamic-variables-list-item", item.label),
|
|
118
|
+
onClick: function onClick() {
|
|
119
|
+
return onVariableClick(item);
|
|
120
|
+
},
|
|
121
|
+
children: item.label
|
|
122
|
+
}, item.label);
|
|
123
|
+
})
|
|
124
|
+
})]
|
|
125
|
+
}, label);
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
}));
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export { DynamicVariables as default };
|
|
132
|
+
//# sourceMappingURL=DynamicVariables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicVariables.js","sources":["../../node_modules/lucide-react/dist/esm/icons/braces.js","../../src/v2/components/DynamicVariables/utils.js","../../src/v2/components/DynamicVariables/index.jsx"],"sourcesContent":["/**\n * @license lucide-react v1.7.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n];\nconst Braces = createLucideIcon(\"braces\", __iconNode);\n\nexport { __iconNode, Braces as default };\n//# sourceMappingURL=braces.js.map\n","import { findBy } from \"neetocist\";\nimport { prop, isEmpty, uniqBy, mergeLeft } from \"ramda\";\n\nexport const parseVariables = (variableArr = []) => {\n const uncategorized = [];\n const groupedVariables = [];\n const categorySet = new Set();\n\n variableArr.forEach(variable => {\n const { category, label, variables } = variable;\n if (category && variables) {\n const parsedVariables = variables.map(\n mergeLeft({ category, categoryLabel: label })\n );\n\n if (!categorySet.has(category)) {\n categorySet.add(category);\n groupedVariables.push({ label, variables: parsedVariables });\n } else {\n const existingGroup = findBy({ label }, groupedVariables);\n\n existingGroup.variables = uniqBy(\n prop(\"key\"),\n existingGroup.variables.concat(parsedVariables)\n );\n }\n } else {\n uncategorized.push(variable);\n }\n });\n\n if (!isEmpty(uncategorized)) {\n groupedVariables.push({\n label: !isEmpty(groupedVariables) ? \"Others\" : null,\n variables: uncategorized,\n });\n }\n\n return groupedVariables;\n};\n","import { Fragment } from \"react\";\n\nimport { Button, DropdownMenu, Typography } from \"@bigbinary/neeto-atoms\";\nimport { Braces } from \"lucide-react\";\nimport { noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport { parseVariables } from \"./utils\";\n\nconst DynamicVariables = ({\n onVariableClick = noop,\n variables = [],\n buttonProps,\n ...dropdownProps\n}) => {\n if (isEmpty(variables)) return null;\n\n const parsedVariables = parseVariables(variables);\n\n return (\n <DropdownMenu\n customTarget={\n <Button\n data-testid=\"dynamic-variables-button\"\n icon={Braces}\n size=\"icon\"\n variant=\"outline\"\n {...buttonProps}\n />\n }\n {...dropdownProps}\n dropdownProps={{\n className: \"min-w-56\",\n ...dropdownProps?.dropdownProps,\n }}\n >\n <div\n className=\"flex max-w-[22.5rem] min-w-[11.5rem] flex-col gap-1.5 p-2\"\n data-testid=\"dynamic-variables-list\"\n >\n {parsedVariables.map(({ label, variables }) => (\n <Fragment key={label}>\n {label && (\n <div className=\"flex flex-row items-center gap-x-2\">\n <Typography variant=\"h6\">{label}</Typography>\n <hr className=\"border-border flex flex-grow\" />\n </div>\n )}\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={joinHyphenCase(\"dynamic-variables-list\", label)}\n >\n {variables.map(item => (\n <button\n className=\"border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary rounded-md border p-1.5 text-start transition-colors select-none focus:outline-none\"\n key={item.label}\n data-testid={joinHyphenCase(\n \"dynamic-variables-list-item\",\n item.label\n )}\n onClick={() => onVariableClick(item)}\n >\n {item.label}\n </button>\n ))}\n </div>\n </Fragment>\n ))}\n </div>\n </DropdownMenu>\n );\n};\n\nDynamicVariables.propTypes = {\n onVariableClick: PropTypes.func,\n variables: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, key: PropTypes.string })\n ),\n};\n\nexport default DynamicVariables;\n"],"names":["parseVariables","variableArr","arguments","length","undefined","uncategorized","groupedVariables","categorySet","Set","forEach","variable","category","label","variables","parsedVariables","map","mergeLeft","categoryLabel","has","add","push","existingGroup","findBy","uniqBy","prop","concat","isEmpty","DynamicVariables","_ref","_ref$onVariableClick","onVariableClick","noop","_ref$variables","buttonProps","dropdownProps","_objectWithoutProperties","_excluded","_jsx","DropdownMenu","_objectSpread","customTarget","Button","icon","Braces","size","variant","className","children","_ref2","_jsxs","Fragment","Typography","joinHyphenCase","item","onClick"],"mappings":"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","x_google_ignoreList":[0]}
|