@proprioo/salatim 18.1.2 → 18.2.2

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/forms/src/userForm/UserForm.d.ts +3 -0
  3. package/lib/forms/src/userForm/UserForm.js +3 -2
  4. package/lib/forms/src/userForm/UserForm.js.map +1 -1
  5. package/lib/hooks/index.d.ts +2 -0
  6. package/lib/hooks/index.js +11 -0
  7. package/lib/hooks/index.js.map +1 -0
  8. package/lib/hooks/useDebounce/useDebounce.d.ts +2 -0
  9. package/lib/hooks/useDebounce/useDebounce.js +27 -0
  10. package/lib/hooks/useDebounce/useDebounce.js.map +1 -0
  11. package/lib/hooks/useDebounce/useDebounce.test.d.ts +1 -0
  12. package/lib/hooks/useDebounce/useDebounce.test.js +29 -0
  13. package/lib/hooks/useDebounce/useDebounce.test.js.map +1 -0
  14. package/lib/hooks/useEmailSuggestion/useEmailSuggestion.d.ts +6 -0
  15. package/lib/hooks/useEmailSuggestion/useEmailSuggestion.js +84 -0
  16. package/lib/hooks/useEmailSuggestion/useEmailSuggestion.js.map +1 -0
  17. package/lib/hooks/useEmailSuggestion/useEmailSuggestion.test.d.ts +1 -0
  18. package/lib/hooks/useEmailSuggestion/useEmailSuggestion.test.js +73 -0
  19. package/lib/hooks/useEmailSuggestion/useEmailSuggestion.test.js.map +1 -0
  20. package/lib/index.d.ts +1 -0
  21. package/lib/index.js +3 -3
  22. package/lib/index.js.map +1 -1
  23. package/lib/ui/index.d.ts +2 -0
  24. package/lib/ui/index.js +4 -2
  25. package/lib/ui/index.js.map +1 -1
  26. package/lib/ui/src/buttonRadioGroup/ButtonRadio.styles.js +4 -4
  27. package/lib/ui/src/buttonRadioGroup/ButtonRadio.styles.js.map +1 -1
  28. package/lib/ui/src/emailInput/EmailInput.d.ts +3 -0
  29. package/lib/ui/src/emailInput/EmailInput.interfaces.d.ts +12 -0
  30. package/lib/ui/src/emailInput/EmailInput.interfaces.js +3 -0
  31. package/lib/ui/src/emailInput/EmailInput.interfaces.js.map +1 -0
  32. package/lib/ui/src/emailInput/EmailInput.js +119 -0
  33. package/lib/ui/src/emailInput/EmailInput.js.map +1 -0
  34. package/lib/ui/src/emailInput/EmailInput.stories.d.ts +1 -0
  35. package/lib/ui/src/emailInput/EmailInput.stories.js +44 -0
  36. package/lib/ui/src/emailInput/EmailInput.stories.js.map +1 -0
  37. package/lib/ui/src/emailInput/EmailInput.styles.d.ts +2 -0
  38. package/lib/ui/src/emailInput/EmailInput.styles.js +16 -0
  39. package/lib/ui/src/emailInput/EmailInput.styles.js.map +1 -0
  40. package/lib/ui/src/emailInput/EmailInput.test.d.ts +1 -0
  41. package/lib/ui/src/emailInput/EmailInput.test.js +215 -0
  42. package/lib/ui/src/emailInput/EmailInput.test.js.map +1 -0
  43. package/lib/ui/src/inputBase/InputBase.styles.js +10 -7
  44. package/lib/ui/src/inputBase/InputBase.styles.js.map +1 -1
  45. package/lib/ui/src/selectWrapper/SelectWrapper.styles.js +1 -1
  46. package/lib/ui/src/selectWrapper/SelectWrapper.styles.js.map +1 -1
  47. package/package.json +4 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  ## Changelog
2
2
 
3
+ **18.2.2**
4
+
5
+ * Fix `EmailInput` suggestion buttons to avoid submitting forms on click
6
+
7
+ **18.2.1**
8
+
9
+ * Fix disabled input on Safari
10
+ * Fix Suffix color when disabled
11
+ * Fix Fieldset border-color when disabled and in error
12
+
13
+ **18.2.0**
14
+
15
+ * Add `useDebounce()` hook
16
+ * Add `useEmailSuggestion()` hook with mailcheck feature
17
+ * Add `EmailInput` that leverage on `useEmailSuggestion()` hook
18
+
19
+ **18.1.4**
20
+
21
+ * Fix button border radius display on mobile device
22
+
23
+ **18.1.3**
24
+
25
+ * Add width on SelectWrapper
26
+
3
27
  **18.1.2**
4
28
 
5
29
  * Fix Modal on mobile
@@ -1,5 +1,6 @@
1
1
  import { FC } from 'react';
2
2
  import { Dictionary, UserProps } from '@proprioo/hokkaido';
3
+ import { EmailInputI18nLabelProps } from '../../../ui/src/emailInput/EmailInput.interfaces';
3
4
  export interface UserFormLabelProps {
4
5
  firstName: string;
5
6
  lastName: string;
@@ -9,6 +10,8 @@ export interface UserFormLabelProps {
9
10
  export interface UserFormProps {
10
11
  user: UserProps;
11
12
  errors: Dictionary;
13
+ emailSuggestionI18nLabels?: EmailInputI18nLabelProps;
14
+ isEmailSuggestionEnabled?: boolean;
12
15
  labels?: UserFormLabelProps;
13
16
  errorMessages?: Dictionary;
14
17
  phoneWithFlags?: boolean;
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.formatEmail = void 0;
18
18
  var react_1 = __importDefault(require("react"));
19
19
  var Phone_1 = __importDefault(require("../../../phone/src/phoneInput/Phone"));
20
+ var EmailInput_1 = __importDefault(require("../../../ui/src/emailInput/EmailInput"));
20
21
  var Input_1 = require("../../../ui/src/input/Input");
21
22
  var InputBase_1 = __importDefault(require("../../../ui/src/inputBase/InputBase"));
22
23
  var utils_1 = require("../../../utils");
@@ -36,7 +37,7 @@ var DEFAULT_ERROR_MESSAGES = {
36
37
  var formatEmail = function (email) { return email.trim(); };
37
38
  exports.formatEmail = formatEmail;
38
39
  var UserForm = function (_a) {
39
- var user = _a.user, errors = _a.errors, _b = _a.labels, labels = _b === void 0 ? DEFAULT_INPUT_LABELS : _b, _c = _a.errorMessages, errorMessages = _c === void 0 ? {} : _c, updateUser = _a.updateUser, _d = _a.phoneWithFlags, phoneWithFlags = _d === void 0 ? false : _d;
40
+ var user = _a.user, errors = _a.errors, emailSuggestionI18nLabels = _a.emailSuggestionI18nLabels, _b = _a.isEmailSuggestionEnabled, isEmailSuggestionEnabled = _b === void 0 ? true : _b, _c = _a.labels, labels = _c === void 0 ? DEFAULT_INPUT_LABELS : _c, _d = _a.errorMessages, errorMessages = _d === void 0 ? {} : _d, updateUser = _a.updateUser, _e = _a.phoneWithFlags, phoneWithFlags = _e === void 0 ? false : _e;
40
41
  var firstName = user.firstName, lastName = user.lastName, email = user.email, phone = user.phone;
41
42
  var mergedErrorMessages = __assign(__assign({}, DEFAULT_ERROR_MESSAGES), errorMessages);
42
43
  return (react_1.default.createElement(UserForm_styles_1.Layout, null,
@@ -55,7 +56,7 @@ var UserForm = function (_a) {
55
56
  react_1.default.createElement(utils_1.Line, null,
56
57
  react_1.default.createElement(utils_1.Row, null,
57
58
  react_1.default.createElement(UserForm_styles_1.InputWithError, null,
58
- react_1.default.createElement(InputBase_1.default, { dataTest: "customer-email", name: "email", type: Input_1.InputType.EMAIL, disabled: false, error: !!errors.email, label: labels.email, value: email, onChange: function (value) {
59
+ react_1.default.createElement(EmailInput_1.default, { dataTest: "customer-email", name: "email", disabled: false, error: !!errors.email, label: labels.email, isSuggestionEnabled: isEmailSuggestionEnabled, i18nLabels: emailSuggestionI18nLabels, value: email, onChange: function (value) {
59
60
  return updateUser(__assign(__assign({}, user), { email: exports.formatEmail(value) }), 'user.email');
60
61
  } }),
61
62
  errors.email && (react_1.default.createElement(UserForm_styles_1.ErrorLayout, { "data-test": "invalid-email" }, mergedErrorMessages.email))),
@@ -1 +1 @@
1
- {"version":3,"file":"UserForm.js","sourceRoot":"","sources":["../../../../packages/forms/src/userForm/UserForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserForm.js","sourceRoot":"","sources":["../../../../packages/forms/src/userForm/UserForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { default as useDebounce } from './useDebounce/useDebounce';
2
+ export { default as useEmailSuggestion, UseEmailSuggestionProps } from './useEmailSuggestion/useEmailSuggestion';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useEmailSuggestion = exports.useDebounce = void 0;
7
+ var useDebounce_1 = require("./useDebounce/useDebounce");
8
+ Object.defineProperty(exports, "useDebounce", { enumerable: true, get: function () { return __importDefault(useDebounce_1).default; } });
9
+ var useEmailSuggestion_1 = require("./useEmailSuggestion/useEmailSuggestion");
10
+ Object.defineProperty(exports, "useEmailSuggestion", { enumerable: true, get: function () { return __importDefault(useEmailSuggestion_1).default; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../packages/hooks/index.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAmE;AAA1D,2HAAA,OAAO,OAAe;AAC/B,8EAGiD;AAF/C,yIAAA,OAAO,OAAsB"}
@@ -0,0 +1,2 @@
1
+ declare function useDebounce<T>(value: T, delay: number): T;
2
+ export default useDebounce;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // Hook from : https://usehooks.com/useDebounce/
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ var react_1 = require("react");
5
+ // T is a generic type for value parameter, our case this will be string
6
+ function useDebounce(value, delay) {
7
+ // State and setters for debounced value
8
+ var _a = react_1.useState(value), debouncedValue = _a[0], setDebouncedValue = _a[1];
9
+ react_1.useEffect(function () {
10
+ if (delay > 0) {
11
+ // Update debounced value after delay
12
+ var handler_1 = setTimeout(function () {
13
+ setDebouncedValue(value);
14
+ }, delay);
15
+ // Cancel the timeout if value changes (also on delay change or unmount)
16
+ // This is how we prevent debounced value from updating if value is changed ...
17
+ // .. within the delay period. Timeout gets cleared and restarted.
18
+ return function () {
19
+ clearTimeout(handler_1);
20
+ };
21
+ }
22
+ }, [value, delay] // Only re-call effect if value or delay changes
23
+ );
24
+ return delay === 0 ? value : debouncedValue;
25
+ }
26
+ exports.default = useDebounce;
27
+ //# sourceMappingURL=useDebounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce.js","sourceRoot":"","sources":["../../../packages/hooks/useDebounce/useDebounce.ts"],"names":[],"mappings":";AAAA,gDAAgD;;AAEhD,+BAA4C;AAE5C,wEAAwE;AACxE,SAAS,WAAW,CAAI,KAAQ,EAAE,KAAa;IAC7C,wCAAwC;IAClC,IAAA,KAAsC,gBAAQ,CAAI,KAAK,CAAC,EAAvD,cAAc,QAAA,EAAE,iBAAiB,QAAsB,CAAC;IAE/D,iBAAS,CACP;QACE,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,qCAAqC;YACrC,IAAM,SAAO,GAAG,UAAU,CAAC;gBACzB,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,wEAAwE;YACxE,+EAA+E;YAC/E,kEAAkE;YAClE,OAAO;gBACL,YAAY,CAAC,SAAO,CAAC,CAAC;YACxB,CAAC,CAAC;SACH;IACH,CAAC,EACD,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,gDAAgD;KAChE,CAAC;IAEF,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;AAC9C,CAAC;AAED,kBAAe,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_hooks_1 = require("@testing-library/react-hooks");
7
+ var useDebounce_1 = __importDefault(require("./useDebounce"));
8
+ describe('useDebounce', function () {
9
+ beforeAll(function () { return jest.useFakeTimers(); });
10
+ afterEach(function () { return jest.clearAllTimers(); });
11
+ afterAll(function () { return jest.useRealTimers(); });
12
+ it('should change value after given amount of time', function () {
13
+ var _a = react_hooks_1.renderHook(function (value) { return useDebounce_1.default(value, 100); }, { initialProps: 'value' }), result = _a.result, rerender = _a.rerender;
14
+ expect(result.current).toEqual('value');
15
+ rerender('new-value');
16
+ expect(result.current).toEqual('value');
17
+ react_hooks_1.act(function () {
18
+ jest.advanceTimersByTime(100);
19
+ expect(result.current).toEqual('new-value');
20
+ });
21
+ });
22
+ it('should change value immediately', function () {
23
+ var _a = react_hooks_1.renderHook(function (value) { return useDebounce_1.default(value, 0); }, { initialProps: 'value' }), result = _a.result, rerender = _a.rerender;
24
+ expect(result.current).toEqual('value');
25
+ rerender('new-value');
26
+ expect(result.current).toEqual('new-value');
27
+ });
28
+ });
29
+ //# sourceMappingURL=useDebounce.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce.test.js","sourceRoot":"","sources":["../../../packages/hooks/useDebounce/useDebounce.test.ts"],"names":[],"mappings":";;;;;AAAA,4DAA+D;AAE/D,8DAAwC;AAExC,QAAQ,CAAC,aAAa,EAAE;IACtB,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,aAAa,EAAE,EAApB,CAAoB,CAAC,CAAC;IACtC,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,cAAc,EAAE,EAArB,CAAqB,CAAC,CAAC;IACvC,QAAQ,CAAC,cAAM,OAAA,IAAI,CAAC,aAAa,EAAE,EAApB,CAAoB,CAAC,CAAC;IAErC,EAAE,CAAC,gDAAgD,EAAE;QAC7C,IAAA,KAAuB,wBAAU,CACrC,UAAC,KAAa,IAAK,OAAA,qBAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAvB,CAAuB,EAC1C,EAAE,YAAY,EAAE,OAAO,EAAE,CAC1B,EAHO,MAAM,YAAA,EAAE,QAAQ,cAGvB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExC,iBAAG,CAAC;YACF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE;QAC9B,IAAA,KAAuB,wBAAU,CACrC,UAAC,KAAa,IAAK,OAAA,qBAAW,CAAC,KAAK,EAAE,CAAC,CAAC,EAArB,CAAqB,EACxC,EAAE,YAAY,EAAE,OAAO,EAAE,CAC1B,EAHO,MAAM,YAAA,EAAE,QAAQ,cAGvB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { nullOrString } from '@proprioo/hokkaido';
2
+ export interface UseEmailSuggestionProps {
3
+ debounce?: number;
4
+ email?: nullOrString;
5
+ }
6
+ export default function useEmailSuggestion({ debounce, email }: UseEmailSuggestionProps): string | undefined;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var mailcheck_1 = __importDefault(require("mailcheck"));
7
+ var react_1 = require("react");
8
+ var useDebounce_1 = __importDefault(require("../useDebounce/useDebounce"));
9
+ /**
10
+ * Extracted from BigQuery:
11
+ *
12
+ SELECT
13
+ REGEXP_EXTRACT(email, r'@(.+)') AS domain,
14
+ COUNT(email) AS count
15
+ FROM
16
+ `proprioo-production.events.raw_aws_ses_events`
17
+ WHERE
18
+ DATE(timestamp) <= CURRENT_DATETIME()
19
+ GROUP BY
20
+ domain
21
+ ORDER BY
22
+ count DESC
23
+ */
24
+ var DOMAINS = [
25
+ 'gmail.com',
26
+ 'yahoo.fr',
27
+ 'hotmail.fr',
28
+ 'hotmail.com',
29
+ 'wanadoo.fr',
30
+ 'orange.fr',
31
+ 'free.fr',
32
+ 'yahoo.com',
33
+ 'live.fr',
34
+ 'outlook.fr',
35
+ 'laposte.net',
36
+ 'icloud.com',
37
+ 'sfr.fr',
38
+ 'outlook.com',
39
+ 'me.com',
40
+ 'aol.com',
41
+ 'neuf.fr',
42
+ 'msn.com',
43
+ 'yopmail.com',
44
+ 'ymail.com',
45
+ 'club-internet.fr',
46
+ 'live.com',
47
+ 'bbox.fr'
48
+ ];
49
+ var TOP_LEVEL_DOMAINS = [
50
+ 'com',
51
+ 'net',
52
+ 'org',
53
+ 'edu',
54
+ 'info',
55
+ 'be',
56
+ 'ch',
57
+ 'de',
58
+ 'es',
59
+ 'eu',
60
+ 'fr'
61
+ ];
62
+ function useEmailSuggestion(_a) {
63
+ var _b = _a.debounce, debounce = _b === void 0 ? 500 : _b, email = _a.email;
64
+ var _c = react_1.useState(undefined), suggestedEmail = _c[0], setSuggestedEmail = _c[1];
65
+ var debouncedSuggestedEmail = useDebounce_1.default(suggestedEmail, debounce);
66
+ var checkEmail = function (value) {
67
+ mailcheck_1.default.run({
68
+ email: value,
69
+ domains: DOMAINS,
70
+ topLevelDomains: TOP_LEVEL_DOMAINS,
71
+ suggested: function (suggestion) {
72
+ setSuggestedEmail(suggestion.full);
73
+ }
74
+ });
75
+ };
76
+ react_1.useEffect(function () {
77
+ if (email) {
78
+ checkEmail(email);
79
+ }
80
+ }, [email]);
81
+ return debouncedSuggestedEmail;
82
+ }
83
+ exports.default = useEmailSuggestion;
84
+ //# sourceMappingURL=useEmailSuggestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEmailSuggestion.js","sourceRoot":"","sources":["../../../packages/hooks/useEmailSuggestion/useEmailSuggestion.ts"],"names":[],"mappings":";;;;;AAAA,wDAAkC;AAClC,+BAA4C;AAI5C,2EAAqD;AAErD;;;;;;;;;;;;;;GAcG;AACH,IAAM,OAAO,GAAG;IACd,WAAW;IACX,UAAU;IACV,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,WAAW;IACX,SAAS;IACT,WAAW;IACX,SAAS;IACT,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,SAAS;IACT,SAAS;IACT,SAAS;IACT,aAAa;IACb,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,SAAS;CACV,CAAC;AAEF,IAAM,iBAAiB,GAAG;IACxB,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC;AAOF,SAAwB,kBAAkB,CAAC,EAGjB;QAFxB,gBAAc,EAAd,QAAQ,mBAAG,GAAG,KAAA,EACd,KAAK,WAAA;IAEC,IAAA,KAAsC,gBAAQ,CAClD,SAAS,CACV,EAFM,cAAc,QAAA,EAAE,iBAAiB,QAEvC,CAAC;IAEF,IAAM,uBAAuB,GAAG,qBAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEtE,IAAM,UAAU,GAAG,UAAC,KAAa;QAC/B,mBAAS,CAAC,GAAG,CAAC;YACZ,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,OAAO;YAChB,eAAe,EAAE,iBAAiB;YAClC,SAAS,EAAE,UAAC,UAAuC;gBACjD,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,iBAAS,CAAC;QACR,IAAI,KAAK,EAAE;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;SACnB;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,uBAAuB,CAAC;AACjC,CAAC;AA5BD,qCA4BC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ var react_hooks_1 = require("@testing-library/react-hooks");
43
+ var useEmailSuggestion_1 = __importDefault(require("./useEmailSuggestion"));
44
+ describe('useEmailSuggestion()', function () {
45
+ beforeAll(function () { return jest.useFakeTimers(); });
46
+ afterEach(function () { return jest.clearAllTimers(); });
47
+ afterAll(function () { return jest.useRealTimers(); });
48
+ it('should return the correct suggestion after amount of time', function () { return __awaiter(void 0, void 0, void 0, function () {
49
+ var result;
50
+ return __generator(this, function (_a) {
51
+ result = react_hooks_1.renderHook(function () {
52
+ return useEmailSuggestion_1.default({ email: 'leo@gmaul.com', debounce: 100 });
53
+ }).result;
54
+ expect(result.current).toEqual(undefined);
55
+ react_hooks_1.act(function () {
56
+ jest.advanceTimersByTime(100);
57
+ expect(result.current).toEqual('leo@gmail.com');
58
+ });
59
+ return [2 /*return*/];
60
+ });
61
+ }); });
62
+ it('should return the correct suggestion immediately', function () { return __awaiter(void 0, void 0, void 0, function () {
63
+ var result;
64
+ return __generator(this, function (_a) {
65
+ result = react_hooks_1.renderHook(function () {
66
+ return useEmailSuggestion_1.default({ email: 'leo@gmaul.com', debounce: 0 });
67
+ }).result;
68
+ expect(result.current).toEqual('leo@gmail.com');
69
+ return [2 /*return*/];
70
+ });
71
+ }); });
72
+ });
73
+ //# sourceMappingURL=useEmailSuggestion.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEmailSuggestion.test.js","sourceRoot":"","sources":["../../../packages/hooks/useEmailSuggestion/useEmailSuggestion.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAA+D;AAE/D,4EAAsD;AAEtD,QAAQ,CAAC,sBAAsB,EAAE;IAC/B,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,aAAa,EAAE,EAApB,CAAoB,CAAC,CAAC;IACtC,SAAS,CAAC,cAAM,OAAA,IAAI,CAAC,cAAc,EAAE,EAArB,CAAqB,CAAC,CAAC;IACvC,QAAQ,CAAC,cAAM,OAAA,IAAI,CAAC,aAAa,EAAE,EAApB,CAAoB,CAAC,CAAC;IAErC,EAAE,CAAC,2DAA2D,EAAE;;;YACtD,MAAM,GAAK,wBAAU,CAAC;gBAC5B,OAAA,4BAAkB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAA7D,CAA6D,CAC9D,OAFa,CAEZ;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE1C,iBAAG,CAAC;gBACF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;;;SACJ,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE;;;YAC7C,MAAM,GAAK,wBAAU,CAAC;gBAC5B,OAAA,4BAAkB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAA3D,CAA2D,CAC5D,OAFa,CAEZ;YAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;;;SACjD,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/lib/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './date';
2
2
  export * from './energy';
3
3
  export * from './forms';
4
+ export * from './hooks';
4
5
  export * from './phone';
5
6
  export * from './ui';
6
7
  export * from './utils';