@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.
- package/CHANGELOG.md +24 -0
- package/lib/forms/src/userForm/UserForm.d.ts +3 -0
- package/lib/forms/src/userForm/UserForm.js +3 -2
- package/lib/forms/src/userForm/UserForm.js.map +1 -1
- package/lib/hooks/index.d.ts +2 -0
- package/lib/hooks/index.js +11 -0
- package/lib/hooks/index.js.map +1 -0
- package/lib/hooks/useDebounce/useDebounce.d.ts +2 -0
- package/lib/hooks/useDebounce/useDebounce.js +27 -0
- package/lib/hooks/useDebounce/useDebounce.js.map +1 -0
- package/lib/hooks/useDebounce/useDebounce.test.d.ts +1 -0
- package/lib/hooks/useDebounce/useDebounce.test.js +29 -0
- package/lib/hooks/useDebounce/useDebounce.test.js.map +1 -0
- package/lib/hooks/useEmailSuggestion/useEmailSuggestion.d.ts +6 -0
- package/lib/hooks/useEmailSuggestion/useEmailSuggestion.js +84 -0
- package/lib/hooks/useEmailSuggestion/useEmailSuggestion.js.map +1 -0
- package/lib/hooks/useEmailSuggestion/useEmailSuggestion.test.d.ts +1 -0
- package/lib/hooks/useEmailSuggestion/useEmailSuggestion.test.js +73 -0
- package/lib/hooks/useEmailSuggestion/useEmailSuggestion.test.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/ui/index.d.ts +2 -0
- package/lib/ui/index.js +4 -2
- package/lib/ui/index.js.map +1 -1
- package/lib/ui/src/buttonRadioGroup/ButtonRadio.styles.js +4 -4
- package/lib/ui/src/buttonRadioGroup/ButtonRadio.styles.js.map +1 -1
- package/lib/ui/src/emailInput/EmailInput.d.ts +3 -0
- package/lib/ui/src/emailInput/EmailInput.interfaces.d.ts +12 -0
- package/lib/ui/src/emailInput/EmailInput.interfaces.js +3 -0
- package/lib/ui/src/emailInput/EmailInput.interfaces.js.map +1 -0
- package/lib/ui/src/emailInput/EmailInput.js +119 -0
- package/lib/ui/src/emailInput/EmailInput.js.map +1 -0
- package/lib/ui/src/emailInput/EmailInput.stories.d.ts +1 -0
- package/lib/ui/src/emailInput/EmailInput.stories.js +44 -0
- package/lib/ui/src/emailInput/EmailInput.stories.js.map +1 -0
- package/lib/ui/src/emailInput/EmailInput.styles.d.ts +2 -0
- package/lib/ui/src/emailInput/EmailInput.styles.js +16 -0
- package/lib/ui/src/emailInput/EmailInput.styles.js.map +1 -0
- package/lib/ui/src/emailInput/EmailInput.test.d.ts +1 -0
- package/lib/ui/src/emailInput/EmailInput.test.js +215 -0
- package/lib/ui/src/emailInput/EmailInput.test.js.map +1 -0
- package/lib/ui/src/inputBase/InputBase.styles.js +10 -7
- package/lib/ui/src/inputBase/InputBase.styles.js.map +1 -1
- package/lib/ui/src/selectWrapper/SelectWrapper.styles.js +1 -1
- package/lib/ui/src/selectWrapper/SelectWrapper.styles.js.map +1 -1
- 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.
|
|
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(
|
|
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":";;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAIlC,8EAAwD;AACxD,qDAAwD;AACxD,kFAA4D;AAC5D,wCAA2C;AAC3C,qDAAwE;AASxE,IAAM,oBAAoB,GAAuB;IAC/C,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF,IAAM,sBAAsB,GAAe;IACzC,KAAK,EAAE,0BAA0B;IACjC,SAAS,EACP,uFAAuF;IACzF,QAAQ,EACN,oFAAoF;IACtF,KAAK,EAAE,+BAA+B;CACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"UserForm.js","sourceRoot":"","sources":["../../../../packages/forms/src/userForm/UserForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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,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,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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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"}
|