@ozdao/martyrs 0.2.523 → 0.2.525

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 (311) 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/community.server.cjs +1 -1
  6. package/dist/community.server.js +1 -1
  7. package/dist/{crud-CC6k6yY5.cjs → crud-DGM6Xa1R.cjs} +1 -1
  8. package/dist/{crud-BIFl1W1i.js → crud-Ed3dcRsC.js} +1 -1
  9. package/dist/events.server.cjs +1 -1
  10. package/dist/events.server.js +1 -1
  11. package/dist/gallery.server.cjs +1 -1
  12. package/dist/gallery.server.js +1 -1
  13. package/dist/{globals.verifier-DFqKQ7hK.js → globals.verifier-BhqUrneb.js} +31 -1
  14. package/dist/{globals.verifier-C0zj_LLo.cjs → globals.verifier-CJ1lr-NW.cjs} +31 -1
  15. package/dist/inventory.server.cjs +3 -3
  16. package/dist/inventory.server.js +3 -3
  17. package/dist/{main-BM3GslOO.cjs → main-4KvvKtzH.cjs} +6 -6
  18. package/dist/{main-Qcn7YlTx.js → main-Bk4xq-K0.js} +45 -37
  19. package/dist/martyrs/src/components/Button/{Button.vue.cjs → Button.vue2.cjs} +2 -2
  20. package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +1 -0
  21. package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +2 -2
  22. package/dist/martyrs/src/components/Button/{Button.vue.cjs.map → Button.vue2.js.map} +1 -1
  23. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
  24. package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
  25. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  26. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  27. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
  28. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  29. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
  30. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
  31. package/dist/martyrs/src/components/Menu/{Menu.vue2.cjs → Menu.vue.cjs} +2 -2
  32. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +1 -0
  33. package/dist/martyrs/src/components/Menu/{Menu.vue2.js → Menu.vue.js} +2 -2
  34. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +1 -0
  35. package/dist/martyrs/src/components/Select/{Select.vue2.cjs → Select.vue.cjs} +2 -2
  36. package/dist/martyrs/src/components/Select/{Select.vue2.js.map → Select.vue.cjs.map} +1 -1
  37. package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
  38. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
  39. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.cjs → Spoiler.vue.cjs} +2 -2
  40. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js.map → Spoiler.vue.cjs.map} +1 -1
  41. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js → Spoiler.vue.js} +2 -2
  42. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +1 -0
  43. package/dist/martyrs/src/components/Tree/Tree.vue.cjs +19 -33
  44. package/dist/martyrs/src/components/Tree/Tree.vue.cjs.map +1 -1
  45. package/dist/martyrs/src/components/Tree/Tree.vue.js +19 -33
  46. package/dist/martyrs/src/components/Tree/Tree.vue.js.map +1 -1
  47. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
  48. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  49. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  51. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
  52. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
  53. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  55. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  56. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  57. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  59. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  61. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
  62. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  63. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
  64. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
  65. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  66. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
  67. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  68. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  69. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +2 -2
  70. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
  71. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  72. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  73. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  74. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  75. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  76. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  77. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  78. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  79. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -2
  80. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
  81. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  82. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  83. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
  84. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
  85. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
  86. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
  87. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +2 -2
  88. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs.map +1 -1
  89. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +2 -2
  90. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
  91. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
  92. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
  93. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
  94. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
  95. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  96. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  97. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
  98. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
  99. package/dist/martyrs/src/modules/globals/views/store/globals.cjs +14 -2
  100. package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
  101. package/dist/martyrs/src/modules/globals/views/store/globals.js +14 -2
  102. package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
  103. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +2 -2
  104. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +2 -2
  105. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  107. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +1 -1
  108. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  109. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +2 -2
  110. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +2 -2
  111. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +2 -2
  113. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +2 -2
  114. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
  115. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  116. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +1 -1
  117. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +1 -1
  118. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
  119. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  120. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
  121. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  122. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
  123. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  124. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
  125. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  126. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +2 -2
  127. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +2 -2
  128. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +2 -2
  129. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +2 -2
  130. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +1 -1
  131. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  132. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
  133. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  134. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +2 -2
  135. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +2 -2
  136. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
  137. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  138. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
  139. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  140. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
  141. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  142. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
  143. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  144. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
  145. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  146. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
  147. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  148. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
  149. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  150. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
  151. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  152. package/dist/martyrs/src/modules/music/router/music.cjs +1 -1
  153. package/dist/martyrs/src/modules/music/router/music.js +1 -1
  154. package/dist/martyrs/src/modules/notifications/notifications.client.cjs +0 -4
  155. package/dist/martyrs/src/modules/notifications/notifications.client.cjs.map +1 -1
  156. package/dist/martyrs/src/modules/notifications/notifications.client.js +0 -4
  157. package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
  158. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +2 -2
  159. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
  160. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +2 -2
  161. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +2 -2
  162. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +1 -1
  163. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  164. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +2 -2
  165. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
  166. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
  167. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  168. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
  169. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  170. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
  171. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  172. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
  173. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  174. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
  175. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  176. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +1 -1
  177. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
  178. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  179. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  180. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +1 -1
  181. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  182. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +2 -2
  183. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
  184. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +1 -1
  185. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  186. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +1 -1
  187. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
  188. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  189. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  190. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
  191. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  192. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
  193. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
  194. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  195. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  196. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +2 -2
  197. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
  198. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  199. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  200. package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
  201. package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
  202. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  203. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  204. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
  205. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  206. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
  207. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  208. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +48 -19
  209. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs.map +1 -1
  210. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +48 -19
  211. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  212. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +2 -2
  213. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  214. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
  215. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  216. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +78 -46
  217. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs.map +1 -1
  218. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +78 -46
  219. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
  220. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -2
  221. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  222. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -2
  223. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  224. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
  225. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  226. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +2 -2
  227. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +2 -2
  228. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
  229. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
  230. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
  231. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  232. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
  233. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  234. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
  235. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  236. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
  237. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  238. package/dist/martyrs/src/modules/products/store/categories.cjs +2 -4
  239. package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
  240. package/dist/martyrs/src/modules/products/store/categories.js +2 -4
  241. package/dist/martyrs/src/modules/products/store/categories.js.map +1 -1
  242. package/dist/martyrs/src/modules/products/store/products.cjs +12 -2
  243. package/dist/martyrs/src/modules/products/store/products.cjs.map +1 -1
  244. package/dist/martyrs/src/modules/products/store/products.js +12 -2
  245. package/dist/martyrs/src/modules/products/store/products.js.map +1 -1
  246. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  247. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  248. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +2 -2
  249. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
  250. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
  251. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  252. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  253. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  254. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
  255. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  256. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +1 -1
  257. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
  258. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
  259. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  260. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +1 -1
  261. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -1
  262. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +1 -1
  263. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
  264. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +2 -2
  265. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +2 -2
  266. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  267. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
  268. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +2 -2
  269. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
  270. package/dist/martyrs.cjs.js +1 -1
  271. package/dist/martyrs.es.js +1 -1
  272. package/dist/music.server.cjs +2 -2
  273. package/dist/music.server.js +2 -2
  274. package/dist/orders.server.cjs +3 -3
  275. package/dist/orders.server.js +3 -3
  276. package/dist/organizations.server.cjs +2 -2
  277. package/dist/organizations.server.js +2 -2
  278. package/dist/products.server.cjs +121 -45
  279. package/dist/products.server.js +121 -45
  280. package/dist/{queryProcessor-B_X680wC.cjs → queryProcessor-DMSc5-r6.cjs} +17 -20
  281. package/dist/{queryProcessor-CVcLPEnv.js → queryProcessor-rukV_SBd.js} +17 -20
  282. package/dist/rents.server.cjs +2 -2
  283. package/dist/rents.server.js +2 -2
  284. package/dist/spots.server.cjs +1 -1
  285. package/dist/spots.server.js +1 -1
  286. package/dist/{web-DVR8m2fm.js → web-BS-4Xl3x.js} +1 -1
  287. package/dist/{web-B0cfxzgu.cjs → web-CjndIDjT.cjs} +1 -1
  288. package/package.json +1 -1
  289. package/src/components/Feed/Feed.vue +1 -1
  290. package/src/components/Tree/Tree.vue +27 -15
  291. package/src/modules/globals/controllers/classes/globals.validator.js +32 -1
  292. package/src/modules/globals/controllers/utils/queryProcessor.js +27 -20
  293. package/src/modules/globals/views/components/blocks/PopupDateSelector.vue +1 -1
  294. package/src/modules/globals/views/store/globals.js +19 -2
  295. package/src/modules/notifications/notifications.client.js +0 -5
  296. package/src/modules/products/components/pages/Categories.vue +60 -22
  297. package/src/modules/products/components/pages/ProductEdit.vue +45 -21
  298. package/src/modules/products/components/pages/Products.vue +0 -1
  299. package/src/modules/products/controllers/categories.controller.js +107 -44
  300. package/src/modules/products/controllers/products.controller.js +34 -1
  301. package/src/modules/products/middlewares/categories.verifier.js +9 -2
  302. package/src/modules/products/middlewares/variants.verifier.js +2 -2
  303. package/src/modules/products/store/categories.js +2 -4
  304. package/src/modules/products/store/products.js +10 -0
  305. package/src/modules/spots/components/pages/Spots.vue +1 -1
  306. package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
  307. package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +0 -1
  308. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +0 -1
  309. package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +0 -1
  310. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.cjs.map +0 -1
  311. package/src/modules/products/TASKS.MD +0 -1
@@ -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\">{{ currentCategory ? currentCategory.name : 'All Products' }}</h2>\n <button \n v-if=\"route.params._id && 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\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','inventory'],\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 z-index-1 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 radius-small bg-light\"\n />\n \n <div class=\"flex gap-small\">\n <button \n @click=\"showDatePickerPopup = false\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n <button \n @click=\"applyDateFilter\"\n class=\"bg-main button w-100 flex-child-full\"\n >\n Apply\n </button>\n \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 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 emits = defineEmits(['page-loading', 'page-loaded']);\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 if (route.params?._id) {\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\n onMounted(async () => {\n emits('page-loading');\n await loadCategoryData();\n emits('page-loaded');\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\">{{ currentCategory ? currentCategory.name : 'All Products' }}</h2>\n <button \n v-if=\"route.params._id && 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\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 lookup: ['variants','rents','inventory'],\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 z-index-1 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 radius-small bg-light\"\n />\n \n <div class=\"flex gap-small\">\n <button \n @click=\"showDatePickerPopup = false\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n <button \n @click=\"applyDateFilter\"\n class=\"bg-main button w-100 flex-child-full\"\n >\n Apply\n </button>\n \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 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 emits = defineEmits(['page-loading', 'page-loaded']);\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 if (route.params?._id) {\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\n onMounted(async () => {\n emits('page-loading');\n await loadCategoryData();\n emits('page-loaded');\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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"}
@@ -2,7 +2,7 @@ import { ref, computed, onMounted, onUnmounted, resolveComponent, createElementB
2
2
  import { useRoute, useRouter } from "vue-router";
3
3
  /* empty css */
4
4
  import _sfc_main$5 from "../../../../components/Feed/Feed.vue.js";
5
- import _sfc_main$2 from "../../../../components/Spoiler/Spoiler.vue2.js";
5
+ import _sfc_main$2 from "../../../../components/Spoiler/Spoiler.vue.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
7
  import "vue-i18n";
8
8
  import { actions as actions$1 } from "../../store/categories.js";
@@ -370,7 +370,6 @@ const _sfc_main = {
370
370
  options: {
371
371
  limit: 16,
372
372
  owner: unref(route).name?.includes("Organization") ? unref(route).params._id : null,
373
- search: unref(route).query.search,
374
373
  lookup: ["variants", "rents", "inventory"],
375
374
  categories: unref(route).params.categoryPath ? `/${unref(route).params.categoryPath}` : null,
376
375
  filters: processedFilters.value,
@@ -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\">{{ currentCategory ? currentCategory.name : 'All Products' }}</h2>\n <button \n v-if=\"route.params._id && 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\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','inventory'],\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 z-index-1 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 radius-small bg-light\"\n />\n \n <div class=\"flex gap-small\">\n <button \n @click=\"showDatePickerPopup = false\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n <button \n @click=\"applyDateFilter\"\n class=\"bg-main button w-100 flex-child-full\"\n >\n Apply\n </button>\n \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 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 emits = defineEmits(['page-loading', 'page-loaded']);\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 if (route.params?._id) {\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\n onMounted(async () => {\n emits('page-loading');\n await loadCategoryData();\n emits('page-loaded');\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\">{{ currentCategory ? currentCategory.name : 'All Products' }}</h2>\n <button \n v-if=\"route.params._id && 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\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 lookup: ['variants','rents','inventory'],\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 z-index-1 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 radius-small bg-light\"\n />\n \n <div class=\"flex gap-small\">\n <button \n @click=\"showDatePickerPopup = false\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n <button \n @click=\"applyDateFilter\"\n class=\"bg-main button w-100 flex-child-full\"\n >\n Apply\n </button>\n \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 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 emits = defineEmits(['page-loading', 'page-loaded']);\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 if (route.params?._id) {\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\n onMounted(async () => {\n emits('page-loading');\n await loadCategoryData();\n emits('page-loaded');\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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"}
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const Block = require("../../../../components/Block/Block.vue.cjs");
5
5
  const Field = require("../../../../components/Field/Field.vue.cjs");
6
- const Button = require("../../../../components/Button/Button.vue.cjs");
6
+ const Button = require("../../../../components/Button/Button.vue2.cjs");
7
7
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
8
8
  const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
9
9
  const IconDelete = require("../../../icons/navigation/IconDelete.vue.cjs");
@@ -1,7 +1,7 @@
1
1
  import { useModel, ref, reactive, createElementBlock, openBlock, Fragment, createVNode, withCtx, createCommentVNode, renderList, createElementVNode, toDisplayString, createTextVNode } from "vue";
2
2
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
- import _sfc_main$5 from "../../../../components/Button/Button.vue.js";
4
+ import _sfc_main$5 from "../../../../components/Button/Button.vue2.js";
5
5
  import _sfc_main$4 from "../../../../components/Popup/Popup.vue.js";
6
6
  import _sfc_main$2 from "../../../icons/navigation/IconEdit.vue.js";
7
7
  import _sfc_main$3 from "../../../icons/navigation/IconDelete.vue.js";
@@ -3,9 +3,9 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const Block = require("../../../../components/Block/Block.vue.cjs");
5
5
  const Field = require("../../../../components/Field/Field.vue.cjs");
6
- const Button = require("../../../../components/Button/Button.vue.cjs");
6
+ const Button = require("../../../../components/Button/Button.vue2.cjs");
7
7
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
8
- const Select = require("../../../../components/Select/Select.vue2.cjs");
8
+ const Select = require("../../../../components/Select/Select.vue.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 = {
@@ -1,9 +1,9 @@
1
1
  import { useModel, ref, reactive, createElementBlock, openBlock, Fragment, createVNode, withCtx, createCommentVNode, renderList, createElementVNode, toDisplayString, createTextVNode } from "vue";
2
2
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
3
3
  import Field from "../../../../components/Field/Field.vue.js";
4
- import _sfc_main$5 from "../../../../components/Button/Button.vue.js";
4
+ import _sfc_main$5 from "../../../../components/Button/Button.vue2.js";
5
5
  import _sfc_main$4 from "../../../../components/Popup/Popup.vue.js";
6
- import Select from "../../../../components/Select/Select.vue2.js";
6
+ import Select from "../../../../components/Select/Select.vue.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 = {
@@ -7,9 +7,9 @@ const variants_store = require("../../store/variants.store.cjs");
7
7
  const products = require("../../store/products.cjs");
8
8
  const Block = require("../../../../components/Block/Block.vue.cjs");
9
9
  const Field = require("../../../../components/Field/Field.vue.cjs");
10
- const Button = require("../../../../components/Button/Button.vue.cjs");
10
+ const Button = require("../../../../components/Button/Button.vue2.cjs");
11
11
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
12
- const Select = require("../../../../components/Select/Select.vue2.cjs");
12
+ const Select = require("../../../../components/Select/Select.vue.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");
@@ -5,9 +5,9 @@ import variantsStore from "../../store/variants.store.js";
5
5
  import { state } from "../../store/products.js";
6
6
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
7
7
  import Field from "../../../../components/Field/Field.vue.js";
8
- import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
8
+ import _sfc_main$3 from "../../../../components/Button/Button.vue2.js";
9
9
  import _sfc_main$7 from "../../../../components/Popup/Popup.vue.js";
10
- import Select from "../../../../components/Select/Select.vue2.js";
10
+ import Select from "../../../../components/Select/Select.vue.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";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
- const Spoiler = require("../../../../components/Spoiler/Spoiler.vue2.cjs");
4
+ const Spoiler = require("../../../../components/Spoiler/Spoiler.vue.cjs");
5
5
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
6
6
  const vueI18n = require("vue-i18n");
7
7
  const vueRouter = require("vue-router");
@@ -1,5 +1,5 @@
1
1
  import { ref, watch, onMounted, createElementBlock, openBlock, createVNode, createElementVNode, withCtx, Fragment, renderList, createBlock, toDisplayString, unref } from "vue";
2
- import _sfc_main$1 from "../../../../components/Spoiler/Spoiler.vue2.js";
2
+ import _sfc_main$1 from "../../../../components/Spoiler/Spoiler.vue.js";
3
3
  import _sfc_main$2 from "../../../../components/Checkbox/Checkbox.vue.js";
4
4
  import { useI18n } from "vue-i18n";
5
5
  import { useRoute, useRouter } from "vue-router";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const vueI18n = require("vue-i18n");
5
5
  const IconShopcartAdd = require("../../../icons/actions/IconShopcartAdd.vue.cjs");
6
- const Button = require("../../../../components/Button/Button.vue.cjs");
6
+ const Button = require("../../../../components/Button/Button.vue2.cjs");
7
7
  const ProductVariants = require("../blocks/ProductVariants.vue.cjs");
8
8
  const ProductDiscounts = require("../blocks/ProductDiscounts.vue.cjs");
9
9
  const QuantitySelector = require("../elements/QuantitySelector.vue.cjs");
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, createElementBlock, createCommentVNode, openBlock, createVNode, createElementVNode, toDisplayString, withCtx, unref, Fragment } from "vue";
2
2
  import { useI18n } from "vue-i18n";
3
3
  import _sfc_main$5 from "../../../icons/actions/IconShopcartAdd.vue.js";
4
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
4
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
5
5
  import _sfc_main$1 from "../blocks/ProductVariants.vue.js";
6
6
  import ProductDiscounts from "../blocks/ProductDiscounts.vue.js";
7
7
  import _sfc_main$3 from "../elements/QuantitySelector.vue.js";
@@ -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
- const Button = require("../../../../components/Button/Button.vue.cjs");
5
+ const Button = require("../../../../components/Button/Button.vue2.cjs");
6
6
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
7
7
  const CardProduct = require("../blocks/CardProduct.vue.cjs");
8
8
  const IconProducts = require("../../../icons/entities/IconProducts.vue.cjs");
@@ -1,6 +1,6 @@
1
1
  import { getCurrentInstance, ref, computed, createElementBlock, openBlock, createElementVNode, Fragment, renderList, createBlock, withCtx, createVNode, withModifiers, toDisplayString } from "vue";
2
2
  import { useRouter } from "vue-router";
3
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
3
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
4
4
  import _sfc_main$2 from "../../../../components/Checkbox/Checkbox.vue.js";
5
5
  import _sfc_main$1 from "../blocks/CardProduct.vue.js";
6
6
  import _sfc_main$3 from "../../../icons/entities/IconProducts.vue.js";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
- const Button = require("../../../../components/Button/Button.vue.cjs");
4
+ const Button = require("../../../../components/Button/Button.vue2.cjs");
5
5
  const Tab = require("../../../../components/Tab/Tab.vue2.cjs");
6
6
  const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
7
7
  const PlaceholderImage = require("../../../icons/placeholders/PlaceholderImage.vue.cjs");
@@ -1,5 +1,5 @@
1
1
  import { computed, ref, createElementBlock, openBlock, createElementVNode, createBlock, createCommentVNode, createVNode, unref, toDisplayString, Transition, withCtx, Fragment, renderList, createTextVNode } from "vue";
2
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
3
3
  import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
4
4
  import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
5
5
  import PlaceholderImage from "../../../icons/placeholders/PlaceholderImage.vue.js";
@@ -60,11 +60,9 @@ const actions = {
60
60
  }
61
61
  },
62
62
  // Method for updating order of multiple categories
63
- async updateOrder(categories) {
63
+ async updateOrder(data) {
64
64
  try {
65
- const response = await axiosInstance.default.post("/api/categories/updateOrder", {
66
- categories
67
- });
65
+ const response = await axiosInstance.default.post("/api/categories/updateOrder", data);
68
66
  return Promise.resolve(response.data);
69
67
  } catch (error) {
70
68
  globals.setError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"categories.cjs","sources":["../../../../../../src/modules/products/store/categories.js"],"sourcesContent":["// Dependencies\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\nimport { reactive, watch } from 'vue';\n\nimport $axios from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\n\n// State\nconst state = reactive({\n all: [],\n\n filter: {\n status: null,\n search: null,\n },\n current: {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n },\n});\n\n// Methods\nconst actions = {\n async read(options = {}) {\n try {\n const response = await $axios.get('/api/categories', { params: options });\n\n if (options._id) {\n state.current = { ...response.data[0] };\n return Promise.resolve(response.data[0]);\n } else {\n return Promise.resolve(response.data);\n }\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async create(category) {\n try {\n const response = await $axios.post('/api/categories/create', category);\n state.all.push(response.data);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async update(category) {\n try {\n const response = await $axios.post('/api/categories/update', category);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n // Method for updating order of multiple categories\n async updateOrder(categories) {\n try {\n const response = await $axios.post('/api/categories/updateOrder', {\n categories: categories,\n });\n\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async delete(id) {\n try {\n await $axios.post('/api/categories/delete', { _id: id });\n // Рекурсивная функция для удаления категории и её детей из дерева\n function removeFromTree(items) {\n return items.filter(item => {\n if (item._id === id) {\n return false;\n }\n if (item.children && item.children.length > 0) {\n item.children = removeFromTree(item.children);\n }\n return true;\n });\n }\n state.all = removeFromTree(state.all);\n return Promise.resolve();\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n clean() {\n state.current = {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n };\n },\n};\n\nconst history = [];\nhistory.push(state);\n\nwatch(\n state,\n newState => {\n history.push(newState);\n },\n { deep: true }\n);\n\nexport { actions, state };\n"],"names":["reactive","$axios","setError","watch"],"mappings":"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"}
1
+ {"version":3,"file":"categories.cjs","sources":["../../../../../../src/modules/products/store/categories.js"],"sourcesContent":["// Dependencies\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\nimport { reactive, watch } from 'vue';\n\nimport $axios from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\n\n// State\nconst state = reactive({\n all: [],\n\n filter: {\n status: null,\n search: null,\n },\n current: {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n },\n});\n\n// Methods\nconst actions = {\n async read(options = {}) {\n try {\n const response = await $axios.get('/api/categories', { params: options });\n\n if (options._id) {\n state.current = { ...response.data[0] };\n return Promise.resolve(response.data[0]);\n } else {\n return Promise.resolve(response.data);\n }\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async create(category) {\n try {\n const response = await $axios.post('/api/categories/create', category);\n state.all.push(response.data);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async update(category) {\n try {\n const response = await $axios.post('/api/categories/update', category);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n // Method for updating order of multiple categories\n async updateOrder(data) {\n try {\n const response = await $axios.post('/api/categories/updateOrder', data);\n\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async delete(id) {\n try {\n await $axios.post('/api/categories/delete', { _id: id });\n // Рекурсивная функция для удаления категории и её детей из дерева\n function removeFromTree(items) {\n return items.filter(item => {\n if (item._id === id) {\n return false;\n }\n if (item.children && item.children.length > 0) {\n item.children = removeFromTree(item.children);\n }\n return true;\n });\n }\n state.all = removeFromTree(state.all);\n return Promise.resolve();\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n clean() {\n state.current = {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n };\n },\n};\n\nconst history = [];\nhistory.push(state);\n\nwatch(\n state,\n newState => {\n history.push(newState);\n },\n { deep: true }\n);\n\nexport { actions, state };\n"],"names":["reactive","$axios","setError","watch"],"mappings":"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"}
@@ -58,11 +58,9 @@ const actions = {
58
58
  }
59
59
  },
60
60
  // Method for updating order of multiple categories
61
- async updateOrder(categories) {
61
+ async updateOrder(data) {
62
62
  try {
63
- const response = await $axios.post("/api/categories/updateOrder", {
64
- categories
65
- });
63
+ const response = await $axios.post("/api/categories/updateOrder", data);
66
64
  return Promise.resolve(response.data);
67
65
  } catch (error) {
68
66
  setError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"categories.js","sources":["../../../../../../src/modules/products/store/categories.js"],"sourcesContent":["// Dependencies\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\nimport { reactive, watch } from 'vue';\n\nimport $axios from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\n\n// State\nconst state = reactive({\n all: [],\n\n filter: {\n status: null,\n search: null,\n },\n current: {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n },\n});\n\n// Methods\nconst actions = {\n async read(options = {}) {\n try {\n const response = await $axios.get('/api/categories', { params: options });\n\n if (options._id) {\n state.current = { ...response.data[0] };\n return Promise.resolve(response.data[0]);\n } else {\n return Promise.resolve(response.data);\n }\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async create(category) {\n try {\n const response = await $axios.post('/api/categories/create', category);\n state.all.push(response.data);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async update(category) {\n try {\n const response = await $axios.post('/api/categories/update', category);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n // Method for updating order of multiple categories\n async updateOrder(categories) {\n try {\n const response = await $axios.post('/api/categories/updateOrder', {\n categories: categories,\n });\n\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async delete(id) {\n try {\n await $axios.post('/api/categories/delete', { _id: id });\n // Рекурсивная функция для удаления категории и её детей из дерева\n function removeFromTree(items) {\n return items.filter(item => {\n if (item._id === id) {\n return false;\n }\n if (item.children && item.children.length > 0) {\n item.children = removeFromTree(item.children);\n }\n return true;\n });\n }\n state.all = removeFromTree(state.all);\n return Promise.resolve();\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n clean() {\n state.current = {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n };\n },\n};\n\nconst history = [];\nhistory.push(state);\n\nwatch(\n state,\n newState => {\n history.push(newState);\n },\n { deep: true }\n);\n\nexport { actions, state };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"categories.js","sources":["../../../../../../src/modules/products/store/categories.js"],"sourcesContent":["// Dependencies\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\nimport { reactive, watch } from 'vue';\n\nimport $axios from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\n\n// State\nconst state = reactive({\n all: [],\n\n filter: {\n status: null,\n search: null,\n },\n current: {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n },\n});\n\n// Methods\nconst actions = {\n async read(options = {}) {\n try {\n const response = await $axios.get('/api/categories', { params: options });\n\n if (options._id) {\n state.current = { ...response.data[0] };\n return Promise.resolve(response.data[0]);\n } else {\n return Promise.resolve(response.data);\n }\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async create(category) {\n try {\n const response = await $axios.post('/api/categories/create', category);\n state.all.push(response.data);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async update(category) {\n try {\n const response = await $axios.post('/api/categories/update', category);\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n // Method for updating order of multiple categories\n async updateOrder(data) {\n try {\n const response = await $axios.post('/api/categories/updateOrder', data);\n\n return Promise.resolve(response.data);\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async delete(id) {\n try {\n await $axios.post('/api/categories/delete', { _id: id });\n // Рекурсивная функция для удаления категории и её детей из дерева\n function removeFromTree(items) {\n return items.filter(item => {\n if (item._id === id) {\n return false;\n }\n if (item.children && item.children.length > 0) {\n item.children = removeFromTree(item.children);\n }\n return true;\n });\n }\n state.all = removeFromTree(state.all);\n return Promise.resolve();\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n clean() {\n state.current = {\n order: 1,\n photo: '',\n name: '',\n slug: '',\n url: '',\n level: 0,\n status: 'draft',\n creator: null,\n owner: null,\n parent: null,\n children: [],\n filters: [],\n translations: [],\n };\n },\n};\n\nconst history = [];\nhistory.push(state);\n\nwatch(\n state,\n newState => {\n history.push(newState);\n },\n { deep: true }\n);\n\nexport { actions, state };\n"],"names":[],"mappings":"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"}
@@ -24,7 +24,12 @@ const state = vue.reactive({
24
24
  discounts: [],
25
25
  included: null,
26
26
  ingredients: [],
27
- description: ""
27
+ description: "",
28
+ defaultVariant: {
29
+ price: null,
30
+ quantity: 1,
31
+ unit: "pcs"
32
+ }
28
33
  },
29
34
  filter: {
30
35
  active: false,
@@ -202,7 +207,12 @@ const mutations = {
202
207
  recommended: [],
203
208
  discounts: [],
204
209
  ingredients: [],
205
- description: ""
210
+ description: "",
211
+ defaultVariant: {
212
+ price: null,
213
+ quantity: 1,
214
+ unit: "pcs"
215
+ }
206
216
  };
207
217
  }
208
218
  };