ordering-components-external 13.1.7 → 13.1.8

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 (550) hide show
  1. package/.babelrc +22 -22
  2. package/.vscode/settings.json +3 -3
  3. package/_bundles/{0.ordering-component.949cbfb0cbd9c20d005d.js → 0.ordering-component.94a28b3a5bfb4d729a1b.js} +1 -1
  4. package/_bundles/{1.ordering-component.949cbfb0cbd9c20d005d.js → 1.ordering-component.94a28b3a5bfb4d729a1b.js} +1 -1
  5. package/_bundles/{7.ordering-component.949cbfb0cbd9c20d005d.js → 7.ordering-component.94a28b3a5bfb4d729a1b.js} +1 -1
  6. package/_bundles/ordering-component.94a28b3a5bfb4d729a1b.js +2 -0
  7. package/_modules/components/AddressDetails/index.js +34 -34
  8. package/_modules/components/AddressForm/index.js +59 -59
  9. package/_modules/components/AddressList/index.js +52 -52
  10. package/_modules/components/Analitycs/index.js +11 -11
  11. package/_modules/components/AnalyticsSegment/index.js +10 -10
  12. package/_modules/components/AppleLogin/index.js +35 -35
  13. package/_modules/components/BaseComponent/index.js +15 -15
  14. package/_modules/components/BusinessAndProductList/index.js +28 -28
  15. package/_modules/components/BusinessBasicInformation/index.js +28 -28
  16. package/_modules/components/BusinessController/index.js +62 -62
  17. package/_modules/components/BusinessInformation/BusinessOption/index.js +22 -22
  18. package/_modules/components/BusinessInformation/index.js +24 -24
  19. package/_modules/components/BusinessList/index.js +54 -54
  20. package/_modules/components/BusinessMenuListing/index.js +29 -29
  21. package/_modules/components/BusinessProductsCategories/index.js +18 -18
  22. package/_modules/components/BusinessProductsSearch/index.js +16 -16
  23. package/_modules/components/BusinessReviews/index.js +36 -36
  24. package/_modules/components/BusinessSearchList/index.js +30 -30
  25. package/_modules/components/BusinessSortControl/index.js +34 -34
  26. package/_modules/components/BusinessTypeFilter/index.js +35 -35
  27. package/_modules/components/BusinessesMap/index.js +33 -33
  28. package/_modules/components/Cart/index.js +47 -47
  29. package/_modules/components/CartStoresListing/index.js +13 -13
  30. package/_modules/components/Checkout/index.js +72 -72
  31. package/_modules/components/CmsContent/index.js +29 -29
  32. package/_modules/components/Contacts/index.js +36 -36
  33. package/_modules/components/CouponControl/index.js +29 -29
  34. package/_modules/components/DragAndDrop/index.js +4 -4
  35. package/_modules/components/DriverList/index.js +30 -30
  36. package/_modules/components/DriverTips/index.js +41 -41
  37. package/_modules/components/Emitter/index.js +3 -3
  38. package/_modules/components/FacebookLoginButton/index.js +49 -49
  39. package/_modules/components/FacebookPixel/index.js +8 -8
  40. package/_modules/components/FavoriteList/index.js +40 -40
  41. package/_modules/components/FirebaseGoogleLoginButton/index.js +19 -19
  42. package/_modules/components/FloatingButton/index.js +22 -22
  43. package/_modules/components/ForgotPasswordForm/index.js +52 -52
  44. package/_modules/components/GiftCard/GiftCardOrdersList/index.js +13 -13
  45. package/_modules/components/GiftCard/PurchaseGiftCard/index.js +15 -15
  46. package/_modules/components/GiftCard/RedeemGiftCard/index.js +13 -13
  47. package/_modules/components/GiftCard/SendGiftCard/index.js +13 -13
  48. package/_modules/components/GoogleAutocompleteInput/index.js +25 -25
  49. package/_modules/components/GoogleIdentity/index.js +37 -37
  50. package/_modules/components/GoogleLoginButton/index.js +58 -58
  51. package/_modules/components/GoogleMaps/index.js +44 -44
  52. package/_modules/components/GpsButton/index.js +27 -27
  53. package/_modules/components/LanguageSelector/index.js +37 -37
  54. package/_modules/components/LoginForm/index.js +67 -67
  55. package/_modules/components/LogoutAction/index.js +110 -36
  56. package/_modules/components/MainSearch/index.js +40 -40
  57. package/_modules/components/MapView/index.js +10 -10
  58. package/_modules/components/MenuControl/index.js +58 -58
  59. package/_modules/components/Messages/index.js +34 -34
  60. package/_modules/components/MomentOption/index.js +57 -57
  61. package/_modules/components/MultiCartCreate/index.js +9 -9
  62. package/_modules/components/MultiCartsPaymethodsAndWallets/index.js +20 -20
  63. package/_modules/components/MultiCheckout/index.js +24 -24
  64. package/_modules/components/MultiOrdersDetails/index.js +18 -18
  65. package/_modules/components/MyOrders/index.js +33 -33
  66. package/_modules/components/MyOrdersList/index.js +34 -34
  67. package/_modules/components/NewOrderNotification/index.js +8 -8
  68. package/_modules/components/OrderChange/index.js +29 -29
  69. package/_modules/components/OrderDetails/index.js +55 -55
  70. package/_modules/components/OrderList/index.js +56 -56
  71. package/_modules/components/OrderListGroups/index.js +12 -12
  72. package/_modules/components/OrderReview/index.js +31 -31
  73. package/_modules/components/OrderTypeControl/index.js +23 -23
  74. package/_modules/components/OrderVerticalList/index.js +11 -11
  75. package/_modules/components/OrdersControlFilters/index.js +14 -14
  76. package/_modules/components/OrdersDashboardComponents/Appointments/index.js +13 -13
  77. package/_modules/components/OrdersDashboardComponents/BusinessProductsListing/index.js +38 -38
  78. package/_modules/components/OrdersDashboardComponents/CheckPassword/index.js +33 -33
  79. package/_modules/components/OrdersDashboardComponents/CityList/index.js +32 -32
  80. package/_modules/components/OrdersDashboardComponents/CountryList/index.js +29 -29
  81. package/_modules/components/OrdersDashboardComponents/CustomOrderDetails/index.js +21 -21
  82. package/_modules/components/OrdersDashboardComponents/DashboardBusinessList/index.js +67 -67
  83. package/_modules/components/OrdersDashboardComponents/DashboardOrdersList/index.js +71 -71
  84. package/_modules/components/OrdersDashboardComponents/DriversList/index.js +69 -69
  85. package/_modules/components/OrdersDashboardComponents/ExportCSV/index.js +25 -25
  86. package/_modules/components/OrdersDashboardComponents/GiftCardsList/index.js +15 -15
  87. package/_modules/components/OrdersDashboardComponents/GoogleMapsApiKeySetting/index.js +13 -13
  88. package/_modules/components/OrdersDashboardComponents/LogisticInformation/index.js +28 -28
  89. package/_modules/components/OrdersDashboardComponents/Logistics/index.js +28 -28
  90. package/_modules/components/OrdersDashboardComponents/Messages/index.js +39 -39
  91. package/_modules/components/OrdersDashboardComponents/MetaFields/index.js +37 -37
  92. package/_modules/components/OrdersDashboardComponents/OrderDetails/index.js +47 -47
  93. package/_modules/components/OrdersDashboardComponents/OrderNotification/index.js +19 -19
  94. package/_modules/components/OrdersDashboardComponents/OrdersFilter/index.js +73 -73
  95. package/_modules/components/OrdersDashboardComponents/OrdersManage/index.js +68 -68
  96. package/_modules/components/OrdersDashboardComponents/PointsWalletLevels/index.js +37 -37
  97. package/_modules/components/OrdersDashboardComponents/ReviewCustomer/index.js +25 -25
  98. package/_modules/components/OrdersDashboardComponents/Schedule/index.js +56 -56
  99. package/_modules/components/OrdersDashboardComponents/SettingsList/index.js +50 -50
  100. package/_modules/components/OrdersDashboardComponents/UserFormDetails/index.js +80 -80
  101. package/_modules/components/OrdersDashboardComponents/UsersList/index.js +65 -65
  102. package/_modules/components/OrdersDashboardComponents/WebsocketStatus/index.js +10 -10
  103. package/_modules/components/PageBanner/index.js +16 -16
  104. package/_modules/components/PaymentOptionCash/index.js +26 -26
  105. package/_modules/components/PaymentOptionPaypal/index.js +32 -32
  106. package/_modules/components/PaymentOptionSquare/index.js +10 -10
  107. package/_modules/components/PaymentOptionStripe/index.js +41 -41
  108. package/_modules/components/PaymentOptionStripeDirect/index.js +32 -32
  109. package/_modules/components/PaymentOptionStripeRedirect/StripeRedirectForm/index.js +23 -23
  110. package/_modules/components/PaymentOptionStripeRedirect/index.js +38 -38
  111. package/_modules/components/PaymentOptionWallet/index.js +8 -8
  112. package/_modules/components/PaymentOptions/index.js +36 -36
  113. package/_modules/components/PaymethodList/index.js +29 -29
  114. package/_modules/components/PhoneAutocomplete/index.js +27 -27
  115. package/_modules/components/PlaceSpot/index.js +13 -13
  116. package/_modules/components/Popup/index.js +38 -38
  117. package/_modules/components/ProductComponent/index.js +36 -36
  118. package/_modules/components/ProductForm/index.js +130 -130
  119. package/_modules/components/ProductImages/index.js +20 -20
  120. package/_modules/components/ProductIngredient/index.js +19 -19
  121. package/_modules/components/ProductItemAccordion/index.js +15 -15
  122. package/_modules/components/ProductOption/index.js +9 -9
  123. package/_modules/components/ProductOptionSuboption/index.js +36 -36
  124. package/_modules/components/ProductShare/index.js +26 -26
  125. package/_modules/components/ProductsList/index.js +26 -26
  126. package/_modules/components/ProductsListing/index.js +48 -48
  127. package/_modules/components/ProfessionalInfo/index.js +32 -32
  128. package/_modules/components/PromotionsController/index.js +8 -8
  129. package/_modules/components/QueryLoginSpoonity/index.js +29 -29
  130. package/_modules/components/ReCaptcha/index.js +9 -9
  131. package/_modules/components/ResetPassword/index.js +29 -29
  132. package/_modules/components/ReviewCustomer/index.js +25 -25
  133. package/_modules/components/ReviewDriver/index.js +29 -29
  134. package/_modules/components/ReviewProduct/index.js +34 -34
  135. package/_modules/components/SearchOptions/index.js +23 -23
  136. package/_modules/components/Sessions/index.js +30 -30
  137. package/_modules/components/SignupForm/index.js +66 -66
  138. package/_modules/components/SingleBusinessCard/index.js +29 -29
  139. package/_modules/components/SingleOrderCard/index.js +30 -30
  140. package/_modules/components/SingleProductCard/index.js +27 -27
  141. package/_modules/components/SingleProfessionalCard/index.js +27 -27
  142. package/_modules/components/SmartAppBanner/index.js +13 -13
  143. package/_modules/components/StoreProductList/index.js +34 -34
  144. package/_modules/components/StripeElementsForm/CardForm/index.js +34 -34
  145. package/_modules/components/StripeElementsForm/index.js +24 -24
  146. package/_modules/components/UpsellingPage/index.js +26 -26
  147. package/_modules/components/UserFormDetails/index.js +79 -79
  148. package/_modules/components/UserVerification/index.js +24 -24
  149. package/_modules/components/WalletList/index.js +8 -8
  150. package/_modules/components/WebsocketStatus/index.js +10 -10
  151. package/_modules/components/WrapperGoogleMaps/index.js +9 -9
  152. package/_modules/contexts/ApiContext/index.js +13 -13
  153. package/_modules/contexts/BillingContext/index.js +7 -7
  154. package/_modules/contexts/BusinessContext/index.js +16 -16
  155. package/_modules/contexts/ConfigContext/index.js +17 -17
  156. package/_modules/contexts/CustomerContext/index.js +7 -7
  157. package/_modules/contexts/EventContext/index.js +9 -9
  158. package/_modules/contexts/LanguageContext/index.js +20 -20
  159. package/_modules/contexts/OptimizationLoadContext/index.js +15 -15
  160. package/_modules/contexts/OrderContext/index.js +72 -72
  161. package/_modules/contexts/OrderingContext/index.js +7 -7
  162. package/_modules/contexts/OrderingThemeContext/index.js +18 -18
  163. package/_modules/contexts/ProductContext/index.js +14 -14
  164. package/_modules/contexts/SessionContext/index.js +16 -16
  165. package/_modules/contexts/SiteContext/index.js +16 -16
  166. package/_modules/contexts/ToastContext/index.js +4 -4
  167. package/_modules/contexts/UtilsContext/index.js +14 -14
  168. package/_modules/contexts/ValidationsFieldsContext/index.js +7 -7
  169. package/_modules/contexts/WebsocketContext/index.js +16 -16
  170. package/_modules/contexts/WebsocketContext/socket.js +4 -4
  171. package/_modules/native/src/NativeStrategy/index.js +6 -6
  172. package/_modules/native/src/contexts/OrderingContext/index.js +7 -7
  173. package/_modules/webStrategy/index.js +5 -5
  174. package/cypress/fixtures/example.json +4 -4
  175. package/cypress/integration/naked/BusinessProductsCategories.spec.js +9 -9
  176. package/cypress/integration/naked/PhoneAutocomplete.spec.js +22 -22
  177. package/cypress/integration/naked/activeOrders.spec.js +15 -15
  178. package/cypress/integration/naked/addressDetails.spec.js +10 -10
  179. package/cypress/integration/naked/appleLogin.spec.js +14 -14
  180. package/cypress/integration/naked/businessBasicInformation.spec.js +14 -14
  181. package/cypress/integration/naked/businessController.spec.js +9 -9
  182. package/cypress/integration/naked/businessInformation.spec.js +19 -19
  183. package/cypress/integration/naked/businessProductsSearch.spec.js +9 -9
  184. package/cypress/integration/naked/businessReviews.spec.js +16 -16
  185. package/cypress/integration/naked/businessSortControl.spec.js +9 -9
  186. package/cypress/integration/naked/businessTypeFilter.spec.js +10 -10
  187. package/cypress/integration/naked/businessesMap.spec.js +13 -13
  188. package/cypress/integration/naked/cms.spec.js +9 -9
  189. package/cypress/integration/naked/config.spec.js +34 -34
  190. package/cypress/integration/naked/driverTips.spec.js +10 -10
  191. package/cypress/integration/naked/events.spec.js +13 -13
  192. package/cypress/integration/naked/facebookLogin.spec.js +13 -13
  193. package/cypress/integration/naked/floatingButton.spec.js +13 -13
  194. package/cypress/integration/naked/forgotPassword.spec.js +20 -20
  195. package/cypress/integration/naked/googleLogin.spec.js +11 -11
  196. package/cypress/integration/naked/languageExamples.spec.js +25 -25
  197. package/cypress/integration/naked/languageSelector.spec.js +10 -10
  198. package/cypress/integration/naked/login.spec.js +38 -38
  199. package/cypress/integration/naked/logout.spec.js +15 -15
  200. package/cypress/integration/naked/mainSearch.spec.js +9 -9
  201. package/cypress/integration/naked/menuControl.spec.js +9 -9
  202. package/cypress/integration/naked/messages.spec.js +25 -25
  203. package/cypress/integration/naked/momentOption.spec.js +10 -10
  204. package/cypress/integration/naked/myOrders.spec.js +11 -11
  205. package/cypress/integration/naked/myOrdersList.spec.js +9 -9
  206. package/cypress/integration/naked/orderContextAdvanced.spec.js +23 -23
  207. package/cypress/integration/naked/orderDetails.spec.js +11 -11
  208. package/cypress/integration/naked/paymentOptionCash.spec.js +21 -21
  209. package/cypress/integration/naked/paymentOptionStripe.spec.js +11 -11
  210. package/cypress/integration/naked/paymentOptionStripeDirect.spec.js +11 -11
  211. package/cypress/integration/naked/paymentOptions.spec.js +9 -9
  212. package/cypress/integration/naked/popupExample.spec.js +17 -17
  213. package/cypress/integration/naked/productImages.spec.js +11 -11
  214. package/cypress/integration/naked/productOptionExample.spec.js +21 -21
  215. package/cypress/integration/naked/productShare.spec.js +9 -9
  216. package/cypress/integration/naked/productsList.spec.js +9 -9
  217. package/cypress/integration/naked/resetPassword.spec.js +11 -11
  218. package/cypress/integration/naked/reviewOrders.spec.js +13 -13
  219. package/cypress/integration/naked/searchOptions.spec.js +18 -18
  220. package/cypress/integration/naked/signup.spec.js +31 -31
  221. package/cypress/integration/naked/upselling.spec.js +13 -13
  222. package/cypress/integration/naked/userDetails.spec.js +12 -12
  223. package/cypress/plugins/index.js +21 -21
  224. package/cypress/support/commands.js +35 -35
  225. package/cypress/support/index.js +20 -20
  226. package/cypress.json +12 -12
  227. package/example/App.js +263 -263
  228. package/example/components/ActiveOrdersUI/index.js +72 -72
  229. package/example/components/AddressDetailsUI/index.js +101 -101
  230. package/example/components/AddressFormUI/index.js +161 -161
  231. package/example/components/AddressListUI/index.js +33 -33
  232. package/example/components/AlertPopup/index.js +10 -10
  233. package/example/components/AlertUI/index.js +49 -49
  234. package/example/components/AlertUI/style.css +5 -5
  235. package/example/components/AppleLoginUI/index.js +40 -40
  236. package/example/components/BaseComponentUI/index.js +34 -34
  237. package/example/components/BusinessBasicInformationUI/index.js +118 -118
  238. package/example/components/BusinessControllerUI/index.js +89 -89
  239. package/example/components/BusinessInformationUI/BusinessOptionUI/index.js +83 -83
  240. package/example/components/BusinessInformationUI/index.js +83 -83
  241. package/example/components/BusinessProductsCategoriesUI/index.js +42 -42
  242. package/example/components/BusinessProductsSearchUI/index.js +38 -38
  243. package/example/components/BusinessReviewsUI/index.js +77 -77
  244. package/example/components/BusinessSortControlUI/index.js +47 -47
  245. package/example/components/BusinessTypeFilterUI/index.js +53 -53
  246. package/example/components/BusinessesMapUI/index.js +57 -57
  247. package/example/components/CartUI/index.js +154 -154
  248. package/example/components/ChangeView/index.js +19 -19
  249. package/example/components/CheckoutUI/index.js +206 -206
  250. package/example/components/CmsContentUI/index.js +52 -52
  251. package/example/components/ConfigsExample/index.js +118 -118
  252. package/example/components/CouponControlUI/index.js +63 -63
  253. package/example/components/DriverTipsUI/index.js +58 -58
  254. package/example/components/FacebookLoginButtonUI/index.js +48 -48
  255. package/example/components/FloatingButtonUI/index.js +145 -145
  256. package/example/components/ForgotPasswordFormUI/index.js +93 -93
  257. package/example/components/GoogleLoginUI/index.js +30 -30
  258. package/example/components/GpsButtonUI/index.js +22 -22
  259. package/example/components/Header/index.js +18 -18
  260. package/example/components/LanguageSelectorUI/index.js +57 -57
  261. package/example/components/LanguagesExample/index.js +51 -51
  262. package/example/components/LoginFormUI/index.js +159 -159
  263. package/example/components/LogoutButtonUI/index.js +21 -21
  264. package/example/components/MainSearchUI/index.js +131 -131
  265. package/example/components/MenuControlUI/index.js +103 -103
  266. package/example/components/MessagesUI/index.js +162 -162
  267. package/example/components/ModalUI/index.js +36 -36
  268. package/example/components/ModalUI/style.css +5 -5
  269. package/example/components/MomentOptionUI/index.js +68 -68
  270. package/example/components/MyOrdersListUI/index.js +51 -51
  271. package/example/components/MyOrdersUI/index.js +52 -52
  272. package/example/components/OrderChangeUI/index.js +54 -54
  273. package/example/components/OrderDetailsUI/index.js +174 -174
  274. package/example/components/OrderReviewUI/index.js +125 -125
  275. package/example/components/OrderTypeControlUI/index.js +32 -32
  276. package/example/components/PaymentOptionCashUI/index.js +60 -60
  277. package/example/components/PaymentOptionPaypalUI/index.js +50 -50
  278. package/example/components/PaymentOptionStripeDirectUI/index.js +89 -89
  279. package/example/components/PaymentOptionStripeRedirectUI/index.js +97 -97
  280. package/example/components/PaymentOptionStripeUI/index.js +129 -129
  281. package/example/components/PaymentOptionsUI/index.js +169 -169
  282. package/example/components/PhoneAutocompleteUI/index.js +67 -67
  283. package/example/components/PhoneAutocompleteUI/styles.css +49 -49
  284. package/example/components/ProductComponentUI/index.js +113 -113
  285. package/example/components/ProductFormUI/index.js +131 -131
  286. package/example/components/ProductImagesUI/index.js +82 -82
  287. package/example/components/ProductIngredientUI/index.js +21 -21
  288. package/example/components/ProductOptionSuboptionUI/index.js +65 -65
  289. package/example/components/ProductOptionUI/index.js +31 -31
  290. package/example/components/ProductShareUI/index.js +48 -48
  291. package/example/components/ProductsListUI/index.js +108 -108
  292. package/example/components/ProductsListingUI/index.js +42 -42
  293. package/example/components/ResetPasswordUI/index.js +121 -121
  294. package/example/components/SearchOptionsUI/index.js +82 -82
  295. package/example/components/SignupFormUI/index.js +117 -117
  296. package/example/components/SingleBusinessCardUI/index.js +82 -82
  297. package/example/components/SingleOrderCardUI/index.js +52 -52
  298. package/example/components/SingleProductCardUI/index.js +47 -47
  299. package/example/components/StripeElementsFormUI/CardFormUI/index.js +51 -51
  300. package/example/components/StripeElementsFormUI/CardFormUI/style.css +118 -118
  301. package/example/components/StripeElementsFormUI/index.js +38 -38
  302. package/example/components/StripeRedirectFormUI/index.js +99 -99
  303. package/example/components/TestComponent/index.js +5 -5
  304. package/example/components/UpsellingPageUI/index.js +26 -26
  305. package/example/components/UserDetailsUI/index.js +94 -94
  306. package/example/components/UserProfileUI/index.js +156 -156
  307. package/example/views/ActiveOrders/index.js +86 -86
  308. package/example/views/AddressDetailsExample/index.js +57 -57
  309. package/example/views/AppleLoginExample/index.js +51 -51
  310. package/example/views/BaseComponentExample/index.js +35 -35
  311. package/example/views/BusinessBasicInformationExample/index.js +43 -43
  312. package/example/views/BusinessControllerExample/index.js +55 -55
  313. package/example/views/BusinessInformationExample/index.js +68 -68
  314. package/example/views/BusinessProductsCategoriesExample/index.js +50 -50
  315. package/example/views/BusinessProductsSearchExample/index.js +39 -39
  316. package/example/views/BusinessReviewsExample/index.js +43 -43
  317. package/example/views/BusinessSortControlExample/index.js +53 -53
  318. package/example/views/BusinessTypeFilterExample/index.js +53 -53
  319. package/example/views/BusinessesMapExample/index.js +57 -57
  320. package/example/views/CheckoutExample/index.js +143 -143
  321. package/example/views/CmsContentExample/index.js +44 -44
  322. package/example/views/DriverTipsExample/index.js +47 -47
  323. package/example/views/EventsExample/index.js +26 -26
  324. package/example/views/FacebookLogin/index.js +63 -63
  325. package/example/views/FloatingButtonExample/index.js +47 -47
  326. package/example/views/ForgotPassword/index.js +77 -77
  327. package/example/views/GoogleLoginExample/index.js +85 -85
  328. package/example/views/Home/index.js +200 -200
  329. package/example/views/LanguageSelectorExample/index.js +55 -55
  330. package/example/views/Login/index.js +84 -84
  331. package/example/views/MainSearchExample/index.js +43 -43
  332. package/example/views/MenuControlExample/index.js +68 -68
  333. package/example/views/MessagesExample/index.js +58 -58
  334. package/example/views/MomentOptionExample/index.js +52 -52
  335. package/example/views/MyOrdersExample/index.js +35 -35
  336. package/example/views/MyOrdersListExample/index.js +50 -50
  337. package/example/views/OrderChangeExample/index.js +46 -46
  338. package/example/views/OrderContextExample/index.js +139 -139
  339. package/example/views/OrderDetailsExample/index.js +50 -50
  340. package/example/views/OrderReviewExample/index.js +64 -64
  341. package/example/views/PaymentOptionCashExample/index.js +51 -51
  342. package/example/views/PaymentOptionPaypalExample/index.js +71 -71
  343. package/example/views/PaymentOptionStripeDirectExample/index.js +43 -43
  344. package/example/views/PaymentOptionStripeExample/index.js +47 -47
  345. package/example/views/PaymentOptionStripeRedirectExample/index.js +56 -56
  346. package/example/views/PaymentOptionsExample/index.js +47 -47
  347. package/example/views/PhoneAutocompleteExample/index.js +34 -34
  348. package/example/views/PlacesExample/index.js +94 -94
  349. package/example/views/PopupExample/index.js +78 -78
  350. package/example/views/PopupExample/style.css +18 -18
  351. package/example/views/ProductDetail/index.js +323 -323
  352. package/example/views/ProductImagesExample/index.js +43 -43
  353. package/example/views/ProductOptionExample/index.js +88 -88
  354. package/example/views/ProductShareExample/index.js +51 -51
  355. package/example/views/ProductsListExample/index.js +77 -77
  356. package/example/views/ProductsListingExample/index.js +47 -47
  357. package/example/views/ResetPasswordExample/index.js +60 -60
  358. package/example/views/SearchOptionsExample/index.js +42 -42
  359. package/example/views/SessionManager/index.js +122 -122
  360. package/example/views/Signup/index.js +64 -64
  361. package/example/views/UpsellingPageExample/index.js +35 -35
  362. package/example/views/UserDetailsExample/index.js +69 -69
  363. package/example/views/UserProfile/index.js +73 -73
  364. package/index-example.js +23 -23
  365. package/index.html +13 -13
  366. package/native/index.js +257 -257
  367. package/native/src/NativeStrategy/index.js +20 -20
  368. package/native/src/contexts/OrderingContext/index.js +85 -85
  369. package/package.json +92 -92
  370. package/src/components/AddressDetails/index.js +149 -149
  371. package/src/components/AddressForm/index.js +372 -372
  372. package/src/components/AddressList/index.js +254 -254
  373. package/src/components/Analitycs/index.js +119 -119
  374. package/src/components/AnalyticsSegment/index.js +145 -145
  375. package/src/components/AppleLogin/index.js +164 -164
  376. package/src/components/BaseComponent/index.js +52 -52
  377. package/src/components/BusinessAndProductList/index.js +982 -982
  378. package/src/components/BusinessBasicInformation/index.js +119 -119
  379. package/src/components/BusinessController/index.js +351 -351
  380. package/src/components/BusinessInformation/BusinessOption/index.js +86 -86
  381. package/src/components/BusinessInformation/index.js +93 -93
  382. package/src/components/BusinessList/index.js +670 -670
  383. package/src/components/BusinessMenuListing/index.js +99 -99
  384. package/src/components/BusinessProductsCategories/index.js +60 -60
  385. package/src/components/BusinessProductsSearch/index.js +54 -54
  386. package/src/components/BusinessReviews/index.js +187 -187
  387. package/src/components/BusinessSearchList/index.js +363 -363
  388. package/src/components/BusinessSortControl/index.js +100 -100
  389. package/src/components/BusinessTypeFilter/index.js +142 -142
  390. package/src/components/BusinessesMap/index.js +110 -110
  391. package/src/components/Cart/index.js +211 -211
  392. package/src/components/CartStoresListing/index.js +157 -157
  393. package/src/components/Checkout/index.js +636 -636
  394. package/src/components/CmsContent/index.js +97 -97
  395. package/src/components/Contacts/index.js +512 -512
  396. package/src/components/CouponControl/index.js +171 -171
  397. package/src/components/DragAndDrop/index.js +41 -41
  398. package/src/components/DriverList/index.js +112 -112
  399. package/src/components/DriverTips/index.js +141 -141
  400. package/src/components/Emitter/index.js +36 -36
  401. package/src/components/ExamineClick/index.js +40 -40
  402. package/src/components/FacebookLoginButton/index.js +214 -214
  403. package/src/components/FacebookPixel/index.js +148 -148
  404. package/src/components/FavoriteList/index.js +278 -278
  405. package/src/components/FirebaseGoogleLoginButton/index.js +93 -93
  406. package/src/components/FloatingButton/index.js +70 -70
  407. package/src/components/ForgotPasswordForm/index.js +180 -180
  408. package/src/components/GiftCard/GiftCardOrdersList/index.js +155 -155
  409. package/src/components/GiftCard/PurchaseGiftCard/index.js +127 -127
  410. package/src/components/GiftCard/RedeemGiftCard/index.js +77 -77
  411. package/src/components/GiftCard/SendGiftCard/index.js +83 -83
  412. package/src/components/GoogleAutocompleteInput/index.js +154 -154
  413. package/src/components/GoogleIdentity/index.js +144 -144
  414. package/src/components/GoogleLoginButton/index.js +276 -276
  415. package/src/components/GoogleMaps/index.js +499 -499
  416. package/src/components/GpsButton/index.js +127 -127
  417. package/src/components/LanguageSelector/index.js +163 -163
  418. package/src/components/LoginForm/index.js +527 -527
  419. package/src/components/LogoutAction/index.js +211 -165
  420. package/src/components/MainSearch/index.js +149 -149
  421. package/src/components/MapView/index.js +110 -110
  422. package/src/components/MenuControl/index.js +238 -238
  423. package/src/components/Messages/index.js +166 -166
  424. package/src/components/MomentOption/index.js +322 -322
  425. package/src/components/MultiCartCreate/index.js +70 -70
  426. package/src/components/MultiCartsPaymethodsAndWallets/index.js +201 -201
  427. package/src/components/MultiCheckout/index.js +375 -375
  428. package/src/components/MultiOrdersDetails/index.js +109 -109
  429. package/src/components/MyOrders/index.js +150 -150
  430. package/src/components/MyOrdersList/index.js +104 -104
  431. package/src/components/NewOrderNotification/index.js +30 -30
  432. package/src/components/OrderChange/index.js +128 -128
  433. package/src/components/OrderDetails/index.js +684 -684
  434. package/src/components/OrderList/index.js +800 -800
  435. package/src/components/OrderListGroups/index.js +1240 -1240
  436. package/src/components/OrderReview/index.js +180 -180
  437. package/src/components/OrderTypeControl/index.js +75 -75
  438. package/src/components/OrderVerticalList/index.js +422 -422
  439. package/src/components/OrdersControlFilters/index.js +75 -75
  440. package/src/components/OrdersDashboardComponents/Appointments/index.js +72 -72
  441. package/src/components/OrdersDashboardComponents/BusinessProductsListing/index.js +629 -629
  442. package/src/components/OrdersDashboardComponents/CheckPassword/index.js +177 -177
  443. package/src/components/OrdersDashboardComponents/CityList/index.js +98 -98
  444. package/src/components/OrdersDashboardComponents/CountryList/index.js +162 -162
  445. package/src/components/OrdersDashboardComponents/CustomOrderDetails/index.js +238 -238
  446. package/src/components/OrdersDashboardComponents/DashboardBusinessList/index.js +617 -617
  447. package/src/components/OrdersDashboardComponents/DashboardOrdersList/index.js +943 -943
  448. package/src/components/OrdersDashboardComponents/DriversList/index.js +448 -448
  449. package/src/components/OrdersDashboardComponents/ExportCSV/index.js +192 -192
  450. package/src/components/OrdersDashboardComponents/GiftCardsList/index.js +189 -189
  451. package/src/components/OrdersDashboardComponents/GoogleMapsApiKeySetting/index.js +77 -77
  452. package/src/components/OrdersDashboardComponents/LogisticInformation/index.js +97 -97
  453. package/src/components/OrdersDashboardComponents/Logistics/index.js +174 -174
  454. package/src/components/OrdersDashboardComponents/Messages/index.js +384 -384
  455. package/src/components/OrdersDashboardComponents/MetaFields/index.js +186 -186
  456. package/src/components/OrdersDashboardComponents/OrderDetails/index.js +404 -404
  457. package/src/components/OrdersDashboardComponents/OrderNotification/index.js +70 -70
  458. package/src/components/OrdersDashboardComponents/OrdersFilter/index.js +362 -362
  459. package/src/components/OrdersDashboardComponents/OrdersManage/index.js +873 -873
  460. package/src/components/OrdersDashboardComponents/PointsWalletLevels/index.js +123 -123
  461. package/src/components/OrdersDashboardComponents/ReviewCustomer/index.js +113 -113
  462. package/src/components/OrdersDashboardComponents/Schedule/index.js +315 -315
  463. package/src/components/OrdersDashboardComponents/SettingsList/index.js +298 -298
  464. package/src/components/OrdersDashboardComponents/UserFormDetails/index.js +463 -463
  465. package/src/components/OrdersDashboardComponents/UsersList/index.js +944 -944
  466. package/src/components/OrdersDashboardComponents/WebsocketStatus/index.js +77 -77
  467. package/src/components/OrdersDashboardComponents/index.js +57 -57
  468. package/src/components/PageBanner/index.js +107 -107
  469. package/src/components/PaymentOptionCash/index.js +74 -74
  470. package/src/components/PaymentOptionPaypal/index.js +146 -146
  471. package/src/components/PaymentOptionSquare/index.js +336 -336
  472. package/src/components/PaymentOptionStripe/index.js +289 -289
  473. package/src/components/PaymentOptionStripeDirect/index.js +116 -116
  474. package/src/components/PaymentOptionStripeRedirect/StripeRedirectForm/index.js +71 -71
  475. package/src/components/PaymentOptionStripeRedirect/index.js +122 -122
  476. package/src/components/PaymentOptionWallet/index.js +185 -185
  477. package/src/components/PaymentOptions/index.js +262 -262
  478. package/src/components/PaymethodList/index.js +119 -119
  479. package/src/components/PhoneAutocomplete/index.js +318 -318
  480. package/src/components/PlaceSpot/index.js +183 -183
  481. package/src/components/Popup/index.js +169 -169
  482. package/src/components/ProductComponent/index.js +269 -269
  483. package/src/components/ProductForm/index.js +1101 -1101
  484. package/src/components/ProductImages/index.js +64 -64
  485. package/src/components/ProductIngredient/index.js +72 -72
  486. package/src/components/ProductItemAccordion/index.js +72 -72
  487. package/src/components/ProductOption/index.js +42 -42
  488. package/src/components/ProductOptionSuboption/index.js +181 -181
  489. package/src/components/ProductShare/index.js +97 -97
  490. package/src/components/ProductsList/index.js +74 -74
  491. package/src/components/ProductsListing/index.js +166 -166
  492. package/src/components/ProfessionalInfo/index.js +156 -156
  493. package/src/components/PromotionsController/index.js +123 -123
  494. package/src/components/QueryLoginSpoonity/index.js +159 -159
  495. package/src/components/ReCaptcha/index.js +53 -53
  496. package/src/components/ResetPassword/index.js +111 -111
  497. package/src/components/ReviewCustomer/index.js +117 -117
  498. package/src/components/ReviewDriver/index.js +157 -157
  499. package/src/components/ReviewProduct/index.js +162 -162
  500. package/src/components/SearchOptions/index.js +69 -69
  501. package/src/components/Sessions/index.js +217 -217
  502. package/src/components/SignupForm/index.js +555 -555
  503. package/src/components/SingleBusinessCard/index.js +80 -80
  504. package/src/components/SingleOrderCard/index.js +160 -160
  505. package/src/components/SingleProductCard/index.js +130 -130
  506. package/src/components/SingleProfessionalCard/index.js +121 -121
  507. package/src/components/SmartAppBanner/index.js +71 -71
  508. package/src/components/StoreProductList/index.js +303 -303
  509. package/src/components/StripeElementsForm/CardForm/index.js +248 -248
  510. package/src/components/StripeElementsForm/index.js +78 -78
  511. package/src/components/UpsellingPage/index.js +120 -120
  512. package/src/components/UserFormDetails/index.js +742 -742
  513. package/src/components/UserVerification/index.js +242 -242
  514. package/src/components/WalletList/index.js +160 -160
  515. package/src/components/WebsocketStatus/index.js +80 -80
  516. package/src/components/WrapperGoogleMaps/index.js +67 -67
  517. package/src/constants/code-numbers.js +218 -218
  518. package/src/constants/timezones.js +427 -427
  519. package/src/contexts/ApiContext/index.js +59 -59
  520. package/src/contexts/BillingContext/index.js +28 -28
  521. package/src/contexts/BusinessContext/index.js +71 -71
  522. package/src/contexts/ConfigContext/index.js +217 -217
  523. package/src/contexts/CustomerContext/index.js +69 -69
  524. package/src/contexts/EventContext/index.js +31 -31
  525. package/src/contexts/LanguageContext/index.js +144 -144
  526. package/src/contexts/OptimizationLoadContext/index.js +95 -95
  527. package/src/contexts/OrderContext/index.js +1434 -1434
  528. package/src/contexts/OrderingContext/index.js +86 -86
  529. package/src/contexts/OrderingThemeContext/index.js +107 -107
  530. package/src/contexts/ProductContext/index.js +62 -62
  531. package/src/contexts/SessionContext/index.js +172 -172
  532. package/src/contexts/SiteContext/index.js +79 -79
  533. package/src/contexts/ToastContext/index.js +42 -42
  534. package/src/contexts/UtilsContext/index.js +352 -352
  535. package/src/contexts/ValidationsFieldsContext/index.js +65 -65
  536. package/src/contexts/WebsocketContext/index.js +91 -91
  537. package/src/contexts/WebsocketContext/socket.js +92 -92
  538. package/src/index.js +371 -371
  539. package/src/utils/index.js +32 -32
  540. package/src/webStrategy/index.js +18 -18
  541. package/webpack.dev.js +41 -41
  542. package/webpack.prod.js +64 -64
  543. package/_bundles/ordering-component.949cbfb0cbd9c20d005d.js +0 -2
  544. /package/_bundles/{2.ordering-component.949cbfb0cbd9c20d005d.js → 2.ordering-component.94a28b3a5bfb4d729a1b.js} +0 -0
  545. /package/_bundles/{4.ordering-component.949cbfb0cbd9c20d005d.js → 4.ordering-component.94a28b3a5bfb4d729a1b.js} +0 -0
  546. /package/_bundles/{5.ordering-component.949cbfb0cbd9c20d005d.js → 5.ordering-component.94a28b3a5bfb4d729a1b.js} +0 -0
  547. /package/_bundles/{6.ordering-component.949cbfb0cbd9c20d005d.js → 6.ordering-component.94a28b3a5bfb4d729a1b.js} +0 -0
  548. /package/_bundles/{7.ordering-component.949cbfb0cbd9c20d005d.js.LICENSE.txt → 7.ordering-component.94a28b3a5bfb4d729a1b.js.LICENSE.txt} +0 -0
  549. /package/_bundles/{8.ordering-component.949cbfb0cbd9c20d005d.js → 8.ordering-component.94a28b3a5bfb4d729a1b.js} +0 -0
  550. /package/_bundles/{ordering-component.949cbfb0cbd9c20d005d.js.LICENSE.txt → ordering-component.94a28b3a5bfb4d729a1b.js.LICENSE.txt} +0 -0
@@ -1,944 +1,944 @@
1
- import React, { useEffect, useState } from 'react'
2
- import PropTypes, { string } from 'prop-types'
3
- import { useApi } from '../../../contexts/ApiContext'
4
- import { useSession } from '../../../contexts/SessionContext'
5
- import { useToast, ToastType } from '../../../contexts/ToastContext'
6
- import { useLanguage } from '../../../contexts/LanguageContext'
7
- import { useEvent } from '../../../contexts/EventContext'
8
-
9
- export const UsersList = (props) => {
10
- const {
11
- UIComponent,
12
- defaultUserActiveState,
13
- paginationSettings,
14
- propsToFetch,
15
- isSearchByUserId,
16
- isSearchByUserEmail,
17
- isSearchByUserPhone,
18
- isSearchByUserName,
19
- isBusinessOwners,
20
- defaultUserTypesSelected,
21
- disabledActiveStateCondition,
22
- isDriver,
23
- isProfessional
24
- } = props
25
-
26
- const [ordering] = useApi()
27
- const [session] = useSession()
28
- const [, { showToast }] = useToast()
29
- const [, t] = useLanguage()
30
- const [events] = useEvent()
31
-
32
- const [usersList, setUsersList] = useState({ users: [], loading: false, error: null })
33
- const [filterValues, setFilterValues] = useState({ clear: false, changes: {} })
34
- const [searchValue, setSearchValue] = useState(null)
35
- const [isVerified, setIsVerified] = useState(false)
36
- const [userTypesSelected, setUserTypesSelected] = useState(defaultUserTypesSelected)
37
- const [paginationProps, setPaginationProps] = useState({
38
- currentPage: (paginationSettings.controlType === 'pages' && paginationSettings.initialPage && paginationSettings.initialPage >= 1) ? paginationSettings.initialPage - 1 : 0,
39
- pageSize: paginationSettings.pageSize ?? 10,
40
- totalItems: null,
41
- totalPages: null
42
- })
43
- const [paginationDetail, setPaginationDetail] = useState({})
44
- const [selectedUserActiveState, setSelectedUserActiveState] = useState(defaultUserActiveState)
45
- const [actionStatus, setActionStatus] = useState({ loading: false, error: null })
46
- const [selectedUsers, setSelectedUsers] = useState([])
47
- const [deleteUsersActionState, setDeleteUsersActionState] = useState({ loading: false, error: null })
48
- const [occupationsState, setOccupationsState] = useState({ occupations: [], loading: false, error: null })
49
- const [selectedOccupation, setSelectedOccupation] = useState(null)
50
- const [orderFilterValue, setOrderFilterValue] = useState(null)
51
- const [multiFilterValues, setMultiFilterValues] = useState({})
52
- const [actionDisabled, setActionDisabled] = useState(true)
53
- const [driversGroupsState, setDriversGroupsState] = useState({ groups: [], loading: false, error: null })
54
-
55
- /**
56
- * Save filter type values
57
- * @param {object} types
58
- */
59
- const handleChangeMultiFilterValues = (types) => {
60
- setMultiFilterValues(types)
61
- }
62
-
63
- /**
64
- * Get users by params, order options and filters
65
- * @param {boolean} newFetch Make a new request or next page
66
- */
67
- const getUsers = async (page, pageSize) => {
68
- try {
69
- setUsersList({ ...usersList, loading: true })
70
- let parameters = {}
71
-
72
- const paginationParams = {
73
- page: page,
74
- page_size: pageSize || paginationProps.pageSize
75
- }
76
-
77
- if (!isBusinessOwners) {
78
- parameters = { ...paginationParams }
79
- }
80
-
81
- if (orderFilterValue !== null) {
82
- parameters = {
83
- ...parameters,
84
- orders_count_condition: orderFilterValue === 0 ? 'eq' : 'ge',
85
- orders_count_value: orderFilterValue
86
- }
87
- }
88
-
89
- let where = null
90
- const conditions = []
91
-
92
- if (!disabledActiveStateCondition) {
93
- conditions.push({ attribute: 'enabled', value: selectedUserActiveState })
94
- }
95
-
96
- if (isVerified) {
97
- const verifiedConditions = []
98
- verifiedConditions.push(
99
- {
100
- attribute: 'email_verified',
101
- value: true
102
- }
103
- )
104
- verifiedConditions.push(
105
- {
106
- attribute: 'phone_verified',
107
- value: true
108
- }
109
- )
110
- conditions.push({
111
- conector: 'OR',
112
- conditions: verifiedConditions
113
- })
114
- }
115
-
116
- if (userTypesSelected.length > 0) {
117
- conditions.push({ attribute: 'level', value: userTypesSelected })
118
- }
119
-
120
- if (selectedOccupation) {
121
- conditions.push({ attribute: 'occupation_id', value: selectedOccupation })
122
- }
123
-
124
- if (searchValue) {
125
- const searchConditions = []
126
- if (isSearchByUserId) {
127
- searchConditions.push(
128
- {
129
- attribute: 'id',
130
- value: {
131
- condition: 'ilike',
132
- value: encodeURI(`%${searchValue}%`)
133
- }
134
- }
135
- )
136
- }
137
- if (isSearchByUserEmail) {
138
- searchConditions.push(
139
- {
140
- attribute: 'email',
141
- value: {
142
- condition: 'ilike',
143
- value: encodeURI(`%${searchValue}%`)
144
- }
145
- }
146
- )
147
- }
148
-
149
- if (isSearchByUserPhone) {
150
- searchConditions.push(
151
- {
152
- attribute: 'cellphone',
153
- value: {
154
- condition: 'ilike',
155
- value: encodeURI(`%${searchValue}%`)
156
- }
157
- }
158
- )
159
- }
160
-
161
- if (isSearchByUserName) {
162
- searchConditions.push(
163
- {
164
- attribute: 'name',
165
- value: {
166
- condition: 'ilike',
167
- value: encodeURI(`%${searchValue}%`)
168
- }
169
- }
170
- )
171
- searchConditions.push(
172
- {
173
- attribute: 'lastname',
174
- value: {
175
- condition: 'ilike',
176
- value: encodeURI(`%${searchValue}%`)
177
- }
178
- }
179
- )
180
- }
181
-
182
- conditions.push({
183
- conector: 'OR',
184
- conditions: searchConditions
185
- })
186
- }
187
-
188
- if (Object.keys(filterValues.changes).length) {
189
- const filterConditions = []
190
- if (filterValues?.changes?.name && filterValues?.changes?.name !== null) {
191
- filterConditions.push(
192
- {
193
- attribute: 'name',
194
- value: {
195
- condition: 'ilike',
196
- value: encodeURI(`%${filterValues?.changes?.name}%`)
197
- }
198
- }
199
- )
200
- }
201
- if (filterValues.changes.lastname && filterValues.changes.lastname !== null) {
202
- filterConditions.push(
203
- {
204
- attribute: 'lastname',
205
- value: {
206
- condition: 'ilike',
207
- value: encodeURI(`%${filterValues.changes.lastname}%`)
208
- }
209
- }
210
- )
211
- }
212
- if (filterValues.changes.email && filterValues.changes.email !== null) {
213
- filterConditions.push(
214
- {
215
- attribute: 'email',
216
- value: {
217
- condition: 'ilike',
218
- value: encodeURI(`%${filterValues.changes.email}%`)
219
- }
220
- }
221
- )
222
- }
223
- if (filterValues.changes.email_verified !== undefined) {
224
- filterConditions.push(
225
- {
226
- attribute: 'email_verified',
227
- value: filterValues.changes.email_verified
228
- }
229
- )
230
- }
231
- if (filterValues.changes.phone && filterValues.changes.phone !== null) {
232
- filterConditions.push(
233
- {
234
- attribute: 'phone',
235
- value: {
236
- condition: 'ilike',
237
- value: encodeURI(`%${filterValues.changes.phone}%`)
238
- }
239
- }
240
- )
241
- }
242
- if (filterValues.changes.phone_verified !== undefined) {
243
- filterConditions.push(
244
- {
245
- attribute: 'phone_verified',
246
- value: filterValues.changes.phone_verified
247
- }
248
- )
249
- }
250
- if (filterValues.changes.id && parseInt(filterValues.changes.id) > 0) {
251
- filterConditions.push(
252
- {
253
- attribute: 'id',
254
- value: parseInt(filterValues.changes.id)
255
- }
256
- )
257
- }
258
- if (filterConditions.length) {
259
- conditions.push({
260
- conector: 'AND',
261
- conditions: filterConditions
262
- })
263
- }
264
- }
265
-
266
- if (Object.keys(multiFilterValues).length > 0) {
267
- const filterConditons = []
268
-
269
- if (multiFilterValues?.name && multiFilterValues?.name !== null) {
270
- filterConditons.push(
271
- {
272
- attribute: 'name',
273
- value: {
274
- condition: 'ilike',
275
- value: encodeURI(`%${multiFilterValues?.name}%`)
276
- }
277
- }
278
- )
279
- }
280
- if (multiFilterValues?.lastname && multiFilterValues?.lastname !== null) {
281
- filterConditons.push(
282
- {
283
- attribute: 'lastname',
284
- value: {
285
- condition: 'ilike',
286
- value: encodeURI(`%${multiFilterValues?.lastname}%`)
287
- }
288
- }
289
- )
290
- }
291
- if (multiFilterValues?.email && multiFilterValues?.email !== null) {
292
- filterConditons.push(
293
- {
294
- attribute: 'email',
295
- value: {
296
- condition: 'ilike',
297
- value: encodeURI(`%${multiFilterValues?.email}%`)
298
- }
299
- }
300
- )
301
- }
302
- if (multiFilterValues?.cellphone && multiFilterValues?.cellphone !== null) {
303
- filterConditons.push(
304
- {
305
- attribute: 'cellphone',
306
- value: {
307
- condition: 'ilike',
308
- value: encodeURI(`%${multiFilterValues?.cellphone}%`)
309
- }
310
- }
311
- )
312
- }
313
- if (multiFilterValues?.countryPhoneCode !== null) {
314
- filterConditons.push(
315
- {
316
- attribute: 'country_phone_code',
317
- value: {
318
- condition: 'ilike',
319
- value: encodeURI(`%${multiFilterValues?.countryPhoneCode}%`)
320
- }
321
- }
322
- )
323
- }
324
- if (multiFilterValues?.cityIds.length !== 0) {
325
- filterConditons.push(
326
- {
327
- attribute: 'city_id',
328
- value: multiFilterValues?.cityIds
329
- }
330
- )
331
- }
332
- if (multiFilterValues?.phoneVerified !== null) {
333
- filterConditons.push(
334
- {
335
- attribute: 'phone_verified',
336
- value: multiFilterValues?.phoneVerified
337
- }
338
- )
339
- }
340
- if (multiFilterValues?.ordersCount?.value !== '') {
341
- parameters = {
342
- ...parameters,
343
- orders_count_condition: multiFilterValues?.ordersCount?.condition,
344
- orders_count_value: multiFilterValues?.ordersCount?.value
345
- }
346
- }
347
- if (multiFilterValues?.emailVerified !== null) {
348
- filterConditons.push(
349
- {
350
- attribute: 'email_verified',
351
- value: multiFilterValues?.emailVerified
352
- }
353
- )
354
- }
355
- if (multiFilterValues?.userType !== null) {
356
- filterConditons.push(
357
- {
358
- attribute: 'level',
359
- value: multiFilterValues?.userType
360
- }
361
- )
362
- }
363
- if (multiFilterValues?.loyaltyLevel !== null) {
364
- filterConditons.push(
365
- {
366
- attribute: 'loyalty_level_id',
367
- value: multiFilterValues?.loyaltyLevel
368
- }
369
- )
370
- }
371
- if (multiFilterValues?.enabled !== null) {
372
- filterConditons.push(
373
- {
374
- attribute: 'enabled',
375
- value: multiFilterValues?.enabled
376
- }
377
- )
378
- }
379
- if (multiFilterValues?.deliveryFromDatetime !== null) {
380
- filterConditons.push(
381
- {
382
- attribute: 'created_at',
383
- value: {
384
- condition: '>=',
385
- value: multiFilterValues?.deliveryFromDatetime
386
- }
387
- }
388
- )
389
- }
390
- if (multiFilterValues?.deliveryEndDatetime !== null) {
391
- filterConditons.push(
392
- {
393
- attribute: 'created_at',
394
- value: {
395
- condition: '<=',
396
- value: multiFilterValues?.deliveryEndDatetime
397
- }
398
- }
399
- )
400
- }
401
-
402
- if (filterConditons.length) {
403
- conditions.push({
404
- conector: 'AND',
405
- conditions: filterConditons
406
- })
407
- }
408
- }
409
-
410
- if (conditions.length) {
411
- where = {
412
- conditions,
413
- conector: 'AND'
414
- }
415
- }
416
-
417
- let fetchEndpoint = null
418
- let content = {}
419
-
420
- if (session.user?.level !== 2) {
421
- fetchEndpoint = where
422
- ? ordering.setAccessToken(session.token).users().select(propsToFetch).parameters(parameters).where(where)
423
- : ordering.setAccessToken(session.token).users().select(propsToFetch).parameters(parameters)
424
- const response = await fetchEndpoint.get()
425
- content = response.content
426
- } else {
427
- const requestOptions = {
428
- method: 'GET',
429
- headers: {
430
- 'Content-Type': 'application/json',
431
- Authorization: `Bearer ${session.token}`
432
- }
433
- }
434
- const fetchEndpoint = where
435
- ? `${ordering.root}/professionals?page=${page}&page_size=${pageSize}&&where=${JSON.stringify(where)}`
436
- : `${ordering.root}/professionals?page=${page}&page_size=${pageSize}`
437
-
438
- const response = await fetch(fetchEndpoint, requestOptions)
439
- content = await response.json()
440
- }
441
-
442
- const { result, pagination, error } = content
443
- if (error) {
444
- setUsersList({
445
- ...usersList,
446
- loading: false,
447
- error: result
448
- })
449
- } else {
450
- usersList.users = result
451
- setUsersList({
452
- ...usersList,
453
- loading: false
454
- })
455
- let nextPageItems = 0
456
- if (pagination.current_page !== pagination.total_pages) {
457
- const remainingItems = pagination.total - usersList.users.length
458
- nextPageItems = remainingItems < pagination.page_size ? remainingItems : pagination.page_size
459
- }
460
- setPaginationProps({
461
- ...paginationProps,
462
- currentPage: pagination.current_page,
463
- pageSize: pagination.page_size === 0 ? paginationProps.pageSize : pagination.page_size,
464
- totalPages: pagination.total_pages,
465
- totalItems: pagination.total,
466
- from: pagination.from,
467
- to: pagination.to,
468
- nextPageItems
469
- })
470
- setPaginationDetail({ ...pagination })
471
- }
472
- } catch (err) {
473
- if (err.constructor.name !== 'Cancel') {
474
- setUsersList({
475
- ...usersList,
476
- loading: false,
477
- error: [err.message]
478
- })
479
- }
480
- }
481
- }
482
-
483
- /**
484
- * Get the occupations from API
485
- */
486
- const getOccupations = async () => {
487
- try {
488
- setOccupationsState({
489
- ...occupationsState,
490
- loading: true
491
- })
492
- const requestOptions = {
493
- method: 'GET',
494
- headers: {
495
- 'Content-Type': 'application/json',
496
- Authorization: `Bearer ${session?.token}`
497
- }
498
- }
499
- const response = await fetch(`${ordering.root}/occupations`, requestOptions)
500
- const content = await response.json()
501
- if (!content.error) {
502
- setOccupationsState({
503
- loading: false,
504
- occupations: content.result,
505
- error: null
506
- })
507
- } else {
508
- setOccupationsState({
509
- ...occupationsState,
510
- loading: false,
511
- error: content.result
512
- })
513
- }
514
- } catch (error) {
515
- setOccupationsState({
516
- ...occupationsState,
517
- loading: false,
518
- error: [error.message]
519
- })
520
- }
521
- }
522
-
523
- /**
524
- * Change user type
525
- * @param {object} userType User type
526
- */
527
- const handleSelectedUserTypes = (userTypes) => {
528
- setUserTypesSelected(userTypes)
529
- }
530
-
531
- /**
532
- * Method to change user active state for filter
533
- */
534
- const handleChangeUserActiveState = () => {
535
- setSelectedUserActiveState(!selectedUserActiveState)
536
- }
537
-
538
- /**
539
- * Method to change user type from API
540
- * @param {Object} user user id and new type
541
- */
542
- const handleChangeUserType = async (user) => {
543
- try {
544
- showToast(ToastType.Info, t('LOADING', 'Loading'))
545
- setActionStatus({ ...actionStatus, loading: true })
546
- const requestsState = {}
547
- const source = {}
548
- requestsState.updateOrder = source
549
- const { content: { error, result } } = await ordering.setAccessToken(session.token).users(user.id).save({ level: user.level }, { cancelToken: source })
550
- setActionStatus({
551
- ...actionStatus,
552
- loading: false,
553
- error: error ? result : null
554
- })
555
- if (!error) {
556
- let users = []
557
- if (userTypesSelected.includes(user.level)) {
558
- users = usersList.users.filter(_user => {
559
- if (_user.id === user.id) {
560
- _user.level = user.level
561
- }
562
- return true
563
- })
564
- } else {
565
- users = usersList.users.filter(_user => _user.id !== result.id)
566
- }
567
- setUsersList({ ...usersList, users })
568
- showToast(ToastType.Success, t('UPDATED', 'Updated'))
569
- }
570
- } catch (err) {
571
- setActionStatus({ ...actionStatus, loading: false, error: [err.message] })
572
- }
573
- }
574
-
575
- /**
576
- * Method to change user enable/disable
577
- * @param {Object} user user id and enable state
578
- */
579
-
580
- const handleChangeActiveUser = async (user) => {
581
- try {
582
- showToast(ToastType.Info, t('LOADING', 'Loading'))
583
- setActionStatus({ ...actionStatus, loading: true })
584
- const { content: { error, result } } = await ordering.setAccessToken(session.token).users(user.id).save({ enabled: user.enabled })
585
- setActionStatus({
586
- ...actionStatus,
587
- loading: false,
588
- error: error ? result : null
589
- })
590
- if (!error) {
591
- if (isDriver) {
592
- handleSuccessUpdate(result)
593
- } else if (!disabledActiveStateCondition) {
594
- let users = [...usersList?.users]
595
- if ((!user.enabled && selectedUserActiveState) || (user?.enabled && !selectedUserActiveState)) {
596
- users = usersList.users.filter(_user => {
597
- let valid = true
598
- if (_user.id === user.id) {
599
- if (user.enabled === !selectedUserActiveState) {
600
- valid = false
601
- }
602
- }
603
- return valid
604
- })
605
- } else {
606
- users.push(user)
607
- }
608
- setUsersList({ ...usersList, users })
609
- }
610
- showToast(ToastType.Success, t('UPDATED', 'Updated'))
611
- }
612
- } catch (err) {
613
- setActionStatus({ ...actionStatus, loading: false, error: [err.message] })
614
- }
615
- }
616
-
617
- /**
618
- * Method to delete users from API
619
- * @param {Number} userId user id to delete
620
- */
621
- const handleDeleteUser = async (userId) => {
622
- try {
623
- setActionStatus({ ...actionStatus, loading: true })
624
- const { content } = await ordering.setAccessToken(session.token).users(userId).delete()
625
- if (!content.error) {
626
- const users = usersList.users.filter(user => user.id !== userId)
627
- setUsersList({ ...usersList, users })
628
- if (deleteUsersActionState.loading) {
629
- const _selectedUsers = [...selectedUsers]
630
- _selectedUsers.shift()
631
- if (_selectedUsers.length === 0) {
632
- setDeleteUsersActionState({ ...deleteUsersActionState, loading: false })
633
- }
634
- setSelectedUsers(_selectedUsers)
635
- }
636
- setPaginationDetail({
637
- ...paginationDetail,
638
- total: paginationDetail?.total - 1
639
- })
640
- }
641
- setActionStatus({
642
- ...actionStatus,
643
- loading: false,
644
- error: content.error ? content.result : null
645
- })
646
- } catch (err) {
647
- setActionStatus({ ...actionStatus, loading: false, error: [err.message] })
648
- if (deleteUsersActionState.loading) {
649
- setDeleteUsersActionState({ ...deleteUsersActionState, loading: false, error: [err.message] })
650
- }
651
- }
652
- }
653
-
654
- /**
655
- * Method to delete several users from API
656
- */
657
- const handleDeleteSeveralUsers = async (code) => {
658
- try {
659
- showToast(ToastType.Info, t('LOADING', 'Loading'))
660
- setDeleteUsersActionState({
661
- ...deleteUsersActionState,
662
- loading: true
663
- })
664
- const payload = {
665
- users_id: selectedUsers
666
- }
667
- if (code) {
668
- payload.deleted_action_code = code
669
- }
670
- const requestOptions = {
671
- method: 'DELETE',
672
- headers: {
673
- 'Content-Type': 'application/json',
674
- Authorization: `Bearer ${session.token}`
675
- },
676
- body: JSON.stringify(payload)
677
- }
678
- const response = await fetch(`${ordering.root}/users`, requestOptions)
679
- const content = await response.json()
680
- if (!content.error) {
681
- const users = usersList.users.filter(user => !selectedUsers.includes(user.id))
682
- setUsersList({ ...usersList, users })
683
- setPaginationDetail({
684
- ...paginationDetail,
685
- total: paginationDetail?.total - selectedUsers.length
686
- })
687
- setSelectedUsers([])
688
- setDeleteUsersActionState({
689
- loading: false,
690
- error: null
691
- })
692
- showToast(ToastType.Success, t('USER_DELETED', 'User deleted'))
693
- } else {
694
- setDeleteUsersActionState({
695
- loading: false,
696
- error: content.result
697
- })
698
- }
699
- } catch (error) {
700
- setDeleteUsersActionState({
701
- loading: false,
702
- error: [error.message]
703
- })
704
- }
705
- }
706
-
707
- /**
708
- * Method to change selected users
709
- * @param {Number} userId user id to change selected state
710
- */
711
- const handleSelectedUsers = (userId) => {
712
- let _selectedUsers
713
- if (selectedUsers.includes(userId)) {
714
- _selectedUsers = selectedUsers.filter(id => id !== userId)
715
- } else {
716
- _selectedUsers = [...selectedUsers, userId]
717
- }
718
- setSelectedUsers(_selectedUsers)
719
- }
720
-
721
- /**
722
- * Method to update users
723
- * @param {Object} updatedUser updated user
724
- */
725
- const handleSuccessUpdate = (updatedUser) => {
726
- const users = usersList.users.filter(user => {
727
- if (user.id === updatedUser.id) {
728
- Object.assign(user, updatedUser)
729
- }
730
- return true
731
- })
732
- setUsersList({
733
- ...usersList,
734
- users: users
735
- })
736
- }
737
- /**
738
- * Method to add user
739
- * @param {Object} newUser new user to add
740
- */
741
- const handleSuccessAddUser = (newUser) => {
742
- if (userTypesSelected.includes(newUser?.level)) {
743
- setUsersList({
744
- ...usersList,
745
- users: [
746
- ...usersList.users,
747
- newUser
748
- ]
749
- })
750
- setPaginationDetail({
751
- ...paginationDetail,
752
- total: paginationDetail?.total ? paginationDetail?.total + 1 : 1
753
- })
754
- }
755
- }
756
- /**
757
- * Method to delete user
758
- * @param {Object} user new user to delete
759
- */
760
- const handleSuccessDeleteUser = (user) => {
761
- if (userTypesSelected.includes(user?.level)) {
762
- setUsersList({
763
- ...usersList,
764
- users: usersList.users.filter(_user => _user.id !== user.id)
765
- })
766
- setPaginationDetail({
767
- ...paginationDetail,
768
- total: paginationDetail?.total - 1
769
- })
770
- }
771
- }
772
- /**
773
- * Method to update addresses of selected user
774
- * @param {number, Array} useId and addresses updated addresses
775
- */
776
- const handleSuccessAddressesUpdate = (userId, addresses) => {
777
- const users = usersList.users.filter(user => {
778
- if (user.id === userId) {
779
- user.addresses = [...addresses]
780
- }
781
- return true
782
- })
783
- setUsersList({
784
- ...usersList,
785
- users: users
786
- })
787
- }
788
-
789
- /**
790
- * Method to get the drivers groups from API
791
- */
792
- const getDriversGroups = async () => {
793
- try {
794
- setDriversGroupsState({ ...driversGroupsState, loading: true })
795
- const requestOptions = {
796
- method: 'GET',
797
- headers: {
798
- 'Content-Type': 'application/json',
799
- Authorization: `Bearer ${session.token}`
800
- }
801
- }
802
- const response = await fetch(`${ordering.root}/drivergroups`, requestOptions)
803
- const content = await response.json()
804
- if (!content.error) {
805
- const found = content.result.find(group => group?.administrator_id === session?.user?.id)
806
- if (found) setActionDisabled(false)
807
- else setActionDisabled(true)
808
- const driverManagerGroups = content.result?.filter(group => group.administrator_id === session?.user?.id)
809
- setDriversGroupsState({ ...driversGroupsState, groups: driverManagerGroups, loading: false })
810
- }
811
- } catch (err) {
812
- setDriversGroupsState({ ...driversGroupsState, loading: false, error: [err.message] })
813
- }
814
- }
815
-
816
- useEffect(() => {
817
- if (session?.user?.level === 5) {
818
- getDriversGroups()
819
- } else {
820
- setActionDisabled(false)
821
- }
822
- }, [session])
823
-
824
- useEffect(() => {
825
- if (usersList.loading) return
826
- getUsers(1, null)
827
- }, [userTypesSelected, selectedUserActiveState, searchValue, isVerified, selectedOccupation])
828
-
829
- useEffect(() => {
830
- if ((Object.keys(filterValues?.changes).length > 0 || filterValues.clear) && !usersList.loading) getUsers(1, null)
831
- }, [filterValues])
832
-
833
- useEffect(() => {
834
- getUsers(1, null)
835
- }, [multiFilterValues])
836
-
837
- useEffect(() => {
838
- if (!usersList.loading) getUsers(1, null)
839
- }, [orderFilterValue])
840
-
841
- useEffect(() => {
842
- if (isProfessional) {
843
- getOccupations()
844
- }
845
- }, [isProfessional])
846
-
847
- useEffect(() => {
848
- events.on('occupations_update', (data) => {
849
- setOccupationsState({
850
- ...occupationsState,
851
- occupations: data
852
- })
853
- })
854
- return () => {
855
- events.off('occupations_update')
856
- }
857
- }, [events])
858
-
859
- return (
860
- <>
861
- {
862
- UIComponent && (
863
- <UIComponent
864
- {...props}
865
- actionStatus={actionStatus}
866
- usersList={usersList}
867
- filterValues={filterValues}
868
- setFilterValues={setFilterValues}
869
- userTypesSelected={userTypesSelected}
870
- handleSelectedUserTypes={handleSelectedUserTypes}
871
- paginationProps={paginationProps}
872
- getUsers={getUsers}
873
- searchValue={searchValue}
874
- onSearch={setSearchValue}
875
- paginationDetail={paginationDetail}
876
- selectedUserActiveState={selectedUserActiveState}
877
- isVerified={isVerified}
878
- setIsVerified={setIsVerified}
879
- handleChangeUserActiveState={handleChangeUserActiveState}
880
- handleChangeUserType={handleChangeUserType}
881
- handleChangeActiveUser={handleChangeActiveUser}
882
- handleDeleteUser={handleDeleteUser}
883
- selectedUsers={selectedUsers}
884
- handleSelectedUsers={handleSelectedUsers}
885
- deleteUsersActionState={deleteUsersActionState}
886
- handleDeleteSeveralUsers={handleDeleteSeveralUsers}
887
- handleSuccessUpdate={handleSuccessUpdate}
888
- handleSuccessAddUser={handleSuccessAddUser}
889
- handleSuccessDeleteUser={handleSuccessDeleteUser}
890
- handleSuccessAddressesUpdate={handleSuccessAddressesUpdate}
891
- occupationsState={occupationsState}
892
- selectedOccupation={selectedOccupation}
893
- handleSelectOccupation={setSelectedOccupation}
894
- setSelectedUsers={setSelectedUsers}
895
- orderFilterValue={orderFilterValue}
896
- handleChangeOrderFilterValue={setOrderFilterValue}
897
- multiFilterValues={multiFilterValues}
898
- handleChangeMultiFilterValues={handleChangeMultiFilterValues}
899
- actionDisabled={actionDisabled}
900
- driversGroupsState={driversGroupsState}
901
- />
902
- )
903
- }
904
- </>
905
- )
906
- }
907
-
908
- UsersList.propTypes = {
909
- /**
910
- * UI Component, this must be containt all graphic elements and use parent props
911
- */
912
- UIComponent: PropTypes.elementType,
913
- /**
914
- * Enable/Disable search option
915
- * Search Users list by a user ID
916
- */
917
- isSearchByUserId: PropTypes.bool,
918
- /**
919
- * Enable/Disable search option
920
- * Search Users list by a user email
921
- */
922
- isSearchByUserEmail: PropTypes.bool,
923
- /**
924
- * Enable/Disable search option
925
- * Search Users list by a user phone
926
- */
927
- isSearchByUserPhone: PropTypes.bool,
928
- /**
929
- * Array of user props to fetch
930
- */
931
- propsToFetch: PropTypes.arrayOf(string)
932
- }
933
-
934
- UsersList.defaultProps = {
935
- propsToFetch: [
936
- 'name', 'lastname', 'email', 'phone', 'photo', 'cellphone', 'schedule',
937
- 'country_phone_code', 'city_id', 'city', 'address', 'addresses', 'max_days_in_future',
938
- 'address_notes', 'driver_zone_restriction', 'dropdown_option_id', 'dropdown_option', 'location',
939
- 'zipcode', 'level', 'enabled', 'middle_name', 'second_lastname', 'birthdate', 'drivergroups', 'created_at', 'timezone'
940
- ],
941
- paginationSettings: { initialPage: 1, pageSize: 10, controlType: 'infinity' },
942
- defaultUserTypesSelected: [0, 1, 2, 3],
943
- defaultUserActiveState: true
944
- }
1
+ import React, { useEffect, useState } from 'react'
2
+ import PropTypes, { string } from 'prop-types'
3
+ import { useApi } from '../../../contexts/ApiContext'
4
+ import { useSession } from '../../../contexts/SessionContext'
5
+ import { useToast, ToastType } from '../../../contexts/ToastContext'
6
+ import { useLanguage } from '../../../contexts/LanguageContext'
7
+ import { useEvent } from '../../../contexts/EventContext'
8
+
9
+ export const UsersList = (props) => {
10
+ const {
11
+ UIComponent,
12
+ defaultUserActiveState,
13
+ paginationSettings,
14
+ propsToFetch,
15
+ isSearchByUserId,
16
+ isSearchByUserEmail,
17
+ isSearchByUserPhone,
18
+ isSearchByUserName,
19
+ isBusinessOwners,
20
+ defaultUserTypesSelected,
21
+ disabledActiveStateCondition,
22
+ isDriver,
23
+ isProfessional
24
+ } = props
25
+
26
+ const [ordering] = useApi()
27
+ const [session] = useSession()
28
+ const [, { showToast }] = useToast()
29
+ const [, t] = useLanguage()
30
+ const [events] = useEvent()
31
+
32
+ const [usersList, setUsersList] = useState({ users: [], loading: false, error: null })
33
+ const [filterValues, setFilterValues] = useState({ clear: false, changes: {} })
34
+ const [searchValue, setSearchValue] = useState(null)
35
+ const [isVerified, setIsVerified] = useState(false)
36
+ const [userTypesSelected, setUserTypesSelected] = useState(defaultUserTypesSelected)
37
+ const [paginationProps, setPaginationProps] = useState({
38
+ currentPage: (paginationSettings.controlType === 'pages' && paginationSettings.initialPage && paginationSettings.initialPage >= 1) ? paginationSettings.initialPage - 1 : 0,
39
+ pageSize: paginationSettings.pageSize ?? 10,
40
+ totalItems: null,
41
+ totalPages: null
42
+ })
43
+ const [paginationDetail, setPaginationDetail] = useState({})
44
+ const [selectedUserActiveState, setSelectedUserActiveState] = useState(defaultUserActiveState)
45
+ const [actionStatus, setActionStatus] = useState({ loading: false, error: null })
46
+ const [selectedUsers, setSelectedUsers] = useState([])
47
+ const [deleteUsersActionState, setDeleteUsersActionState] = useState({ loading: false, error: null })
48
+ const [occupationsState, setOccupationsState] = useState({ occupations: [], loading: false, error: null })
49
+ const [selectedOccupation, setSelectedOccupation] = useState(null)
50
+ const [orderFilterValue, setOrderFilterValue] = useState(null)
51
+ const [multiFilterValues, setMultiFilterValues] = useState({})
52
+ const [actionDisabled, setActionDisabled] = useState(true)
53
+ const [driversGroupsState, setDriversGroupsState] = useState({ groups: [], loading: false, error: null })
54
+
55
+ /**
56
+ * Save filter type values
57
+ * @param {object} types
58
+ */
59
+ const handleChangeMultiFilterValues = (types) => {
60
+ setMultiFilterValues(types)
61
+ }
62
+
63
+ /**
64
+ * Get users by params, order options and filters
65
+ * @param {boolean} newFetch Make a new request or next page
66
+ */
67
+ const getUsers = async (page, pageSize) => {
68
+ try {
69
+ setUsersList({ ...usersList, loading: true })
70
+ let parameters = {}
71
+
72
+ const paginationParams = {
73
+ page: page,
74
+ page_size: pageSize || paginationProps.pageSize
75
+ }
76
+
77
+ if (!isBusinessOwners) {
78
+ parameters = { ...paginationParams }
79
+ }
80
+
81
+ if (orderFilterValue !== null) {
82
+ parameters = {
83
+ ...parameters,
84
+ orders_count_condition: orderFilterValue === 0 ? 'eq' : 'ge',
85
+ orders_count_value: orderFilterValue
86
+ }
87
+ }
88
+
89
+ let where = null
90
+ const conditions = []
91
+
92
+ if (!disabledActiveStateCondition) {
93
+ conditions.push({ attribute: 'enabled', value: selectedUserActiveState })
94
+ }
95
+
96
+ if (isVerified) {
97
+ const verifiedConditions = []
98
+ verifiedConditions.push(
99
+ {
100
+ attribute: 'email_verified',
101
+ value: true
102
+ }
103
+ )
104
+ verifiedConditions.push(
105
+ {
106
+ attribute: 'phone_verified',
107
+ value: true
108
+ }
109
+ )
110
+ conditions.push({
111
+ conector: 'OR',
112
+ conditions: verifiedConditions
113
+ })
114
+ }
115
+
116
+ if (userTypesSelected.length > 0) {
117
+ conditions.push({ attribute: 'level', value: userTypesSelected })
118
+ }
119
+
120
+ if (selectedOccupation) {
121
+ conditions.push({ attribute: 'occupation_id', value: selectedOccupation })
122
+ }
123
+
124
+ if (searchValue) {
125
+ const searchConditions = []
126
+ if (isSearchByUserId) {
127
+ searchConditions.push(
128
+ {
129
+ attribute: 'id',
130
+ value: {
131
+ condition: 'ilike',
132
+ value: encodeURI(`%${searchValue}%`)
133
+ }
134
+ }
135
+ )
136
+ }
137
+ if (isSearchByUserEmail) {
138
+ searchConditions.push(
139
+ {
140
+ attribute: 'email',
141
+ value: {
142
+ condition: 'ilike',
143
+ value: encodeURI(`%${searchValue}%`)
144
+ }
145
+ }
146
+ )
147
+ }
148
+
149
+ if (isSearchByUserPhone) {
150
+ searchConditions.push(
151
+ {
152
+ attribute: 'cellphone',
153
+ value: {
154
+ condition: 'ilike',
155
+ value: encodeURI(`%${searchValue}%`)
156
+ }
157
+ }
158
+ )
159
+ }
160
+
161
+ if (isSearchByUserName) {
162
+ searchConditions.push(
163
+ {
164
+ attribute: 'name',
165
+ value: {
166
+ condition: 'ilike',
167
+ value: encodeURI(`%${searchValue}%`)
168
+ }
169
+ }
170
+ )
171
+ searchConditions.push(
172
+ {
173
+ attribute: 'lastname',
174
+ value: {
175
+ condition: 'ilike',
176
+ value: encodeURI(`%${searchValue}%`)
177
+ }
178
+ }
179
+ )
180
+ }
181
+
182
+ conditions.push({
183
+ conector: 'OR',
184
+ conditions: searchConditions
185
+ })
186
+ }
187
+
188
+ if (Object.keys(filterValues.changes).length) {
189
+ const filterConditions = []
190
+ if (filterValues?.changes?.name && filterValues?.changes?.name !== null) {
191
+ filterConditions.push(
192
+ {
193
+ attribute: 'name',
194
+ value: {
195
+ condition: 'ilike',
196
+ value: encodeURI(`%${filterValues?.changes?.name}%`)
197
+ }
198
+ }
199
+ )
200
+ }
201
+ if (filterValues.changes.lastname && filterValues.changes.lastname !== null) {
202
+ filterConditions.push(
203
+ {
204
+ attribute: 'lastname',
205
+ value: {
206
+ condition: 'ilike',
207
+ value: encodeURI(`%${filterValues.changes.lastname}%`)
208
+ }
209
+ }
210
+ )
211
+ }
212
+ if (filterValues.changes.email && filterValues.changes.email !== null) {
213
+ filterConditions.push(
214
+ {
215
+ attribute: 'email',
216
+ value: {
217
+ condition: 'ilike',
218
+ value: encodeURI(`%${filterValues.changes.email}%`)
219
+ }
220
+ }
221
+ )
222
+ }
223
+ if (filterValues.changes.email_verified !== undefined) {
224
+ filterConditions.push(
225
+ {
226
+ attribute: 'email_verified',
227
+ value: filterValues.changes.email_verified
228
+ }
229
+ )
230
+ }
231
+ if (filterValues.changes.phone && filterValues.changes.phone !== null) {
232
+ filterConditions.push(
233
+ {
234
+ attribute: 'phone',
235
+ value: {
236
+ condition: 'ilike',
237
+ value: encodeURI(`%${filterValues.changes.phone}%`)
238
+ }
239
+ }
240
+ )
241
+ }
242
+ if (filterValues.changes.phone_verified !== undefined) {
243
+ filterConditions.push(
244
+ {
245
+ attribute: 'phone_verified',
246
+ value: filterValues.changes.phone_verified
247
+ }
248
+ )
249
+ }
250
+ if (filterValues.changes.id && parseInt(filterValues.changes.id) > 0) {
251
+ filterConditions.push(
252
+ {
253
+ attribute: 'id',
254
+ value: parseInt(filterValues.changes.id)
255
+ }
256
+ )
257
+ }
258
+ if (filterConditions.length) {
259
+ conditions.push({
260
+ conector: 'AND',
261
+ conditions: filterConditions
262
+ })
263
+ }
264
+ }
265
+
266
+ if (Object.keys(multiFilterValues).length > 0) {
267
+ const filterConditons = []
268
+
269
+ if (multiFilterValues?.name && multiFilterValues?.name !== null) {
270
+ filterConditons.push(
271
+ {
272
+ attribute: 'name',
273
+ value: {
274
+ condition: 'ilike',
275
+ value: encodeURI(`%${multiFilterValues?.name}%`)
276
+ }
277
+ }
278
+ )
279
+ }
280
+ if (multiFilterValues?.lastname && multiFilterValues?.lastname !== null) {
281
+ filterConditons.push(
282
+ {
283
+ attribute: 'lastname',
284
+ value: {
285
+ condition: 'ilike',
286
+ value: encodeURI(`%${multiFilterValues?.lastname}%`)
287
+ }
288
+ }
289
+ )
290
+ }
291
+ if (multiFilterValues?.email && multiFilterValues?.email !== null) {
292
+ filterConditons.push(
293
+ {
294
+ attribute: 'email',
295
+ value: {
296
+ condition: 'ilike',
297
+ value: encodeURI(`%${multiFilterValues?.email}%`)
298
+ }
299
+ }
300
+ )
301
+ }
302
+ if (multiFilterValues?.cellphone && multiFilterValues?.cellphone !== null) {
303
+ filterConditons.push(
304
+ {
305
+ attribute: 'cellphone',
306
+ value: {
307
+ condition: 'ilike',
308
+ value: encodeURI(`%${multiFilterValues?.cellphone}%`)
309
+ }
310
+ }
311
+ )
312
+ }
313
+ if (multiFilterValues?.countryPhoneCode !== null) {
314
+ filterConditons.push(
315
+ {
316
+ attribute: 'country_phone_code',
317
+ value: {
318
+ condition: 'ilike',
319
+ value: encodeURI(`%${multiFilterValues?.countryPhoneCode}%`)
320
+ }
321
+ }
322
+ )
323
+ }
324
+ if (multiFilterValues?.cityIds.length !== 0) {
325
+ filterConditons.push(
326
+ {
327
+ attribute: 'city_id',
328
+ value: multiFilterValues?.cityIds
329
+ }
330
+ )
331
+ }
332
+ if (multiFilterValues?.phoneVerified !== null) {
333
+ filterConditons.push(
334
+ {
335
+ attribute: 'phone_verified',
336
+ value: multiFilterValues?.phoneVerified
337
+ }
338
+ )
339
+ }
340
+ if (multiFilterValues?.ordersCount?.value !== '') {
341
+ parameters = {
342
+ ...parameters,
343
+ orders_count_condition: multiFilterValues?.ordersCount?.condition,
344
+ orders_count_value: multiFilterValues?.ordersCount?.value
345
+ }
346
+ }
347
+ if (multiFilterValues?.emailVerified !== null) {
348
+ filterConditons.push(
349
+ {
350
+ attribute: 'email_verified',
351
+ value: multiFilterValues?.emailVerified
352
+ }
353
+ )
354
+ }
355
+ if (multiFilterValues?.userType !== null) {
356
+ filterConditons.push(
357
+ {
358
+ attribute: 'level',
359
+ value: multiFilterValues?.userType
360
+ }
361
+ )
362
+ }
363
+ if (multiFilterValues?.loyaltyLevel !== null) {
364
+ filterConditons.push(
365
+ {
366
+ attribute: 'loyalty_level_id',
367
+ value: multiFilterValues?.loyaltyLevel
368
+ }
369
+ )
370
+ }
371
+ if (multiFilterValues?.enabled !== null) {
372
+ filterConditons.push(
373
+ {
374
+ attribute: 'enabled',
375
+ value: multiFilterValues?.enabled
376
+ }
377
+ )
378
+ }
379
+ if (multiFilterValues?.deliveryFromDatetime !== null) {
380
+ filterConditons.push(
381
+ {
382
+ attribute: 'created_at',
383
+ value: {
384
+ condition: '>=',
385
+ value: multiFilterValues?.deliveryFromDatetime
386
+ }
387
+ }
388
+ )
389
+ }
390
+ if (multiFilterValues?.deliveryEndDatetime !== null) {
391
+ filterConditons.push(
392
+ {
393
+ attribute: 'created_at',
394
+ value: {
395
+ condition: '<=',
396
+ value: multiFilterValues?.deliveryEndDatetime
397
+ }
398
+ }
399
+ )
400
+ }
401
+
402
+ if (filterConditons.length) {
403
+ conditions.push({
404
+ conector: 'AND',
405
+ conditions: filterConditons
406
+ })
407
+ }
408
+ }
409
+
410
+ if (conditions.length) {
411
+ where = {
412
+ conditions,
413
+ conector: 'AND'
414
+ }
415
+ }
416
+
417
+ let fetchEndpoint = null
418
+ let content = {}
419
+
420
+ if (session.user?.level !== 2) {
421
+ fetchEndpoint = where
422
+ ? ordering.setAccessToken(session.token).users().select(propsToFetch).parameters(parameters).where(where)
423
+ : ordering.setAccessToken(session.token).users().select(propsToFetch).parameters(parameters)
424
+ const response = await fetchEndpoint.get()
425
+ content = response.content
426
+ } else {
427
+ const requestOptions = {
428
+ method: 'GET',
429
+ headers: {
430
+ 'Content-Type': 'application/json',
431
+ Authorization: `Bearer ${session.token}`
432
+ }
433
+ }
434
+ const fetchEndpoint = where
435
+ ? `${ordering.root}/professionals?page=${page}&page_size=${pageSize}&&where=${JSON.stringify(where)}`
436
+ : `${ordering.root}/professionals?page=${page}&page_size=${pageSize}`
437
+
438
+ const response = await fetch(fetchEndpoint, requestOptions)
439
+ content = await response.json()
440
+ }
441
+
442
+ const { result, pagination, error } = content
443
+ if (error) {
444
+ setUsersList({
445
+ ...usersList,
446
+ loading: false,
447
+ error: result
448
+ })
449
+ } else {
450
+ usersList.users = result
451
+ setUsersList({
452
+ ...usersList,
453
+ loading: false
454
+ })
455
+ let nextPageItems = 0
456
+ if (pagination.current_page !== pagination.total_pages) {
457
+ const remainingItems = pagination.total - usersList.users.length
458
+ nextPageItems = remainingItems < pagination.page_size ? remainingItems : pagination.page_size
459
+ }
460
+ setPaginationProps({
461
+ ...paginationProps,
462
+ currentPage: pagination.current_page,
463
+ pageSize: pagination.page_size === 0 ? paginationProps.pageSize : pagination.page_size,
464
+ totalPages: pagination.total_pages,
465
+ totalItems: pagination.total,
466
+ from: pagination.from,
467
+ to: pagination.to,
468
+ nextPageItems
469
+ })
470
+ setPaginationDetail({ ...pagination })
471
+ }
472
+ } catch (err) {
473
+ if (err.constructor.name !== 'Cancel') {
474
+ setUsersList({
475
+ ...usersList,
476
+ loading: false,
477
+ error: [err.message]
478
+ })
479
+ }
480
+ }
481
+ }
482
+
483
+ /**
484
+ * Get the occupations from API
485
+ */
486
+ const getOccupations = async () => {
487
+ try {
488
+ setOccupationsState({
489
+ ...occupationsState,
490
+ loading: true
491
+ })
492
+ const requestOptions = {
493
+ method: 'GET',
494
+ headers: {
495
+ 'Content-Type': 'application/json',
496
+ Authorization: `Bearer ${session?.token}`
497
+ }
498
+ }
499
+ const response = await fetch(`${ordering.root}/occupations`, requestOptions)
500
+ const content = await response.json()
501
+ if (!content.error) {
502
+ setOccupationsState({
503
+ loading: false,
504
+ occupations: content.result,
505
+ error: null
506
+ })
507
+ } else {
508
+ setOccupationsState({
509
+ ...occupationsState,
510
+ loading: false,
511
+ error: content.result
512
+ })
513
+ }
514
+ } catch (error) {
515
+ setOccupationsState({
516
+ ...occupationsState,
517
+ loading: false,
518
+ error: [error.message]
519
+ })
520
+ }
521
+ }
522
+
523
+ /**
524
+ * Change user type
525
+ * @param {object} userType User type
526
+ */
527
+ const handleSelectedUserTypes = (userTypes) => {
528
+ setUserTypesSelected(userTypes)
529
+ }
530
+
531
+ /**
532
+ * Method to change user active state for filter
533
+ */
534
+ const handleChangeUserActiveState = () => {
535
+ setSelectedUserActiveState(!selectedUserActiveState)
536
+ }
537
+
538
+ /**
539
+ * Method to change user type from API
540
+ * @param {Object} user user id and new type
541
+ */
542
+ const handleChangeUserType = async (user) => {
543
+ try {
544
+ showToast(ToastType.Info, t('LOADING', 'Loading'))
545
+ setActionStatus({ ...actionStatus, loading: true })
546
+ const requestsState = {}
547
+ const source = {}
548
+ requestsState.updateOrder = source
549
+ const { content: { error, result } } = await ordering.setAccessToken(session.token).users(user.id).save({ level: user.level }, { cancelToken: source })
550
+ setActionStatus({
551
+ ...actionStatus,
552
+ loading: false,
553
+ error: error ? result : null
554
+ })
555
+ if (!error) {
556
+ let users = []
557
+ if (userTypesSelected.includes(user.level)) {
558
+ users = usersList.users.filter(_user => {
559
+ if (_user.id === user.id) {
560
+ _user.level = user.level
561
+ }
562
+ return true
563
+ })
564
+ } else {
565
+ users = usersList.users.filter(_user => _user.id !== result.id)
566
+ }
567
+ setUsersList({ ...usersList, users })
568
+ showToast(ToastType.Success, t('UPDATED', 'Updated'))
569
+ }
570
+ } catch (err) {
571
+ setActionStatus({ ...actionStatus, loading: false, error: [err.message] })
572
+ }
573
+ }
574
+
575
+ /**
576
+ * Method to change user enable/disable
577
+ * @param {Object} user user id and enable state
578
+ */
579
+
580
+ const handleChangeActiveUser = async (user) => {
581
+ try {
582
+ showToast(ToastType.Info, t('LOADING', 'Loading'))
583
+ setActionStatus({ ...actionStatus, loading: true })
584
+ const { content: { error, result } } = await ordering.setAccessToken(session.token).users(user.id).save({ enabled: user.enabled })
585
+ setActionStatus({
586
+ ...actionStatus,
587
+ loading: false,
588
+ error: error ? result : null
589
+ })
590
+ if (!error) {
591
+ if (isDriver) {
592
+ handleSuccessUpdate(result)
593
+ } else if (!disabledActiveStateCondition) {
594
+ let users = [...usersList?.users]
595
+ if ((!user.enabled && selectedUserActiveState) || (user?.enabled && !selectedUserActiveState)) {
596
+ users = usersList.users.filter(_user => {
597
+ let valid = true
598
+ if (_user.id === user.id) {
599
+ if (user.enabled === !selectedUserActiveState) {
600
+ valid = false
601
+ }
602
+ }
603
+ return valid
604
+ })
605
+ } else {
606
+ users.push(user)
607
+ }
608
+ setUsersList({ ...usersList, users })
609
+ }
610
+ showToast(ToastType.Success, t('UPDATED', 'Updated'))
611
+ }
612
+ } catch (err) {
613
+ setActionStatus({ ...actionStatus, loading: false, error: [err.message] })
614
+ }
615
+ }
616
+
617
+ /**
618
+ * Method to delete users from API
619
+ * @param {Number} userId user id to delete
620
+ */
621
+ const handleDeleteUser = async (userId) => {
622
+ try {
623
+ setActionStatus({ ...actionStatus, loading: true })
624
+ const { content } = await ordering.setAccessToken(session.token).users(userId).delete()
625
+ if (!content.error) {
626
+ const users = usersList.users.filter(user => user.id !== userId)
627
+ setUsersList({ ...usersList, users })
628
+ if (deleteUsersActionState.loading) {
629
+ const _selectedUsers = [...selectedUsers]
630
+ _selectedUsers.shift()
631
+ if (_selectedUsers.length === 0) {
632
+ setDeleteUsersActionState({ ...deleteUsersActionState, loading: false })
633
+ }
634
+ setSelectedUsers(_selectedUsers)
635
+ }
636
+ setPaginationDetail({
637
+ ...paginationDetail,
638
+ total: paginationDetail?.total - 1
639
+ })
640
+ }
641
+ setActionStatus({
642
+ ...actionStatus,
643
+ loading: false,
644
+ error: content.error ? content.result : null
645
+ })
646
+ } catch (err) {
647
+ setActionStatus({ ...actionStatus, loading: false, error: [err.message] })
648
+ if (deleteUsersActionState.loading) {
649
+ setDeleteUsersActionState({ ...deleteUsersActionState, loading: false, error: [err.message] })
650
+ }
651
+ }
652
+ }
653
+
654
+ /**
655
+ * Method to delete several users from API
656
+ */
657
+ const handleDeleteSeveralUsers = async (code) => {
658
+ try {
659
+ showToast(ToastType.Info, t('LOADING', 'Loading'))
660
+ setDeleteUsersActionState({
661
+ ...deleteUsersActionState,
662
+ loading: true
663
+ })
664
+ const payload = {
665
+ users_id: selectedUsers
666
+ }
667
+ if (code) {
668
+ payload.deleted_action_code = code
669
+ }
670
+ const requestOptions = {
671
+ method: 'DELETE',
672
+ headers: {
673
+ 'Content-Type': 'application/json',
674
+ Authorization: `Bearer ${session.token}`
675
+ },
676
+ body: JSON.stringify(payload)
677
+ }
678
+ const response = await fetch(`${ordering.root}/users`, requestOptions)
679
+ const content = await response.json()
680
+ if (!content.error) {
681
+ const users = usersList.users.filter(user => !selectedUsers.includes(user.id))
682
+ setUsersList({ ...usersList, users })
683
+ setPaginationDetail({
684
+ ...paginationDetail,
685
+ total: paginationDetail?.total - selectedUsers.length
686
+ })
687
+ setSelectedUsers([])
688
+ setDeleteUsersActionState({
689
+ loading: false,
690
+ error: null
691
+ })
692
+ showToast(ToastType.Success, t('USER_DELETED', 'User deleted'))
693
+ } else {
694
+ setDeleteUsersActionState({
695
+ loading: false,
696
+ error: content.result
697
+ })
698
+ }
699
+ } catch (error) {
700
+ setDeleteUsersActionState({
701
+ loading: false,
702
+ error: [error.message]
703
+ })
704
+ }
705
+ }
706
+
707
+ /**
708
+ * Method to change selected users
709
+ * @param {Number} userId user id to change selected state
710
+ */
711
+ const handleSelectedUsers = (userId) => {
712
+ let _selectedUsers
713
+ if (selectedUsers.includes(userId)) {
714
+ _selectedUsers = selectedUsers.filter(id => id !== userId)
715
+ } else {
716
+ _selectedUsers = [...selectedUsers, userId]
717
+ }
718
+ setSelectedUsers(_selectedUsers)
719
+ }
720
+
721
+ /**
722
+ * Method to update users
723
+ * @param {Object} updatedUser updated user
724
+ */
725
+ const handleSuccessUpdate = (updatedUser) => {
726
+ const users = usersList.users.filter(user => {
727
+ if (user.id === updatedUser.id) {
728
+ Object.assign(user, updatedUser)
729
+ }
730
+ return true
731
+ })
732
+ setUsersList({
733
+ ...usersList,
734
+ users: users
735
+ })
736
+ }
737
+ /**
738
+ * Method to add user
739
+ * @param {Object} newUser new user to add
740
+ */
741
+ const handleSuccessAddUser = (newUser) => {
742
+ if (userTypesSelected.includes(newUser?.level)) {
743
+ setUsersList({
744
+ ...usersList,
745
+ users: [
746
+ ...usersList.users,
747
+ newUser
748
+ ]
749
+ })
750
+ setPaginationDetail({
751
+ ...paginationDetail,
752
+ total: paginationDetail?.total ? paginationDetail?.total + 1 : 1
753
+ })
754
+ }
755
+ }
756
+ /**
757
+ * Method to delete user
758
+ * @param {Object} user new user to delete
759
+ */
760
+ const handleSuccessDeleteUser = (user) => {
761
+ if (userTypesSelected.includes(user?.level)) {
762
+ setUsersList({
763
+ ...usersList,
764
+ users: usersList.users.filter(_user => _user.id !== user.id)
765
+ })
766
+ setPaginationDetail({
767
+ ...paginationDetail,
768
+ total: paginationDetail?.total - 1
769
+ })
770
+ }
771
+ }
772
+ /**
773
+ * Method to update addresses of selected user
774
+ * @param {number, Array} useId and addresses updated addresses
775
+ */
776
+ const handleSuccessAddressesUpdate = (userId, addresses) => {
777
+ const users = usersList.users.filter(user => {
778
+ if (user.id === userId) {
779
+ user.addresses = [...addresses]
780
+ }
781
+ return true
782
+ })
783
+ setUsersList({
784
+ ...usersList,
785
+ users: users
786
+ })
787
+ }
788
+
789
+ /**
790
+ * Method to get the drivers groups from API
791
+ */
792
+ const getDriversGroups = async () => {
793
+ try {
794
+ setDriversGroupsState({ ...driversGroupsState, loading: true })
795
+ const requestOptions = {
796
+ method: 'GET',
797
+ headers: {
798
+ 'Content-Type': 'application/json',
799
+ Authorization: `Bearer ${session.token}`
800
+ }
801
+ }
802
+ const response = await fetch(`${ordering.root}/drivergroups`, requestOptions)
803
+ const content = await response.json()
804
+ if (!content.error) {
805
+ const found = content.result.find(group => group?.administrator_id === session?.user?.id)
806
+ if (found) setActionDisabled(false)
807
+ else setActionDisabled(true)
808
+ const driverManagerGroups = content.result?.filter(group => group.administrator_id === session?.user?.id)
809
+ setDriversGroupsState({ ...driversGroupsState, groups: driverManagerGroups, loading: false })
810
+ }
811
+ } catch (err) {
812
+ setDriversGroupsState({ ...driversGroupsState, loading: false, error: [err.message] })
813
+ }
814
+ }
815
+
816
+ useEffect(() => {
817
+ if (session?.user?.level === 5) {
818
+ getDriversGroups()
819
+ } else {
820
+ setActionDisabled(false)
821
+ }
822
+ }, [session])
823
+
824
+ useEffect(() => {
825
+ if (usersList.loading) return
826
+ getUsers(1, null)
827
+ }, [userTypesSelected, selectedUserActiveState, searchValue, isVerified, selectedOccupation])
828
+
829
+ useEffect(() => {
830
+ if ((Object.keys(filterValues?.changes).length > 0 || filterValues.clear) && !usersList.loading) getUsers(1, null)
831
+ }, [filterValues])
832
+
833
+ useEffect(() => {
834
+ getUsers(1, null)
835
+ }, [multiFilterValues])
836
+
837
+ useEffect(() => {
838
+ if (!usersList.loading) getUsers(1, null)
839
+ }, [orderFilterValue])
840
+
841
+ useEffect(() => {
842
+ if (isProfessional) {
843
+ getOccupations()
844
+ }
845
+ }, [isProfessional])
846
+
847
+ useEffect(() => {
848
+ events.on('occupations_update', (data) => {
849
+ setOccupationsState({
850
+ ...occupationsState,
851
+ occupations: data
852
+ })
853
+ })
854
+ return () => {
855
+ events.off('occupations_update')
856
+ }
857
+ }, [events])
858
+
859
+ return (
860
+ <>
861
+ {
862
+ UIComponent && (
863
+ <UIComponent
864
+ {...props}
865
+ actionStatus={actionStatus}
866
+ usersList={usersList}
867
+ filterValues={filterValues}
868
+ setFilterValues={setFilterValues}
869
+ userTypesSelected={userTypesSelected}
870
+ handleSelectedUserTypes={handleSelectedUserTypes}
871
+ paginationProps={paginationProps}
872
+ getUsers={getUsers}
873
+ searchValue={searchValue}
874
+ onSearch={setSearchValue}
875
+ paginationDetail={paginationDetail}
876
+ selectedUserActiveState={selectedUserActiveState}
877
+ isVerified={isVerified}
878
+ setIsVerified={setIsVerified}
879
+ handleChangeUserActiveState={handleChangeUserActiveState}
880
+ handleChangeUserType={handleChangeUserType}
881
+ handleChangeActiveUser={handleChangeActiveUser}
882
+ handleDeleteUser={handleDeleteUser}
883
+ selectedUsers={selectedUsers}
884
+ handleSelectedUsers={handleSelectedUsers}
885
+ deleteUsersActionState={deleteUsersActionState}
886
+ handleDeleteSeveralUsers={handleDeleteSeveralUsers}
887
+ handleSuccessUpdate={handleSuccessUpdate}
888
+ handleSuccessAddUser={handleSuccessAddUser}
889
+ handleSuccessDeleteUser={handleSuccessDeleteUser}
890
+ handleSuccessAddressesUpdate={handleSuccessAddressesUpdate}
891
+ occupationsState={occupationsState}
892
+ selectedOccupation={selectedOccupation}
893
+ handleSelectOccupation={setSelectedOccupation}
894
+ setSelectedUsers={setSelectedUsers}
895
+ orderFilterValue={orderFilterValue}
896
+ handleChangeOrderFilterValue={setOrderFilterValue}
897
+ multiFilterValues={multiFilterValues}
898
+ handleChangeMultiFilterValues={handleChangeMultiFilterValues}
899
+ actionDisabled={actionDisabled}
900
+ driversGroupsState={driversGroupsState}
901
+ />
902
+ )
903
+ }
904
+ </>
905
+ )
906
+ }
907
+
908
+ UsersList.propTypes = {
909
+ /**
910
+ * UI Component, this must be containt all graphic elements and use parent props
911
+ */
912
+ UIComponent: PropTypes.elementType,
913
+ /**
914
+ * Enable/Disable search option
915
+ * Search Users list by a user ID
916
+ */
917
+ isSearchByUserId: PropTypes.bool,
918
+ /**
919
+ * Enable/Disable search option
920
+ * Search Users list by a user email
921
+ */
922
+ isSearchByUserEmail: PropTypes.bool,
923
+ /**
924
+ * Enable/Disable search option
925
+ * Search Users list by a user phone
926
+ */
927
+ isSearchByUserPhone: PropTypes.bool,
928
+ /**
929
+ * Array of user props to fetch
930
+ */
931
+ propsToFetch: PropTypes.arrayOf(string)
932
+ }
933
+
934
+ UsersList.defaultProps = {
935
+ propsToFetch: [
936
+ 'name', 'lastname', 'email', 'phone', 'photo', 'cellphone', 'schedule',
937
+ 'country_phone_code', 'city_id', 'city', 'address', 'addresses', 'max_days_in_future',
938
+ 'address_notes', 'driver_zone_restriction', 'dropdown_option_id', 'dropdown_option', 'location',
939
+ 'zipcode', 'level', 'enabled', 'middle_name', 'second_lastname', 'birthdate', 'drivergroups', 'created_at', 'timezone'
940
+ ],
941
+ paginationSettings: { initialPage: 1, pageSize: 10, controlType: 'infinity' },
942
+ defaultUserTypesSelected: [0, 1, 2, 3],
943
+ defaultUserActiveState: true
944
+ }