@licklist/design 0.59.0-dev.9 → 0.60.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 (192) hide show
  1. package/bitbucket-pipelines.yml +8 -0
  2. package/dist/events/edit-event-modal/component/EditEventForm/EditEventForm.d.ts +1 -3
  3. package/dist/events/edit-event-modal/component/EditEventForm/EditEventForm.d.ts.map +1 -1
  4. package/dist/events/edit-event-modal/component/EditEventForm/EditEventForm.js +1 -1
  5. package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.d.ts +1 -3
  6. package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.d.ts.map +1 -1
  7. package/dist/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.js +1 -1
  8. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.d.ts +1 -3
  9. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.d.ts.map +1 -1
  10. package/dist/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.js +1 -1
  11. package/dist/iframe/activity-card/ActivityCard.d.ts +1 -2
  12. package/dist/iframe/activity-card/ActivityCard.d.ts.map +1 -1
  13. package/dist/iframe/activity-card/ActivityCard.js +1 -1
  14. package/dist/iframe/event/event-card/IframeEventCard.d.ts +1 -2
  15. package/dist/iframe/event/event-card/IframeEventCard.d.ts.map +1 -1
  16. package/dist/iframe/event/event-card/IframeEventCard.js +1 -1
  17. package/dist/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.js +1 -1
  18. package/dist/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.d.ts.map +1 -1
  19. package/dist/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.js +1 -1
  20. package/dist/iframe/page/components/PageBody/constants.d.ts +1 -1
  21. package/dist/iframe/page/components/PageBody/constants.d.ts.map +1 -1
  22. package/dist/iframe/page/components/PageBody/constants.js +1 -1
  23. package/dist/iframe/page/components/PageBody/hooks/useResizePageBody.js +1 -1
  24. package/dist/iframe/payment/order-items-table/utils/paymentSummary.js +1 -1
  25. package/dist/iframe/payment/payment-page/PaymentPage.js +1 -1
  26. package/dist/iframe/ryft/RyftPaymentForm.d.ts +1 -3
  27. package/dist/iframe/ryft/RyftPaymentForm.d.ts.map +1 -1
  28. package/dist/iframe/ryft/RyftPaymentForm.js +1 -1
  29. package/dist/iframe/ryft/utils/ryft-form.d.ts +1 -2
  30. package/dist/iframe/ryft/utils/ryft-form.d.ts.map +1 -1
  31. package/dist/iframe/ryft/utils/ryft-form.js +1 -1
  32. package/dist/product-set/control/DateAndRecurrenceInput.d.ts +1 -1
  33. package/dist/product-set/control/DateAndRecurrenceInput.d.ts.map +1 -1
  34. package/dist/product-set/control/DateAndRecurrenceInput.js +1 -1
  35. package/dist/product-set/control/DateInput.d.ts.map +1 -1
  36. package/dist/product-set/control/DateInput.js +1 -1
  37. package/dist/product-set/control/ProductSetControl.d.ts +1 -1
  38. package/dist/product-set/control/ProductSetControl.d.ts.map +1 -1
  39. package/dist/product-set/form/ProductSetForm.d.ts +1 -4
  40. package/dist/product-set/form/ProductSetForm.d.ts.map +1 -1
  41. package/dist/product-set/hooks/useSortableTreeFunctions.d.ts.map +1 -1
  42. package/dist/product-set/product/ProductControl.d.ts.map +1 -1
  43. package/dist/product-set/product/ProductControl.js +1 -1
  44. package/dist/product-set/product/fixed-duration-fields/FixedDurationOptions.d.ts.map +1 -1
  45. package/dist/product-set/product-category/ProductCategoryControl.d.ts +0 -1
  46. package/dist/product-set/product-category/ProductCategoryControl.d.ts.map +1 -1
  47. package/dist/product-set/product-category/ProductCategoryControl.js +1 -1
  48. package/dist/provider/working-hours-input/WorkingHoursInputDescription.d.ts.map +1 -1
  49. package/dist/provider/working-hours-input/WorkingHoursInputDescription.js +1 -1
  50. package/dist/recurring-date-picker-input/RecurrenceAndFrequencyInput.d.ts.map +1 -1
  51. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts +1 -3
  52. package/dist/recurring-date-picker-input/RecurringDatePickerInput.d.ts.map +1 -1
  53. package/dist/recurring-date-picker-input/RecurringDatePickerInput.js +1 -1
  54. package/dist/recurring-date-picker-input/utils.d.ts +0 -12
  55. package/dist/recurring-date-picker-input/utils.d.ts.map +1 -1
  56. package/dist/recurring-date-picker-input/utils.js +1 -1
  57. package/dist/sales/booking/results/components/ResultCard.d.ts.map +1 -1
  58. package/dist/sales/booking/results/components/ResultCard.js +1 -1
  59. package/dist/sales/coupon/control/CouponFormControl.d.ts +1 -2
  60. package/dist/sales/coupon/control/CouponFormControl.d.ts.map +1 -1
  61. package/dist/sales/coupon/control/CouponFormControl.js +1 -1
  62. package/dist/sales/coupon/form/CouponFrom.d.ts +2 -2
  63. package/dist/sales/coupon/form/CouponFrom.d.ts.map +1 -1
  64. package/dist/setting/admin/AdminSettingForm.d.ts +2 -2
  65. package/dist/setting/admin/AdminSettingForm.d.ts.map +1 -1
  66. package/dist/setting/dashboard/DashboardSettingForm.d.ts +0 -1
  67. package/dist/setting/dashboard/DashboardSettingForm.d.ts.map +1 -1
  68. package/dist/setting/dashboard/DashboardSettingForm.js +1 -1
  69. package/dist/static/manual-date-picker/ManualDatePicker.js +1 -1
  70. package/dist/static/manual-date-picker/constants/index.d.ts +1 -4
  71. package/dist/static/manual-date-picker/constants/index.d.ts.map +1 -1
  72. package/dist/static/manual-date-picker/constants/index.js +1 -1
  73. package/dist/static/manual-date-picker/utils/index.d.ts +0 -4
  74. package/dist/static/manual-date-picker/utils/index.d.ts.map +1 -1
  75. package/dist/static/manual-date-picker/utils/index.js +1 -1
  76. package/dist/styles/activity-card/ListActivitiesCard.scss +1 -1
  77. package/dist/styles/iframe-events/Card.scss +8 -24
  78. package/dist/styles/iframe-events/PoweredBy.scss +2 -2
  79. package/dist/styles/iframe-external-modal/IframeExternalModal.scss +2 -5
  80. package/dist/styles/iframe-order-process/IframeOrderProcess.scss +2 -0
  81. package/dist/styles/iframe-page/Page.scss +0 -1
  82. package/dist/styles/iframe-page/PageBody.scss +9 -32
  83. package/dist/styles/iframe-page/PageHeader.scss +39 -41
  84. package/dist/styles/ryft-payment-form/RyftPaymentForm.scss +113 -99
  85. package/dist/styles/sales/BookingResults.scss +1 -1
  86. package/dist/typeahead/Typeahead.d.ts +1 -2
  87. package/dist/typeahead/Typeahead.d.ts.map +1 -1
  88. package/dist/typeahead/Typeahead.js +1 -1
  89. package/dist/zone/form/ZoneForm.d.ts +2 -2
  90. package/dist/zone/form/ZoneForm.d.ts.map +1 -1
  91. package/dist/zone/form/ZoneForm.js +1 -1
  92. package/dist/zone/form/components/ZoneControl.d.ts +2 -2
  93. package/dist/zone/form/components/ZoneControl.d.ts.map +1 -1
  94. package/dist/zone/form/components/ZoneControl.js +1 -1
  95. package/dist/zone/form/components/ZoneRecurrencesControl.d.ts +4 -4
  96. package/dist/zone/form/components/ZoneRecurrencesControl.d.ts.map +1 -1
  97. package/dist/zone/form/components/ZoneRecurrencesControl.js +1 -1
  98. package/dist/zone/form/utils/dates.d.ts.map +1 -1
  99. package/jest.config.js +29 -0
  100. package/package.json +35 -10
  101. package/src/events/edit-event-modal/component/EditEventForm/EditEventForm.tsx +0 -4
  102. package/src/events/edit-event-modal/component/SelectEventProductSet/SelectEventProductSet.tsx +8 -10
  103. package/src/events/edit-event-modal/component/SelectEventProductSet/component/EditEventProductSet.tsx +0 -4
  104. package/src/iframe/activity-card/ActivityCard.tsx +2 -4
  105. package/src/iframe/event/event-card/IframeEventCard.stories.tsx +0 -1
  106. package/src/iframe/event/event-card/IframeEventCard.tsx +8 -7
  107. package/src/iframe/order-process/components/CategoryProduct/components/NumberInput/NumberInput.tsx +1 -1
  108. package/src/iframe/page/components/PageBody/components/LeftBlock/LeftBlock.tsx +1 -3
  109. package/src/iframe/page/components/PageBody/constants.ts +1 -1
  110. package/src/iframe/page/components/PageBody/hooks/useResizePageBody.ts +3 -3
  111. package/src/iframe/payment/order-items-table/utils/paymentSummary.tsx +6 -6
  112. package/src/iframe/payment/payment-page/PaymentPage.tsx +2 -2
  113. package/src/iframe/ryft/RyftPaymentForm.tsx +3 -20
  114. package/src/iframe/ryft/utils/ryft-form.ts +5 -11
  115. package/src/product-set/control/DateAndRecurrenceInput.tsx +2 -3
  116. package/src/product-set/control/DateInput.tsx +5 -4
  117. package/src/product-set/control/ProductSetControl.tsx +1 -1
  118. package/src/product-set/form/ProductCategoriesControl.tsx +1 -1
  119. package/src/product-set/form/ProductSetForm.tsx +1 -5
  120. package/src/product-set/hooks/useSortableTreeFunctions.ts +0 -2
  121. package/src/product-set/product/ProductControl.tsx +38 -38
  122. package/src/product-set/product/fixed-duration-fields/FixedDurationOptions.tsx +2 -0
  123. package/src/product-set/product-category/ProductCategoryControl.tsx +27 -89
  124. package/src/provider/working-hours-input/WorkingHoursInputDescription.tsx +18 -4
  125. package/src/recurring-date-picker-input/RecurrenceAndFrequencyInput.tsx +1 -0
  126. package/src/recurring-date-picker-input/RecurringDatePickerInput.tsx +1 -11
  127. package/src/recurring-date-picker-input/utils.ts +0 -77
  128. package/src/sales/booking/results/BookingResults.stories.tsx +2 -3
  129. package/src/sales/booking/results/components/ResultCard.tsx +5 -2
  130. package/src/sales/coupon/control/CouponFormControl.tsx +50 -29
  131. package/src/sales/coupon/form/CouponFrom.tsx +15 -5
  132. package/src/setting/admin/AdminSettingForm.tsx +2 -2
  133. package/src/setting/dashboard/DashboardSettingForm.tsx +0 -13
  134. package/src/sortable-tree/SortableTreeItem.tsx +1 -1
  135. package/src/static/manual-date-picker/ManualDatePicker.tsx +3 -3
  136. package/src/static/manual-date-picker/constants/index.ts +2 -6
  137. package/src/static/manual-date-picker/utils/index.ts +0 -11
  138. package/src/static/switch/BooleanSwitch.tsx +1 -1
  139. package/src/styles/activity-card/ListActivitiesCard.scss +1 -1
  140. package/src/styles/iframe-events/Card.scss +8 -24
  141. package/src/styles/iframe-events/PoweredBy.scss +2 -2
  142. package/src/styles/iframe-external-modal/IframeExternalModal.scss +2 -5
  143. package/src/styles/iframe-order-process/IframeOrderProcess.scss +2 -0
  144. package/src/styles/iframe-page/Page.scss +0 -1
  145. package/src/styles/iframe-page/PageBody.scss +9 -32
  146. package/src/styles/iframe-page/PageHeader.scss +39 -41
  147. package/src/styles/ryft-payment-form/RyftPaymentForm.scss +113 -99
  148. package/src/styles/sales/BookingResults.scss +1 -1
  149. package/src/typeahead/Typeahead.tsx +3 -16
  150. package/src/zone/form/ZoneForm.tsx +2 -3
  151. package/src/zone/form/components/ZoneControl.tsx +3 -3
  152. package/src/zone/form/components/ZoneRecurrencesControl.tsx +5 -7
  153. package/src/zone/form/utils/dates.ts +10 -9
  154. package/tests/Auth/Authorizer.test.tsx +194 -0
  155. package/tests/Auth/Layout/UserNavDropDown.test.tsx +43 -0
  156. package/tests/Auth/Layout/UserNavDropDownToggle.test.tsx +33 -0
  157. package/tests/Auth/Login/LoginComponent.test.tsx +246 -0
  158. package/tests/Auth/Login/LoginFormComponent.test.tsx +182 -0
  159. package/tests/Auth/Register/RegisterComponent.test.tsx +285 -0
  160. package/tests/Auth/Register/RegisterFormComponent.test.tsx +170 -0
  161. package/tests/Auth/Settings/Dashboard/IpInput.test.tsx +130 -0
  162. package/tests/Auth/Social/SocialCallbackComponent.test.tsx +133 -0
  163. package/tests/Auth/Social/SocialFormComponent.test.tsx +118 -0
  164. package/tests/FileUpload/FileUpload.test.tsx +42 -0
  165. package/tests/Notification/EmailTemplate.test.tsx +82 -0
  166. package/tests/ProductSet/ProductSetPopover.test.tsx +40 -0
  167. package/tests/Report/Report.test.tsx +48 -0
  168. package/tests/Sales/Coupon.test.tsx +51 -0
  169. package/tests/Sales/SalesAndVIews.test.tsx +63 -0
  170. package/tests/SnippetTemplates/SnippetTemplates.test.tsx +56 -0
  171. package/tests/Table/FilterHelperComponent.test.tsx +88 -0
  172. package/tests/Table/PaginationHelperComponent.test.tsx +109 -0
  173. package/tests/Table/PerPageHelperComponent.test.tsx +34 -0
  174. package/tests/Table/TableHelperComponent.test.tsx +295 -0
  175. package/tests/TipTapEditor/TipTapEditor.test.tsx +28 -0
  176. package/tests/__mock__/hooks/useAuthApi.ts +13 -0
  177. package/tests/__mock__/hooks/useAuthMock.ts +13 -0
  178. package/tests/__mock__/hooks/useFormMock.ts +27 -0
  179. package/tests/__mock__/hooks/useNotificationMock.ts +13 -0
  180. package/tests/__mock__/hooks/useQueryMock.ts +16 -0
  181. package/tests/__mock__/hooks/useSocialApiMock.ts +20 -0
  182. package/tests/__mock__/hooks/useTranslationMock.ts +17 -0
  183. package/tests/__mock__/hooks/useUserApiMock.ts +18 -0
  184. package/tests/__mock__/hooks/useUserMock.ts +13 -0
  185. package/tests/__mock__/styleMock.js +1 -0
  186. package/tests/__mock__/windowMock.ts +5 -0
  187. package/tests/packages/react-query.tsx +28 -0
  188. package/tests/setupTests.ts +10 -0
  189. package/dist/sales/coupon/utils/index.d.ts +0 -7
  190. package/dist/sales/coupon/utils/index.d.ts.map +0 -1
  191. package/dist/sales/coupon/utils/index.js +0 -1
  192. package/src/sales/coupon/utils/index.ts +0 -13
@@ -20,57 +20,55 @@ $base-height: 2.5rem;
20
20
  transition: $color-transition;
21
21
  border: 0;
22
22
  }
23
- }
24
- }
25
-
26
- .iframe-page {
27
- .button-wrapper {
28
- background-color: $snippet-page-header-steps-close-button-background-color;
29
- height: $base-height;
30
- width: $base-height;
31
- border-radius: $base-height;
32
- transition: $color-transition;
33
23
 
34
- .close-button {
35
- font-size: 1.25rem;
36
- width: $base-height;
24
+ .button-wrapper {
25
+ background-color: $snippet-page-header-steps-close-button-background-color;
37
26
  height: $base-height;
38
- display: flex;
39
- align-items: center;
40
- justify-content: center;
41
- color: $snippet-page-header-steps-close-button-border-color;
27
+ width: $base-height;
28
+ border-radius: $base-height;
42
29
  transition: $color-transition;
43
30
 
44
- &:hover {
45
- cursor: pointer;
31
+ .close-button {
32
+ font-size: 1.25rem;
33
+ width: $base-height;
34
+ height: $base-height;
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ color: $snippet-page-header-steps-close-button-border-color;
39
+ transition: $color-transition;
40
+
41
+ &:hover {
42
+ cursor: pointer;
43
+ }
46
44
  }
47
- }
48
45
 
49
- &.close-button {
50
- margin-left: 1rem;
51
- }
46
+ &.close-button {
47
+ margin-left: 1rem;
48
+ }
52
49
 
53
- .back-button {
54
- font-size: 2rem;
55
- width: $base-height;
56
- height: $base-height;
57
- display: flex;
58
- align-items: center;
59
- justify-content: center;
60
- font-weight: lighter;
61
- color: $snippet-page-header-steps-close-button-border-color;
62
- transition: $color-transition;
50
+ .back-button {
51
+ font-size: 2rem;
52
+ width: $base-height;
53
+ height: $base-height;
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ font-weight: lighter;
58
+ color: $snippet-page-header-steps-close-button-border-color;
59
+ transition: $color-transition;
63
60
 
64
- &:hover {
65
- cursor: pointer;
61
+ &:hover {
62
+ cursor: pointer;
63
+ }
66
64
  }
67
- }
68
65
 
69
- &.back-button {
70
- display: flex;
71
- align-items: center;
72
- justify-content: center;
73
- margin-right: 1rem;
66
+ &.back-button {
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: center;
70
+ margin-right: 1rem;
71
+ }
74
72
  }
75
73
  }
76
74
  }
@@ -47,127 +47,141 @@
47
47
  margin-left: 0.5rem;
48
48
  }
49
49
 
50
+ .ryft-payment-form {
51
+ .submit-button-wrapper {
52
+ margin: -1rem 0 1rem;
53
+
54
+ button {
55
+ width: 100%;
56
+ }
57
+ }
58
+ #mobile-pay-divider-container {
59
+ display: flex;
60
+ position: relative;
61
+ margin-bottom: 1rem;
62
+ #mobile-pay-divider-text {
63
+ margin-right: 1rem;
64
+ font-size: 0.875rem;
65
+ font-weight: 600;
66
+ }
67
+ #mobile-pay-divider {
68
+ width: 100%;
69
+ border-bottom: 1px #dfdfdf solid;
70
+ margin-bottom: 0.6rem;
71
+ }
72
+ }
73
+
74
+ #card-title-container {
75
+ height: auto;
76
+ border: none;
77
+ margin-bottom: 0.5rem;
78
+ text-align: left;
79
+ :first-child {
80
+ font-size: 1rem;
81
+ font-weight: 600;
82
+ margin-bottom: 1rem;
83
+ }
84
+
85
+ .form-label {
86
+ margin-bottom: 0.5rem;
87
+ }
88
+ }
89
+ .mobile-pay-title {
90
+ display: block;
91
+ font-weight: 600;
92
+ font-size: 1rem;
93
+ color: black;
94
+ padding: 0;
95
+ font-style: normal;
96
+ font-family: inherit;
97
+ margin-bottom: 1rem;
98
+ }
99
+ }
50
100
  .form {
51
101
  .input {
52
102
  border: 2px solid #525252 !important;
53
103
  }
54
104
  }
55
105
 
56
- @include media-breakpoint-down(sm) {
57
- .left-block-container {
58
- max-height: 100%;
59
- overflow: visible;
106
+ .ryft-payment-form {
107
+ @include media-breakpoint-up(md) {
108
+ .submit-button-wrapper {
109
+ max-width: 15.5rem;
110
+ }
111
+ }
112
+
113
+ // it's style for Google and Apple pay container, for unknown reasons we can't move this html elements with appendChild or replaceChild
114
+ .ryft-pay-grid {
115
+ width: 100%;
116
+ max-width: 15.5rem;
117
+ margin-bottom: 1rem;
118
+ }
119
+ .ryft-pay-apple-pay-button {
120
+ border-radius: 0.25rem;
60
121
  }
61
122
  }
62
- }
63
123
 
124
+ .divider {
125
+ display: none !important;
126
+ }
127
+ }
64
128
  @include media-breakpoint-down(sm) {
65
- flex-direction: column-reverse;
66
- overflow: scroll;
129
+ .left-block-container {
130
+ max-height: 100%;
131
+ overflow: visible;
132
+ }
133
+ }
134
+ }
67
135
 
68
- @include media-breakpoint-down(sm) {
69
- .left-block {
70
- min-height: 100%;
71
- }
72
- .right-block {
73
- margin: 0 auto;
74
- width: 100%;
75
- .children-wrapper {
76
- .accordion {
77
- .collapse {
78
- overflow: visible;
79
- overflow-x: unset;
80
- scrollbar-width: unset;
81
- }
136
+ @include media-breakpoint-down(sm) {
137
+ flex-direction: column-reverse;
138
+ overflow: scroll;
139
+
140
+ @include media-breakpoint-down(sm) {
141
+ .left-block {
142
+ min-height: 100%;
143
+ }
144
+ .right-block {
145
+ margin: 0 auto;
146
+ width: 100%;
147
+ .children-wrapper {
148
+ .accordion {
149
+ .collapse {
150
+ overflow: visible;
151
+ overflow-x: unset;
152
+ scrollbar-width: unset;
82
153
  }
83
154
  }
84
155
  }
85
156
  }
86
157
  }
87
158
  }
88
- ::-webkit-scrollbar {
89
- display: none;
90
- scrollbar-width: none;
91
- }
92
159
  }
93
- }
94
-
95
- #ryft-threeDSMethodIframe {
96
- display: none;
97
- }
98
-
99
- .ryft-payment-form {
100
- .submit-button-wrapper {
101
- margin: -1rem 0 1rem;
102
-
103
- button {
104
- width: 100%;
105
- }
106
- }
107
- #mobile-pay-divider-container {
108
- display: flex;
109
- position: relative;
110
- margin-bottom: 1rem;
111
- #mobile-pay-divider-text {
112
- margin-right: 1rem;
113
- font-size: 0.875rem;
114
- font-weight: 600;
115
- }
116
- #mobile-pay-divider {
117
- width: 100%;
118
- border-bottom: 1px #dfdfdf solid;
119
- margin-bottom: 0.6rem;
120
- }
121
- }
122
-
123
- #card-title-container {
124
- height: auto;
125
- border: none;
126
- margin-bottom: 0.5rem;
127
- text-align: left;
128
- :first-child {
129
- font-size: 1rem;
130
- font-weight: 600;
131
- margin-bottom: 1rem;
132
- }
133
-
134
- .form-label {
135
- margin-bottom: 0.5rem;
136
- }
137
- }
138
- .mobile-pay-title {
139
- display: block;
140
- font-weight: 600;
141
- font-size: 1rem;
142
- color: black;
143
- padding: 0;
144
- font-style: normal;
145
- font-family: inherit;
146
- margin-bottom: 1rem;
160
+ ::-webkit-scrollbar {
161
+ display: none;
162
+ scrollbar-width: none;
147
163
  }
148
164
  }
149
165
 
150
- @include media-breakpoint-up(md) {
151
- .ryft-payment-form,
152
- .iframe-payment-form {
153
- position: relative;
154
- max-height: 300px !important;
155
- .submit-button-wrapper {
156
- max-width: 15.5rem;
166
+ @include media-breakpoint-down(md) {
167
+ .payment_link {
168
+ .page-body {
169
+ .left-block {
170
+ .left-block-container {
171
+ .ryft-payment-form {
172
+ position: relative;
173
+ max-height: 300px !important;
174
+ .ryft-pay-grid {
175
+ width: 100%;
176
+ max-width: 100%;
177
+ }
178
+ }
179
+ }
180
+ }
157
181
  }
158
182
  }
183
+ }
159
184
 
160
- // it's style for Google and Apple pay container, for unknown reasons we can't move this html elements with appendChild or replaceChild
161
- .ryft-pay-grid {
162
- width: 100%;
163
- max-width: 15.5rem;
164
- margin-bottom: 1rem;
165
- }
166
- .ryft-pay-apple-pay-button {
167
- border-radius: 0.25rem;
168
- }
169
-
170
- .divider {
171
- display: none !important;
172
- }
185
+ #ryft-threeDSMethodIframe {
186
+ display: none;
173
187
  }
@@ -5,7 +5,7 @@
5
5
  flex-wrap: wrap;
6
6
 
7
7
  .result-card {
8
- height: 14rem;
8
+ height: 14.25rem;
9
9
  border: 1px solid $gray-400;
10
10
  max-width: calc(50% - 0.75rem);
11
11
  flex: 0 0 calc(50% - 0.75rem);
@@ -16,7 +16,6 @@ export interface TypeaheadProps {
16
16
  isMultipleChoise?: boolean;
17
17
  noOptionsMessage: string;
18
18
  isInvalid?: boolean;
19
- isCouponForm?: boolean;
20
19
  }
21
20
 
22
21
  function Typeahead({
@@ -25,25 +24,13 @@ function Typeahead({
25
24
  isRequired = false,
26
25
  isMultipleChoise,
27
26
  name = "",
28
- isCouponForm = false,
29
27
  noOptionsMessage = "",
30
28
  isInvalid,
31
29
  }: TypeaheadProps) {
32
30
  const { control } = useFormContext();
33
31
 
34
- const getStyle = (): CSSObjectWithLabel => {
35
- const couponFormStyle = isCouponForm
36
- ? {
37
- borderRadius: "1rem",
38
- minHeight: "3rem",
39
- }
40
- : {};
41
- return isInvalid
42
- ? { borderColor: "red", ...couponFormStyle }
43
- : {
44
- ...couponFormStyle,
45
- };
46
- };
32
+ const getErrorStyle = (): CSSObjectWithLabel =>
33
+ isInvalid ? { borderColor: "red" } : {};
47
34
 
48
35
  return (
49
36
  <>
@@ -59,7 +46,7 @@ function Typeahead({
59
46
  styles={{
60
47
  control: (base) => ({
61
48
  ...base,
62
- ...getStyle(),
49
+ ...getErrorStyle(),
63
50
  }),
64
51
  }}
65
52
  onChange={(value) => {
@@ -13,7 +13,7 @@ export type ZoneFormProps = {
13
13
  onSubmit: (values: Partial<Zone>) => void;
14
14
  serverErrors?: ServerError;
15
15
  isLoading?: boolean;
16
- workHours: WorkHour[] | undefined;
16
+ workHours?: WorkHour[];
17
17
  };
18
18
 
19
19
  export type ZoneFormValues = Partial<Zone> & {
@@ -25,7 +25,6 @@ export const ZoneForm = ({
25
25
  onSubmit,
26
26
  serverErrors,
27
27
  isLoading = false,
28
- workHours,
29
28
  }: ZoneFormProps) => {
30
29
  const { t } = useTranslation("Design");
31
30
  const form = useForm<ZoneFormValues>({
@@ -55,7 +54,7 @@ export const ZoneForm = ({
55
54
  return (
56
55
  <FormProvider {...form}>
57
56
  <Form onSubmit={handleSubmit(onFormSubmit)}>
58
- <ZoneControl isLoading={isLoading} workHours={workHours} />
57
+ <ZoneControl isLoading={isLoading} />
59
58
  <Row>
60
59
  <Col md={6} sm={12} />
61
60
  <Col
@@ -11,15 +11,15 @@ import { GameDurationControl } from "./GameDurationControl";
11
11
 
12
12
  export type ZoneControlProps = {
13
13
  isLoading: boolean;
14
- workHours: WorkHour[] | undefined;
14
+ workHours?: WorkHour[];
15
15
  };
16
16
 
17
- export const ZoneControl = ({ isLoading, workHours }: ZoneControlProps) => {
17
+ export const ZoneControl = ({ isLoading }: ZoneControlProps) => {
18
18
  return (
19
19
  <Row>
20
20
  <Col md={6} sm={12} className="pr-5">
21
21
  <NameControl isLoading={isLoading} />
22
- <ZoneRecurrencesControl workHours={workHours} />
22
+ <ZoneRecurrencesControl />
23
23
  <hr />
24
24
  <Row>
25
25
  <Col md={6} sm={6}>
@@ -25,13 +25,12 @@ export interface DateAndRecurrenceInputValues {
25
25
  zoneRecurrences?: Partial<ZoneRecurrence>[];
26
26
  }
27
27
 
28
- type ZoneRecurrenceControlProps = {
29
- workHours: WorkHour[] | undefined;
28
+ export type ZoneRecurrenceControlProps = {
29
+ workHours?: WorkHour[];
30
+ isLoading?: boolean;
30
31
  };
31
32
 
32
- export const ZoneRecurrencesControl = ({
33
- workHours,
34
- }: ZoneRecurrenceControlProps) => {
33
+ export const ZoneRecurrencesControl = () => {
35
34
  const {
36
35
  control,
37
36
  register,
@@ -70,7 +69,7 @@ export const ZoneRecurrencesControl = ({
70
69
  clearEditState();
71
70
  });
72
71
 
73
- const popoverId = useId();
72
+ const popoverId = useId()!;
74
73
 
75
74
  const { t } = useTranslation(["Design", "Validation"]);
76
75
 
@@ -167,7 +166,6 @@ export const ZoneRecurrencesControl = ({
167
166
  onChange={handleRecurringDateChange}
168
167
  onDelete={handleDelete}
169
168
  setInitialStartDateAfterSelect
170
- workHours={workHours}
171
169
  />
172
170
  </Popover.Content>
173
171
  </Popover>
@@ -53,17 +53,18 @@ export const getCheckboxesByWorkHours = (workHours?: WorkHour[]) => {
53
53
  if (!workHours || !workHours.length)
54
54
  return getTimeCheckboxRanges(DEFAULT_START_DAY_TIME, DEFAULT_END_DAY_TIME);
55
55
 
56
- const providerWorkHoursByWeek = workHours.reduce<
57
- { start: string; end: string }[]
58
- >((workHoursNextArray, currentWorkHour) => {
59
- const { start, end } = currentWorkHour;
56
+ const providerWorkHoursByWeek = workHours.reduce(
57
+ (workHoursNextArray: { start: string; end: string }[], currentWorkHour) => {
58
+ const { start, end } = currentWorkHour;
60
59
 
61
- if (start && end) {
62
- return [...workHoursNextArray, { start, end }];
63
- }
60
+ if (start && end) {
61
+ return [...workHoursNextArray, { start, end }];
62
+ }
64
63
 
65
- return workHoursNextArray;
66
- }, []);
64
+ return workHoursNextArray;
65
+ },
66
+ []
67
+ );
67
68
 
68
69
  // If venue has filled only 1 work day from wee
69
70
  // For another days we use default 00:00 and 23:59
@@ -0,0 +1,194 @@
1
+ import RouteService from "@licklist/plugins/dist/services/Route/RouteService";
2
+ import { mount, shallow } from "enzyme";
3
+ import * as React from "react";
4
+ import { act } from "react-dom/test-utils";
5
+ import { QueryClientProvider } from "react-query";
6
+ import { Authorizer } from "../../src/auth/Authorizer";
7
+ import useAuthMock from "../__mock__/hooks/useAuthMock";
8
+ import useUserMock from "../__mock__/hooks/useUserMock";
9
+ import useAuthApi from "../__mock__/hooks/useAuthApi";
10
+ import { queryClient } from "../packages/react-query";
11
+
12
+ jest.mock("react-i18next", () => ({
13
+ Trans: jest.fn().mockReturnValue("test"),
14
+ useTranslation: () => ({
15
+ t: jest.fn((arg) => arg),
16
+ }),
17
+ }));
18
+ jest.mock("@licklist/plugins/dist/context/user/hooks/useAuth");
19
+ jest.mock("@licklist/plugins/dist/context/user/hooks/useUser");
20
+ jest.mock("@licklist/plugins/dist/hooks/Api/useAuthApi");
21
+
22
+ const DEFAULT_PROFILE_RESPONSE = {
23
+ useProfile: () => ({
24
+ isLoading: false,
25
+ isFetching: false,
26
+ isError: false,
27
+ data: { access_token: "test" },
28
+ }),
29
+ };
30
+
31
+ const DEFAULT_PROFILE_LOADING_RESPONSE = {
32
+ useProfile: () => ({
33
+ isLoading: true,
34
+ isFetching: false,
35
+ isError: false,
36
+ data: { access_token: "test" },
37
+ }),
38
+ };
39
+
40
+ describe("Authorizer", () => {
41
+ it("should be rendered without issues", () => {
42
+ useAuthMock({
43
+ secrets: null,
44
+ });
45
+ useUserMock({
46
+ profile: null,
47
+ });
48
+ useAuthApi(DEFAULT_PROFILE_LOADING_RESPONSE);
49
+
50
+ const component = shallow(
51
+ <QueryClientProvider client={queryClient}>
52
+ <Authorizer />
53
+ </QueryClientProvider>
54
+ );
55
+
56
+ expect(component.exists()).toBeTruthy();
57
+ });
58
+
59
+ it("should render children if authorized", () => {
60
+ let component: any;
61
+
62
+ useAuthMock({
63
+ secrets: "not-null",
64
+ });
65
+ useUserMock({
66
+ profile: "not-null",
67
+ });
68
+ useAuthApi(DEFAULT_PROFILE_LOADING_RESPONSE);
69
+
70
+ RouteService.getCurrentPage = jest.fn();
71
+ RouteService.getCurrentRoute = jest.fn();
72
+ RouteService.cleanRedirect = jest.fn();
73
+
74
+ act(() => {
75
+ component = mount(
76
+ <QueryClientProvider client={queryClient}>
77
+ <Authorizer>
78
+ <p>test</p>
79
+ </Authorizer>
80
+ </QueryClientProvider>
81
+ );
82
+ });
83
+
84
+ component.update();
85
+
86
+ expect(RouteService.getCurrentPage).toHaveBeenCalledTimes(0);
87
+ expect(RouteService.getCurrentRoute).toHaveBeenCalledTimes(0);
88
+ expect(RouteService.cleanRedirect).toHaveBeenCalledTimes(0);
89
+ expect(component.exists()).toBeTruthy();
90
+ expect(component.find("BlockLoader").exists()).toBeTruthy();
91
+ });
92
+
93
+ it("should render children if current page is login", () => {
94
+ let component: any;
95
+
96
+ useAuthMock({
97
+ secrets: null,
98
+ });
99
+ useUserMock({
100
+ profile: null,
101
+ });
102
+ useAuthApi(DEFAULT_PROFILE_LOADING_RESPONSE);
103
+
104
+ RouteService.getCurrentPage = jest.fn().mockReturnValue("/login");
105
+ RouteService.getCurrentRoute = jest.fn();
106
+ RouteService.cleanRedirect = jest.fn();
107
+
108
+ act(() => {
109
+ component = mount(
110
+ <QueryClientProvider client={queryClient}>
111
+ <Authorizer>
112
+ <p>test</p>
113
+ </Authorizer>
114
+ </QueryClientProvider>
115
+ );
116
+ });
117
+
118
+ component.update();
119
+
120
+ expect(RouteService.getCurrentPage).toHaveBeenCalledTimes(0);
121
+ expect(RouteService.getCurrentRoute).toHaveBeenCalledTimes(0);
122
+ expect(RouteService.cleanRedirect).toHaveBeenCalledTimes(0);
123
+ expect(component.exists()).toBeTruthy();
124
+ expect(component.find("BlockLoader").exists()).toBeTruthy();
125
+ });
126
+
127
+ it("should NOT render children if profile is loading or fetching", () => {
128
+ let component: any;
129
+
130
+ useAuthMock({
131
+ secrets: null,
132
+ });
133
+ useUserMock({
134
+ profile: null,
135
+ });
136
+ useAuthApi(DEFAULT_PROFILE_LOADING_RESPONSE);
137
+
138
+ RouteService.getCurrentPage = jest.fn();
139
+ RouteService.getCurrentRoute = jest.fn();
140
+ RouteService.cleanRedirect = jest.fn();
141
+
142
+ act(() => {
143
+ component = mount(
144
+ <QueryClientProvider client={queryClient}>
145
+ <Authorizer>
146
+ <p>test</p>
147
+ </Authorizer>
148
+ </QueryClientProvider>
149
+ );
150
+ });
151
+
152
+ component.update();
153
+
154
+ expect(RouteService.getCurrentPage).toHaveBeenCalledTimes(0);
155
+ expect(RouteService.getCurrentRoute).toHaveBeenCalledTimes(0);
156
+ expect(RouteService.cleanRedirect).toHaveBeenCalledTimes(0);
157
+ expect(component.exists()).toBeTruthy();
158
+ expect(component.find("BlockLoader").exists()).toBeTruthy();
159
+ });
160
+
161
+ it("should NOT render children if unauthorized and current page is not login", () => {
162
+ let component: any;
163
+
164
+ useAuthMock({
165
+ secrets: null,
166
+ });
167
+ useUserMock({
168
+ profile: null,
169
+ });
170
+ useAuthApi(DEFAULT_PROFILE_RESPONSE);
171
+
172
+ RouteService.getCurrentPage = jest.fn();
173
+ RouteService.getCurrentRoute = jest.fn();
174
+ RouteService.cleanRedirect = jest.fn();
175
+
176
+ act(() => {
177
+ component = mount(
178
+ <QueryClientProvider client={queryClient}>
179
+ <Authorizer>
180
+ <p>test</p>
181
+ </Authorizer>
182
+ </QueryClientProvider>
183
+ );
184
+ });
185
+
186
+ component.update();
187
+
188
+ expect(RouteService.getCurrentPage).toHaveBeenCalledTimes(3);
189
+ expect(RouteService.getCurrentRoute).toHaveBeenCalledTimes(1);
190
+ expect(RouteService.cleanRedirect).toHaveBeenCalledTimes(1);
191
+ expect(component.exists()).toBeTruthy();
192
+ expect(component.find("BlockLoader").exists()).toBeTruthy();
193
+ });
194
+ });