@ozdao/martyrs 0.2.562 → 0.2.563

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 (182) hide show
  1. package/dist/{abac-DC2x92Pa.js → abac-DYoheWuc.js} +2 -1
  2. package/dist/{core.logger-VRHh-WUW.js → core.cache-DALYFDdy.js} +10 -59
  3. package/dist/core.logger-C3q8A9dl.js +51 -0
  4. package/dist/core.server.js +1 -1
  5. package/dist/{crud-DFFgLl09.js → crud-C7FSTUes.js} +2 -1
  6. package/dist/inventory.server.js +4 -3
  7. package/dist/{main-TV4u6Jux.js → main-CmjWiDVF.js} +402 -402
  8. package/dist/marketplace.server.js +389 -0
  9. package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +3 -3
  10. package/dist/martyrs/src/components/Button/Button.vue2.js.map +1 -0
  11. package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +2 -2
  12. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
  13. package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
  14. package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
  15. package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
  16. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
  17. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
  18. package/dist/martyrs/src/components/Loader/{Loader.vue2.js → Loader.vue.js} +2 -2
  19. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -0
  20. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
  21. package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
  22. package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
  23. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
  24. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue.js → SelectMulti.vue2.js} +2 -2
  25. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.js.map +1 -0
  26. package/dist/martyrs/src/components/Tab/{Tab.vue2.js → Tab.vue.js} +2 -2
  27. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +1 -0
  28. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
  29. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  30. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
  31. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +3 -3
  32. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +3 -3
  33. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
  34. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  36. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +2 -2
  38. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +3 -3
  39. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +3 -3
  40. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +3 -3
  41. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +2 -2
  42. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +1 -1
  43. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
  44. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
  45. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
  46. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
  47. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
  48. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSearch.vue.js +1 -1
  49. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +1 -1
  50. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
  51. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +2 -2
  52. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +2 -2
  53. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +2 -2
  54. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
  55. package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue2.js → Filters.vue.js} +2 -2
  56. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +1 -0
  57. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
  58. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterRange.vue.js +1 -1
  59. package/dist/martyrs/src/modules/core/views/components/sections/filters/FiltersGroup.vue.js +1 -3
  60. package/dist/martyrs/src/modules/core/views/components/sections/filters/FiltersGroup.vue.js.map +1 -1
  61. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  62. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  63. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +5 -5
  64. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +2 -2
  65. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +3 -3
  66. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  67. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +2 -2
  68. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  69. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  70. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +5 -5
  71. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +3 -3
  72. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  73. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  74. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +3 -3
  75. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +3 -3
  76. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.js +1 -1
  77. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.js.map +1 -1
  78. package/dist/martyrs/src/modules/marketplace/marketplace.client.js +5 -9
  79. package/dist/martyrs/src/modules/marketplace/marketplace.client.js.map +1 -1
  80. package/dist/martyrs/src/modules/marketplace/views/components/{layouts → pages}/Marketplace.vue.js +16 -20
  81. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js.map +1 -0
  82. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  83. package/dist/martyrs/src/modules/marketplace/views/router/marketplace.router.js +39 -0
  84. package/dist/martyrs/src/modules/marketplace/views/router/marketplace.router.js.map +1 -0
  85. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  86. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  87. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  88. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  89. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +3 -3
  90. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +4 -4
  91. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +2 -2
  92. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  93. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +3 -3
  94. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
  95. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +2 -2
  96. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  97. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +2 -2
  98. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +2 -2
  99. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +2 -2
  100. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  101. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  102. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
  103. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +3 -3
  104. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +3 -3
  105. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +2 -2
  106. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
  107. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  108. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +3 -3
  109. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  110. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  111. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  112. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -3
  113. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  114. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  115. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  116. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
  117. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +2 -2
  118. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  119. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +5 -5
  120. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  121. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +3 -3
  122. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +3 -3
  123. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +4 -4
  124. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +2 -2
  125. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +2 -2
  126. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  127. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
  128. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  129. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +5 -5
  130. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
  131. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +6 -6
  132. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
  133. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -3
  134. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +2 -2
  135. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
  136. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +4 -4
  137. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  138. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  139. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
  140. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  141. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  142. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
  143. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
  144. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +2 -2
  145. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  146. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  147. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +4 -4
  148. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +3 -3
  149. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
  150. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +2 -2
  151. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
  152. package/dist/martyrs.es.js +1 -1
  153. package/dist/music.server.js +4 -3
  154. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
  155. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
  156. package/dist/orders.server.js +2 -2
  157. package/dist/organizations.server.js +9 -219
  158. package/dist/products.server.js +4 -3
  159. package/dist/queryProcessorOrganizations-BB11WFpc.js +221 -0
  160. package/dist/rents.server.js +2 -1
  161. package/dist/{web-Cq5tyhkl.js → web-cNKIl_cL.js} +1 -1
  162. package/package.json +1 -1
  163. package/src/modules/core/views/components/sections/filters/FiltersGroup.vue +3 -4
  164. package/src/modules/landing/components/sections/SectionFeatures.vue +1 -1
  165. package/src/modules/marketplace/marketplace.client.js +3 -10
  166. package/src/modules/marketplace/views/components/{layouts → pages}/Marketplace.vue +7 -16
  167. package/src/modules/marketplace/views/router/marketplace.router.js +37 -45
  168. package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
  169. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
  170. package/dist/martyrs/src/components/Field/Field.vue2.js.map +0 -1
  171. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +0 -1
  172. package/dist/martyrs/src/components/Select/Select.vue2.js.map +0 -1
  173. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +0 -1
  174. package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +0 -1
  175. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +0 -1
  176. package/dist/martyrs/src/modules/marketplace/marketplace.router.js +0 -63
  177. package/dist/martyrs/src/modules/marketplace/marketplace.router.js.map +0 -1
  178. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +0 -1
  179. package/dist/martyrs/src/modules/marketplace/views/components/pages/Catalog.vue.js +0 -73
  180. package/dist/martyrs/src/modules/marketplace/views/components/pages/Catalog.vue.js.map +0 -1
  181. package/src/modules/marketplace/marketplace.router.js +0 -66
  182. package/src/modules/marketplace/views/components/pages/Catalog.vue +0 -74
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tab.vue2.js","sources":["../../../../../src/components/Tab/Tab.vue"],"sourcesContent":["<template>\n <div class=\"flex-nowrap flex-v-center flex pos-relative\">\n <button \n v-for=\"(tab, index) in tabs\" \n :key=\"index\" \n @click=\"handleTabClick(index, tab)\" \n class=\"z-index-1 t-center cursor-pointer\"\n :style=\"isSelected(index, tab) ? 'background: rgb(var(--main)) !important' : ''\"\n :class=\"[\n isSelected(index, tab) ? 'bg-main' : '',\n replaceClasses('pd-small pd-r-medium pd-l-medium w-max pd-small radius-small', classTab)\n ]\"\n >\n {{tab.name || tab.label}}\n </button>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { replaceClasses } = useGlobalMixins();\nconst emit = defineEmits(['update:selected', 'tab-click']);\n\nconst props = defineProps({\n tabs: Array,\n classTab: String,\n selected: [String, Number],\n modelValue: [String, Number],\n callback: Function\n})\n\nconst selectedTab = ref(0)\n\n// Handle both v-model and selected prop for backward compatibility\nconst updateSelectedIndex = () => {\n if (props.modelValue !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.modelValue)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n } else if (props.selected !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.selected)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n }\n}\n\n// Initial setup\nupdateSelectedIndex()\n\n// Watch for changes in selected or modelValue props\nwatch(() => props.selected, updateSelectedIndex)\nwatch(() => props.modelValue, updateSelectedIndex)\n\n// Check if tab is selected\nconst isSelected = (index, tab) => {\n if (props.modelValue !== undefined) {\n return tab.value === props.modelValue\n } else if (props.selected !== undefined) {\n return tab.value === props.selected\n }\n return index === selectedTab.value\n}\n\n// Handle tab click\nfunction handleTabClick(index, tab) {\n selectedTab.value = index\n \n // Emit both events for flexibility\n emit('update:selected', tab.value)\n emit('tab-click', { index, tab })\n \n // For v-model support\n if (props.modelValue !== undefined) {\n emit('update:modelValue', tab.value)\n }\n \n // Call callback if provided\n if (props.callback) props.callback(tab)\n}\n</script>\n\n<style lang=\"scss\">\n.tab-selector {\n position: absolute;\n width: 50%;\n height: 100%;\n left: 0;\n top: 0;\n z-index: 0;\n transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsBA,UAAM,EAAE,eAAc,IAAK,gBAAe;AAC1C,UAAM,OAAO;AAEb,UAAM,QAAQ;AAQd,UAAM,cAAc,IAAI,CAAC;AAGzB,UAAM,sBAAsB,MAAM;AAChC,UAAI,MAAM,eAAe,QAAW;AAClC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,UAAU;AAChF,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QACtB;AAAA,MACF,WAAW,MAAM,aAAa,QAAW;AACvC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,QAAQ;AAC9E,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAGA,wBAAmB;AAGnB,UAAM,MAAM,MAAM,UAAU,mBAAmB;AAC/C,UAAM,MAAM,MAAM,YAAY,mBAAmB;AAGjD,UAAM,aAAa,CAAC,OAAO,QAAQ;AACjC,UAAI,MAAM,eAAe,QAAW;AAClC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC7B,WAAW,MAAM,aAAa,QAAW;AACvC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC7B;AACA,aAAO,UAAU,YAAY;AAAA,IAC/B;AAGA,aAAS,eAAe,OAAO,KAAK;AAClC,kBAAY,QAAQ;AAGpB,WAAK,mBAAmB,IAAI,KAAK;AACjC,WAAK,aAAa,EAAE,OAAO,IAAG,CAAE;AAGhC,UAAI,MAAM,eAAe,QAAW;AAClC,aAAK,qBAAqB,IAAI,KAAK;AAAA,MACrC;AAGA,UAAI,MAAM,SAAU,OAAM,SAAS,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Filters.vue2.js","sources":["../../../../../../../../src/modules/core/views/components/sections/Filters.vue"],"sourcesContent":["<template>\n <div class=\"flex o-x-scroll scroll-hide t-nowrap gap-thin\">\n <!-- All Filters Button -->\n <button\n @click=\"showAllFilters = true\"\n class=\"pd-small radius-medium bg-light flex-v-center flex gap-micro cursor-pointer\"\n :class=\"{ 'bg-main': activeFiltersCount > 0 }\"\n >\n <IconFilter class=\"i-regular\" />\n <span class=\"h-1r\"></span>\n <span v-if=\"activeFiltersCount\">{{ activeFiltersCount }}</span>\n </button>\n\n <!-- Individual Filter Buttons -->\n <button\n v-for=\"filter in filters\"\n :key=\"filter.value\"\n @click=\"openFilter(filter.value)\"\n class=\"pd-small radius-medium bg-light cursor-pointer flex-v-center flex gap-micro\"\n :class=\"{ 'selected bg-main': isFilterActive(filter) }\"\n >\n <IconCalendar v-if=\"filter.type === 'date'\" class=\"mn-r-micro i-regular\" />\n <span class=\"t-nowrap\">{{ filter.type === 'date' && getFilterValue(filter) ? formatFilterValue(filter) : filter.title }}</span>\n <span v-if=\"getFilterValue(filter) && filter.type !== 'date'\" class=\"mn-l-micro\">\n {{ formatFilterValue(filter) }}\n </span>\n </button>\n\n <!-- All Filters Popup -->\n <Popup\n :isPopupOpen=\"showAllFilters\"\n @close-popup=\"closeAllFilters\"\n :align=\"isPhone() ? 'bottom center' : 'center center'\"\n class=\"w-min-20r bg-white radius-medium mobile:radius-zero mobile:radius-tr-medium mobile:radius-tl-medium mobile:w-100 pd-medium\"\n >\n <FiltersGroup\n :filters=\"filters\"\n v-model:selected=\"tempSelected\"\n :immediate=\"false\"\n :showHeader=\"true\"\n :showApplyButton=\"true\"\n :showResetButton=\"true\"\n @update:selected=\"applyAllFilters\"\n />\n </Popup>\n\n <!-- Individual Filter Popups -->\n <Popup\n v-for=\"filter in filters\"\n :key=\"`popup-${filter.value}`\"\n :isPopupOpen=\"individualPopups[filter.value]\"\n @close-popup=\"cancelFilter(filter.value)\"\n :align=\"isPhone() ? 'bottom center' : 'center center'\"\n class=\"bg-white radius-medium mobile:radius-zero mobile:radius-tr-medium mobile:radius-tl-medium mobile:w-100 pd-medium\"\n >\n <h4 class=\"mn-b-medium\">{{ filter.title }}</h4>\n\n <!-- Checkbox Filter -->\n <FilterCheckbox\n v-if=\"filter.type === 'checkbox'\"\n v-model=\"tempSelected[filter.value]\"\n :options=\"filter.options\"\n />\n\n <!-- Range Filter -->\n <FilterRange\n v-else-if=\"filter.type === 'range'\"\n v-model=\"tempSelected[filter.value]\"\n :minPlaceholder=\"filter.minPlaceholder || 'Min'\"\n :maxPlaceholder=\"filter.maxPlaceholder || 'Max'\"\n :label=\"filter.label\"\n />\n\n <!-- Date Filter -->\n <div v-else-if=\"filter.type === 'date'\">\n <div class=\"mn-t-small\">\n <Calendar\n v-model:date=\"tempSelected[filter.value]\"\n :allowRange=\"true\"\n :disablePastDates=\"true\"\n class=\"bg-light radius-small\"\n />\n </div>\n </div>\n\n <!-- Radio/Options Filter -->\n <FilterOptions\n v-else-if=\"filter.type === 'radio'\"\n v-model=\"tempSelected[filter.value]\"\n :options=\"filter.options\"\n />\n\n <div class=\"flex gap-thin mn-t-medium\">\n <button\n @click=\"cancelFilter(filter.value)\"\n class=\"bg-light button flex-child-full\"\n >\n Cancel\n </button>\n <button\n @click=\"applyFilter(filter.value)\"\n class=\"bg-main w-100 button flex-child-full\"\n >\n Apply\n </button>\n </div>\n </Popup>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, reactive, watch } from 'vue'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\nimport FiltersGroup from './filters/FiltersGroup.vue'\nimport FilterCheckbox from './filters/FilterCheckbox.vue'\nimport FilterRange from './filters/FilterRange.vue'\nimport FilterDateRange from './filters/FilterDateRange.vue'\nimport FilterOptions from './filters/FilterOptions.vue'\nimport IconFilter from '@martyrs/src/modules/icons/navigation/IconFilter.vue'\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue'\nimport IconCalendar from '@martyrs/src/modules/icons/entities/IconCalendar.vue'\n\nconst filters = defineModel('filters', {\n type: Array,\n required: true\n})\n\nconst selected = defineModel('selected', {\n type: Object,\n default: () => ({})\n})\n\nconst emit = defineEmits(['select'])\n\nconst { formatDate, returnCurrency } = useGlobalMixins()\n\n// State\nconst showAllFilters = ref(false)\nconst individualPopups = reactive({})\nconst tempSelected = reactive({})\nconst tempDateRange = ref(null)\n\n// Initialize popups and temp values\nwatch(filters, (newFilters) => {\n newFilters.forEach(filter => {\n individualPopups[filter.value] = false\n \n if (!tempSelected[filter.value]) {\n if (filter.type === 'checkbox') {\n tempSelected[filter.value] = [...(selected.value[filter.value] || [])]\n } else if (filter.type === 'range') {\n tempSelected[filter.value] = { ...(selected.value[filter.value] || { min: '', max: '' }) }\n } else if (filter.type === 'date') {\n tempSelected[filter.value] = selected.value[filter.value] || null\n } else {\n tempSelected[filter.value] = selected.value[filter.value] || null\n }\n }\n })\n}, { immediate: true, deep: true })\n\n// Sync selected to tempSelected\nwatch(selected, (newSelected) => {\n Object.keys(newSelected).forEach(key => {\n const filter = filters.value.find(f => f.value === key)\n if (filter) {\n if (filter.type === 'checkbox') {\n tempSelected[key] = [...(newSelected[key] || [])]\n } else if (filter.type === 'range') {\n tempSelected[key] = { ...(newSelected[key] || { min: '', max: '' }) }\n } else {\n tempSelected[key] = newSelected[key]\n }\n }\n })\n}, { deep: true })\n\n// Computed\nconst activeFiltersCount = computed(() => {\n return Object.entries(selected.value).filter(([key, value]) => {\n if (Array.isArray(value)) return value.length > 0\n if (typeof value === 'object' && value !== null) {\n return value.min || value.max\n }\n return value !== null && value !== undefined\n }).length\n})\n\n// Methods\nconst openFilter = (filterValue) => {\n individualPopups[filterValue] = true\n}\n\nconst isFilterActive = (filter) => {\n const value = selected.value[filter.value]\n if (!value) return false\n if (Array.isArray(value)) return value.length > 0\n if (filter.type === 'range') return value.min || value.max\n return true\n}\n\nconst getFilterValue = (filter) => {\n const value = selected.value[filter.value]\n if (!value) return false\n \n if (filter.type === 'range') {\n return value.min || value.max\n }\n \n if (filter.type === 'date') {\n return value && value.start && value.end\n }\n \n if (Array.isArray(value)) {\n return value.length > 0\n }\n \n return value\n}\n\nconst formatFilterValue = (filter) => {\n const value = selected.value[filter.value]\n if (!value) return ''\n \n if (Array.isArray(value)) {\n return `(${value.length})`\n }\n \n if (filter.type === 'range') {\n if (!value.min && !value.max) return ''\n return `${value.min || '0'}-${value.max || '∞'}`\n }\n \n if (filter.type === 'date') {\n if (!value || !value.start || !value.end) return ''\n return `${formatDate(value.start, { dayMonth: true, language: 'en' })} - ${formatDate(value.end, { dayMonth: true, language: 'en' })}`\n }\n \n if (filter.type === 'radio') {\n const option = filter.options.find(o => o.value === value)\n return option ? `(${option.label})` : ''\n }\n \n return ''\n}\n\nconst applyFilter = (filterValue) => {\n selected.value[filterValue] = tempSelected[filterValue]\n individualPopups[filterValue] = false\n emit('select', { filter: filterValue, value: tempSelected[filterValue] })\n}\n\nconst cancelFilter = (filterValue) => {\n const filter = filters.value.find(f => f.value === filterValue)\n if (filter) {\n if (filter.type === 'checkbox') {\n tempSelected[filterValue] = [...(selected.value[filterValue] || [])]\n } else if (filter.type === 'range') {\n tempSelected[filterValue] = { ...(selected.value[filterValue] || { min: '', max: '' }) }\n } else if (filter.type === 'date') {\n tempSelected[filterValue] = selected.value[filterValue] || null\n } else {\n tempSelected[filterValue] = selected.value[filterValue] || null\n }\n }\n individualPopups[filterValue] = false\n}\n\nconst applyAllFilters = (newValues) => {\n Object.entries(newValues).forEach(([key, value]) => {\n if (selected.value[key] !== value) {\n selected.value[key] = value\n emit('select', { filter: key, value })\n }\n })\n showAllFilters.value = false\n}\n\nconst closeAllFilters = () => {\n showAllFilters.value = false\n}\n</script>\n\n<style scoped>\n.filters-content {\n max-height: 60vh;\n overflow-y: auto;\n}\n</style>"],"names":["_useModel"],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- function buildMarketplaceTree(options = {}) {
2
- const layoutComponent = options.layoutComponent || (() => import(
3
- /* webpackChunkName: 'marketplace-layout' */
4
- "./views/components/layouts/Marketplace.vue.js"
5
- ));
6
- const catalogComponent = options.catalogComponent || (() => import(
7
- /* webpackChunkName: 'marketplace-catalog' */
8
- "./views/components/pages/Catalog.vue.js"
9
- ));
10
- const buildName = (suffix) => {
11
- const prefix = options.routeNamePrefix || "";
12
- return suffix ? `${prefix}${suffix}` : prefix || void 0;
13
- };
14
- return [
15
- {
16
- path: "",
17
- name: buildName("Marketplace") || "Marketplace",
18
- component: layoutComponent,
19
- meta: {
20
- title: {
21
- en: "Marketplace",
22
- ru: "Маркетплейс"
23
- }
24
- },
25
- children: [
26
- {
27
- path: ":country?",
28
- component: catalogComponent,
29
- children: [
30
- {
31
- path: ":state?",
32
- name: buildName("State") || "State",
33
- component: catalogComponent,
34
- children: [
35
- {
36
- path: ":city?",
37
- name: buildName("City") || "City",
38
- component: catalogComponent
39
- }
40
- ]
41
- }
42
- ]
43
- }
44
- ]
45
- }
46
- ];
47
- }
48
- function getRoutes(options = {}) {
49
- const route = options.route || "Home";
50
- const routes = [];
51
- routes.push({
52
- parentName: route,
53
- config: {
54
- basePath: options.basePath || "marketplace",
55
- routes: buildMarketplaceTree(options)
56
- }
57
- });
58
- return routes;
59
- }
60
- export {
61
- getRoutes
62
- };
63
- //# sourceMappingURL=marketplace.router.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marketplace.router.js","sources":["../../../../../src/modules/marketplace/marketplace.router.js"],"sourcesContent":["function buildMarketplaceTree(options = {}) {\n const layoutComponent = options.layoutComponent || (() => import(\n /* webpackChunkName: 'marketplace-layout' */\n './views/components/layouts/Marketplace.vue'\n ));\n const catalogComponent = options.catalogComponent || (() => import(\n /* webpackChunkName: 'marketplace-catalog' */\n './views/components/pages/Catalog.vue'\n ));\n\n const buildName = (suffix) => {\n const prefix = options.routeNamePrefix || '';\n return suffix ? `${prefix}${suffix}` : prefix || undefined;\n };\n\n return [\n {\n path: '',\n name: buildName('Marketplace') || 'Marketplace',\n component: layoutComponent,\n meta: {\n title: {\n en: 'Marketplace',\n ru: 'Маркетплейс',\n },\n },\n children: [\n {\n path: ':country?',\n component: catalogComponent,\n children: [\n {\n path: ':state?',\n name: buildName('State') || 'State',\n component: catalogComponent,\n children: [\n {\n path: ':city?',\n name: buildName('City') || 'City',\n component: catalogComponent,\n },\n ],\n },\n ],\n },\n ],\n },\n ];\n}\n\nexport function getRoutes(options = {}) {\n const route = options.route || 'Home';\n const routes = [];\n\n routes.push({\n parentName: route,\n config: {\n basePath: options.basePath || 'marketplace',\n routes: buildMarketplaceTree(options),\n },\n });\n\n return routes;\n}\n\nexport default { getRoutes };\n"],"names":[],"mappings":"AAAA,SAAS,qBAAqB,UAAU,IAAI;AAC1C,QAAM,kBAAkB,QAAQ,oBAAoB,MAAM;AAAA;AAAA,IAExD;AAAA,EACJ;AACE,QAAM,mBAAmB,QAAQ,qBAAqB,MAAM;AAAA;AAAA,IAE1D;AAAA,EACJ;AAEE,QAAM,YAAY,CAAC,WAAW;AAC5B,UAAM,SAAS,QAAQ,mBAAmB;AAC1C,WAAO,SAAS,GAAG,MAAM,GAAG,MAAM,KAAK,UAAU;AAAA,EACnD;AAEA,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM,UAAU,aAAa,KAAK;AAAA,MAClC,WAAW;AAAA,MACX,MAAM;AAAA,QACJ,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,QACd;AAAA,MACA;AAAA,MACM,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,WAAW;AAAA,UACX,UAAU;AAAA,YACR;AAAA,cACE,MAAM;AAAA,cACN,MAAM,UAAU,OAAO,KAAK;AAAA,cAC5B,WAAW;AAAA,cACX,UAAU;AAAA,gBACR;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM,UAAU,MAAM,KAAK;AAAA,kBAC3B,WAAW;AAAA,gBAC7B;AAAA,cACA;AAAA,YACA;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAAA,EACA;AACA;AAEO,SAAS,UAAU,UAAU,IAAI;AACtC,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,SAAS,CAAA;AAEf,SAAO,KAAK;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN,UAAU,QAAQ,YAAY;AAAA,MAC9B,QAAQ,qBAAqB,OAAO;AAAA,IAC1C;AAAA,EACA,CAAG;AAED,SAAO;AACT;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Marketplace.vue.js","sources":["../../../../../../../../src/modules/marketplace/views/components/layouts/Marketplace.vue"],"sourcesContent":["<template>\n <div class=\"pos-relative\">\n <header class=\"pd-medium mn-b-thin\">\n <h2 class=\"\">\n <span class=\"\">Weed Deliveries in </span>\n\n <span\n v-if=\"localPosition.city || localPosition.state || localPosition.country\"\n @click=\"a => { store.core.state.isOpenLocationPopup = true }\"\n class=\"t-main t-semi cursor-pointer \"\n >\n <template v-if=\"localPosition.city\">{{localPosition.city}}, </template>\n <template v-if=\"localPosition.state\">{{localPosition.state}}, </template>\n <template v-if=\"localPosition.country\">{{localPosition.country}}</template>\n </span>\n\n <span v-else @click=\"a => { store.core.state.isOpenLocationPopup = true }\" class=\"t-main t-semi cursor-pointer\">The World</span>\n </h2>\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 <!-- Location Filter -->\n <div class=\"mn-b-medium\">\n <h4 class=\"mn-b-small\">Location</h4>\n <Field\n v-model=\"searchLocation\"\n placeholder=\"Search location...\"\n type=\"text\"\n class=\"w-100 bg-light pd-small radius-small mn-b-small\"\n />\n <div class=\"gap-micro\">\n <div\n v-for=\"location in marketplace.state.locationOptions\"\n :key=\"location.label\"\n @click=\"router.push(location.path)\"\n class=\"cursor-pointer hover-t-underline mn-b-regular transition-all\"\n >\n {{ location.label }}\n </div>\n </div>\n </div>\n\n <!-- Filters Group -->\n <FiltersGroup\n :filters=\"marketplace.state.filter.options\"\n v-model:selected=\"selectedFilters\"\n :immediate=\"true\"\n :showHeader=\"false\"\n :showApplyButton=\"false\"\n :showResetButton=\"true\"\n />\n </div>\n </div>\n\n <div class=\"w-100 rows-1 pd-thin pos-relative o-hidden\">\n <Feed\n :search=\"true\"\n v-model:sort=\"marketplace.state.sort\"\n :showLoadMore=\"false\"\n :states=\"{\n empty: {\n title: 'No Shops Found',\n description: 'Currently, there are no shops.'\n }\n }\"\n :store=\"{\n read: (options) => marketplaceStore.readCatalog(options)\n }\"\n :options=\"{\n country: localPosition.country,\n state: localPosition.state,\n city: localPosition.city,\n location: localLocation?.location,\n lookup: ['products','spots'],\n contain: ['products'],\n priceMin: selectedFilters.price?.min,\n priceMax: selectedFilters.price?.max,\n delivery: selectedFilters.delivery?.length > 0 ? selectedFilters.delivery.join(',') : undefined,\n payment: selectedFilters.payment?.length > 0 ? selectedFilters.payment.join(',') : undefined\n }\"\n v-slot=\"{\n items\n }\"\n class=\"rows-1 gap-thin\"\n >\n <div class=\"mn-b-thin mobile-only\">\n <Filters\n v-model:filters=\"marketplace.state.filter.options\"\n v-model:selected=\"selectedFilters\"\n class=\"\"\n />\n </div>\n\n <CardOrganization\n v-for=\"organization in items\"\n :key=\"organization._id\"\n :organization=\"organization\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"true\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </Feed>\n\n </div>\n </div>\n </div>\n\n</template>\n\n\n<script setup=\"props\">\n // Import libs\n import { onMounted, watch, ref } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n import { useI18n } from 'vue-i18n'\n\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n import Filters from '@martyrs/src/modules/core/views/components/sections/Filters.vue'\n import FiltersGroup from '@martyrs/src/modules/core/views/components/sections/filters/FiltersGroup.vue'\n import Field from \"@martyrs/src/components/Field/Field.vue\"\n\n import CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\n import { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\n import * as organization from '@martyrs/src/modules/organizations/store/organizations.js'\n import * as marketplace from '../../store/marketplace'\n import marketplaceStore from '../../store/marketplace'\n import { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js'\n\n const route = useRoute()\n const router = useRouter()\n const store = useStore()\n const { returnCurrency } = useGlobalMixins()\n\n const localPosition = ref({\n city: null,\n state: null,\n country: null\n });\n\n const localLocation = ref(null);\n // Location filter\n const searchLocation = ref('');\n\n const selectedFilters = ref({\n price: { min: null, max: null },\n delivery: [],\n payment: [],\n availabilityDate: null,\n rating: null\n })\n\n\n if (route.params) {\n // Загружаем новые значения из параметров маршрута в состояние\n let newState = {\n country: denormalizeUrlParam(route.params.country),\n state: denormalizeUrlParam(route.params.state),\n city: denormalizeUrlParam(route.params.city),\n };\n\n\t // Обновляем глобальное состояние\n\t localPosition.value = newState;\n\t}\n\n\tif (route.query) {\n\t \tconst query = route.query;\n\n\t\tmarketplace.state.filter.selected.categories = query.categories ? query.categories.split(',') : [];\n\t\tmarketplace.state.filter.selected.prices = query.prices ? query.prices.split(',') : [];\n\t\tmarketplace.state.filter.selected.delivery = query.delivery ? query.delivery.split(',') : [];\n\t}\n\n\tif (route.query.sortParam) marketplace.state.sort.param = route.query.sortParam\n\tif (route.query.sortOrder) marketplace.state.sort.order = route.query.sortOrder\n\n function denormalizeUrlParam(param) {\n return param\n .replace(/-/g, ' ')\n .replace(/\\b\\w/g, l => l.toUpperCase());\n }\n\n function normalizeUrlParam(param) {\n return param\n .toLowerCase()\n .replace(/ /g, '-')\n .replace(/[^a-z0-9-]/g, '');\n }\n\n\twatch(() => marketplace.state.sort, (newSortValue, oldSortValue) => {\n\t\tlet query = { ...route.query}\n\t\t\n\t\tquery.sortParam = newSortValue.param\n\t\tquery.sortOrder = newSortValue.order\n\t \n\t // replace the current route\n\t router.replace({ query });\n\t}, { deep: true });\n\n\n\twatch(() => marketplace.state.filter.selectedFilters, (newFilterValue, oldFilterValue) => {\n\t // Переводим фильтр в формат query\n\t const query = { ...route.query };\n\n\t // Удаляем старые значения фильтра из query\n\t Object.keys(oldFilterValue).forEach(key => {\n\t if (query[key]) {\n\t delete query[key];\n\t }\n\t });\n\n\t // Добавляем новые значения фильтра в query\n\t const newQueryValues = Object.fromEntries(\n\t Object.entries(newFilterValue)\n\t .filter(([key, value]) => Array.isArray(value) && value.length > 0)\n\t .map(([key, value]) => [key, value.join(',')])\n\t );\n\n\t delete query.options;\n\t Object.assign(query, newQueryValues);\n\n\t // Обновляем маршрут с новым query\n\t router.replace({ query });\n\t}, { deep: true })\n\n\twatch(() => store.core.state.position, (newPosition) => {\n // get the current route\n const currentRoute = { ...router.currentRoute.value };\n\t \n // create new parameters based on globals state position\n let newParams = {\n country: normalizeUrlParam(newPosition.country),\n state: normalizeUrlParam(newPosition.state),\n city: normalizeUrlParam(newPosition.city),\n };\n\n let newState = {\n country: denormalizeUrlParam(newPosition.country),\n state: denormalizeUrlParam(newPosition.state),\n city: denormalizeUrlParam(newPosition.city),\n };\n \n // update route params\n localPosition.value = newState;\n currentRoute.params = newParams;\n\n \n // replace the current route\n router.replace(currentRoute);\n\t}, { deep: true });\n\n const text = {\n locale: 'en',\n messages: {\n en: {\n meta: {\n title: \"Marketplace – Shop Our Wide Selection of Quality Weed for Delivery\",\n description: \"Browse our marketplace of top-grade weed strains and choose from a variety of delivery options. Order now and have your favorite strains delivered straight to your door. Safe, fast, and reliable.\",\n }\n },\n ru: {\n meta: {\n title: \"Маркетплейс – Выбирайте из нашего ассортимента качественной травки для доставки\",\n description: \"Маркетплейс – Изучите наши продукты высокого качества и выбирайте из различных вариантов доставки. Закажите сейчас и получите свои любимые сорта на дом. Безопасно, быстро и надежно.\",\n }\n }\n }\n }\n\n const { t } = useI18n(text)\n</script>\n\n<style lang=\"scss\">\n\n\n</style>\n\n\n"],"names":["marketplace.state"],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- import { onMounted, createBlock, openBlock, unref, withCtx, createElementBlock, Fragment, renderList } from "vue";
2
- import { useRoute } from "vue-router";
3
- import _sfc_main$1 from "../../../../../components/Feed/Feed.vue.js";
4
- import { useStore } from "../../../../core/views/store/core.store.js";
5
- import _sfc_main$2 from "../../../../organizations/components/blocks/CardOrganization.vue.js";
6
- import { state, marketplaceStore } from "../../store/marketplace.js";
7
- const _sfc_main = {
8
- __name: "Catalog",
9
- setup(__props) {
10
- const store = useStore();
11
- const route = useRoute();
12
- onMounted(() => {
13
- if (typeof gtag === "function") {
14
- gtag("event", "view_marketplace", {
15
- location: store.core.state.position?.location || "unknown",
16
- page_path: window.location.pathname,
17
- marketplace_id: route.params.id || "main"
18
- });
19
- }
20
- });
21
- return (_ctx, _cache) => {
22
- return openBlock(), createBlock(_sfc_main$1, {
23
- sort: state.sort,
24
- "onUpdate:sort": _cache[0] || (_cache[0] = ($event) => state.sort = $event),
25
- filter: state.filter,
26
- "onUpdate:filter": _cache[1] || (_cache[1] = ($event) => state.filter = $event),
27
- search: true,
28
- showLoadMore: false,
29
- states: {
30
- empty: {
31
- title: "No Shops Found",
32
- description: "Currently, there are no shops."
33
- }
34
- },
35
- store: {
36
- read: (options) => unref(marketplaceStore).readCatalog(options)
37
- },
38
- options: {
39
- country: unref(route).params.country,
40
- state: unref(route).params.state,
41
- city: unref(route).params.city,
42
- categories: unref(route).query.categories,
43
- prices: unref(route).query.prices,
44
- delivery: unref(route).query.delivery,
45
- location: unref(store).core.state.position?.location,
46
- lookup: ["products", "spots"],
47
- contain: ["products"]
48
- },
49
- class: "rows-1 gap-thin"
50
- }, {
51
- default: withCtx(({
52
- items
53
- }) => [
54
- (openBlock(true), createElementBlock(Fragment, null, renderList(items, (organization) => {
55
- return openBlock(), createBlock(_sfc_main$2, {
56
- key: organization._id,
57
- organization,
58
- showRating: true,
59
- showFollowers: false,
60
- showProducts: true,
61
- class: "bg-light w-100 o-hidden radius-medium pd-small"
62
- }, null, 8, ["organization"]);
63
- }), 128))
64
- ]),
65
- _: 1
66
- }, 8, ["sort", "filter", "store", "options"]);
67
- };
68
- }
69
- };
70
- export {
71
- _sfc_main as default
72
- };
73
- //# sourceMappingURL=Catalog.vue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Catalog.vue.js","sources":["../../../../../../../../src/modules/marketplace/views/components/pages/Catalog.vue"],"sourcesContent":["<template>\n\t<Feed\n\t\tv-model:sort=\"marketplace.state.sort\"\n\t\tv-model:filter=\"marketplace.state.filter\"\n :search=\"true\"\n :showLoadMore=\"false\"\n :states=\"{\n empty: {\n title: 'No Shops Found',\n description: 'Currently, there are no shops.'\n },\n }\"\n :store=\"{\n read: (options) => marketplaceStore.readCatalog(options)\n }\"\n :options=\"{\n country: route.params.country,\n\t state: route.params.state,\n\t city: route.params.city,\n\t categories: route.query.categories,\n\t prices: route.query.prices,\n\t delivery: route.query.delivery,\n\t location: store.core.state.position?.location,\n\t lookup: ['products','spots'],\n\t contain: ['products'],\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"rows-1 gap-thin\"\n >\n <CardOrganization \n\t v-for=\"organization in items\" \n\t :key=\"organization._id\"\n\t :organization=\"organization\"\n\t :showRating=\"true\"\n\t :showFollowers=\"false\"\n\t :showProducts=\"true\"\n\t class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n\t />\n </Feed>\n</template>\n\n<script setup>\n\timport { computed,reactive,ref, onMounted,watch } from 'vue'\n\timport { useRoute } from 'vue-router'\n\n\timport Feed from '@martyrs/src/components/Feed/Feed.vue'\n\t\n\timport * as organization from '@martyrs/src/modules/organizations/store/organizations.js'\n\timport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\n\tconst store = useStore()\n\n\timport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\n\timport * as marketplace from '../../store/marketplace';\n\timport marketplaceStore from '../../store/marketplace';\n\n\tconst route = useRoute()\n\n\tonMounted(() => {\n\t\t// Добавление Google Analytics event на открытие маркетплейса\n\t\tif (typeof gtag === 'function') {\n\t\t\tgtag('event', 'view_marketplace', {\n\t\t\t\tlocation: store.core.state.position?.location || 'unknown',\n\t\t\t\tpage_path: window.location.pathname,\n\t\t\t\tmarketplace_id: route.params.id || 'main',\n\t\t\t});\n\t\t}\n\t})\n</script>\n\n<style lang=\"scss\">\n</style>\n"],"names":[],"mappings":";;;;;;;;;AAmDC,UAAM,QAAQ,SAAQ;AAOtB,UAAM,QAAQ,SAAQ;AAEtB,cAAU,MAAM;AAEf,UAAI,OAAO,SAAS,YAAY;AAC/B,aAAK,SAAS,oBAAoB;AAAA,UACjC,UAAU,MAAM,KAAK,MAAM,UAAU,YAAY;AAAA,UACjD,WAAW,OAAO,SAAS;AAAA,UAC3B,gBAAgB,MAAM,OAAO,MAAM;AAAA,QACvC,CAAI;AAAA,MACF;AAAA,IACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,66 +0,0 @@
1
- function buildMarketplaceTree(options = {}) {
2
- const layoutComponent = options.layoutComponent || (() => import(
3
- /* webpackChunkName: 'marketplace-layout' */
4
- './views/components/layouts/Marketplace.vue'
5
- ));
6
- const catalogComponent = options.catalogComponent || (() => import(
7
- /* webpackChunkName: 'marketplace-catalog' */
8
- './views/components/pages/Catalog.vue'
9
- ));
10
-
11
- const buildName = (suffix) => {
12
- const prefix = options.routeNamePrefix || '';
13
- return suffix ? `${prefix}${suffix}` : prefix || undefined;
14
- };
15
-
16
- return [
17
- {
18
- path: '',
19
- name: buildName('Marketplace') || 'Marketplace',
20
- component: layoutComponent,
21
- meta: {
22
- title: {
23
- en: 'Marketplace',
24
- ru: 'Маркетплейс',
25
- },
26
- },
27
- children: [
28
- {
29
- path: ':country?',
30
- component: catalogComponent,
31
- children: [
32
- {
33
- path: ':state?',
34
- name: buildName('State') || 'State',
35
- component: catalogComponent,
36
- children: [
37
- {
38
- path: ':city?',
39
- name: buildName('City') || 'City',
40
- component: catalogComponent,
41
- },
42
- ],
43
- },
44
- ],
45
- },
46
- ],
47
- },
48
- ];
49
- }
50
-
51
- export function getRoutes(options = {}) {
52
- const route = options.route || 'Home';
53
- const routes = [];
54
-
55
- routes.push({
56
- parentName: route,
57
- config: {
58
- basePath: options.basePath || 'marketplace',
59
- routes: buildMarketplaceTree(options),
60
- },
61
- });
62
-
63
- return routes;
64
- }
65
-
66
- export default { getRoutes };
@@ -1,74 +0,0 @@
1
- <template>
2
- <Feed
3
- v-model:sort="marketplace.state.sort"
4
- v-model:filter="marketplace.state.filter"
5
- :search="true"
6
- :showLoadMore="false"
7
- :states="{
8
- empty: {
9
- title: 'No Shops Found',
10
- description: 'Currently, there are no shops.'
11
- },
12
- }"
13
- :store="{
14
- read: (options) => marketplaceStore.readCatalog(options)
15
- }"
16
- :options="{
17
- country: route.params.country,
18
- state: route.params.state,
19
- city: route.params.city,
20
- categories: route.query.categories,
21
- prices: route.query.prices,
22
- delivery: route.query.delivery,
23
- location: store.core.state.position?.location,
24
- lookup: ['products','spots'],
25
- contain: ['products'],
26
- }"
27
- v-slot="{
28
- items
29
- }"
30
- class="rows-1 gap-thin"
31
- >
32
- <CardOrganization
33
- v-for="organization in items"
34
- :key="organization._id"
35
- :organization="organization"
36
- :showRating="true"
37
- :showFollowers="false"
38
- :showProducts="true"
39
- class="bg-light w-100 o-hidden radius-medium pd-small "
40
- />
41
- </Feed>
42
- </template>
43
-
44
- <script setup>
45
- import { computed,reactive,ref, onMounted,watch } from 'vue'
46
- import { useRoute } from 'vue-router'
47
-
48
- import Feed from '@martyrs/src/components/Feed/Feed.vue'
49
-
50
- import * as organization from '@martyrs/src/modules/organizations/store/organizations.js'
51
- import { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'
52
- const store = useStore()
53
-
54
- import CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'
55
-
56
- import * as marketplace from '../../store/marketplace';
57
- import marketplaceStore from '../../store/marketplace';
58
-
59
- const route = useRoute()
60
-
61
- onMounted(() => {
62
- // Добавление Google Analytics event на открытие маркетплейса
63
- if (typeof gtag === 'function') {
64
- gtag('event', 'view_marketplace', {
65
- location: store.core.state.position?.location || 'unknown',
66
- page_path: window.location.pathname,
67
- marketplace_id: route.params.id || 'main',
68
- });
69
- }
70
- })
71
- </script>
72
-
73
- <style lang="scss">
74
- </style>