@lmnto/h-mall-shared 1.0.1

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 (262) hide show
  1. package/app.css +457 -0
  2. package/bitbucket-pipelines.yml +223 -0
  3. package/package.json +43 -0
  4. package/public/gif/balloon.gif +0 -0
  5. package/public/gif/gift.gif +0 -0
  6. package/public/img/ai-dialog.png +0 -0
  7. package/public/img/ai-x1-banner.png +0 -0
  8. package/public/img/ai-x1.png +0 -0
  9. package/public/img/alert-Icon.png +0 -0
  10. package/public/img/aleta-payment-kyc-require.png +0 -0
  11. package/public/img/aleta-payment-pending.png +0 -0
  12. package/public/img/aleta-payment-rejected.png +0 -0
  13. package/public/img/aleta-payment-subscription-required.png +0 -0
  14. package/public/img/boost-banner-bg.png +0 -0
  15. package/public/img/boost-banner-right.png +0 -0
  16. package/public/img/boost-banner.png +0 -0
  17. package/public/img/boost-dialog-bg.png +0 -0
  18. package/public/img/boostPower.png +0 -0
  19. package/public/img/boostTooltip.png +0 -0
  20. package/public/img/brand-icon.svg +23 -0
  21. package/public/img/brand-text.svg +11 -0
  22. package/public/img/card-icon.png +0 -0
  23. package/public/img/cashback-Icon.png +0 -0
  24. package/public/img/crown.svg +9 -0
  25. package/public/img/empty-box.png +0 -0
  26. package/public/img/gen3-dialog.png +0 -0
  27. package/public/img/gen3-home-banner-bg.png +0 -0
  28. package/public/img/gen3-image.png +0 -0
  29. package/public/img/gift.png +0 -0
  30. package/public/img/img-placeholder-illustration.svg +6 -0
  31. package/public/img/logo.svg +31 -0
  32. package/public/img/offerBanner.png +0 -0
  33. package/public/img/pagenotfound.png +0 -0
  34. package/public/img/partial-pay-payment-successful.png +0 -0
  35. package/public/img/phoneShippingBG.png +0 -0
  36. package/public/img/placeholder-image.jpg +0 -0
  37. package/public/img/powerIcon.png +0 -0
  38. package/public/img/product-01.png +0 -0
  39. package/public/img/product-02.jpg +0 -0
  40. package/public/img/product-03.jpg +0 -0
  41. package/public/img/product-04.jpg +0 -0
  42. package/public/img/product-05.png +0 -0
  43. package/public/img/product-06.png +0 -0
  44. package/public/img/profile-avatar.svg +12 -0
  45. package/public/img/promotion-icon.png +0 -0
  46. package/public/img/session-expired.png +0 -0
  47. package/public/img/shipping-alert-icon.png +0 -0
  48. package/public/img/shippingIcon.png +0 -0
  49. package/public/img/smart-pay-banner-how.png +0 -0
  50. package/public/img/smart-pay-banner-own.png +0 -0
  51. package/public/img/smart-pay-chose.png +0 -0
  52. package/public/img/smart-pay-easy.png +0 -0
  53. package/public/img/smart-pay-payment.png +0 -0
  54. package/public/img/smart-plan-fire.gif +0 -0
  55. package/public/img/smart-plan-sparkle.gif +0 -0
  56. package/public/img/special.png +0 -0
  57. package/public/img/specialOfferBg.png +0 -0
  58. package/public/img/stop-shipping-banner.png +0 -0
  59. package/public/img/subscriptionBanner.png +0 -0
  60. package/public/img/subscriptionIcon.png +0 -0
  61. package/public/img/successIcon.png +0 -0
  62. package/public/img/wallet-icon.png +0 -0
  63. package/public/img/world-wide-shipping.png +0 -0
  64. package/public/next.svg +1 -0
  65. package/public/vercel.svg +1 -0
  66. package/shared/components/AddressFormComponent.tsx +215 -0
  67. package/shared/components/AddressShippingFormComponent.tsx +223 -0
  68. package/shared/components/AiPaymentDialog.tsx +95 -0
  69. package/shared/components/AppLoadingComponent.tsx +15 -0
  70. package/shared/components/AppLoadingComponentV2.tsx +18 -0
  71. package/shared/components/Button.tsx +48 -0
  72. package/shared/components/BuySubscriptionDialog.tsx +75 -0
  73. package/shared/components/CartDrawerComponent.tsx +324 -0
  74. package/shared/components/CashbackComponent.tsx +48 -0
  75. package/shared/components/CashbackMigrationComponent.tsx +41 -0
  76. package/shared/components/CommissionNonEligibleComponent.tsx +27 -0
  77. package/shared/components/CustomNextImage.tsx +50 -0
  78. package/shared/components/CustomNextLink.tsx +46 -0
  79. package/shared/components/EditAddressFormComponent.tsx +254 -0
  80. package/shared/components/EmptyCartMessageComponent.tsx +25 -0
  81. package/shared/components/EmptyCartMessageForCartPage.tsx +61 -0
  82. package/shared/components/EmptyLegacyOrderMessageForOrdersPage.tsx +52 -0
  83. package/shared/components/EmptyOrderMessageForOrdersPage.tsx +62 -0
  84. package/shared/components/EmptyOrderMessageForShippingOrdersPage.tsx +62 -0
  85. package/shared/components/Footer.tsx +71 -0
  86. package/shared/components/GreetingDialog.tsx +96 -0
  87. package/shared/components/Header.tsx +106 -0
  88. package/shared/components/HoldShippingDialog.tsx +165 -0
  89. package/shared/components/HomeBanners.tsx +298 -0
  90. package/shared/components/InactiveCartDialog.tsx +69 -0
  91. package/shared/components/InputCartQuantity.tsx +342 -0
  92. package/shared/components/Inputfield.tsx +110 -0
  93. package/shared/components/ListItemComponent.tsx +82 -0
  94. package/shared/components/LoadingIconComponent.tsx +284 -0
  95. package/shared/components/OrderNotFoundComponent.tsx +56 -0
  96. package/shared/components/PageHeader.tsx +42 -0
  97. package/shared/components/PhoneNumberCountries.tsx +133 -0
  98. package/shared/components/PhoneShippingDialog.tsx +77 -0
  99. package/shared/components/PickupDialog.tsx +92 -0
  100. package/shared/components/ProductNotFoundComponent.tsx +56 -0
  101. package/shared/components/ProductPriceComponent.tsx +32 -0
  102. package/shared/components/ProfileMenu.tsx +120 -0
  103. package/shared/components/RequestCreditNoteInvoiceDialog.tsx +214 -0
  104. package/shared/components/RequestInvoiceDialog.tsx +194 -0
  105. package/shared/components/SelectCities.tsx +133 -0
  106. package/shared/components/SelectComponent.tsx +334 -0
  107. package/shared/components/SelectCountries.tsx +179 -0
  108. package/shared/components/SelectPickUpStore.tsx +131 -0
  109. package/shared/components/SelectStates.tsx +144 -0
  110. package/shared/components/ServerTime.tsx +68 -0
  111. package/shared/components/SessionDialogComponent.tsx +60 -0
  112. package/shared/components/ShippingAddressFormDialogComponent.tsx +51 -0
  113. package/shared/components/Sidebar.tsx +281 -0
  114. package/shared/components/SpecialOfferDialog.tsx +193 -0
  115. package/shared/components/StatusComponents.tsx +25 -0
  116. package/shared/components/StepperComponent.tsx +79 -0
  117. package/shared/components/StepperSmartPayComponent.tsx +97 -0
  118. package/shared/components/SubscriptionPurchaseDialogComponent.tsx +81 -0
  119. package/shared/components/TableComponent.tsx +144 -0
  120. package/shared/components/TablePaginationComponent.tsx +151 -0
  121. package/shared/components/aleta/AletaManagerComponent.tsx +52 -0
  122. package/shared/components/aleta/KycPendingStatus.tsx +33 -0
  123. package/shared/components/aleta/KycRejectedStatus.tsx +53 -0
  124. package/shared/components/aleta/KycRequiredStatus.tsx +53 -0
  125. package/shared/components/aleta/SubscriptionRequiredStatus.tsx +45 -0
  126. package/shared/components/icons/AletaWalletIcon.tsx +21 -0
  127. package/shared/components/icons/BrandIcon.tsx +97 -0
  128. package/shared/components/icons/BrandText.tsx +47 -0
  129. package/shared/components/icons/CartIcon.tsx +21 -0
  130. package/shared/components/icons/DoneIcon.tsx +27 -0
  131. package/shared/components/icons/HomnifiIcon.tsx +23 -0
  132. package/shared/components/icons/InfoIcon.tsx +16 -0
  133. package/shared/components/icons/SmartPayProductIcon.tsx +31 -0
  134. package/shared/components/payments/DisclaimerAlertDialog.tsx +205 -0
  135. package/shared/components/payments/EmptyAssets.tsx +23 -0
  136. package/shared/components/payments/PaybyWalletItemComponent.tsx +116 -0
  137. package/shared/components/payments/PaymentAssetItemComponent.tsx +101 -0
  138. package/shared/components/payments/RequestProcessingDialog.tsx +123 -0
  139. package/shared/components/payments/WalletSectionManager.tsx +82 -0
  140. package/shared/components/payments/WalletSliderComponent.tsx +326 -0
  141. package/shared/components/payments/WalletTermsAndConditionComponent.tsx +88 -0
  142. package/shared/constants/address-shipping.schema.ts +56 -0
  143. package/shared/constants/address.schema.ts +56 -0
  144. package/shared/constants/app.ts +323 -0
  145. package/shared/constants/environment.ts +23 -0
  146. package/shared/constants/feature-flags.ts +15 -0
  147. package/shared/constants/query-keys.ts +106 -0
  148. package/shared/constants/routes.ts +41 -0
  149. package/shared/constants/socket.ts +15 -0
  150. package/shared/contexts/HomeProductsContext.tsx +51 -0
  151. package/shared/contexts/MainWrapperContext.tsx +289 -0
  152. package/shared/contexts/WebSocketContext.tsx +155 -0
  153. package/shared/hooks/useAddressForm.ts +169 -0
  154. package/shared/hooks/useAddresses.ts +28 -0
  155. package/shared/hooks/useAppForm.ts +39 -0
  156. package/shared/hooks/useCart.ts +207 -0
  157. package/shared/hooks/useCopy.ts +45 -0
  158. package/shared/hooks/useCountries.ts +27 -0
  159. package/shared/hooks/useCustomRouter.ts +51 -0
  160. package/shared/hooks/useDebounce.ts +21 -0
  161. package/shared/hooks/useInvoice.ts +41 -0
  162. package/shared/hooks/useOnlineUser.ts +38 -0
  163. package/shared/hooks/usePayments.ts +101 -0
  164. package/shared/hooks/useShippingAddressForm.ts +70 -0
  165. package/shared/hooks/useShippingAddresses.ts +33 -0
  166. package/shared/hooks/useStores.ts +29 -0
  167. package/shared/hooks/useUserActivity.ts +43 -0
  168. package/shared/i18n/client.ts +27 -0
  169. package/shared/i18n/locales/en.ts +383 -0
  170. package/shared/i18n/locales/it.ts +373 -0
  171. package/shared/i18n/server.ts +7 -0
  172. package/shared/services/addresses.service.ts +27 -0
  173. package/shared/services/api/core/ApiError.ts +29 -0
  174. package/shared/services/api/core/ApiRequestOptions.ts +25 -0
  175. package/shared/services/api/core/ApiResult.ts +11 -0
  176. package/shared/services/api/core/CancelablePromise.ts +130 -0
  177. package/shared/services/api/core/OpenAPI.ts +37 -0
  178. package/shared/services/api/core/request.ts +376 -0
  179. package/shared/services/api/index.ts +64 -0
  180. package/shared/services/api/models/AddAllProductToShippingCartDto.ts +7 -0
  181. package/shared/services/api/models/AddProductToCartDto.ts +8 -0
  182. package/shared/services/api/models/AddProductToShippingCartDto.ts +8 -0
  183. package/shared/services/api/models/AdminPlaceOrderDto.ts +16 -0
  184. package/shared/services/api/models/AssignPickupSerialNumberDto.ts +10 -0
  185. package/shared/services/api/models/CreateUserAddressDto.ts +19 -0
  186. package/shared/services/api/models/DeletCartProductsArrayDto.ts +7 -0
  187. package/shared/services/api/models/GenerateInvoiceDto.ts +7 -0
  188. package/shared/services/api/models/OrderConfirmationEmailDto.ts +8 -0
  189. package/shared/services/api/models/PlaceOrderDto.ts +9 -0
  190. package/shared/services/api/models/PlaceShipmentOrderDto.ts +8 -0
  191. package/shared/services/api/models/ProductBoostDto.ts +18 -0
  192. package/shared/services/api/models/RemoveAssignedSerialNumberDto.ts +9 -0
  193. package/shared/services/api/models/RemoveProductToCartDto.ts +8 -0
  194. package/shared/services/api/models/ShipmentItem.ts +8 -0
  195. package/shared/services/api/models/ShippingCartUpdateBillingAddressesDto.ts +7 -0
  196. package/shared/services/api/models/ShippingCartUpdateShippingMethodDto.ts +7 -0
  197. package/shared/services/api/models/UnfreezeWalletDto.ts +8 -0
  198. package/shared/services/api/models/UpdateCartBillingAddressesDto.ts +7 -0
  199. package/shared/services/api/models/UpdateCartPaymentMethodDto.ts +9 -0
  200. package/shared/services/api/models/UpdateCartShippingMethodDto.ts +7 -0
  201. package/shared/services/api/models/UpdateCartStoreDto.ts +7 -0
  202. package/shared/services/api/models/UpdateProductDto.ts +11 -0
  203. package/shared/services/api/models/UpdateShipmentItemStatusDto.ts +24 -0
  204. package/shared/services/api/models/UpdateShippingCartPaymentMethodDto.ts +9 -0
  205. package/shared/services/api/models/UpdateUserAddressDto.ts +19 -0
  206. package/shared/services/api/models/ValidateAuthCodeDto.ts +8 -0
  207. package/shared/services/api/models/WithdrawOrderWalletDto.ts +8 -0
  208. package/shared/services/api/services/AddressesService.ts +160 -0
  209. package/shared/services/api/services/AdminsDevicesService.ts +28 -0
  210. package/shared/services/api/services/AdminsOrdersService.ts +117 -0
  211. package/shared/services/api/services/AdminsPickupsService.ts +57 -0
  212. package/shared/services/api/services/AdminsProductsService.ts +86 -0
  213. package/shared/services/api/services/CartsService.ts +190 -0
  214. package/shared/services/api/services/CashBackQueueService.ts +39 -0
  215. package/shared/services/api/services/CategoriesService.ts +65 -0
  216. package/shared/services/api/services/DefaultService.ts +19 -0
  217. package/shared/services/api/services/FeaturesFlagsService.ts +20 -0
  218. package/shared/services/api/services/IossQueueService.ts +39 -0
  219. package/shared/services/api/services/OrderCallbackService.ts +67 -0
  220. package/shared/services/api/services/OrderEmailsService.ts +40 -0
  221. package/shared/services/api/services/OrderImportService.ts +228 -0
  222. package/shared/services/api/services/OrdersService.ts +183 -0
  223. package/shared/services/api/services/PaymentGatewayService.ts +19 -0
  224. package/shared/services/api/services/PaymentsService.ts +88 -0
  225. package/shared/services/api/services/ProductsService.ts +67 -0
  226. package/shared/services/api/services/ShipmentOrderCallbackService.ts +67 -0
  227. package/shared/services/api/services/ShipmentOrdersService.ts +88 -0
  228. package/shared/services/api/services/ShipmentsService.ts +30 -0
  229. package/shared/services/api/services/ShippingCartService.ts +247 -0
  230. package/shared/services/api/services/ShippingMethodsService.ts +20 -0
  231. package/shared/services/api/services/StoresService.ts +25 -0
  232. package/shared/services/api/services/SyncServiceQueueService.ts +39 -0
  233. package/shared/services/api/services/UpgradeOrdersService.ts +26 -0
  234. package/shared/services/api/services/UsersAuthService.ts +45 -0
  235. package/shared/services/api/services/UsersService.ts +53 -0
  236. package/shared/services/api/services/XeraQueueService.ts +39 -0
  237. package/shared/services/index.ts +0 -0
  238. package/shared/services/payment-method.service.ts +29 -0
  239. package/shared/stores/cartStore.ts +108 -0
  240. package/shared/stores/countriesStore.ts +62 -0
  241. package/shared/stores/formStore.ts +19 -0
  242. package/shared/stores/loadingStore.ts +12 -0
  243. package/shared/stores/userStore.ts +32 -0
  244. package/shared/types/SelectComponent.types.ts +31 -0
  245. package/shared/types/addressForm.ts +27 -0
  246. package/shared/types/cart.ts +208 -0
  247. package/shared/types/category.ts +6 -0
  248. package/shared/types/creditNote.ts +0 -0
  249. package/shared/types/feature-flags.ts +5 -0
  250. package/shared/types/icon.ts +5 -0
  251. package/shared/types/index.d.ts +84 -0
  252. package/shared/types/order.ts +332 -0
  253. package/shared/types/pagination.ts +5 -0
  254. package/shared/types/payments.ts +68 -0
  255. package/shared/types/product.ts +54 -0
  256. package/shared/types/shoppingCart.ts +219 -0
  257. package/shared/types/upgradeCart.ts +226 -0
  258. package/shared/types/user.ts +36 -0
  259. package/shared/utils/app.util.ts +261 -0
  260. package/shared/utils/notifications.util.ts +39 -0
  261. package/shared/utils/user-session.util.ts +171 -0
  262. package/tailwind.config.ts +234 -0
@@ -0,0 +1,223 @@
1
+ import { FormEventHandler, useCallback } from "react";
2
+ import { UseFormReturn } from "react-hook-form";
3
+
4
+ import ButtonCustom from "../components/Button";
5
+ import Inputfield from "../components/Inputfield";
6
+ import { PhoneNumberCountries } from "../components/PhoneNumberCountries";
7
+ import { SelectCountries } from "../components/SelectCountries";
8
+ import { useAddressForm } from "../hooks/useAddressForm";
9
+ // import { useShippingAddressForm } from '../hooks/useShippingAddressForm';
10
+ import { _useScopedI18n } from "../i18n/client";
11
+ import { countriesStore } from "../stores/countriesStore";
12
+ import { useFormStore } from "../stores/formStore";
13
+ import { SelectCities } from "./SelectCities";
14
+ import { SelectStates } from "./SelectStates";
15
+
16
+ export type AddressShippingFormComponentProps = {
17
+ formId: string;
18
+ isLoading: boolean;
19
+ proceedSubmit: FormEventHandler<HTMLButtonElement>;
20
+ onCancel?: () => void;
21
+ };
22
+
23
+ export default function AddressShippingFormComponent({
24
+ formId,
25
+ isLoading,
26
+ proceedSubmit,
27
+ }: AddressShippingFormComponentProps) {
28
+ //
29
+ const scopeT = _useScopedI18n("sharedComponents.addressFormComponent");
30
+
31
+ const { reactHookUseForm } = useFormStore();
32
+ const { watch } =
33
+ (reactHookUseForm as { [key: string]: UseFormReturn<any> })?.[formId] ?? {};
34
+ const countryIdField = watch?.(`countryId`);
35
+ const zipCodeExampleField = watch?.(`zipCodeExample`);
36
+
37
+ const {
38
+ shippingStates,
39
+ shippingCities,
40
+ loading,
41
+ loadingCities,
42
+ setLoading,
43
+ setShippingLoadingCities,
44
+ } = countriesStore();
45
+
46
+ const { getShippingStatesByCountry, getShippingCityByStateAndCountry } =
47
+ useAddressForm();
48
+
49
+ const handleGetCities = useCallback(
50
+ (state: any) => {
51
+ setShippingLoadingCities(true);
52
+ getShippingCityByStateAndCountry.mutate(state);
53
+ },
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ [],
56
+ );
57
+
58
+ const handleGetState = useCallback(
59
+ async (country: number) => {
60
+ setLoading(true);
61
+ setShippingLoadingCities(true);
62
+ const data = await getShippingStatesByCountry.mutateAsync(country);
63
+
64
+ if (data && data?.length > 0) {
65
+ setShippingLoadingCities(false);
66
+ } else {
67
+ handleGetCities({
68
+ countryId: country,
69
+ });
70
+ }
71
+ },
72
+ [
73
+ setLoading,
74
+ setShippingLoadingCities,
75
+ handleGetCities,
76
+ getShippingStatesByCountry,
77
+ ],
78
+ );
79
+
80
+ return (
81
+ <>
82
+ <form action="" method="post">
83
+ <div className="grid grid-cols-12 gap-y-4 md:gap-y-7 md:gap-x-5 mb-5">
84
+ <div className="col-span-12 md:col-span-6 relative">
85
+ <Inputfield
86
+ title={`${scopeT("firstName")} *`}
87
+ placeholder={scopeT("firstName")}
88
+ className={undefined}
89
+ value={undefined}
90
+ readOnly={undefined}
91
+ name="firstName"
92
+ formId={formId}
93
+ />
94
+ </div>
95
+ <div className="col-span-12 md:col-span-6 relative">
96
+ <Inputfield
97
+ title={`${scopeT("lastName")} *`}
98
+ className={undefined}
99
+ placeholder={scopeT("lastName")}
100
+ value={undefined}
101
+ readOnly={undefined}
102
+ name="lastName"
103
+ formId={formId}
104
+ />
105
+ </div>
106
+ <div className="col-span-12 relative">
107
+ <Inputfield
108
+ title={`${scopeT("address")} *`}
109
+ className={undefined}
110
+ placeholder={scopeT("address")}
111
+ value={undefined}
112
+ readOnly={undefined}
113
+ name="address"
114
+ formId={formId}
115
+ />
116
+ </div>
117
+ <div className="col-span-12 relative">
118
+ <Inputfield
119
+ title={`${scopeT("flatHouseBuilding")}`}
120
+ className={undefined}
121
+ placeholder={`${scopeT("flatHouseBuilding")}`}
122
+ value={undefined}
123
+ readOnly={undefined}
124
+ name="buildingInfo"
125
+ formId={formId}
126
+ />
127
+ </div>
128
+ <div className="col-span-12 md:col-span-6 relative">
129
+ <SelectCountries
130
+ title={`${scopeT("selectCountry")} *`}
131
+ className={undefined}
132
+ placeholder={scopeT("selectCountry")}
133
+ name="countryId"
134
+ formId={formId}
135
+ onCountrySelected={handleGetState}
136
+ forShipping={true}
137
+ />
138
+ </div>
139
+ <div className="col-span-12 md:col-span-6 relative">
140
+ {shippingStates?.length > 0 && countryIdField ? (
141
+ <SelectStates
142
+ title={`${scopeT("state")} *`}
143
+ className={undefined}
144
+ placeholder={scopeT("state")}
145
+ name="state"
146
+ formId={formId}
147
+ onStateSelected={handleGetCities}
148
+ forShipping={true}
149
+ />
150
+ ) : (
151
+ <Inputfield
152
+ title={`${scopeT("state")} *`}
153
+ className={undefined}
154
+ placeholder={scopeT("state")}
155
+ value={undefined}
156
+ readOnly={loading}
157
+ name="state"
158
+ formId={formId}
159
+ disabled={loading}
160
+ />
161
+ )}
162
+ </div>
163
+ <div className="col-span-12 md:col-span-6 relative">
164
+ {shippingCities?.length > 0 && countryIdField ? (
165
+ <SelectCities
166
+ title={`${scopeT("city")} *`}
167
+ className={undefined}
168
+ placeholder={scopeT("city")}
169
+ name="city"
170
+ formId={formId}
171
+ forShipping={true}
172
+ />
173
+ ) : (
174
+ <Inputfield
175
+ title={`${scopeT("city")} *`}
176
+ className={undefined}
177
+ placeholder={scopeT("city")}
178
+ value={undefined}
179
+ readOnly={loading}
180
+ name="city"
181
+ formId={formId}
182
+ disabled={loadingCities}
183
+ />
184
+ )}
185
+ </div>
186
+ <div className="col-span-12 md:col-span-6 relative">
187
+ <Inputfield
188
+ title={`${scopeT("zipCode")} *`}
189
+ className={undefined}
190
+ placeholder={
191
+ zipCodeExampleField?.length > 0
192
+ ? zipCodeExampleField
193
+ : scopeT("zipCode")
194
+ }
195
+ value={undefined}
196
+ readOnly={undefined}
197
+ name="postalCode"
198
+ formId={formId}
199
+ format={
200
+ zipCodeExampleField?.length > 0 ? zipCodeExampleField : null
201
+ }
202
+ />
203
+ </div>
204
+ <div className="col-span-12 relative">
205
+ <PhoneNumberCountries formId={formId} fieldName="countryCode" />
206
+ </div>
207
+ </div>
208
+ <div className="flex gap-3 justify-end w-full">
209
+ <ButtonCustom
210
+ className=""
211
+ icon={undefined}
212
+ type="submit"
213
+ onClick={proceedSubmit}
214
+ loading={isLoading}
215
+ disabled={isLoading}
216
+ >
217
+ {scopeT("submitBtn")}
218
+ </ButtonCustom>
219
+ </div>
220
+ </form>
221
+ </>
222
+ );
223
+ }
@@ -0,0 +1,95 @@
1
+ import {
2
+ Dialog,
3
+ DialogBody,
4
+ DialogFooter,
5
+ DialogHeader,
6
+ IconButton,
7
+ Typography,
8
+ } from "@material-tailwind/react";
9
+ import React from "react";
10
+ import { IoIosCloseCircleOutline } from "react-icons/io";
11
+
12
+ import aiImage from "../../public/img/ai-dialog.png";
13
+ import ButtonCustom from "./Button";
14
+ import CustomNextImage from "./CustomNextImage";
15
+
16
+ export function AiPaymentDialog({ handleOpen, open, action }) {
17
+ return (
18
+ <>
19
+ <Dialog
20
+ size="xs"
21
+ open={open}
22
+ handler={handleOpen}
23
+ className=" px-3 xl:px-5 py-4 boostDialogBg"
24
+ >
25
+ <DialogHeader className="justify-center">
26
+ <IconButton
27
+ size="sm"
28
+ variant="text"
29
+ className="!absolute right-3 top-3 outline-none"
30
+ onClick={async () => {
31
+ handleOpen(false);
32
+ }}
33
+ >
34
+ <IoIosCloseCircleOutline className="w-6 h-6 text-gray-500 cursor-pointer" />
35
+ </IconButton>
36
+ </DialogHeader>
37
+ <DialogBody className="max-h-[600px] overflow-y-auto">
38
+ <div className="flex flex-wrap-reverse justify-center xl:justify-between items-center gap-3 mb-4">
39
+ <div>
40
+ <Typography
41
+ variant="paragraph"
42
+ className="text-lg max-w-[30px] md:text-4xl font-bold text-[#9451A0] uppercase"
43
+ >
44
+ Important Information
45
+ </Typography>
46
+ <Typography
47
+ variant="paragraph"
48
+ className="text-sm md:text-lg text-[#E27500] max-w-[200px] font-normal"
49
+ >
50
+ Maintain Your NodeK Rewards{" "}
51
+ </Typography>
52
+ </div>
53
+ <div>
54
+ <CustomNextImage
55
+ src={aiImage.src}
56
+ alt={"boost image"}
57
+ width={164}
58
+ height={163}
59
+ />
60
+ </div>
61
+ </div>
62
+ <div className="mb-4">
63
+ <Typography
64
+ variant="paragraph"
65
+ className="text-base text-black-900 font-normal"
66
+ >
67
+ To ensure your <strong>NodeK</strong> rewards remain active,
68
+ please complete your add-on purchase within <strong>30</strong>{" "}
69
+ days of its official launch.
70
+ </Typography>
71
+ </div>
72
+
73
+ <Typography
74
+ variant="paragraph"
75
+ className="text-base text-[#E27500] font-normal"
76
+ >
77
+ After this period,{" "}
78
+ <strong> reward accumulation will be temporarily paused </strong>{" "}
79
+ until the purchase is completed.
80
+ </Typography>
81
+ </DialogBody>
82
+ <DialogFooter className="justify-center">
83
+ <ButtonCustom
84
+ icon={undefined}
85
+ onClick={() => {
86
+ action();
87
+ }}
88
+ >
89
+ Continue
90
+ </ButtonCustom>
91
+ </DialogFooter>
92
+ </Dialog>
93
+ </>
94
+ );
95
+ }
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ import React from "react";
4
+
5
+ import AppLoadingComponentV2 from "./AppLoadingComponentV2";
6
+
7
+ export default function AppLoadingComponent({}: any) {
8
+ return (
9
+ <>
10
+ <div className="flex justify-center bg-white bg-opacity-50 items-center fixed top-0 bottom-0 left-0 right-0">
11
+ <AppLoadingComponentV2 />
12
+ </div>
13
+ </>
14
+ );
15
+ }
@@ -0,0 +1,18 @@
1
+ "use client";
2
+
3
+ import React from "react";
4
+
5
+ import LoadingIconComponent from "./LoadingIconComponent";
6
+
7
+ export default function AppLoadingComponent() {
8
+ return (
9
+ <>
10
+ <div
11
+ className="flex justify-center bg-white bg-opacity-50 items-center fixed top-0 bottom-0 left-0 right-0"
12
+ style={{ zIndex: 9999999 }}
13
+ >
14
+ <LoadingIconComponent />
15
+ </div>
16
+ </>
17
+ );
18
+ }
@@ -0,0 +1,48 @@
1
+ import { Button, ButtonProps } from "@material-tailwind/react";
2
+
3
+ export type ButtonCustomProps = ButtonProps & {
4
+ icon: any;
5
+ iconPosition?: "left" | "right";
6
+ size?: "sm" | "md" | "lg";
7
+ resetClass?: boolean;
8
+ fullWidth?: boolean;
9
+ };
10
+
11
+ export default function ButtonCustom({
12
+ icon,
13
+ iconPosition,
14
+ resetClass,
15
+ disabled,
16
+ size = "md",
17
+ fullWidth,
18
+ ...props
19
+ }: ButtonCustomProps) {
20
+ const sizeClasses = {
21
+ // sm: 'px-4 py-2',
22
+ // md: 'px-8 py-3',
23
+ // lg: 'px-14 py-2.5',
24
+ };
25
+
26
+ return (
27
+ <>
28
+ <Button
29
+ {...props}
30
+ color="purple"
31
+ className={
32
+ resetClass
33
+ ? props.className
34
+ : `${sizeClasses[size]} ${props.className} flex items-center justify-center gap-2 font-medium
35
+ px-5 py-3 md:px-8 md:py-2.5 lg:px-9 lg:py-3
36
+ hover:opacity-100
37
+ text-sm md:text-base rounded-xl capitalize shadow-none outline-none ${!props.variant ? "primary-button" : ""}`
38
+ }
39
+ disabled={disabled ?? false}
40
+ fullWidth={fullWidth}
41
+ >
42
+ {iconPosition == "left" || (!iconPosition && icon)}
43
+ {props.children}
44
+ {iconPosition == "right" && icon}
45
+ </Button>
46
+ </>
47
+ );
48
+ }
@@ -0,0 +1,75 @@
1
+ "use client";
2
+
3
+ import {
4
+ Dialog,
5
+ DialogBody,
6
+ DialogFooter,
7
+ DialogHeader,
8
+ } from "@material-tailwind/react";
9
+ import React, { useCallback, useEffect } from "react";
10
+
11
+ import subscriptionIcon from "../../public/img/subscriptionIcon.png";
12
+ import { ROUTES } from "../constants/routes";
13
+ import useCustomRouter from "../hooks/useCustomRouter";
14
+ import { _useScopedI18n } from "../i18n/client";
15
+ import ButtonCustom from "./Button";
16
+ import CustomNextImage from "./CustomNextImage";
17
+
18
+ type SubscriptionPurchaseDialogComponentProps = {
19
+ showSubscriptionDialog: boolean;
20
+ onClose: () => void;
21
+ };
22
+
23
+ export function SubscriptionPurchaseDialogComponent({
24
+ showSubscriptionDialog,
25
+ onClose,
26
+ }: SubscriptionPurchaseDialogComponentProps) {
27
+ //
28
+ const scopeT = _useScopedI18n("sharedComponents.buySubscriptionComponent");
29
+
30
+ const [open, setOpen] = React.useState(showSubscriptionDialog);
31
+ const { push } = useCustomRouter();
32
+
33
+ useEffect(() => {
34
+ setOpen(showSubscriptionDialog);
35
+ }, [showSubscriptionDialog]);
36
+
37
+ const handleClose = () => {
38
+ setOpen(false);
39
+ onClose();
40
+ };
41
+
42
+ const handleBuySubscription = useCallback(() => {
43
+ // redirect to subscription page
44
+ return push(`${ROUTES.dashboard.products}?category=subscription`);
45
+ }, [push]);
46
+
47
+ return (
48
+ <>
49
+ <Dialog
50
+ open={open}
51
+ handler={handleClose}
52
+ size="xs"
53
+ className="md:!max-w-[500px] md:!min-w-[500px] py-4 px-0 md:p-7 flex flex-col items-center justify-center"
54
+ >
55
+ <CustomNextImage
56
+ src={subscriptionIcon.src}
57
+ alt="SessionIcon"
58
+ width={80}
59
+ height={80}
60
+ />
61
+ <DialogHeader className="text-lg md:text-xl font-semibold text-black-500 pb-0 text-center">
62
+ {scopeT("header")}
63
+ </DialogHeader>
64
+ <DialogBody className="text-sm md:text-base text-slate-400 font-medium text-center">
65
+ {scopeT("description")}
66
+ </DialogBody>
67
+ <DialogFooter className="pb-0">
68
+ <ButtonCustom icon={undefined} onClick={handleBuySubscription}>
69
+ {scopeT(`redirectBtn`)}
70
+ </ButtonCustom>
71
+ </DialogFooter>
72
+ </Dialog>
73
+ </>
74
+ );
75
+ }