@ozdao/martyrs 0.2.508 → 0.2.509

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 (230) hide show
  1. package/dist/_virtual/index.cjs +4 -4
  2. package/dist/_virtual/index.js +4 -4
  3. package/dist/_virtual/index2.cjs +4 -4
  4. package/dist/_virtual/index2.js +4 -4
  5. package/dist/{main-AWSb_d2P.cjs → main-D89N_jml.cjs} +1 -1
  6. package/dist/{main-Dq-UfO4G.js → main-DSiCr7yl.js} +7 -8
  7. package/dist/martyrs/src/components/Chips/{Chips.vue2.cjs → Chips.vue.cjs} +2 -2
  8. package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +1 -0
  9. package/dist/martyrs/src/components/Chips/{Chips.vue2.js → Chips.vue.js} +2 -2
  10. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +1 -0
  11. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.cjs → Dropdown.vue.cjs} +2 -2
  12. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js.map → Dropdown.vue.cjs.map} +1 -1
  13. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
  14. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +1 -0
  15. package/dist/martyrs/src/components/Feed/Carousel.vue.cjs +4 -3
  16. package/dist/martyrs/src/components/Feed/Carousel.vue.cjs.map +1 -1
  17. package/dist/martyrs/src/components/Feed/Carousel.vue.js +5 -4
  18. package/dist/martyrs/src/components/Feed/Carousel.vue.js.map +1 -1
  19. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
  20. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  21. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +2 -2
  22. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
  23. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
  24. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
  25. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
  26. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
  27. package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
  28. package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
  29. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  30. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  31. package/dist/martyrs/src/components/Select/{Select.vue.cjs → Select.vue2.cjs} +2 -2
  32. package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +1 -0
  33. package/dist/martyrs/src/components/Select/{Select.vue.js → Select.vue2.js} +2 -2
  34. package/dist/martyrs/src/components/Select/{Select.vue.cjs.map → Select.vue2.js.map} +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
  36. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
  37. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +17 -11
  38. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs.map +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +18 -12
  40. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
  41. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  42. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  43. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  44. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
  45. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  46. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  47. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  48. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  49. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
  51. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -2
  52. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
  53. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -2
  54. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
  55. package/dist/martyrs/src/modules/globals/globals.client.js +15 -15
  56. package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
  57. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  58. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  59. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
  61. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs +121 -107
  62. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs.map +1 -1
  63. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js +131 -117
  64. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js.map +1 -1
  65. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
  66. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs.map +1 -1
  67. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
  68. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
  69. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  70. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  71. package/dist/martyrs/src/modules/icons/logos/Logotype.vue.cjs +3 -3
  72. package/dist/martyrs/src/modules/icons/logos/Logotype.vue.js +3 -3
  73. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
  74. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  75. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
  76. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  77. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +138 -136
  78. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs.map +1 -1
  79. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +137 -135
  80. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
  81. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +2 -2
  82. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +2 -2
  83. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  84. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  85. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  86. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  87. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
  88. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  89. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
  90. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  91. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
  92. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  93. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
  94. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  95. package/dist/martyrs/src/modules/music/router/music.cjs +1 -1
  96. package/dist/martyrs/src/modules/music/router/music.js +1 -1
  97. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
  98. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  99. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +61 -9
  100. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs.map +1 -1
  101. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +61 -9
  102. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js.map +1 -1
  103. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  105. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  107. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
  108. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  109. package/dist/martyrs/src/modules/orders/orders.client.cjs +36 -38
  110. package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
  111. package/dist/martyrs/src/modules/orders/orders.client.js +36 -38
  112. package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
  113. package/dist/martyrs/src/modules/orders/store/models/customer.cjs +7 -0
  114. package/dist/martyrs/src/modules/orders/store/models/customer.cjs.map +1 -1
  115. package/dist/martyrs/src/modules/orders/store/models/customer.js +7 -0
  116. package/dist/martyrs/src/modules/orders/store/models/customer.js.map +1 -1
  117. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  118. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  119. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  120. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
  121. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
  122. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
  123. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +3 -3
  124. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +3 -3
  125. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
  126. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  127. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  128. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
  129. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  130. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  131. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  132. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  133. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +17 -28
  134. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
  135. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +17 -28
  136. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
  137. package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
  138. package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
  139. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
  140. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
  141. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.cjs +9 -1
  142. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.cjs.map +1 -1
  143. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js +9 -1
  144. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js.map +1 -1
  145. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +2 -2
  146. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  147. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
  148. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
  149. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  150. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  152. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  153. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  154. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  155. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  156. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  157. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  158. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  159. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.cjs +10 -5
  160. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.cjs.map +1 -1
  161. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.js +10 -5
  162. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.js.map +1 -1
  163. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +5 -2
  164. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs.map +1 -1
  165. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +5 -2
  166. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js.map +1 -1
  167. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  168. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  169. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  170. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  171. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +1 -1
  172. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +1 -1
  173. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
  174. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  175. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  176. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  177. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  178. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  179. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  180. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  181. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  182. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
  183. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +3 -3
  184. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +3 -3
  185. package/dist/martyrs.cjs.js +1 -1
  186. package/dist/martyrs.css +1 -1
  187. package/dist/martyrs.es.js +1 -1
  188. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.cjs +1 -1
  189. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
  190. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.cjs +1 -1
  191. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
  192. package/dist/orders.server.cjs +58 -0
  193. package/dist/orders.server.js +58 -0
  194. package/dist/products.server.cjs +11 -1
  195. package/dist/products.server.js +11 -1
  196. package/dist/style.css +30 -41
  197. package/dist/{web-DaBwwCQ5.cjs → web-XyQNm3cW.cjs} +1 -1
  198. package/dist/{web-BXajFCU2.js → web-gtBkwjra.js} +1 -1
  199. package/package.json +1 -1
  200. package/src/components/Feed/Carousel.vue +3 -1
  201. package/src/components/FieldBig/FieldBig.vue +2 -2
  202. package/src/modules/auth/views/components/pages/ProfileEdit.vue +17 -10
  203. package/src/modules/globals/views/components/partials/Footer.centered.vue +338 -0
  204. package/src/modules/globals/views/components/partials/Footer.vue +104 -99
  205. package/src/modules/globals/views/components/partials/Header.vue +1 -1
  206. package/src/modules/icons/logos/Logotype.vue +1 -1
  207. package/src/modules/inventory/components/pages/Inventory.vue +126 -119
  208. package/src/modules/orders/components/forms/FormCustomerDetails.vue +51 -0
  209. package/src/modules/orders/middlewares/customers.verifier.js +60 -0
  210. package/src/modules/orders/models/customer.model.js +18 -0
  211. package/src/modules/orders/orders.client.js +36 -38
  212. package/src/modules/orders/store/models/customer.js +7 -0
  213. package/src/modules/organizations/configs/navigation.organization.config.js +17 -26
  214. package/src/modules/products/TASKS.MD +1 -157
  215. package/src/modules/products/components/elements/QuantitySelector.vue +17 -9
  216. package/src/modules/products/components/pages/Product.vue +1 -1
  217. package/src/modules/products/components/pages/Products.vue +0 -1
  218. package/src/modules/products/components/sections/ProductsPopular.vue +9 -5
  219. package/src/modules/products/components/sections/ProductsRecommended.vue +4 -1
  220. package/src/modules/products/controllers/configs/products.lookup.config.js +11 -1
  221. package/src/styles/base/all.scss +9 -4
  222. package/src/styles/config.scss +10 -0
  223. package/src/styles/responsive.scss +2 -1
  224. package/src/styles/typography.scss +0 -5
  225. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +0 -1
  226. package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +0 -1
  227. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +0 -1
  228. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
  229. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  230. package/dist/martyrs/src/components/Select/Select.vue.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Products.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Products.vue"],"sourcesContent":["<template>\n <div class=\"pos-relative\">\n <header \n v-if=\"route.name !== 'Organization' && !MOBILE_APP\"\n class=\"pd-medium flex-v-center flex-nowrap flex\"\n >\n <h2 class=\"mn-r-medium\">Products</h2>\n <button \n v-if=\"hasAccess(route.params._id, 'products', 'create', auth.state.accesses, auth.state.access.roles)\"\n @click=\"$router.push({\n name: route.params?._id ? 'Organization_ProductAdd' : 'ProductAdd'\n })\" \n class=\"radius-100 i-big hover-scale-1 cursor-pointer t-white bg-second\">\n +\n </button>\n </header>\n\n <div class=\"cols-2-1_3 br-1px br-solid br-light z-index-3 pos-relative\">\n\n <div class=\"o-y-scroll br-r br-solid br-light pd-medium z-index-2 desktop-only h-100 pos-relative\">\n <div class=\"w-100 o-y-scroll h-100\">\n <!-- Категории -->\n <div class=\"mn-b-medium\" v-if=\"currentCategories.length > 0\">\n <h4 class=\"mn-b-small\">\n {{ route.params.categoryPath ? 'Subcategories' : 'Categories' }}\n </h4>\n <div class=\"gap-micro\">\n <div\n v-for=\"category in currentCategories\"\n :key=\"category._id\"\n @click=\"selectCategory(category)\"\n class=\"pd-small radius-small cursor-pointer hover-bg-light transition-all\"\n >\n {{ category.name }}\n <br>\n <span v-for=\"subcategory in category.children\">{{subcategory.name}}</span>\n </div>\n </div>\n </div>\n\n <!-- Фильтры категории -->\n <Spoiler \n v-for=\"filter in categoryFilters\"\n :key=\"filter.name\"\n class=\"o-hidden mn-b-medium\"\n :status=\"true\"\n >\n <template #header=\"{ isOpen }\">\n <div class=\"cursor-pointer w-100 flex-v-center flex-nowrap flex\">\n <h4 class=\"w-100\">{{ filter.name }}</h4>\n <div class=\"h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra\">\n <IconChevronBottom :class=\"{ 'rotate-180 mn-t-micro-negative': isOpen }\" fill=\"rgb(var(--black))\" class=\"i-regular\"/>\n </div>\n </div>\n </template>\n\n <template #content>\n <div class=\"mn-t-small\">\n <Checkbox \n v-for=\"option in filter.options\"\n :key=\"option.text || option\"\n v-model:radio=\"selectedFilters[filter.name]\"\n :label=\"option.text || option\"\n :value=\"option.text || option\"\n mode=\"checkbox\"\n class=\"mn-b-micro\"\n />\n </div>\n </template>\n </Spoiler>\n \n\n <!-- Цена за сутки -->\n <Spoiler \n class=\"o-hidden mn-b-medium\"\n :status=\"true\"\n >\n <template #header=\"{ isOpen }\">\n <div class=\"cursor-pointer w-100 flex-v-center flex-nowrap flex\">\n <h4 class=\"w-100\"> Price</h4>\n <div class=\"h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra\">\n <IconChevronBottom :class=\"{ 'rotate-180 mn-t-micro-negative': isOpen }\" fill=\"rgb(var(--black))\" class=\"i-regular\"/>\n </div>\n </div>\n </template>\n\n <template #content>\n <div class=\"mn-t-small flex gap-thin\">\n <Field\n v-model=\"priceRange.min\"\n placeholder=\"From\"\n type=\"number\"\n class=\"w-50 bg-light pd-small radius-small\"\n />\n <Field\n v-model=\"priceRange.max\"\n placeholder=\"To\"\n type=\"number\"\n class=\"w-50 bg-light pd-small radius-small\"\n />\n </div>\n </template>\n </Spoiler>\n\n <!-- Доступность -->\n <Spoiler \n class=\"o-hidden mn-b-medium\"\n :status=\"true\"\n >\n <template #header=\"{ isOpen }\">\n <div class=\"cursor-pointer w-100 flex-v-center flex-nowrap flex\">\n <h4 class=\"w-100\">Availability</h4>\n <div class=\"h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra\">\n <IconChevronBottom :class=\"{ 'rotate-180 mn-t-micro-negative': isOpen }\" fill=\"rgb(var(--black))\" class=\"i-regular\"/>\n </div>\n </div>\n </template>\n\n <template #content>\n <div class=\"mn-t-small\">\n <div \n v-for=\"option in availabilityOptions\"\n :key=\"option.value\"\n @click=\"selectAvailabilityOption(option.value)\"\n :class=\"{ 'bg-light': selectedAvailability === option.value }\"\n class=\"pd-small radius-small cursor-pointer hover-bg-light transition-all mn-b-micro\"\n >\n {{ option.label }}\n </div>\n \n <div \n @click=\"() => { tempSelectedDates = selectedDates; showDatePickerPopup = true; }\"\n :class=\"{ 'bg-light': selectedAvailability === 'custom' }\"\n class=\"pd-small radius-small cursor-pointer hover-bg-light transition-all mn-b-micro\"\n >\n {{ selectedDates ? `${formatDate(selectedDates.start, { dayMonth: true, language: 'en' })} - ${formatDate(selectedDates.end, { dayMonth: true, language: 'en' })}` : 'Select dates'}} \n </div>\n </div>\n </template>\n </Spoiler>\n\n <!-- Кнопка очистки фильтров -->\n <button \n class=\"bg-main w-100 button mn-t-medium\"\n >\n Clear Filters\n </button>\n </div>\n </div>\n\n <div class=\"w-100 rows-1 pd-thin pos-relative o-hidden\">\n <Filters\n v-model:filters=\"availableFilters\"\n v-model:selected=\"selectedFilters\"\n class=\"mn-b-thin mobile-only\"\n />\n <slot></slot>\n <!-- <div class=\"pos-relative w-100 z-index-3 radius-tl-big radius-tr-big\">\n <BlockSearch \n @search=\"debouncedSearch\"\n placeholder=\"Enter product name\"\n class=\"bg-light mn-b-thin h-4r\"\n />\n </div> -->\n\n <div class=\"mn-b-thin mobile-only w-100 o-y-scroll scroll-hide scroll-snap-type-x-mandatory scroll-pd-regular\">\n <div class=\"gap-thin flex-nowrap flex\">\n <div\n v-for=\"category in currentCategories\"\n :key=\"category._id\"\n @click=\"selectCategory(category)\"\n class=\" flex-child-default bg-light flex t-nowrap pd-medium radius-medium cursor-pointer hover-bg-light transition-all\"\n >\n {{ category.name }}\n </div>\n </div>\n </div>\n\n\n <Feed\n :search=\"true\"\n v-model:filter=\"products.state.filter\"\n v-model:sort=\"products.state.sort\"\n :showLoadMore=\"false\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no products available.'\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: products.state\n }\"\n :options=\"{\n limit: 16,\n owner: route.name?.includes('Organization') ? route.params._id : null,\n search: route.query.search,\n lookup: ['variants','rents'],\n categories: route.params.categoryPath ? `/${route.params.categoryPath}` : null,\n filters: processedFilters,\n prices: processedPrices,\n dateStart: selectedDates?.start,\n dateEnd: selectedDates?.end\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"cols-4 pos-relative w-100 rows-1 gap-thin\"\n \n >\n <router-link \n v-for=\"product in items\" \n :to=\"route.params._id ? { name: 'Organization_Product', params: { _id: route.params._id, product: product._id } } : { name: 'Product', params: { product: product._id } }\"\n class=\"pos-relative h-100 w-100\"\n >\n <CardProduct\n :key=\"product._id\"\n :product=\"product\"\n :user=\"auth.state.access\"\n :organization=\"route.params._id\"\n :access=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n class=\"pos-relative h-100 w-100 bg-light\"\n />\n </router-link>\n </Feed>\n\n </div>\n </div>\n \n <!-- Date Picker Popup -->\n <Popup\n :isPopupOpen=\"showDatePickerPopup\"\n @close-popup=\"showDatePickerPopup = false\"\n class=\"pd-medium bg-white radius-medium\"\n style=\"min-width: 350px;\"\n >\n <h3 class=\"mn-b-medium\">Select Date Range</h3>\n \n <Calendar\n v-model:date=\"tempSelectedDates\"\n :allowRange=\"true\"\n :disablePastDates=\"true\"\n class=\"mn-b-medium\"\n />\n \n <div class=\"flex gap-small\">\n <button \n @click=\"applyDateFilter\"\n class=\"bg-main button flex-child-full\"\n >\n Apply\n </button>\n <button \n @click=\"showDatePickerPopup = false\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n </div>\n </Popup>\n</div>\n\n</template>\n\n\n<script setup=\"props\">\n // Import libs\n import { ref, computed, watch, onMounted, onUnmounted } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n // Import components\n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import FilterProducts from '@martyrs/src/modules/products/components/sections/FilterProducts.vue'\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n import BlockFilter from '@martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue'\n import Filters from '@martyrs/src/modules/globals/views/components/sections/Filters.vue'\n import Spoiler from \"@martyrs/src/components/Spoiler/Spoiler.vue\"\n import Field from \"@martyrs/src/components/Field/Field.vue\"\n import Calendar from \"@martyrs/src/components/Calendar/Calendar.vue\"\n import Popup from \"@martyrs/src/components/Popup/Popup.vue\"\n import Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\"\n\n import CardProduct from '@martyrs/src/modules/products/components/blocks/CardProduct.vue'\n\n import IconPlus from '@martyrs/src/modules/icons/navigation/IconPlus.vue'\n import IconChevronBottom from '@martyrs/src/modules/icons/navigation/IconChevronBottom.vue'\n\n // Accessing router and store\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import * as categories from '@martyrs/src/modules/products/store/categories.js';\n import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\n const route = useRoute()\n const router = useRouter()\n const { generateFilters, formatDate } = useGlobalMixins()\n\n // Категории и фильтры\n const currentCategories = ref([]);\n const currentCategory = ref(null);\n const categoryFilters = ref([]);\n // const selectedFilters = ref({});\n\nconst availableFilters = ref([\n {\n title: 'Price',\n value: 'price',\n type: 'range',\n minPlaceholder: 'From',\n maxPlaceholder: 'To'\n },\n {\n title: 'Delivery',\n value: 'delivery',\n type: 'checkbox',\n options: [\n { label: 'Pickup', value: 'pickup' },\n { label: 'Courier', value: 'courier' },\n { label: 'Post', value: 'post' }\n ]\n },\n {\n title: 'Status',\n value: 'status',\n type: 'radio',\n options: [\n { label: 'Available', value: 'available' },\n { label: 'Out of Stock', value: 'out_of_stock' },\n { label: 'Coming Soon', value: 'coming_soon' }\n ]\n }\n])\n\nconst selectedFilters = ref({\n price: { min: '', max: '' },\n delivery: [],\n status: null\n})\n\n \n // Переменные фильтров\n const availabilityOptions = ref([\n { label: 'Available today', value: 'today' },\n { label: 'This week', value: 'week' },\n { label: 'This month', value: 'month' }\n ]);\n \n const selectedAvailability = ref('all');\n const showDatePickerPopup = ref(false);\n const selectedPeriod = ref(null);\n const selectedDates = ref(null);\n const tempSelectedDates = ref(null);\n \n const priceRange = ref({\n min: '',\n max: ''\n });\n\n // Computed property for processed filters\n const processedFilters = computed(() => {\n return generateFilters(selectedFilters.value);\n });\n\n const processedPrices = computed(() => {\n return priceRange.value.min || priceRange.value.max ? `${priceRange.value.min || 0}-${priceRange.value.max || 999999}` : null;\n });\n\n\n const processedLookups = computed(() => {\n const lookups = ['variants'];\n if (processedDates.value) {\n lookups.push('rents');\n }\n return lookups;\n });\n\n const loadCategoryData = async () => {\n const categoryPath = route.params.categoryPath;\n \n try {\n if (categoryPath) {\n // Загружаем категорию и её прямых детей\n const result = await categories.actions.read({ \n url: `/${categoryPath}`,\n depth: 1,\n tree: false\n });\n \n if (result.length > 0) {\n currentCategory.value = result[0];\n currentCategories.value = result[0].children || [];\n categoryFilters.value = result[0].filters || [];\n \n // Initialize selected filters object\n const filtersObj = {};\n (result[0].filters || []).forEach(filter => {\n filtersObj[filter.name] = [];\n });\n selectedFilters.value = filtersObj;\n }\n } else {\n // Загружаем только корневые категории\n const result = await categories.actions.read({ \n root: true,\n tree: false\n });\n \n currentCategories.value = result;\n }\n } catch (error) {\n console.error('Error loading categories:', error);\n currentCategories.value = [];\n }\n };\n\n // Функция для выбора категории\n const selectCategory = (category) => {\n const categoryPath = category.url ? category.url.substring(1) : '';\n \n if (!categoryPath) {\n console.warn('No URL found for category:', category);\n return;\n }\n \n // Переходим к странице категории используя wildcard роут\n if (route.params._id) {\n router.push(`/organizations/${route.params._id}/products/categories/${categoryPath}`);\n } else {\n router.push(`/products/categories/${categoryPath}`);\n }\n };\n\n // Функция выбора опции доступности\n const selectAvailabilityOption = (value) => {\n selectedAvailability.value = value;\n const today = new Date();\n \n switch(value) {\n case 'today':\n selectedDates.value = {\n start: today,\n end: today\n };\n break;\n case 'week':\n const weekEnd = new Date(today);\n weekEnd.setDate(today.getDate() + 7);\n selectedDates.value = {\n start: today,\n end: weekEnd\n };\n break;\n case 'month':\n const monthEnd = new Date(today);\n monthEnd.setMonth(today.getMonth() + 1);\n selectedDates.value = {\n start: today,\n end: monthEnd\n };\n break;\n }\n };\n\n // Функция применения фильтра дат\n const applyDateFilter = () => {\n selectedDates.value = tempSelectedDates.value;\n selectedAvailability.value = 'custom';\n showDatePickerPopup.value = false;\n };\n\n globals.state.navigation_bar.actions = [{\n component: IconPlus,\n props: {\n fill: \"rgb(var(--main))\" \n },\n condition: () => auth.state.user && auth.state.user._id,\n action: () => route.params._id ? router.push({ name: 'Organization_ProductAdd', params: { _id: route.params._id} }) : router.push({ name: 'ProductAdd' })\n }],\n\n onMounted(async () => {\n await loadCategoryData();\n })\n\n onUnmounted(() => {\n globals.state.navigation_bar.actions = [];\n });\n\n</script>\n\n<style lang=\"scss\">\n\n\n</style>\n"],"names":["categories.actions","globals.state","IconPlus","auth.state"],"mappings":"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"}
1
+ {"version":3,"file":"Products.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Products.vue"],"sourcesContent":["<template>\n <div class=\"pos-relative\">\n <header \n v-if=\"route.name !== 'Organization' && !MOBILE_APP\"\n class=\"pd-medium flex-v-center flex-nowrap flex\"\n >\n <h2 class=\"mn-r-medium\">Products</h2>\n <button \n v-if=\"hasAccess(route.params._id, 'products', 'create', auth.state.accesses, auth.state.access.roles)\"\n @click=\"$router.push({\n name: route.params?._id ? 'Organization_ProductAdd' : 'ProductAdd'\n })\" \n class=\"radius-100 i-big hover-scale-1 cursor-pointer t-white bg-second\">\n +\n </button>\n </header>\n\n <div class=\"cols-2-1_3 br-1px br-solid br-light z-index-3 pos-relative\">\n\n <div class=\"o-y-scroll br-r br-solid br-light pd-medium z-index-2 desktop-only h-100 pos-relative\">\n <div class=\"w-100 o-y-scroll h-100\">\n <!-- Категории -->\n <div class=\"mn-b-medium\" v-if=\"currentCategories.length > 0\">\n <h4 class=\"mn-b-small\">\n {{ route.params.categoryPath ? 'Subcategories' : 'Categories' }}\n </h4>\n <div class=\"gap-micro\">\n <div\n v-for=\"category in currentCategories\"\n :key=\"category._id\"\n @click=\"selectCategory(category)\"\n class=\"pd-small radius-small cursor-pointer hover-bg-light transition-all\"\n >\n {{ category.name }}\n <br>\n <span v-for=\"subcategory in category.children\">{{subcategory.name}}</span>\n </div>\n </div>\n </div>\n\n <!-- Фильтры категории -->\n <Spoiler \n v-for=\"filter in categoryFilters\"\n :key=\"filter.name\"\n class=\"o-hidden mn-b-medium\"\n :status=\"true\"\n >\n <template #header=\"{ isOpen }\">\n <div class=\"cursor-pointer w-100 flex-v-center flex-nowrap flex\">\n <h4 class=\"w-100\">{{ filter.name }}</h4>\n <div class=\"h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra\">\n <IconChevronBottom :class=\"{ 'rotate-180 mn-t-micro-negative': isOpen }\" fill=\"rgb(var(--black))\" class=\"i-regular\"/>\n </div>\n </div>\n </template>\n\n <template #content>\n <div class=\"mn-t-small\">\n <Checkbox \n v-for=\"option in filter.options\"\n :key=\"option.text || option\"\n v-model:radio=\"selectedFilters[filter.name]\"\n :label=\"option.text || option\"\n :value=\"option.text || option\"\n mode=\"checkbox\"\n class=\"mn-b-micro\"\n />\n </div>\n </template>\n </Spoiler>\n \n <!-- Цена за сутки -->\n <Spoiler \n class=\"o-hidden mn-b-medium\"\n :status=\"true\"\n >\n <template #header=\"{ isOpen }\">\n <div class=\"cursor-pointer w-100 flex-v-center flex-nowrap flex\">\n <h4 class=\"w-100\"> Price</h4>\n <div class=\"h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra\">\n <IconChevronBottom :class=\"{ 'rotate-180 mn-t-micro-negative': isOpen }\" fill=\"rgb(var(--black))\" class=\"i-regular\"/>\n </div>\n </div>\n </template>\n\n <template #content>\n <div class=\"mn-t-small flex gap-thin\">\n <Field\n v-model=\"priceRange.min\"\n placeholder=\"From\"\n type=\"number\"\n class=\"w-50 bg-light pd-small radius-small\"\n />\n <Field\n v-model=\"priceRange.max\"\n placeholder=\"To\"\n type=\"number\"\n class=\"w-50 bg-light pd-small radius-small\"\n />\n </div>\n </template>\n </Spoiler>\n\n <!-- Доступность -->\n <Spoiler \n class=\"o-hidden mn-b-medium\"\n :status=\"true\"\n >\n <template #header=\"{ isOpen }\">\n <div class=\"cursor-pointer w-100 flex-v-center flex-nowrap flex\">\n <h4 class=\"w-100\">Availability</h4>\n <div class=\"h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra\">\n <IconChevronBottom :class=\"{ 'rotate-180 mn-t-micro-negative': isOpen }\" fill=\"rgb(var(--black))\" class=\"i-regular\"/>\n </div>\n </div>\n </template>\n\n <template #content>\n <div class=\"mn-t-small\">\n <div \n v-for=\"option in availabilityOptions\"\n :key=\"option.value\"\n @click=\"selectAvailabilityOption(option.value)\"\n :class=\"{ 'bg-light': selectedAvailability === option.value }\"\n class=\"pd-small radius-small cursor-pointer hover-bg-light transition-all mn-b-micro\"\n >\n {{ option.label }}\n </div>\n \n <div \n @click=\"() => { tempSelectedDates = selectedDates; showDatePickerPopup = true; }\"\n :class=\"{ 'bg-light': selectedAvailability === 'custom' }\"\n class=\"pd-small radius-small cursor-pointer hover-bg-light transition-all mn-b-micro\"\n >\n {{ selectedDates ? `${formatDate(selectedDates.start, { dayMonth: true, language: 'en' })} - ${formatDate(selectedDates.end, { dayMonth: true, language: 'en' })}` : 'Select dates'}} \n </div>\n </div>\n </template>\n </Spoiler>\n\n <!-- Кнопка очистки фильтров -->\n <button \n class=\"bg-main w-100 button mn-t-medium\"\n >\n Clear Filters\n </button>\n </div>\n </div>\n\n <div class=\"w-100 rows-1 pd-thin pos-relative o-hidden\">\n <Filters\n v-model:filters=\"availableFilters\"\n v-model:selected=\"selectedFilters\"\n class=\"mn-b-thin mobile-only\"\n />\n <slot></slot>\n <!-- <div class=\"pos-relative w-100 z-index-3 radius-tl-big radius-tr-big\">\n <BlockSearch \n @search=\"debouncedSearch\"\n placeholder=\"Enter product name\"\n class=\"bg-light mn-b-thin h-4r\"\n />\n </div> -->\n\n <div class=\"mn-b-thin mobile-only w-100 o-y-scroll scroll-hide scroll-snap-type-x-mandatory scroll-pd-regular\">\n <div class=\"gap-thin flex-nowrap flex\">\n <div\n v-for=\"category in currentCategories\"\n :key=\"category._id\"\n @click=\"selectCategory(category)\"\n class=\" flex-child-default bg-light flex t-nowrap pd-medium radius-medium cursor-pointer hover-bg-light transition-all\"\n >\n {{ category.name }}\n </div>\n </div>\n </div>\n\n\n <Feed\n :search=\"true\"\n v-model:filter=\"products.state.filter\"\n v-model:sort=\"products.state.sort\"\n :showLoadMore=\"false\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no products available.'\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: products.state\n }\"\n :options=\"{\n limit: 16,\n owner: route.name?.includes('Organization') ? route.params._id : null,\n search: route.query.search,\n lookup: ['variants','rents'],\n categories: route.params.categoryPath ? `/${route.params.categoryPath}` : null,\n filters: processedFilters,\n prices: processedPrices,\n dateStart: selectedDates?.start,\n dateEnd: selectedDates?.end\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"cols-4 pos-relative w-100 rows-1 gap-thin\"\n \n >\n <router-link \n v-for=\"product in items\" \n :to=\"route.params._id ? { name: 'Organization_Product', params: { _id: route.params._id, product: product._id } } : { name: 'Product', params: { product: product._id } }\"\n class=\"pos-relative h-100 w-100\"\n >\n <CardProduct\n :key=\"product._id\"\n :product=\"product\"\n :user=\"auth.state.access\"\n :organization=\"route.params._id\"\n :access=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n class=\"pos-relative h-100 w-100 bg-light\"\n />\n </router-link>\n </Feed>\n\n </div>\n </div>\n \n <!-- Date Picker Popup -->\n <Popup\n :isPopupOpen=\"showDatePickerPopup\"\n @close-popup=\"showDatePickerPopup = false\"\n class=\"pd-medium bg-white radius-medium\"\n style=\"min-width: 350px;\"\n >\n <h3 class=\"mn-b-medium\">Select Date Range</h3>\n \n <Calendar\n v-model:date=\"tempSelectedDates\"\n :allowRange=\"true\"\n :disablePastDates=\"true\"\n class=\"mn-b-medium\"\n />\n \n <div class=\"flex gap-small\">\n <button \n @click=\"applyDateFilter\"\n class=\"bg-main button flex-child-full\"\n >\n Apply\n </button>\n <button \n @click=\"showDatePickerPopup = false\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n </div>\n </Popup>\n</div>\n\n</template>\n\n\n<script setup=\"props\">\n // Import libs\n import { ref, computed, watch, onMounted, onUnmounted } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n // Import components\n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import FilterProducts from '@martyrs/src/modules/products/components/sections/FilterProducts.vue'\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n import BlockFilter from '@martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue'\n import Filters from '@martyrs/src/modules/globals/views/components/sections/Filters.vue'\n import Spoiler from \"@martyrs/src/components/Spoiler/Spoiler.vue\"\n import Field from \"@martyrs/src/components/Field/Field.vue\"\n import Calendar from \"@martyrs/src/components/Calendar/Calendar.vue\"\n import Popup from \"@martyrs/src/components/Popup/Popup.vue\"\n import Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\"\n\n import CardProduct from '@martyrs/src/modules/products/components/blocks/CardProduct.vue'\n\n import IconPlus from '@martyrs/src/modules/icons/navigation/IconPlus.vue'\n import IconChevronBottom from '@martyrs/src/modules/icons/navigation/IconChevronBottom.vue'\n\n // Accessing router and store\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n import * as categories from '@martyrs/src/modules/products/store/categories.js';\n import { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\n const route = useRoute()\n const router = useRouter()\n const { generateFilters, formatDate } = useGlobalMixins()\n\n // Категории и фильтры\n const currentCategories = ref([]);\n const currentCategory = ref(null);\n const categoryFilters = ref([]);\n // const selectedFilters = ref({});\n\nconst availableFilters = ref([\n {\n title: 'Price',\n value: 'price',\n type: 'range',\n minPlaceholder: 'From',\n maxPlaceholder: 'To'\n },\n {\n title: 'Delivery',\n value: 'delivery',\n type: 'checkbox',\n options: [\n { label: 'Pickup', value: 'pickup' },\n { label: 'Courier', value: 'courier' },\n { label: 'Post', value: 'post' }\n ]\n },\n {\n title: 'Status',\n value: 'status',\n type: 'radio',\n options: [\n { label: 'Available', value: 'available' },\n { label: 'Out of Stock', value: 'out_of_stock' },\n { label: 'Coming Soon', value: 'coming_soon' }\n ]\n }\n])\n\nconst selectedFilters = ref({\n price: { min: '', max: '' },\n delivery: [],\n status: null\n})\n\n \n // Переменные фильтров\n const availabilityOptions = ref([\n { label: 'Available today', value: 'today' },\n { label: 'This week', value: 'week' },\n { label: 'This month', value: 'month' }\n ]);\n \n const selectedAvailability = ref('all');\n const showDatePickerPopup = ref(false);\n const selectedPeriod = ref(null);\n const selectedDates = ref(null);\n const tempSelectedDates = ref(null);\n \n const priceRange = ref({\n min: '',\n max: ''\n });\n\n // Computed property for processed filters\n const processedFilters = computed(() => {\n return generateFilters(selectedFilters.value);\n });\n\n const processedPrices = computed(() => {\n return priceRange.value.min || priceRange.value.max ? `${priceRange.value.min || 0}-${priceRange.value.max || 999999}` : null;\n });\n\n\n const processedLookups = computed(() => {\n const lookups = ['variants'];\n if (processedDates.value) {\n lookups.push('rents');\n }\n return lookups;\n });\n\n const loadCategoryData = async () => {\n const categoryPath = route.params.categoryPath;\n \n try {\n if (categoryPath) {\n // Загружаем категорию и её прямых детей\n const result = await categories.actions.read({ \n url: `/${categoryPath}`,\n depth: 1,\n tree: false\n });\n \n if (result.length > 0) {\n currentCategory.value = result[0];\n currentCategories.value = result[0].children || [];\n categoryFilters.value = result[0].filters || [];\n \n // Initialize selected filters object\n const filtersObj = {};\n (result[0].filters || []).forEach(filter => {\n filtersObj[filter.name] = [];\n });\n selectedFilters.value = filtersObj;\n }\n } else {\n // Загружаем только корневые категории\n const result = await categories.actions.read({ \n root: true,\n tree: false\n });\n \n currentCategories.value = result;\n }\n } catch (error) {\n console.error('Error loading categories:', error);\n currentCategories.value = [];\n }\n };\n\n // Функция для выбора категории\n const selectCategory = (category) => {\n const categoryPath = category.url ? category.url.substring(1) : '';\n \n if (!categoryPath) {\n console.warn('No URL found for category:', category);\n return;\n }\n \n // Переходим к странице категории используя wildcard роут\n if (route.params._id) {\n router.push(`/organizations/${route.params._id}/products/categories/${categoryPath}`);\n } else {\n router.push(`/products/categories/${categoryPath}`);\n }\n };\n\n // Функция выбора опции доступности\n const selectAvailabilityOption = (value) => {\n selectedAvailability.value = value;\n const today = new Date();\n \n switch(value) {\n case 'today':\n selectedDates.value = {\n start: today,\n end: today\n };\n break;\n case 'week':\n const weekEnd = new Date(today);\n weekEnd.setDate(today.getDate() + 7);\n selectedDates.value = {\n start: today,\n end: weekEnd\n };\n break;\n case 'month':\n const monthEnd = new Date(today);\n monthEnd.setMonth(today.getMonth() + 1);\n selectedDates.value = {\n start: today,\n end: monthEnd\n };\n break;\n }\n };\n\n // Функция применения фильтра дат\n const applyDateFilter = () => {\n selectedDates.value = tempSelectedDates.value;\n selectedAvailability.value = 'custom';\n showDatePickerPopup.value = false;\n };\n\n globals.state.navigation_bar.actions = [{\n component: IconPlus,\n props: {\n fill: \"rgb(var(--main))\" \n },\n condition: () => auth.state.user && auth.state.user._id,\n action: () => route.params._id ? router.push({ name: 'Organization_ProductAdd', params: { _id: route.params._id} }) : router.push({ name: 'ProductAdd' })\n }],\n\n onMounted(async () => {\n await loadCategoryData();\n })\n\n onUnmounted(() => {\n globals.state.navigation_bar.actions = [];\n });\n\n</script>\n\n<style lang=\"scss\">\n\n\n</style>\n"],"names":["categories.actions","globals.state","IconPlus","auth.state"],"mappings":"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"}
@@ -5,7 +5,7 @@ const Block = require("../../../../components/Block/Block.vue.cjs");
5
5
  const Field = require("../../../../components/Field/Field.vue.cjs");
6
6
  const Button = require("../../../../components/Button/Button.vue.cjs");
7
7
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
8
- const Select = require("../../../../components/Select/Select.vue.cjs");
8
+ const Select = require("../../../../components/Select/Select.vue2.cjs");
9
9
  const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
10
10
  const IconDelete = require("../../../icons/navigation/IconDelete.vue.cjs");
11
11
  const _hoisted_1 = {
@@ -3,7 +3,7 @@ import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$5 from "../../../../components/Button/Button.vue.js";
5
5
  import _sfc_main$4 from "../../../../components/Popup/Popup.vue.js";
6
- import Select from "../../../../components/Select/Select.vue.js";
6
+ import Select from "../../../../components/Select/Select.vue2.js";
7
7
  import _sfc_main$2 from "../../../icons/navigation/IconEdit.vue.js";
8
8
  import _sfc_main$3 from "../../../icons/navigation/IconDelete.vue.js";
9
9
  const _hoisted_1 = {
@@ -9,7 +9,7 @@ const Block = require("../../../../components/Block/Block.vue.cjs");
9
9
  const Field = require("../../../../components/Field/Field.vue.cjs");
10
10
  const Button = require("../../../../components/Button/Button.vue.cjs");
11
11
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
12
- const Select = require("../../../../components/Select/Select.vue.cjs");
12
+ const Select = require("../../../../components/Select/Select.vue2.cjs");
13
13
  const Feed = require("../../../../components/Feed/Feed.vue.cjs");
14
14
  const EditImages = require("../../../../components/EditImages/EditImages.vue2.cjs");
15
15
  const EditIngredients = require("./EditIngredients.vue.cjs");
@@ -7,7 +7,7 @@ import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
7
7
  import Field from "../../../../components/Field/Field.vue.js";
8
8
  import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
9
9
  import _sfc_main$7 from "../../../../components/Popup/Popup.vue.js";
10
- import Select from "../../../../components/Select/Select.vue.js";
10
+ import Select from "../../../../components/Select/Select.vue2.js";
11
11
  import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
12
12
  import _sfc_main$9 from "../../../../components/EditImages/EditImages.vue2.js";
13
13
  import _sfc_main$8 from "./EditIngredients.vue.js";
@@ -12,18 +12,23 @@ const _sfc_main = {
12
12
  const _component_router_link = vue.resolveComponent("router-link");
13
13
  return vue.openBlock(), vue.createBlock(Carousel.default, {
14
14
  store: {
15
- read: products.actions.read
15
+ read: (options) => products.actions.read(options)
16
16
  },
17
17
  options: {
18
- limit: 10
18
+ limit: 16,
19
+ sortParam: "popularity",
20
+ owner: _ctx.$route.name?.includes("Organization") ? _ctx.$route.params._id : null,
21
+ lookup: ["variants"]
19
22
  },
20
23
  text: { title: "No products available" },
21
24
  showDots: true,
22
25
  class: "popupar_products"
23
26
  }, {
24
- default: vue.withCtx(({ item }) => [
27
+ default: vue.withCtx(({
28
+ item
29
+ }) => [
25
30
  vue.createVNode(_component_router_link, {
26
- to: { name: "Organization_Product", params: { _id: item.owner.target, product: item._id } },
31
+ to: { name: "Organization_Product", params: { _id: item.owner.target._id || item.owner.target, product: item._id } },
27
32
  class: "h-100 pos-relative block"
28
33
  }, {
29
34
  default: vue.withCtx(() => [
@@ -36,7 +41,7 @@ const _sfc_main = {
36
41
  }, 1032, ["to"])
37
42
  ]),
38
43
  _: 1
39
- }, 8, ["store"]);
44
+ }, 8, ["store", "options"]);
40
45
  };
41
46
  }
42
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsPopular.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ProductsPopular.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,18 +10,23 @@ const _sfc_main = {
10
10
  const _component_router_link = resolveComponent("router-link");
11
11
  return openBlock(), createBlock(Carousel, {
12
12
  store: {
13
- read: actions.read
13
+ read: (options) => actions.read(options)
14
14
  },
15
15
  options: {
16
- limit: 10
16
+ limit: 16,
17
+ sortParam: "popularity",
18
+ owner: _ctx.$route.name?.includes("Organization") ? _ctx.$route.params._id : null,
19
+ lookup: ["variants"]
17
20
  },
18
21
  text: { title: "No products available" },
19
22
  showDots: true,
20
23
  class: "popupar_products"
21
24
  }, {
22
- default: withCtx(({ item }) => [
25
+ default: withCtx(({
26
+ item
27
+ }) => [
23
28
  createVNode(_component_router_link, {
24
- to: { name: "Organization_Product", params: { _id: item.owner.target, product: item._id } },
29
+ to: { name: "Organization_Product", params: { _id: item.owner.target._id || item.owner.target, product: item._id } },
25
30
  class: "h-100 pos-relative block"
26
31
  }, {
27
32
  default: withCtx(() => [
@@ -34,7 +39,7 @@ const _sfc_main = {
34
39
  }, 1032, ["to"])
35
40
  ]),
36
41
  _: 1
37
- }, 8, ["store"]);
42
+ }, 8, ["store", "options"]);
38
43
  };
39
44
  }
40
45
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsPopular.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ProductsPopular.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -8,7 +8,7 @@ const CardProduct = require("../blocks/CardProduct.vue.cjs");
8
8
  const IconProducts = require("../../../icons/entities/IconProducts.vue.cjs");
9
9
  const IconShopcartAdd = require("../../../icons/actions/IconShopcartAdd.vue.cjs");
10
10
  const shopcart = require("../../../orders/store/shopcart.cjs");
11
- const _hoisted_1 = { class: "recommended-products cols-4 mobile:cols-2 gap-thin" };
11
+ const _hoisted_1 = { class: "recommended-products cols-4 rows-auto-1fr mobile:cols-2 gap-thin" };
12
12
  const _hoisted_2 = { class: "flex-center flex flex-column pd-small radius-small br-solid br-1px br-light" };
13
13
  const _hoisted_3 = { class: "mn-b-thin i-extra pd-small bg-light radius-extra" };
14
14
  const _hoisted_4 = { class: "mn-b-medium h3 t-medium" };
@@ -133,7 +133,10 @@ const _sfc_main = {
133
133
  _cache[3] || (_cache[3] = vue.createElementVNode("p", { class: "mn-b-small" }, "Total price:", -1)),
134
134
  vue.createElementVNode("p", _hoisted_4, "$" + vue.toDisplayString(totalPrice.value), 1),
135
135
  vue.createVNode(Button.default, {
136
+ disabled: selectedProducts.value.length < 1,
136
137
  class: "bg-main gap-micro",
138
+ showSuccess: false,
139
+ showLoader: false,
137
140
  submit: canAddToCart.value ? addSelectedToCart : void 0
138
141
  }, {
139
142
  default: vue.withCtx(() => [
@@ -141,7 +144,7 @@ const _sfc_main = {
141
144
  _cache[2] || (_cache[2] = vue.createElementVNode("span", null, "Add to Cart", -1))
142
145
  ]),
143
146
  _: 1
144
- }, 8, ["submit"])
147
+ }, 8, ["disabled", "submit"])
145
148
  ])
146
149
  ])
147
150
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsRecommended.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/ProductsRecommended.vue"],"sourcesContent":["<script setup>\nimport { ref, computed, getCurrentInstance } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue'\n\nimport CardProduct from '@martyrs/src/modules/products/components/blocks/CardProduct.vue'\n\nimport IconShopcart from '@martyrs/src/modules/icons/entities/IconShopcart.vue';\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue';\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\n\n// Props\nconst props = defineProps({\n products: {\n type: Array,\n required: true,\n default: () => []\n }\n})\n\n// Состояние выбранных товаров - массив id товаров с вариантами\nconst selectedProducts = ref(props.products.filter(p => p.variants?.length > 0).map(p => p._id))\n\n// Состояние для хранения выбранных дат для товаров типа rent\nconst selectedDates = ref(null)\n\n// Вычисляемая общая цена\nconst totalPrice = computed(() => {\n return props.products\n .filter(p => selectedProducts.value.includes(p._id))\n .reduce((sum, p) => {\n const price = p.variants?.[0]?.price || 0\n return sum + price\n }, 0)\n .toFixed(2)\n})\n\n// Проверка возможности добавления в корзину\nconst canAddToCart = computed(() => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n return selected.length > 0 && selected.some(p => p.variants?.length > 0)\n})\n\nconst handleProductClick = (product) => {\n if (product?._id && product?.owner?.target) {\n router.push({\n name: 'Organization_Product', \n params: { \n _id: product.owner.target, \n product: product._id \n } \n })\n }\n}\n\n// Добавление выбранных товаров в корзину\nconst addSelectedToCart = async () => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n \n if (selected.length === 0) return\n \n try {\n // Берем организацию первого товара\n const firstProduct = selected[0]\n const organizationId = firstProduct.owner?.target?._id || firstProduct.owner?.target\n \n // Проверяем, что в корзине товары той же организации\n if (shopcart.state.organization && shopcart.state.organization !== organizationId) {\n // Можно добавить подтверждение замены корзины\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) return\n \n shopcart.state.positions = []\n }\n \n shopcart.state.organization = organizationId\n \n // Проверяем, есть ли товары типа rent среди выбранных\n const rentProducts = selected.filter(p => p.listing === 'rent')\n let rentalDates = null\n \n // Если есть товары типа rent, получаем даты для первого товара\n if (rentProducts.length > 0) {\n const firstRentProduct = rentProducts[0]\n const firstVariant = firstRentProduct.variants?.[0]\n \n if (firstVariant) {\n rentalDates = await proxy.$dateSelector(\n firstRentProduct._id,\n firstVariant._id,\n 1,\n firstVariant.price || firstRentProduct.price\n )\n \n if (!rentalDates) return // Пользователь отменил выбор дат\n }\n }\n \n // Добавляем каждый выбранный товар\n for (const product of selected) {\n // Проверяем наличие варианта\n if (!product.variants || product.variants.length === 0) continue\n \n // Используем первый вариант по умолчанию\n const variant = product.variants[0]\n \n // Для товаров типа rent используем полученные даты\n const datesToUse = product.listing === 'rent' ? rentalDates : null\n \n await shopcart.actions.addProductToCart(\n product, \n variant,\n organizationId,\n datesToUse,\n 1 // quantity\n )\n }\n } catch (error) {\n console.error('Error adding to cart:', error)\n }\n}\n</script>\n\n<template>\n <div>\n <h3 class=\"mn-b-small\">Frequently Bought Together</h3>\n <div class=\"recommended-products cols-4 mobile:cols-2 gap-thin\">\n \n <CardProduct \n v-for=\"(product, index) in products\" \n :key=\"product?._id || index\"\n :product=\"product\"\n class=\"h-100 bg-light\"\n @click=\"handleProductClick(product)\"\n :showAddToCart=\"false\"\n >\n <Checkbox\n v-model:radio=\"selectedProducts\"\n :value=\"product._id\"\n mode=\"checkbox\"\n :validation=\"!product.variants || product.variants.length === 0\"\n class=\"pos-r-small pos-t-small pos-absolute\"\n @click.stop\n />\n </CardProduct>\n\n <div class=\"flex-center flex flex-column pd-small radius-small br-solid br-1px br-light\">\n <div class=\"mn-b-thin i-extra pd-small bg-light radius-extra\">\n <IconProducts class=\"i-big\"/>\n </div>\n <p class=\"mn-b-small\">Total price:</p>\n <p class=\"mn-b-medium h3 t-medium\">${{ totalPrice }}</p>\n <Button \n class=\"bg-main gap-micro\"\n :submit=\"canAddToCart ? addSelectedToCart : undefined\"\n >\n <IconShopcartAdd class=\"i-semi\"/>\n <span>Add to Cart</span>\n </Button>\n </div>\n </div>\n </div>\n</template>"],"names":["useRouter","getCurrentInstance","ref","computed","shopcart.state","shopcart.actions"],"mappings":"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"}
1
+ {"version":3,"file":"ProductsRecommended.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/ProductsRecommended.vue"],"sourcesContent":["<script setup>\nimport { ref, computed, getCurrentInstance } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue'\n\nimport CardProduct from '@martyrs/src/modules/products/components/blocks/CardProduct.vue'\n\nimport IconShopcart from '@martyrs/src/modules/icons/entities/IconShopcart.vue';\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue';\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\n\n// Props\nconst props = defineProps({\n products: {\n type: Array,\n required: true,\n default: () => []\n }\n})\n\n// Состояние выбранных товаров - массив id товаров с вариантами\nconst selectedProducts = ref(props.products.filter(p => p.variants?.length > 0).map(p => p._id))\n\n// Состояние для хранения выбранных дат для товаров типа rent\nconst selectedDates = ref(null)\n\n// Вычисляемая общая цена\nconst totalPrice = computed(() => {\n return props.products\n .filter(p => selectedProducts.value.includes(p._id))\n .reduce((sum, p) => {\n const price = p.variants?.[0]?.price || 0\n return sum + price\n }, 0)\n .toFixed(2)\n})\n\n// Проверка возможности добавления в корзину\nconst canAddToCart = computed(() => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n return selected.length > 0 && selected.some(p => p.variants?.length > 0)\n})\n\nconst handleProductClick = (product) => {\n if (product?._id && product?.owner?.target) {\n router.push({\n name: 'Organization_Product', \n params: { \n _id: product.owner.target, \n product: product._id \n } \n })\n }\n}\n\n// Добавление выбранных товаров в корзину\nconst addSelectedToCart = async () => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n \n if (selected.length === 0) return\n \n try {\n // Берем организацию первого товара\n const firstProduct = selected[0]\n const organizationId = firstProduct.owner?.target?._id || firstProduct.owner?.target\n \n // Проверяем, что в корзине товары той же организации\n if (shopcart.state.organization && shopcart.state.organization !== organizationId) {\n // Можно добавить подтверждение замены корзины\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) return\n \n shopcart.state.positions = []\n }\n \n shopcart.state.organization = organizationId\n \n // Проверяем, есть ли товары типа rent среди выбранных\n const rentProducts = selected.filter(p => p.listing === 'rent')\n let rentalDates = null\n \n // Если есть товары типа rent, получаем даты для первого товара\n if (rentProducts.length > 0) {\n const firstRentProduct = rentProducts[0]\n const firstVariant = firstRentProduct.variants?.[0]\n \n if (firstVariant) {\n rentalDates = await proxy.$dateSelector(\n firstRentProduct._id,\n firstVariant._id,\n 1,\n firstVariant.price || firstRentProduct.price\n )\n \n if (!rentalDates) return // Пользователь отменил выбор дат\n }\n }\n \n // Добавляем каждый выбранный товар\n for (const product of selected) {\n // Проверяем наличие варианта\n if (!product.variants || product.variants.length === 0) continue\n \n // Используем первый вариант по умолчанию\n const variant = product.variants[0]\n \n // Для товаров типа rent используем полученные даты\n const datesToUse = product.listing === 'rent' ? rentalDates : null\n \n await shopcart.actions.addProductToCart(\n product, \n variant,\n organizationId,\n datesToUse,\n 1 // quantity\n )\n }\n } catch (error) {\n console.error('Error adding to cart:', error)\n }\n}\n</script>\n\n<template>\n <div>\n <h3 class=\"mn-b-small\">Frequently Bought Together</h3>\n <div class=\"recommended-products cols-4 rows-auto-1fr mobile:cols-2 gap-thin\">\n \n <CardProduct \n v-for=\"(product, index) in products\" \n :key=\"product?._id || index\"\n :product=\"product\"\n class=\"h-100 bg-light\"\n @click=\"handleProductClick(product)\"\n :showAddToCart=\"false\"\n >\n <Checkbox\n v-model:radio=\"selectedProducts\"\n :value=\"product._id\"\n mode=\"checkbox\"\n :validation=\"!product.variants || product.variants.length === 0\"\n class=\"pos-r-small pos-t-small pos-absolute\"\n @click.stop\n />\n </CardProduct>\n\n <div class=\"flex-center flex flex-column pd-small radius-small br-solid br-1px br-light\">\n <div class=\"mn-b-thin i-extra pd-small bg-light radius-extra\">\n <IconProducts class=\"i-big\"/>\n </div>\n <p class=\"mn-b-small\">Total price:</p>\n <p class=\"mn-b-medium h3 t-medium\">${{ totalPrice }}</p>\n <Button \n :disabled=\"selectedProducts.length < 1\"\n class=\"bg-main gap-micro\"\n :showSuccess=\"false\"\n :showLoader=\"false\"\n :submit=\"canAddToCart ? addSelectedToCart : undefined\"\n >\n <IconShopcartAdd class=\"i-semi\"/>\n <span>Add to Cart</span>\n </Button>\n </div>\n </div>\n </div>\n</template>"],"names":["useRouter","getCurrentInstance","ref","computed","shopcart.state","shopcart.actions"],"mappings":"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"}
@@ -6,7 +6,7 @@ import _sfc_main$1 from "../blocks/CardProduct.vue.js";
6
6
  import _sfc_main$3 from "../../../icons/entities/IconProducts.vue.js";
7
7
  import _sfc_main$5 from "../../../icons/actions/IconShopcartAdd.vue.js";
8
8
  import { state, actions } from "../../../orders/store/shopcart.js";
9
- const _hoisted_1 = { class: "recommended-products cols-4 mobile:cols-2 gap-thin" };
9
+ const _hoisted_1 = { class: "recommended-products cols-4 rows-auto-1fr mobile:cols-2 gap-thin" };
10
10
  const _hoisted_2 = { class: "flex-center flex flex-column pd-small radius-small br-solid br-1px br-light" };
11
11
  const _hoisted_3 = { class: "mn-b-thin i-extra pd-small bg-light radius-extra" };
12
12
  const _hoisted_4 = { class: "mn-b-medium h3 t-medium" };
@@ -131,7 +131,10 @@ const _sfc_main = {
131
131
  _cache[3] || (_cache[3] = createElementVNode("p", { class: "mn-b-small" }, "Total price:", -1)),
132
132
  createElementVNode("p", _hoisted_4, "$" + toDisplayString(totalPrice.value), 1),
133
133
  createVNode(_sfc_main$4, {
134
+ disabled: selectedProducts.value.length < 1,
134
135
  class: "bg-main gap-micro",
136
+ showSuccess: false,
137
+ showLoader: false,
135
138
  submit: canAddToCart.value ? addSelectedToCart : void 0
136
139
  }, {
137
140
  default: withCtx(() => [
@@ -139,7 +142,7 @@ const _sfc_main = {
139
142
  _cache[2] || (_cache[2] = createElementVNode("span", null, "Add to Cart", -1))
140
143
  ]),
141
144
  _: 1
142
- }, 8, ["submit"])
145
+ }, 8, ["disabled", "submit"])
143
146
  ])
144
147
  ])
145
148
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsRecommended.vue.js","sources":["../../../../../../../src/modules/products/components/sections/ProductsRecommended.vue"],"sourcesContent":["<script setup>\nimport { ref, computed, getCurrentInstance } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue'\n\nimport CardProduct from '@martyrs/src/modules/products/components/blocks/CardProduct.vue'\n\nimport IconShopcart from '@martyrs/src/modules/icons/entities/IconShopcart.vue';\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue';\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\n\n// Props\nconst props = defineProps({\n products: {\n type: Array,\n required: true,\n default: () => []\n }\n})\n\n// Состояние выбранных товаров - массив id товаров с вариантами\nconst selectedProducts = ref(props.products.filter(p => p.variants?.length > 0).map(p => p._id))\n\n// Состояние для хранения выбранных дат для товаров типа rent\nconst selectedDates = ref(null)\n\n// Вычисляемая общая цена\nconst totalPrice = computed(() => {\n return props.products\n .filter(p => selectedProducts.value.includes(p._id))\n .reduce((sum, p) => {\n const price = p.variants?.[0]?.price || 0\n return sum + price\n }, 0)\n .toFixed(2)\n})\n\n// Проверка возможности добавления в корзину\nconst canAddToCart = computed(() => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n return selected.length > 0 && selected.some(p => p.variants?.length > 0)\n})\n\nconst handleProductClick = (product) => {\n if (product?._id && product?.owner?.target) {\n router.push({\n name: 'Organization_Product', \n params: { \n _id: product.owner.target, \n product: product._id \n } \n })\n }\n}\n\n// Добавление выбранных товаров в корзину\nconst addSelectedToCart = async () => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n \n if (selected.length === 0) return\n \n try {\n // Берем организацию первого товара\n const firstProduct = selected[0]\n const organizationId = firstProduct.owner?.target?._id || firstProduct.owner?.target\n \n // Проверяем, что в корзине товары той же организации\n if (shopcart.state.organization && shopcart.state.organization !== organizationId) {\n // Можно добавить подтверждение замены корзины\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) return\n \n shopcart.state.positions = []\n }\n \n shopcart.state.organization = organizationId\n \n // Проверяем, есть ли товары типа rent среди выбранных\n const rentProducts = selected.filter(p => p.listing === 'rent')\n let rentalDates = null\n \n // Если есть товары типа rent, получаем даты для первого товара\n if (rentProducts.length > 0) {\n const firstRentProduct = rentProducts[0]\n const firstVariant = firstRentProduct.variants?.[0]\n \n if (firstVariant) {\n rentalDates = await proxy.$dateSelector(\n firstRentProduct._id,\n firstVariant._id,\n 1,\n firstVariant.price || firstRentProduct.price\n )\n \n if (!rentalDates) return // Пользователь отменил выбор дат\n }\n }\n \n // Добавляем каждый выбранный товар\n for (const product of selected) {\n // Проверяем наличие варианта\n if (!product.variants || product.variants.length === 0) continue\n \n // Используем первый вариант по умолчанию\n const variant = product.variants[0]\n \n // Для товаров типа rent используем полученные даты\n const datesToUse = product.listing === 'rent' ? rentalDates : null\n \n await shopcart.actions.addProductToCart(\n product, \n variant,\n organizationId,\n datesToUse,\n 1 // quantity\n )\n }\n } catch (error) {\n console.error('Error adding to cart:', error)\n }\n}\n</script>\n\n<template>\n <div>\n <h3 class=\"mn-b-small\">Frequently Bought Together</h3>\n <div class=\"recommended-products cols-4 mobile:cols-2 gap-thin\">\n \n <CardProduct \n v-for=\"(product, index) in products\" \n :key=\"product?._id || index\"\n :product=\"product\"\n class=\"h-100 bg-light\"\n @click=\"handleProductClick(product)\"\n :showAddToCart=\"false\"\n >\n <Checkbox\n v-model:radio=\"selectedProducts\"\n :value=\"product._id\"\n mode=\"checkbox\"\n :validation=\"!product.variants || product.variants.length === 0\"\n class=\"pos-r-small pos-t-small pos-absolute\"\n @click.stop\n />\n </CardProduct>\n\n <div class=\"flex-center flex flex-column pd-small radius-small br-solid br-1px br-light\">\n <div class=\"mn-b-thin i-extra pd-small bg-light radius-extra\">\n <IconProducts class=\"i-big\"/>\n </div>\n <p class=\"mn-b-small\">Total price:</p>\n <p class=\"mn-b-medium h3 t-medium\">${{ totalPrice }}</p>\n <Button \n class=\"bg-main gap-micro\"\n :submit=\"canAddToCart ? addSelectedToCart : undefined\"\n >\n <IconShopcartAdd class=\"i-semi\"/>\n <span>Add to Cart</span>\n </Button>\n </div>\n </div>\n </div>\n</template>"],"names":["shopcart.state","shopcart.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAeA,UAAM,SAAS,UAAS;AACxB,UAAM,EAAE,MAAK,IAAK,mBAAkB;AAGpC,UAAM,QAAQ;AASd,UAAM,mBAAmB,IAAI,MAAM,SAAS,OAAO,OAAK,EAAE,UAAU,SAAS,CAAC,EAAE,IAAI,OAAK,EAAE,GAAG,CAAC;AAGzE,QAAI,IAAI;AAG9B,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,MAAM,SACV,OAAO,OAAK,iBAAiB,MAAM,SAAS,EAAE,GAAG,CAAC,EAClD,OAAO,CAAC,KAAK,MAAM;AAClB,cAAM,QAAQ,EAAE,WAAW,CAAC,GAAG,SAAS;AACxC,eAAO,MAAM;AAAA,MACf,GAAG,CAAC,EACH,QAAQ,CAAC;AAAA,IACd,CAAC;AAGD,UAAM,eAAe,SAAS,MAAM;AAClC,YAAM,WAAW,MAAM,SAAS,OAAO,OAAK,iBAAiB,MAAM,SAAS,EAAE,GAAG,CAAC;AAClF,aAAO,SAAS,SAAS,KAAK,SAAS,KAAK,OAAK,EAAE,UAAU,SAAS,CAAC;AAAA,IACzE,CAAC;AAED,UAAM,qBAAqB,CAAC,YAAY;AACtC,UAAI,SAAS,OAAO,SAAS,OAAO,QAAQ;AAC1C,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,KAAK,QAAQ,MAAM;AAAA,YACnB,SAAS,QAAQ;AAAA,UACzB;AAAA,QACA,CAAK;AAAA,MACH;AAAA,IACF;AAGA,UAAM,oBAAoB,YAAY;AACpC,YAAM,WAAW,MAAM,SAAS,OAAO,OAAK,iBAAiB,MAAM,SAAS,EAAE,GAAG,CAAC;AAElF,UAAI,SAAS,WAAW,EAAG;AAE3B,UAAI;AAEF,cAAM,eAAe,SAAS,CAAC;AAC/B,cAAM,iBAAiB,aAAa,OAAO,QAAQ,OAAO,aAAa,OAAO;AAG9E,YAAIA,MAAe,gBAAgBA,MAAe,iBAAiB,gBAAgB;AAEjF,gBAAM,SAAS,MAAM,MAAM,OAAO;AAAA,YAChC,OAAO;AAAA,YACP,SAAS;AAAA,YACT,SAAS;AAAA,cACP,EAAE,OAAO,UAAU,OAAO,MAAK;AAAA,cAC/B,EAAE,OAAO,WAAW,OAAO,KAAI;AAAA,YACzC;AAAA,UACA,CAAO;AAED,cAAI,CAAC,OAAQ;AAEbA,gBAAe,YAAY,CAAA;AAAA,QAC7B;AAEAA,cAAe,eAAe;AAG9B,cAAM,eAAe,SAAS,OAAO,OAAK,EAAE,YAAY,MAAM;AAC9D,YAAI,cAAc;AAGlB,YAAI,aAAa,SAAS,GAAG;AAC3B,gBAAM,mBAAmB,aAAa,CAAC;AACvC,gBAAM,eAAe,iBAAiB,WAAW,CAAC;AAElD,cAAI,cAAc;AAChB,0BAAc,MAAM,MAAM;AAAA,cACxB,iBAAiB;AAAA,cACjB,aAAa;AAAA,cACb;AAAA,cACA,aAAa,SAAS,iBAAiB;AAAA,YACjD;AAEQ,gBAAI,CAAC,YAAa;AAAA,UACpB;AAAA,QACF;AAGA,mBAAW,WAAW,UAAU;AAE9B,cAAI,CAAC,QAAQ,YAAY,QAAQ,SAAS,WAAW,EAAG;AAGxD,gBAAM,UAAU,QAAQ,SAAS,CAAC;AAGlC,gBAAM,aAAa,QAAQ,YAAY,SAAS,cAAc;AAE9D,gBAAMC,QAAiB;AAAA,YACrB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UACR;AAAA,QACI;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,yBAAyB,KAAK;AAAA,MAC9C;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ProductsRecommended.vue.js","sources":["../../../../../../../src/modules/products/components/sections/ProductsRecommended.vue"],"sourcesContent":["<script setup>\nimport { ref, computed, getCurrentInstance } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue'\n\nimport CardProduct from '@martyrs/src/modules/products/components/blocks/CardProduct.vue'\n\nimport IconShopcart from '@martyrs/src/modules/icons/entities/IconShopcart.vue';\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue';\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\n\n// Props\nconst props = defineProps({\n products: {\n type: Array,\n required: true,\n default: () => []\n }\n})\n\n// Состояние выбранных товаров - массив id товаров с вариантами\nconst selectedProducts = ref(props.products.filter(p => p.variants?.length > 0).map(p => p._id))\n\n// Состояние для хранения выбранных дат для товаров типа rent\nconst selectedDates = ref(null)\n\n// Вычисляемая общая цена\nconst totalPrice = computed(() => {\n return props.products\n .filter(p => selectedProducts.value.includes(p._id))\n .reduce((sum, p) => {\n const price = p.variants?.[0]?.price || 0\n return sum + price\n }, 0)\n .toFixed(2)\n})\n\n// Проверка возможности добавления в корзину\nconst canAddToCart = computed(() => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n return selected.length > 0 && selected.some(p => p.variants?.length > 0)\n})\n\nconst handleProductClick = (product) => {\n if (product?._id && product?.owner?.target) {\n router.push({\n name: 'Organization_Product', \n params: { \n _id: product.owner.target, \n product: product._id \n } \n })\n }\n}\n\n// Добавление выбранных товаров в корзину\nconst addSelectedToCart = async () => {\n const selected = props.products.filter(p => selectedProducts.value.includes(p._id))\n \n if (selected.length === 0) return\n \n try {\n // Берем организацию первого товара\n const firstProduct = selected[0]\n const organizationId = firstProduct.owner?.target?._id || firstProduct.owner?.target\n \n // Проверяем, что в корзине товары той же организации\n if (shopcart.state.organization && shopcart.state.organization !== organizationId) {\n // Можно добавить подтверждение замены корзины\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) return\n \n shopcart.state.positions = []\n }\n \n shopcart.state.organization = organizationId\n \n // Проверяем, есть ли товары типа rent среди выбранных\n const rentProducts = selected.filter(p => p.listing === 'rent')\n let rentalDates = null\n \n // Если есть товары типа rent, получаем даты для первого товара\n if (rentProducts.length > 0) {\n const firstRentProduct = rentProducts[0]\n const firstVariant = firstRentProduct.variants?.[0]\n \n if (firstVariant) {\n rentalDates = await proxy.$dateSelector(\n firstRentProduct._id,\n firstVariant._id,\n 1,\n firstVariant.price || firstRentProduct.price\n )\n \n if (!rentalDates) return // Пользователь отменил выбор дат\n }\n }\n \n // Добавляем каждый выбранный товар\n for (const product of selected) {\n // Проверяем наличие варианта\n if (!product.variants || product.variants.length === 0) continue\n \n // Используем первый вариант по умолчанию\n const variant = product.variants[0]\n \n // Для товаров типа rent используем полученные даты\n const datesToUse = product.listing === 'rent' ? rentalDates : null\n \n await shopcart.actions.addProductToCart(\n product, \n variant,\n organizationId,\n datesToUse,\n 1 // quantity\n )\n }\n } catch (error) {\n console.error('Error adding to cart:', error)\n }\n}\n</script>\n\n<template>\n <div>\n <h3 class=\"mn-b-small\">Frequently Bought Together</h3>\n <div class=\"recommended-products cols-4 rows-auto-1fr mobile:cols-2 gap-thin\">\n \n <CardProduct \n v-for=\"(product, index) in products\" \n :key=\"product?._id || index\"\n :product=\"product\"\n class=\"h-100 bg-light\"\n @click=\"handleProductClick(product)\"\n :showAddToCart=\"false\"\n >\n <Checkbox\n v-model:radio=\"selectedProducts\"\n :value=\"product._id\"\n mode=\"checkbox\"\n :validation=\"!product.variants || product.variants.length === 0\"\n class=\"pos-r-small pos-t-small pos-absolute\"\n @click.stop\n />\n </CardProduct>\n\n <div class=\"flex-center flex flex-column pd-small radius-small br-solid br-1px br-light\">\n <div class=\"mn-b-thin i-extra pd-small bg-light radius-extra\">\n <IconProducts class=\"i-big\"/>\n </div>\n <p class=\"mn-b-small\">Total price:</p>\n <p class=\"mn-b-medium h3 t-medium\">${{ totalPrice }}</p>\n <Button \n :disabled=\"selectedProducts.length < 1\"\n class=\"bg-main gap-micro\"\n :showSuccess=\"false\"\n :showLoader=\"false\"\n :submit=\"canAddToCart ? addSelectedToCart : undefined\"\n >\n <IconShopcartAdd class=\"i-semi\"/>\n <span>Add to Cart</span>\n </Button>\n </div>\n </div>\n </div>\n</template>"],"names":["shopcart.state","shopcart.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAeA,UAAM,SAAS,UAAS;AACxB,UAAM,EAAE,MAAK,IAAK,mBAAkB;AAGpC,UAAM,QAAQ;AASd,UAAM,mBAAmB,IAAI,MAAM,SAAS,OAAO,OAAK,EAAE,UAAU,SAAS,CAAC,EAAE,IAAI,OAAK,EAAE,GAAG,CAAC;AAGzE,QAAI,IAAI;AAG9B,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,MAAM,SACV,OAAO,OAAK,iBAAiB,MAAM,SAAS,EAAE,GAAG,CAAC,EAClD,OAAO,CAAC,KAAK,MAAM;AAClB,cAAM,QAAQ,EAAE,WAAW,CAAC,GAAG,SAAS;AACxC,eAAO,MAAM;AAAA,MACf,GAAG,CAAC,EACH,QAAQ,CAAC;AAAA,IACd,CAAC;AAGD,UAAM,eAAe,SAAS,MAAM;AAClC,YAAM,WAAW,MAAM,SAAS,OAAO,OAAK,iBAAiB,MAAM,SAAS,EAAE,GAAG,CAAC;AAClF,aAAO,SAAS,SAAS,KAAK,SAAS,KAAK,OAAK,EAAE,UAAU,SAAS,CAAC;AAAA,IACzE,CAAC;AAED,UAAM,qBAAqB,CAAC,YAAY;AACtC,UAAI,SAAS,OAAO,SAAS,OAAO,QAAQ;AAC1C,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,KAAK,QAAQ,MAAM;AAAA,YACnB,SAAS,QAAQ;AAAA,UACzB;AAAA,QACA,CAAK;AAAA,MACH;AAAA,IACF;AAGA,UAAM,oBAAoB,YAAY;AACpC,YAAM,WAAW,MAAM,SAAS,OAAO,OAAK,iBAAiB,MAAM,SAAS,EAAE,GAAG,CAAC;AAElF,UAAI,SAAS,WAAW,EAAG;AAE3B,UAAI;AAEF,cAAM,eAAe,SAAS,CAAC;AAC/B,cAAM,iBAAiB,aAAa,OAAO,QAAQ,OAAO,aAAa,OAAO;AAG9E,YAAIA,MAAe,gBAAgBA,MAAe,iBAAiB,gBAAgB;AAEjF,gBAAM,SAAS,MAAM,MAAM,OAAO;AAAA,YAChC,OAAO;AAAA,YACP,SAAS;AAAA,YACT,SAAS;AAAA,cACP,EAAE,OAAO,UAAU,OAAO,MAAK;AAAA,cAC/B,EAAE,OAAO,WAAW,OAAO,KAAI;AAAA,YACzC;AAAA,UACA,CAAO;AAED,cAAI,CAAC,OAAQ;AAEbA,gBAAe,YAAY,CAAA;AAAA,QAC7B;AAEAA,cAAe,eAAe;AAG9B,cAAM,eAAe,SAAS,OAAO,OAAK,EAAE,YAAY,MAAM;AAC9D,YAAI,cAAc;AAGlB,YAAI,aAAa,SAAS,GAAG;AAC3B,gBAAM,mBAAmB,aAAa,CAAC;AACvC,gBAAM,eAAe,iBAAiB,WAAW,CAAC;AAElD,cAAI,cAAc;AAChB,0BAAc,MAAM,MAAM;AAAA,cACxB,iBAAiB;AAAA,cACjB,aAAa;AAAA,cACb;AAAA,cACA,aAAa,SAAS,iBAAiB;AAAA,YACjD;AAEQ,gBAAI,CAAC,YAAa;AAAA,UACpB;AAAA,QACF;AAGA,mBAAW,WAAW,UAAU;AAE9B,cAAI,CAAC,QAAQ,YAAY,QAAQ,SAAS,WAAW,EAAG;AAGxD,gBAAM,UAAU,QAAQ,SAAS,CAAC;AAGlC,gBAAM,aAAa,QAAQ,YAAY,SAAS,cAAc;AAE9D,gBAAMC,QAAiB;AAAA,YACrB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UACR;AAAA,QACI;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,yBAAyB,KAAK;AAAA,MAC9C;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,7 +4,7 @@ const vue = require("vue");
4
4
  const dayjs_min = require("../../../../../../../../_virtual/dayjs.min.cjs");
5
5
  const Tab = require("../../../../../../components/Tab/Tab.vue2.cjs");
6
6
  const Button = require("../../../../../../components/Button/Button.vue.cjs");
7
- const Dropdown = require("../../../../../../components/Dropdown/Dropdown.vue2.cjs");
7
+ const Dropdown = require("../../../../../../components/Dropdown/Dropdown.vue.cjs");
8
8
  const Calendar = require("../../../../../../components/Calendar/Calendar.vue2.cjs");
9
9
  const DateLabel = require("./DateLabel.vue.cjs");
10
10
  const IconChevronRight = require("../../../../../icons/navigation/IconChevronRight.vue.cjs");
@@ -2,7 +2,7 @@ import { computed, ref, watch, createElementBlock, openBlock, createElementVNode
2
2
  import dayjs from "../../../../../../../../_virtual/dayjs.min.js";
3
3
  import _sfc_main$2 from "../../../../../../components/Tab/Tab.vue2.js";
4
4
  import _sfc_main$3 from "../../../../../../components/Button/Button.vue.js";
5
- import _sfc_main$4 from "../../../../../../components/Dropdown/Dropdown.vue2.js";
5
+ import _sfc_main$4 from "../../../../../../components/Dropdown/Dropdown.vue.js";
6
6
  import Calendar from "../../../../../../components/Calendar/Calendar.vue2.js";
7
7
  import _sfc_main$1 from "./DateLabel.vue.js";
8
8
  import IconNext from "../../../../../icons/navigation/IconChevronRight.vue.js";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
5
5
  const Button = require("../../../../components/Button/Button.vue.cjs");
6
- const Select = require("../../../../components/Select/Select.vue.cjs");
6
+ const Select = require("../../../../components/Select/Select.vue2.cjs");
7
7
  const reports = require("../../store/reports.cjs");
8
8
  const _sfc_main = {
9
9
  __name: "FormReport",
@@ -1,7 +1,7 @@
1
1
  import { reactive, ref, createElementBlock, openBlock, renderSlot, createVNode, withCtx, createElementVNode, createTextVNode } from "vue";
2
2
  import _sfc_main$1 from "../../../../components/Popup/Popup.vue.js";
3
3
  import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
4
- import Select from "../../../../components/Select/Select.vue.js";
4
+ import Select from "../../../../components/Select/Select.vue2.js";
5
5
  import { actions } from "../../store/reports.js";
6
6
  const _sfc_main = {
7
7
  __name: "FormReport",
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
5
5
  const IconCheckmark = require("../../../icons/navigation/IconCheckmark.vue.cjs");
6
- const Chips = require("../../../../components/Chips/Chips.vue2.cjs");
6
+ const Chips = require("../../../../components/Chips/Chips.vue.cjs");
7
7
  const Map = require("../../../../components/Map/Map.vue.cjs");
8
8
  ;/* empty css */
9
9
  const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
@@ -1,7 +1,7 @@
1
1
  import { resolveComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, createVNode, createBlock, withCtx, toDisplayString } from "vue";
2
2
  import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
3
3
  import _sfc_main$2 from "../../../icons/navigation/IconCheckmark.vue.js";
4
- import _sfc_main$3 from "../../../../components/Chips/Chips.vue2.js";
4
+ import _sfc_main$3 from "../../../../components/Chips/Chips.vue.js";
5
5
  import Map from "../../../../components/Map/Map.vue.js";
6
6
  /* empty css */
7
7
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  ;/* empty css */
5
5
  const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
6
- ;/* empty css */
6
+ ;/* empty css */
7
7
  ;/* empty css */
8
8
  const _hoisted_1 = { class: "br-grey-transp-25 radius-small mn-b-small" };
9
9
  const _hoisted_2 = {
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, resolveComponent, createElementBlock, openBlock, createElementVNode, createCommentVNode, createBlock, toDisplayString } from "vue";
2
2
  /* empty css */
3
3
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
4
- /* empty css */
4
+ /* empty css */
5
5
  /* empty css */
6
6
  const _hoisted_1 = { class: "br-grey-transp-25 radius-small mn-b-small" };
7
7
  const _hoisted_2 = {
@@ -6,7 +6,7 @@ const vueI18n = require("vue-i18n");
6
6
  ;/* empty css */
7
7
  ;/* empty css */
8
8
  ;/* empty css */
9
- ;/* empty css */
9
+ ;/* empty css */
10
10
  const globals = require("../../../globals/views/store/globals.cjs");
11
11
  const categories = require("../../../products/store/categories.cjs");
12
12
  const marketplace = require("../../../marketplace/views/store/marketplace.cjs");
@@ -4,7 +4,7 @@ import { useI18n } from "vue-i18n";
4
4
  /* empty css */
5
5
  /* empty css */
6
6
  /* empty css */
7
- /* empty css */
7
+ /* empty css */
8
8
  import { state as state$1 } from "../../../globals/views/store/globals.js";
9
9
  import { actions, state as state$2 } from "../../../products/store/categories.js";
10
10
  import { state } from "../../../marketplace/views/store/marketplace.js";
@@ -6,7 +6,7 @@ const Block = require("../../../../components/Block/Block.vue.cjs");
6
6
  const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
7
7
  ;/* empty css */
8
8
  const Field = require("../../../../components/Field/Field.vue.cjs");
9
- const Select = require("../../../../components/Select/Select.vue.cjs");
9
+ const Select = require("../../../../components/Select/Select.vue2.cjs");
10
10
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
11
11
  const Address = require("../../../../components/Address/Address.vue2.cjs");
12
12
  const LocationMarker = require("../../../../components/LocationMarker/LocationMarker.vue2.cjs");
@@ -4,7 +4,7 @@ import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
4
4
  import _sfc_main$3 from "../../../../components/UploadImage/UploadImage.vue.js";
5
5
  /* empty css */
6
6
  import Field from "../../../../components/Field/Field.vue.js";
7
- import Select from "../../../../components/Select/Select.vue.js";
7
+ import Select from "../../../../components/Select/Select.vue2.js";
8
8
  import _sfc_main$4 from "../../../../components/Checkbox/Checkbox.vue.js";
9
9
  import _sfc_main$5 from "../../../../components/Address/Address.vue2.js";
10
10
  import _sfc_main$6 from "../../../../components/LocationMarker/LocationMarker.vue2.js";
@@ -4,7 +4,7 @@ const vue = require("vue");
4
4
  const vueI18n = require("vue-i18n");
5
5
  const Button = require("../../../../components/Button/Button.vue.cjs");
6
6
  const Field = require("../../../../components/Field/Field.vue.cjs");
7
- const Select = require("../../../../components/Select/Select.vue.cjs");
7
+ const Select = require("../../../../components/Select/Select.vue2.cjs");
8
8
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
9
9
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
10
10
  ;/* empty css */
@@ -2,7 +2,7 @@ import { mergeModels, useModel, ref, computed, onMounted, createElementBlock, op
2
2
  import { useI18n } from "vue-i18n";
3
3
  import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
4
4
  import Field from "../../../../components/Field/Field.vue.js";
5
- import Select from "../../../../components/Select/Select.vue.js";
5
+ import Select from "../../../../components/Select/Select.vue2.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
7
  import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
8
8
  /* empty css */
@@ -6,7 +6,7 @@ const bignumber = require("../../../../../../node_modules/.pnpm/bignumber.js@9.2
6
6
  const wallet_store = require("../../store/wallet.store.cjs");
7
7
  const wallet = require("../../localization/wallet.json.cjs");
8
8
  const Field = require("../../../../../components/Field/Field.vue.cjs");
9
- const Select = require("../../../../../components/Select/Select.vue.cjs");
9
+ const Select = require("../../../../../components/Select/Select.vue2.cjs");
10
10
  const _hoisted_1 = { class: "mn-b-small t-center t-bold" };
11
11
  const _hoisted_2 = { class: "t-semi" };
12
12
  const _hoisted_3 = ["disabled"];
@@ -4,7 +4,7 @@ import { BigNumber } from "../../../../../../node_modules/.pnpm/bignumber.js@9.2
4
4
  import { state, actions } from "../../store/wallet.store.js";
5
5
  import text from "../../localization/wallet.json.js";
6
6
  import Field from "../../../../../components/Field/Field.vue.js";
7
- import Select from "../../../../../components/Select/Select.vue.js";
7
+ import Select from "../../../../../components/Select/Select.vue2.js";
8
8
  const _hoisted_1 = { class: "mn-b-small t-center t-bold" };
9
9
  const _hoisted_2 = { class: "t-semi" };
10
10
  const _hoisted_3 = ["disabled"];
@@ -9,13 +9,13 @@ const Popup = require("../../../../../components/Popup/Popup.vue.cjs");
9
9
  const Button = require("../../../../../components/Button/Button.vue.cjs");
10
10
  require("vue-router");
11
11
  ;/* empty css */
12
- ;/* empty css */
13
- ;/* empty css */
12
+ ;/* empty css */
13
+ ;/* empty css */
14
14
  require("../../../../reports/store/reports.cjs");
15
15
  require("../../../../auth/views/store/auth.cjs");
16
16
  require("../../../../organizations/store/memberships.cjs");
17
17
  require("../../../../community/store/reactions.cjs");
18
- ;/* empty css */
18
+ ;/* empty css */
19
19
  const ConnectMetamask = require("../elements/ConnectMetamask.vue.cjs");
20
20
  const CashDeposit = require("../blocks/CashDeposit.vue.cjs");
21
21
  const CardDeposit = require("../blocks/CardDeposit.vue.cjs");