@ozdao/martyrs 0.2.508 → 0.2.510

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 (317) hide show
  1. package/dist/{main-Dq-UfO4G.js → main-DrpgUZcn.js} +2808 -2615
  2. package/dist/main-XJQJFmgj.cjs +11 -0
  3. package/dist/martyrs/src/components/Button/{Button.vue.cjs → Button.vue2.cjs} +2 -2
  4. package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +1 -0
  5. package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +2 -2
  6. package/dist/martyrs/src/components/Button/{Button.vue.cjs.map → Button.vue2.js.map} +1 -1
  7. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.cjs +1 -1
  8. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.cjs.map +1 -1
  9. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js +1 -1
  10. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js.map +1 -1
  11. package/dist/martyrs/src/components/Feed/Carousel.vue.cjs +4 -3
  12. package/dist/martyrs/src/components/Feed/Carousel.vue.cjs.map +1 -1
  13. package/dist/martyrs/src/components/Feed/Carousel.vue.js +5 -4
  14. package/dist/martyrs/src/components/Feed/Carousel.vue.js.map +1 -1
  15. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
  16. package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
  17. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  18. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  19. package/dist/martyrs/src/components/Field/Field.vue.cjs +1 -1
  20. package/dist/martyrs/src/components/Field/Field.vue.cjs.map +1 -1
  21. package/dist/martyrs/src/components/Field/Field.vue.js +1 -1
  22. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -1
  23. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +3 -3
  24. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
  25. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +3 -3
  26. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
  27. package/dist/martyrs/src/components/Tab/{Tab.vue2.cjs → Tab.vue.cjs} +2 -2
  28. package/dist/martyrs/src/components/Tab/{Tab.vue2.js.map → Tab.vue.cjs.map} +1 -1
  29. package/dist/martyrs/src/components/Tab/{Tab.vue2.js → Tab.vue.js} +2 -2
  30. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +1 -0
  31. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
  32. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
  33. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
  34. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
  35. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
  36. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
  38. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +17 -11
  40. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs.map +1 -1
  41. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +18 -12
  42. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  45. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  46. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  47. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +2 -2
  48. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
  49. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +2 -2
  50. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +2 -2
  51. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +2 -2
  52. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
  53. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
  55. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  56. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  57. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  59. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  61. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  62. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  63. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  64. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  65. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  66. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  67. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -0
  68. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
  69. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -0
  70. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  71. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
  72. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  73. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  74. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  75. package/dist/martyrs/src/modules/globals/globals.client.js +15 -15
  76. package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
  77. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
  78. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
  79. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
  80. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
  81. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
  82. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
  83. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +8 -3
  84. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
  85. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +8 -3
  86. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
  87. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs +121 -107
  88. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs.map +1 -1
  89. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js +131 -117
  90. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js.map +1 -1
  91. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
  92. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs.map +1 -1
  93. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
  94. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
  95. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
  96. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
  97. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +112 -49
  98. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +1 -1
  99. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +121 -58
  100. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +1 -1
  101. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
  102. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
  103. package/dist/martyrs/src/modules/icons/logos/Logotype.vue.cjs +3 -3
  104. package/dist/martyrs/src/modules/icons/logos/Logotype.vue.js +3 -3
  105. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +136 -134
  106. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs.map +1 -1
  107. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +136 -134
  108. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
  109. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
  110. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  111. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  113. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
  114. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  115. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
  116. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  117. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
  118. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  119. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  120. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  121. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  122. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  123. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +1 -1
  124. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  125. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
  126. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  127. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
  128. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  129. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
  130. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  131. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
  132. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  133. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
  134. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  135. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
  136. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  137. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
  138. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  139. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
  140. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  141. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
  142. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  143. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
  144. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  145. package/dist/martyrs/src/modules/music/router/music.cjs +2 -1
  146. package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
  147. package/dist/martyrs/src/modules/music/router/music.js +2 -1
  148. package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
  149. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.cjs +1 -1
  150. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
  151. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
  152. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  153. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +61 -9
  154. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs.map +1 -1
  155. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +61 -9
  156. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js.map +1 -1
  157. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +1 -1
  158. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  159. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  160. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  161. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
  162. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  163. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +2 -2
  164. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
  165. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
  166. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  167. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
  168. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  169. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
  170. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  171. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +2 -1
  172. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
  173. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -1
  174. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
  175. package/dist/martyrs/src/modules/orders/orders.client.cjs +36 -44
  176. package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
  177. package/dist/martyrs/src/modules/orders/orders.client.js +36 -44
  178. package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
  179. package/dist/martyrs/src/modules/orders/store/models/customer.cjs +7 -0
  180. package/dist/martyrs/src/modules/orders/store/models/customer.cjs.map +1 -1
  181. package/dist/martyrs/src/modules/orders/store/models/customer.js +7 -0
  182. package/dist/martyrs/src/modules/orders/store/models/customer.js.map +1 -1
  183. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  184. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  185. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +2 -2
  186. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +2 -2
  187. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
  188. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
  189. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
  190. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
  191. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  192. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  193. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  194. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  195. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  196. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  197. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +2 -2
  198. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  199. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +17 -28
  200. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
  201. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +17 -28
  202. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
  203. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  204. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  205. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
  206. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  207. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
  208. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  209. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.cjs +9 -1
  210. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.cjs.map +1 -1
  211. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js +9 -1
  212. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js.map +1 -1
  213. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
  214. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  215. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -2
  216. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  217. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -2
  218. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  219. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +3 -3
  220. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
  221. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +3 -3
  222. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  223. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
  224. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
  225. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +118 -135
  226. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  227. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +123 -140
  228. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  229. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
  230. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  231. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  232. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  233. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs +3 -5
  234. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs.map +1 -1
  235. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +4 -6
  236. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js.map +1 -1
  237. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  238. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  239. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
  240. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  241. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.cjs +10 -5
  242. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.cjs.map +1 -1
  243. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.js +10 -5
  244. package/dist/martyrs/src/modules/products/components/sections/ProductsPopular.vue.js.map +1 -1
  245. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +6 -3
  246. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs.map +1 -1
  247. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +6 -3
  248. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js.map +1 -1
  249. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +2 -2
  250. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
  251. package/dist/martyrs/src/modules/products/store/products.cjs +5 -5
  252. package/dist/martyrs/src/modules/products/store/products.cjs.map +1 -1
  253. package/dist/martyrs/src/modules/products/store/products.js +5 -5
  254. package/dist/martyrs/src/modules/products/store/products.js.map +1 -1
  255. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +2 -2
  256. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  257. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
  258. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  259. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  260. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  261. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
  262. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  263. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
  264. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  265. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  266. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  267. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  268. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
  269. package/dist/martyrs.cjs.js +1 -1
  270. package/dist/martyrs.css +1 -1
  271. package/dist/martyrs.es.js +1 -1
  272. package/dist/orders.server.cjs +58 -0
  273. package/dist/orders.server.js +58 -0
  274. package/dist/products.server.cjs +79 -45
  275. package/dist/products.server.js +79 -45
  276. package/dist/style.css +44 -52
  277. package/dist/{web-BXajFCU2.js → web-C5cmb1FH.js} +1 -1
  278. package/dist/{web-DaBwwCQ5.cjs → web-d40xcY_Y.cjs} +1 -1
  279. package/package.json +1 -1
  280. package/src/components/Checkbox/Checkbox.vue +1 -1
  281. package/src/components/Feed/Carousel.vue +3 -1
  282. package/src/components/Feed/Feed.vue +1 -1
  283. package/src/components/Field/Field.vue +5 -0
  284. package/src/components/FieldBig/FieldBig.vue +2 -2
  285. package/src/modules/auth/views/components/pages/ProfileEdit.vue +17 -10
  286. package/src/modules/globals/views/components/layouts/Client.vue +12 -1
  287. package/src/modules/globals/views/components/partials/Footer.centered.vue +338 -0
  288. package/src/modules/globals/views/components/partials/Footer.vue +104 -99
  289. package/src/modules/globals/views/components/partials/Header.vue +1 -1
  290. package/src/modules/globals/views/components/sections/Filters.vue +73 -15
  291. package/src/modules/icons/logos/Logotype.vue +1 -1
  292. package/src/modules/inventory/components/pages/Inventory.vue +126 -119
  293. package/src/modules/orders/components/forms/FormCustomerDetails.vue +51 -0
  294. package/src/modules/orders/middlewares/customers.verifier.js +60 -0
  295. package/src/modules/orders/models/customer.model.js +18 -0
  296. package/src/modules/orders/orders.client.js +36 -44
  297. package/src/modules/orders/store/models/customer.js +7 -0
  298. package/src/modules/organizations/configs/navigation.organization.config.js +17 -26
  299. package/src/modules/products/TASKS.MD +1 -157
  300. package/src/modules/products/components/elements/QuantitySelector.vue +17 -9
  301. package/src/modules/products/components/pages/Product.vue +1 -1
  302. package/src/modules/products/components/pages/Products.vue +148 -175
  303. package/src/modules/products/components/sections/EditRecommended.vue +1 -3
  304. package/src/modules/products/components/sections/ProductsPopular.vue +9 -5
  305. package/src/modules/products/components/sections/ProductsRecommended.vue +4 -1
  306. package/src/modules/products/controllers/configs/products.lookup.config.js +31 -4
  307. package/src/modules/products/controllers/products.controller.js +14 -2
  308. package/src/modules/products/controllers/queries/products.queries.js +46 -43
  309. package/src/modules/products/models/product.model.js +4 -0
  310. package/src/modules/products/store/products.js +5 -5
  311. package/src/styles/base/all.scss +9 -4
  312. package/src/styles/config.scss +10 -0
  313. package/src/styles/responsive.scss +2 -1
  314. package/src/styles/typography.scss +0 -5
  315. package/dist/main-AWSb_d2P.cjs +0 -11
  316. package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
  317. package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +0 -1
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
- ;/* empty css */
5
+ ;/* empty css */
6
6
  const Feed = require("../../../../components/Feed/Feed.vue.cjs");
7
7
  const Spoiler = require("../../../../components/Spoiler/Spoiler.vue2.cjs");
8
8
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
@@ -17,6 +17,7 @@ const Calendar = require("../../../../components/Calendar/Calendar.vue2.cjs");
17
17
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
18
18
  const CardProduct = require("../blocks/CardProduct.vue.cjs");
19
19
  const IconPlus = require("../../../icons/navigation/IconPlus.vue.cjs");
20
+ const IconCalendar = ;/* empty css */
20
21
  const auth = require("../../../auth/views/store/auth.cjs");
21
22
  const globals = require("../../../globals/views/store/globals.cjs");
22
23
  const products = require("../../store/products.cjs");
@@ -33,7 +34,7 @@ const _hoisted_6 = {
33
34
  key: 0,
34
35
  class: "mn-b-medium"
35
36
  };
36
- const _hoisted_7 = { class: "mn-b-small" };
37
+ const _hoisted_7 = { class: "mn-b-medium" };
37
38
  const _hoisted_8 = { class: "gap-micro" };
38
39
  const _hoisted_9 = ["onClick"];
39
40
  const _hoisted_10 = { class: "cursor-pointer w-100 flex-v-center flex-nowrap flex" };
@@ -46,12 +47,14 @@ const _hoisted_16 = { class: "mn-t-small flex gap-thin" };
46
47
  const _hoisted_17 = { class: "cursor-pointer w-100 flex-v-center flex-nowrap flex" };
47
48
  const _hoisted_18 = { class: "h-2r w-2r flex-child-auto aspect-1x1 flex-center flex bg-light radius-extra" };
48
49
  const _hoisted_19 = { class: "mn-t-small" };
49
- const _hoisted_20 = ["onClick"];
50
+ const _hoisted_20 = { class: "h-1r" };
50
51
  const _hoisted_21 = { class: "w-100 rows-1 pd-thin pos-relative o-hidden" };
51
52
  const _hoisted_22 = { class: "mn-b-thin mobile-only w-100 o-y-scroll scroll-hide scroll-snap-type-x-mandatory scroll-pd-regular" };
52
53
  const _hoisted_23 = { class: "gap-thin flex-nowrap flex" };
53
54
  const _hoisted_24 = ["onClick"];
54
- const _hoisted_25 = { class: "flex gap-small" };
55
+ const _hoisted_25 = { class: "mn-b-thin mobile-only" };
56
+ const _hoisted_26 = { class: "cols-4 pos-relative w-100 rows-1 gap-thin" };
57
+ const _hoisted_27 = { class: "flex gap-small" };
55
58
  const _sfc_main = {
56
59
  __name: "Products",
57
60
  setup(__props) {
@@ -70,60 +73,47 @@ const _sfc_main = {
70
73
  maxPlaceholder: "To"
71
74
  },
72
75
  {
73
- title: "Delivery",
74
- value: "delivery",
75
- type: "checkbox",
76
- options: [
77
- { label: "Pickup", value: "pickup" },
78
- { label: "Courier", value: "courier" },
79
- { label: "Post", value: "post" }
80
- ]
81
- },
82
- {
83
- title: "Status",
84
- value: "status",
85
- type: "radio",
86
- options: [
87
- { label: "Available", value: "available" },
88
- { label: "Out of Stock", value: "out_of_stock" },
89
- { label: "Coming Soon", value: "coming_soon" }
90
- ]
76
+ title: "Availability",
77
+ value: "availability",
78
+ type: "date"
91
79
  }
92
80
  ]);
93
81
  const selectedFilters = vue.ref({
94
82
  price: { min: "", max: "" },
95
- delivery: [],
96
- status: null
83
+ availability: null
97
84
  });
98
- const availabilityOptions = vue.ref([
99
- { label: "Available today", value: "today" },
100
- { label: "This week", value: "week" },
101
- { label: "This month", value: "month" }
102
- ]);
103
- const selectedAvailability = vue.ref("all");
104
85
  const showDatePickerPopup = vue.ref(false);
105
- vue.ref(null);
106
- const selectedDates = vue.ref(null);
107
86
  const tempSelectedDates = vue.ref(null);
108
- const priceRange = vue.ref({
109
- min: "",
110
- max: ""
111
- });
112
87
  const processedFilters = vue.computed(() => {
113
- return generateFilters(selectedFilters.value);
114
- });
115
- const processedPrices = vue.computed(() => {
116
- return priceRange.value.min || priceRange.value.max ? `${priceRange.value.min || 0}-${priceRange.value.max || 999999}` : null;
88
+ const filters = [];
89
+ Object.entries(selectedFilters.value).forEach(([key, value]) => {
90
+ if (key === "price" || key === "availability") return;
91
+ if (Array.isArray(value) && value.length > 0) {
92
+ filters.push({
93
+ parameter: key,
94
+ values: value,
95
+ caseSensitive: false
96
+ });
97
+ } else if (value && typeof value === "string" && value.trim() !== "") {
98
+ filters.push({
99
+ parameter: key,
100
+ values: [value],
101
+ caseSensitive: false
102
+ });
103
+ }
104
+ });
105
+ return filters.length > 0 ? JSON.stringify(filters) : "";
117
106
  });
118
107
  vue.computed(() => {
119
108
  const lookups = ["variants"];
120
- if (processedDates.value) {
109
+ if (selectedFilters.value.availability) {
121
110
  lookups.push("rents");
122
111
  }
123
112
  return lookups;
124
113
  });
125
114
  const loadCategoryData = async () => {
126
115
  const categoryPath = route.params.categoryPath;
116
+ availableFilters.value = availableFilters.value.filter((f) => f.value === "price" || f.value === "availability");
127
117
  try {
128
118
  if (categoryPath) {
129
119
  const result = await categories.actions.read({
@@ -135,11 +125,20 @@ const _sfc_main = {
135
125
  currentCategory.value = result[0];
136
126
  currentCategories.value = result[0].children || [];
137
127
  categoryFilters.value = result[0].filters || [];
138
- const filtersObj = {};
139
128
  (result[0].filters || []).forEach((filter) => {
140
- filtersObj[filter.name] = [];
129
+ availableFilters.value.push({
130
+ title: filter.name,
131
+ value: filter.name,
132
+ type: "checkbox",
133
+ options: (filter.options || []).map((option) => ({
134
+ label: typeof option === "string" ? option : option.text,
135
+ value: typeof option === "string" ? option : option.text
136
+ }))
137
+ });
138
+ if (!selectedFilters.value[filter.name]) {
139
+ selectedFilters.value[filter.name] = [];
140
+ }
141
141
  });
142
- selectedFilters.value = filtersObj;
143
142
  }
144
143
  } else {
145
144
  const result = await categories.actions.read({
@@ -147,10 +146,12 @@ const _sfc_main = {
147
146
  tree: false
148
147
  });
149
148
  currentCategories.value = result;
149
+ categoryFilters.value = [];
150
150
  }
151
151
  } catch (error) {
152
152
  console.error("Error loading categories:", error);
153
153
  currentCategories.value = [];
154
+ categoryFilters.value = [];
154
155
  }
155
156
  };
156
157
  const selectCategory = (category) => {
@@ -165,39 +166,17 @@ const _sfc_main = {
165
166
  router.push(`/products/categories/${categoryPath}`);
166
167
  }
167
168
  };
168
- const selectAvailabilityOption = (value) => {
169
- selectedAvailability.value = value;
170
- const today = /* @__PURE__ */ new Date();
171
- switch (value) {
172
- case "today":
173
- selectedDates.value = {
174
- start: today,
175
- end: today
176
- };
177
- break;
178
- case "week":
179
- const weekEnd = new Date(today);
180
- weekEnd.setDate(today.getDate() + 7);
181
- selectedDates.value = {
182
- start: today,
183
- end: weekEnd
184
- };
185
- break;
186
- case "month":
187
- const monthEnd = new Date(today);
188
- monthEnd.setMonth(today.getMonth() + 1);
189
- selectedDates.value = {
190
- start: today,
191
- end: monthEnd
192
- };
193
- break;
194
- }
195
- };
196
169
  const applyDateFilter = () => {
197
- selectedDates.value = tempSelectedDates.value;
198
- selectedAvailability.value = "custom";
170
+ selectedFilters.value.availability = tempSelectedDates.value;
199
171
  showDatePickerPopup.value = false;
200
172
  };
173
+ const clearAllFilters = () => {
174
+ selectedFilters.value.price = { min: "", max: "" };
175
+ selectedFilters.value.availability = null;
176
+ categoryFilters.value.forEach((filter) => {
177
+ selectedFilters.value[filter.name] = [];
178
+ });
179
+ };
201
180
  globals.state.navigation_bar.actions = [{
202
181
  component: IconPlus.default,
203
182
  props: {
@@ -215,7 +194,7 @@ const _sfc_main = {
215
194
  const _component_router_link = vue.resolveComponent("router-link");
216
195
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
217
196
  vue.unref(route).name !== "Organization" && !_ctx.MOBILE_APP ? (vue.openBlock(), vue.createElementBlock("header", _hoisted_2, [
218
- _cache[11] || (_cache[11] = vue.createElementVNode("h2", { class: "mn-r-medium" }, "Products", -1)),
197
+ _cache[10] || (_cache[10] = vue.createElementVNode("h2", { class: "mn-r-medium" }, "Products", -1)),
219
198
  _ctx.hasAccess(vue.unref(route).params._id, "products", "create", auth.state.accesses, auth.state.access.roles) ? (vue.openBlock(), vue.createElementBlock("button", {
220
199
  key: 0,
221
200
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$router.push({
@@ -234,10 +213,10 @@ const _sfc_main = {
234
213
  return vue.openBlock(), vue.createElementBlock("div", {
235
214
  key: category._id,
236
215
  onClick: ($event) => selectCategory(category),
237
- class: "pd-small radius-small cursor-pointer hover-bg-light transition-all"
216
+ class: "cursor-pointer hover-t-underline mn-b-regular transition-all"
238
217
  }, [
239
218
  vue.createTextVNode(vue.toDisplayString(category.name) + " ", 1),
240
- _cache[12] || (_cache[12] = vue.createElementVNode("br", null, null, -1)),
219
+ _cache[11] || (_cache[11] = vue.createElementVNode("br", null, null, -1)),
241
220
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(category.children, (subcategory) => {
242
221
  return vue.openBlock(), vue.createElementBlock("span", null, vue.toDisplayString(subcategory.name), 1);
243
222
  }), 256))
@@ -286,7 +265,7 @@ const _sfc_main = {
286
265
  }, {
287
266
  header: vue.withCtx(({ isOpen }) => [
288
267
  vue.createElementVNode("div", _hoisted_14, [
289
- _cache[13] || (_cache[13] = vue.createElementVNode("h4", { class: "w-100" }, " Price", -1)),
268
+ _cache[12] || (_cache[12] = vue.createElementVNode("h4", { class: "w-100" }, " Price", -1)),
290
269
  vue.createElementVNode("div", _hoisted_15, [
291
270
  vue.createVNode(IconChevronBottom.default, {
292
271
  class: vue.normalizeClass([{ "rotate-180 mn-t-micro-negative": isOpen }, "i-regular"]),
@@ -298,19 +277,21 @@ const _sfc_main = {
298
277
  content: vue.withCtx(() => [
299
278
  vue.createElementVNode("div", _hoisted_16, [
300
279
  vue.createVNode(Field.default, {
301
- modelValue: priceRange.value.min,
302
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => priceRange.value.min = $event),
280
+ field: selectedFilters.value.price.min,
281
+ "onUpdate:field": _cache[1] || (_cache[1] = ($event) => selectedFilters.value.price.min = $event),
303
282
  placeholder: "From",
304
283
  type: "number",
284
+ label: _ctx.returnCurrency(),
305
285
  class: "w-50 bg-light pd-small radius-small"
306
- }, null, 8, ["modelValue"]),
286
+ }, null, 8, ["field", "label"]),
307
287
  vue.createVNode(Field.default, {
308
- modelValue: priceRange.value.max,
309
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => priceRange.value.max = $event),
288
+ field: selectedFilters.value.price.max,
289
+ "onUpdate:field": _cache[2] || (_cache[2] = ($event) => selectedFilters.value.price.max = $event),
310
290
  placeholder: "To",
311
291
  type: "number",
292
+ label: _ctx.returnCurrency(),
312
293
  class: "w-50 bg-light pd-small radius-small"
313
- }, null, 8, ["modelValue"])
294
+ }, null, 8, ["field", "label"])
314
295
  ])
315
296
  ]),
316
297
  _: 1
@@ -321,7 +302,7 @@ const _sfc_main = {
321
302
  }, {
322
303
  header: vue.withCtx(({ isOpen }) => [
323
304
  vue.createElementVNode("div", _hoisted_17, [
324
- _cache[14] || (_cache[14] = vue.createElementVNode("h4", { class: "w-100" }, "Availability", -1)),
305
+ _cache[13] || (_cache[13] = vue.createElementVNode("h4", { class: "w-100" }, "Availability", -1)),
325
306
  vue.createElementVNode("div", _hoisted_18, [
326
307
  vue.createVNode(IconChevronBottom.default, {
327
308
  class: vue.normalizeClass([{ "rotate-180 mn-t-micro-negative": isOpen }, "i-regular"]),
@@ -332,35 +313,27 @@ const _sfc_main = {
332
313
  ]),
333
314
  content: vue.withCtx(() => [
334
315
  vue.createElementVNode("div", _hoisted_19, [
335
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(availabilityOptions.value, (option) => {
336
- return vue.openBlock(), vue.createElementBlock("div", {
337
- key: option.value,
338
- onClick: ($event) => selectAvailabilityOption(option.value),
339
- class: vue.normalizeClass([{ "bg-light": selectedAvailability.value === option.value }, "pd-small radius-small cursor-pointer hover-bg-light transition-all mn-b-micro"])
340
- }, vue.toDisplayString(option.label), 11, _hoisted_20);
341
- }), 128)),
342
316
  vue.createElementVNode("div", {
343
317
  onClick: _cache[3] || (_cache[3] = () => {
344
- tempSelectedDates.value = selectedDates.value;
318
+ tempSelectedDates.value = selectedFilters.value.availability;
345
319
  showDatePickerPopup.value = true;
346
320
  }),
347
- class: vue.normalizeClass([{ "bg-light": selectedAvailability.value === "custom" }, "pd-small radius-small cursor-pointer hover-bg-light transition-all mn-b-micro"])
348
- }, vue.toDisplayString(selectedDates.value ? `${vue.unref(formatDate)(selectedDates.value.start, { dayMonth: true, language: "en" })} - ${vue.unref(formatDate)(selectedDates.value.end, { dayMonth: true, language: "en" })}` : "Select dates"), 3)
321
+ class: vue.normalizeClass([{ "bg-light": selectedFilters.value?.availability }, "pd-small field-wrapper radius-small bg-light cursor-pointer hover-bg-light transition-all flex-v-center flex gap-thin"])
322
+ }, [
323
+ vue.createVNode(IconCalendar.default, { class: "i-regular" }),
324
+ vue.createElementVNode("span", _hoisted_20, vue.toDisplayString(selectedFilters.value.availability ? `${vue.unref(formatDate)(selectedFilters.value.availability.start, { dayMonth: true, language: "en" })} - ${vue.unref(formatDate)(selectedFilters.value.availability.end, { dayMonth: true, language: "en" })}` : "Select dates"), 1)
325
+ ], 2)
349
326
  ])
350
327
  ]),
351
328
  _: 1
352
329
  }),
353
- _cache[15] || (_cache[15] = vue.createElementVNode("button", { class: "bg-main w-100 button mn-t-medium" }, " Clear Filters ", -1))
330
+ vue.createElementVNode("button", {
331
+ onClick: clearAllFilters,
332
+ class: "bg-main w-100 button mn-t-medium"
333
+ }, " Clear Filters ")
354
334
  ])
355
335
  ]),
356
336
  vue.createElementVNode("div", _hoisted_21, [
357
- vue.createVNode(Filters.default, {
358
- filters: availableFilters.value,
359
- "onUpdate:filters": _cache[4] || (_cache[4] = ($event) => availableFilters.value = $event),
360
- selected: selectedFilters.value,
361
- "onUpdate:selected": _cache[5] || (_cache[5] = ($event) => selectedFilters.value = $event),
362
- class: "mn-b-thin mobile-only"
363
- }, null, 8, ["filters", "selected"]),
364
337
  vue.renderSlot(_ctx.$slots, "default"),
365
338
  vue.createElementVNode("div", _hoisted_22, [
366
339
  vue.createElementVNode("div", _hoisted_23, [
@@ -375,10 +348,8 @@ const _sfc_main = {
375
348
  ]),
376
349
  vue.createVNode(Feed.default, {
377
350
  search: true,
378
- filter: products.state.filter,
379
- "onUpdate:filter": _cache[6] || (_cache[6] = ($event) => products.state.filter = $event),
380
351
  sort: products.state.sort,
381
- "onUpdate:sort": _cache[7] || (_cache[7] = ($event) => products.state.sort = $event),
352
+ "onUpdate:sort": _cache[6] || (_cache[6] = ($event) => products.state.sort = $event),
382
353
  showLoadMore: false,
383
354
  states: {
384
355
  empty: {
@@ -397,60 +368,72 @@ const _sfc_main = {
397
368
  lookup: ["variants", "rents"],
398
369
  categories: vue.unref(route).params.categoryPath ? `/${vue.unref(route).params.categoryPath}` : null,
399
370
  filters: processedFilters.value,
400
- prices: processedPrices.value,
401
- dateStart: selectedDates.value?.start,
402
- dateEnd: selectedDates.value?.end
371
+ priceMin: selectedFilters.value.price?.min,
372
+ priceMax: selectedFilters.value.price?.max,
373
+ dateStart: selectedFilters.value.availability?.start,
374
+ dateEnd: selectedFilters.value.availability?.end
403
375
  },
404
- class: "cols-4 pos-relative w-100 rows-1 gap-thin"
376
+ class: ""
405
377
  }, {
406
378
  default: vue.withCtx(({
407
379
  items
408
380
  }) => [
409
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(items, (product) => {
410
- return vue.openBlock(), vue.createBlock(_component_router_link, {
411
- to: vue.unref(route).params._id ? { name: "Organization_Product", params: { _id: vue.unref(route).params._id, product: product._id } } : { name: "Product", params: { product: product._id } },
412
- class: "pos-relative h-100 w-100"
413
- }, {
414
- default: vue.withCtx(() => [
415
- (vue.openBlock(), vue.createBlock(CardProduct.default, {
416
- key: product._id,
417
- product,
418
- user: auth.state.access,
419
- organization: vue.unref(route).params._id,
420
- access: _ctx.hasAccess(vue.unref(route).params._id, "products", "edit", auth.state.accesses, auth.state.access.roles),
421
- class: "pos-relative h-100 w-100 bg-light"
422
- }, null, 8, ["product", "user", "organization", "access"]))
423
- ]),
424
- _: 2
425
- }, 1032, ["to"]);
426
- }), 256))
381
+ vue.createElementVNode("div", _hoisted_25, [
382
+ vue.createVNode(Filters.default, {
383
+ filters: availableFilters.value,
384
+ "onUpdate:filters": _cache[4] || (_cache[4] = ($event) => availableFilters.value = $event),
385
+ selected: selectedFilters.value,
386
+ "onUpdate:selected": _cache[5] || (_cache[5] = ($event) => selectedFilters.value = $event),
387
+ class: ""
388
+ }, null, 8, ["filters", "selected"])
389
+ ]),
390
+ vue.createElementVNode("div", _hoisted_26, [
391
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(items, (product) => {
392
+ return vue.openBlock(), vue.createBlock(_component_router_link, {
393
+ to: vue.unref(route).params._id ? { name: "Organization_Product", params: { _id: vue.unref(route).params._id, product: product._id } } : { name: "Product", params: { product: product._id } },
394
+ class: "pos-relative h-100 w-100"
395
+ }, {
396
+ default: vue.withCtx(() => [
397
+ (vue.openBlock(), vue.createBlock(CardProduct.default, {
398
+ key: product._id,
399
+ product,
400
+ user: auth.state.access,
401
+ organization: vue.unref(route).params._id,
402
+ access: _ctx.hasAccess(vue.unref(route).params._id, "products", "edit", auth.state.accesses, auth.state.access.roles),
403
+ class: "pos-relative h-100 w-100 bg-light"
404
+ }, null, 8, ["product", "user", "organization", "access"]))
405
+ ]),
406
+ _: 2
407
+ }, 1032, ["to"]);
408
+ }), 256))
409
+ ])
427
410
  ]),
428
411
  _: 1
429
- }, 8, ["filter", "sort", "store", "options"])
412
+ }, 8, ["sort", "store", "options"])
430
413
  ])
431
414
  ]),
432
415
  vue.createVNode(Popup.default, {
433
416
  isPopupOpen: showDatePickerPopup.value,
434
- onClosePopup: _cache[10] || (_cache[10] = ($event) => showDatePickerPopup.value = false),
417
+ onClosePopup: _cache[9] || (_cache[9] = ($event) => showDatePickerPopup.value = false),
435
418
  class: "pd-medium bg-white radius-medium",
436
419
  style: { "min-width": "350px" }
437
420
  }, {
438
421
  default: vue.withCtx(() => [
439
- _cache[16] || (_cache[16] = vue.createElementVNode("h3", { class: "mn-b-medium" }, "Select Date Range", -1)),
422
+ _cache[14] || (_cache[14] = vue.createElementVNode("h3", { class: "mn-b-medium" }, "Select Date Range", -1)),
440
423
  vue.createVNode(Calendar.default, {
441
424
  date: tempSelectedDates.value,
442
- "onUpdate:date": _cache[8] || (_cache[8] = ($event) => tempSelectedDates.value = $event),
425
+ "onUpdate:date": _cache[7] || (_cache[7] = ($event) => tempSelectedDates.value = $event),
443
426
  allowRange: true,
444
427
  disablePastDates: true,
445
- class: "mn-b-medium"
428
+ class: "mn-b-medium bg-light"
446
429
  }, null, 8, ["date"]),
447
- vue.createElementVNode("div", _hoisted_25, [
430
+ vue.createElementVNode("div", _hoisted_27, [
448
431
  vue.createElementVNode("button", {
449
432
  onClick: applyDateFilter,
450
433
  class: "bg-main button flex-child-full"
451
434
  }, " Apply "),
452
435
  vue.createElementVNode("button", {
453
- onClick: _cache[9] || (_cache[9] = ($event) => showDatePickerPopup.value = false),
436
+ onClick: _cache[8] || (_cache[8] = ($event) => showDatePickerPopup.value = false),
454
437
  class: "bg-light button flex-child-full"
455
438
  }, " Cancel ")
456
439
  ])
@@ -1 +1 @@
1
- {"version":3,"file":"Products.vue.cjs","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":["useRoute","useRouter","useGlobalMixins","ref","computed","categories.actions","globals.state","IconPlus","auth.state","onMounted","onUnmounted"],"mappings":"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"}
1
+ {"version":3,"file":"Products.vue.cjs","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-medium\">\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=\"cursor-pointer hover-t-underline mn-b-regular 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:field=\"selectedFilters.price.min\"\n placeholder=\"From\"\n type=\"number\"\n :label=\"returnCurrency()\"\n class=\"w-50 bg-light pd-small radius-small\"\n />\n <Field\n v-model:field=\"selectedFilters.price.max\"\n placeholder=\"To\"\n type=\"number\"\n :label=\"returnCurrency()\"\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 @click=\"() => { tempSelectedDates = selectedFilters.availability; showDatePickerPopup = true; }\"\n :class=\"{ 'bg-light': selectedFilters?.availability }\"\n class=\"pd-small field-wrapper radius-small bg-light cursor-pointer hover-bg-light transition-all flex-v-center flex gap-thin\"\n >\n <IconCalendar class=\"i-regular\" />\n <span class=\"h-1r\">{{ selectedFilters.availability ? `${formatDate(selectedFilters.availability.start, { dayMonth: true, language: 'en' })} - ${formatDate(selectedFilters.availability.end, { dayMonth: true, language: 'en' })}` : 'Select dates'}}</span>\n </div>\n </div>\n </template>\n </Spoiler>\n\n <!-- Кнопка очистки фильтров -->\n <button \n @click=\"clearAllFilters\"\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 \n <slot></slot>\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 <Feed\n :search=\"true\"\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 priceMin: selectedFilters.price?.min,\n priceMax: selectedFilters.price?.max,\n dateStart: selectedFilters.availability?.start,\n dateEnd: selectedFilters.availability?.end\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"\"\n \n >\n <div class=\"mn-b-thin mobile-only\">\n <Filters\n v-model:filters=\"availableFilters\"\n v-model:selected=\"selectedFilters\"\n class=\"\"\n />\n </div>\n <div class=\"cols-4 pos-relative w-100 rows-1 gap-thin\">\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 </div>\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 bg-light\"\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 import IconCalendar from '@martyrs/src/modules/icons/entities/IconCalendar.vue'\n\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\n const availableFilters = ref([\n {\n title: 'Price',\n value: 'price',\n type: 'range',\n minPlaceholder: 'From',\n maxPlaceholder: 'To'\n },\n {\n title: 'Availability',\n value: 'availability',\n type: 'date'\n }\n ])\n\n const selectedFilters = ref({\n price: { min: '', max: '' },\n availability: null\n })\n\n const showDatePickerPopup = ref(false);\n const tempSelectedDates = ref(null);\n\n // Computed property for processed filters\n const processedFilters = computed(() => {\n const filters = [];\n \n // Обрабатываем фильтры категорий\n Object.entries(selectedFilters.value).forEach(([key, value]) => {\n if (key === 'price' || key === 'availability') return; // эти обрабатываются отдельно\n \n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n parameter: key,\n values: value,\n caseSensitive: false\n });\n } else if (value && typeof value === 'string' && value.trim() !== '') {\n filters.push({\n parameter: key,\n values: [value],\n caseSensitive: false\n });\n }\n });\n \n return filters.length > 0 ? JSON.stringify(filters) : '';\n });\n\n\n\n\n const processedLookups = computed(() => {\n const lookups = ['variants'];\n if (selectedFilters.value.availability) {\n lookups.push('rents');\n }\n return lookups;\n });\n\n const loadCategoryData = async () => {\n const categoryPath = route.params.categoryPath;\n \n // Очищаем фильтры категории из предыдущей загрузки\n availableFilters.value = availableFilters.value.filter(f => f.value === 'price' || f.value === 'availability');\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 // Добавляем фильтры категории в availableFilters\n (result[0].filters || []).forEach(filter => {\n availableFilters.value.push({\n title: filter.name,\n value: filter.name,\n type: 'checkbox',\n options: (filter.options || []).map(option => ({\n label: typeof option === 'string' ? option : option.text,\n value: typeof option === 'string' ? option : option.text\n }))\n });\n // Инициализируем массив для фильтра\n if (!selectedFilters.value[filter.name]) {\n selectedFilters.value[filter.name] = [];\n }\n });\n }\n } else {\n // Загружаем только корневые категории\n const result = await categories.actions.read({ \n root: true,\n tree: false\n });\n \n currentCategories.value = result;\n categoryFilters.value = [];\n }\n } catch (error) {\n console.error('Error loading categories:', error);\n currentCategories.value = [];\n categoryFilters.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 // Функция применения фильтра дат\n const applyDateFilter = () => {\n selectedFilters.value.availability = tempSelectedDates.value;\n showDatePickerPopup.value = false;\n };\n \n // Функция очистки всех фильтров\n const clearAllFilters = () => {\n selectedFilters.value.price = { min: '', max: '' };\n selectedFilters.value.availability = null;\n \n // Очищаем фильтры категорий\n categoryFilters.value.forEach(filter => {\n selectedFilters.value[filter.name] = [];\n });\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":["useRoute","useRouter","useGlobalMixins","ref","computed","categories.actions","globals.state","IconPlus","auth.state","onMounted","onUnmounted"],"mappings":"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"}