ordering-components-external 13.2.13 → 13.2.15

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 (554) hide show
  1. package/.babelrc +22 -22
  2. package/.vscode/settings.json +3 -3
  3. package/_bundles/0.ordering-component.e9db5c24b106074faad6.js +1 -0
  4. package/_bundles/{1.ordering-component.aa21761da1477298dd80.js → 1.ordering-component.e9db5c24b106074faad6.js} +1 -1
  5. package/_bundles/{2.ordering-component.aa21761da1477298dd80.js → 2.ordering-component.e9db5c24b106074faad6.js} +1 -1
  6. package/_bundles/{4.ordering-component.aa21761da1477298dd80.js → 4.ordering-component.e9db5c24b106074faad6.js} +1 -1
  7. package/_bundles/{5.ordering-component.aa21761da1477298dd80.js → 5.ordering-component.e9db5c24b106074faad6.js} +1 -1
  8. package/_bundles/{6.ordering-component.aa21761da1477298dd80.js → 6.ordering-component.e9db5c24b106074faad6.js} +1 -1
  9. package/_bundles/7.ordering-component.e9db5c24b106074faad6.js +2 -0
  10. package/_bundles/7.ordering-component.e9db5c24b106074faad6.js.LICENSE.txt +1 -0
  11. package/_bundles/{8.ordering-component.aa21761da1477298dd80.js → 8.ordering-component.e9db5c24b106074faad6.js} +1 -1
  12. package/_bundles/ordering-component.e9db5c24b106074faad6.js +2 -0
  13. package/_bundles/{ordering-component.aa21761da1477298dd80.js.LICENSE.txt → ordering-component.e9db5c24b106074faad6.js.LICENSE.txt} +0 -9
  14. package/_modules/components/AddressDetails/index.js +35 -35
  15. package/_modules/components/AddressForm/index.js +63 -63
  16. package/_modules/components/AddressList/index.js +56 -56
  17. package/_modules/components/Analitycs/index.js +11 -11
  18. package/_modules/components/AnalyticsSegment/index.js +11 -11
  19. package/_modules/components/AppleLogin/index.js +37 -37
  20. package/_modules/components/BaseComponent/index.js +15 -15
  21. package/_modules/components/BusinessAndProductList/index.js +43 -43
  22. package/_modules/components/BusinessBasicInformation/index.js +30 -30
  23. package/_modules/components/BusinessController/index.js +65 -65
  24. package/_modules/components/BusinessInformation/BusinessOption/index.js +22 -22
  25. package/_modules/components/BusinessInformation/index.js +24 -24
  26. package/_modules/components/BusinessList/index.js +57 -57
  27. package/_modules/components/BusinessMenuListing/index.js +30 -30
  28. package/_modules/components/BusinessProductsCategories/index.js +18 -18
  29. package/_modules/components/BusinessProductsSearch/index.js +16 -16
  30. package/_modules/components/BusinessReviews/index.js +37 -37
  31. package/_modules/components/BusinessSearchList/index.js +34 -34
  32. package/_modules/components/BusinessSortControl/index.js +34 -34
  33. package/_modules/components/BusinessTypeFilter/index.js +36 -36
  34. package/_modules/components/BusinessesMap/index.js +33 -33
  35. package/_modules/components/Cart/index.js +48 -48
  36. package/_modules/components/CartStoresListing/index.js +15 -15
  37. package/_modules/components/Checkout/index.js +83 -83
  38. package/_modules/components/CmsContent/index.js +30 -30
  39. package/_modules/components/Contacts/index.js +45 -45
  40. package/_modules/components/CouponControl/index.js +29 -29
  41. package/_modules/components/DragAndDrop/index.js +4 -4
  42. package/_modules/components/DriverList/index.js +31 -31
  43. package/_modules/components/DriverTips/index.js +41 -41
  44. package/_modules/components/Emitter/index.js +3 -3
  45. package/_modules/components/FacebookLoginButton/index.js +50 -50
  46. package/_modules/components/FacebookPixel/index.js +8 -8
  47. package/_modules/components/FavoriteList/index.js +43 -43
  48. package/_modules/components/FirebaseGoogleLoginButton/index.js +21 -21
  49. package/_modules/components/FloatingButton/index.js +22 -22
  50. package/_modules/components/ForgotPasswordForm/index.js +53 -53
  51. package/_modules/components/GiftCard/GiftCardOrdersList/index.js +16 -16
  52. package/_modules/components/GiftCard/PurchaseGiftCard/index.js +17 -17
  53. package/_modules/components/GiftCard/RedeemGiftCard/index.js +14 -14
  54. package/_modules/components/GiftCard/SendGiftCard/index.js +14 -14
  55. package/_modules/components/GoogleAutocompleteInput/index.js +25 -25
  56. package/_modules/components/GoogleIdentity/index.js +38 -38
  57. package/_modules/components/GoogleLoginButton/index.js +61 -61
  58. package/_modules/components/GoogleMaps/index.js +44 -44
  59. package/_modules/components/GpsButton/index.js +27 -27
  60. package/_modules/components/LanguageSelector/index.js +38 -38
  61. package/_modules/components/LoginForm/index.js +72 -72
  62. package/_modules/components/LogoutAction/index.js +28 -28
  63. package/_modules/components/MainSearch/index.js +41 -41
  64. package/_modules/components/MapView/index.js +12 -12
  65. package/_modules/components/MenuControl/index.js +58 -58
  66. package/_modules/components/Messages/index.js +35 -35
  67. package/_modules/components/MomentOption/index.js +57 -57
  68. package/_modules/components/MultiCartCreate/index.js +10 -10
  69. package/_modules/components/MultiCartsPaymethodsAndWallets/index.js +22 -22
  70. package/_modules/components/MultiCheckout/index.js +34 -34
  71. package/_modules/components/MultiOrdersDetails/index.js +19 -19
  72. package/_modules/components/MyOrders/index.js +35 -35
  73. package/_modules/components/MyOrdersList/index.js +35 -35
  74. package/_modules/components/NewOrderNotification/index.js +8 -8
  75. package/_modules/components/OrderChange/index.js +30 -30
  76. package/_modules/components/OrderDetails/index.js +66 -66
  77. package/_modules/components/OrderList/index.js +67 -67
  78. package/_modules/components/OrderListGroups/index.js +87 -81
  79. package/_modules/components/OrderReview/index.js +35 -35
  80. package/_modules/components/OrderTypeControl/index.js +23 -23
  81. package/_modules/components/OrderVerticalList/index.js +15 -15
  82. package/_modules/components/OrdersControlFilters/index.js +15 -15
  83. package/_modules/components/OrdersDashboardComponents/Appointments/index.js +14 -14
  84. package/_modules/components/OrdersDashboardComponents/BusinessProductsListing/index.js +51 -51
  85. package/_modules/components/OrdersDashboardComponents/CheckPassword/index.js +35 -35
  86. package/_modules/components/OrdersDashboardComponents/CityList/index.js +33 -33
  87. package/_modules/components/OrdersDashboardComponents/CountryList/index.js +32 -32
  88. package/_modules/components/OrdersDashboardComponents/CustomOrderDetails/index.js +25 -25
  89. package/_modules/components/OrdersDashboardComponents/DashboardBusinessList/index.js +75 -75
  90. package/_modules/components/OrdersDashboardComponents/DashboardOrdersList/index.js +77 -77
  91. package/_modules/components/OrdersDashboardComponents/DriversList/index.js +73 -73
  92. package/_modules/components/OrdersDashboardComponents/ExportCSV/index.js +26 -26
  93. package/_modules/components/OrdersDashboardComponents/GiftCardsList/index.js +16 -16
  94. package/_modules/components/OrdersDashboardComponents/GoogleMapsApiKeySetting/index.js +14 -14
  95. package/_modules/components/OrdersDashboardComponents/LogisticInformation/index.js +29 -29
  96. package/_modules/components/OrdersDashboardComponents/Logistics/index.js +29 -29
  97. package/_modules/components/OrdersDashboardComponents/Messages/index.js +42 -42
  98. package/_modules/components/OrdersDashboardComponents/MetaFields/index.js +40 -40
  99. package/_modules/components/OrdersDashboardComponents/OrderDetails/index.js +54 -54
  100. package/_modules/components/OrdersDashboardComponents/OrderNotification/index.js +19 -19
  101. package/_modules/components/OrdersDashboardComponents/OrdersFilter/index.js +73 -73
  102. package/_modules/components/OrdersDashboardComponents/OrdersManage/index.js +74 -74
  103. package/_modules/components/OrdersDashboardComponents/PointsWalletLevels/index.js +38 -38
  104. package/_modules/components/OrdersDashboardComponents/ReviewCustomer/index.js +26 -26
  105. package/_modules/components/OrdersDashboardComponents/Schedule/index.js +56 -56
  106. package/_modules/components/OrdersDashboardComponents/SettingsList/index.js +51 -51
  107. package/_modules/components/OrdersDashboardComponents/UserFormDetails/index.js +82 -82
  108. package/_modules/components/OrdersDashboardComponents/UsersList/index.js +72 -72
  109. package/_modules/components/OrdersDashboardComponents/WebsocketStatus/index.js +10 -10
  110. package/_modules/components/PageBanner/index.js +17 -17
  111. package/_modules/components/PaymentOptionCash/index.js +26 -26
  112. package/_modules/components/PaymentOptionPaypal/index.js +35 -35
  113. package/_modules/components/PaymentOptionSquare/index.js +22 -22
  114. package/_modules/components/PaymentOptionStripe/index.js +45 -45
  115. package/_modules/components/PaymentOptionStripeDirect/index.js +34 -34
  116. package/_modules/components/PaymentOptionStripeRedirect/StripeRedirectForm/index.js +24 -24
  117. package/_modules/components/PaymentOptionStripeRedirect/index.js +39 -39
  118. package/_modules/components/PaymentOptionWallet/index.js +11 -11
  119. package/_modules/components/PaymentOptions/index.js +37 -37
  120. package/_modules/components/PaymethodList/index.js +30 -30
  121. package/_modules/components/PhoneAutocomplete/index.js +30 -30
  122. package/_modules/components/PlaceSpot/index.js +15 -15
  123. package/_modules/components/Popup/index.js +39 -39
  124. package/_modules/components/ProductComponent/index.js +36 -36
  125. package/_modules/components/ProductForm/index.js +145 -145
  126. package/_modules/components/ProductImages/index.js +20 -20
  127. package/_modules/components/ProductIngredient/index.js +19 -19
  128. package/_modules/components/ProductItemAccordion/index.js +18 -18
  129. package/_modules/components/ProductOption/index.js +9 -9
  130. package/_modules/components/ProductOptionSuboption/index.js +36 -36
  131. package/_modules/components/ProductShare/index.js +26 -26
  132. package/_modules/components/ProductsList/index.js +26 -26
  133. package/_modules/components/ProductsListing/index.js +50 -50
  134. package/_modules/components/ProfessionalInfo/index.js +34 -34
  135. package/_modules/components/PromotionsController/index.js +10 -10
  136. package/_modules/components/QueryLoginSpoonity/index.js +30 -30
  137. package/_modules/components/ReCaptcha/index.js +9 -9
  138. package/_modules/components/ResetPassword/index.js +30 -30
  139. package/_modules/components/ReviewCustomer/index.js +26 -26
  140. package/_modules/components/ReviewDriver/index.js +33 -33
  141. package/_modules/components/ReviewProduct/index.js +38 -38
  142. package/_modules/components/SearchOptions/index.js +23 -23
  143. package/_modules/components/Sessions/index.js +33 -33
  144. package/_modules/components/SignupForm/index.js +71 -71
  145. package/_modules/components/SingleBusinessCard/index.js +29 -29
  146. package/_modules/components/SingleOrderCard/index.js +32 -32
  147. package/_modules/components/SingleProductCard/index.js +28 -28
  148. package/_modules/components/SingleProfessionalCard/index.js +28 -28
  149. package/_modules/components/SmartAppBanner/index.js +13 -13
  150. package/_modules/components/StoreProductList/index.js +46 -46
  151. package/_modules/components/StripeElementsForm/CardForm/index.js +36 -36
  152. package/_modules/components/StripeElementsForm/index.js +25 -25
  153. package/_modules/components/UpsellingPage/index.js +27 -27
  154. package/_modules/components/UserFormDetails/index.js +85 -85
  155. package/_modules/components/UserVerification/index.js +28 -28
  156. package/_modules/components/WalletList/index.js +11 -11
  157. package/_modules/components/WebsocketStatus/index.js +10 -10
  158. package/_modules/components/WrapperGoogleMaps/index.js +9 -9
  159. package/_modules/contexts/ApiContext/index.js +13 -13
  160. package/_modules/contexts/BillingContext/index.js +7 -7
  161. package/_modules/contexts/BusinessContext/index.js +18 -18
  162. package/_modules/contexts/ConfigContext/index.js +19 -19
  163. package/_modules/contexts/CustomerContext/index.js +10 -10
  164. package/_modules/contexts/EventContext/index.js +9 -9
  165. package/_modules/contexts/LanguageContext/index.js +28 -28
  166. package/_modules/contexts/OptimizationLoadContext/index.js +16 -16
  167. package/_modules/contexts/OrderContext/index.js +97 -97
  168. package/_modules/contexts/OrderingContext/index.js +7 -7
  169. package/_modules/contexts/OrderingThemeContext/index.js +19 -19
  170. package/_modules/contexts/ProductContext/index.js +14 -14
  171. package/_modules/contexts/SessionContext/index.js +23 -23
  172. package/_modules/contexts/SiteContext/index.js +18 -18
  173. package/_modules/contexts/ToastContext/index.js +4 -4
  174. package/_modules/contexts/UtilsContext/index.js +14 -14
  175. package/_modules/contexts/ValidationsFieldsContext/index.js +9 -9
  176. package/_modules/contexts/WebsocketContext/index.js +17 -17
  177. package/_modules/contexts/WebsocketContext/socket.js +4 -4
  178. package/_modules/native/src/NativeStrategy/index.js +9 -9
  179. package/_modules/native/src/contexts/OrderingContext/index.js +7 -7
  180. package/_modules/utils/index.js +2 -2
  181. package/_modules/webStrategy/index.js +8 -8
  182. package/cypress/fixtures/example.json +4 -4
  183. package/cypress/integration/naked/BusinessProductsCategories.spec.js +9 -9
  184. package/cypress/integration/naked/PhoneAutocomplete.spec.js +22 -22
  185. package/cypress/integration/naked/activeOrders.spec.js +15 -15
  186. package/cypress/integration/naked/addressDetails.spec.js +10 -10
  187. package/cypress/integration/naked/appleLogin.spec.js +14 -14
  188. package/cypress/integration/naked/businessBasicInformation.spec.js +14 -14
  189. package/cypress/integration/naked/businessController.spec.js +9 -9
  190. package/cypress/integration/naked/businessInformation.spec.js +19 -19
  191. package/cypress/integration/naked/businessProductsSearch.spec.js +9 -9
  192. package/cypress/integration/naked/businessReviews.spec.js +16 -16
  193. package/cypress/integration/naked/businessSortControl.spec.js +9 -9
  194. package/cypress/integration/naked/businessTypeFilter.spec.js +10 -10
  195. package/cypress/integration/naked/businessesMap.spec.js +13 -13
  196. package/cypress/integration/naked/cms.spec.js +9 -9
  197. package/cypress/integration/naked/config.spec.js +34 -34
  198. package/cypress/integration/naked/driverTips.spec.js +10 -10
  199. package/cypress/integration/naked/events.spec.js +13 -13
  200. package/cypress/integration/naked/facebookLogin.spec.js +13 -13
  201. package/cypress/integration/naked/floatingButton.spec.js +13 -13
  202. package/cypress/integration/naked/forgotPassword.spec.js +20 -20
  203. package/cypress/integration/naked/googleLogin.spec.js +11 -11
  204. package/cypress/integration/naked/languageExamples.spec.js +25 -25
  205. package/cypress/integration/naked/languageSelector.spec.js +10 -10
  206. package/cypress/integration/naked/login.spec.js +38 -38
  207. package/cypress/integration/naked/logout.spec.js +15 -15
  208. package/cypress/integration/naked/mainSearch.spec.js +9 -9
  209. package/cypress/integration/naked/menuControl.spec.js +9 -9
  210. package/cypress/integration/naked/messages.spec.js +25 -25
  211. package/cypress/integration/naked/momentOption.spec.js +10 -10
  212. package/cypress/integration/naked/myOrders.spec.js +11 -11
  213. package/cypress/integration/naked/myOrdersList.spec.js +9 -9
  214. package/cypress/integration/naked/orderContextAdvanced.spec.js +23 -23
  215. package/cypress/integration/naked/orderDetails.spec.js +11 -11
  216. package/cypress/integration/naked/paymentOptionCash.spec.js +21 -21
  217. package/cypress/integration/naked/paymentOptionStripe.spec.js +11 -11
  218. package/cypress/integration/naked/paymentOptionStripeDirect.spec.js +11 -11
  219. package/cypress/integration/naked/paymentOptions.spec.js +9 -9
  220. package/cypress/integration/naked/popupExample.spec.js +17 -17
  221. package/cypress/integration/naked/productImages.spec.js +11 -11
  222. package/cypress/integration/naked/productOptionExample.spec.js +21 -21
  223. package/cypress/integration/naked/productShare.spec.js +9 -9
  224. package/cypress/integration/naked/productsList.spec.js +9 -9
  225. package/cypress/integration/naked/resetPassword.spec.js +11 -11
  226. package/cypress/integration/naked/reviewOrders.spec.js +13 -13
  227. package/cypress/integration/naked/searchOptions.spec.js +18 -18
  228. package/cypress/integration/naked/signup.spec.js +31 -31
  229. package/cypress/integration/naked/upselling.spec.js +13 -13
  230. package/cypress/integration/naked/userDetails.spec.js +12 -12
  231. package/cypress/plugins/index.js +21 -21
  232. package/cypress/support/commands.js +35 -35
  233. package/cypress/support/index.js +20 -20
  234. package/cypress.json +12 -12
  235. package/example/App.js +263 -263
  236. package/example/components/ActiveOrdersUI/index.js +72 -72
  237. package/example/components/AddressDetailsUI/index.js +101 -101
  238. package/example/components/AddressFormUI/index.js +161 -161
  239. package/example/components/AddressListUI/index.js +33 -33
  240. package/example/components/AlertPopup/index.js +10 -10
  241. package/example/components/AlertUI/index.js +49 -49
  242. package/example/components/AlertUI/style.css +5 -5
  243. package/example/components/AppleLoginUI/index.js +40 -40
  244. package/example/components/BaseComponentUI/index.js +34 -34
  245. package/example/components/BusinessBasicInformationUI/index.js +118 -118
  246. package/example/components/BusinessControllerUI/index.js +89 -89
  247. package/example/components/BusinessInformationUI/BusinessOptionUI/index.js +83 -83
  248. package/example/components/BusinessInformationUI/index.js +83 -83
  249. package/example/components/BusinessProductsCategoriesUI/index.js +42 -42
  250. package/example/components/BusinessProductsSearchUI/index.js +38 -38
  251. package/example/components/BusinessReviewsUI/index.js +77 -77
  252. package/example/components/BusinessSortControlUI/index.js +47 -47
  253. package/example/components/BusinessTypeFilterUI/index.js +53 -53
  254. package/example/components/BusinessesMapUI/index.js +57 -57
  255. package/example/components/CartUI/index.js +154 -154
  256. package/example/components/ChangeView/index.js +19 -19
  257. package/example/components/CheckoutUI/index.js +206 -206
  258. package/example/components/CmsContentUI/index.js +52 -52
  259. package/example/components/ConfigsExample/index.js +118 -118
  260. package/example/components/CouponControlUI/index.js +63 -63
  261. package/example/components/DriverTipsUI/index.js +58 -58
  262. package/example/components/FacebookLoginButtonUI/index.js +48 -48
  263. package/example/components/FloatingButtonUI/index.js +145 -145
  264. package/example/components/ForgotPasswordFormUI/index.js +93 -93
  265. package/example/components/GoogleLoginUI/index.js +30 -30
  266. package/example/components/GpsButtonUI/index.js +22 -22
  267. package/example/components/Header/index.js +18 -18
  268. package/example/components/LanguageSelectorUI/index.js +57 -57
  269. package/example/components/LanguagesExample/index.js +51 -51
  270. package/example/components/LoginFormUI/index.js +159 -159
  271. package/example/components/LogoutButtonUI/index.js +21 -21
  272. package/example/components/MainSearchUI/index.js +131 -131
  273. package/example/components/MenuControlUI/index.js +103 -103
  274. package/example/components/MessagesUI/index.js +162 -162
  275. package/example/components/ModalUI/index.js +36 -36
  276. package/example/components/ModalUI/style.css +5 -5
  277. package/example/components/MomentOptionUI/index.js +68 -68
  278. package/example/components/MyOrdersListUI/index.js +51 -51
  279. package/example/components/MyOrdersUI/index.js +52 -52
  280. package/example/components/OrderChangeUI/index.js +54 -54
  281. package/example/components/OrderDetailsUI/index.js +174 -174
  282. package/example/components/OrderReviewUI/index.js +125 -125
  283. package/example/components/OrderTypeControlUI/index.js +32 -32
  284. package/example/components/PaymentOptionCashUI/index.js +60 -60
  285. package/example/components/PaymentOptionPaypalUI/index.js +50 -50
  286. package/example/components/PaymentOptionStripeDirectUI/index.js +89 -89
  287. package/example/components/PaymentOptionStripeRedirectUI/index.js +97 -97
  288. package/example/components/PaymentOptionStripeUI/index.js +129 -129
  289. package/example/components/PaymentOptionsUI/index.js +169 -169
  290. package/example/components/PhoneAutocompleteUI/index.js +67 -67
  291. package/example/components/PhoneAutocompleteUI/styles.css +49 -49
  292. package/example/components/ProductComponentUI/index.js +113 -113
  293. package/example/components/ProductFormUI/index.js +131 -131
  294. package/example/components/ProductImagesUI/index.js +82 -82
  295. package/example/components/ProductIngredientUI/index.js +21 -21
  296. package/example/components/ProductOptionSuboptionUI/index.js +65 -65
  297. package/example/components/ProductOptionUI/index.js +31 -31
  298. package/example/components/ProductShareUI/index.js +48 -48
  299. package/example/components/ProductsListUI/index.js +108 -108
  300. package/example/components/ProductsListingUI/index.js +42 -42
  301. package/example/components/ResetPasswordUI/index.js +121 -121
  302. package/example/components/SearchOptionsUI/index.js +82 -82
  303. package/example/components/SignupFormUI/index.js +117 -117
  304. package/example/components/SingleBusinessCardUI/index.js +82 -82
  305. package/example/components/SingleOrderCardUI/index.js +52 -52
  306. package/example/components/SingleProductCardUI/index.js +47 -47
  307. package/example/components/StripeElementsFormUI/CardFormUI/index.js +51 -51
  308. package/example/components/StripeElementsFormUI/CardFormUI/style.css +118 -118
  309. package/example/components/StripeElementsFormUI/index.js +38 -38
  310. package/example/components/StripeRedirectFormUI/index.js +99 -99
  311. package/example/components/TestComponent/index.js +5 -5
  312. package/example/components/UpsellingPageUI/index.js +26 -26
  313. package/example/components/UserDetailsUI/index.js +94 -94
  314. package/example/components/UserProfileUI/index.js +156 -156
  315. package/example/views/ActiveOrders/index.js +86 -86
  316. package/example/views/AddressDetailsExample/index.js +57 -57
  317. package/example/views/AppleLoginExample/index.js +51 -51
  318. package/example/views/BaseComponentExample/index.js +35 -35
  319. package/example/views/BusinessBasicInformationExample/index.js +43 -43
  320. package/example/views/BusinessControllerExample/index.js +55 -55
  321. package/example/views/BusinessInformationExample/index.js +68 -68
  322. package/example/views/BusinessProductsCategoriesExample/index.js +50 -50
  323. package/example/views/BusinessProductsSearchExample/index.js +39 -39
  324. package/example/views/BusinessReviewsExample/index.js +43 -43
  325. package/example/views/BusinessSortControlExample/index.js +53 -53
  326. package/example/views/BusinessTypeFilterExample/index.js +53 -53
  327. package/example/views/BusinessesMapExample/index.js +57 -57
  328. package/example/views/CheckoutExample/index.js +143 -143
  329. package/example/views/CmsContentExample/index.js +44 -44
  330. package/example/views/DriverTipsExample/index.js +47 -47
  331. package/example/views/EventsExample/index.js +26 -26
  332. package/example/views/FacebookLogin/index.js +63 -63
  333. package/example/views/FloatingButtonExample/index.js +47 -47
  334. package/example/views/ForgotPassword/index.js +77 -77
  335. package/example/views/GoogleLoginExample/index.js +85 -85
  336. package/example/views/Home/index.js +200 -200
  337. package/example/views/LanguageSelectorExample/index.js +55 -55
  338. package/example/views/Login/index.js +84 -84
  339. package/example/views/MainSearchExample/index.js +43 -43
  340. package/example/views/MenuControlExample/index.js +68 -68
  341. package/example/views/MessagesExample/index.js +58 -58
  342. package/example/views/MomentOptionExample/index.js +52 -52
  343. package/example/views/MyOrdersExample/index.js +35 -35
  344. package/example/views/MyOrdersListExample/index.js +50 -50
  345. package/example/views/OrderChangeExample/index.js +46 -46
  346. package/example/views/OrderContextExample/index.js +139 -139
  347. package/example/views/OrderDetailsExample/index.js +50 -50
  348. package/example/views/OrderReviewExample/index.js +64 -64
  349. package/example/views/PaymentOptionCashExample/index.js +51 -51
  350. package/example/views/PaymentOptionPaypalExample/index.js +71 -71
  351. package/example/views/PaymentOptionStripeDirectExample/index.js +43 -43
  352. package/example/views/PaymentOptionStripeExample/index.js +47 -47
  353. package/example/views/PaymentOptionStripeRedirectExample/index.js +56 -56
  354. package/example/views/PaymentOptionsExample/index.js +47 -47
  355. package/example/views/PhoneAutocompleteExample/index.js +34 -34
  356. package/example/views/PlacesExample/index.js +94 -94
  357. package/example/views/PopupExample/index.js +78 -78
  358. package/example/views/PopupExample/style.css +18 -18
  359. package/example/views/ProductDetail/index.js +323 -323
  360. package/example/views/ProductImagesExample/index.js +43 -43
  361. package/example/views/ProductOptionExample/index.js +88 -88
  362. package/example/views/ProductShareExample/index.js +51 -51
  363. package/example/views/ProductsListExample/index.js +77 -77
  364. package/example/views/ProductsListingExample/index.js +47 -47
  365. package/example/views/ResetPasswordExample/index.js +60 -60
  366. package/example/views/SearchOptionsExample/index.js +42 -42
  367. package/example/views/SessionManager/index.js +122 -122
  368. package/example/views/Signup/index.js +64 -64
  369. package/example/views/UpsellingPageExample/index.js +35 -35
  370. package/example/views/UserDetailsExample/index.js +69 -69
  371. package/example/views/UserProfile/index.js +73 -73
  372. package/index-example.js +23 -23
  373. package/index.html +13 -13
  374. package/native/index.js +257 -257
  375. package/native/src/NativeStrategy/index.js +20 -20
  376. package/native/src/contexts/OrderingContext/index.js +85 -85
  377. package/package.json +92 -92
  378. package/src/components/AddressDetails/index.js +149 -149
  379. package/src/components/AddressForm/index.js +372 -372
  380. package/src/components/AddressList/index.js +254 -254
  381. package/src/components/Analitycs/index.js +119 -119
  382. package/src/components/AnalyticsSegment/index.js +145 -145
  383. package/src/components/AppleLogin/index.js +164 -164
  384. package/src/components/BaseComponent/index.js +52 -52
  385. package/src/components/BusinessAndProductList/index.js +986 -986
  386. package/src/components/BusinessBasicInformation/index.js +119 -119
  387. package/src/components/BusinessController/index.js +351 -351
  388. package/src/components/BusinessInformation/BusinessOption/index.js +86 -86
  389. package/src/components/BusinessInformation/index.js +93 -93
  390. package/src/components/BusinessList/index.js +670 -670
  391. package/src/components/BusinessMenuListing/index.js +99 -99
  392. package/src/components/BusinessProductsCategories/index.js +60 -60
  393. package/src/components/BusinessProductsSearch/index.js +54 -54
  394. package/src/components/BusinessReviews/index.js +187 -187
  395. package/src/components/BusinessSearchList/index.js +364 -364
  396. package/src/components/BusinessSortControl/index.js +100 -100
  397. package/src/components/BusinessTypeFilter/index.js +142 -142
  398. package/src/components/BusinessesMap/index.js +110 -110
  399. package/src/components/Cart/index.js +211 -211
  400. package/src/components/CartStoresListing/index.js +157 -157
  401. package/src/components/Checkout/index.js +636 -636
  402. package/src/components/CmsContent/index.js +97 -97
  403. package/src/components/Contacts/index.js +512 -512
  404. package/src/components/CouponControl/index.js +171 -171
  405. package/src/components/DragAndDrop/index.js +41 -41
  406. package/src/components/DriverList/index.js +112 -112
  407. package/src/components/DriverTips/index.js +141 -141
  408. package/src/components/Emitter/index.js +36 -36
  409. package/src/components/ExamineClick/index.js +40 -40
  410. package/src/components/FacebookLoginButton/index.js +214 -214
  411. package/src/components/FacebookPixel/index.js +148 -148
  412. package/src/components/FavoriteList/index.js +278 -278
  413. package/src/components/FirebaseGoogleLoginButton/index.js +93 -93
  414. package/src/components/FloatingButton/index.js +70 -70
  415. package/src/components/ForgotPasswordForm/index.js +180 -180
  416. package/src/components/GiftCard/GiftCardOrdersList/index.js +155 -155
  417. package/src/components/GiftCard/PurchaseGiftCard/index.js +127 -127
  418. package/src/components/GiftCard/RedeemGiftCard/index.js +77 -77
  419. package/src/components/GiftCard/SendGiftCard/index.js +83 -83
  420. package/src/components/GoogleAutocompleteInput/index.js +154 -154
  421. package/src/components/GoogleIdentity/index.js +144 -144
  422. package/src/components/GoogleLoginButton/index.js +276 -276
  423. package/src/components/GoogleMaps/index.js +499 -499
  424. package/src/components/GpsButton/index.js +127 -127
  425. package/src/components/LanguageSelector/index.js +163 -163
  426. package/src/components/LoginForm/index.js +527 -527
  427. package/src/components/LogoutAction/index.js +211 -211
  428. package/src/components/MainSearch/index.js +149 -149
  429. package/src/components/MapView/index.js +116 -116
  430. package/src/components/MenuControl/index.js +238 -238
  431. package/src/components/Messages/index.js +166 -166
  432. package/src/components/MomentOption/index.js +322 -322
  433. package/src/components/MultiCartCreate/index.js +70 -70
  434. package/src/components/MultiCartsPaymethodsAndWallets/index.js +201 -201
  435. package/src/components/MultiCheckout/index.js +378 -378
  436. package/src/components/MultiOrdersDetails/index.js +109 -109
  437. package/src/components/MyOrders/index.js +150 -150
  438. package/src/components/MyOrdersList/index.js +104 -104
  439. package/src/components/NewOrderNotification/index.js +30 -30
  440. package/src/components/OrderChange/index.js +128 -128
  441. package/src/components/OrderDetails/index.js +684 -684
  442. package/src/components/OrderList/index.js +814 -814
  443. package/src/components/OrderListGroups/index.js +1256 -1245
  444. package/src/components/OrderReview/index.js +180 -180
  445. package/src/components/OrderTypeControl/index.js +75 -75
  446. package/src/components/OrderVerticalList/index.js +422 -422
  447. package/src/components/OrdersControlFilters/index.js +75 -75
  448. package/src/components/OrdersDashboardComponents/Appointments/index.js +72 -72
  449. package/src/components/OrdersDashboardComponents/BusinessProductsListing/index.js +629 -629
  450. package/src/components/OrdersDashboardComponents/CheckPassword/index.js +177 -177
  451. package/src/components/OrdersDashboardComponents/CityList/index.js +98 -98
  452. package/src/components/OrdersDashboardComponents/CountryList/index.js +162 -162
  453. package/src/components/OrdersDashboardComponents/CustomOrderDetails/index.js +238 -238
  454. package/src/components/OrdersDashboardComponents/DashboardBusinessList/index.js +617 -617
  455. package/src/components/OrdersDashboardComponents/DashboardOrdersList/index.js +943 -943
  456. package/src/components/OrdersDashboardComponents/DriversList/index.js +448 -448
  457. package/src/components/OrdersDashboardComponents/ExportCSV/index.js +192 -192
  458. package/src/components/OrdersDashboardComponents/GiftCardsList/index.js +189 -189
  459. package/src/components/OrdersDashboardComponents/GoogleMapsApiKeySetting/index.js +77 -77
  460. package/src/components/OrdersDashboardComponents/LogisticInformation/index.js +97 -97
  461. package/src/components/OrdersDashboardComponents/Logistics/index.js +174 -174
  462. package/src/components/OrdersDashboardComponents/Messages/index.js +384 -384
  463. package/src/components/OrdersDashboardComponents/MetaFields/index.js +186 -186
  464. package/src/components/OrdersDashboardComponents/OrderDetails/index.js +404 -404
  465. package/src/components/OrdersDashboardComponents/OrderNotification/index.js +70 -70
  466. package/src/components/OrdersDashboardComponents/OrdersFilter/index.js +362 -362
  467. package/src/components/OrdersDashboardComponents/OrdersManage/index.js +873 -873
  468. package/src/components/OrdersDashboardComponents/PointsWalletLevels/index.js +123 -123
  469. package/src/components/OrdersDashboardComponents/ReviewCustomer/index.js +113 -113
  470. package/src/components/OrdersDashboardComponents/Schedule/index.js +315 -315
  471. package/src/components/OrdersDashboardComponents/SettingsList/index.js +298 -298
  472. package/src/components/OrdersDashboardComponents/UserFormDetails/index.js +463 -463
  473. package/src/components/OrdersDashboardComponents/UsersList/index.js +944 -944
  474. package/src/components/OrdersDashboardComponents/WebsocketStatus/index.js +77 -77
  475. package/src/components/OrdersDashboardComponents/index.js +57 -57
  476. package/src/components/PageBanner/index.js +107 -107
  477. package/src/components/PaymentOptionCash/index.js +74 -74
  478. package/src/components/PaymentOptionPaypal/index.js +146 -146
  479. package/src/components/PaymentOptionSquare/index.js +336 -336
  480. package/src/components/PaymentOptionStripe/index.js +289 -289
  481. package/src/components/PaymentOptionStripeDirect/index.js +116 -116
  482. package/src/components/PaymentOptionStripeRedirect/StripeRedirectForm/index.js +71 -71
  483. package/src/components/PaymentOptionStripeRedirect/index.js +122 -122
  484. package/src/components/PaymentOptionWallet/index.js +185 -185
  485. package/src/components/PaymentOptions/index.js +262 -262
  486. package/src/components/PaymethodList/index.js +119 -119
  487. package/src/components/PhoneAutocomplete/index.js +318 -318
  488. package/src/components/PlaceSpot/index.js +183 -183
  489. package/src/components/Popup/index.js +169 -169
  490. package/src/components/ProductComponent/index.js +269 -269
  491. package/src/components/ProductForm/index.js +1105 -1105
  492. package/src/components/ProductImages/index.js +64 -64
  493. package/src/components/ProductIngredient/index.js +72 -72
  494. package/src/components/ProductItemAccordion/index.js +72 -72
  495. package/src/components/ProductOption/index.js +42 -42
  496. package/src/components/ProductOptionSuboption/index.js +181 -181
  497. package/src/components/ProductShare/index.js +97 -97
  498. package/src/components/ProductsList/index.js +74 -74
  499. package/src/components/ProductsListing/index.js +166 -166
  500. package/src/components/ProfessionalInfo/index.js +156 -156
  501. package/src/components/PromotionsController/index.js +123 -123
  502. package/src/components/QueryLoginSpoonity/index.js +159 -159
  503. package/src/components/ReCaptcha/index.js +53 -53
  504. package/src/components/ResetPassword/index.js +111 -111
  505. package/src/components/ReviewCustomer/index.js +117 -117
  506. package/src/components/ReviewDriver/index.js +157 -157
  507. package/src/components/ReviewProduct/index.js +162 -162
  508. package/src/components/SearchOptions/index.js +69 -69
  509. package/src/components/Sessions/index.js +217 -217
  510. package/src/components/SignupForm/index.js +555 -555
  511. package/src/components/SingleBusinessCard/index.js +80 -80
  512. package/src/components/SingleOrderCard/index.js +160 -160
  513. package/src/components/SingleProductCard/index.js +130 -130
  514. package/src/components/SingleProfessionalCard/index.js +121 -121
  515. package/src/components/SmartAppBanner/index.js +71 -71
  516. package/src/components/StoreProductList/index.js +303 -303
  517. package/src/components/StripeElementsForm/CardForm/index.js +248 -248
  518. package/src/components/StripeElementsForm/index.js +78 -78
  519. package/src/components/UpsellingPage/index.js +120 -120
  520. package/src/components/UserFormDetails/index.js +742 -742
  521. package/src/components/UserVerification/index.js +242 -242
  522. package/src/components/WalletList/index.js +160 -160
  523. package/src/components/WebsocketStatus/index.js +80 -80
  524. package/src/components/WrapperGoogleMaps/index.js +67 -67
  525. package/src/constants/code-numbers.js +219 -219
  526. package/src/constants/timezones.js +427 -427
  527. package/src/contexts/ApiContext/index.js +59 -59
  528. package/src/contexts/BillingContext/index.js +28 -28
  529. package/src/contexts/BusinessContext/index.js +71 -71
  530. package/src/contexts/ConfigContext/index.js +217 -217
  531. package/src/contexts/CustomerContext/index.js +69 -69
  532. package/src/contexts/EventContext/index.js +31 -31
  533. package/src/contexts/LanguageContext/index.js +144 -144
  534. package/src/contexts/OptimizationLoadContext/index.js +95 -95
  535. package/src/contexts/OrderContext/index.js +1450 -1450
  536. package/src/contexts/OrderingContext/index.js +86 -86
  537. package/src/contexts/OrderingThemeContext/index.js +107 -107
  538. package/src/contexts/ProductContext/index.js +62 -62
  539. package/src/contexts/SessionContext/index.js +172 -172
  540. package/src/contexts/SiteContext/index.js +79 -79
  541. package/src/contexts/ToastContext/index.js +42 -42
  542. package/src/contexts/UtilsContext/index.js +352 -352
  543. package/src/contexts/ValidationsFieldsContext/index.js +65 -65
  544. package/src/contexts/WebsocketContext/index.js +91 -91
  545. package/src/contexts/WebsocketContext/socket.js +92 -92
  546. package/src/index.js +371 -371
  547. package/src/utils/index.js +32 -32
  548. package/src/webStrategy/index.js +18 -18
  549. package/webpack.dev.js +41 -41
  550. package/webpack.prod.js +64 -64
  551. package/_bundles/0.ordering-component.aa21761da1477298dd80.js +0 -1
  552. package/_bundles/7.ordering-component.aa21761da1477298dd80.js +0 -2
  553. package/_bundles/7.ordering-component.aa21761da1477298dd80.js.LICENSE.txt +0 -53
  554. package/_bundles/ordering-component.aa21761da1477298dd80.js +0 -2
@@ -1,617 +1,617 @@
1
- import React, { useEffect, useState } from 'react'
2
- import PropTypes, { string } from 'prop-types'
3
- import dayjs from 'dayjs'
4
- import utc from 'dayjs/plugin/utc'
5
- import { useApi } from '../../../contexts/ApiContext'
6
- import { useSession } from '../../../contexts/SessionContext'
7
- import { ToastType, useToast } from '../../../contexts/ToastContext'
8
- import { useLanguage } from '../../../contexts/LanguageContext'
9
-
10
- dayjs.extend(utc)
11
-
12
- export const DashboardBusinessList = (props) => {
13
- const {
14
- asDashboard,
15
- UIComponent,
16
- paginationSettings,
17
- propsToFetch,
18
- initialPageSize,
19
- loadMorePageSize,
20
- isSearchByBusinessId,
21
- isSearchByBusinessName,
22
- isSearchByBusinessEmail,
23
- isSearchByBusinessPhone,
24
- noActiveStatusCondition
25
- } = props
26
-
27
- const [ordering] = useApi()
28
- const [session] = useSession()
29
- const [, t] = useLanguage()
30
- const [, { showToast }] = useToast()
31
-
32
- const allowCodes = ['us', 'usa', 'united states', 'united states of american', 'ca', 'canada']
33
-
34
- const [businessList, setBusinessList] = useState({ loading: false, error: null, businesses: [] })
35
- const [countriesState, setCountriesState] = useState({ countries: [], loading: true, error: null, enabled: false })
36
- const [citiesList, setCitiesList] = useState([])
37
- const [pagination, setPagination] = useState({
38
- currentPage: (paginationSettings.controlType === 'pages' && paginationSettings.initialPage && paginationSettings.initialPage >= 1) ? paginationSettings.initialPage - 1 : 0,
39
- pageSize: paginationSettings.pageSize ?? 10
40
- })
41
-
42
- const [searchValue, setSearchValue] = useState(null)
43
- const [selectedBusinessActiveState, setSelectedBusinessActiveState] = useState(true)
44
- const [businessTypeSelected, setBusinessTypeSelected] = useState(null)
45
- const [businessIds, setBusinessIds] = useState([])
46
- const [filterValues, setFilterValues] = useState({})
47
- const [inActiveBusinesses, setInActiveBusinesses] = useState([])
48
-
49
- /**
50
- * Save filter type values
51
- * @param {object} types
52
- */
53
- const handleChangeFilterValues = (types) => {
54
- setFilterValues(types)
55
- }
56
-
57
- /**
58
- * Method to get businesses from API
59
- * @param {number, number} pageSize page
60
- */
61
- const getBusinesses = async (pageSize, page, isInactive) => {
62
- let where = []
63
- const conditions = []
64
- const options = {
65
- query: {
66
- page: page,
67
- page_size: pageSize
68
- }
69
- }
70
-
71
- if (!noActiveStatusCondition || isInactive) {
72
- conditions.push({
73
- attribute: 'enabled',
74
- value: isInactive ? false : selectedBusinessActiveState
75
- })
76
- }
77
-
78
- if (businessTypeSelected) {
79
- conditions.push({
80
- attribute: 'types',
81
- conditions: [{
82
- attribute: 'id',
83
- value: businessTypeSelected
84
- }]
85
- })
86
- }
87
-
88
- if (searchValue) {
89
- const searchConditions = []
90
- if (isSearchByBusinessId) {
91
- searchConditions.push(
92
- {
93
- attribute: 'id',
94
- value: {
95
- condition: 'ilike',
96
- value: encodeURI(`%${searchValue}%`)
97
- }
98
- }
99
- )
100
- }
101
-
102
- if (isSearchByBusinessName) {
103
- searchConditions.push(
104
- {
105
- attribute: 'name',
106
- value: {
107
- condition: 'ilike',
108
- value: encodeURI(`%${searchValue}%`)
109
- }
110
- }
111
- )
112
- }
113
-
114
- if (isSearchByBusinessEmail) {
115
- searchConditions.push(
116
- {
117
- attribute: 'email',
118
- value: {
119
- condition: 'ilike',
120
- value: encodeURI(`%${searchValue}%`)
121
- }
122
- }
123
- )
124
- }
125
-
126
- if (isSearchByBusinessPhone) {
127
- searchConditions.push(
128
- {
129
- attribute: 'phone',
130
- value: {
131
- condition: 'ilike',
132
- value: encodeURI(`%${searchValue}%`)
133
- }
134
- }
135
- )
136
- }
137
- conditions.push({
138
- conector: 'OR',
139
- conditions: searchConditions
140
- })
141
- }
142
-
143
- if (Object.keys(filterValues).length > 0) {
144
- const filterConditons = []
145
-
146
- if (filterValues?.name && filterValues?.name !== null) {
147
- filterConditons.push(
148
- {
149
- attribute: 'name',
150
- value: {
151
- condition: 'ilike',
152
- value: encodeURI(`%${filterValues?.name}%`)
153
- }
154
- }
155
- )
156
- }
157
- if (filterValues?.availableMenus?.value !== '') {
158
- filterConditons.push(
159
- {
160
- attribute: 'available_menus_count',
161
- value: {
162
- condition: filterValues?.availableMenus?.condition,
163
- value: filterValues?.availableMenus?.value
164
- }
165
- }
166
- )
167
- }
168
- if (filterValues?.menus?.value !== '') {
169
- filterConditons.push(
170
- {
171
- attribute: 'menus_count',
172
- value: {
173
- condition: filterValues?.menus?.condition,
174
- value: filterValues?.menus?.value
175
- }
176
- }
177
- )
178
- }
179
- if (filterValues?.cityIds.length !== 0) {
180
- filterConditons.push(
181
- {
182
- attribute: 'city_id',
183
- value: filterValues?.cityIds
184
- }
185
- )
186
- }
187
- if (filterValues?.enabled !== null) {
188
- filterConditons.push(
189
- {
190
- attribute: 'enabled',
191
- value: filterValues?.enabled
192
- }
193
- )
194
- }
195
- if (filterValues?.featured !== null) {
196
- filterConditons.push(
197
- {
198
- attribute: 'featured',
199
- value: filterValues?.featured
200
- }
201
- )
202
- }
203
-
204
- if (filterConditons.length) {
205
- conditions.push({
206
- conector: 'AND',
207
- conditions: filterConditons
208
- })
209
- }
210
- }
211
-
212
- if (conditions.length) {
213
- where = {
214
- conditions,
215
- conector: 'AND'
216
- }
217
- }
218
-
219
- const functionFetch = asDashboard
220
- ? ordering.setAccessToken(session.token).businesses().select(propsToFetch).asDashboard().where(where)
221
- : ordering.setAccessToken(session.token).businesses().select(propsToFetch).where(where)
222
-
223
- return await functionFetch.get(options)
224
- }
225
-
226
- /**
227
- * Method to get the countries from API
228
- */
229
- const getCountries = async () => {
230
- try {
231
- setCountriesState({ ...countriesState, loading: true })
232
- const { content: { error, result } } = await ordering.countries().get()
233
- if (!error) {
234
- const enabled = result.filter(country => country?.enabled).some(country => (allowCodes.includes(country?.code?.toLowerCase()) || allowCodes.includes(country?.name?.toLowerCase())))
235
- setCountriesState({ ...countriesState, loading: false, countries: result, enabled })
236
- let cities = []
237
- for (const country of result) {
238
- if (country?.enabled) {
239
- cities = [...cities, ...country?.cities]
240
- }
241
- }
242
- setCitiesList(cities)
243
- } else {
244
- setCountriesState({ ...countriesState, loading: false, error: result })
245
- }
246
- } catch (err) {
247
- setCountriesState({ ...countriesState, loading: false, error: [err.message] })
248
- }
249
- }
250
-
251
- /**
252
- * Method to load businesses
253
- */
254
- const loadBusinesses = async () => {
255
- if (!session.token) return
256
- try {
257
- setBusinessList({ ...businessList, loading: true })
258
- const response = await getBusinesses((initialPageSize || pagination.pageSize), 1)
259
-
260
- setBusinessList({
261
- loading: false,
262
- businesses: response.content.error ? [] : response.content.result,
263
- error: response.content.error ? response.content.result : null
264
- })
265
-
266
- if (!response.content.error) {
267
- setPagination({
268
- currentPage: response.content.pagination.current_page,
269
- pageSize: response.content.pagination.page_size === 0 ? pagination.pageSize : response.content.pagination.page_size,
270
- totalPages: response.content.pagination.total_pages,
271
- total: response.content.pagination.total,
272
- from: response.content.pagination.from,
273
- to: response.content.pagination.to
274
- })
275
- }
276
- } catch (err) {
277
- if (err?.constructor?.name !== 'Cancel') {
278
- setBusinessList({ ...businessList, loading: false, error: [err.message] })
279
- }
280
- }
281
- }
282
-
283
- /**
284
- * Method to get businesses
285
- */
286
- const getInActiveBusinesses = async () => {
287
- if (!session.token) return
288
- try {
289
- const response = await getBusinesses(10, 1, true)
290
-
291
- if (!response.content.error) {
292
- setInActiveBusinesses(response?.content?.result)
293
- }
294
- } catch (err) {
295
- console.log(err)
296
- }
297
- }
298
-
299
- /**
300
- * Method to get businesses more
301
- */
302
- const loadMoreBusinesses = async () => {
303
- setBusinessList({ ...businessList, loading: true })
304
- try {
305
- const response = await getBusinesses(loadMorePageSize, Math.ceil(pagination?.to / loadMorePageSize) + 1)
306
- setBusinessList({
307
- loading: false,
308
- businesses: response.content.error ? businessList.businesses : businessList.businesses.concat(response.content.result),
309
- error: response.content.error ? response.content.result : null
310
- })
311
- if (!response.content.error) {
312
- setPagination({
313
- currentPage: response.content.pagination.current_page,
314
- pageSize: response.content.pagination.page_size === 0 ? pagination.pageSize : response.content.pagination.page_size,
315
- totalPages: response.content.pagination.total_pages,
316
- total: response.content.pagination.total,
317
- from: response.content.pagination.from,
318
- to: response.content.pagination.to
319
- })
320
- }
321
- } catch (err) {
322
- if (err.constructor.name !== 'Cancel') {
323
- setBusinessList({ ...businessList, loading: false, error: [err.message] })
324
- }
325
- }
326
- }
327
-
328
- /**
329
- * Method to get businesses for page and pageSize
330
- */
331
- const getPageBusinesses = async (pageSize, page) => {
332
- setBusinessList({ ...businessList, loading: true })
333
- try {
334
- const response = await getBusinesses(pageSize, page)
335
- setBusinessList({
336
- loading: false,
337
- businesses: response.content.error ? businessList.businesses : response.content.result,
338
- error: response.content.error ? response.content.result : null
339
- })
340
- if (!response.content.error) {
341
- setPagination({
342
- currentPage: response.content.pagination.current_page,
343
- pageSize: response.content.pagination.page_size === 0 ? pagination.pageSize : response.content.pagination.page_size,
344
- totalPages: response.content.pagination.total_pages,
345
- total: response.content.pagination.total,
346
- from: response.content.pagination.from,
347
- to: response.content.pagination.to
348
- })
349
- }
350
- } catch (err) {
351
- if (err.constructor.name !== 'Cancel') {
352
- setBusinessList({ ...businessList, loading: false, error: [err.message] })
353
- }
354
- }
355
- }
356
-
357
- /**
358
- * Method to change businesses enable/disable
359
- * @param {Boolean} enabled businesses enable state
360
- * @param {Boolean} isFeatured flag to check if featured or enabled
361
- */
362
- const handleEnableAllBusiness = async (enabled, isFeatured = false) => {
363
- try {
364
- showToast(ToastType.Info, t('LOADING', 'Loading'))
365
- const changes = {
366
- businesses_id: businessIds,
367
- ...(isFeatured ? { featured: enabled } : { enabled })
368
- }
369
- const requestOptions = {
370
- method: 'PUT',
371
- headers: {
372
- 'Content-Type': 'application/json',
373
- Authorization: `Bearer ${session.token}`
374
- },
375
- body: JSON.stringify(changes)
376
- }
377
- const response = await fetch(`${ordering.root}/business`, requestOptions)
378
- const content = await response.json()
379
- if (!content?.error) {
380
- const updatedBusinessList = isFeatured
381
- ? businessList?.businesses.map(business => (businessIds.includes(business?.id)) ? { ...business, featured: enabled } : business)
382
- : businessList?.businesses.filter(business => !businessIds.includes(business?.id))
383
- setBusinessList({
384
- ...businessList,
385
- businesses: updatedBusinessList
386
- })
387
- if (!isFeatured) setBusinessIds([])
388
- showToast(ToastType.Success, t('BUSINESS_UPDATED', 'Business updated'))
389
- } else {
390
- showToast(ToastType.Error, content?.result)
391
- }
392
- } catch (err) {
393
- showToast(ToastType.Error, err.message)
394
- }
395
- }
396
-
397
- /**
398
- * Method to delete business list
399
- */
400
- const handleDeleteMultiBusinesses = async () => {
401
- try {
402
- showToast(ToastType.Info, t('LOADING', 'Loading'))
403
- const requestOptions = {
404
- method: 'DELETE',
405
- headers: {
406
- 'Content-Type': 'application/json',
407
- Authorization: `Bearer ${session.token}`
408
- },
409
- body: JSON.stringify({ businesses_id: businessIds })
410
- }
411
- const response = await fetch(`${ordering.root}/business`, requestOptions)
412
- const content = await response.json()
413
- if (!content?.error) {
414
- const updatedBusinessList = businessList?.businesses.filter(business => !businessIds.includes(business?.id))
415
- setBusinessList({
416
- ...businessList,
417
- businesses: updatedBusinessList
418
- })
419
- setBusinessIds([])
420
- showToast(ToastType.Success, t('BUSINESS_DELETED', 'Business deleted'))
421
- } else {
422
- showToast(ToastType.Error, content?.result)
423
- }
424
- } catch (err) {
425
- showToast(ToastType.Error, err.message)
426
- }
427
- }
428
-
429
- /**
430
- * Method to change user active state for filter
431
- */
432
- const handleChangeBusinessActiveState = () => {
433
- setSelectedBusinessActiveState(!selectedBusinessActiveState)
434
- }
435
-
436
- /**
437
- * Change business type
438
- * @param {object} businessType Business type
439
- */
440
- const handleChangeBusinessType = (businessType) => {
441
- if (businessType !== businessTypeSelected) {
442
- setBusinessList({
443
- ...businessList,
444
- businesses: [],
445
- loading: true
446
- })
447
- setBusinessTypeSelected(businessType)
448
- }
449
- }
450
-
451
- /**
452
- * Method to remove the business from business list
453
- * @param {Number} businessId business id to remove
454
- */
455
- const handleSucessRemoveBusiness = (businessId) => {
456
- const businesses = businessList.businesses.filter(business => business.id !== businessId)
457
- setPagination({
458
- ...pagination,
459
- to: pagination?.to - 1,
460
- total: pagination?.total - 1
461
- })
462
- setBusinessList({ ...businessList, businesses })
463
- }
464
-
465
- /**
466
- * Method to add the business in the business list
467
- * @param {Object} business business to add
468
- */
469
- const handleSucessAddBusiness = (business) => {
470
- const businesses = [...businessList.businesses, business]
471
- setPagination({
472
- ...pagination,
473
- to: pagination?.to + 1,
474
- total: pagination?.total + 1
475
- })
476
- setBusinessList({ ...businessList, businesses })
477
- }
478
-
479
- /**
480
- * Method to update the business from the business list
481
- * @param {Object} business business to update
482
- */
483
- const handleSucessUpdateBusiness = (business) => {
484
- const found = businessList.businesses.find(_business => _business.id === business.id)
485
- if (found) {
486
- if (selectedBusinessActiveState === business?.enabled) {
487
- const businesses = businessList.businesses.filter(_business => {
488
- if (_business.id === business.id) {
489
- Object.assign(_business, business)
490
- }
491
- return true
492
- })
493
- setBusinessList({ ...businessList, businesses: businesses })
494
- } else {
495
- handleSucessRemoveBusiness(business.id)
496
- }
497
- } else {
498
- if (selectedBusinessActiveState === business?.enabled) {
499
- handleSucessAddBusiness(business)
500
- } else {
501
- handleSucessRemoveBusiness(business.id)
502
- }
503
- }
504
- }
505
-
506
- /**
507
- * Method to change selected businesses
508
- * @param {Number} businessId business id to change selected state
509
- */
510
- const handleChangeBusinessIds = (businessId) => {
511
- const updatedBusinessIds = businessIds.includes(businessId)
512
- ? businessIds.filter(id => id !== businessId)
513
- : [...businessIds, businessId]
514
- setBusinessIds(updatedBusinessIds)
515
- }
516
-
517
- useEffect(() => {
518
- if (businessList.loading || businessList.businesses.length > 0) return
519
- if (pagination?.currentPage !== 0 && pagination?.total !== 0) {
520
- if (Math.ceil(pagination?.total / pagination.pageSize) >= pagination?.currentPage) {
521
- getPageBusinesses(pagination.pageSize, pagination.currentPage)
522
- } else {
523
- getPageBusinesses(pagination.pageSize, pagination.currentPage - 1)
524
- }
525
- }
526
- }, [businessList.businesses])
527
-
528
- /**
529
- * Listening session
530
- */
531
- useEffect(() => {
532
- if (props.businesses) {
533
- setBusinessList({
534
- ...businessList,
535
- businesses: props.businesses
536
- })
537
- } else {
538
- loadBusinesses()
539
- }
540
- }, [session, searchValue, selectedBusinessActiveState, businessTypeSelected, filterValues])
541
-
542
- useEffect(() => {
543
- getCountries()
544
- }, [])
545
-
546
- useEffect(() => {
547
- getInActiveBusinesses()
548
- }, [businessList?.businesses?.length])
549
-
550
- return (
551
- <>
552
- {
553
- UIComponent && (
554
- <UIComponent
555
- {...props}
556
- pagination={pagination}
557
- searchValue={searchValue}
558
- businessIds={businessIds}
559
- businessList={businessList}
560
- selectedBusinessActiveState={selectedBusinessActiveState}
561
- onSearch={setSearchValue}
562
- loadBusinesses={loadBusinesses}
563
- setBusinessIds={setBusinessIds}
564
- getPageBusinesses={getPageBusinesses}
565
- loadMoreBusinesses={loadMoreBusinesses}
566
- handleSucessAddBusiness={handleSucessAddBusiness}
567
- handleChangeBusinessIds={handleChangeBusinessIds}
568
- handleEnableAllBusiness={handleEnableAllBusiness}
569
- handleChangeBusinessType={handleChangeBusinessType}
570
- handleSucessRemoveBusiness={handleSucessRemoveBusiness}
571
- handleSucessUpdateBusiness={handleSucessUpdateBusiness}
572
- handleDeleteMultiBusinesses={handleDeleteMultiBusinesses}
573
- handleChangeBusinessActiveState={handleChangeBusinessActiveState}
574
- countriesState={countriesState}
575
- filterValues={filterValues}
576
- handleChangeFilterValues={handleChangeFilterValues}
577
- businessTypeSelected={businessTypeSelected}
578
- inActiveBusinesses={inActiveBusinesses}
579
- citiesList={citiesList}
580
- />
581
- )
582
- }
583
- </>
584
- )
585
- }
586
-
587
- DashboardBusinessList.propTypes = {
588
- /**
589
- * UI Component, this must be containt all graphic elements and use parent props
590
- */
591
- UIComponent: PropTypes.elementType,
592
- /**
593
- * Enable/Disable search option
594
- * Search Businesses list by a business ID
595
- */
596
- isSearchByBusinessId: PropTypes.bool,
597
- /**
598
- * Enable/Disable search option
599
- * Search Businesses list by a business email
600
- */
601
- isSearchByBusinessEmail: PropTypes.bool,
602
- /**
603
- * Enable/Disable search option
604
- * Search Businesses list by a business phone
605
- */
606
- isSearchByBusinessPhone: PropTypes.bool,
607
- /**
608
- * Array of user props to fetch
609
- */
610
- propsToFetch: PropTypes.arrayOf(string)
611
- }
612
-
613
- DashboardBusinessList.defaultProps = {
614
- loadMorePageSize: 10,
615
- propsToFetch: ['id', 'alcohol', 'city', 'delivery_price', 'distance', 'delivery_time', 'ribbon', 'enabled', 'featured', 'food', 'groceries', 'header', 'laundry', 'logo', 'minimum', 'name', 'pickup_time', 'slug', 'reviews'],
616
- paginationSettings: { initialPage: 1, pageSize: 10, controlType: 'infinity' }
617
- }
1
+ import React, { useEffect, useState } from 'react'
2
+ import PropTypes, { string } from 'prop-types'
3
+ import dayjs from 'dayjs'
4
+ import utc from 'dayjs/plugin/utc'
5
+ import { useApi } from '../../../contexts/ApiContext'
6
+ import { useSession } from '../../../contexts/SessionContext'
7
+ import { ToastType, useToast } from '../../../contexts/ToastContext'
8
+ import { useLanguage } from '../../../contexts/LanguageContext'
9
+
10
+ dayjs.extend(utc)
11
+
12
+ export const DashboardBusinessList = (props) => {
13
+ const {
14
+ asDashboard,
15
+ UIComponent,
16
+ paginationSettings,
17
+ propsToFetch,
18
+ initialPageSize,
19
+ loadMorePageSize,
20
+ isSearchByBusinessId,
21
+ isSearchByBusinessName,
22
+ isSearchByBusinessEmail,
23
+ isSearchByBusinessPhone,
24
+ noActiveStatusCondition
25
+ } = props
26
+
27
+ const [ordering] = useApi()
28
+ const [session] = useSession()
29
+ const [, t] = useLanguage()
30
+ const [, { showToast }] = useToast()
31
+
32
+ const allowCodes = ['us', 'usa', 'united states', 'united states of american', 'ca', 'canada']
33
+
34
+ const [businessList, setBusinessList] = useState({ loading: false, error: null, businesses: [] })
35
+ const [countriesState, setCountriesState] = useState({ countries: [], loading: true, error: null, enabled: false })
36
+ const [citiesList, setCitiesList] = useState([])
37
+ const [pagination, setPagination] = useState({
38
+ currentPage: (paginationSettings.controlType === 'pages' && paginationSettings.initialPage && paginationSettings.initialPage >= 1) ? paginationSettings.initialPage - 1 : 0,
39
+ pageSize: paginationSettings.pageSize ?? 10
40
+ })
41
+
42
+ const [searchValue, setSearchValue] = useState(null)
43
+ const [selectedBusinessActiveState, setSelectedBusinessActiveState] = useState(true)
44
+ const [businessTypeSelected, setBusinessTypeSelected] = useState(null)
45
+ const [businessIds, setBusinessIds] = useState([])
46
+ const [filterValues, setFilterValues] = useState({})
47
+ const [inActiveBusinesses, setInActiveBusinesses] = useState([])
48
+
49
+ /**
50
+ * Save filter type values
51
+ * @param {object} types
52
+ */
53
+ const handleChangeFilterValues = (types) => {
54
+ setFilterValues(types)
55
+ }
56
+
57
+ /**
58
+ * Method to get businesses from API
59
+ * @param {number, number} pageSize page
60
+ */
61
+ const getBusinesses = async (pageSize, page, isInactive) => {
62
+ let where = []
63
+ const conditions = []
64
+ const options = {
65
+ query: {
66
+ page: page,
67
+ page_size: pageSize
68
+ }
69
+ }
70
+
71
+ if (!noActiveStatusCondition || isInactive) {
72
+ conditions.push({
73
+ attribute: 'enabled',
74
+ value: isInactive ? false : selectedBusinessActiveState
75
+ })
76
+ }
77
+
78
+ if (businessTypeSelected) {
79
+ conditions.push({
80
+ attribute: 'types',
81
+ conditions: [{
82
+ attribute: 'id',
83
+ value: businessTypeSelected
84
+ }]
85
+ })
86
+ }
87
+
88
+ if (searchValue) {
89
+ const searchConditions = []
90
+ if (isSearchByBusinessId) {
91
+ searchConditions.push(
92
+ {
93
+ attribute: 'id',
94
+ value: {
95
+ condition: 'ilike',
96
+ value: encodeURI(`%${searchValue}%`)
97
+ }
98
+ }
99
+ )
100
+ }
101
+
102
+ if (isSearchByBusinessName) {
103
+ searchConditions.push(
104
+ {
105
+ attribute: 'name',
106
+ value: {
107
+ condition: 'ilike',
108
+ value: encodeURI(`%${searchValue}%`)
109
+ }
110
+ }
111
+ )
112
+ }
113
+
114
+ if (isSearchByBusinessEmail) {
115
+ searchConditions.push(
116
+ {
117
+ attribute: 'email',
118
+ value: {
119
+ condition: 'ilike',
120
+ value: encodeURI(`%${searchValue}%`)
121
+ }
122
+ }
123
+ )
124
+ }
125
+
126
+ if (isSearchByBusinessPhone) {
127
+ searchConditions.push(
128
+ {
129
+ attribute: 'phone',
130
+ value: {
131
+ condition: 'ilike',
132
+ value: encodeURI(`%${searchValue}%`)
133
+ }
134
+ }
135
+ )
136
+ }
137
+ conditions.push({
138
+ conector: 'OR',
139
+ conditions: searchConditions
140
+ })
141
+ }
142
+
143
+ if (Object.keys(filterValues).length > 0) {
144
+ const filterConditons = []
145
+
146
+ if (filterValues?.name && filterValues?.name !== null) {
147
+ filterConditons.push(
148
+ {
149
+ attribute: 'name',
150
+ value: {
151
+ condition: 'ilike',
152
+ value: encodeURI(`%${filterValues?.name}%`)
153
+ }
154
+ }
155
+ )
156
+ }
157
+ if (filterValues?.availableMenus?.value !== '') {
158
+ filterConditons.push(
159
+ {
160
+ attribute: 'available_menus_count',
161
+ value: {
162
+ condition: filterValues?.availableMenus?.condition,
163
+ value: filterValues?.availableMenus?.value
164
+ }
165
+ }
166
+ )
167
+ }
168
+ if (filterValues?.menus?.value !== '') {
169
+ filterConditons.push(
170
+ {
171
+ attribute: 'menus_count',
172
+ value: {
173
+ condition: filterValues?.menus?.condition,
174
+ value: filterValues?.menus?.value
175
+ }
176
+ }
177
+ )
178
+ }
179
+ if (filterValues?.cityIds.length !== 0) {
180
+ filterConditons.push(
181
+ {
182
+ attribute: 'city_id',
183
+ value: filterValues?.cityIds
184
+ }
185
+ )
186
+ }
187
+ if (filterValues?.enabled !== null) {
188
+ filterConditons.push(
189
+ {
190
+ attribute: 'enabled',
191
+ value: filterValues?.enabled
192
+ }
193
+ )
194
+ }
195
+ if (filterValues?.featured !== null) {
196
+ filterConditons.push(
197
+ {
198
+ attribute: 'featured',
199
+ value: filterValues?.featured
200
+ }
201
+ )
202
+ }
203
+
204
+ if (filterConditons.length) {
205
+ conditions.push({
206
+ conector: 'AND',
207
+ conditions: filterConditons
208
+ })
209
+ }
210
+ }
211
+
212
+ if (conditions.length) {
213
+ where = {
214
+ conditions,
215
+ conector: 'AND'
216
+ }
217
+ }
218
+
219
+ const functionFetch = asDashboard
220
+ ? ordering.setAccessToken(session.token).businesses().select(propsToFetch).asDashboard().where(where)
221
+ : ordering.setAccessToken(session.token).businesses().select(propsToFetch).where(where)
222
+
223
+ return await functionFetch.get(options)
224
+ }
225
+
226
+ /**
227
+ * Method to get the countries from API
228
+ */
229
+ const getCountries = async () => {
230
+ try {
231
+ setCountriesState({ ...countriesState, loading: true })
232
+ const { content: { error, result } } = await ordering.countries().get()
233
+ if (!error) {
234
+ const enabled = result.filter(country => country?.enabled).some(country => (allowCodes.includes(country?.code?.toLowerCase()) || allowCodes.includes(country?.name?.toLowerCase())))
235
+ setCountriesState({ ...countriesState, loading: false, countries: result, enabled })
236
+ let cities = []
237
+ for (const country of result) {
238
+ if (country?.enabled) {
239
+ cities = [...cities, ...country?.cities]
240
+ }
241
+ }
242
+ setCitiesList(cities)
243
+ } else {
244
+ setCountriesState({ ...countriesState, loading: false, error: result })
245
+ }
246
+ } catch (err) {
247
+ setCountriesState({ ...countriesState, loading: false, error: [err.message] })
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Method to load businesses
253
+ */
254
+ const loadBusinesses = async () => {
255
+ if (!session.token) return
256
+ try {
257
+ setBusinessList({ ...businessList, loading: true })
258
+ const response = await getBusinesses((initialPageSize || pagination.pageSize), 1)
259
+
260
+ setBusinessList({
261
+ loading: false,
262
+ businesses: response.content.error ? [] : response.content.result,
263
+ error: response.content.error ? response.content.result : null
264
+ })
265
+
266
+ if (!response.content.error) {
267
+ setPagination({
268
+ currentPage: response.content.pagination.current_page,
269
+ pageSize: response.content.pagination.page_size === 0 ? pagination.pageSize : response.content.pagination.page_size,
270
+ totalPages: response.content.pagination.total_pages,
271
+ total: response.content.pagination.total,
272
+ from: response.content.pagination.from,
273
+ to: response.content.pagination.to
274
+ })
275
+ }
276
+ } catch (err) {
277
+ if (err?.constructor?.name !== 'Cancel') {
278
+ setBusinessList({ ...businessList, loading: false, error: [err.message] })
279
+ }
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Method to get businesses
285
+ */
286
+ const getInActiveBusinesses = async () => {
287
+ if (!session.token) return
288
+ try {
289
+ const response = await getBusinesses(10, 1, true)
290
+
291
+ if (!response.content.error) {
292
+ setInActiveBusinesses(response?.content?.result)
293
+ }
294
+ } catch (err) {
295
+ console.log(err)
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Method to get businesses more
301
+ */
302
+ const loadMoreBusinesses = async () => {
303
+ setBusinessList({ ...businessList, loading: true })
304
+ try {
305
+ const response = await getBusinesses(loadMorePageSize, Math.ceil(pagination?.to / loadMorePageSize) + 1)
306
+ setBusinessList({
307
+ loading: false,
308
+ businesses: response.content.error ? businessList.businesses : businessList.businesses.concat(response.content.result),
309
+ error: response.content.error ? response.content.result : null
310
+ })
311
+ if (!response.content.error) {
312
+ setPagination({
313
+ currentPage: response.content.pagination.current_page,
314
+ pageSize: response.content.pagination.page_size === 0 ? pagination.pageSize : response.content.pagination.page_size,
315
+ totalPages: response.content.pagination.total_pages,
316
+ total: response.content.pagination.total,
317
+ from: response.content.pagination.from,
318
+ to: response.content.pagination.to
319
+ })
320
+ }
321
+ } catch (err) {
322
+ if (err.constructor.name !== 'Cancel') {
323
+ setBusinessList({ ...businessList, loading: false, error: [err.message] })
324
+ }
325
+ }
326
+ }
327
+
328
+ /**
329
+ * Method to get businesses for page and pageSize
330
+ */
331
+ const getPageBusinesses = async (pageSize, page) => {
332
+ setBusinessList({ ...businessList, loading: true })
333
+ try {
334
+ const response = await getBusinesses(pageSize, page)
335
+ setBusinessList({
336
+ loading: false,
337
+ businesses: response.content.error ? businessList.businesses : response.content.result,
338
+ error: response.content.error ? response.content.result : null
339
+ })
340
+ if (!response.content.error) {
341
+ setPagination({
342
+ currentPage: response.content.pagination.current_page,
343
+ pageSize: response.content.pagination.page_size === 0 ? pagination.pageSize : response.content.pagination.page_size,
344
+ totalPages: response.content.pagination.total_pages,
345
+ total: response.content.pagination.total,
346
+ from: response.content.pagination.from,
347
+ to: response.content.pagination.to
348
+ })
349
+ }
350
+ } catch (err) {
351
+ if (err.constructor.name !== 'Cancel') {
352
+ setBusinessList({ ...businessList, loading: false, error: [err.message] })
353
+ }
354
+ }
355
+ }
356
+
357
+ /**
358
+ * Method to change businesses enable/disable
359
+ * @param {Boolean} enabled businesses enable state
360
+ * @param {Boolean} isFeatured flag to check if featured or enabled
361
+ */
362
+ const handleEnableAllBusiness = async (enabled, isFeatured = false) => {
363
+ try {
364
+ showToast(ToastType.Info, t('LOADING', 'Loading'))
365
+ const changes = {
366
+ businesses_id: businessIds,
367
+ ...(isFeatured ? { featured: enabled } : { enabled })
368
+ }
369
+ const requestOptions = {
370
+ method: 'PUT',
371
+ headers: {
372
+ 'Content-Type': 'application/json',
373
+ Authorization: `Bearer ${session.token}`
374
+ },
375
+ body: JSON.stringify(changes)
376
+ }
377
+ const response = await fetch(`${ordering.root}/business`, requestOptions)
378
+ const content = await response.json()
379
+ if (!content?.error) {
380
+ const updatedBusinessList = isFeatured
381
+ ? businessList?.businesses.map(business => (businessIds.includes(business?.id)) ? { ...business, featured: enabled } : business)
382
+ : businessList?.businesses.filter(business => !businessIds.includes(business?.id))
383
+ setBusinessList({
384
+ ...businessList,
385
+ businesses: updatedBusinessList
386
+ })
387
+ if (!isFeatured) setBusinessIds([])
388
+ showToast(ToastType.Success, t('BUSINESS_UPDATED', 'Business updated'))
389
+ } else {
390
+ showToast(ToastType.Error, content?.result)
391
+ }
392
+ } catch (err) {
393
+ showToast(ToastType.Error, err.message)
394
+ }
395
+ }
396
+
397
+ /**
398
+ * Method to delete business list
399
+ */
400
+ const handleDeleteMultiBusinesses = async () => {
401
+ try {
402
+ showToast(ToastType.Info, t('LOADING', 'Loading'))
403
+ const requestOptions = {
404
+ method: 'DELETE',
405
+ headers: {
406
+ 'Content-Type': 'application/json',
407
+ Authorization: `Bearer ${session.token}`
408
+ },
409
+ body: JSON.stringify({ businesses_id: businessIds })
410
+ }
411
+ const response = await fetch(`${ordering.root}/business`, requestOptions)
412
+ const content = await response.json()
413
+ if (!content?.error) {
414
+ const updatedBusinessList = businessList?.businesses.filter(business => !businessIds.includes(business?.id))
415
+ setBusinessList({
416
+ ...businessList,
417
+ businesses: updatedBusinessList
418
+ })
419
+ setBusinessIds([])
420
+ showToast(ToastType.Success, t('BUSINESS_DELETED', 'Business deleted'))
421
+ } else {
422
+ showToast(ToastType.Error, content?.result)
423
+ }
424
+ } catch (err) {
425
+ showToast(ToastType.Error, err.message)
426
+ }
427
+ }
428
+
429
+ /**
430
+ * Method to change user active state for filter
431
+ */
432
+ const handleChangeBusinessActiveState = () => {
433
+ setSelectedBusinessActiveState(!selectedBusinessActiveState)
434
+ }
435
+
436
+ /**
437
+ * Change business type
438
+ * @param {object} businessType Business type
439
+ */
440
+ const handleChangeBusinessType = (businessType) => {
441
+ if (businessType !== businessTypeSelected) {
442
+ setBusinessList({
443
+ ...businessList,
444
+ businesses: [],
445
+ loading: true
446
+ })
447
+ setBusinessTypeSelected(businessType)
448
+ }
449
+ }
450
+
451
+ /**
452
+ * Method to remove the business from business list
453
+ * @param {Number} businessId business id to remove
454
+ */
455
+ const handleSucessRemoveBusiness = (businessId) => {
456
+ const businesses = businessList.businesses.filter(business => business.id !== businessId)
457
+ setPagination({
458
+ ...pagination,
459
+ to: pagination?.to - 1,
460
+ total: pagination?.total - 1
461
+ })
462
+ setBusinessList({ ...businessList, businesses })
463
+ }
464
+
465
+ /**
466
+ * Method to add the business in the business list
467
+ * @param {Object} business business to add
468
+ */
469
+ const handleSucessAddBusiness = (business) => {
470
+ const businesses = [...businessList.businesses, business]
471
+ setPagination({
472
+ ...pagination,
473
+ to: pagination?.to + 1,
474
+ total: pagination?.total + 1
475
+ })
476
+ setBusinessList({ ...businessList, businesses })
477
+ }
478
+
479
+ /**
480
+ * Method to update the business from the business list
481
+ * @param {Object} business business to update
482
+ */
483
+ const handleSucessUpdateBusiness = (business) => {
484
+ const found = businessList.businesses.find(_business => _business.id === business.id)
485
+ if (found) {
486
+ if (selectedBusinessActiveState === business?.enabled) {
487
+ const businesses = businessList.businesses.filter(_business => {
488
+ if (_business.id === business.id) {
489
+ Object.assign(_business, business)
490
+ }
491
+ return true
492
+ })
493
+ setBusinessList({ ...businessList, businesses: businesses })
494
+ } else {
495
+ handleSucessRemoveBusiness(business.id)
496
+ }
497
+ } else {
498
+ if (selectedBusinessActiveState === business?.enabled) {
499
+ handleSucessAddBusiness(business)
500
+ } else {
501
+ handleSucessRemoveBusiness(business.id)
502
+ }
503
+ }
504
+ }
505
+
506
+ /**
507
+ * Method to change selected businesses
508
+ * @param {Number} businessId business id to change selected state
509
+ */
510
+ const handleChangeBusinessIds = (businessId) => {
511
+ const updatedBusinessIds = businessIds.includes(businessId)
512
+ ? businessIds.filter(id => id !== businessId)
513
+ : [...businessIds, businessId]
514
+ setBusinessIds(updatedBusinessIds)
515
+ }
516
+
517
+ useEffect(() => {
518
+ if (businessList.loading || businessList.businesses.length > 0) return
519
+ if (pagination?.currentPage !== 0 && pagination?.total !== 0) {
520
+ if (Math.ceil(pagination?.total / pagination.pageSize) >= pagination?.currentPage) {
521
+ getPageBusinesses(pagination.pageSize, pagination.currentPage)
522
+ } else {
523
+ getPageBusinesses(pagination.pageSize, pagination.currentPage - 1)
524
+ }
525
+ }
526
+ }, [businessList.businesses])
527
+
528
+ /**
529
+ * Listening session
530
+ */
531
+ useEffect(() => {
532
+ if (props.businesses) {
533
+ setBusinessList({
534
+ ...businessList,
535
+ businesses: props.businesses
536
+ })
537
+ } else {
538
+ loadBusinesses()
539
+ }
540
+ }, [session, searchValue, selectedBusinessActiveState, businessTypeSelected, filterValues])
541
+
542
+ useEffect(() => {
543
+ getCountries()
544
+ }, [])
545
+
546
+ useEffect(() => {
547
+ getInActiveBusinesses()
548
+ }, [businessList?.businesses?.length])
549
+
550
+ return (
551
+ <>
552
+ {
553
+ UIComponent && (
554
+ <UIComponent
555
+ {...props}
556
+ pagination={pagination}
557
+ searchValue={searchValue}
558
+ businessIds={businessIds}
559
+ businessList={businessList}
560
+ selectedBusinessActiveState={selectedBusinessActiveState}
561
+ onSearch={setSearchValue}
562
+ loadBusinesses={loadBusinesses}
563
+ setBusinessIds={setBusinessIds}
564
+ getPageBusinesses={getPageBusinesses}
565
+ loadMoreBusinesses={loadMoreBusinesses}
566
+ handleSucessAddBusiness={handleSucessAddBusiness}
567
+ handleChangeBusinessIds={handleChangeBusinessIds}
568
+ handleEnableAllBusiness={handleEnableAllBusiness}
569
+ handleChangeBusinessType={handleChangeBusinessType}
570
+ handleSucessRemoveBusiness={handleSucessRemoveBusiness}
571
+ handleSucessUpdateBusiness={handleSucessUpdateBusiness}
572
+ handleDeleteMultiBusinesses={handleDeleteMultiBusinesses}
573
+ handleChangeBusinessActiveState={handleChangeBusinessActiveState}
574
+ countriesState={countriesState}
575
+ filterValues={filterValues}
576
+ handleChangeFilterValues={handleChangeFilterValues}
577
+ businessTypeSelected={businessTypeSelected}
578
+ inActiveBusinesses={inActiveBusinesses}
579
+ citiesList={citiesList}
580
+ />
581
+ )
582
+ }
583
+ </>
584
+ )
585
+ }
586
+
587
+ DashboardBusinessList.propTypes = {
588
+ /**
589
+ * UI Component, this must be containt all graphic elements and use parent props
590
+ */
591
+ UIComponent: PropTypes.elementType,
592
+ /**
593
+ * Enable/Disable search option
594
+ * Search Businesses list by a business ID
595
+ */
596
+ isSearchByBusinessId: PropTypes.bool,
597
+ /**
598
+ * Enable/Disable search option
599
+ * Search Businesses list by a business email
600
+ */
601
+ isSearchByBusinessEmail: PropTypes.bool,
602
+ /**
603
+ * Enable/Disable search option
604
+ * Search Businesses list by a business phone
605
+ */
606
+ isSearchByBusinessPhone: PropTypes.bool,
607
+ /**
608
+ * Array of user props to fetch
609
+ */
610
+ propsToFetch: PropTypes.arrayOf(string)
611
+ }
612
+
613
+ DashboardBusinessList.defaultProps = {
614
+ loadMorePageSize: 10,
615
+ propsToFetch: ['id', 'alcohol', 'city', 'delivery_price', 'distance', 'delivery_time', 'ribbon', 'enabled', 'featured', 'food', 'groceries', 'header', 'laundry', 'logo', 'minimum', 'name', 'pickup_time', 'slug', 'reviews'],
616
+ paginationSettings: { initialPage: 1, pageSize: 10, controlType: 'infinity' }
617
+ }