@sikka/hawa 0.0.95 → 0.0.97

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 (174) hide show
  1. package/dist/styles.css +279 -211
  2. package/es/index.es.js +1 -1
  3. package/lib/index.js +1 -1
  4. package/package.json +19 -6
  5. package/rollup.config.js +14 -2
  6. package/src/blocks/Account/{UserProfileForm.js → UserProfileForm.tsx} +42 -41
  7. package/src/blocks/Account/UserSettingsForm.tsx +28 -0
  8. package/src/blocks/Account/index.ts +2 -0
  9. package/src/blocks/AuthForms/AppLanding.tsx +33 -0
  10. package/src/blocks/AuthForms/CodeConfirmation.tsx +59 -0
  11. package/src/blocks/AuthForms/{NewPasswordForm.js → NewPasswordForm.tsx} +49 -53
  12. package/src/blocks/AuthForms/{ResetPasswordForm.js → ResetPasswordForm.tsx} +35 -38
  13. package/src/blocks/AuthForms/{SignInForm.js → SignInForm.tsx} +73 -65
  14. package/src/blocks/AuthForms/SignInPhone.tsx +68 -0
  15. package/src/blocks/AuthForms/{SignUpForm.js → SignUpForm.tsx} +88 -82
  16. package/src/blocks/AuthForms/index.ts +7 -0
  17. package/src/blocks/Misc/NotFound.tsx +28 -0
  18. package/src/blocks/Misc/index.ts +1 -0
  19. package/src/blocks/Payment/ChargeWalletForm.tsx +70 -0
  20. package/src/blocks/Payment/{CheckoutForm.js → CheckoutForm.tsx} +82 -81
  21. package/src/blocks/Payment/Confirmation.tsx +96 -0
  22. package/src/blocks/Payment/{CreditCardForm.js → CreditCardForm.tsx} +48 -33
  23. package/src/blocks/Payment/PayWithWallet.tsx +29 -0
  24. package/src/blocks/Payment/{SelectPayment.js → SelectPayment.tsx} +33 -29
  25. package/src/blocks/Payment/{index.js → index.ts} +0 -0
  26. package/src/blocks/Pricing/{ComparingPlans.js → ComparingPlans.tsx} +51 -53
  27. package/src/blocks/Pricing/PricingPlans.tsx +72 -0
  28. package/src/blocks/Pricing/{index.js → index.ts} +0 -0
  29. package/src/blocks/{index.js → index.ts} +0 -0
  30. package/{countries.js → src/countries.ts} +245 -245
  31. package/src/elements/{AutoCompleteField.js → AutoCompleteField.tsx} +16 -9
  32. package/src/elements/{DragDropImages.js → DragDropImages.tsx} +78 -53
  33. package/src/elements/DraggableCard.tsx +29 -0
  34. package/src/elements/{HawaAccordian.js → HawaAccordian.tsx} +27 -23
  35. package/src/elements/HawaAdCard.tsx +48 -0
  36. package/src/elements/HawaAlert.tsx +30 -0
  37. package/src/elements/HawaButton.tsx +120 -0
  38. package/src/elements/HawaCheckbox.tsx +37 -0
  39. package/src/elements/HawaChip.tsx +12 -0
  40. package/src/elements/HawaColorPicker.tsx +38 -0
  41. package/src/elements/{HawaCopyrights.js → HawaCopyrights.tsx} +15 -8
  42. package/src/elements/HawaDrawer.tsx +84 -0
  43. package/src/elements/{HawaDrawerItem.js → HawaDrawerItem.tsx} +12 -7
  44. package/src/elements/{HawaItemCard.js → HawaItemCard.tsx} +35 -36
  45. package/src/elements/{HawaLogoButton.js → HawaLogoButton.tsx} +52 -56
  46. package/src/elements/HawaMenu.tsx +75 -0
  47. package/src/elements/{HawaModal.js → HawaModal.tsx} +30 -21
  48. package/src/elements/{HawaPanelTabs.js → HawaPanelTabs.tsx} +27 -27
  49. package/src/elements/HawaPhoneInput.tsx +112 -0
  50. package/src/elements/{HawaPricingCard.js → HawaPricingCard.tsx} +86 -47
  51. package/src/elements/HawaRadio.tsx +34 -0
  52. package/src/elements/HawaRange.tsx +47 -0
  53. package/src/elements/HawaSearchBar.tsx +9 -0
  54. package/src/elements/{HawaSelect.js → HawaSelect.tsx} +74 -31
  55. package/src/elements/HawaSettingsRow.tsx +56 -0
  56. package/src/elements/HawaSnackbar.tsx +73 -0
  57. package/src/elements/HawaSwitch.tsx +25 -0
  58. package/src/elements/{HawaTable.js → HawaTable.tsx} +33 -31
  59. package/src/elements/{HawaTabs.js → HawaTabs.tsx} +17 -12
  60. package/src/elements/HawaTextField.tsx +71 -0
  61. package/src/elements/HawaTooltip.tsx +35 -0
  62. package/src/elements/HawaTypography.tsx +11 -0
  63. package/src/elements/{TabPanel.js → TabPanel.tsx} +10 -5
  64. package/src/elements/{index.js → index.ts} +7 -4
  65. package/src/index.ts +3 -0
  66. package/src/layout/Box.tsx +5 -0
  67. package/src/layout/HawaBottomAppBar.tsx +54 -0
  68. package/src/layout/HawaContainer.tsx +24 -0
  69. package/src/layout/{HawaLayout.js → HawaLayout.tsx} +54 -49
  70. package/src/layout/{index.js → index.ts} +0 -0
  71. package/src/styles.css +279 -211
  72. package/src/{util.js → util.ts} +0 -0
  73. package/storybook-static/229.a3257e00.iframe.bundle.js +1 -0
  74. package/storybook-static/229.d6fb4f8f665962cef844.manager.bundle.js +1 -0
  75. package/storybook-static/295.67c251ec00675ab59b60.manager.bundle.js +1 -0
  76. package/storybook-static/51.786e9bbba427ee454dc0.manager.bundle.js +2 -0
  77. package/storybook-static/{0.1104ca18.iframe.bundle.js.LICENSE.txt → 51.786e9bbba427ee454dc0.manager.bundle.js.LICENSE.txt} +0 -0
  78. package/storybook-static/51.acbbdb95.iframe.bundle.js +2 -0
  79. package/storybook-static/{0.cf71f8aa82edef0a7186.manager.bundle.js.LICENSE.txt → 51.acbbdb95.iframe.bundle.js.LICENSE.txt} +0 -0
  80. package/storybook-static/551.67cd309b0648b0a52636.manager.bundle.js +1 -0
  81. package/storybook-static/551.c82ea8f1.iframe.bundle.js +1 -0
  82. package/storybook-static/701.bcf1e718.iframe.bundle.js +1 -0
  83. package/storybook-static/733.8d2de9f8.iframe.bundle.js +2 -0
  84. package/storybook-static/{vendors~main.a40572d0.iframe.bundle.js.LICENSE.txt → 733.8d2de9f8.iframe.bundle.js.LICENSE.txt} +0 -10
  85. package/storybook-static/767.2f9c96fa3338c8d16078.manager.bundle.js +2 -0
  86. package/storybook-static/{vendors~main.d13ba71108048897ea4a.manager.bundle.js.LICENSE.txt → 767.2f9c96fa3338c8d16078.manager.bundle.js.LICENSE.txt} +0 -10
  87. package/storybook-static/807.14b8bfa7.iframe.bundle.js +2 -0
  88. package/storybook-static/{5.5b799f3fbf64cec8e51a.manager.bundle.js.LICENSE.txt → 807.14b8bfa7.iframe.bundle.js.LICENSE.txt} +0 -0
  89. package/storybook-static/807.4f52b2d047c5e8c5872f.manager.bundle.js +2 -0
  90. package/storybook-static/{6.6023eba1.iframe.bundle.js.LICENSE.txt → 807.4f52b2d047c5e8c5872f.manager.bundle.js.LICENSE.txt} +0 -0
  91. package/storybook-static/897.386c170cbd1467abc7ca.manager.bundle.js +2 -0
  92. package/storybook-static/{8.f9b98ef3e089be1a16d6.manager.bundle.js.LICENSE.txt → 897.386c170cbd1467abc7ca.manager.bundle.js.LICENSE.txt} +0 -0
  93. package/storybook-static/897.d9a35fd0.iframe.bundle.js +2 -0
  94. package/storybook-static/{9.63a5cf7a.iframe.bundle.js.LICENSE.txt → 897.d9a35fd0.iframe.bundle.js.LICENSE.txt} +0 -0
  95. package/storybook-static/935.07c1b6ea.iframe.bundle.js +1 -0
  96. package/storybook-static/935.0b4e9c201c33f3e66e81.manager.bundle.js +1 -0
  97. package/storybook-static/iframe.html +1 -1
  98. package/storybook-static/index.html +1 -1
  99. package/storybook-static/main.051275cac7b0dc69501c.manager.bundle.js +1 -0
  100. package/storybook-static/main.71507dcb.iframe.bundle.js +1 -0
  101. package/storybook-static/project.json +1 -1
  102. package/storybook-static/runtime~main.25eae181fe0f96887a15.manager.bundle.js +1 -0
  103. package/storybook-static/runtime~main.4d0bf318.iframe.bundle.js +1 -0
  104. package/tailwind.config.js +16 -1
  105. package/tsconfig.json +25 -0
  106. package/src/blocks/Account/UserSettingsForm.js +0 -17
  107. package/src/blocks/Account/index.js +0 -2
  108. package/src/blocks/AuthForms/AppLanding.js +0 -40
  109. package/src/blocks/AuthForms/CodeConfirmation.js +0 -78
  110. package/src/blocks/AuthForms/SignInPhone.js +0 -38
  111. package/src/blocks/AuthForms/index.js +0 -7
  112. package/src/blocks/Misc/NotFound.js +0 -32
  113. package/src/blocks/Misc/index.js +0 -1
  114. package/src/blocks/Payment/ChargeWalletForm.js +0 -81
  115. package/src/blocks/Payment/Confirmation.js +0 -104
  116. package/src/blocks/Payment/Form/CForm.js +0 -316
  117. package/src/blocks/Payment/Form/Card.js +0 -242
  118. package/src/blocks/Payment/Form/PaymentMethod.js +0 -118
  119. package/src/blocks/Payment/Gateway/GooglePay.js +0 -251
  120. package/src/blocks/Payment/Gateway/Payfort.js +0 -90
  121. package/src/blocks/Payment/Gateway/Paypal.js +0 -138
  122. package/src/blocks/Payment/Gateway/Wallet.js +0 -148
  123. package/src/blocks/Payment/PayWithWallet.js +0 -20
  124. package/src/blocks/Pricing/PricingPlans.js +0 -88
  125. package/src/elements/DraggableCard.js +0 -24
  126. package/src/elements/HawaAlert.js +0 -41
  127. package/src/elements/HawaButton.js +0 -62
  128. package/src/elements/HawaCheckbox.js +0 -28
  129. package/src/elements/HawaChip.js +0 -9
  130. package/src/elements/HawaColorPicker.js +0 -57
  131. package/src/elements/HawaDrawer.js +0 -68
  132. package/src/elements/HawaMenu.js +0 -71
  133. package/src/elements/HawaPhoneInput.js +0 -106
  134. package/src/elements/HawaRadio.js +0 -31
  135. package/src/elements/HawaRange.js +0 -54
  136. package/src/elements/HawaSearchBar.js +0 -15
  137. package/src/elements/HawaSettingsRow.js +0 -34
  138. package/src/elements/HawaSnackbar.js +0 -44
  139. package/src/elements/HawaSwitch.js +0 -21
  140. package/src/elements/HawaTextField.js +0 -34
  141. package/src/elements/HawaTooltip.js +0 -19
  142. package/src/elements/HawaTypography.js +0 -5
  143. package/src/elements/PinInput.js +0 -141
  144. package/src/elements/SelectedField.js +0 -46
  145. package/src/index.js +0 -3
  146. package/src/layout/Box.js +0 -5
  147. package/src/layout/HawaAppLayout.js +0 -245
  148. package/src/layout/HawaAppLayout2.js +0 -254
  149. package/src/layout/HawaBottomAppBar.js +0 -76
  150. package/src/layout/HawaContainer.js +0 -8
  151. package/storybook-static/0.1104ca18.iframe.bundle.js +0 -3
  152. package/storybook-static/0.1104ca18.iframe.bundle.js.map +0 -1
  153. package/storybook-static/0.cf71f8aa82edef0a7186.manager.bundle.js +0 -2
  154. package/storybook-static/1.7e6ec5c45ae5b70c5149.manager.bundle.js +0 -1
  155. package/storybook-static/1.e3eafd38.iframe.bundle.js +0 -1
  156. package/storybook-static/2.3841b1a5.iframe.bundle.js +0 -1
  157. package/storybook-static/5.5b799f3fbf64cec8e51a.manager.bundle.js +0 -2
  158. package/storybook-static/6.6023eba1.iframe.bundle.js +0 -3
  159. package/storybook-static/6.6023eba1.iframe.bundle.js.map +0 -1
  160. package/storybook-static/6.b34ce31193a7fa1dd965.manager.bundle.js +0 -1
  161. package/storybook-static/7.632f8551.iframe.bundle.js +0 -1
  162. package/storybook-static/7.72879af713f755a7aa7e.manager.bundle.js +0 -1
  163. package/storybook-static/8.9a8f8b69.iframe.bundle.js +0 -1
  164. package/storybook-static/8.f9b98ef3e089be1a16d6.manager.bundle.js +0 -2
  165. package/storybook-static/9.1e1335092fade49cc986.manager.bundle.js +0 -1
  166. package/storybook-static/9.63a5cf7a.iframe.bundle.js +0 -3
  167. package/storybook-static/9.63a5cf7a.iframe.bundle.js.map +0 -1
  168. package/storybook-static/main.4bd27e4e7faa098302d1.manager.bundle.js +0 -1
  169. package/storybook-static/main.ea9904c2.iframe.bundle.js +0 -1
  170. package/storybook-static/runtime~main.67ec6e92.iframe.bundle.js +0 -1
  171. package/storybook-static/runtime~main.a58df7ba92d01c5088d3.manager.bundle.js +0 -1
  172. package/storybook-static/vendors~main.a40572d0.iframe.bundle.js +0 -3
  173. package/storybook-static/vendors~main.a40572d0.iframe.bundle.js.map +0 -1
  174. package/storybook-static/vendors~main.d13ba71108048897ea4a.manager.bundle.js +0 -2
@@ -1,316 +0,0 @@
1
- import React, { useEffect, useState, useRef } from "react";
2
- import sha256 from "crypto-js/sha256";
3
- import useTranslation from "next-translate/useTranslation";
4
- import axios from "axios";
5
- import { HawaButton } from "../../../elements";
6
-
7
- const currentYear = new Date().getFullYear();
8
- const monthsArr = Array.from({ length: 12 }, (x, i) => {
9
- const month = i + 1;
10
- return month <= 9 ? "0" + month : month;
11
- });
12
- const yearsArr = Array.from({ length: 9 }, (_x, i) => currentYear + i);
13
-
14
- export default function CForm({
15
- cardHolder,
16
- cardMonth,
17
- cardYear,
18
- cardCvv,
19
- onUpdateState,
20
- cardNumberRef,
21
- cardHolderRef,
22
- cardDateRef,
23
- cardCvvRef,
24
- onCardInputFocus,
25
- onCardInputBlur,
26
- children,
27
- selectedPaymentMethod,
28
- transaction
29
- }) {
30
- const payfortFormref = useRef();
31
- const [loading, setLoading] = useState(false);
32
- const [cardNumber, setCardNumber] = useState("");
33
- const [accessCode, setAccessCode] = useState("");
34
- const [merchantIdentifier, setMerchantIdentifier] = useState("");
35
- const [shaRequestPassphrase, setSHARequestPassphrase] = useState("");
36
- const [expiryDate, setExpiryDate] = useState("");
37
- const [signature, setSignature] = useState("");
38
- const [ip, setIP] = useState("");
39
- const { t, lang } = useTranslation("common");
40
-
41
- const handleFormChange = (event) => {
42
- const { name, value } = event.target;
43
-
44
- onUpdateState(name, value);
45
- };
46
-
47
- const getData = async () => {
48
- const res = await axios.get("https://geolocation-db.com/json/");
49
- console.log(res.data);
50
- setIP(res.data.IPv4);
51
- };
52
-
53
- const generateSignature = () => {
54
- // Calculate request signature
55
- let shaString = "";
56
-
57
- // array request
58
- let arrData = {
59
- access_code: process.env.NEXT_PUBLIC_QAWAIM_SOFTWARE_PAYFOR_ACCESS_TOKEN,
60
- language: lang,
61
- merchant_identifier:
62
- process.env.NEXT_PUBLIC_QAWAIM_SOFTWARE_PAYFOR_MERCHANT_ID,
63
- merchant_reference: "",
64
- return_url: `${process.env.NEXT_PUBLIC_QAWAIM_USER_PORTAL_URL}/aps_online/response`,
65
- service_command: "TOKENIZATION"
66
- };
67
-
68
- if (
69
- transaction &&
70
- transaction?.getTransactionByIDInvoice?.transaction_payment_token
71
- ) {
72
- arrData.token_name =
73
- transaction?.getTransactionByIDInvoice?.transaction_payment_token;
74
- }
75
-
76
- console.log("arrData=", arrData);
77
-
78
- shaString = `${process.env.NEXT_PUBLIC_QAWAIM_SOFTWARE_PAYFOR_SHA_REQUEST_PHRASE}${shaString}`;
79
- for (const [key, value] of Object.entries(arrData)) {
80
- shaString = `${shaString}${key}=${value}`;
81
- }
82
- shaString = `${shaString}${process.env.NEXT_PUBLIC_QAWAIM_SOFTWARE_PAYFOR_SHA_REQUEST_PHRASE}`;
83
-
84
- console.log("shaString=", shaString);
85
-
86
- // your request signature
87
- let signature = sha256(shaString);
88
-
89
- console.log("signature=", signature);
90
- setSignature(signature);
91
- };
92
- useEffect(() => {
93
- if (selectedPaymentMethod && selectedPaymentMethod !== "APPLEPAY") {
94
- getData();
95
- generateSignature();
96
- }
97
- }, [selectedPaymentMethod, accessCode, shaRequestPassphrase]);
98
-
99
- useEffect(() => {
100
- if (cardMonth && cardYear) {
101
- setExpiryDate(`${cardYear.substring(2)}${cardMonth}`);
102
- }
103
- }, [cardMonth, cardYear]);
104
-
105
- // TODO: We can improve the regex check with a better approach like in the card component.
106
- const onCardNumberChange = (event) => {
107
- let { value, name } = event.target;
108
- let cardNumber = value;
109
- value = value.replace(/\D/g, "");
110
- if (/^3[47]\d{0,13}$/.test(value)) {
111
- cardNumber = value
112
- .replace(/(\d{4})/, "$1 ")
113
- .replace(/(\d{4}) (\d{6})/, "$1 $2 ");
114
- } else if (/^3(?:0[0-5]|[68]\d)\d{0,11}$/.test(value)) {
115
- // diner's club, 14 digits
116
- cardNumber = value
117
- .replace(/(\d{4})/, "$1 ")
118
- .replace(/(\d{4}) (\d{6})/, "$1 $2 ");
119
- } else if (/^\d{0,16}$/.test(value)) {
120
- // regular cc number, 16 digits
121
- cardNumber = value
122
- .replace(/(\d{4})/, "$1 ")
123
- .replace(/(\d{4}) (\d{4})/, "$1 $2 ")
124
- .replace(/(\d{4}) (\d{4}) (\d{4})/, "$1 $2 $3 ");
125
- }
126
-
127
- setCardNumber(cardNumber.trimRight());
128
- onUpdateState(name, cardNumber);
129
- };
130
-
131
- const onCvvFocus = (event) => {
132
- onUpdateState("isCardFlipped", true);
133
- };
134
-
135
- const onCvvBlur = (event) => {
136
- onUpdateState("isCardFlipped", false);
137
- };
138
-
139
- const handlePayfortForm = (e) => {};
140
-
141
- // NOTE: Currently the cursor on the card number field gets reset if we remove a number, the code bellow was used
142
- // in className components, need to transform this to work with functional components.
143
- // getSnapshotBeforeUpdate() {
144
- // return this.props.cardNumberRef.current.selectionStart;
145
- // }
146
-
147
- // const componentDidUpdate = function (prevProps, prevState, cursorIdx) {
148
- // const node = cardNumberRef.current;
149
- // const { cardNumber: cardNum } = state;
150
- // const { cardNumber: prevCardNum } = prevState;
151
- // if (
152
- // cardNum.length > prevCardNum.length &&
153
- // cardNum[cursorIdx - 1] === ' '
154
- // ) {
155
- // cursorIdx += 1;
156
- // } else if (prevCardNum[cursorIdx - 1] === ' ') {
157
- // cursorIdx -= 1;
158
- // }
159
- // node.selectionStart = node.selectionEnd = cursorIdx;
160
- // };
161
-
162
- return (
163
- <div className="card-form">
164
- <div className="card-list">{children}</div>
165
- <div className="card-form__inner">
166
- <div className="card-input">
167
- <label htmlFor="cardNumber" className="card-input__label">
168
- {t("cardNumber")}
169
- </label>
170
- <input
171
- type="tel"
172
- name="cardNumber"
173
- className="card-input__input"
174
- autoComplete="off"
175
- onChange={onCardNumberChange}
176
- maxLength="19"
177
- ref={cardNumberRef}
178
- onFocus={(e) => onCardInputFocus(e, "cardNumber")}
179
- onBlur={onCardInputBlur}
180
- value={cardNumber}
181
- />
182
- </div>
183
-
184
- <div className="card-input">
185
- <label htmlFor="cardName" className="card-input__label">
186
- {t("cardHolder")}
187
- </label>
188
- <input
189
- type="text"
190
- className="card-input__input"
191
- autoComplete="off"
192
- name="cardHolder"
193
- onChange={handleFormChange}
194
- ref={cardHolderRef}
195
- onFocus={(e) => onCardInputFocus(e, "cardHolder")}
196
- onBlur={onCardInputBlur}
197
- />
198
- </div>
199
-
200
- <div className="card-form__row">
201
- <div className="card-form__col">
202
- <div className="card-form__group">
203
- <label htmlFor="cardMonth" className="card-input__label">
204
- {t("cardExpiration")}
205
- </label>
206
- <select
207
- className="card-input__input -select"
208
- value={cardMonth}
209
- name="cardMonth"
210
- onChange={handleFormChange}
211
- ref={cardDateRef}
212
- onFocus={(e) => onCardInputFocus(e, "cardDate")}
213
- onBlur={onCardInputBlur}
214
- >
215
- <option value="" disabled>
216
- {t("cardMonth")}
217
- </option>
218
-
219
- {monthsArr.map((val, index) => (
220
- <option key={index} value={val}>
221
- {val}
222
- </option>
223
- ))}
224
- </select>
225
- <select
226
- name="cardYear"
227
- className="card-input__input -select"
228
- value={cardYear}
229
- onChange={handleFormChange}
230
- onFocus={(e) => onCardInputFocus(e, "cardDate")}
231
- onBlur={onCardInputBlur}
232
- >
233
- <option value="" disabled>
234
- {t("cardYear")}
235
- </option>
236
-
237
- {yearsArr.map((val, index) => (
238
- <option key={index} value={val}>
239
- {val}
240
- </option>
241
- ))}
242
- </select>
243
- </div>
244
- </div>
245
- <div className="card-form__col -cvv">
246
- <div className="card-input">
247
- <label htmlFor="cardCvv" className="card-input__label">
248
- {t("cvv")}
249
- </label>
250
- <input
251
- type="tel"
252
- className="card-input__input"
253
- maxLength="4"
254
- autoComplete="off"
255
- name="cardCvv"
256
- onChange={handleFormChange}
257
- onFocus={onCvvFocus}
258
- onBlur={onCvvBlur}
259
- ref={cardCvvRef}
260
- />
261
- </div>
262
- </div>
263
- </div>
264
- <div className="card-input" style={{ marginTop: "20px" }}>
265
- <form
266
- ref={payfortFormref}
267
- action={`${process.env.NEXT_PUBLIC_QAWAIM_SOFTWARE_PAYFOR_ENVIRONMENT_URL}`}
268
- method="POST"
269
- >
270
- <input type="hidden" name="access_code" value={`${accessCode}`} />
271
- <input type="hidden" name="card_holder_name" value={cardHolder} />
272
- <input
273
- type="hidden"
274
- name="card_number"
275
- value={cardNumber.replace(/\s/g, "")}
276
- />
277
- <input type="hidden" name="card_security_code" value={cardCvv} />
278
- <input type="hidden" name="expiry_date" value={expiryDate} />
279
- <input type="hidden" name="language" value={lang} />
280
- <input
281
- type="hidden"
282
- name="merchant_identifier"
283
- value={`${merchantIdentifier}`}
284
- />
285
- <input type="hidden" name="merchant_reference" value={""} />
286
- <input type="hidden" name="remember_me" value="NO" />
287
- <input
288
- type="hidden"
289
- name="return_url"
290
- value={`${process.env.NEXT_PUBLIC_QAWAIM_USER_PORTAL_URL}/aps_online/register`}
291
- />
292
- <input type="hidden" name="service_command" value="TOKENIZATION" />
293
- <input type="hidden" name="signature" value={signature} />
294
- {transaction &&
295
- transaction?.getTransactionByIDInvoice
296
- ?.transaction_payment_token && (
297
- <input
298
- type="hidden"
299
- name="token_name"
300
- value={
301
- transaction?.getTransactionByIDInvoice
302
- ?.transaction_payment_token
303
- }
304
- />
305
- )}
306
- </form>
307
- <HawaButton
308
- fullWidth
309
- onClick={handlePayfortForm}
310
- text={<span className="pay-new-btn-txt">{t("pay-now")}</span>}
311
- />{" "}
312
- </div>
313
- </div>
314
- </div>
315
- );
316
- }
@@ -1,242 +0,0 @@
1
- import React, { useState, useEffect, useCallback, useMemo } from "react";
2
- import {
3
- CSSTransition,
4
- TransitionGroup,
5
- SwitchTransition
6
- } from "react-transition-group";
7
-
8
- const CARDS = {
9
- visa: "^4",
10
- amex: "^(34|37)",
11
- mastercard: "^5[1-5]",
12
- discover: "^6011",
13
- unionpay: "^62",
14
- troy: "^9792",
15
- diners: "^(30[0-5]|36)"
16
- };
17
-
18
- const cardBackgroundName = () => {
19
- let random = Math.floor(Math.random() * 25 + 1);
20
- return `${random}.jpeg`;
21
- };
22
-
23
- const BACKGROUND_IMG = cardBackgroundName();
24
-
25
- const Card = ({
26
- cardHolder,
27
- cardNumber,
28
- cardMonth,
29
- cardYear,
30
- cardCvv,
31
- isCardFlipped,
32
- currentFocusedElm,
33
- onCardElementClick,
34
- cardNumberRef,
35
- cardHolderRef,
36
- cardDateRef
37
- }) => {
38
- const [style, setStyle] = useState(null);
39
-
40
- const cardType = (cardNumber) => {
41
- const number = cardNumber;
42
- let re;
43
- for (const [card, pattern] of Object.entries(CARDS)) {
44
- re = new RegExp(pattern);
45
- if (number.match(re) != null) {
46
- return card;
47
- }
48
- }
49
-
50
- return "visa"; // default type
51
- };
52
-
53
- const useCardType = useMemo(() => {
54
- return cardType(cardNumber);
55
- }, [cardNumber]);
56
-
57
- const outlineElementStyle = (element) => {
58
- return element
59
- ? {
60
- width: `${element.offsetWidth}px`,
61
- height: `${element.offsetHeight}px`,
62
- transform: `translateX(${element.offsetLeft}px) translateY(${element.offsetTop}px)`
63
- }
64
- : null;
65
- };
66
-
67
- useEffect(() => {
68
- if (currentFocusedElm) {
69
- const style = outlineElementStyle(currentFocusedElm.current);
70
- setStyle(style);
71
- }
72
- }, [currentFocusedElm]);
73
-
74
- const maskCardNumber = (cardNumber) => {
75
- let cardNumberArr = cardNumber.split("");
76
- cardNumberArr.forEach((val, index) => {
77
- if (index > 4 && index < 14) {
78
- if (cardNumberArr[index] !== " ") {
79
- cardNumberArr[index] = "*";
80
- }
81
- }
82
- });
83
-
84
- return cardNumberArr;
85
- };
86
-
87
- return (
88
- <div className={"card-item " + (isCardFlipped ? "-active" : "")}>
89
- <div className="card-item__side -front">
90
- <div
91
- className={`card-item__focus ${currentFocusedElm ? `-active` : ``}`}
92
- style={style}
93
- />
94
- <div className="card-item__cover">
95
- <img
96
- alt=""
97
- src={`/card-background/${BACKGROUND_IMG}`}
98
- className="card-item__bg"
99
- />
100
- </div>
101
-
102
- <div className="card-item__wrapper">
103
- <div className="card-item__top">
104
- <img src={"/chip.png"} alt="" className="card-item__chip" />
105
- <div className="card-item__type">
106
- <img
107
- alt={useCardType}
108
- src={`/card-type/${useCardType}.png`}
109
- className="card-item__typeImg"
110
- />
111
- </div>
112
- </div>
113
-
114
- <label
115
- className="card-item__number"
116
- ref={cardNumberRef}
117
- onClick={() => onCardElementClick("cardNumber")}
118
- >
119
- <TransitionGroup className="slide-fade-up" component="div">
120
- {cardNumber ? (
121
- maskCardNumber(cardNumber).map((val, index) => (
122
- <CSSTransition
123
- classNames="slide-fade-up"
124
- timeout={250}
125
- key={index}
126
- >
127
- <div className="card-item__numberItem">{val}</div>
128
- </CSSTransition>
129
- ))
130
- ) : (
131
- <CSSTransition classNames="slide-fade-up" timeout={250}>
132
- <div className="card-item__numberItem">#</div>
133
- </CSSTransition>
134
- )}
135
- </TransitionGroup>
136
- </label>
137
- <div className="card-item__content">
138
- <label
139
- className="card-item__info"
140
- onClick={() => onCardElementClick("cardHolder")}
141
- ref={cardHolderRef}
142
- >
143
- <div className="card-item__holder">Card Holder</div>
144
- <div className="card-item__name">
145
- <TransitionGroup component="div" className="slide-fade-up">
146
- {cardHolder === "FULL NAME" ? (
147
- <CSSTransition classNames="slide-fade-up" timeout={250}>
148
- <div>FULL NAME</div>
149
- </CSSTransition>
150
- ) : (
151
- cardHolder.split("").map((val, index) => (
152
- <CSSTransition
153
- timeout={250}
154
- classNames="slide-fade-right"
155
- key={index}
156
- >
157
- <span className="card-item__nameItem">{val}</span>
158
- </CSSTransition>
159
- ))
160
- )}
161
- </TransitionGroup>
162
- </div>
163
- </label>
164
- <div
165
- className="card-item__date"
166
- onClick={() => onCardElementClick("cardDate")}
167
- ref={cardDateRef}
168
- >
169
- <label className="card-item__dateTitle">Expires</label>
170
- <label className="card-item__dateItem">
171
- <SwitchTransition in-out>
172
- <CSSTransition
173
- classNames="slide-fade-up"
174
- timeout={200}
175
- key={cardMonth}
176
- >
177
- <span>{!cardMonth ? "MM" : cardMonth} </span>
178
- </CSSTransition>
179
- </SwitchTransition>
180
- </label>
181
- /
182
- <label htmlFor="cardYear" className="card-item__dateItem">
183
- <SwitchTransition out-in>
184
- <CSSTransition
185
- classNames="slide-fade-up"
186
- timeout={250}
187
- key={cardYear}
188
- >
189
- <span>
190
- {!cardYear ? "YY" : cardYear.toString().substr(-2)}
191
- </span>
192
- </CSSTransition>
193
- </SwitchTransition>
194
- </label>
195
- </div>
196
- <div
197
- className="card-item__date"
198
- onClick={() => onCardElementClick("cardDate")}
199
- ref={cardDateRef}
200
- ></div>
201
- </div>
202
- </div>
203
- </div>
204
-
205
- <div className="card-item__side -back">
206
- <div className="card-item__cover">
207
- <img
208
- alt=""
209
- src={`/card-background/${BACKGROUND_IMG}`}
210
- className="card-item__bg"
211
- />
212
- </div>
213
- <div className="card-item__band" />
214
- <div className="card-item__cvv">
215
- <div className="card-item__cvvTitle">CVV</div>
216
- <div className="card-item__cvvBand">
217
- <TransitionGroup>
218
- {cardCvv.split("").map((val, index) => (
219
- <CSSTransition
220
- classNames="zoom-in-out"
221
- key={index}
222
- timeout={250}
223
- >
224
- <span>*</span>
225
- </CSSTransition>
226
- ))}
227
- </TransitionGroup>
228
- </div>
229
- <div className="card-item__type">
230
- <img
231
- alt="card-type"
232
- src={"/card-type/visa.png"}
233
- className="card-item__typeImg"
234
- />
235
- </div>
236
- </div>
237
- </div>
238
- </div>
239
- );
240
- };
241
-
242
- export default Card;
@@ -1,118 +0,0 @@
1
- import useTranslation from "next-translate/useTranslation";
2
- import PropTypes from "prop-types";
3
- import { HawaChip } from "../../../elements";
4
-
5
- export const PaymentMethod = (props) => {
6
- const { t } = useTranslation("common");
7
- const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
8
- return (
9
- <>
10
- {props.wallet ? (
11
- <PaymentMethodButton
12
- imageURL={`/wallet.png`}
13
- methodCode="wallet"
14
- methodLabel={t("current-wallet")}
15
- handlePaymentMethod={props.handlePaymentMethod}
16
- />
17
- ) : null}
18
- {props.creditcard ? (
19
- <PaymentMethodButton
20
- imageURL={`/visa-master.png`}
21
- methodCode="creditcard"
22
- methodLabel={t("credit-card")}
23
- handlePaymentMethod={props.handlePaymentMethod}
24
- />
25
- ) : null}
26
- {props.mada ? (
27
- <PaymentMethodButton
28
- imageURL={`/mada.png`}
29
- methodCode="mada"
30
- methodLabel={t("mada")}
31
- handlePaymentMethod={props.handlePaymentMethod}
32
- />
33
- ) : null}
34
- {props.stcpay ? (
35
- <PaymentMethodButton
36
- methodCode="stcpay"
37
- methodLabel={"STC Pay"}
38
- chip={t("soon")}
39
- handlePaymentMethod={props.handlePaymentMethod}
40
- />
41
- ) : null}
42
- {props.paypal ? (
43
- <PaymentMethodButton
44
- methodCode="paypal"
45
- methodLabel={t("paypal")}
46
- handlePaymentMethod={props.handlePaymentMethod}
47
- />
48
- ) : null}
49
- {isSafari && applepay && (
50
- <PaymentMethodButton
51
- methodCode="applepay"
52
- methodLabel={t("applepay")}
53
- handlePaymentMethod={props.handlePaymentMethod}
54
- />
55
- )}
56
- {props.googlepay ? (
57
- <PaymentMethodButton
58
- methodCode="googlepay"
59
- chip={t("soon")}
60
- methodLabel={t("googlepay")}
61
- handlePaymentMethod={props.handlePaymentMethod}
62
- />
63
- ) : null}
64
- </>
65
- );
66
- };
67
-
68
- const PaymentMethodButton = (props) => {
69
- return (
70
- <button
71
- disabled={props?.chip ? true : false}
72
- fullWidth
73
- variant="contained"
74
- color="secondary"
75
- style={{
76
- backgroundColor: "white",
77
- opacity: props.chip ? 0.7 : 1,
78
- padding: 20,
79
- width: "90%",
80
- margin: 10
81
- }}
82
- onClick={(e) => props.handlePaymentMethod(e, props.methodCode)}
83
- >
84
- {props.imageURL ? (
85
- <div
86
- style={{
87
- width: "50%",
88
- textAlign: "right",
89
- paddingRight: 20
90
- }}
91
- >
92
- <img
93
- src={props.imageURL}
94
- style={{
95
- maxWidth: 70,
96
- maxHeight: 70,
97
- height: "auto"
98
- }}
99
- />
100
- </div>
101
- ) : null}
102
- <div
103
- style={{
104
- width: "50%",
105
- textAlign: props.imageURL ? "left" : "center"
106
- }}
107
- >
108
- {props.methodLabel}
109
- {props.chip ? <HawaChip label="test" /> : null}x
110
- </div>
111
- </button>
112
- );
113
- };
114
-
115
- PaymentMethod.propTypes = {
116
- wallet: PropTypes.bool,
117
- handlePaymentMethod: PropTypes.func
118
- };