@licklist/design 0.58.10 → 0.58.11-dev.0

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 (194) hide show
  1. package/bitbucket-pipelines.yml +0 -8
  2. package/dist/assets/iframe/calendar.svg +2 -2
  3. package/dist/assets/iframe/calendar.svg.js +1 -1
  4. package/dist/assets/iframe/ticket.svg +2 -2
  5. package/dist/assets/iframe/ticket.svg.js +1 -1
  6. package/dist/calendar/Calendar.d.ts +1 -1
  7. package/dist/calendar/Calendar.d.ts.map +1 -1
  8. package/dist/calendar/Calendar.js +1 -1
  9. package/dist/calendar/components/CalendarButtons/CalendarButtons.js +1 -1
  10. package/dist/calendar/components/CalendarDates/CalendarDates.d.ts +2 -2
  11. package/dist/calendar/components/CalendarDates/CalendarDates.d.ts.map +1 -1
  12. package/dist/calendar/components/CalendarDates/CalendarDates.js +1 -1
  13. package/dist/events/edit-event-modal/component/EditEventForm/EditEventForm.js +1 -1
  14. package/dist/events/event-statistic-modal/EventStatisticModal.js +1 -1
  15. package/dist/iframe/event/event-card/IframeEventCard.d.ts +2 -1
  16. package/dist/iframe/event/event-card/IframeEventCard.d.ts.map +1 -1
  17. package/dist/iframe/event/event-card/IframeEventCard.js +1 -1
  18. package/dist/iframe/event/event-venue-map/IframeEventVenueMap.js +1 -1
  19. package/dist/iframe/order-process/components/BookingSummary/BookingSummary.d.ts +2 -2
  20. package/dist/iframe/order-process/components/BookingSummary/BookingSummary.d.ts.map +1 -1
  21. package/dist/iframe/order-process/components/BookingSummary/BookingSummary.js +1 -1
  22. package/dist/iframe/order-process/components/BookingSummary/components/BookingSummaryAccordion/BookingSummaryAccordion.d.ts +4 -2
  23. package/dist/iframe/order-process/components/BookingSummary/components/BookingSummaryAccordion/BookingSummaryAccordion.d.ts.map +1 -1
  24. package/dist/iframe/order-process/components/BookingSummary/components/BookingSummaryAccordion/BookingSummaryAccordion.js +1 -1
  25. package/dist/iframe/order-process/components/BookingSummary/components/SummaryTotal/components/SummaryTotalBlock.d.ts +1 -1
  26. package/dist/iframe/order-process/components/BookingSummary/components/SummaryTotal/components/SummaryTotalBlock.d.ts.map +1 -1
  27. package/dist/iframe/order-process/components/BookingSummary/components/SummaryTotal/components/SummaryTotalBlock.js +1 -1
  28. package/dist/iframe/order-process/components/BookingSummary/components/ToggleHeader/ToggleHeader.d.ts +4 -2
  29. package/dist/iframe/order-process/components/BookingSummary/components/ToggleHeader/ToggleHeader.d.ts.map +1 -1
  30. package/dist/iframe/order-process/components/BookingSummary/components/ToggleHeader/ToggleHeader.js +1 -1
  31. package/dist/iframe/order-process/components/BookingSummary/types/index.d.ts +4 -0
  32. package/dist/iframe/order-process/components/BookingSummary/types/index.d.ts.map +1 -1
  33. package/dist/iframe/order-process/components/CalendarStepsForm/CalendarStepsForm.js +1 -1
  34. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.js +1 -1
  35. package/dist/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.d.ts.map +1 -1
  36. package/dist/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.js +1 -1
  37. package/dist/iframe/page/components/PageBody/constants.d.ts +1 -0
  38. package/dist/iframe/page/components/PageBody/constants.d.ts.map +1 -1
  39. package/dist/iframe/page/components/PageBody/constants.js +1 -1
  40. package/dist/iframe/page/components/PageBody/hooks/useResizePageBody.d.ts.map +1 -1
  41. package/dist/iframe/page/components/PageBody/hooks/useResizePageBody.js +1 -1
  42. package/dist/iframe/payment/order-items-table/OrderItemsTable.js +1 -1
  43. package/dist/iframe/payment/order-items-table/utils/paymentSummary.js +1 -1
  44. package/dist/iframe/payment/payment-form/PaymentForm.js +1 -1
  45. package/dist/iframe/payment/payment-page/PaymentPage.d.ts.map +1 -1
  46. package/dist/iframe/payment/payment-page/PaymentPage.js +1 -1
  47. package/dist/iframe/payment/payment-page/PaymentTimer.js +1 -1
  48. package/dist/iframe/payment/payment-status-page/PaymentStatusPage.js +1 -1
  49. package/dist/iframe/ryft/RyftPaymentForm.d.ts.map +1 -1
  50. package/dist/iframe/ryft/RyftPaymentForm.js +1 -1
  51. package/dist/iframe/ryft/utils/ryft-form.d.ts +5 -0
  52. package/dist/iframe/ryft/utils/ryft-form.d.ts.map +1 -0
  53. package/dist/iframe/ryft/utils/ryft-form.js +1 -0
  54. package/dist/index.js +1 -1
  55. package/dist/product-set/control/DateAndRecurrenceInput.d.ts.map +1 -1
  56. package/dist/product-set/control/DateAndRecurrenceInput.js +1 -1
  57. package/dist/product-set/control/DateInput.d.ts.map +1 -1
  58. package/dist/product-set/form/ProductSetForm.d.ts +4 -1
  59. package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
  60. package/dist/product-set/form/VenueMapsControl.js +1 -1
  61. package/dist/product-set/hooks/useSortableTreeFunctions.d.ts.map +1 -1
  62. package/dist/product-set/product/ProductControl.d.ts +1 -0
  63. package/dist/product-set/product/ProductControl.d.ts.map +1 -1
  64. package/dist/product-set/product/ProductControl.js +1 -1
  65. package/dist/product-set/product/fixed-duration-fields/FixedDurationOptions.d.ts.map +1 -1
  66. package/dist/product-set/product-category/ProductCategoryControl.d.ts +1 -0
  67. package/dist/product-set/product-category/ProductCategoryControl.d.ts.map +1 -1
  68. package/dist/product-set/product-category/ProductCategoryControl.js +1 -1
  69. package/dist/provider/working-hours-input/WorkingHoursInputDescription.d.ts.map +1 -1
  70. package/dist/provider/working-hours-input/WorkingHoursInputDescription.js +1 -1
  71. package/dist/recurring-date-picker-input/RecurrenceAndFrequencyInput.d.ts.map +1 -1
  72. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts +3 -1
  73. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts.map +1 -1
  74. package/dist/recurring-date-picker-input/RecurringDatePickerInput.js +1 -1
  75. package/dist/recurring-date-picker-input/utils.d.ts +9 -0
  76. package/dist/recurring-date-picker-input/utils.d.ts.map +1 -1
  77. package/dist/recurring-date-picker-input/utils.js +1 -1
  78. package/dist/sales/booking/results/components/ResultCard.d.ts.map +1 -1
  79. package/dist/sales/booking/results/components/ResultCard.js +1 -1
  80. package/dist/sales/notes/NotesTableRow.js +1 -1
  81. package/dist/setting/admin/AdminSettingForm.d.ts +2 -2
  82. package/dist/setting/admin/AdminSettingForm.d.ts.map +1 -1
  83. package/dist/setting/dashboard/snippets/card/SnippetCard.js +1 -1
  84. package/dist/snippet/snippet-template/control/PropertyControl.d.ts +3 -1
  85. package/dist/snippet/snippet-template/control/PropertyControl.d.ts.map +1 -1
  86. package/dist/snippet/snippet-template/control/PropertyControl.js +1 -1
  87. package/dist/snippet/snippet-template/preview/Preview.js +1 -1
  88. package/dist/static/manual-date-picker/ManualDatePicker.js +1 -1
  89. package/dist/static/manual-date-picker/constants/index.d.ts +4 -1
  90. package/dist/static/manual-date-picker/constants/index.d.ts.map +1 -1
  91. package/dist/static/manual-date-picker/constants/index.js +1 -1
  92. package/dist/static/manual-date-picker/utils/index.d.ts +4 -0
  93. package/dist/static/manual-date-picker/utils/index.d.ts.map +1 -1
  94. package/dist/static/manual-date-picker/utils/index.js +1 -1
  95. package/dist/striped-static-table/StripedStaticTable.js +1 -1
  96. package/dist/styles/iframe-events/Card.scss +24 -8
  97. package/dist/styles/iframe-events/PoweredBy.scss +2 -2
  98. package/dist/styles/iframe-order-process/IframeOrderProcess.scss +57 -20
  99. package/dist/styles/iframe-page/Page.scss +1 -0
  100. package/dist/styles/iframe-page/PageBody.scss +34 -12
  101. package/dist/styles/iframe-page/PageHeader.scss +41 -39
  102. package/dist/styles/ryft-payment-form/RyftPaymentForm.scss +125 -2
  103. package/dist/styles/sales/BookingResults.scss +1 -1
  104. package/dist/venue-map-sets/form/components/VenueMapImageControl.js +1 -1
  105. package/dist/zone/form/utils/dates.d.ts.map +1 -1
  106. package/package.json +10 -35
  107. package/src/assets/iframe/calendar.svg +2 -2
  108. package/src/assets/iframe/ticket.svg +2 -2
  109. package/src/calendar/Calendar.stories.tsx +23 -0
  110. package/src/calendar/Calendar.tsx +5 -5
  111. package/src/calendar/components/CalendarDates/CalendarDates.tsx +0 -5
  112. package/src/iframe/event/event-card/IframeEventCard.stories.tsx +1 -0
  113. package/src/iframe/event/event-card/IframeEventCard.tsx +7 -8
  114. package/src/iframe/order-process/components/BookingSummary/BookingSummary.stories.tsx +9 -0
  115. package/src/iframe/order-process/components/BookingSummary/BookingSummary.tsx +58 -7
  116. package/src/iframe/order-process/components/BookingSummary/components/BookingSummaryAccordion/BookingSummaryAccordion.tsx +8 -0
  117. package/src/iframe/order-process/components/BookingSummary/components/SummaryTotal/components/SummaryTotalBlock.tsx +4 -4
  118. package/src/iframe/order-process/components/BookingSummary/components/ToggleHeader/ToggleHeader.tsx +63 -10
  119. package/src/iframe/order-process/components/BookingSummary/types/index.ts +4 -0
  120. package/src/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.tsx +1 -1
  121. package/src/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.tsx +3 -1
  122. package/src/iframe/page/components/PageBody/constants.ts +2 -0
  123. package/src/iframe/page/components/PageBody/hooks/useResizePageBody.ts +10 -0
  124. package/src/iframe/payment/order-items-table/utils/paymentSummary.tsx +6 -6
  125. package/src/iframe/payment/payment-page/PaymentPage.stories.tsx +546 -6
  126. package/src/iframe/payment/payment-page/PaymentPage.tsx +38 -29
  127. package/src/iframe/ryft/RyftPaymentForm.tsx +11 -5
  128. package/src/iframe/ryft/utils/ryft-form.ts +47 -0
  129. package/src/product-set/control/DateAndRecurrenceInput.tsx +2 -1
  130. package/src/product-set/control/DateInput.tsx +1 -3
  131. package/src/product-set/form/ProductCategoriesControl.tsx +1 -1
  132. package/src/product-set/form/ProductSetForm.tsx +5 -1
  133. package/src/product-set/hooks/useSortableTreeFunctions.ts +2 -0
  134. package/src/product-set/product/ProductControl.tsx +17 -3
  135. package/src/product-set/product/fixed-duration-fields/FixedDurationOptions.tsx +0 -2
  136. package/src/product-set/product-category/ProductCategoryControl.tsx +105 -43
  137. package/src/provider/working-hours-input/WorkingHoursInputDescription.tsx +4 -18
  138. package/src/recurring-date-picker-input/RecurrenceAndFrequencyInput.tsx +0 -1
  139. package/src/recurring-date-picker-input/RecurringDatePickerInput.tsx +11 -1
  140. package/src/recurring-date-picker-input/utils.ts +75 -0
  141. package/src/sales/booking/results/BookingResults.stories.tsx +3 -2
  142. package/src/sales/booking/results/components/ResultCard.tsx +2 -5
  143. package/src/setting/admin/AdminSettingForm.tsx +2 -2
  144. package/src/snippet/snippet-template/control/PropertyControl.tsx +6 -2
  145. package/src/sortable-tree/SortableTreeItem.tsx +1 -1
  146. package/src/static/manual-date-picker/ManualDatePicker.tsx +3 -3
  147. package/src/static/manual-date-picker/constants/index.ts +6 -2
  148. package/src/static/manual-date-picker/utils/index.ts +11 -0
  149. package/src/static/switch/BooleanSwitch.tsx +1 -1
  150. package/src/styles/iframe-events/Card.scss +24 -8
  151. package/src/styles/iframe-events/PoweredBy.scss +2 -2
  152. package/src/styles/iframe-order-process/IframeOrderProcess.scss +57 -20
  153. package/src/styles/iframe-page/Page.scss +1 -0
  154. package/src/styles/iframe-page/PageBody.scss +34 -12
  155. package/src/styles/iframe-page/PageHeader.scss +41 -39
  156. package/src/styles/ryft-payment-form/RyftPaymentForm.scss +125 -2
  157. package/src/styles/sales/BookingResults.scss +1 -1
  158. package/src/zone/form/utils/dates.ts +9 -10
  159. package/jest.config.js +0 -29
  160. package/tests/Auth/Authorizer.test.tsx +0 -194
  161. package/tests/Auth/Layout/UserNavDropDown.test.tsx +0 -43
  162. package/tests/Auth/Layout/UserNavDropDownToggle.test.tsx +0 -33
  163. package/tests/Auth/Login/LoginComponent.test.tsx +0 -246
  164. package/tests/Auth/Login/LoginFormComponent.test.tsx +0 -182
  165. package/tests/Auth/Register/RegisterComponent.test.tsx +0 -285
  166. package/tests/Auth/Register/RegisterFormComponent.test.tsx +0 -170
  167. package/tests/Auth/Settings/Dashboard/IpInput.test.tsx +0 -130
  168. package/tests/Auth/Social/SocialCallbackComponent.test.tsx +0 -133
  169. package/tests/Auth/Social/SocialFormComponent.test.tsx +0 -118
  170. package/tests/FileUpload/FileUpload.test.tsx +0 -42
  171. package/tests/Notification/EmailTemplate.test.tsx +0 -82
  172. package/tests/ProductSet/ProductSetPopover.test.tsx +0 -40
  173. package/tests/Report/Report.test.tsx +0 -48
  174. package/tests/Sales/Coupon.test.tsx +0 -51
  175. package/tests/Sales/SalesAndVIews.test.tsx +0 -63
  176. package/tests/SnippetTemplates/SnippetTemplates.test.tsx +0 -56
  177. package/tests/Table/FilterHelperComponent.test.tsx +0 -88
  178. package/tests/Table/PaginationHelperComponent.test.tsx +0 -109
  179. package/tests/Table/PerPageHelperComponent.test.tsx +0 -34
  180. package/tests/Table/TableHelperComponent.test.tsx +0 -295
  181. package/tests/TipTapEditor/TipTapEditor.test.tsx +0 -28
  182. package/tests/__mock__/hooks/useAuthApi.ts +0 -13
  183. package/tests/__mock__/hooks/useAuthMock.ts +0 -13
  184. package/tests/__mock__/hooks/useFormMock.ts +0 -27
  185. package/tests/__mock__/hooks/useNotificationMock.ts +0 -13
  186. package/tests/__mock__/hooks/useQueryMock.ts +0 -16
  187. package/tests/__mock__/hooks/useSocialApiMock.ts +0 -20
  188. package/tests/__mock__/hooks/useTranslationMock.ts +0 -17
  189. package/tests/__mock__/hooks/useUserApiMock.ts +0 -18
  190. package/tests/__mock__/hooks/useUserMock.ts +0 -13
  191. package/tests/__mock__/styleMock.js +0 -1
  192. package/tests/__mock__/windowMock.ts +0 -5
  193. package/tests/packages/react-query.tsx +0 -28
  194. package/tests/setupTests.ts +0 -10
@@ -29,6 +29,7 @@ interface IframeEventCardProps {
29
29
  titleId?: string;
30
30
  descriptionId?: string;
31
31
  imageClassName?: string;
32
+ showMoreInfo?: boolean;
32
33
  }
33
34
 
34
35
  export function IframeEventCard({
@@ -46,6 +47,7 @@ export function IframeEventCard({
46
47
  titleId,
47
48
  descriptionId,
48
49
  imageClassName,
50
+ showMoreInfo,
49
51
  }: IframeEventCardProps) {
50
52
  const { formatNumber } = useIntl();
51
53
  const { t } = useTranslation("Design");
@@ -70,6 +72,7 @@ export function IframeEventCard({
70
72
  )}
71
73
  onClick={goToDetails ? onClick : undefined}
72
74
  >
75
+ {showMoreInfo && <div className="iframe-event-card__info-icon">i</div>}
73
76
  {imageSrc && (
74
77
  <Card.Img
75
78
  className={imageClassName ?? "card-image"}
@@ -91,12 +94,8 @@ export function IframeEventCard({
91
94
  <div className="icon-wrapper">
92
95
  <CalendarSvg />
93
96
  </div>
94
- <p className="iframe-event-card__bold m-0 list-view-hided">
95
- {date}
96
- </p>
97
- <p className="iframe-event-card__bold m-0 grid-view-hided">
98
- {shortDate}
99
- </p>
97
+ <p className="m-0 list-view-hided">{date}</p>
98
+ <p className="m-0 grid-view-hided">{shortDate}</p>
100
99
  </div>
101
100
  </Card.Text>
102
101
 
@@ -106,7 +105,7 @@ export function IframeEventCard({
106
105
  <div className="icon-wrapper">
107
106
  <ClockSvg />
108
107
  </div>
109
- <p className="iframe-event-card__bold m-0">{type}</p>
108
+ <p className="m-0">{type}</p>
110
109
  </div>
111
110
  </Card.Text>
112
111
  )}
@@ -117,7 +116,7 @@ export function IframeEventCard({
117
116
  <div className="icon-wrapper">
118
117
  <TicketSvg />
119
118
  </div>
120
- <p className="iframe-event-card__bold m-0">
119
+ <p className="m-0">
121
120
  {t("from")}{" "}
122
121
  {formatNumber(cost, { style: "currency", currency: "GBP" })}
123
122
  </p>
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { Meta } from "@storybook/react";
3
3
  import { BookingSummary } from "./BookingSummary";
4
+ import { SummaryTotalBlock } from "./components/SummaryTotal";
4
5
 
5
6
  export default {
6
7
  title: "Iframe/Order-Process/BookingSummary",
@@ -138,6 +139,14 @@ export function Default() {
138
139
  <div className="payment-process">
139
140
  <div className="col-lg-4">
140
141
  <BookingSummary
142
+ isPaymentPage
143
+ eventName="new Event"
144
+ footer={
145
+ <div className="d-flex flex-column justify-content-between">
146
+ <SummaryTotalBlock label={"Total"} amount={2} />
147
+ <SummaryTotalBlock label={"Total with discount"} amount={1} />
148
+ </div>
149
+ }
141
150
  date="29 Sept 2022 at 09:00"
142
151
  menuSteps={menuSteps as any}
143
152
  peopleAmount={5}
@@ -8,6 +8,8 @@ import { ProductsByMenuStep } from "./components/ProductsByMenuStep";
8
8
  import { BookingSummaryProps } from "./types";
9
9
  import { SummaryTotal } from "./components/SummaryTotal";
10
10
  import { BookingSummaryAccordion } from "./components/BookingSummaryAccordion";
11
+ import { ReactComponent as TicketIcon } from "../../../../assets/iframe/ticket.svg";
12
+ import { ReactComponent as CalendarIcon } from "../../../../assets/iframe/calendar.svg";
11
13
 
12
14
  export const BookingSummary = ({
13
15
  date,
@@ -22,6 +24,10 @@ export const BookingSummary = ({
22
24
  hasPeopleInput,
23
25
  isPaymentLink,
24
26
  peopleAmount,
27
+ footer,
28
+ headerComponent,
29
+ // TODO Remove this, when all iframe pages will be ready
30
+ isPaymentPage,
25
31
  }: Omit<BookingSummaryProps, "totallWithDiscount">) => {
26
32
  const { t } = useTranslation("Design");
27
33
  const { formatNumber } = useIntl();
@@ -36,11 +42,18 @@ export const BookingSummary = ({
36
42
 
37
43
  return (
38
44
  <div className="payment-booking-summary">
39
- <BookingSummaryAccordion hasPeopleInput={hasPeopleInput}>
45
+ <BookingSummaryAccordion
46
+ isPaymentPage={isPaymentPage}
47
+ hasPeopleInput={hasPeopleInput}
48
+ headerComponent={headerComponent}
49
+ >
40
50
  <div className="event-info">
41
- <p className="m-0 title event-name">{eventName}</p>
42
- <p className="m-0">{date}</p>
43
- {time && <p className="m-0">{time}</p>}
51
+ <EventInfo
52
+ eventName={eventName}
53
+ isPaymentPage={isPaymentPage}
54
+ date={date}
55
+ time={time}
56
+ />
44
57
  </div>
45
58
  <hr />
46
59
 
@@ -62,8 +75,8 @@ export const BookingSummary = ({
62
75
  {!shouldHidePeopleAmount && peopleAmount > 0 && (
63
76
  <>
64
77
  <hr />
65
- <div className="d-flex justify-content-between mt-3">
66
- <p className="m-0">{t("people")}:</p>
78
+ <div className="d-flex justify-content-between mt-3 people">
79
+ <p className="m-0 payment-metadata">{t("people")}:</p>
67
80
  <p className="price">{peopleAmount}</p>
68
81
  </div>
69
82
  </>
@@ -73,7 +86,9 @@ export const BookingSummary = ({
73
86
  <>
74
87
  <hr />
75
88
  <div className="d-flex justify-content-between mt-3">
76
- <p className="m-0">{t("transactionFee")}:</p>
89
+ <p className="m-0 payment-metadata">
90
+ {t("transactionFee")}:
91
+ </p>
77
92
  <p className="price">
78
93
  {formatNumber(transactionFee, {
79
94
  style: "currency",
@@ -84,6 +99,7 @@ export const BookingSummary = ({
84
99
  </>
85
100
  )}
86
101
  </div>
102
+ {footer}
87
103
  </div>
88
104
  ) : (
89
105
  <div className="cart-items">
@@ -97,3 +113,38 @@ export const BookingSummary = ({
97
113
 
98
114
  BookingSummary.SummaryTotal = SummaryTotal;
99
115
  BookingSummary.Accordion = BookingSummaryAccordion;
116
+
117
+ const EventInfo = ({
118
+ isPaymentPage,
119
+ eventName,
120
+ date,
121
+ time,
122
+ }: Pick<
123
+ BookingSummaryProps,
124
+ "date" | "time" | "eventName" | "isPaymentPage"
125
+ >) => {
126
+ if (isPaymentPage) {
127
+ return (
128
+ <>
129
+ <div className="d-flex align-items-center mb-5">
130
+ <TicketIcon height={16} width={20} fill="black" />
131
+ <div className="m-0 pl-2 title event-name metadata">{eventName}</div>
132
+ </div>
133
+
134
+ <div className="d-flex align-items-center mb-5">
135
+ <CalendarIcon height={16} width={20} fill="black" />
136
+ <div className="m-0 pl-2 metadata">{date}</div>
137
+ </div>
138
+ {time && <div className="mb-5 metadata">{time}</div>}
139
+ </>
140
+ );
141
+ }
142
+
143
+ return (
144
+ <>
145
+ <p className="m-0 title event-name">{eventName}</p>
146
+ <p className="m-0">{date}</p>
147
+ {time && <p className="m-0">{time}</p>}
148
+ </>
149
+ );
150
+ };
@@ -3,6 +3,7 @@ import React, {
3
3
  useCallback,
4
4
  PropsWithChildren,
5
5
  useEffect,
6
+ ReactElement,
6
7
  } from "react";
7
8
  import { Accordion } from "react-bootstrap";
8
9
  import { useWindowDimensions } from "@licklist/plugins/dist/hooks/Media/useWindowDimensions";
@@ -20,6 +21,9 @@ export type BookingSummaryAccordionProps = PropsWithChildren<{
20
21
  title?: string;
21
22
  showTitleOnlyOnMobile?: boolean;
22
23
  hasPeopleInput?: boolean;
24
+ // TODO Remove this, when all iframe pages will be ready
25
+ isPaymentPage?: boolean;
26
+ headerComponent?: ReactElement;
23
27
  }>;
24
28
 
25
29
  export const BookingSummaryAccordion = ({
@@ -27,6 +31,8 @@ export const BookingSummaryAccordion = ({
27
31
  title,
28
32
  showTitleOnlyOnMobile = false,
29
33
  hasPeopleInput,
34
+ isPaymentPage,
35
+ headerComponent,
30
36
  }: BookingSummaryAccordionProps) => {
31
37
  const { width } = useWindowDimensions();
32
38
  const [isExpanded, setIsExpanded] = useState(width <= MOBILE_WIDTH);
@@ -68,10 +74,12 @@ export const BookingSummaryAccordion = ({
68
74
  return (
69
75
  <Accordion defaultActiveKey={ACCORDION_KEY} onSelect={onSelect}>
70
76
  <ToggleHeader
77
+ isPaymentPage={isPaymentPage}
71
78
  showExpandButton={showExpandButton}
72
79
  isExpanded={isExpanded}
73
80
  title={title}
74
81
  hideComponent={!showToggleHeader}
82
+ headerComponent={headerComponent}
75
83
  />
76
84
  <Accordion.Collapse
77
85
  eventKey={ACCORDION_KEY}
@@ -3,7 +3,7 @@ import { useIntl } from "react-intl";
3
3
  import * as Config from "@licklist/core/dist/Config";
4
4
 
5
5
  export type SummaryTotalBlockProps = {
6
- label: string;
6
+ label?: string;
7
7
  amount: number;
8
8
  };
9
9
 
@@ -15,13 +15,13 @@ export const SummaryTotalBlock = ({
15
15
 
16
16
  return (
17
17
  <div className="total">
18
- <p className="m-0">{label}</p>
19
- <p className="m-0 price">
18
+ {label && <div>{label}</div>}
19
+ <div className="m-0 price">
20
20
  {formatNumber(amount, {
21
21
  style: "currency",
22
22
  currency: Config.Currency.GBP,
23
23
  })}
24
- </p>
24
+ </div>
25
25
  </div>
26
26
  );
27
27
  };
@@ -1,4 +1,4 @@
1
- import React, { useContext, useEffect } from "react";
1
+ import React, { ReactElement, useContext, useEffect } from "react";
2
2
  import { useTranslation } from "react-i18next";
3
3
  import { useAccordionToggle } from "react-bootstrap/AccordionToggle";
4
4
  import AccordionContext from "react-bootstrap/AccordionContext";
@@ -11,15 +11,23 @@ type ToggleHeaderProps = {
11
11
  isExpanded: boolean;
12
12
  title?: string;
13
13
  hideComponent?: boolean;
14
+ headerComponent?: ReactElement;
15
+ isPaymentPage: boolean;
14
16
  };
15
17
 
18
+ interface HeaderContentProps
19
+ extends Omit<ToggleHeaderProps, "hideComponent" | "isExpanded"> {
20
+ currentEventKey: string;
21
+ }
22
+
16
23
  export const ToggleHeader = ({
17
24
  showExpandButton,
18
25
  isExpanded,
19
26
  title,
20
27
  hideComponent,
28
+ isPaymentPage,
29
+ headerComponent,
21
30
  }: ToggleHeaderProps) => {
22
- const { t } = useTranslation("Design");
23
31
  const currentEventKey = useContext(AccordionContext);
24
32
 
25
33
  const decoratedOnClick = useAccordionToggle(ACCORDION_KEY);
@@ -46,14 +54,41 @@ export const ToggleHeader = ({
46
54
  onKeyPress={(event) => showExpandButton && decoratedOnClick(event)}
47
55
  role="button"
48
56
  tabIndex={0}
49
- className="d-flex flex-column"
57
+ className={clsx(
58
+ "d-flex flex-column",
59
+ isPaymentPage && "payment-page-toggle"
60
+ )}
50
61
  >
51
62
  <h6 className={clsx("title", showExpandButton && "pointer")}>
52
63
  <div className="d-flex w-100 align-content-center justify-content-between">
53
- <div className="d-flex">
54
- <p className="m-0">{title || t("yourBooking")}</p>
55
- </div>
64
+ <HeaderContent
65
+ showExpandButton={showExpandButton}
66
+ title={title}
67
+ currentEventKey={currentEventKey}
68
+ isPaymentPage={isPaymentPage}
69
+ headerComponent={headerComponent}
70
+ />
71
+ </div>
72
+ </h6>
73
+ {isExpanded && <hr className="mt-3" />}
74
+ </div>
75
+ );
76
+ };
56
77
 
78
+ const HeaderContent = ({
79
+ title,
80
+ showExpandButton,
81
+ currentEventKey,
82
+ isPaymentPage,
83
+ headerComponent,
84
+ }: HeaderContentProps) => {
85
+ const { t } = useTranslation("Design");
86
+
87
+ if (isPaymentPage) {
88
+ return (
89
+ <>
90
+ <div className="d-flex">
91
+ <p className="m-0 mr-2 toggle-title">{title || t("yourBooking")}</p>
57
92
  {showExpandButton && (
58
93
  <div className="expand-button">
59
94
  <Icon
@@ -62,13 +97,31 @@ export const ToggleHeader = ({
62
97
  ? "chevron-up"
63
98
  : "chevron-down"
64
99
  }
65
- width="1rem"
100
+ width="0.5rem"
66
101
  />
67
102
  </div>
68
103
  )}
69
104
  </div>
70
- </h6>
71
- {isExpanded && <hr className="mt-3" />}
72
- </div>
105
+ {headerComponent}
106
+ </>
107
+ );
108
+ }
109
+ return (
110
+ <>
111
+ <div className="d-flex">
112
+ <p className="m-0">{title || t("yourBooking")}</p>
113
+ </div>
114
+
115
+ {showExpandButton && (
116
+ <div className="expand-button">
117
+ <Icon
118
+ type={
119
+ currentEventKey === ACCORDION_KEY ? "chevron-up" : "chevron-down"
120
+ }
121
+ width="1rem"
122
+ />
123
+ </div>
124
+ )}
125
+ </>
73
126
  );
74
127
  };
@@ -1,6 +1,7 @@
1
1
  import { QuantityCheckProductInfo } from "@licklist/plugins/dist/types/Api/verifyStock";
2
2
  import { OrderItems } from "@licklist/plugins/dist/types/context/Iframe/orderItems";
3
3
  import { MenuStep } from "@licklist/plugins/dist/types/context/sale/menuSteps";
4
+ import { ReactElement } from "react";
4
5
 
5
6
  export const MOBILE_WIDTH = 576;
6
7
  export const ACCORDION_KEY = "booking-summary";
@@ -20,4 +21,7 @@ export type BookingSummaryProps = {
20
21
  isLoading?: boolean;
21
22
  peopleAmount: number;
22
23
  isPaymentLink?: boolean;
24
+ isPaymentPage?: boolean;
25
+ headerComponent?: ReactElement;
26
+ footer?: ReactElement;
23
27
  };
@@ -90,7 +90,7 @@ export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
90
90
  type="number"
91
91
  onChange={(e) => handleChangeValue(Number(e.target.value))}
92
92
  value={value}
93
- min={min}
93
+ min={0}
94
94
  max={max}
95
95
  defaultValue={defaultValue}
96
96
  placeholder={placeholder}
@@ -28,7 +28,9 @@ export const LeftBlock = ({
28
28
  {pageTitle && (
29
29
  <>
30
30
  {typeof pageTitle === "string" ? (
31
- <div className="title">{pageTitle}</div>
31
+ <div className="title" id="navigation-title">
32
+ {pageTitle}
33
+ </div>
32
34
  ) : (
33
35
  pageTitle
34
36
  )}
@@ -25,4 +25,6 @@ export const COLLAPSE_MARGIN = 36;
25
25
 
26
26
  export const PAGE_LEFT_BLOCK_CONTAINER_ID = "page-left-block-container";
27
27
  export const PAGE_CALENDAR_SELECT_WRAPPER = "calendar-select-wrapper";
28
+ export const PAGE_BODY_WITH_SCROLL = "page-body-with-scroll";
29
+
28
30
  export const PAGE_LEFT_BLOCK_MAP_DEFAULT_SIZE = 300;
@@ -16,6 +16,7 @@ import {
16
16
  PAGE_LEFT_BLOCK_CONTAINER_ID,
17
17
  PAGE_LEFT_BLOCK_MAP_DEFAULT_SIZE,
18
18
  PAGE_CALENDAR_SELECT_WRAPPER,
19
+ PAGE_BODY_WITH_SCROLL,
19
20
  } from "../constants";
20
21
  import { ChangeRightBlockHeightEvent } from "../types";
21
22
 
@@ -46,10 +47,19 @@ export const useResizePageBody = () => {
46
47
  const calenderWrapper = document.getElementById(
47
48
  PAGE_CALENDAR_SELECT_WRAPPER
48
49
  );
50
+
49
51
  const CALENDAR_WRAPPER_HEIGHT = calenderWrapper
50
52
  ? calenderWrapper.clientHeight
51
53
  : 0;
52
54
 
55
+ const paymentLinkPageBody = document.getElementById(PAGE_BODY_WITH_SCROLL);
56
+ if (paymentLinkPageBody) {
57
+ paymentLinkPageBody.scroll({
58
+ top: -height,
59
+ behavior: "smooth",
60
+ });
61
+ }
62
+
53
63
  return {
54
64
  maxHeight:
55
65
  height -
@@ -63,7 +63,7 @@ const processedPaymentSummary = ({
63
63
  const total = calculateTotalPrice(order, externalPaymentDetail);
64
64
 
65
65
  const totalDiscount = calculateTotalDiscount(order.payments);
66
- const totalWithDiscount = total - Number(totalDiscount);
66
+
67
67
  let summaryItems: SummaryItem[] = [
68
68
  {
69
69
  translateKey: AMOUNT_TOTAL,
@@ -74,7 +74,7 @@ const processedPaymentSummary = ({
74
74
  if (totalDiscount) {
75
75
  summaryItems.push({
76
76
  translateKey: AMOUNT_WITH_DISCOUNT,
77
- price: totalWithDiscount < 0 ? 0 : totalWithDiscount,
77
+ price: order.totalToPayAmount,
78
78
  });
79
79
  }
80
80
 
@@ -84,17 +84,17 @@ const processedPaymentSummary = ({
84
84
 
85
85
  summaryItems.push({
86
86
  translateKey: TOTAL_PAID,
87
- price: totalWithDiscount <= 0 ? 0 : order.totalAmount,
87
+ price: order.paidAmount,
88
88
  });
89
- if (totalWithDiscount <= 0) {
89
+ if (order.totalToPayAmount <= 0) {
90
90
  return summaryItems;
91
91
  }
92
92
  summaryItems = [...summaryItems, ...externalPaymentDetail];
93
93
 
94
- if (totalWithDiscount > order.totalAmount) {
94
+ if (order.remainingToPay) {
95
95
  summaryItems.push({
96
96
  translateKey: REMAINING_TO_PAY,
97
- price: totalWithDiscount - order.totalAmount,
97
+ price: order.remainingToPay,
98
98
  });
99
99
  }
100
100
  return summaryItems;