@mirai/core 0.3.378 → 0.3.380
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/__tests__/Checkout/__mocks__/checkout-get.json +935 -0
- package/__tests__/Checkout/__mocks__/checkout-post-PAYLATER.json +10 -0
- package/__tests__/Checkout/__mocks__/checkout-post-TPV.json +7 -0
- package/__tests__/Checkout/__mocks__/checkout-post-TRANSFER.json +10 -0
- package/__tests__/Checkout/checkout.constants.js +8 -0
- package/__tests__/Checkout/checkout.spec.jsx +40 -0
- package/__tests__/Checkout/workflows/form.workflow.js +17 -0
- package/__tests__/Checkout/workflows/index.js +4 -0
- package/__tests__/Checkout/workflows/payment.workflow.js +10 -0
- package/__tests__/Checkout/workflows/review.workflow.js +19 -0
- package/__tests__/Checkout/workflows/submit.workflow.js +9 -0
- package/__tests__/Finder/finder.spec.js +64 -0
- package/__tests__/Finder/workflows/calendar.workflow.js +9 -0
- package/__tests__/Finder/workflows/index.js +3 -0
- package/__tests__/Finder/workflows/occupation.workflow.js +13 -0
- package/__tests__/Finder/workflows/promocode.workflow.js +8 -0
- package/__tests__/Rates/__mocks__/rates-success.json +731 -0
- package/__tests__/Rates/rates.spec.jsx +20 -0
- package/__tests__/Session/session.spec.js +17 -0
- package/__tests__/Session/workflows/bookings.workflow.js +18 -0
- package/__tests__/Session/workflows/forgotPassword.workflow.js +20 -0
- package/__tests__/Session/workflows/index.js +5 -0
- package/__tests__/Session/workflows/login.workflow.js +29 -0
- package/__tests__/Session/workflows/logout.workflow.js +8 -0
- package/__tests__/Session/workflows/profile.workflow.js +49 -0
- package/__tests__/Signup/signup.spec.js +13 -0
- package/__tests__/Signup/workflows/index.js +1 -0
- package/__tests__/Signup/workflows/signup.workflow.js +26 -0
- package/__tests__/constants.js +18 -0
- package/__tests__/helpers/closeNotification.js +7 -0
- package/__tests__/helpers/getWeekNumber.js +8 -0
- package/__tests__/helpers/index.js +2 -0
- package/build/Core.Notifications.js +1 -1
- package/build/Core.Notifications.js.map +1 -1
- package/build/components/Booking/__tests__/__snapshots__/Booking.test.js.snap +10 -10
- package/build/components/Checkout/Checkout.js +1 -0
- package/build/components/Checkout/Checkout.js.map +1 -1
- package/build/components/Checkout/__tests__/__snapshots__/Checkout.test.js.snap +32 -32
- package/build/components/Checkout/partials/Checkout.Confirmation.js +2 -1
- package/build/components/Checkout/partials/Checkout.Confirmation.js.map +1 -1
- package/build/components/Checkout/partials/__tests__/__snapshots__/Checkout.Confirmation.test.js.snap +6 -0
- package/build/components/Checkout/partials/__tests__/__snapshots__/Checkout.Form.test.js.snap +28 -8
- package/build/components/Deals/__tests__/__snapshots__/Deals.Calendar.test.js.snap +114 -114
- package/build/components/Deals/__tests__/__snapshots__/Deals.test.js.snap +211 -209
- package/build/components/Environment/Environment.js +4 -2
- package/build/components/Environment/Environment.js.map +1 -1
- package/build/components/Finder/Finder.compact.js +10 -5
- package/build/components/Finder/Finder.compact.js.map +1 -1
- package/build/components/Finder/Finder.constants.js +1 -2
- package/build/components/Finder/Finder.constants.js.map +1 -1
- package/build/components/Finder/Finder.js +4 -20
- package/build/components/Finder/Finder.js.map +1 -1
- package/build/components/Finder/__tests__/__snapshots__/Finder.test.js.snap +734 -730
- package/build/components/Finder/components/Calendar/__tests__/__snapshots__/Calendar.test.js.snap +419 -419
- package/build/components/Header/Header.js +1 -0
- package/build/components/Header/Header.js.map +1 -1
- package/build/components/Profile/components/Bookings/Bookings.Search.js +9 -8
- package/build/components/Profile/components/Bookings/Bookings.Search.js.map +1 -1
- package/build/components/Profile/components/Bookings/Bookings.js +1 -0
- package/build/components/Profile/components/Bookings/Bookings.js.map +1 -1
- package/build/components/Profile/components/Settings/Settings.Account.js +2 -2
- package/build/components/Profile/components/Settings/Settings.Account.js.map +1 -1
- package/build/components/Profile/components/Settings/Settings.Password.js +31 -33
- package/build/components/Profile/components/Settings/Settings.Password.js.map +1 -1
- package/build/components/Profile/components/Settings/Settings.Signout.js +11 -8
- package/build/components/Profile/components/Settings/Settings.Signout.js.map +1 -1
- package/build/components/Profile/components/Settings/Settings.js +2 -1
- package/build/components/Profile/components/Settings/Settings.js.map +1 -1
- package/build/components/Profile/components/Settings/Settings.l10n.js +4 -0
- package/build/components/Profile/components/Settings/Settings.l10n.js.map +1 -1
- package/build/components/Profile/components/Settings/Settings.module.css +2 -4
- package/build/components/Session/Session.Account.js +10 -5
- package/build/components/Session/Session.Account.js.map +1 -1
- package/build/components/Session/Session.Login.Modal.js +10 -5
- package/build/components/Session/Session.Login.Modal.js.map +1 -1
- package/build/components/Session/Session.Login.js +2 -1
- package/build/components/Session/Session.Login.js.map +1 -1
- package/build/components/Session/__tests__/__snapshots__/Session.test.js.snap +23 -0
- package/build/components/Signup/Signup.js +3 -1
- package/build/components/Signup/Signup.js.map +1 -1
- package/build/components/Signup/__tests__/__snapshots__/Signup.test.js.snap +9 -6
- package/build/components/__shared__/BookingDetails/BookingDetails.js +2 -1
- package/build/components/__shared__/BookingDetails/BookingDetails.js.map +1 -1
- package/build/components/__shared__/BookingDetails/__tests__/__snapshots__/BookingDetails.test.js.snap +5 -0
- package/build/components/__shared__/BookingSummary/BookingSummary.js +2 -1
- package/build/components/__shared__/BookingSummary/BookingSummary.js.map +1 -1
- package/build/components/__shared__/ButtonMore/ButtonMore.js +1 -1
- package/build/components/__shared__/ButtonMore/ButtonMore.js.map +1 -1
- package/build/components/__shared__/ButtonMore/__tests__/__snapshots__/ButtonMore.test.js.snap +2 -0
- package/build/components/__shared__/FieldOccupation/__tests__/__snapshots__/FieldOccupation.test.js.snap +1 -0
- package/build/components/__shared__/FieldPromocode/FieldPromocode.js +4 -2
- package/build/components/__shared__/FieldPromocode/FieldPromocode.js.map +1 -1
- package/build/components/__shared__/FieldPromocode/__tests__/__snapshots__/FieldPromocode.test.jsx.snap +2 -1
- package/build/components/__shared__/Occupation/Occupation.Group.js +2 -1
- package/build/components/__shared__/Occupation/Occupation.Group.js.map +1 -1
- package/build/components/__shared__/Occupation/__tests__/__snapshots__/Occupation.test.js.snap +6 -0
- package/build/components/__shared__/Payment/Payment.js +2 -1
- package/build/components/__shared__/Payment/Payment.js.map +1 -1
- package/build/components/__shared__/Payment/__tests__/__snapshots__/Payment.test.js.snap +25 -10
- package/build/helpers/consolidateStore.js +1 -1
- package/build/helpers/consolidateStore.js.map +1 -1
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/package.json +4 -3
- package/playwright.config.js +28 -89
- package/public/routes/Home.jsx +3 -4
- /package/__tests__/bookingQuery/{bookingQuey.spec.js → bookingQuey._spec.js} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test.beforeEach(async ({ context }) => {
|
|
4
|
+
await context.addInitScript(() => (window.IS_PLAYWRIGHT = true));
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
test('Rates workflows', async ({ page }) => {
|
|
8
|
+
await page.route('https://reservation.mirai.com/XMAS/reservation/v2/booking/rates*', (route) => {
|
|
9
|
+
route.fulfill({
|
|
10
|
+
status: 200,
|
|
11
|
+
contentType: 'application/json',
|
|
12
|
+
body: JSON.stringify(require('./__mocks__/rates-success.json')),
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
await page.goto(
|
|
17
|
+
'http://local.mirai.com:8080/step1-rates?checkin=10/04/2025&idtokenprovider=100379008¤cy=EUR&hsri=02040&lang=en&nights=2&parties=W3siYWR1bHRzIjoyLCJjaGlsZHJlbiI6W119XQ%3D%3D&&step=1',
|
|
18
|
+
{ waitUntil: 'networkidle', timeout: 10000 },
|
|
19
|
+
);
|
|
20
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { bookings, forgotPassword, login, logout, profile } from './workflows';
|
|
4
|
+
|
|
5
|
+
test.beforeEach(async ({ context }) => {
|
|
6
|
+
await context.addInitScript(() => (window.IS_PLAYWRIGHT = true));
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('Session workflows', async ({ page }) => {
|
|
10
|
+
await page.goto('http://local.mirai.com:8080', { waitUntil: 'networkidle', timeout: 10000 });
|
|
11
|
+
|
|
12
|
+
await login({ page });
|
|
13
|
+
await profile({ page });
|
|
14
|
+
await bookings({ page });
|
|
15
|
+
await logout({ page });
|
|
16
|
+
await forgotPassword({ page });
|
|
17
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export const bookings = async ({ page }) => {
|
|
4
|
+
await page.getByTestId('show-session-menu').click();
|
|
5
|
+
await page.getByTestId('session-bookings').click();
|
|
6
|
+
|
|
7
|
+
await page.waitForURL(/\/profile/, { waitUntil: 'networkidle', timeout: 10000 });
|
|
8
|
+
|
|
9
|
+
// Card: price details
|
|
10
|
+
await page.getByText('Price details').first().click();
|
|
11
|
+
await expect(page.locator('ui-tooltip-content')).toBeVisible();
|
|
12
|
+
|
|
13
|
+
// Search
|
|
14
|
+
await page.getByTestId('show-search').click();
|
|
15
|
+
await page.fill('input[name="search"]', '19800410');
|
|
16
|
+
await page.getByTestId('button-search').click();
|
|
17
|
+
await expect(page.locator('ui-tooltip-content')).not.toBeVisible();
|
|
18
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { USER } from '../../constants';
|
|
4
|
+
|
|
5
|
+
export const forgotPassword = async ({ page }) => {
|
|
6
|
+
await page.getByTestId('show-login').click();
|
|
7
|
+
await page.waitForTimeout(300);
|
|
8
|
+
|
|
9
|
+
await page.getByTestId('login-action').click();
|
|
10
|
+
|
|
11
|
+
await page.fill('input[name="email"]', USER.email);
|
|
12
|
+
|
|
13
|
+
const [responseError] = await Promise.all([
|
|
14
|
+
page.waitForResponse((response) => response.url().includes('/recovery') && !!response.status()),
|
|
15
|
+
page.getByTestId('login-button').click(),
|
|
16
|
+
]);
|
|
17
|
+
expect(responseError.status()).toBe(200);
|
|
18
|
+
|
|
19
|
+
await page.getByTestId('login-button-secondary').click();
|
|
20
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { SESSION } from '../../constants';
|
|
4
|
+
|
|
5
|
+
export const login = async ({ page }) => {
|
|
6
|
+
await page.getByTestId('show-login').click();
|
|
7
|
+
await page.waitForTimeout(300);
|
|
8
|
+
|
|
9
|
+
// Fails
|
|
10
|
+
await page.fill('input[name="email"]', SESSION.email);
|
|
11
|
+
expect(await page.getByTestId('login-button').getAttribute('disabled')).toBe('true');
|
|
12
|
+
await page.fill('input[name="password"]', 'PassworD');
|
|
13
|
+
|
|
14
|
+
const [responseError] = await Promise.all([
|
|
15
|
+
page.waitForResponse((response) => response.url().includes('/login') && !!response.status()),
|
|
16
|
+
page.getByTestId('login-button').click(),
|
|
17
|
+
]);
|
|
18
|
+
expect(responseError.status()).toBe(400);
|
|
19
|
+
|
|
20
|
+
// Success
|
|
21
|
+
await page.fill('input[name="email"]', SESSION.email);
|
|
22
|
+
await page.fill('input[name="password"]', SESSION.password);
|
|
23
|
+
|
|
24
|
+
const [response] = await Promise.all([
|
|
25
|
+
page.waitForResponse((response) => response.url().includes('/login') && !!response.status()),
|
|
26
|
+
page.getByTestId('login-button').click(),
|
|
27
|
+
]);
|
|
28
|
+
expect(response.status()).toBe(200);
|
|
29
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
export const logout = async ({ page }) => {
|
|
4
|
+
await page.getByTestId('show-session-menu').click();
|
|
5
|
+
await page.getByTestId('session-logout').click();
|
|
6
|
+
|
|
7
|
+
await expect(page.getByTestId('show-login')).toBeVisible();
|
|
8
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { SESSION, USER } from '../../constants';
|
|
4
|
+
|
|
5
|
+
// ! TODO: Somehow we should close the notifications
|
|
6
|
+
// import { closeNotification } from '../../helpers';
|
|
7
|
+
|
|
8
|
+
export const profile = async ({ page }) => {
|
|
9
|
+
await page.getByTestId('show-session-menu').click();
|
|
10
|
+
await page.getByTestId('session-profile').click();
|
|
11
|
+
|
|
12
|
+
await page.waitForURL(/\/profile/, { waitUntil: 'networkidle', timeout: 10000 });
|
|
13
|
+
|
|
14
|
+
// Update profile
|
|
15
|
+
await page.fill('input[name="firstName"]', USER.firstName);
|
|
16
|
+
await page.fill('input[name="lastName"]', USER.lastName);
|
|
17
|
+
await page.fill('input[name="dateOfBirth"]', USER.dateOfBirth);
|
|
18
|
+
await page.locator('input[name="subscribed"]').check();
|
|
19
|
+
|
|
20
|
+
const [response] = await Promise.all([
|
|
21
|
+
page.waitForResponse((response) => response.url().includes('/modify_member') && !!response.status()),
|
|
22
|
+
page.getByTestId('button-save').click(),
|
|
23
|
+
]);
|
|
24
|
+
expect(response.status()).toBe(200);
|
|
25
|
+
// await closeNotification();
|
|
26
|
+
|
|
27
|
+
// Move to "security" context
|
|
28
|
+
await page.getByTestId('profile-context-2').click();
|
|
29
|
+
|
|
30
|
+
// Try to change the password but user fails with the confirmation password
|
|
31
|
+
await page.fill('input[name="password"]', SESSION.password);
|
|
32
|
+
await page.fill('input[name="rePassword"]', 'n3wp4ssw0rD');
|
|
33
|
+
expect(await page.getByTestId('button-password').getAttribute('disabled')).toBe('true');
|
|
34
|
+
|
|
35
|
+
// User changes password
|
|
36
|
+
await page.fill('input[name="password"]', SESSION.password);
|
|
37
|
+
await page.fill('input[name="rePassword"]', SESSION.password);
|
|
38
|
+
const [responsePassword] = await Promise.all([
|
|
39
|
+
page.waitForResponse((response) => response.url().includes('/modify_member') && !!response.status()),
|
|
40
|
+
page.getByTestId('button-password').click(),
|
|
41
|
+
]);
|
|
42
|
+
expect(responsePassword.status()).toBe(200);
|
|
43
|
+
// await closeNotification();
|
|
44
|
+
|
|
45
|
+
// Try to delete account and cancel process.
|
|
46
|
+
await page.getByTestId('button-delete-account').click();
|
|
47
|
+
await page.waitForTimeout(300);
|
|
48
|
+
await page.getByTestId('button-delete-close').click();
|
|
49
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { signup } from './workflows';
|
|
4
|
+
|
|
5
|
+
test.beforeEach(async ({ context }) => {
|
|
6
|
+
await context.addInitScript(() => (window.IS_PLAYWRIGHT = true));
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('Signup workflows', async ({ page }) => {
|
|
10
|
+
await page.goto('http://local.mirai.com:8080/signup', { waitUntil: 'networkidle', timeout: 10000 });
|
|
11
|
+
|
|
12
|
+
await signup({ page });
|
|
13
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './signup.workflow';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import { USER } from '../../constants';
|
|
4
|
+
|
|
5
|
+
export const signup = async ({ page }) => {
|
|
6
|
+
await page.fill('ui-signup input[name="firstName"]', USER.firstName);
|
|
7
|
+
await page.fill('ui-signup input[name="lastName"]', USER.lastName);
|
|
8
|
+
await page.fill('ui-signup input[name="email"]', USER.email);
|
|
9
|
+
await page.fill('ui-signup input[name="dateOfBirth"]', USER.dateOfBirth);
|
|
10
|
+
await page.locator('ui-signup select[name="country"]').selectOption('United States');
|
|
11
|
+
await page.fill('ui-signup input[name="password"]', USER.password);
|
|
12
|
+
await page.locator('ui-signup input[name="subscribed"]').check();
|
|
13
|
+
|
|
14
|
+
// User forgot some fields
|
|
15
|
+
await page.getByTestId('signup-button').click();
|
|
16
|
+
await page.waitForSelector('ui-notification', { state: 'visible' });
|
|
17
|
+
await page.locator('input[name="privacy"]').check();
|
|
18
|
+
|
|
19
|
+
// Success
|
|
20
|
+
const [responseError] = await Promise.all([
|
|
21
|
+
page.waitForResponse((response) => response.url().includes('/join') && !!response.status()),
|
|
22
|
+
page.getByTestId('signup-button').click(),
|
|
23
|
+
]);
|
|
24
|
+
|
|
25
|
+
expect(responseError.status()).toBe(409);
|
|
26
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const SESSION = {
|
|
2
|
+
email: 'hello@soyjavi.com',
|
|
3
|
+
password: 'BuyB1tc01N',
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
const USER = {
|
|
7
|
+
firstName: 'Hal',
|
|
8
|
+
lastName: 'Finney',
|
|
9
|
+
dateOfBirth: '04/05/1956',
|
|
10
|
+
phone: {
|
|
11
|
+
prefix: '+1',
|
|
12
|
+
number: '818-555-1234',
|
|
13
|
+
},
|
|
14
|
+
email: 'hal@finney.org',
|
|
15
|
+
password: 'BuyB1tc01N',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { SESSION, USER };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { UTC } from '@mirai/locale';
|
|
2
|
+
|
|
3
|
+
export const getWeekNumber = (date) => {
|
|
4
|
+
const firstDayOfYear = UTC(new Date(date.getFullYear(), 0, 1));
|
|
5
|
+
const pastDaysOfYear = (Number(date) - Number(firstDayOfYear)) / 86400000;
|
|
6
|
+
|
|
7
|
+
return Math.ceil((pastDaysOfYear + firstDayOfYear.getDay()) / 7);
|
|
8
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Core.Notifications.js","names":["_dataSources","require","_locale","_ui","_react","_interopRequireWildcard","style","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","EVENT_NAME","queue","Notifications","translate","useLocale","setTimestamp","useState","value","session","authorization","useStore","useEffect","Event","subscribe","handleAdd","unsubscribe","notification","contrast","success","warning","id","concat","Date","getTime","Math","random","toFixed","visible","forceRender","setTimeout","parseMotion","handleClose","motionExpand","Theme","parseFloat","replace","keys","createElement","View","className","notifications","sort","map","index","defaultMessage","props","Notification","wide","onClose","styles","item","zIndex","exports","displayName","propTypes"],"sources":["../src/Core.Notifications.jsx"],"sourcesContent":["import { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Notification, styles, Theme, View } from '@mirai/ui';\nimport React, { useEffect, useState } from 'react';\n\nimport * as style from './Core.Notifications.module.css';\n\nconst EVENT_NAME = 'notification';\nlet queue = {};\n\nconst Notifications = () => {\n const { translate } = useLocale();\n const [, setTimestamp] = useState();\n const {\n value: { session: { authorization } = {} },\n } = useStore();\n\n useEffect(() => {\n Event.subscribe(EVENT_NAME, handleAdd);\n return () => Event.unsubscribe(EVENT_NAME, handleAdd);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n queue = {};\n }, [authorization]);\n\n const handleAdd = (notification) => {\n if (!notification) return;\n\n const { contrast, success, warning } = notification;\n const id = `${new Date().getTime()}:${Math.random().toFixed(8)}`;\n\n queue[id] = { ...notification, visible: false };\n forceRender();\n\n setTimeout(() => {\n queue[id].visible = true;\n forceRender();\n }, parseMotion());\n\n if (contrast || success || warning) setTimeout(() => handleClose(id), success ? 5000 : 10000);\n\n return;\n };\n\n const handleClose = (id) => {\n if (!queue[id]) return;\n\n setTimestamp(() => {\n queue[id].visible = false;\n\n setTimeout(() => {\n delete queue[id];\n forceRender();\n }, parseMotion());\n\n return new Date().getTime();\n });\n };\n\n const forceRender = () => setTimestamp(new Date().getTime());\n\n const parseMotion = () => {\n const { motionExpand = '0.3s' } = Theme.get();\n\n return parseFloat(motionExpand.replace('s')) * 1000;\n };\n\n const keys = Object.keys(queue);\n\n return (\n <View className={style.notifications}>\n {keys.sort().map((key, index) => {\n const { defaultMessage, id, visible = false, ...props } = queue[key];\n\n return (\n <Notification\n {...props}\n key={key}\n wide\n onClose={() => handleClose(key)}\n className={styles(style.item, visible && style.visible)}\n style={{ zIndex: keys.length - index }}\n >\n {translate({ id, defaultMessage })}\n </Notification>\n );\n })}\n </View>\n );\n};\n\nNotifications.displayName = 'core:components:Notifications';\n\nNotifications.propTypes = {};\n\nexport { Notifications };\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Core.Notifications.js","names":["_dataSources","require","_locale","_ui","_react","_interopRequireWildcard","style","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","EVENT_NAME","queue","Notifications","translate","useLocale","setTimestamp","useState","value","session","authorization","useStore","useEffect","Event","subscribe","handleAdd","unsubscribe","notification","window","IS_PLAYWRIGHT","contrast","success","warning","id","concat","Date","getTime","Math","random","toFixed","visible","forceRender","setTimeout","parseMotion","handleClose","motionExpand","Theme","parseFloat","replace","keys","createElement","View","className","notifications","sort","map","index","defaultMessage","props","Notification","wide","onClose","styles","item","zIndex","exports","displayName","propTypes"],"sources":["../src/Core.Notifications.jsx"],"sourcesContent":["import { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Notification, styles, Theme, View } from '@mirai/ui';\nimport React, { useEffect, useState } from 'react';\n\nimport * as style from './Core.Notifications.module.css';\n\nconst EVENT_NAME = 'notification';\nlet queue = {};\n\nconst Notifications = () => {\n const { translate } = useLocale();\n const [, setTimestamp] = useState();\n const {\n value: { session: { authorization } = {} },\n } = useStore();\n\n useEffect(() => {\n Event.subscribe(EVENT_NAME, handleAdd);\n return () => Event.unsubscribe(EVENT_NAME, handleAdd);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n queue = {};\n }, [authorization]);\n\n const handleAdd = (notification) => {\n if (!notification || window.IS_PLAYWRIGHT) return;\n\n const { contrast, success, warning } = notification;\n const id = `${new Date().getTime()}:${Math.random().toFixed(8)}`;\n\n queue[id] = { ...notification, visible: false };\n forceRender();\n\n setTimeout(() => {\n queue[id].visible = true;\n forceRender();\n }, parseMotion());\n\n if (contrast || success || warning) setTimeout(() => handleClose(id), success ? 5000 : 10000);\n\n return;\n };\n\n const handleClose = (id) => {\n if (!queue[id]) return;\n\n setTimestamp(() => {\n queue[id].visible = false;\n\n setTimeout(() => {\n delete queue[id];\n forceRender();\n }, parseMotion());\n\n return new Date().getTime();\n });\n };\n\n const forceRender = () => setTimestamp(new Date().getTime());\n\n const parseMotion = () => {\n const { motionExpand = '0.3s' } = Theme.get();\n\n return parseFloat(motionExpand.replace('s')) * 1000;\n };\n\n const keys = Object.keys(queue);\n\n return (\n <View className={style.notifications}>\n {keys.sort().map((key, index) => {\n const { defaultMessage, id, visible = false, ...props } = queue[key];\n\n return (\n <Notification\n {...props}\n key={key}\n wide\n onClose={() => handleClose(key)}\n className={styles(style.item, visible && style.visible)}\n style={{ zIndex: keys.length - index }}\n >\n {translate({ id, defaultMessage })}\n </Notification>\n );\n })}\n </View>\n );\n};\n\nNotifications.displayName = 'core:components:Notifications';\n\nNotifications.propTypes = {};\n\nexport { Notifications };\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`component:<Booking> inherit:className 1`] = `
|
|
4
4
|
<DocumentFragment>
|
|
5
|
-
<ui-
|
|
5
|
+
<ui-header
|
|
6
6
|
class="view wide"
|
|
7
7
|
>
|
|
8
8
|
<ui-view
|
|
@@ -167,7 +167,7 @@ exports[`component:<Booking> inherit:className 1`] = `
|
|
|
167
167
|
</ui-tooltip>
|
|
168
168
|
</ui-view>
|
|
169
169
|
</ui-view>
|
|
170
|
-
</ui-
|
|
170
|
+
</ui-header>
|
|
171
171
|
<ui-view
|
|
172
172
|
class="view mirai"
|
|
173
173
|
>
|
|
@@ -281,7 +281,7 @@ exports[`component:<Booking> inherit:className 1`] = `
|
|
|
281
281
|
|
|
282
282
|
exports[`component:<Booking> prop:skeleton 1`] = `
|
|
283
283
|
<DocumentFragment>
|
|
284
|
-
<ui-
|
|
284
|
+
<ui-header
|
|
285
285
|
class="view wide"
|
|
286
286
|
>
|
|
287
287
|
<ui-view
|
|
@@ -446,7 +446,7 @@ exports[`component:<Booking> prop:skeleton 1`] = `
|
|
|
446
446
|
</ui-tooltip>
|
|
447
447
|
</ui-view>
|
|
448
448
|
</ui-view>
|
|
449
|
-
</ui-
|
|
449
|
+
</ui-header>
|
|
450
450
|
<ui-view
|
|
451
451
|
class="view"
|
|
452
452
|
>
|
|
@@ -560,7 +560,7 @@ exports[`component:<Booking> prop:skeleton 1`] = `
|
|
|
560
560
|
|
|
561
561
|
exports[`component:<Booking> renders 1`] = `
|
|
562
562
|
<DocumentFragment>
|
|
563
|
-
<ui-
|
|
563
|
+
<ui-header
|
|
564
564
|
class="view wide"
|
|
565
565
|
>
|
|
566
566
|
<ui-view
|
|
@@ -725,7 +725,7 @@ exports[`component:<Booking> renders 1`] = `
|
|
|
725
725
|
</ui-tooltip>
|
|
726
726
|
</ui-view>
|
|
727
727
|
</ui-view>
|
|
728
|
-
</ui-
|
|
728
|
+
</ui-header>
|
|
729
729
|
<ui-view
|
|
730
730
|
class="view"
|
|
731
731
|
>
|
|
@@ -839,7 +839,7 @@ exports[`component:<Booking> renders 1`] = `
|
|
|
839
839
|
|
|
840
840
|
exports[`component:<Booking> testID 1`] = `
|
|
841
841
|
<DocumentFragment>
|
|
842
|
-
<ui-
|
|
842
|
+
<ui-header
|
|
843
843
|
class="view wide"
|
|
844
844
|
>
|
|
845
845
|
<ui-view
|
|
@@ -1004,7 +1004,7 @@ exports[`component:<Booking> testID 1`] = `
|
|
|
1004
1004
|
</ui-tooltip>
|
|
1005
1005
|
</ui-view>
|
|
1006
1006
|
</ui-view>
|
|
1007
|
-
</ui-
|
|
1007
|
+
</ui-header>
|
|
1008
1008
|
<ui-view
|
|
1009
1009
|
class="view"
|
|
1010
1010
|
data-testid="mirai"
|
|
@@ -1119,7 +1119,7 @@ exports[`component:<Booking> testID 1`] = `
|
|
|
1119
1119
|
|
|
1120
1120
|
exports[`component:<Booking> with a store 1`] = `
|
|
1121
1121
|
<DocumentFragment>
|
|
1122
|
-
<ui-
|
|
1122
|
+
<ui-header
|
|
1123
1123
|
class="view wide"
|
|
1124
1124
|
>
|
|
1125
1125
|
<ui-view
|
|
@@ -1284,7 +1284,7 @@ exports[`component:<Booking> with a store 1`] = `
|
|
|
1284
1284
|
</ui-tooltip>
|
|
1285
1285
|
</ui-view>
|
|
1286
1286
|
</ui-view>
|
|
1287
|
-
</ui-
|
|
1287
|
+
</ui-header>
|
|
1288
1288
|
<ui-view
|
|
1289
1289
|
class="view"
|
|
1290
1290
|
>
|
|
@@ -117,6 +117,7 @@ const Checkout = _ref => {
|
|
|
117
117
|
const hasRequiredFields = Object.keys(requiredFields || {}).length > 0;
|
|
118
118
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Header.Header, null), /*#__PURE__*/_react.default.createElement(_ui.View, {
|
|
119
119
|
role: "checkout",
|
|
120
|
+
tag: "checkout",
|
|
120
121
|
testId: others.testId,
|
|
121
122
|
className: (0, _ui.styles)(style.container, others.className)
|
|
122
123
|
}, /*#__PURE__*/_react.default.createElement(_ui.Progress, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkout.js","names":["_dataSources","require","_locale","_services","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Checkout","_Checkout2","style","_Checkout3","_partials","_Core","_shared__","_Booking","_Header","_helpers","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","_extends","assign","bind","target","arguments","length","source","key","apply","hasTracking","Checkout","_ref","skeleton","others","isDesktop","useDevice","translate","useLocale","track","trackRender","useMetrics","value","currency","hotel","id","language","locale","session","urlParams","useStore","dataSource","setDataSource","useState","error","setError","requiredFields","setRequiredFields","modalAgency","setModalAgency","responseError","setResponseError","useEffect","ServiceFeatures","FEATURE_CHECKOUT_TRACKING","concat","TRACKING","response","ServiceBooking","checkout","applyClubDiscount","undefined","catch","service","method","trace","tracking","chainId","idchain","window","addEventListener","innerHeight","scrollY","documentElement","scrollHeight","document","handleModalAgency","handleErrorConfirmation","scrollTo","top","behavior","agency","payment","hasRequiredFields","keys","createElement","Fragment","Header","View","role","testId","className","styles","container","Progress","indeterminate","visible","progress","row","content","wide","main","NotificationRequiredFields","form","values","BookingSummary","box","BookingDetails","expanded","name","Notification","small","info","L10N","NOTIFICATION_NO_CARD","NOTIFICATION_AGENCY","link","Action","underline","onPress","action","ACTION_MORE_INFO","Form","showErrors","onError","BookingTerms","Confirmation","onValid","large","NOTIFICATION_ERROR","code","ERROR","UNKNOWN","ModalAgency","onClose","Footer","exports","displayName","propTypes","PropTypes","bool"],"sources":["../../../src/components/Checkout/Checkout.jsx"],"sourcesContent":["import { useMetrics, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { ServiceBooking, ServiceFeatures } from '@mirai/services';\nimport { Action, Notification, Progress, styles, useDevice, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\n\nimport { FEATURE_CHECKOUT_TRACKING, TRACKING } from './Checkout.constants';\nimport { L10N } from './Checkout.l10n';\nimport * as style from './Checkout.module.css';\nimport Skeleton from './Checkout.skeleton';\nimport { Confirmation, Form } from './partials';\nimport { ERROR } from '../../Core.constants';\nimport { BookingDetails, BookingSummary, BookingTerms, Footer, NotificationRequiredFields } from '../__shared__';\nimport { ModalAgency } from '../Booking/partials/Booking.ModalAgency';\nimport { Header } from '../Header';\nimport { trace } from '../helpers';\n\nlet hasTracking = false;\n\nconst Checkout = ({ skeleton, ...others }) => {\n const { isDesktop } = useDevice();\n const { translate } = useLocale();\n const { track, trackRender } = useMetrics();\n const {\n value: { currency, hotel, id, language, locale, session, urlParams = {} },\n } = useStore();\n\n const [dataSource, setDataSource] = useState();\n const [error, setError] = useState();\n const [requiredFields, setRequiredFields] = useState();\n const [modalAgency, setModalAgency] = useState(false);\n const [responseError, setResponseError] = useState();\n\n useEffect(() => {\n if (skeleton) return;\n\n hasTracking = ServiceFeatures.get(FEATURE_CHECKOUT_TRACKING, id);\n hasTracking && trackRender(`${TRACKING}:RENDER`, { locale });\n\n (async () => {\n const response = await ServiceBooking.checkout({\n currency,\n hotel,\n language,\n locale,\n session: urlParams.applyClubDiscount === 'true' ? session : undefined,\n ...urlParams,\n }).catch((error) => {\n setResponseError(error);\n hasTracking && track(`${TRACKING}:ERROR:SERVICE`, { service: 'Booking', method: 'checkout', error });\n });\n setDataSource(response);\n response && trace({ ...response.tracking, chainId: urlParams.idchain });\n })();\n\n window.addEventListener('scroll', () => {\n if (!hasTracking) return;\n const { innerHeight = 0, scrollY } = window;\n const { documentElement: { scrollHeight = 0 } = {} } = document;\n\n if (scrollY >= scrollHeight - innerHeight) track(`${TRACKING}:SCROLL:BOTTOM`);\n else if (scrollY === 0) track(`${TRACKING}:SCROLL:TOP`);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale, session]);\n\n const handleModalAgency = () => {\n setModalAgency(true);\n };\n\n const handleErrorConfirmation = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n setRequiredFields(error);\n };\n\n const { agency = {}, payment } = dataSource || {};\n const response = dataSource !== undefined;\n const hasRequiredFields = Object.keys(requiredFields || {}).length > 0;\n\n return (\n <>\n <Header />\n\n <View role=\"checkout\" testId={others.testId} className={styles(style.container, others.className)}>\n <Progress indeterminate visible={!response && !responseError} className={style.progress} />\n {response ? (\n <View row={isDesktop} className={style.content}>\n <View wide className={style.main}>\n {hasRequiredFields && <NotificationRequiredFields form=\"checkout\" values={requiredFields} />}\n\n {!isDesktop && (\n <BookingSummary box dataSource={dataSource}>\n <BookingDetails dataSource={dataSource} expanded />\n </BookingSummary>\n )}\n\n {(agency.name || !payment) && (\n <Notification small info wide className={styles(style.agency, others.className)}>\n {!payment && `${translate(L10N.NOTIFICATION_NO_CARD)} `}\n {agency.name &&\n translate(L10N.NOTIFICATION_AGENCY, {\n agency: agency.name,\n link: (\n <>\n <Action underline small onPress={handleModalAgency} className={styles(style.action)}>\n {translate(L10N.ACTION_MORE_INFO)}\n </Action>\n </>\n ),\n })}\n </Notification>\n )}\n\n <Form dataSource={dataSource} showErrors={hasRequiredFields} onError={setError} />\n\n {isDesktop && <BookingDetails dataSource={dataSource} className={style.box} />}\n\n <BookingTerms dataSource={dataSource} small tracking={TRACKING} />\n </View>\n\n <Confirmation\n dataSource={dataSource}\n error={Object.keys(error || {}).length > 0}\n onError={handleErrorConfirmation}\n onValid={() => setRequiredFields()}\n />\n </View>\n ) : responseError ? (\n <Notification error large>\n {translate(L10N.NOTIFICATION_ERROR[responseError?.code || ERROR.UNKNOWN])}\n </Notification>\n ) : (\n <Skeleton />\n )}\n </View>\n {agency.name && <ModalAgency {...agency} visible={modalAgency} onClose={() => setModalAgency(false)} />}\n\n <Footer />\n </>\n );\n};\n\nCheckout.displayName = 'Mirai:Core:Checkout';\n\nCheckout.propTypes = {\n skeleton: PropTypes.bool,\n};\n\nexport { Checkout };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Checkout.js","names":["_dataSources","require","_locale","_services","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Checkout","_Checkout2","style","_Checkout3","_partials","_Core","_shared__","_Booking","_Header","_helpers","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","_extends","assign","bind","target","arguments","length","source","key","apply","hasTracking","Checkout","_ref","skeleton","others","isDesktop","useDevice","translate","useLocale","track","trackRender","useMetrics","value","currency","hotel","id","language","locale","session","urlParams","useStore","dataSource","setDataSource","useState","error","setError","requiredFields","setRequiredFields","modalAgency","setModalAgency","responseError","setResponseError","useEffect","ServiceFeatures","FEATURE_CHECKOUT_TRACKING","concat","TRACKING","response","ServiceBooking","checkout","applyClubDiscount","undefined","catch","service","method","trace","tracking","chainId","idchain","window","addEventListener","innerHeight","scrollY","documentElement","scrollHeight","document","handleModalAgency","handleErrorConfirmation","scrollTo","top","behavior","agency","payment","hasRequiredFields","keys","createElement","Fragment","Header","View","role","tag","testId","className","styles","container","Progress","indeterminate","visible","progress","row","content","wide","main","NotificationRequiredFields","form","values","BookingSummary","box","BookingDetails","expanded","name","Notification","small","info","L10N","NOTIFICATION_NO_CARD","NOTIFICATION_AGENCY","link","Action","underline","onPress","action","ACTION_MORE_INFO","Form","showErrors","onError","BookingTerms","Confirmation","onValid","large","NOTIFICATION_ERROR","code","ERROR","UNKNOWN","ModalAgency","onClose","Footer","exports","displayName","propTypes","PropTypes","bool"],"sources":["../../../src/components/Checkout/Checkout.jsx"],"sourcesContent":["import { useMetrics, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { ServiceBooking, ServiceFeatures } from '@mirai/services';\nimport { Action, Notification, Progress, styles, useDevice, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\n\nimport { FEATURE_CHECKOUT_TRACKING, TRACKING } from './Checkout.constants';\nimport { L10N } from './Checkout.l10n';\nimport * as style from './Checkout.module.css';\nimport Skeleton from './Checkout.skeleton';\nimport { Confirmation, Form } from './partials';\nimport { ERROR } from '../../Core.constants';\nimport { BookingDetails, BookingSummary, BookingTerms, Footer, NotificationRequiredFields } from '../__shared__';\nimport { ModalAgency } from '../Booking/partials/Booking.ModalAgency';\nimport { Header } from '../Header';\nimport { trace } from '../helpers';\n\nlet hasTracking = false;\n\nconst Checkout = ({ skeleton, ...others }) => {\n const { isDesktop } = useDevice();\n const { translate } = useLocale();\n const { track, trackRender } = useMetrics();\n const {\n value: { currency, hotel, id, language, locale, session, urlParams = {} },\n } = useStore();\n\n const [dataSource, setDataSource] = useState();\n const [error, setError] = useState();\n const [requiredFields, setRequiredFields] = useState();\n const [modalAgency, setModalAgency] = useState(false);\n const [responseError, setResponseError] = useState();\n\n useEffect(() => {\n if (skeleton) return;\n\n hasTracking = ServiceFeatures.get(FEATURE_CHECKOUT_TRACKING, id);\n hasTracking && trackRender(`${TRACKING}:RENDER`, { locale });\n\n (async () => {\n const response = await ServiceBooking.checkout({\n currency,\n hotel,\n language,\n locale,\n session: urlParams.applyClubDiscount === 'true' ? session : undefined,\n ...urlParams,\n }).catch((error) => {\n setResponseError(error);\n hasTracking && track(`${TRACKING}:ERROR:SERVICE`, { service: 'Booking', method: 'checkout', error });\n });\n setDataSource(response);\n response && trace({ ...response.tracking, chainId: urlParams.idchain });\n })();\n\n window.addEventListener('scroll', () => {\n if (!hasTracking) return;\n const { innerHeight = 0, scrollY } = window;\n const { documentElement: { scrollHeight = 0 } = {} } = document;\n\n if (scrollY >= scrollHeight - innerHeight) track(`${TRACKING}:SCROLL:BOTTOM`);\n else if (scrollY === 0) track(`${TRACKING}:SCROLL:TOP`);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale, session]);\n\n const handleModalAgency = () => {\n setModalAgency(true);\n };\n\n const handleErrorConfirmation = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n setRequiredFields(error);\n };\n\n const { agency = {}, payment } = dataSource || {};\n const response = dataSource !== undefined;\n const hasRequiredFields = Object.keys(requiredFields || {}).length > 0;\n\n return (\n <>\n <Header />\n\n <View role=\"checkout\" tag=\"checkout\" testId={others.testId} className={styles(style.container, others.className)}>\n <Progress indeterminate visible={!response && !responseError} className={style.progress} />\n {response ? (\n <View row={isDesktop} className={style.content}>\n <View wide className={style.main}>\n {hasRequiredFields && <NotificationRequiredFields form=\"checkout\" values={requiredFields} />}\n\n {!isDesktop && (\n <BookingSummary box dataSource={dataSource}>\n <BookingDetails dataSource={dataSource} expanded />\n </BookingSummary>\n )}\n\n {(agency.name || !payment) && (\n <Notification small info wide className={styles(style.agency, others.className)}>\n {!payment && `${translate(L10N.NOTIFICATION_NO_CARD)} `}\n {agency.name &&\n translate(L10N.NOTIFICATION_AGENCY, {\n agency: agency.name,\n link: (\n <>\n <Action underline small onPress={handleModalAgency} className={styles(style.action)}>\n {translate(L10N.ACTION_MORE_INFO)}\n </Action>\n </>\n ),\n })}\n </Notification>\n )}\n\n <Form dataSource={dataSource} showErrors={hasRequiredFields} onError={setError} />\n\n {isDesktop && <BookingDetails dataSource={dataSource} className={style.box} />}\n\n <BookingTerms dataSource={dataSource} small tracking={TRACKING} />\n </View>\n\n <Confirmation\n dataSource={dataSource}\n error={Object.keys(error || {}).length > 0}\n onError={handleErrorConfirmation}\n onValid={() => setRequiredFields()}\n />\n </View>\n ) : responseError ? (\n <Notification error large>\n {translate(L10N.NOTIFICATION_ERROR[responseError?.code || ERROR.UNKNOWN])}\n </Notification>\n ) : (\n <Skeleton />\n )}\n </View>\n {agency.name && <ModalAgency {...agency} visible={modalAgency} onClose={() => setModalAgency(false)} />}\n\n <Footer />\n </>\n );\n};\n\nCheckout.displayName = 'Mirai:Core:Checkout';\n\nCheckout.propTypes = {\n skeleton: PropTypes.bool,\n};\n\nexport { Checkout };\n"],"mappings":"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"}
|