@ozdao/martyrs 0.2.487 → 0.2.489
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.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/auth.server.cjs +1 -1
- package/dist/auth.server.js +1 -1
- package/dist/{authJwt-D35KyJlE.cjs → authJwt-BIZ2GIfT.cjs} +0 -27
- package/dist/{authJwt-DqxhUym0.js → authJwt-J1csaMWA.js} +0 -27
- package/dist/builder.cjs +10 -0
- package/dist/builder.js +10 -0
- package/dist/chats.server.cjs +1 -1
- package/dist/chats.server.js +1 -1
- package/dist/community.server.cjs +3 -3
- package/dist/community.server.js +3 -3
- package/dist/{crud-BDIArc5A.cjs → crud-B-kQw3Z5.cjs} +5 -4
- package/dist/{crud-DJvpe0aZ.js → crud-Cwx5VlSm.js} +5 -4
- package/dist/events.server.cjs +3 -3
- package/dist/events.server.js +3 -3
- package/dist/files.server.cjs +31 -14
- package/dist/files.server.js +31 -14
- package/dist/gallery.server.cjs +2 -2
- package/dist/gallery.server.js +2 -2
- package/dist/{globals.abac-Cm9e8Jdk.cjs → globals.abac-CPXLas7N.cjs} +1 -1
- package/dist/{globals.abac-DBV_kaOq.js → globals.abac-DNdtSYop.js} +1 -1
- package/dist/{index-DiSKVCaA.cjs → index-BFxqqmgh.cjs} +1 -1
- package/dist/{index-CVuQC4k1.js → index-_Edcmck_.js} +1 -1
- package/dist/main-CmuUC0tl.cjs +11 -0
- package/dist/{main-nQmkbWsW.js → main-IVRL6IjM.js} +2949 -2666
- package/dist/martyrs/src/components/Button/{Button.vue.cjs → Button.vue2.cjs} +3 -3
- package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +3 -3
- package/dist/martyrs/src/components/Button/{Button.vue.cjs.map → Button.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue.cjs +31 -5
- package/dist/martyrs/src/components/Calendar/Calendar.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue.js +32 -6
- package/dist/martyrs/src/components/Calendar/Calendar.vue.js.map +1 -1
- package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Countdown/Countdown.vue.cjs +4 -4
- package/dist/martyrs/src/components/Countdown/Countdown.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Countdown/Countdown.vue.js +4 -4
- package/dist/martyrs/src/components/Countdown/Countdown.vue.js.map +1 -1
- package/dist/martyrs/src/components/DatePicker/DatePicker.vue.cjs +28 -19
- package/dist/martyrs/src/components/DatePicker/DatePicker.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js +29 -20
- package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Carousel.vue.cjs +20 -9
- package/dist/martyrs/src/components/Feed/Carousel.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Carousel.vue.js +22 -11
- package/dist/martyrs/src/components/Feed/Carousel.vue.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +29 -26
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +45 -42
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/Field/{Field.vue2.cjs → Field.vue.cjs} +15 -9
- package/dist/martyrs/src/components/Field/Field.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +16 -10
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +25 -24
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +27 -26
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Menu/MenuItem.vue.cjs +1 -1
- package/dist/martyrs/src/components/Menu/MenuItem.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js +1 -1
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js.map +1 -1
- package/dist/martyrs/src/components/Select/Select.vue.cjs +27 -15
- package/dist/martyrs/src/components/Select/Select.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Select/Select.vue.js +28 -16
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
- package/dist/martyrs/src/components/Status/Snack.vue.cjs +63 -0
- package/dist/martyrs/src/components/Status/Snack.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/Status/Snack.vue.js +63 -0
- package/dist/martyrs/src/components/Status/Snack.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/Tab/Tab.vue2.js +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs +3 -2
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +3 -2
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +0 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +0 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +5 -5
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +5 -5
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +10 -10
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +5 -5
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +6 -6
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +5 -5
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +23 -23
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +3 -3
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +3 -3
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +4 -4
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +4 -4
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Blog.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Blog.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Blog.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Blog.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -4
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -4
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +3 -3
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +12 -12
- package/dist/martyrs/src/modules/community/components/sections/Comments.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/sections/Comments.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +3 -3
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +2 -2
- package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +33 -30
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +36 -33
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +3 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +26 -25
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +15 -15
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +8 -8
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +8 -8
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +3 -3
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.cjs +9 -5
- package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.js +9 -5
- package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs +18 -24
- package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/List.vue.js +19 -25
- package/dist/martyrs/src/modules/events/components/sections/List.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs +3 -3
- package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -3
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -3
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/locales/en.cjs +9 -1
- package/dist/martyrs/src/modules/globals/locales/en.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/locales/en.js +9 -1
- package/dist/martyrs/src/modules/globals/locales/en.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs +5 -2
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.js +5 -2
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +16 -15
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +17 -16
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +16 -20
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +16 -20
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +14 -7
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +14 -7
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +11 -3
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +11 -3
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.cjs +17 -7
- package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.js +18 -8
- package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/router/addRoutes.cjs +4 -1
- package/dist/martyrs/src/modules/globals/views/router/addRoutes.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/router/addRoutes.js +4 -1
- package/dist/martyrs/src/modules/globals/views/router/addRoutes.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/store/globals.cjs +30 -0
- package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/store/globals.js +30 -0
- package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
- package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.cjs +32 -0
- package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.js +32 -0
- package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.cjs +4 -2
- package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.js +5 -3
- package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/icons.client.cjs +4 -0
- package/dist/martyrs/src/modules/icons/icons.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/icons.client.js +108 -104
- package/dist/martyrs/src/modules/icons/icons.client.js.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +3 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +138 -136
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.cjs +1 -1
- package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.js +1 -1
- package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs +11 -7
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.js +11 -7
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs +2 -2
- package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js +2 -2
- package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs +2 -2
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js +2 -2
- package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +0 -13
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +0 -13
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +14 -14
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +19 -19
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +13 -13
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +22 -22
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +11 -11
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +2 -2
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +2 -2
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.cjs +8 -8
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js +8 -8
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs +98 -73
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js +99 -74
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +82 -57
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +82 -57
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +22 -14
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +22 -14
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +205 -36
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +208 -39
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs +20 -11
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js +20 -11
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -2
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -2
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +5 -5
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.cjs +6 -0
- package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.js +6 -0
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/store/shopcart.cjs +75 -94
- package/dist/martyrs/src/modules/orders/store/shopcart.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/shopcart.js +75 -94
- package/dist/martyrs/src/modules/orders/store/shopcart.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +11 -3
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +11 -3
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +2 -3
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +16 -17
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +16 -16
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +8 -8
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +3 -3
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs +0 -3
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.js +18 -21
- package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs +0 -2
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.js +0 -2
- package/dist/martyrs/src/modules/organizations/router/organizations.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -2
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -2
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -2
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -2
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs +7 -4
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +7 -4
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.cjs +18 -21
- package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js +19 -22
- package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Price.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Price.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Price.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Price.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +48 -45
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +49 -46
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +13 -21
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +23 -31
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +29 -18
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +29 -18
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +5 -7
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +21 -23
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +3 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +6 -6
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +12 -12
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs +11 -3
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js +11 -3
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs +8 -16
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +8 -16
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +80 -61
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +100 -81
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +8 -14
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +9 -15
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/products.client.cjs +1 -13
- package/dist/martyrs/src/modules/products/products.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/products.client.js +36 -48
- package/dist/martyrs/src/modules/products/products.client.js.map +1 -1
- package/dist/martyrs/src/modules/products/store/products.cjs +4 -4
- package/dist/martyrs/src/modules/products/store/products.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/store/products.js +4 -4
- package/dist/martyrs/src/modules/products/store/products.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.cjs +3 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js +3 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +12 -4
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +15 -7
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +41 -33
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +42 -34
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +0 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +0 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +0 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +0 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +13 -13
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +8 -8
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +20 -20
- package/dist/music.server.cjs +3 -3
- package/dist/music.server.js +3 -3
- package/dist/notifications.server.cjs +1 -1
- package/dist/notifications.server.js +1 -1
- package/dist/orders.server.cjs +155 -64
- package/dist/orders.server.js +155 -64
- package/dist/organizations.server.cjs +25 -4
- package/dist/organizations.server.js +25 -4
- package/dist/{ownership.schema-CCZX5vfw.js → ownership.schema-BqH4v5vH.js} +2 -2
- package/dist/{ownership.schema-DCosqOc1.cjs → ownership.schema-D1p5XSpt.cjs} +2 -2
- package/dist/products.server.cjs +64 -288
- package/dist/products.server.js +64 -288
- package/dist/rents.server.cjs +35 -13
- package/dist/rents.server.js +35 -13
- package/dist/style.css +198 -201
- package/dist/wallet.server.cjs +1 -1
- package/dist/wallet.server.js +1 -1
- package/dist/web-BXhlxo6M.cjs +1 -0
- package/dist/web-Czi05iGG.js +54 -0
- package/package.json +1 -1
- package/src/builder/rspack/rspack.config.base.js +14 -0
- package/src/components/Breadcrumbs/Breadcrumbs.vue +200 -62
- package/src/components/Button/Button.vue +1 -1
- package/src/components/Calendar/Calendar.vue +53 -3
- package/src/components/Countdown/Countdown.vue +4 -4
- package/src/components/DatePicker/DatePicker.vue +32 -22
- package/src/components/Feed/Carousel.vue +18 -3
- package/src/components/Feed/Feed.vue +24 -31
- package/src/components/Field/Field.vue +9 -31
- package/src/components/FieldBig/FieldBig.vue +17 -18
- package/src/components/Loader/Loader.vue +1 -8
- package/src/components/Menu/MenuItem.vue +1 -1
- package/src/components/Select/Select.vue +19 -27
- package/src/components/Status/Snack.vue +4 -2
- package/src/components/Tab/Tab.vue +2 -2
- package/src/components/UploadImageMultiple/UploadImageMultiple.vue +9 -14
- package/src/main.js +2 -0
- package/src/modules/auth/controllers/middlewares/authJwt.js +0 -29
- package/src/modules/auth/views/components/pages/ResetPassword.vue +1 -1
- package/src/modules/auth/views/components/pages/SignIn.vue +1 -1
- package/src/modules/auth/views/components/pages/SignUp.vue +1 -1
- package/src/modules/auth/views/components/sections/FeaturedUsers.vue +1 -1
- package/src/modules/backoffice/components/admin/Users.vue +1 -1
- package/src/modules/backoffice/components/partials/Sidebar.vue +3 -3
- package/src/modules/community/components/blocks/CardBlogpost.vue +1 -1
- package/src/modules/community/components/layouts/Community.vue +5 -5
- package/src/modules/community/components/pages/Blog.vue +1 -1
- package/src/modules/community/components/sections/Comments.vue +1 -1
- package/src/modules/constructor/components/sections/Viewer.vue +1 -1
- package/src/modules/events/components/blocks/CardEvent.vue +35 -29
- package/src/modules/events/components/pages/Event.vue +4 -3
- package/src/modules/events/components/pages/Events.vue +3 -3
- package/src/modules/events/components/pages/EventsBackoffice.vue +1 -1
- package/src/modules/events/components/sections/FeaturedEvents.vue +8 -4
- package/src/modules/events/components/sections/List.vue +17 -18
- package/src/modules/events/components/sections/SelectDate.vue +2 -2
- package/src/modules/files/controllers/files.controller.js +14 -3
- package/src/modules/files/middlewares/server/middlewareBusboy.js +46 -17
- package/src/modules/globals/controllers/classes/crud/crud.controller.js +5 -2
- package/src/modules/globals/controllers/classes/crud/crud.js +1 -1
- package/src/modules/globals/controllers/classes/crud/crud.service.js +0 -1
- package/src/modules/globals/controllers/classes/globals.abac.js +1 -1
- package/src/modules/globals/locales/en.js +8 -0
- package/src/modules/globals/models/schemas/ownership.schema.js +2 -2
- package/src/modules/globals/views/classes/globals.store.js +8 -2
- package/src/modules/globals/views/components/blocks/BlockSearch.vue +12 -17
- package/src/modules/globals/views/components/blocks/CardHeader.vue +9 -11
- package/src/modules/globals/views/components/blocks/PopupDateSelector.vue +19 -9
- package/src/modules/globals/views/components/layouts/Client.vue +15 -9
- package/src/modules/globals/views/components/partials/CitySelection.vue +1 -1
- package/src/modules/globals/views/components/partials/FooterAlt.vue +1 -1
- package/src/modules/globals/views/components/partials/Sidebar.vue +1 -1
- package/src/modules/globals/views/components/sections/Walkthrough.vue +2 -2
- package/src/modules/globals/views/plugins/date-picker.plugin.js +17 -7
- package/src/modules/globals/views/router/addRoutes.js +4 -1
- package/src/modules/globals/views/store/globals.js +1 -1
- package/src/modules/icons/actions/IconOpenLink.vue +14 -0
- package/src/modules/icons/entities/IconInfo.vue +2 -2
- package/src/modules/icons/icons.client.js +8 -0
- package/src/modules/icons/pages/IconsPage.vue +2 -0
- package/src/modules/icons/skeletons/SkeletonEventShort.vue +2 -2
- package/src/modules/icons/socials/telegram.vue +2 -2
- package/src/modules/inventory/components/forms/AdjustmentForm.vue +225 -0
- package/src/modules/inventory/components/forms/ColumnSettingsMenu.vue +80 -0
- package/src/modules/inventory/components/forms/HistoryView.vue +134 -0
- package/src/modules/inventory/components/forms/StockAlertsForm.vue +181 -0
- package/src/modules/{products/components/pages/Leftovers.vue → inventory/components/pages/Inventory.vue} +60 -41
- package/src/modules/{products/components/pages/LeftoverEdit.vue → inventory/components/pages/InventoryEdit.vue} +131 -86
- package/src/modules/inventory/docs/README.md +291 -0
- package/src/modules/inventory/inventory.client.js +65 -0
- package/src/modules/inventory/inventory.server.js +8 -5
- package/src/modules/inventory/middlewares/stock.alerts.verifier.js +194 -0
- package/src/modules/inventory/models/stock.alerts.model.js +45 -0
- package/src/modules/inventory/models/stock.audit.model.js +60 -0
- package/src/modules/inventory/models/stock.availability.model.js +6 -6
- package/src/modules/inventory/policies/inventory.policies.js +28 -28
- package/src/modules/inventory/router/inventory.router.js +28 -0
- package/src/modules/inventory/routes/inventory.routes.js +8 -4
- package/src/modules/inventory/routes/stock.alerts.routes.js +43 -0
- package/src/modules/inventory/services/inventory.crud.js +204 -21
- package/src/modules/inventory/services/inventory.verifier.js +67 -11
- package/src/modules/inventory/store/ inventory.store.js +4 -2
- package/src/modules/inventory/store/stock.alerts.store.js +5 -0
- package/src/modules/inventory/tests/inventory.test.js +281 -0
- package/src/modules/landing/components/sections/SectionEarn.vue +1 -1
- package/src/modules/landing/components/sections/SectionFeature.vue +1 -1
- package/src/modules/landing/components/sections/SectionFeaturesImages.vue +1 -1
- package/src/modules/landing/components/sections/SectionFocus.vue +1 -1
- package/src/modules/landing/components/sections/SectionGuide.vue +1 -1
- package/src/modules/landing/components/sections/SectionHeroToken.vue +1 -1
- package/src/modules/landing/components/sections/SectionHeroVideo.vue +2 -2
- package/src/modules/landing/components/sections/SectionJoinUs.vue +1 -1
- package/src/modules/landing/components/sections/SectionMobileApp.vue +1 -1
- package/src/modules/landing/components/sections/SubscribeNewsletter.vue +1 -1
- package/src/modules/marketplace/views/components/layouts/Marketplace.vue +14 -14
- package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
- package/src/modules/orders/components/blocks/CardOrder.vue +7 -7
- package/src/modules/orders/components/blocks/CardOrderItem.vue +96 -91
- package/src/modules/orders/components/blocks/CardOrderUser.vue +1 -1
- package/src/modules/orders/components/elements/PriceTotal.vue +1 -1
- package/src/modules/orders/components/pages/Favorites.vue +1 -1
- package/src/modules/orders/components/pages/OrderBackoffice.vue +59 -29
- package/src/modules/orders/components/pages/OrderCreate.vue +15 -7
- package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +201 -16
- package/src/modules/orders/components/pages/Orders_refact.vue +3 -3
- package/src/modules/orders/components/partials/ShopCart.vue +17 -8
- package/src/modules/orders/components/sections/Succes.vue +1 -1
- package/src/modules/orders/controllers/orders.controller.js +175 -77
- package/src/modules/orders/orders.client.js +6 -0
- package/src/modules/orders/routes/orders.routes.js +15 -10
- package/src/modules/orders/store/shopcart.js +54 -131
- package/src/modules/organizations/components/blocks/CardOrganization.vue +9 -1
- package/src/modules/organizations/components/blocks/Rating.vue +1 -1
- package/src/modules/organizations/components/pages/Department.vue +1 -1
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +0 -1
- package/src/modules/organizations/components/pages/Organization.vue +2 -2
- package/src/modules/organizations/components/pages/OrganizationBackoffice.vue +3 -3
- package/src/modules/organizations/components/pages/Organizations.vue +1 -1
- package/src/modules/organizations/components/sections/DetailsTabSection.vue +1 -1
- package/src/modules/organizations/configs/navigation.organization.config.js +3 -3
- package/src/modules/organizations/controllers/utils/lookupConfigs.js +22 -1
- package/src/modules/organizations/models/schemas/accesses.schema.js +1 -1
- package/src/modules/organizations/organizations.client.js +0 -3
- package/src/modules/organizations/router/organizations.js +0 -2
- package/src/modules/products/components/blocks/CardProduct.vue +1 -1
- package/src/modules/products/components/blocks/ProductVariants.vue +5 -5
- package/src/modules/products/components/elements/Price.vue +1 -1
- package/src/modules/products/components/forms/StockHistoryView.vue +4 -4
- package/src/modules/products/components/pages/Categories.vue +4 -2
- package/src/modules/products/components/pages/CategoryEdit.vue +23 -10
- package/src/modules/products/components/pages/Product.vue +28 -78
- package/src/modules/products/components/pages/ProductEdit.vue +3 -12
- package/src/modules/products/components/pages/Products.vue +3 -2
- package/src/modules/products/components/sections/EditIngredients.vue +11 -2
- package/src/modules/products/components/sections/EditRecommended.vue +3 -14
- package/src/modules/products/components/sections/EditVariants.vue +52 -25
- package/src/modules/products/components/sections/FilterProducts.vue +3 -3
- package/src/modules/products/components/sections/HeroRecommendation.vue +1 -1
- package/src/modules/products/components/sections/ProductConfigurator.vue +5 -11
- package/src/modules/products/components/sections/SectionProduct.vue +2 -2
- package/src/modules/products/controllers/configs/products.lookup.config.js +52 -80
- package/src/modules/products/controllers/products.controller.js +2 -2
- package/src/modules/products/middlewares/variants.verifier.js +1 -1
- package/src/modules/products/products.client.js +0 -12
- package/src/modules/products/products.server.js +0 -8
- package/src/modules/products/routes/variants.routes.js +0 -59
- package/src/modules/products/store/products.js +4 -4
- package/src/modules/rents/controllers/services/rents.services.js +41 -11
- package/src/modules/rents/models/rent.model.js +1 -0
- package/src/modules/rents/views/components/pages/GanttChart.vue +1 -1
- package/src/modules/rents/views/components/pages/RentsEdit.vue +10 -2
- package/src/modules/spots/components/blocks/CardSpot.vue +14 -11
- package/src/modules/spots/components/pages/Spot.vue +1 -1
- package/src/modules/wallet/views/components/pages/Wallet.vue +2 -2
- package/src/styles/base/all.scss +10 -1
- package/src/styles/base/borders.scss +234 -155
- package/src/styles/layout.scss +36 -0
- package/src/styles/typography.scss +12 -4
- package/dist/Media-B2jWzwLB.cjs +0 -1
- package/dist/Media-DZ5_ItXQ.js +0 -111
- package/dist/main-C6_DPWGX.cjs +0 -11
- package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
- package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Field/Field.vue2.js.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +0 -184
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +0 -184
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.cjs +0 -67
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.js +0 -67
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.js.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.cjs +0 -91
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.js +0 -91
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.js.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.cjs +0 -64
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.js +0 -64
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.cjs +0 -80
- package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.js +0 -80
- package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.cjs +0 -118
- package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.js +0 -118
- package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.cjs +0 -73
- package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.js +0 -73
- package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.cjs +0 -101
- package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.js +0 -101
- package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.cjs +0 -135
- package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.js +0 -135
- package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.cjs +0 -148
- package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.js +0 -148
- package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs +0 -345
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js +0 -345
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +0 -316
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +0 -316
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js.map +0 -1
- package/dist/martyrs/src/modules/products/router/leftovers.router.cjs +0 -51
- package/dist/martyrs/src/modules/products/router/leftovers.router.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/router/leftovers.router.js +0 -51
- package/dist/martyrs/src/modules/products/router/leftovers.router.js.map +0 -1
- package/dist/martyrs/src/modules/products/store/leftovers.cjs +0 -111
- package/dist/martyrs/src/modules/products/store/leftovers.cjs.map +0 -1
- package/dist/martyrs/src/modules/products/store/leftovers.js +0 -111
- package/dist/martyrs/src/modules/products/store/leftovers.js.map +0 -1
- package/src/modules/inventory/models/stock.inventory.model.js +0 -38
- package/src/modules/organizations/components/blocks/EditArray.vue +0 -147
- package/src/modules/products/components/blocks/CardLeftover.vue +0 -117
- package/src/modules/products/controllers/leftovers.controller.js +0 -117
- package/src/modules/products/models/leftover.model.js +0 -105
- package/src/modules/products/router/leftovers.router.js +0 -40
- package/src/modules/products/routes/leftovers.routes.js +0 -15
- package/src/modules/products/store/leftovers.js +0 -121
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoryEdit.vue.js","sources":["../../../../../../../src/modules/products/components/pages/CategoryEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"!isLoading\" class=\"pd-thin bg-white for-transition w-100\">\n <Block v-if=\"!MOBILE_APP\" class=\"radius-medium mn-b-thin flex-nowrap flex-v-center flex\">\n <h1 class=\"mn-r-auto\">\n {{route.params.category ? 'Edit Category' : 'Add Category'}}\n </h1>\n\n <Button \n :submit=\"onSubmit\"\n class=\"pd-small radius-medium bg-main t-black uppercase t-medium\"\n >\n Save Category \n </Button>\n </Block>\n \n <Block \n title=\"Profile\"\n class=\"mn-b-thin\"\n >\n <div
|
|
1
|
+
{"version":3,"file":"CategoryEdit.vue.js","sources":["../../../../../../../src/modules/products/components/pages/CategoryEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"!isLoading\" class=\"rows-auto pd-thin bg-white for-transition w-100\">\n <Block v-if=\"!MOBILE_APP\" class=\"radius-medium mn-b-thin flex-nowrap flex-v-center flex\">\n <h1 class=\"mn-r-auto\">\n {{route.params.category ? 'Edit Category' : 'Add Category'}}\n </h1>\n\n <Button \n :submit=\"onSubmit\"\n class=\"pd-small radius-medium bg-main t-black uppercase t-medium\"\n >\n Save Category \n </Button>\n </Block>\n \n <Block \n title=\"Profile\"\n class=\"mn-b-thin\"\n >\n <div class=\"cols-auto-1fr mn-b-thin w-100 \">\n <UploadImage \n v-model:photo=\"categories.state.current.photo\"\n :uploadPath=\"'categories'\"\n class=\"aspect-1x1 h-100 o-hidden mn-r-small radius-extra\" \n />\n <Field\n v-model:field=\"categories.state.current.name\"\n label=\"Name\"\n placeholder=\"Enter category name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n </div>\n\n <div class=\"mn-b-thin w-100 flex-nowrap gap-thin flex\">\n\n\n <Field\n v-model:field=\"categories.state.current.order\"\n label=\"Order\"\n :disabled=\"true\"\n class=\"w-40 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"categories.state.current.url\"\n label=\"URL\"\n placeholder=\"Enter category URL\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n \n </div>\n\n <Select \n v-model:select=\"categories.state.current.status\"\n label=\"Status\"\n :options=\"[\n 'draft', \n 'internal',\n 'published',\n 'removed'\n ]\"\n placeholder=\"Select category\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n\n <!-- <div class=\"flex-v-center flex-nowrap flex\">\n <h4 class=\"mn-r-thin t-medium\">Localization</h4>\n \n <button \n @click=\"() => categories.state.current.translations.push({locale: '', text: ''})\" \n class=\"i-small pd-thin button-delete button\"\n >\n +\n </button>\n </div> -->\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.translations\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.locale\"\n placeholder=\"Locale\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.text\"\n placeholder=\"Text\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.translations.splice(index, 1)\" \n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red\"\n >\n <IconDelete \n class=\"i-medium\"\n />\n </div>\n </div>\n\n \n </Block>\n <!-- Filters -->\n <Block\n title=\"Filters\"\n placeholder=\"No filters added yet\"\n :actions=\"[{\n label: '+',\n function: () => categories.state.current.filters.push({name: '', url: ''})\n }]\"\n >\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.filters\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Filter name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.options\"\n placeholder=\"Filter options divided by ,\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.filters.splice(index, 1)\" \n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red\"\n >\n <IconDelete \n class=\"i-medium\"\n />\n </div>\n </div> \n </Block>\n </div>\n \n</template>\n\n<script setup>\n // Import libs\n import { computed, onUnmounted, onMounted, ref } from 'vue'\n import { useRoute,useRouter } from 'vue-router'\n \n import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n import Button from \"@martyrs/src/components/Button/Button.vue\";\n import Select from \"@martyrs/src/components/Select/Select.vue\";\n import UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\n import Field from \"@martyrs/src/components/Field/Field.vue\";\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n\n import Block from '@martyrs/src/components/Block/Block.vue';\n\n import IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue'\n\n // Import the new store structure\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'; \n import * as categories from '@martyrs/src/modules/products/store/categories.js';\n\n const route = useRoute()\n const router = useRouter()\n\n const emits = defineEmits(['page-loading', 'page-loaded']);\n\n // Data prefetching\n const isLoading = ref(true)\n onMounted(async () => {\n emits('page-loading');\n if (route.params.category) {\n await categories.actions.read({url: route.params.category})\n } else {\n categories.actions.clean() // Adjusted based on the new store's method to reset the category state\n }\n\n emits('page-loaded');\n isLoading.value = false\n })\n\n // Accessing state\n const category = computed(() => categories.state.current)\n const routePath = computed(() => route.name)\n\n // Navigation Bar\n globals.state.navigation_bar.actions = [{\n component: IconCheckmark,\n props: {\n fill: \"rgb(var(--main))\" \n },\n condition: () => auth.state.user && auth.state.user._id,\n action: () => onSubmit()\n }],\n\n onUnmounted(() => {\n globals.state.navigation_bar.actions = [];\n });\n\n\n\n // Functions\n async function onSubmit() {\n if (route.params.category) {\n\n categories.state.current.creator = {\n type: categories.state.current.creator.type,\n hidden: categories.state.current.creator.hidden,\n target: categories.state.current.creator.target._id\n }\n\n categories.state.current.owner = {\n type: categories.state.current.owner.type,\n target: categories.state.current.owner.target._id\n }\n\n await categories.actions.update(categories.state.current)\n\n redirectTo()\n } else {\n\n categories.state.current.creator = {\n type: 'user',\n hidden: false,\n target: auth.state.user._id\n }\n\n categories.state.current.owner = {\n type: route.params._id ? 'organization' : 'platform',\n hidden: false,\n target: route.params._id ? route.params._id : null\n }\n\n await categories.actions.create(categories.state.current)\n redirectTo()\n }\n }\n\n function redirectTo () {\n router.push({\n name: 'Categories', \n params: { \n _id: route.params._id\n } \n })\n }\n</script>\n\n<style lang=\"scss\">\n.container {\n max-width: 100%;\n margin: auto;\n}\n\n.grid {\n \n}\n\n.square {\n aspect-ratio: 1 / 1;\n height: 100%;\n background: #ccc;\n}\n</style>\n"],"names":["categories.actions","categories.state","globals.state","IconCheckmark","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKE,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExB,UAAM,QAAQ;AAGd,UAAM,YAAY,IAAI,IAAI;AAC1B,cAAU,YAAY;AACpB,YAAM,cAAc;AACpB,UAAI,MAAM,OAAO,UAAU;AACzB,cAAMA,QAAmB,KAAK,EAAC,KAAK,MAAM,OAAO,SAAQ,CAAC;AAAA,MAChE,OAAW;AACLA,gBAAmB,MAAO;AAAA,MAChC;AAEI,YAAM,aAAa;AACnB,gBAAU,QAAQ;AAAA,IACnB,CAAA;AAGgB,aAAS,MAAMC,MAAiB,OAAO;AACtC,aAAS,MAAM,MAAM,IAAI;AAG3CC,YAAc,eAAe,UAAU,CAAC;AAAA,MACtC,WAAWC;AAAAA,MACX,OAAO;AAAA,QACL,MAAM;AAAA,MACP;AAAA,MACD,WAAW,MAAMC,QAAW,QAAQA,QAAW,KAAK;AAAA,MACpD,QAAQ,MAAM,SAAQ;AAAA,IAC1B,CAAG,GAEF,YAAY,MAAM;AACfF,cAAc,eAAe,UAAU,CAAE;AAAA,IAC7C,CAAG;AAKD,mBAAe,WAAW;AACxB,UAAI,MAAM,OAAO,UAAU;AAEzBD,cAAiB,QAAQ,UAAU;AAAA,UACjC,MAAMA,MAAiB,QAAQ,QAAQ;AAAA,UACvC,QAAQA,MAAiB,QAAQ,QAAQ;AAAA,UACzC,QAAQA,MAAiB,QAAQ,QAAQ,OAAO;AAAA,QACxD;AAEMA,cAAiB,QAAQ,QAAQ;AAAA,UAC/B,MAAMA,MAAiB,QAAQ,MAAM;AAAA,UACrC,QAAQA,MAAiB,QAAQ,MAAM,OAAO;AAAA,QACtD;AAEM,cAAMD,QAAmB,OAAOC,MAAiB,OAAO;AAExD,mBAAU;AAAA,MAChB,OAAW;AAELA,cAAiB,QAAQ,UAAU;AAAA,UACjC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQG,QAAW,KAAK;AAAA,QAChC;AAEMH,cAAiB,QAAQ,QAAQ;AAAA,UAC/B,MAAM,MAAM,OAAO,MAAM,iBAAiB;AAAA,UAC1C,QAAQ;AAAA,UACR,QAAQ,MAAM,OAAO,MAAM,MAAM,OAAO,MAAM;AAAA,QACtD;AAEM,cAAMD,QAAmB,OAAOC,MAAiB,OAAO;AACxD,mBAAU;AAAA,MAChB;AAAA,IACA;AAEE,aAAS,aAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,KAAK,MAAM,OAAO;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,IACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -10,7 +10,7 @@ const products = require("../../store/products.cjs");
|
|
|
10
10
|
require("../../store/categories.cjs");
|
|
11
11
|
const shopcart = require("../../../orders/store/shopcart.cjs");
|
|
12
12
|
;/* empty css */
|
|
13
|
-
;/* empty css
|
|
13
|
+
;/* empty css */
|
|
14
14
|
;/* empty css */
|
|
15
15
|
;/* empty css */
|
|
16
16
|
const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
|
|
@@ -44,7 +44,10 @@ const _hoisted_7 = {
|
|
|
44
44
|
};
|
|
45
45
|
const _hoisted_8 = { class: "w-100 pd-small radius-small flex flex-column gap-small bg-light" };
|
|
46
46
|
const _hoisted_9 = ["innerHTML"];
|
|
47
|
-
const _hoisted_10 = {
|
|
47
|
+
const _hoisted_10 = {
|
|
48
|
+
key: 5,
|
|
49
|
+
class: "mn-b-small flex-nowrap flex flex-v-center"
|
|
50
|
+
};
|
|
48
51
|
const _hoisted_11 = { class: "cols-2 mn-b-medium w-100 gap-small" };
|
|
49
52
|
const _hoisted_12 = { class: "w-100 pd-small radius-small bg-light product-attributes" };
|
|
50
53
|
const _hoisted_13 = { class: "mn-b-thin t-demi" };
|
|
@@ -78,7 +81,7 @@ const _sfc_main = {
|
|
|
78
81
|
vue.onMounted(async () => {
|
|
79
82
|
var _a, _b;
|
|
80
83
|
emits("page-loading");
|
|
81
|
-
await products.actions.read({ _id: route.params.product, lookup: ["recommended"] });
|
|
84
|
+
await products.actions.read({ _id: route.params.product, lookup: ["variants", "recommended", "inventory"] });
|
|
82
85
|
currentImages.value = [...productImages.value];
|
|
83
86
|
if (typeof gtag === "function") {
|
|
84
87
|
gtag("event", "view_item", {
|
|
@@ -105,18 +108,26 @@ const _sfc_main = {
|
|
|
105
108
|
currentImages.value = [...productImages.value];
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
|
-
async function
|
|
111
|
+
async function handleAddToCart({ variant, quantity }) {
|
|
109
112
|
var _a, _b, _c;
|
|
113
|
+
console.log("variant is", variant);
|
|
114
|
+
console.log("quantity is", quantity);
|
|
115
|
+
let selectedDates = null;
|
|
110
116
|
try {
|
|
117
|
+
if (!variant) {
|
|
118
|
+
throw new Error("Variant is required for adding product to cart");
|
|
119
|
+
}
|
|
111
120
|
if (!shopcart.state.organization) {
|
|
112
121
|
shopcart.state.organization = product.value.owner.target._id;
|
|
113
122
|
}
|
|
114
123
|
if (product.value.listing === "rent") {
|
|
115
|
-
|
|
116
|
-
product
|
|
117
|
-
|
|
124
|
+
selectedDates = await proxy.$dateSelector(
|
|
125
|
+
product.value._id,
|
|
126
|
+
variant._id,
|
|
127
|
+
quantity,
|
|
128
|
+
variant.price || product.value.price
|
|
129
|
+
);
|
|
118
130
|
if (!selectedDates) throw new Error("Date selection cancelled");
|
|
119
|
-
variantItem.selectedDates = selectedDates;
|
|
120
131
|
}
|
|
121
132
|
if (shopcart.state.organization !== product.value.owner.target._id) {
|
|
122
133
|
const result = await proxy.$alert({
|
|
@@ -134,21 +145,21 @@ const _sfc_main = {
|
|
|
134
145
|
if (typeof gtag === "function") {
|
|
135
146
|
gtag("event", "add_to_cart", {
|
|
136
147
|
currency: returnCurrency(),
|
|
137
|
-
value:
|
|
148
|
+
value: variant.price || 0,
|
|
138
149
|
items: [{
|
|
139
|
-
item_id:
|
|
140
|
-
item_name:
|
|
141
|
-
price:
|
|
150
|
+
item_id: product.value._id,
|
|
151
|
+
item_name: product.value.name,
|
|
152
|
+
price: variant.price || product.value.price || 0,
|
|
142
153
|
quantity: 1,
|
|
143
154
|
item_category: product.value.category || "",
|
|
144
155
|
item_brand: ((_c = (_b = (_a = product.value.owner) == null ? void 0 : _a.target) == null ? void 0 : _b.profile) == null ? void 0 : _c.name) || ""
|
|
145
156
|
}]
|
|
146
157
|
});
|
|
147
158
|
}
|
|
148
|
-
await shopcart.actions.
|
|
159
|
+
await shopcart.actions.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity);
|
|
149
160
|
return true;
|
|
150
161
|
} catch (error) {
|
|
151
|
-
console.error("Error while adding
|
|
162
|
+
console.error("Error while adding product to cart:", error);
|
|
152
163
|
throw error;
|
|
153
164
|
}
|
|
154
165
|
}
|
|
@@ -185,7 +196,7 @@ const _sfc_main = {
|
|
|
185
196
|
discounts: product.value.discounts,
|
|
186
197
|
regularPrice: 100,
|
|
187
198
|
onVariantSelected: handleVariantSelected,
|
|
188
|
-
onAddToCart:
|
|
199
|
+
onAddToCart: handleAddToCart,
|
|
189
200
|
onUpdateImages: handleUpdateImages
|
|
190
201
|
}, null, 8, ["product-variants", "product-id", "product-name", "discounts"])) : vue.createCommentVNode("", true),
|
|
191
202
|
product.value.included ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
|
|
@@ -201,10 +212,10 @@ const _sfc_main = {
|
|
|
201
212
|
}, null, 8, _hoisted_9)
|
|
202
213
|
])
|
|
203
214
|
])) : vue.createCommentVNode("", true),
|
|
204
|
-
vue.
|
|
215
|
+
product.value.attributes && product.value.attributes.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [
|
|
205
216
|
vue.createVNode(IconInfo.default, { class: "mn-r-micro i-medium" }),
|
|
206
217
|
_cache[1] || (_cache[1] = vue.createElementVNode("p", { class: "t-medium" }, "Product Details", -1))
|
|
207
|
-
]),
|
|
218
|
+
])) : vue.createCommentVNode("", true),
|
|
208
219
|
vue.createElementVNode("div", _hoisted_11, [
|
|
209
220
|
product.value.attributes && product.value.attributes.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(product.value.attributes, (attributes) => {
|
|
210
221
|
return vue.openBlock(), vue.createElementBlock("div", _hoisted_12, [
|
|
@@ -218,7 +229,7 @@ const _sfc_main = {
|
|
|
218
229
|
_cache[2] || (_cache[2] = vue.createElementVNode("p", { class: "t-medium" }, "Provided by", -1))
|
|
219
230
|
]),
|
|
220
231
|
product.value.owner ? (vue.openBlock(), vue.createBlock(CardOrganization.default, {
|
|
221
|
-
key:
|
|
232
|
+
key: 6,
|
|
222
233
|
organization: product.value.owner.target,
|
|
223
234
|
showRating: true,
|
|
224
235
|
showFollowers: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Product.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddVariantToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['recommended'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Обработчик добавления варианта в корзину\nasync function handleAddVariantToCart(variantItem) {\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n // Проверка на товар с арендой\n if (product.value.listing === 'rent') {\n const selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n variantItem.selectedDates = selectedDates\n }\n \n // Проверка на разные организации в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n // Аналитика: регистрируем добавление в корзину\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variantItem.price || 0,\n items: [{\n item_id: variantItem._id,\n item_name: variantItem.name,\n price: variantItem.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n // Добавляем вариант в корзину\n await shopcart.actions.addVariantToCart(variantItem, product.value.owner.target._id)\n return true\n } catch (error) {\n console.error('Error while adding variant to cart:', error)\n throw error\n }\n}\n\n// Оригинальная функция добавления товара в корзину (для товаров без вариантов)\nasync function addToCart(product) {\n let selectedDates = null\n\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.owner.target._id\n }\n if (product.listing === 'rent') {\n selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n }\n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: product.price || 0,\n items: [{\n item_id: product._id,\n item_name: product.name,\n price: product.price || 0,\n quantity: 1,\n item_category: product.category || '',\n item_brand: product.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product, product.owner.target._id, selectedDates)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["useRoute","useRouter","getCurrentInstance","useGlobalMixins","computed","products.state","ref","useI18n","onMounted","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Product.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div v-if=\"product.attributes && product.attributes.length > 0\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['variants','recommended','inventory'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Функция добавления товара в корзину - теперь требует выбранный вариант\nasync function handleAddToCart({variant, quantity}) {\n console.log('variant is', variant)\n console.log('quantity is', quantity)\n let selectedDates = null\n\n try {\n if (!variant) {\n throw new Error('Variant is required for adding product to cart')\n }\n\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n if (product.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n product.value._id,\n variant._id,\n quantity,\n variant.price || product.value.price\n );\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n }\n \n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variant.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: variant.price || product.value.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["useRoute","useRouter","getCurrentInstance","useGlobalMixins","computed","products.state","ref","useI18n","onMounted","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { state, actions } from "../../store/products.js";
|
|
|
8
8
|
import "../../store/categories.js";
|
|
9
9
|
import { state as state$2, actions as actions$1 } from "../../../orders/store/shopcart.js";
|
|
10
10
|
/* empty css */
|
|
11
|
-
/* empty css
|
|
11
|
+
/* empty css */
|
|
12
12
|
/* empty css */
|
|
13
13
|
/* empty css */
|
|
14
14
|
import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
|
|
@@ -42,7 +42,10 @@ const _hoisted_7 = {
|
|
|
42
42
|
};
|
|
43
43
|
const _hoisted_8 = { class: "w-100 pd-small radius-small flex flex-column gap-small bg-light" };
|
|
44
44
|
const _hoisted_9 = ["innerHTML"];
|
|
45
|
-
const _hoisted_10 = {
|
|
45
|
+
const _hoisted_10 = {
|
|
46
|
+
key: 5,
|
|
47
|
+
class: "mn-b-small flex-nowrap flex flex-v-center"
|
|
48
|
+
};
|
|
46
49
|
const _hoisted_11 = { class: "cols-2 mn-b-medium w-100 gap-small" };
|
|
47
50
|
const _hoisted_12 = { class: "w-100 pd-small radius-small bg-light product-attributes" };
|
|
48
51
|
const _hoisted_13 = { class: "mn-b-thin t-demi" };
|
|
@@ -76,7 +79,7 @@ const _sfc_main = {
|
|
|
76
79
|
onMounted(async () => {
|
|
77
80
|
var _a, _b;
|
|
78
81
|
emits("page-loading");
|
|
79
|
-
await actions.read({ _id: route.params.product, lookup: ["recommended"] });
|
|
82
|
+
await actions.read({ _id: route.params.product, lookup: ["variants", "recommended", "inventory"] });
|
|
80
83
|
currentImages.value = [...productImages.value];
|
|
81
84
|
if (typeof gtag === "function") {
|
|
82
85
|
gtag("event", "view_item", {
|
|
@@ -103,18 +106,26 @@ const _sfc_main = {
|
|
|
103
106
|
currentImages.value = [...productImages.value];
|
|
104
107
|
}
|
|
105
108
|
}
|
|
106
|
-
async function
|
|
109
|
+
async function handleAddToCart({ variant, quantity }) {
|
|
107
110
|
var _a, _b, _c;
|
|
111
|
+
console.log("variant is", variant);
|
|
112
|
+
console.log("quantity is", quantity);
|
|
113
|
+
let selectedDates = null;
|
|
108
114
|
try {
|
|
115
|
+
if (!variant) {
|
|
116
|
+
throw new Error("Variant is required for adding product to cart");
|
|
117
|
+
}
|
|
109
118
|
if (!state$2.organization) {
|
|
110
119
|
state$2.organization = product.value.owner.target._id;
|
|
111
120
|
}
|
|
112
121
|
if (product.value.listing === "rent") {
|
|
113
|
-
|
|
114
|
-
product
|
|
115
|
-
|
|
122
|
+
selectedDates = await proxy.$dateSelector(
|
|
123
|
+
product.value._id,
|
|
124
|
+
variant._id,
|
|
125
|
+
quantity,
|
|
126
|
+
variant.price || product.value.price
|
|
127
|
+
);
|
|
116
128
|
if (!selectedDates) throw new Error("Date selection cancelled");
|
|
117
|
-
variantItem.selectedDates = selectedDates;
|
|
118
129
|
}
|
|
119
130
|
if (state$2.organization !== product.value.owner.target._id) {
|
|
120
131
|
const result = await proxy.$alert({
|
|
@@ -132,21 +143,21 @@ const _sfc_main = {
|
|
|
132
143
|
if (typeof gtag === "function") {
|
|
133
144
|
gtag("event", "add_to_cart", {
|
|
134
145
|
currency: returnCurrency(),
|
|
135
|
-
value:
|
|
146
|
+
value: variant.price || 0,
|
|
136
147
|
items: [{
|
|
137
|
-
item_id:
|
|
138
|
-
item_name:
|
|
139
|
-
price:
|
|
148
|
+
item_id: product.value._id,
|
|
149
|
+
item_name: product.value.name,
|
|
150
|
+
price: variant.price || product.value.price || 0,
|
|
140
151
|
quantity: 1,
|
|
141
152
|
item_category: product.value.category || "",
|
|
142
153
|
item_brand: ((_c = (_b = (_a = product.value.owner) == null ? void 0 : _a.target) == null ? void 0 : _b.profile) == null ? void 0 : _c.name) || ""
|
|
143
154
|
}]
|
|
144
155
|
});
|
|
145
156
|
}
|
|
146
|
-
await actions$1.
|
|
157
|
+
await actions$1.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity);
|
|
147
158
|
return true;
|
|
148
159
|
} catch (error) {
|
|
149
|
-
console.error("Error while adding
|
|
160
|
+
console.error("Error while adding product to cart:", error);
|
|
150
161
|
throw error;
|
|
151
162
|
}
|
|
152
163
|
}
|
|
@@ -183,7 +194,7 @@ const _sfc_main = {
|
|
|
183
194
|
discounts: product.value.discounts,
|
|
184
195
|
regularPrice: 100,
|
|
185
196
|
onVariantSelected: handleVariantSelected,
|
|
186
|
-
onAddToCart:
|
|
197
|
+
onAddToCart: handleAddToCart,
|
|
187
198
|
onUpdateImages: handleUpdateImages
|
|
188
199
|
}, null, 8, ["product-variants", "product-id", "product-name", "discounts"])) : createCommentVNode("", true),
|
|
189
200
|
product.value.included ? (openBlock(), createElementBlock("div", _hoisted_6, [
|
|
@@ -199,10 +210,10 @@ const _sfc_main = {
|
|
|
199
210
|
}, null, 8, _hoisted_9)
|
|
200
211
|
])
|
|
201
212
|
])) : createCommentVNode("", true),
|
|
202
|
-
|
|
213
|
+
product.value.attributes && product.value.attributes.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_10, [
|
|
203
214
|
createVNode(_sfc_main$4, { class: "mn-r-micro i-medium" }),
|
|
204
215
|
_cache[1] || (_cache[1] = createElementVNode("p", { class: "t-medium" }, "Product Details", -1))
|
|
205
|
-
]),
|
|
216
|
+
])) : createCommentVNode("", true),
|
|
206
217
|
createElementVNode("div", _hoisted_11, [
|
|
207
218
|
product.value.attributes && product.value.attributes.length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(product.value.attributes, (attributes) => {
|
|
208
219
|
return openBlock(), createElementBlock("div", _hoisted_12, [
|
|
@@ -216,7 +227,7 @@ const _sfc_main = {
|
|
|
216
227
|
_cache[2] || (_cache[2] = createElementVNode("p", { class: "t-medium" }, "Provided by", -1))
|
|
217
228
|
]),
|
|
218
229
|
product.value.owner ? (openBlock(), createBlock(_sfc_main$6, {
|
|
219
|
-
key:
|
|
230
|
+
key: 6,
|
|
220
231
|
organization: product.value.owner.target,
|
|
221
232
|
showRating: true,
|
|
222
233
|
showFollowers: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Product.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddVariantToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['recommended'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Обработчик добавления варианта в корзину\nasync function handleAddVariantToCart(variantItem) {\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n // Проверка на товар с арендой\n if (product.value.listing === 'rent') {\n const selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n variantItem.selectedDates = selectedDates\n }\n \n // Проверка на разные организации в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n // Аналитика: регистрируем добавление в корзину\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variantItem.price || 0,\n items: [{\n item_id: variantItem._id,\n item_name: variantItem.name,\n price: variantItem.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n // Добавляем вариант в корзину\n await shopcart.actions.addVariantToCart(variantItem, product.value.owner.target._id)\n return true\n } catch (error) {\n console.error('Error while adding variant to cart:', error)\n throw error\n }\n}\n\n// Оригинальная функция добавления товара в корзину (для товаров без вариантов)\nasync function addToCart(product) {\n let selectedDates = null\n\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.owner.target._id\n }\n if (product.listing === 'rent') {\n selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n }\n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: product.price || 0,\n items: [{\n item_id: product._id,\n item_name: product.name,\n price: product.price || 0,\n quantity: 1,\n item_category: product.category || '',\n item_brand: product.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product, product.owner.target._id, selectedDates)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["products.state","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Product.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div v-if=\"product.attributes && product.attributes.length > 0\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['variants','recommended','inventory'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Функция добавления товара в корзину - теперь требует выбранный вариант\nasync function handleAddToCart({variant, quantity}) {\n console.log('variant is', variant)\n console.log('quantity is', quantity)\n let selectedDates = null\n\n try {\n if (!variant) {\n throw new Error('Variant is required for adding product to cart')\n }\n\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n if (product.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n product.value._id,\n variant._id,\n quantity,\n variant.price || product.value.price\n );\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n }\n \n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variant.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: variant.price || product.value.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["products.state","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ const vue = require("vue");
|
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
5
|
const Block = require("../../../../components/Block/Block.vue.cjs");
|
|
6
6
|
const Tab = require("../../../../components/Tab/Tab.vue2.cjs");
|
|
7
|
-
const Field = require("../../../../components/Field/Field.
|
|
7
|
+
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
8
8
|
const Select = require("../../../../components/Select/Select.vue.cjs");
|
|
9
|
-
const Button = require("../../../../components/Button/Button.
|
|
9
|
+
const Button = require("../../../../components/Button/Button.vue2.cjs");
|
|
10
10
|
const EditImages = require("../../../../components/EditImages/EditImages.vue2.cjs");
|
|
11
11
|
const BlockMultiselect = require("../../../globals/views/components/blocks/BlockMultiselect.vue.cjs");
|
|
12
12
|
const IconCross = require("../../../icons/navigation/IconCross.vue.cjs");
|
|
@@ -97,7 +97,6 @@ const _sfc_main = {
|
|
|
97
97
|
});
|
|
98
98
|
async function onSubmit() {
|
|
99
99
|
try {
|
|
100
|
-
console.log("product is", products.state.current);
|
|
101
100
|
if (route.params.product) {
|
|
102
101
|
await products.actions.update(route.params.product, products.state.current);
|
|
103
102
|
} else {
|
|
@@ -131,7 +130,7 @@ const _sfc_main = {
|
|
|
131
130
|
return vue.unref(isPageLoaded) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
132
131
|
!_ctx.MOBILE_APP ? (vue.openBlock(), vue.createBlock(Block.default, {
|
|
133
132
|
key: 0,
|
|
134
|
-
class: "flex-nowrap gap-thin flex-v-center flex"
|
|
133
|
+
class: "flex-nowrap mn-b-thin gap-thin flex-v-center flex"
|
|
135
134
|
}, {
|
|
136
135
|
default: vue.withCtx(() => [
|
|
137
136
|
vue.createElementVNode("h2", _hoisted_2, vue.toDisplayString(vue.unref(route).params.product ? products.state.current.name : "Create Product"), 1),
|
|
@@ -170,7 +169,8 @@ const _sfc_main = {
|
|
|
170
169
|
{ label: "Recommended", value: "recommended" },
|
|
171
170
|
{ label: "Localization", value: "localization" }
|
|
172
171
|
],
|
|
173
|
-
class: "flex-child-default bg-light radius-medium h-max pd-thin o-x-scroll"
|
|
172
|
+
class: "flex-child-default gap-micro scroll-hide bg-light radius-medium h-max pd-thin mn-b-thin o-x-scroll",
|
|
173
|
+
classTab: "bg-white"
|
|
174
174
|
}, null, 8, ["selected"])) : vue.createCommentVNode("", true),
|
|
175
175
|
vue.unref(activeTab) === "details" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [
|
|
176
176
|
vue.createVNode(Block.default, {
|
|
@@ -381,7 +381,6 @@ const _sfc_main = {
|
|
|
381
381
|
vue.unref(route).params.product ? (vue.openBlock(), vue.createBlock(Button.default, {
|
|
382
382
|
key: 0,
|
|
383
383
|
submit: onDelete,
|
|
384
|
-
callback: redirectTo,
|
|
385
384
|
class: "bg-red t-white w-100"
|
|
386
385
|
}, {
|
|
387
386
|
default: vue.withCtx(() => _cache[14] || (_cache[14] = [
|
|
@@ -391,7 +390,6 @@ const _sfc_main = {
|
|
|
391
390
|
})) : vue.createCommentVNode("", true),
|
|
392
391
|
vue.createVNode(Button.default, {
|
|
393
392
|
submit: onSubmit,
|
|
394
|
-
callback: redirectTo,
|
|
395
393
|
class: "w-100 bg-main"
|
|
396
394
|
}, {
|
|
397
395
|
default: vue.withCtx(() => _cache[15] || (_cache[15] = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductEdit.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/ProductEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"isPageLoaded\" class=\"w-100 bg-white pd-thin gap-thin\">\n \n <Block v-if=\"!MOBILE_APP\" class=\"flex-nowrap gap-thin flex-v-center flex\">\n <h2 class=\"t-truncate mn-r-auto\">\n {{ route.params.product ? products.state.current.name : 'Create Product' }}\n </h2>\n\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-red\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-main\"\n >\n Save\n </Button>\n </Block>\n\n <!-- Tab Navigation -->\n <Tab\n v-model:selected=\"activeTab\"\n v-if=\"route.params.product\"\n :tabs=\"[\n { label: 'Details', value: 'details' },\n { label: 'Variants', value: 'variants' },\n { label: 'Discounts', value: 'discounts' },\n { label: 'Recommended', value: 'recommended' },\n { label: 'Localization', value: 'localization' }\n ]\"\n class=\"flex-child-default bg-light radius-medium h-max pd-thin o-x-scroll\"\n />\n\n <!-- Tab Content -->\n <div v-if=\"activeTab === 'details'\" class=\"cols-1 gap-thin\">\n <!-- Product Images -->\n <Block\n placeholder=\"The product doesn't have any images yet.\"\n class=\"h-min\"\n >\n <EditImages \n :images=\"products.state.current.images\"\n :uploadPath=\"'photos'\" \n @update:images=\"(imagesNew) => { products.state.current.images = imagesNew }\" \n />\n </Block>\n\n <Block title=\"Categories\">\n <BlockMultiselect\n v-model=\"products.state.current.category\"\n placeholder=\"Search categories...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => categories.actions.read(options),\n state: categories.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No categories found',\n description: 'Try different search terms or create a new category',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных категорий -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <img \n v-if=\"item.photo\" \n :src=\"(FILE_SERVER_URL || '') + item.photo\"\n class=\"i-medium radius-small object-fit-cover mn-r-thin\"\n />\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n\n <!-- Product Profile -->\n <Block title=\"Profile\">\n <div class=\"mn-b-thin flex-nowrap flex gap-thin\">\n <Select \n v-model:select=\"products.state.current.status\"\n label=\"Status\"\n :options=\"[\n 'draft', \n 'published',\n 'featured',\n 'archived',\n 'removed'\n ]\"\n placeholder=\"Display product\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n <Select \n v-model:select=\"products.state.current.listing\"\n label=\"Type\"\n :options=\"[\n 'sale', \n 'rent',\n ]\"\n placeholder=\"Type of listing\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n </div>\n\n <Field \n v-model:field=\"products.state.current.name\" \n placeholder=\"Enter product name\"\n class=\"w-100 mn-b-thin bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"products.state.current.description\" \n placeholder=\"Enter product description\" \n class=\"w-100 bg-white radius-small mn-b-thin pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n <Field\n v-model:field=\"products.state.current.included\" \n placeholder=\"Enter what's inside\" \n class=\"w-100 bg-white radius-small pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n </Block>\n <!-- Categories -->\n \n\n\n <!-- Attributes -->\n <EditAttributes \n v-model:attributes=\"products.state.current.attributes\" \n />\n </div>\n\n <!-- Variants Tab -->\n <EditVariants\n\t\t\tv-if=\"activeTab === 'variants'\"\n v-model:variants=\"products.state.current.variants\" \n />\n\n <!-- Discounts Tab -->\n <EditDiscounts\n\t\t\tv-if=\"activeTab === 'discounts'\"\n v-model:discounts=\"products.state.current.discounts\"\n />\n <EditRecommended \n v-if=\"activeTab === 'recommended'\" \n v-model:recommended=\"products.state.current.recommended\"\n class=\"cols-1 gap-thin\"\n />\n\n <!-- Localization Tab -->\n <Block\n\t\t v-if=\"activeTab === 'localization'\"\n title=\"Localization\"\n placeholder=\"No localizations added yet\"\n :actions=\"[{\n label: '+',\n function: () => products.state.current.translations.push({locale: '', name: '', description: ''})\n }]\"\n >\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in products.state.current.translations\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.locale\"\n placeholder=\"Locale (en, ru, etc.)\"\n class=\"w-30 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Product name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"item.description\"\n placeholder=\"Product description\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => products.state.current.translations.splice(index, 1)\" \n class=\"i-medium\"\n />\n </div>\n </div>\n </Block>\n\n <!-- Bottom Action Buttons -->\n <div class=\"flex-nowrap flex gap-thin\">\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n :callback=\"redirectTo\"\n class=\"bg-red t-white w-100\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n :callback=\"redirectTo\"\n class=\"w-100 bg-main\"\n >\n Save\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\n// Import libs\nimport { reactive, computed, onMounted, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Tab from \"@martyrs/src/components/Tab/Tab.vue\";\nimport Field from \"@martyrs/src/components/Field/Field.vue\";\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\";\nimport Button from \"@martyrs/src/components/Button/Button.vue\";\nimport Tree from \"@martyrs/src/components/Tree/Tree.vue\";\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\n\nimport BlockMultiselect from '@martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nimport EditVariants from '@martyrs/src/modules/products/components/sections/EditVariants.vue';\nimport EditAttributes from '@martyrs/src/modules/products/components/sections/EditAttributes.vue';\nimport EditDiscounts from '@martyrs/src/modules/products/components/sections/EditDiscounts.vue';\nimport EditCategories from '@martyrs/src/modules/products/components/sections/EditCategories.vue';\nimport EditRecommended from '@martyrs/src/modules/products/components/sections/EditRecommended.vue';\n\n// Accessing router and store\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\nimport * as categories from '@martyrs/src/modules/products/store/categories.js';\n\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js'\n\nconst route = useRoute()\nconst router = useRouter()\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nlet isPageLoaded = ref(false)\nlet activeTab = ref('details')\n\nonMounted(async() => { \n emits('page-loading');\n\n products.mutations.resetProduct();\n\n if (route.params.product) {\n await products.actions.read({ _id: route.params.product, lookup: ['variants','categories','recommended'] });\n } else {\n // Создаем дефолтный вариант для нового товара\n if (!products.state.current.variants || products.state.current.variants.length === 0) {\n products.state.current.variants = [{\n name: 'Default',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n available: 0,\n ingredients: [],\n attributes: []\n }];\n }\n }\n\n // Убедимся, что массивы инициализированы\n if (!products.state.current.translations) {\n products.state.current.translations = []\n }\n // Убедимся, что массивы инициализированы\n if (!products.state.current.recommended) {\n products.state.current.recommended = []\n }\n if (!products.state.current.discounts) {\n products.state.current.discounts = []\n }\n\n try {\n // Data prefetching\n categories.state.all = await categories.actions.read({\n user: auth.state.user._id,\n rootOnly: true,\n excludeChildren: false,\n limit: 100\n })\n } catch (error) {\n console.error('error loading categories:', error);\n }\n\n emits('page-loaded');\n isPageLoaded.value = true\n})\n\nasync function onSubmit() {\n try {\n // // Проверка на наличие хотя бы одного варианта\n // if (!products.state.current.variants || products.state.current.variants.length === 0) {\n // setError({ response: { data: { errorCode: \"PRODUCT_MUST_HAVE_VARIANT\" }} })\n // return;\n // }\n console.log('product is',products.state.current)\n if (route.params.product) {\n await products.actions.update(route.params.product, products.state.current)\n } else {\n products.state.current.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n }\n \n products.state.current.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n }\n\n await products.actions.create(products.state.current)\n }\n \n redirectTo()\n } catch (error) {\n setError({ response: { data: { errorCode: \"PRODUCT_NOT_CREATED\" }} })\n console.error('Product creation error:', error)\n }\n}\n\nfunction onDelete() {\n products.actions.deleteProduct(products.state.current._id)\n}\n\nfunction redirectTo() {\n router.push({\n name: route.params._id ? 'Organization' : 'Products', \n params: route.params._id ? { _id: route.params._id } : {}\n })\n}\n</script>"],"names":["useRoute","useRouter","ref","onMounted","products.mutations","products.actions","products.state","categories.state","categories.actions","auth.state","setError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProductEdit.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/ProductEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"isPageLoaded\" class=\"w-100 bg-white pd-thin gap-thin\">\n \n <Block v-if=\"!MOBILE_APP\" class=\"flex-nowrap mn-b-thin gap-thin flex-v-center flex\">\n <h2 class=\"t-truncate mn-r-auto\">\n {{ route.params.product ? products.state.current.name : 'Create Product' }}\n </h2>\n\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-red\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-main\"\n >\n Save\n </Button>\n </Block>\n\n <!-- Tab Navigation -->\n <Tab\n v-model:selected=\"activeTab\"\n v-if=\"route.params.product\"\n :tabs=\"[\n { label: 'Details', value: 'details' },\n { label: 'Variants', value: 'variants' },\n { label: 'Discounts', value: 'discounts' },\n { label: 'Recommended', value: 'recommended' },\n { label: 'Localization', value: 'localization' }\n ]\"\n class=\"flex-child-default gap-micro scroll-hide bg-light radius-medium h-max pd-thin mn-b-thin o-x-scroll\"\n classTab=\"bg-white\"\n />\n\n <!-- Tab Content -->\n <div v-if=\"activeTab === 'details'\" class=\"cols-1 gap-thin\">\n <!-- Product Images -->\n <Block\n placeholder=\"The product doesn't have any images yet.\"\n class=\"h-min\"\n >\n <EditImages \n :images=\"products.state.current.images\"\n :uploadPath=\"'photos'\" \n @update:images=\"(imagesNew) => { products.state.current.images = imagesNew }\" \n />\n </Block>\n\n <Block title=\"Categories\">\n <BlockMultiselect\n v-model=\"products.state.current.category\"\n placeholder=\"Search categories...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => categories.actions.read(options),\n state: categories.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No categories found',\n description: 'Try different search terms or create a new category',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных категорий -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <img \n v-if=\"item.photo\" \n :src=\"(FILE_SERVER_URL || '') + item.photo\"\n class=\"i-medium radius-small object-fit-cover mn-r-thin\"\n />\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n\n <!-- Product Profile -->\n <Block title=\"Profile\">\n <div class=\"mn-b-thin flex-nowrap flex gap-thin\">\n <Select \n v-model:select=\"products.state.current.status\"\n label=\"Status\"\n :options=\"[\n 'draft', \n 'published',\n 'featured',\n 'archived',\n 'removed'\n ]\"\n placeholder=\"Display product\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n <Select \n v-model:select=\"products.state.current.listing\"\n label=\"Type\"\n :options=\"[\n 'sale', \n 'rent',\n ]\"\n placeholder=\"Type of listing\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n </div>\n\n <Field \n v-model:field=\"products.state.current.name\" \n placeholder=\"Enter product name\"\n class=\"w-100 mn-b-thin bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"products.state.current.description\" \n placeholder=\"Enter product description\" \n class=\"w-100 bg-white radius-small mn-b-thin pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n <Field\n v-model:field=\"products.state.current.included\" \n placeholder=\"Enter what's inside\" \n class=\"w-100 bg-white radius-small pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n </Block>\n <!-- Categories -->\n \n\n\n <!-- Attributes -->\n <EditAttributes \n v-model:attributes=\"products.state.current.attributes\" \n />\n </div>\n\n <!-- Variants Tab -->\n <EditVariants\n\t\t\tv-if=\"activeTab === 'variants'\"\n v-model:variants=\"products.state.current.variants\" \n />\n\n <!-- Discounts Tab -->\n <EditDiscounts\n\t\t\tv-if=\"activeTab === 'discounts'\"\n v-model:discounts=\"products.state.current.discounts\"\n />\n <EditRecommended \n v-if=\"activeTab === 'recommended'\" \n v-model:recommended=\"products.state.current.recommended\"\n class=\"cols-1 gap-thin\"\n />\n\n <!-- Localization Tab -->\n <Block\n\t\t v-if=\"activeTab === 'localization'\"\n title=\"Localization\"\n placeholder=\"No localizations added yet\"\n :actions=\"[{\n label: '+',\n function: () => products.state.current.translations.push({locale: '', name: '', description: ''})\n }]\"\n >\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in products.state.current.translations\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.locale\"\n placeholder=\"Locale (en, ru, etc.)\"\n class=\"w-30 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Product name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"item.description\"\n placeholder=\"Product description\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => products.state.current.translations.splice(index, 1)\" \n class=\"i-medium\"\n />\n </div>\n </div>\n </Block>\n\n <!-- Bottom Action Buttons -->\n <div class=\"flex-nowrap flex gap-thin\">\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n class=\"bg-red t-white w-100\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n class=\"w-100 bg-main\"\n >\n Save\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\n// Import libs\nimport { reactive, computed, onMounted, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Tab from \"@martyrs/src/components/Tab/Tab.vue\";\nimport Field from \"@martyrs/src/components/Field/Field.vue\";\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\";\nimport Button from \"@martyrs/src/components/Button/Button.vue\";\nimport Tree from \"@martyrs/src/components/Tree/Tree.vue\";\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\n\nimport BlockMultiselect from '@martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nimport EditVariants from '@martyrs/src/modules/products/components/sections/EditVariants.vue';\nimport EditAttributes from '@martyrs/src/modules/products/components/sections/EditAttributes.vue';\nimport EditDiscounts from '@martyrs/src/modules/products/components/sections/EditDiscounts.vue';\nimport EditCategories from '@martyrs/src/modules/products/components/sections/EditCategories.vue';\nimport EditRecommended from '@martyrs/src/modules/products/components/sections/EditRecommended.vue';\n\n// Accessing router and store\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\nimport * as categories from '@martyrs/src/modules/products/store/categories.js';\n\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js'\n\nconst route = useRoute()\nconst router = useRouter()\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nlet isPageLoaded = ref(false)\nlet activeTab = ref('details')\n\nonMounted(async() => { \n emits('page-loading');\n\n products.mutations.resetProduct();\n\n if (route.params.product) {\n await products.actions.read({ _id: route.params.product, lookup: ['variants','categories','recommended'] });\n } else {\n // Создаем дефолтный вариант для нового товара\n if (!products.state.current.variants || products.state.current.variants.length === 0) {\n products.state.current.variants = [{\n name: 'Default',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n available: 0,\n ingredients: [],\n attributes: []\n }];\n }\n }\n\n // Убедимся, что массивы инициализированы\n if (!products.state.current.translations) {\n products.state.current.translations = []\n }\n // Убедимся, что массивы инициализированы\n if (!products.state.current.recommended) {\n products.state.current.recommended = []\n }\n if (!products.state.current.discounts) {\n products.state.current.discounts = []\n }\n\n try {\n // Data prefetching\n categories.state.all = await categories.actions.read({\n user: auth.state.user._id,\n rootOnly: true,\n excludeChildren: false,\n limit: 100\n })\n } catch (error) {\n console.error('error loading categories:', error);\n }\n\n emits('page-loaded');\n isPageLoaded.value = true\n})\n\nasync function onSubmit() {\n try {\n if (route.params.product) {\n await products.actions.update(route.params.product, products.state.current)\n } else {\n products.state.current.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n }\n products.state.current.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n }\n await products.actions.create(products.state.current)\n }\n \n redirectTo()\n } catch (error) {\n setError({ response: { data: { errorCode: \"PRODUCT_NOT_CREATED\" }} })\n console.error('Product creation error:', error)\n }\n}\n\nfunction onDelete() {\n products.actions.deleteProduct(products.state.current._id)\n}\n\nfunction redirectTo() {\n router.push({\n name: route.params._id ? 'Organization' : 'Products', \n params: route.params._id ? { _id: route.params._id } : {}\n })\n}\n</script>"],"names":["useRoute","useRouter","ref","onMounted","products.mutations","products.actions","products.state","categories.state","categories.actions","auth.state","setError"],"mappings":"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"}
|