@ozdao/martyrs 0.2.470 → 0.2.472
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/{Media-CR0V1zvB.js → Media-DW8RLbfM.js} +1 -1
- package/dist/{Media-C4Ges_Sd.mjs → Media-y_TX6us_.mjs} +1 -1
- package/dist/_virtual/index.cjs +1 -1
- package/dist/_virtual/index.js +1 -1
- package/dist/auth.server.js +1 -1
- package/dist/auth.server.mjs +1 -1
- package/dist/chats.server.js +1 -1
- package/dist/chats.server.mjs +1 -1
- package/dist/community.server.js +1 -1
- package/dist/community.server.mjs +1 -1
- package/dist/events.server.js +1 -1
- package/dist/events.server.mjs +1 -1
- package/dist/files.server.js +1 -1
- package/dist/files.server.mjs +1 -1
- package/dist/gallery.server.js +1 -1
- package/dist/gallery.server.mjs +1 -1
- package/dist/{index-DQqZReAr.js → index-CVXl1rB5.js} +0 -1
- package/dist/{index-DICZTQ-1.mjs → index-Df8vtZx7.mjs} +0 -1
- package/dist/{main-CsZAG5Wz.js → main-CCfQH-Dd.js} +2 -2
- package/dist/{main-CTcal9qN.mjs → main-CgmHzhq5.mjs} +74 -74
- package/dist/{node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_ → martyrs}/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.cjs +1 -1
- package/dist/martyrs/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.cjs.map +1 -0
- package/dist/{node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_ → martyrs}/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js +1 -1
- package/dist/martyrs/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +1 -0
- package/dist/martyrs/node_modules/@vue/shared/dist/shared.esm-bundler.cjs.map +1 -0
- package/dist/martyrs/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.cjs +5 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js +5 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
- package/dist/{node_modules/.pnpm/uuid@11.1.0 → martyrs}/node_modules/uuid/dist/esm-browser/rng.cjs +4 -4
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js +15 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.cjs +17 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js +17 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.cjs +13 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js +13 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.cjs +8 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.js +8 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -2
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.cjs +5 -5
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.js +5 -5
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.js.map +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue2.cjs → Tab.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Tab/{Tab.vue2.js.map → Tab.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue2.js → Tab.vue.js} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tree/Tree.vue.cjs +3 -1
- package/dist/martyrs/src/components/Tree/Tree.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Tree/Tree.vue.js +3 -1
- package/dist/martyrs/src/components/Tree/Tree.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs +1 -0
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -0
- package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.js +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.js +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs +107 -21
- 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 +107 -21
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +10 -14
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +12 -16
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.cjs +7 -13
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.js +7 -13
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +6 -7
- 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 +7 -8
- 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 +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs +11 -5
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +12 -6
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +34 -13
- 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 +35 -14
- 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 +20 -9
- 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 +21 -10
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -1
- 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 +2 -1
- 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 +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/notifications.server.js +35 -2
- package/dist/notifications.server.mjs +35 -2
- package/dist/orders.server.js +3 -3
- package/dist/orders.server.mjs +3 -3
- package/dist/organizations.server.js +1 -1
- package/dist/organizations.server.mjs +1 -1
- package/dist/products.server.js +78 -53
- package/dist/products.server.mjs +78 -53
- package/dist/rents.server.js +1 -1
- package/dist/rents.server.mjs +1 -1
- package/dist/style.css +37 -38
- package/dist/wallet.server.js +1 -1
- package/dist/wallet.server.mjs +1 -1
- package/package.json +2 -1
- package/src/components/Feed/Feed.vue +2 -7
- package/src/components/Skeleton/Skeleton.vue +4 -5
- package/src/components/Tree/Tree.vue +5 -2
- package/src/modules/auth/controllers/middlewares/authJwt.js +1 -1
- package/src/modules/auth/views/store/auth.js +2 -1
- package/src/modules/globals/controllers/classes/globals.crud.js +2 -2
- package/src/modules/globals/views/classes/globals.store.js +119 -31
- package/src/modules/globals/views/components/partials/Navigation.vue +11 -10
- package/src/modules/globals/views/utils/vue-app-renderer.js +7 -16
- package/src/modules/icons/entities/IconMusic.vue +14 -0
- package/src/modules/icons/navigation/IconCheck.vue +31 -0
- package/src/modules/icons/navigation/IconHeart.vue +26 -0
- package/src/modules/icons/navigation/IconPause.vue +31 -0
- package/src/modules/icons/navigation/IconPlay.vue +17 -0
- package/src/modules/icons/navigation/IconRefresh.vue +31 -0
- package/src/modules/icons/navigation/IconShuffle.vue +31 -0
- package/src/modules/icons/navigation/IconVolume.vue +31 -0
- package/src/modules/music/components/SidebarMusic.vue +156 -0
- package/src/modules/music/components/cards/AlbumCard.vue +107 -0
- package/src/modules/music/components/cards/ArtistCard.vue +37 -0
- package/src/modules/music/components/cards/PlaylistCard.vue +100 -0
- package/src/modules/music/components/cards/TrackCard.vue +86 -0
- package/src/modules/music/components/forms/PlaylistForm.vue +156 -0
- package/src/modules/music/components/forms/SearchForm.vue +82 -0
- package/src/modules/music/components/forms/UploadForm.vue +313 -0
- package/src/modules/music/components/layouts/MusicLayout.vue +137 -0
- package/src/modules/music/components/lists/AlbumList.vue +25 -0
- package/src/modules/music/components/lists/ArtistList.vue +25 -0
- package/src/modules/music/components/lists/PlaylistList.vue +25 -0
- package/src/modules/music/components/lists/TrackList.vue +175 -0
- package/src/modules/music/components/pages/AlbumDetail.vue +265 -0
- package/src/modules/music/components/pages/ArtistDetail.vue +247 -0
- package/src/modules/music/components/pages/MusicHome.vue +177 -0
- package/src/modules/music/components/pages/MusicLibrary.vue +192 -0
- package/src/modules/music/components/pages/MusicUpload.vue +44 -0
- package/src/modules/music/components/pages/PlaylistDetail.vue +504 -0
- package/src/modules/music/components/pages/SearchResults.vue +397 -0
- package/src/modules/music/components/pages/TrackDetail.vue +143 -0
- package/src/modules/music/components/player/MusicPlayer.vue +202 -0
- package/src/modules/music/components/player/TrackProgress.vue +110 -0
- package/src/modules/music/components/player/VolumeControl.vue +98 -0
- package/src/modules/music/controllers/album.controller.js +98 -0
- package/src/modules/music/controllers/artist.controller.js +111 -0
- package/src/modules/music/controllers/genre.controller.js +71 -0
- package/src/modules/music/controllers/music.controller.js +174 -0
- package/src/modules/music/controllers/playlist.controller.js +182 -0
- package/src/modules/music/controllers/search.controller.js +103 -0
- package/src/modules/music/controllers/stream.controller.js +106 -0
- package/src/modules/music/models/album.model.js +61 -0
- package/src/modules/music/models/artist.model.js +67 -0
- package/src/modules/music/models/genre.model.js +42 -0
- package/src/modules/music/models/play-history.model.js +51 -0
- package/src/modules/music/models/playlist.model.js +69 -0
- package/src/modules/music/models/track.model.js +94 -0
- package/src/modules/music/music.client.js +186 -0
- package/src/modules/music/music.server.js +114 -0
- package/src/modules/music/policies/music.policies.js +84 -0
- package/src/modules/music/router/music.js +77 -0
- package/src/modules/music/routes/album.routes.js +62 -0
- package/src/modules/music/routes/artist.routes.js +67 -0
- package/src/modules/music/routes/genre.routes.js +60 -0
- package/src/modules/music/routes/music.routes.js +145 -0
- package/src/modules/music/routes/playlist.routes.js +99 -0
- package/src/modules/music/routes/search.routes.js +10 -0
- package/src/modules/music/routes/stream.routes.js +38 -0
- package/src/modules/music/store/albums.js +200 -0
- package/src/modules/music/store/artists.js +180 -0
- package/src/modules/music/store/player.js +397 -0
- package/src/modules/music/store/playlists.js +211 -0
- package/src/modules/music/store/search.js +126 -0
- package/src/modules/music/store/tracks.js +230 -0
- package/src/modules/music/websocket/streaming.handler.js +151 -0
- package/src/modules/notifications/controllers/notifications.controller.js +44 -1
- package/src/modules/notifications/notifications.server.js +0 -1
- package/src/modules/notifications/routes/notifications.routes.js +3 -0
- package/src/modules/orders/components/pages/OrderCreate.vue +0 -2
- package/src/modules/products/components/blocks/CardCategory.vue +5 -4
- package/src/modules/products/components/pages/Categories.vue +38 -20
- package/src/modules/products/components/pages/CategoryEdit.vue +16 -7
- package/src/modules/products/components/pages/ProductEdit.vue +1 -0
- package/src/modules/products/controllers/categories.controller.js +155 -103
- package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +0 -1
- package/dist/node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.cjs.map +0 -1
- package/dist/node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +0 -1
- package/dist/node_modules/.pnpm/@vue_shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.cjs.map +0 -1
- package/dist/node_modules/.pnpm/@vue_shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.cjs +0 -6
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js +0 -6
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js +0 -15
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.cjs +0 -11
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js +0 -11
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.cjs +0 -21
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js +0 -21
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js.map +0 -1
- /package/dist/{node_modules/.pnpm/@vue_shared@3.5.13 → martyrs}/node_modules/@vue/shared/dist/shared.esm-bundler.cjs +0 -0
- /package/dist/{node_modules/.pnpm/@vue_shared@3.5.13 → martyrs}/node_modules/@vue/shared/dist/shared.esm-bundler.js +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.cjs +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.cjs.map +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.js +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.js.map +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Categories.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/Categories.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin bg-white\">\n <Block v-if=\"!MOBILE_APP\" \n class=\"radius-big mn-b-thin mobile:flex-wrap flex-nowrap flex-v-center flex\"\n >\n <h2 class=\"mn-r-auto\">\n
|
|
1
|
+
{"version":3,"file":"Categories.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/Categories.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin bg-white\">\n <Block v-if=\"!MOBILE_APP\" \n class=\"radius-big mn-b-thin mobile:flex-wrap flex-nowrap flex-v-center flex\"\n >\n <h2 class=\"mn-r-auto\">\n Categories\n </h2>\n\n <router-link \n :to=\"{\n name: 'Category Add', \n params: { \n _id: $route.params._id\n } \n }\"\n class=\"uppercase t-medium pd-small radius-big bg-white nav-link\"\n >\n Add New\n </router-link>\n </Block>\n\n <Feed\n :search=\"true\"\n :showLoadMore=\"false\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no products available.'\n }\n }\"\n :store=\"{\n read: (options) => categories.actions.read(options),\n state: categories.state\n }\"\n :options=\"{\n user: auth.state.user._id,\n rootOnly: true,\n excludeChildren: false\n }\"\n v-model:sort=\"sort\"\n v-model:items=\"categories.state.all\"\n v-slot=\"{ \n items \n }\"\n class=\"cols-1 pos-relative w-100 rows-1 gap-thin\"\n >\n <Tree \n v-if=\"items\" \n :items=\"categories.state.all\" \n :state=\"categories.state.all\" \n @update=\"updateCategoriesOrder\" \n v-slot=\"{ item }\"\n >\n <CardCategory \n :category=\"item\" \n @delete=\"deleteCategory\" \n />\n </Tree>\n </Feed>\n </div>\n</template>\n\n<script setup>\n import { onMounted, onUnmounted, computed, ref,reactive } from 'vue';\n import { useRoute, useRouter } from 'vue-router';\n\n import * as globals from '@martyrs/src/modules/globals/views/store/globals';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth'; \n import * as categories from '@martyrs/src/modules/products/store/categories'; \n\n const route = useRoute();\n const router = useRouter();\n\n import Button from \"@martyrs/src/components/Button/Button.vue\";\n import Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n import Tree from \"@martyrs/src/components/Tree/Tree.vue\";\n \n import CardCategory from '@martyrs/src/modules/products/components/blocks/CardCategory.vue';\n\n import IconPlus from '@martyrs/src/modules/icons/navigation/IconPlus.vue'\n\n let search = ref(null)\n\n let sort = reactive({\n param: 'order',\n order: 'asc',\n options: [{\n label: 'Order',\n value: 'order'\n },{\n label: 'Name',\n value: 'name'\n },{\n label: 'Date',\n value: 'createdAt'\n }]\n })\n\n globals.state.navigation_bar.actions = [{\n component: IconPlus,\n props: {\n fill: \"rgb(var(--main))\" \n },\n condition: () => auth.state.user && auth.state.user._id,\n action: () => route.params._id ? router.push({ name: 'Category Add', params: { _id: route.params._id} }) : router.push({ name: 'Category Add' })\n }],\n\n onUnmounted(() => {\n globals.state.navigation_bar.actions = [];\n });\n\n onMounted(async () => {\n \n });\n\n // Функция для преобразования иерархического дерева категорий в плоский массив\n function flattenCategoryTree(categories) {\n let flatCategories = [];\n \n function flatten(category) {\n const { children, ...categoryWithoutChildren } = category;\n flatCategories.push(categoryWithoutChildren);\n \n if (children && Array.isArray(children)) {\n children.forEach(child => flatten(child));\n }\n }\n \n categories.forEach(category => flatten(category));\n return flatCategories;\n }\n\n\n // Функция для обновления порядка категорий\n async function updateCategoriesOrder(updatedCategories) {\n alert('helo')\n try {\n // Преобразуем категории в плоский массив\n const flattenedCategories = flattenCategoryTree(categories.state.all);\n \n console.log(flattenedCategories)\n console.log( categories.state.all)\n await categories.actions.updateOrder(flattenedCategories);\n \n console.log('Categories order updated successfully');\n } catch (error) {\n console.error('Error updating categories order:', error);\n throw error;\n }\n }\n\n async function deleteCategory(category) {\n // Запрашиваем подтверждение у пользователя\n const isConfirmed = confirm(`Are you sure you want to delete the category \"${category.name}\"?`);\n \n // Если пользователь подтвердил удаление, продолжаем процесс\n if (isConfirmed) {\n await categories.actions.delete(category.url);\n } else {\n alert('Category deletion cancelled'); \n }\n }\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":["useRoute","useRouter","ref","reactive","globals.state","IconPlus","auth.state","onUnmounted","onMounted","categories","categories.state","categories.actions"],"mappings":";;;;;;;;;;;;;;;;;;AAuEE,UAAM,QAAQA,UAAAA,SAAU;AACxB,UAAM,SAASC,UAAAA,UAAW;AAWbC,QAAAA,IAAI,IAAI;AAErB,QAAI,OAAOC,IAAAA,SAAS;AAAA,MAClB,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS,CAAC;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,MACb,GAAM;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MACb,GAAM;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAA;AAAA,IACF,CAAA;AAEDC,kBAAc,eAAe,UAAU,CAAC;AAAA,MACtC,WAAWC,SAAQ;AAAA,MACnB,OAAO;AAAA,QACL,MAAM;AAAA,MACP;AAAA,MACD,WAAW,MAAMC,KAAU,MAAC,QAAQA,KAAU,MAAC,KAAK;AAAA,MACpD,QAAQ,MAAM,MAAM,OAAO,MAAM,OAAO,KAAK,EAAE,MAAM,gBAAgB,QAAQ,EAAE,KAAK,MAAM,OAAO,IAAG,EAAG,CAAA,IAAI,OAAO,KAAK,EAAE,MAAM,eAAgB,CAAA;AAAA,IACnJ,CAAG,GAEDC,IAAAA,YAAY,MAAM;AAChBH,oBAAc,eAAe,UAAU,CAAE;AAAA,IAC7C,CAAG;AAEDI,QAAAA,UAAU,YAAY;AAAA,IAExB,CAAG;AAGD,aAAS,oBAAoBC,aAAY;AACvC,UAAI,iBAAiB,CAAE;AAEvB,eAAS,QAAQ,UAAU;AACzB,cAAM,EAAE,UAAU,GAAG,wBAAuB,IAAK;AACjD,uBAAe,KAAK,uBAAuB;AAE3C,YAAI,YAAY,MAAM,QAAQ,QAAQ,GAAG;AACvC,mBAAS,QAAQ,WAAS,QAAQ,KAAK,CAAC;AAAA,QAChD;AAAA,MACA;AAEI,MAAAA,YAAW,QAAQ,cAAY,QAAQ,QAAQ,CAAC;AAChD,aAAO;AAAA,IACX;AAIE,mBAAe,sBAAsB,mBAAmB;AACtD,YAAM,MAAM;AACZ,UAAI;AAEF,cAAM,sBAAsB,oBAAoBC,WAAgB,MAAC,GAAG;AAEpE,gBAAQ,IAAI,mBAAmB;AAC/B,gBAAQ,IAAKA,WAAAA,MAAiB,GAAG;AACjC,cAAMC,WAAkB,QAAC,YAAY,mBAAmB;AAExD,gBAAQ,IAAI,uCAAuC;AAAA,MACpD,SAAQ,OAAO;AACd,gBAAQ,MAAM,oCAAoC,KAAK;AACvD,cAAM;AAAA,MACZ;AAAA,IACA;AAEE,mBAAe,eAAe,UAAU;AAEtC,YAAM,cAAc,QAAQ,iDAAiD,SAAS,IAAI,IAAI;AAG9F,UAAI,aAAa;AACf,cAAMA,mBAAmB,OAAO,SAAS,GAAG;AAAA,MAClD,OAAW;AACL,cAAM,6BAA6B;AAAA,MACzC;AAAA,IACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { onUnmounted, onMounted, resolveComponent, createElementBlock, openBlock, createBlock, createCommentVNode, createVNode, withCtx, createElementVNode, createTextVNode } from "vue";
|
|
1
|
+
import { ref, reactive, onUnmounted, onMounted, resolveComponent, createElementBlock, openBlock, createBlock, createCommentVNode, createVNode, withCtx, createElementVNode, createTextVNode, unref, isRef } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
import { state as state$1 } from "../../../globals/views/store/globals.js";
|
|
4
4
|
import { state } from "../../../auth/views/store/auth.js";
|
|
@@ -16,6 +16,21 @@ const _sfc_main = {
|
|
|
16
16
|
setup(__props) {
|
|
17
17
|
const route = useRoute();
|
|
18
18
|
const router = useRouter();
|
|
19
|
+
ref(null);
|
|
20
|
+
let sort = reactive({
|
|
21
|
+
param: "order",
|
|
22
|
+
order: "asc",
|
|
23
|
+
options: [{
|
|
24
|
+
label: "Order",
|
|
25
|
+
value: "order"
|
|
26
|
+
}, {
|
|
27
|
+
label: "Name",
|
|
28
|
+
value: "name"
|
|
29
|
+
}, {
|
|
30
|
+
label: "Date",
|
|
31
|
+
value: "createdAt"
|
|
32
|
+
}]
|
|
33
|
+
});
|
|
19
34
|
state$1.navigation_bar.actions = [{
|
|
20
35
|
component: _sfc_main$1,
|
|
21
36
|
props: {
|
|
@@ -40,11 +55,12 @@ const _sfc_main = {
|
|
|
40
55
|
categories.forEach((category) => flatten(category));
|
|
41
56
|
return flatCategories;
|
|
42
57
|
}
|
|
43
|
-
async function updateCategoriesOrder(
|
|
58
|
+
async function updateCategoriesOrder(updatedCategories) {
|
|
59
|
+
alert("helo");
|
|
44
60
|
try {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
console.log(
|
|
61
|
+
const flattenedCategories = flattenCategoryTree(state$2.all);
|
|
62
|
+
console.log(flattenedCategories);
|
|
63
|
+
console.log(state$2.all);
|
|
48
64
|
await actions.updateOrder(flattenedCategories);
|
|
49
65
|
console.log("Categories order updated successfully");
|
|
50
66
|
} catch (error) {
|
|
@@ -68,7 +84,7 @@ const _sfc_main = {
|
|
|
68
84
|
class: "radius-big mn-b-thin mobile:flex-wrap flex-nowrap flex-v-center flex"
|
|
69
85
|
}, {
|
|
70
86
|
default: withCtx(() => [
|
|
71
|
-
_cache[
|
|
87
|
+
_cache[3] || (_cache[3] = createElementVNode("h2", { class: "mn-r-auto" }, " Categories ", -1)),
|
|
72
88
|
createVNode(_component_router_link, {
|
|
73
89
|
to: {
|
|
74
90
|
name: "Category Add",
|
|
@@ -78,8 +94,8 @@ const _sfc_main = {
|
|
|
78
94
|
},
|
|
79
95
|
class: "uppercase t-medium pd-small radius-big bg-white nav-link"
|
|
80
96
|
}, {
|
|
81
|
-
default: withCtx(() => _cache[
|
|
82
|
-
createTextVNode(" Add
|
|
97
|
+
default: withCtx(() => _cache[2] || (_cache[2] = [
|
|
98
|
+
createTextVNode(" Add New ")
|
|
83
99
|
])),
|
|
84
100
|
_: 1
|
|
85
101
|
}, 8, ["to"])
|
|
@@ -101,8 +117,13 @@ const _sfc_main = {
|
|
|
101
117
|
},
|
|
102
118
|
options: {
|
|
103
119
|
user: state.user._id,
|
|
104
|
-
rootOnly: true
|
|
120
|
+
rootOnly: true,
|
|
121
|
+
excludeChildren: false
|
|
105
122
|
},
|
|
123
|
+
sort: unref(sort),
|
|
124
|
+
"onUpdate:sort": _cache[0] || (_cache[0] = ($event) => isRef(sort) ? sort.value = $event : sort = $event),
|
|
125
|
+
items: state$2.all,
|
|
126
|
+
"onUpdate:items": _cache[1] || (_cache[1] = ($event) => state$2.all = $event),
|
|
106
127
|
class: "cols-1 pos-relative w-100 rows-1 gap-thin"
|
|
107
128
|
}, {
|
|
108
129
|
default: withCtx(({
|
|
@@ -110,8 +131,8 @@ const _sfc_main = {
|
|
|
110
131
|
}) => [
|
|
111
132
|
items ? (openBlock(), createBlock(_sfc_main$4, {
|
|
112
133
|
key: 0,
|
|
113
|
-
items,
|
|
114
|
-
state:
|
|
134
|
+
items: state$2.all,
|
|
135
|
+
state: state$2.all,
|
|
115
136
|
onUpdate: updateCategoriesOrder
|
|
116
137
|
}, {
|
|
117
138
|
default: withCtx(({ item }) => [
|
|
@@ -120,11 +141,11 @@ const _sfc_main = {
|
|
|
120
141
|
onDelete: deleteCategory
|
|
121
142
|
}, null, 8, ["category"])
|
|
122
143
|
]),
|
|
123
|
-
_:
|
|
124
|
-
},
|
|
144
|
+
_: 1
|
|
145
|
+
}, 8, ["items", "state"])) : createCommentVNode("", true)
|
|
125
146
|
]),
|
|
126
147
|
_: 1
|
|
127
|
-
}, 8, ["store", "options"])
|
|
148
|
+
}, 8, ["store", "options", "sort", "items"])
|
|
128
149
|
]);
|
|
129
150
|
};
|
|
130
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Categories.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Categories.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin bg-white\">\n <Block v-if=\"!MOBILE_APP\" \n class=\"radius-big mn-b-thin mobile:flex-wrap flex-nowrap flex-v-center flex\"\n >\n <h2 class=\"mn-r-auto\">\n
|
|
1
|
+
{"version":3,"file":"Categories.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Categories.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin bg-white\">\n <Block v-if=\"!MOBILE_APP\" \n class=\"radius-big mn-b-thin mobile:flex-wrap flex-nowrap flex-v-center flex\"\n >\n <h2 class=\"mn-r-auto\">\n Categories\n </h2>\n\n <router-link \n :to=\"{\n name: 'Category Add', \n params: { \n _id: $route.params._id\n } \n }\"\n class=\"uppercase t-medium pd-small radius-big bg-white nav-link\"\n >\n Add New\n </router-link>\n </Block>\n\n <Feed\n :search=\"true\"\n :showLoadMore=\"false\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no products available.'\n }\n }\"\n :store=\"{\n read: (options) => categories.actions.read(options),\n state: categories.state\n }\"\n :options=\"{\n user: auth.state.user._id,\n rootOnly: true,\n excludeChildren: false\n }\"\n v-model:sort=\"sort\"\n v-model:items=\"categories.state.all\"\n v-slot=\"{ \n items \n }\"\n class=\"cols-1 pos-relative w-100 rows-1 gap-thin\"\n >\n <Tree \n v-if=\"items\" \n :items=\"categories.state.all\" \n :state=\"categories.state.all\" \n @update=\"updateCategoriesOrder\" \n v-slot=\"{ item }\"\n >\n <CardCategory \n :category=\"item\" \n @delete=\"deleteCategory\" \n />\n </Tree>\n </Feed>\n </div>\n</template>\n\n<script setup>\n import { onMounted, onUnmounted, computed, ref,reactive } from 'vue';\n import { useRoute, useRouter } from 'vue-router';\n\n import * as globals from '@martyrs/src/modules/globals/views/store/globals';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth'; \n import * as categories from '@martyrs/src/modules/products/store/categories'; \n\n const route = useRoute();\n const router = useRouter();\n\n import Button from \"@martyrs/src/components/Button/Button.vue\";\n import Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n import Tree from \"@martyrs/src/components/Tree/Tree.vue\";\n \n import CardCategory from '@martyrs/src/modules/products/components/blocks/CardCategory.vue';\n\n import IconPlus from '@martyrs/src/modules/icons/navigation/IconPlus.vue'\n\n let search = ref(null)\n\n let sort = reactive({\n param: 'order',\n order: 'asc',\n options: [{\n label: 'Order',\n value: 'order'\n },{\n label: 'Name',\n value: 'name'\n },{\n label: 'Date',\n value: 'createdAt'\n }]\n })\n\n globals.state.navigation_bar.actions = [{\n component: IconPlus,\n props: {\n fill: \"rgb(var(--main))\" \n },\n condition: () => auth.state.user && auth.state.user._id,\n action: () => route.params._id ? router.push({ name: 'Category Add', params: { _id: route.params._id} }) : router.push({ name: 'Category Add' })\n }],\n\n onUnmounted(() => {\n globals.state.navigation_bar.actions = [];\n });\n\n onMounted(async () => {\n \n });\n\n // Функция для преобразования иерархического дерева категорий в плоский массив\n function flattenCategoryTree(categories) {\n let flatCategories = [];\n \n function flatten(category) {\n const { children, ...categoryWithoutChildren } = category;\n flatCategories.push(categoryWithoutChildren);\n \n if (children && Array.isArray(children)) {\n children.forEach(child => flatten(child));\n }\n }\n \n categories.forEach(category => flatten(category));\n return flatCategories;\n }\n\n\n // Функция для обновления порядка категорий\n async function updateCategoriesOrder(updatedCategories) {\n alert('helo')\n try {\n // Преобразуем категории в плоский массив\n const flattenedCategories = flattenCategoryTree(categories.state.all);\n \n console.log(flattenedCategories)\n console.log( categories.state.all)\n await categories.actions.updateOrder(flattenedCategories);\n \n console.log('Categories order updated successfully');\n } catch (error) {\n console.error('Error updating categories order:', error);\n throw error;\n }\n }\n\n async function deleteCategory(category) {\n // Запрашиваем подтверждение у пользователя\n const isConfirmed = confirm(`Are you sure you want to delete the category \"${category.name}\"?`);\n \n // Если пользователь подтвердил удаление, продолжаем процесс\n if (isConfirmed) {\n await categories.actions.delete(category.url);\n } else {\n alert('Category deletion cancelled'); \n }\n }\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":["globals.state","IconPlus","auth.state","categories.state","categories.actions"],"mappings":";;;;;;;;;;;;;;;;AAuEE,UAAM,QAAQ,SAAU;AACxB,UAAM,SAAS,UAAW;AAWb,QAAI,IAAI;AAErB,QAAI,OAAO,SAAS;AAAA,MAClB,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS,CAAC;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,MACb,GAAM;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MACb,GAAM;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAA;AAAA,IACF,CAAA;AAEDA,YAAc,eAAe,UAAU,CAAC;AAAA,MACtC,WAAWC;AAAAA,MACX,OAAO;AAAA,QACL,MAAM;AAAA,MACP;AAAA,MACD,WAAW,MAAMC,MAAW,QAAQA,MAAW,KAAK;AAAA,MACpD,QAAQ,MAAM,MAAM,OAAO,MAAM,OAAO,KAAK,EAAE,MAAM,gBAAgB,QAAQ,EAAE,KAAK,MAAM,OAAO,IAAG,EAAG,CAAA,IAAI,OAAO,KAAK,EAAE,MAAM,eAAgB,CAAA;AAAA,IACnJ,CAAG,GAED,YAAY,MAAM;AAChBF,cAAc,eAAe,UAAU,CAAE;AAAA,IAC7C,CAAG;AAED,cAAU,YAAY;AAAA,IAExB,CAAG;AAGD,aAAS,oBAAoB,YAAY;AACvC,UAAI,iBAAiB,CAAE;AAEvB,eAAS,QAAQ,UAAU;AACzB,cAAM,EAAE,UAAU,GAAG,wBAAuB,IAAK;AACjD,uBAAe,KAAK,uBAAuB;AAE3C,YAAI,YAAY,MAAM,QAAQ,QAAQ,GAAG;AACvC,mBAAS,QAAQ,WAAS,QAAQ,KAAK,CAAC;AAAA,QAChD;AAAA,MACA;AAEI,iBAAW,QAAQ,cAAY,QAAQ,QAAQ,CAAC;AAChD,aAAO;AAAA,IACX;AAIE,mBAAe,sBAAsB,mBAAmB;AACtD,YAAM,MAAM;AACZ,UAAI;AAEF,cAAM,sBAAsB,oBAAoBG,QAAiB,GAAG;AAEpE,gBAAQ,IAAI,mBAAmB;AAC/B,gBAAQ,IAAKA,QAAiB,GAAG;AACjC,cAAMC,QAAmB,YAAY,mBAAmB;AAExD,gBAAQ,IAAI,uCAAuC;AAAA,MACpD,SAAQ,OAAO;AACd,gBAAQ,MAAM,oCAAoC,KAAK;AACvD,cAAM;AAAA,MACZ;AAAA,IACA;AAEE,mBAAe,eAAe,UAAU;AAEtC,YAAM,cAAc,QAAQ,iDAAiD,SAAS,IAAI,IAAI;AAG9F,UAAI,aAAa;AACf,cAAMA,QAAmB,OAAO,SAAS,GAAG;AAAA,MAClD,OAAW;AACL,cAAM,6BAA6B;AAAA,MACzC;AAAA,IACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -17,7 +17,10 @@ const globals = require("../../../globals/views/store/globals.cjs");
|
|
|
17
17
|
const auth = require("../../../auth/views/store/auth.cjs");
|
|
18
18
|
const categories = require("../../store/categories.cjs");
|
|
19
19
|
;/* empty css */
|
|
20
|
-
const _hoisted_1 = {
|
|
20
|
+
const _hoisted_1 = {
|
|
21
|
+
key: 0,
|
|
22
|
+
class: "pd-thin bg-white for-transition w-100"
|
|
23
|
+
};
|
|
21
24
|
const _hoisted_2 = { class: "mn-r-auto" };
|
|
22
25
|
const _hoisted_3 = { class: "mn-b-medium w-100 flex-nowrap gap-thin flex" };
|
|
23
26
|
const _hoisted_4 = { class: "mn-b-medium w-100 flex-nowrap gap-thin flex" };
|
|
@@ -26,14 +29,22 @@ const _hoisted_6 = ["onClick"];
|
|
|
26
29
|
const _hoisted_7 = ["onClick"];
|
|
27
30
|
const _sfc_main = {
|
|
28
31
|
__name: "CategoryEdit",
|
|
29
|
-
|
|
32
|
+
emits: ["page-loading", "page-loaded"],
|
|
33
|
+
setup(__props, { emit: __emit }) {
|
|
30
34
|
const route = vueRouter.useRoute();
|
|
31
35
|
const router = vueRouter.useRouter();
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
const emits = __emit;
|
|
37
|
+
const isLoading = vue.ref(true);
|
|
38
|
+
vue.onMounted(async () => {
|
|
39
|
+
emits("page-loading");
|
|
40
|
+
if (route.params.category) {
|
|
41
|
+
await categories.actions.read({ url: route.params.category });
|
|
42
|
+
} else {
|
|
43
|
+
categories.actions.clean();
|
|
44
|
+
}
|
|
45
|
+
emits("page-loaded");
|
|
46
|
+
isLoading.value = false;
|
|
47
|
+
});
|
|
37
48
|
vue.computed(() => categories.state.current);
|
|
38
49
|
vue.computed(() => route.name);
|
|
39
50
|
globals.state.navigation_bar.actions = [{
|
|
@@ -64,7 +75,7 @@ const _sfc_main = {
|
|
|
64
75
|
});
|
|
65
76
|
}
|
|
66
77
|
return (_ctx, _cache) => {
|
|
67
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
78
|
+
return !isLoading.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
68
79
|
!_ctx.MOBILE_APP ? (vue.openBlock(), vue.createBlock(Block.default, {
|
|
69
80
|
key: 0,
|
|
70
81
|
class: "radius-big mn-b-thin flex-nowrap flex-v-center flex"
|
|
@@ -204,7 +215,7 @@ const _sfc_main = {
|
|
|
204
215
|
]),
|
|
205
216
|
_: 1
|
|
206
217
|
}, 8, ["actions"])
|
|
207
|
-
]);
|
|
218
|
+
])) : vue.createCommentVNode("", true);
|
|
208
219
|
};
|
|
209
220
|
}
|
|
210
221
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoryEdit.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/CategoryEdit.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin bg-white for-transition w-100\">\n <Block v-if=\"!MOBILE_APP\" class=\"radius-big 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-big 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\n <div class=\"mn-b-medium w-100 flex-nowrap gap-thin flex\">\n <UploadImage \n v-model:photo=\"categories.state.current.photo\"\n :uploadPath=\"'categories'\"\n class=\"w-8r aspect-1x1 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 mn-b-small bg-white radius-small pd-medium\"\n /> \n </div>\n\n <div class=\"mn-b-medium 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=\"Display product\"\n class=\"pos-relative w-100 mn-b-small 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.localization.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.localization\" \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.localization.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 <!-- Subcategories -->\n <!-- <Block\n title=\"Subcategories\"\n placeholder=\"No subcategories added yet\"\n :actions=\"[{\n label: '+',\n function: () => categories.state.current.children.push({name: '', url: ''})\n }]\"\n class=\"mn-b-thin\"\n >\n \n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.children\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Subcategory name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.url\"\n placeholder=\"Subcategory\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.children.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 <!-- 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 } 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';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth'; \n import * as categories from '@martyrs/src/modules/products/store/categories';\n\n const route = useRoute()\n const router = useRouter()\n\n // Data prefetching\n if (route.params.category) {\n
|
|
1
|
+
{"version":3,"file":"CategoryEdit.vue.cjs","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-big 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-big 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\n <div class=\"mn-b-medium w-100 flex-nowrap gap-thin flex\">\n <UploadImage \n v-model:photo=\"categories.state.current.photo\"\n :uploadPath=\"'categories'\"\n class=\"w-8r aspect-1x1 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 mn-b-small bg-white radius-small pd-medium\"\n /> \n </div>\n\n <div class=\"mn-b-medium 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=\"Display product\"\n class=\"pos-relative w-100 mn-b-small 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.localization.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.localization\" \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.localization.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 <!-- Subcategories -->\n <!-- <Block\n title=\"Subcategories\"\n placeholder=\"No subcategories added yet\"\n :actions=\"[{\n label: '+',\n function: () => categories.state.current.children.push({name: '', url: ''})\n }]\"\n class=\"mn-b-thin\"\n >\n \n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.children\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Subcategory name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.url\"\n placeholder=\"Subcategory\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.children.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 <!-- 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';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth'; \n import * as categories from '@martyrs/src/modules/products/store/categories';\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 await categories.actions.update(categories.state.current)\n redirectTo()\n } else {\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 /* Your styles here */\n</style>\n"],"names":["useRoute","useRouter","ref","onMounted","categories.actions","computed","categories.state","globals.state","IconCheckmark","auth.state","onUnmounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuME,UAAM,QAAQA,UAAQ,SAAA;AACtB,UAAM,SAASC,UAAS,UAAA;AAExB,UAAM,QAAQ;AAGd,UAAM,YAAYC,IAAAA,IAAI,IAAI;AAC1BC,QAAAA,UAAU,YAAY;AACpB,YAAM,cAAc;AACpB,UAAI,MAAM,OAAO,UAAU;AACzB,cAAMC,WAAAA,QAAmB,KAAK,EAAC,KAAK,MAAM,OAAO,SAAQ,CAAC;AAAA,MAChE,OAAW;AACLA,mBAAAA,QAAmB,MAAO;AAAA,MAChC;AAEI,YAAM,aAAa;AACnB,gBAAU,QAAQ;AAAA,IACnB,CAAA;AAGgBC,QAAQ,SAAC,MAAMC,WAAAA,MAAiB,OAAO;AACtCD,QAAQ,SAAC,MAAM,MAAM,IAAI;AAG3CE,kBAAc,eAAe,UAAU,CAAC;AAAA,MACtC,WAAWC,cAAa;AAAA,MACxB,OAAO;AAAA,QACL,MAAM;AAAA,MACP;AAAA,MACD,WAAW,MAAMC,KAAU,MAAC,QAAQA,KAAU,MAAC,KAAK;AAAA,MACpD,QAAQ,MAAM,SAAQ;AAAA,IAC1B,CAAG,GAEFC,IAAAA,YAAY,MAAM;AACfH,oBAAc,eAAe,UAAU,CAAE;AAAA,IAC7C,CAAG;AAKD,mBAAe,WAAW;AACxB,UAAI,MAAM,OAAO,UAAU;AACzB,cAAMH,WAAkB,QAAC,OAAOE,WAAAA,MAAiB,OAAO;AACxD,mBAAU;AAAA,MAChB,OAAW;AACL,cAAMF,WAAkB,QAAC,OAAOE,WAAAA,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, onUnmounted, createElementBlock, openBlock, createBlock,
|
|
1
|
+
import { ref, onMounted, computed, onUnmounted, createElementBlock, createCommentVNode, openBlock, createBlock, createVNode, withCtx, createElementVNode, toDisplayString, unref, createTextVNode, Fragment, renderList } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
import _sfc_main$5 from "../../../icons/navigation/IconDelete.vue.js";
|
|
4
4
|
import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
|
|
@@ -15,7 +15,10 @@ import { state as state$2 } from "../../../globals/views/store/globals.js";
|
|
|
15
15
|
import { state as state$1 } from "../../../auth/views/store/auth.js";
|
|
16
16
|
import { actions, state } from "../../store/categories.js";
|
|
17
17
|
/* empty css */
|
|
18
|
-
const _hoisted_1 = {
|
|
18
|
+
const _hoisted_1 = {
|
|
19
|
+
key: 0,
|
|
20
|
+
class: "pd-thin bg-white for-transition w-100"
|
|
21
|
+
};
|
|
19
22
|
const _hoisted_2 = { class: "mn-r-auto" };
|
|
20
23
|
const _hoisted_3 = { class: "mn-b-medium w-100 flex-nowrap gap-thin flex" };
|
|
21
24
|
const _hoisted_4 = { class: "mn-b-medium w-100 flex-nowrap gap-thin flex" };
|
|
@@ -24,14 +27,22 @@ const _hoisted_6 = ["onClick"];
|
|
|
24
27
|
const _hoisted_7 = ["onClick"];
|
|
25
28
|
const _sfc_main = {
|
|
26
29
|
__name: "CategoryEdit",
|
|
27
|
-
|
|
30
|
+
emits: ["page-loading", "page-loaded"],
|
|
31
|
+
setup(__props, { emit: __emit }) {
|
|
28
32
|
const route = useRoute();
|
|
29
33
|
const router = useRouter();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
const emits = __emit;
|
|
35
|
+
const isLoading = ref(true);
|
|
36
|
+
onMounted(async () => {
|
|
37
|
+
emits("page-loading");
|
|
38
|
+
if (route.params.category) {
|
|
39
|
+
await actions.read({ url: route.params.category });
|
|
40
|
+
} else {
|
|
41
|
+
actions.clean();
|
|
42
|
+
}
|
|
43
|
+
emits("page-loaded");
|
|
44
|
+
isLoading.value = false;
|
|
45
|
+
});
|
|
35
46
|
computed(() => state.current);
|
|
36
47
|
computed(() => route.name);
|
|
37
48
|
state$2.navigation_bar.actions = [{
|
|
@@ -62,7 +73,7 @@ const _sfc_main = {
|
|
|
62
73
|
});
|
|
63
74
|
}
|
|
64
75
|
return (_ctx, _cache) => {
|
|
65
|
-
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
76
|
+
return !isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
66
77
|
!_ctx.MOBILE_APP ? (openBlock(), createBlock(_sfc_main$2, {
|
|
67
78
|
key: 0,
|
|
68
79
|
class: "radius-big mn-b-thin flex-nowrap flex-v-center flex"
|
|
@@ -202,7 +213,7 @@ const _sfc_main = {
|
|
|
202
213
|
]),
|
|
203
214
|
_: 1
|
|
204
215
|
}, 8, ["actions"])
|
|
205
|
-
]);
|
|
216
|
+
])) : createCommentVNode("", true);
|
|
206
217
|
};
|
|
207
218
|
}
|
|
208
219
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoryEdit.vue.js","sources":["../../../../../../../src/modules/products/components/pages/CategoryEdit.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin bg-white for-transition w-100\">\n <Block v-if=\"!MOBILE_APP\" class=\"radius-big 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-big 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\n <div class=\"mn-b-medium w-100 flex-nowrap gap-thin flex\">\n <UploadImage \n v-model:photo=\"categories.state.current.photo\"\n :uploadPath=\"'categories'\"\n class=\"w-8r aspect-1x1 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 mn-b-small bg-white radius-small pd-medium\"\n /> \n </div>\n\n <div class=\"mn-b-medium 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=\"Display product\"\n class=\"pos-relative w-100 mn-b-small 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.localization.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.localization\" \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.localization.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 <!-- Subcategories -->\n <!-- <Block\n title=\"Subcategories\"\n placeholder=\"No subcategories added yet\"\n :actions=\"[{\n label: '+',\n function: () => categories.state.current.children.push({name: '', url: ''})\n }]\"\n class=\"mn-b-thin\"\n >\n \n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.children\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Subcategory name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.url\"\n placeholder=\"Subcategory\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.children.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 <!-- 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 } 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';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth'; \n import * as categories from '@martyrs/src/modules/products/store/categories';\n\n const route = useRoute()\n const router = useRouter()\n\n // Data prefetching\n if (route.params.category) {\n
|
|
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-big 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-big 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\n <div class=\"mn-b-medium w-100 flex-nowrap gap-thin flex\">\n <UploadImage \n v-model:photo=\"categories.state.current.photo\"\n :uploadPath=\"'categories'\"\n class=\"w-8r aspect-1x1 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 mn-b-small bg-white radius-small pd-medium\"\n /> \n </div>\n\n <div class=\"mn-b-medium 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=\"Display product\"\n class=\"pos-relative w-100 mn-b-small 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.localization.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.localization\" \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.localization.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 <!-- Subcategories -->\n <!-- <Block\n title=\"Subcategories\"\n placeholder=\"No subcategories added yet\"\n :actions=\"[{\n label: '+',\n function: () => categories.state.current.children.push({name: '', url: ''})\n }]\"\n class=\"mn-b-thin\"\n >\n \n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.children\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Subcategory name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.url\"\n placeholder=\"Subcategory\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.children.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 <!-- 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';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth'; \n import * as categories from '@martyrs/src/modules/products/store/categories';\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 await categories.actions.update(categories.state.current)\n redirectTo()\n } else {\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 /* Your styles here */\n</style>\n"],"names":["categories.actions","categories.state","globals.state","IconCheckmark","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuME,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;AACzB,cAAMF,QAAmB,OAAOC,MAAiB,OAAO;AACxD,mBAAU;AAAA,MAChB,OAAW;AACL,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
|
-
const Tab = require("../../../../components/Tab/Tab.
|
|
5
|
+
const Tab = require("../../../../components/Tab/Tab.vue.cjs");
|
|
6
6
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
7
7
|
const CardLeftover = require("../blocks/CardLeftover.vue.cjs");
|
|
8
8
|
const leftovers = require("../../store/leftovers.cjs");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, computed, createElementBlock, openBlock, createElementVNode, createVNode, toDisplayString, unref, withCtx, Fragment, renderList, createBlock } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
|
-
import _sfc_main$1 from "../../../../components/Tab/Tab.
|
|
3
|
+
import _sfc_main$1 from "../../../../components/Tab/Tab.vue.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
|
|
5
5
|
import CardLeftover from "../blocks/CardLeftover.vue.js";
|
|
6
6
|
import { state, actions } from "../../store/leftovers.js";
|
|
@@ -11,7 +11,7 @@ require("../../store/categories.cjs");
|
|
|
11
11
|
const shopcart = require("../../../orders/store/shopcart.cjs");
|
|
12
12
|
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
13
13
|
;/* empty css */
|
|
14
|
-
;/* empty css
|
|
14
|
+
;/* empty css */
|
|
15
15
|
const PopupDateSelector = require("../../../globals/views/components/blocks/PopupDateSelector.vue.cjs");
|
|
16
16
|
const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
|
|
17
17
|
const IconShopcartAdd = require("../../../icons/actions/IconShopcartAdd.vue.cjs");
|
|
@@ -9,7 +9,7 @@ import "../../store/categories.js";
|
|
|
9
9
|
import { state as state$2, actions as actions$1 } from "../../../orders/store/shopcart.js";
|
|
10
10
|
import _sfc_main$5 from "../../../../components/Button/Button.vue.js";
|
|
11
11
|
/* empty css */
|
|
12
|
-
/* empty css
|
|
12
|
+
/* empty css */
|
|
13
13
|
import _sfc_main$4 from "../../../globals/views/components/blocks/PopupDateSelector.vue.js";
|
|
14
14
|
import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
|
|
15
15
|
import _sfc_main$3 from "../../../icons/actions/IconShopcartAdd.vue.js";
|
|
@@ -5,7 +5,7 @@ const vueRouter = require("vue-router");
|
|
|
5
5
|
require("vue-i18n");
|
|
6
6
|
;/* empty css */
|
|
7
7
|
const Block = require("../../../../components/Block/Block.vue.cjs");
|
|
8
|
-
;/* empty css
|
|
8
|
+
;/* empty css */
|
|
9
9
|
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
10
10
|
const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
|
|
11
11
|
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
@@ -56,6 +56,7 @@ const _sfc_main = {
|
|
|
56
56
|
categories.state.all = await categories.actions.read({
|
|
57
57
|
user: auth.state.user._id,
|
|
58
58
|
rootOnly: true,
|
|
59
|
+
excludeChildren: false,
|
|
59
60
|
limit: 100
|
|
60
61
|
});
|
|
61
62
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductEdit.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/ProductEdit.vue"],"sourcesContent":["<template>\n\t<div class=\"for-transition w-100 cols-1 bg-white pd-thin gap-thin\">\n \n <Block v-if=\"!MOBILE_APP\" class=\"flex-nowrap gap-thin flex-v-center flex\">\n \n <h2 class=\"t-truncate mn-r-auto\">\n\t\t\t {{ route.params.product ? products.state.current.name : 'Create Product' }}\n\t\t\t</h2>\n\n\t\t\t<Button \n\t\t\t\tv-if=\"route.params.product\"\n \t:submit=\"onDelete\" \n \t:callback=\"redirectTo\"\n \tclass=\"w-10 w-max-20r w-min-8r bg-red\"\n >\n \t\tDelete \n \t</Button>\n\n <Button \n \t:submit=\"onSubmit\" \n \t:callback=\"redirectTo\"\n \tclass=\"w-10 w-max-20r w-min-8r bg-main\"\n >\n \t\tSave\n \t</Button>\n </Block>\n\n <Block\n\t\t\tplaceholder=\"The product doesn't have any images yet.\"\n\t\t\tclass=\"h-min\"\n\t\t>\n\t\t\t<EditImages \n\t\t\t\t:images=\"products.state.current.images\"\n\t\t\t\t:uploadPath=\"'photos'\" \n\t\t\t\t@update:images=\"(imagesNew) => { products.state.current.images = imagesNew }\" \n\t\t\t/>\n\t\t</Block>\n\n <div class=\"cols-2 gap-thin\">\n\n \t<Block\n \t\t\ttitle=\"Profile\"\n \t\t>\n\t\t\t\t<EditProductInfo \t\t\n\t\t\t\t\t:product=\"products.state.current\"\n\t\t\t\t/>\n\t\t\t</Block>\n\n\t\t\t<Block\n\t\t\t\ttitle=\"Categories\"\n\t\t\t\t:actions=\"[{\n\t\t label: '+',\n\t\t function: () => router.push({\n\t\t\t\t\t\tname: 'Categories', \n\t\t\t\t\t\tparams: { \n\t\t\t\t\t\t\t_id: route.params._id\n\t\t\t\t\t\t} \n\t\t\t\t\t})\n\t\t }]\"\n\t\t class=\"h-100 o-y-scroll\"\n\t\t\t>\n\t\t <Tree \n\t v-if=\"categories.state.all\" \n\t :items=\"categories.state.all\" \n\t :state=\"categories.state.all\" \n\t @update=\"updateCategoriesOrder\" \n\t\t\t\t\tv-slot=\"{ item }\"\n\t\t\t\t\tclass=\"h-zero pos-relative d-block\"\n\t >\n\t \t<Checkbox \n\t\t\t name=\"categories\"\n\t\t\t class=\"w-100 mn-t-small bg-white radius-small pd-small\"\n\t\t\t :label=\"item.name\"\n\t\t\t :value=\"item._id\"\n\t\t\t :radio=\"products.state.current.category\"\n\t\t\t @update:radio=\"event => selectCategory(item, event)\"\n\t\t\t />\n\t\t </Tree>\n\t\t\t</Block>\n\n\t\t\t<Block\n\t\t\t\ttitle=\"Parameters\"\n\t\t\t\tplaceholder=\"No parameters added yet\"\n\t\t\t\t:actions=\"[{\n\t\t\t\t\tlabel: '+',\n\t\t\t\t\tfunction: () => products.state.current.information.push({name: '', value: ''})\n\t\t\t\t}]\"\n\t\t\t\tclass=\"cols-1 gap-thin\"\n\t\t\t>\n <div \n \tclass=\"gap-thin flex-nowrap flex\" \n \tv-for=\"(item, index) in products.state.current.information\" \n \t:key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.value\"\n placeholder=\"Value\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div class=\"radius-small h-100 i-big flex-center flex aspect-1x1 bg-red\">\n\t <IconDelete \n\t \t@click=\"() => products.state.current.information.splice(index, 1)\" \n\t \tclass=\"i-medium\"\n\t />\n\t </div>\n </div>\n\t\t\t</Block>\n\n\n\t\t\t<Block\n\t\t title=\"Ingredients\"\n\t\t\t\tplaceholder=\"No ingridients added yet\"\n\t\t\t\t:actions=\"[{\n\t label: '+',\n\t function: () => openIngredientPopup()\n\t }]\"\n\t\t >\n\t\t \t<div v-if=\"products.state.current.ingredients.length > 0\" class=\"cols-1 gap-thin\">\n\t\t\t <CardPosition \n\t\t\t v-for=\"(product, index) in products.state.current.ingredients\" \n\t\t\t :key=\"product._id\" \n\t\t\t :product=\"product\"\n\t\t\t :array=\"products.state.current.ingredients\"\n\t\t\t :products=\"Products\"\n\t\t :showPrice=\"false\"\n\t\t\t @add=\"(item) => {\n\t\t\t\t\t globals.actions.add(products.state.current.ingredients, item);\n\t\t\t\t\t closeIngredientPopup();\n\t\t\t\t\t }\"\n\t\t\t\t\t @update=\"(item) => {\n\t\t\t\t\t globals.actions.update(products.state.current.ingredients, item, index);\n\t\t\t\t\t closeIngredientPopup();\n\t\t\t\t\t }\"\n\t\t\t\t\t @delete=\"(item) => {\n\t\t\t\t\t globals.actions.delete(products.state.current.ingredients, item, index);\n\t\t\t\t\t closeIngredientPopup();\n\t\t\t\t\t }\"\n\t\t\t />\n\t\t\t </div>\n\t\t </Block>\n\n\t\t <Popup \n\t title=\"Add ingredient\" \n\t @close-popup=\"closeIngredientPopup\" \n\t :isPopupOpen=\"isOpenIngredientPopup\"\n\t class=\"bg-white w-min-30r w-max-30r radius-big pd-medium\"\n\t >\n\t <div class=\"bg-light mn-b-thin h-min-20r h-max-20r o-scroll pd-medium radius-big\">\n\t <Feed\n\t :search=\"{\n\t \tclass: 'bg-white mn-b-thin'\n\t }\"\n\t :states=\"{\n\t empty: {\n\t title: 'No Products Found',\n\t description: 'Currently, there are no such products available.'\n\t }\n\t }\"\n\t :store=\"{\n\t read: (options) => products.actions.read(options),\n\t state: null\n\t }\"\n\t :options=\"{\n\t owner: route.params._id,\n\t }\"\n\t v-slot=\"{ \n\t items \n\t }\"\n\t class=\"\"\n\t >\n\t <CardOrderItem\n\t v-for=\"(product, index) in items\" :key=\"product._id\"\n\t :editable=\"false\" \n\t :product=\"product\" \n\t @click=\"() => { \n\t let p = { ...product };\n\t p.quantity = 1;\n\t p.type = 'pcs'\n\t globals.actions.add(products.state.current.ingredients,p)\n\t closeIngredientPopup();\n\t }\"\n\t class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n\t />\n\t </Feed>\n\t </div>\n\t </Popup>\n\n\n\t\t</div> \n\n\t\t\t<Block\n\t\t\t\ttitle=\"Localization\"\n\t\t\t\tplaceholder=\"No localizations added yet\"\n\t\t\t\t:actions=\"[{\n\t\t\t\t\tlabel: '+',\n\t\t\t\t\tfunction: () => products.state.current.localization.push({name: '', value: ''})\n\t\t\t\t}]\"\n\t\t\t>\n <div \n \tclass=\"gap-thin mn-b-thin flex-nowrap flex\" \n \tv-for=\"(item, index) in products.state.current.localization\" \n \t:key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Название параметра\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.value\"\n placeholder=\"Значение параметра\"\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\">\n\t <IconDelete \n\t \t@click=\"() => products.state.current.localization.splice(index, 1)\" \n\t \tclass=\"i-medium\"\n\t />\n </div>\n </div>\n\t\t\t</Block>\n\n\t\t\t<Button \n\t\t\t\tv-if=\"route.params.product\"\n \t:submit=\"onDelete\" \n \t:callback=\"redirectTo\"\n \tclass=\"bg-red w-100 mn-t-thin\"\n >\n \t\tDelete \n \t</Button>\n\n <Button \n \t:submit=\"onSubmit\" \n \t:callback=\"redirectTo\"\n \tclass=\"w-100 bg-main\"\n >\n \t\tSave\n \t</Button>\n\n\t\n\t\t\n\t\t<!-- <Block\n\t title=\"Quantity Discount\"\n\t class=\"mn-b-semi\"\n\t :actions=\"[{\n\t\t\t\tlabel: '+',\n\t\t\t\tfunction: () => products.state.current.quantityDiscount.push({name: '', value: ''})\n\t\t\t}]\"\n\t >\n\t \t<div \n \tclass=\"gap-thin mn-b-thin flex-nowrap flex\" \n \tv-for=\"(item, index) in products.state.current.quantityDiscount\" \n \t:key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Quantity\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.value\"\n placeholder=\"Discount\"\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\">\n <IconDelete \n \t@click=\"() => products.state.current.quantityDiscount.splice(index, 1)\" \n \tclass=\"i-medium\"\n />\n </div>\n </div>\n\t\t</Block> -->\n\n\t\t<!-- <EditModifications\n\t\t\t:product=\"products.state.current\"\n\t\t/> -->\n\n\n\n\t\t\n\n</div>\n\t\n</template>\n\n<script setup>\n\t// Import libs\n\timport { reactive, computed, onMounted, ref } from 'vue'\n\timport { useRoute, useRouter } from 'vue-router'\n\t// Import components\n\timport Breadcrumbs from '@martyrs/src/components/Breadcrumbs/Breadcrumbs.vue'\n\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n\timport Tab from \"@martyrs/src/components/Tab/Tab.vue\";\n\timport Field from \"@martyrs/src/components/Field/Field.vue\";\n\timport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\";\n\timport Button from \"@martyrs/src/components/Button/Button.vue\";\n\timport Popup from \"@martyrs/src/components/Popup/Popup.vue\";\n\timport Feed from \"@martyrs/src/components/Feed/Feed.vue\";\n\timport Tree from \"@martyrs/src/components/Tree/Tree.vue\";\n\n\timport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\n\n\timport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n \timport CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n\n\n\timport EditProductInfo from '@martyrs/src/modules/products/components/sections/EditProductInfo.vue';\n import EditModifications from '@martyrs/src/modules/products/components/sections/EditModifications.vue';\n \n\t// Accessing router and store\n\timport * as globals from '@martyrs/src/modules/globals/views/store/globals';\n\timport * as auth from '@martyrs/src/modules/auth/views/store/auth';\n \timport * as products from '@martyrs/src/modules/products/store/products';\n import * as categories from '@martyrs/src/modules/products/store/categories';\n\n\timport { setError } from '@martyrs/src/modules/globals/views/store/globals'\n\t\n\tconst route = useRoute()\n\tconst router = useRouter()\n\n const Products = ref(products.state.all);\n const isOpenIngredientPopup = ref(false);\n\n\n function openIngredientPopup(member) {\n\t isOpenIngredientPopup.value = true;\n\t // if (typeof member === \"number\") selectedMember.value = member;\n\t}\n\n\tfunction closeIngredientPopup() {\n\t isOpenIngredientPopup.value = false;\n\t // selectedMember.value = null;\n\t}\n\n onMounted(async() => { \n\t products.mutations.resetProduct();\n\n \tif (route.params.product) {\n\t\t await products.actions.read({ _id: route.params.product });\n\t } \n\n\t if (!products.state.current.ingredients) {\n\t \tproducts.state.current.ingredients = []\n\t }\n\n \t// Data prefetching\n\t \tcategories.state.all = await categories.actions.read({\n user: auth.state.user._id,\n rootOnly: true,\n limit: 100\n })\n\n try {\n const productsResponse = await products.actions.read({\n organization: route.params._id,\n limit: 100\n });\n Products.value = productsResponse;\n } catch (error) {\n console.error('error');\n }\n })\n\n\tfunction onImagesUpdate(newImages) {\n\t products.state.current.images = newImages;\n\t}\n\t\n\tasync function onSubmit() {\n\t try {\n\t if (route.params.product) {\n\t await products.actions.update(route.params.product, products.state.current)\n\t } else {\n\t products.state.current.owner = {\n\t target: route.params._id || auth.state.user._id,\n\t type: route.params._id ? 'organization' : 'user'\n\t }\n\t \n\t products.state.current.creator = {\n\t target: auth.state.user._id,\n\t type: 'user',\n\t hidden: false\n\t }\n\t await products.actions.create(products.state.current)\n\t }\n\t } catch (error) {\n\t \tsetError({ response: { data: { errorCode: \"PRODUCT_NOT_CREATED\" }} })\n\t console.error('Product creation error:', error)\n\t // Здесь можно добавить обработку ошибки, например:\n\t // - показать уведомление пользователю\n\t // - отправить ошибку в систему мониторинга\n\t // - выполнить откат изменений при необходимости\n\t }\n\t}\n\n\tfunction onDelete() {\n\t\tproducts.actions.deleteProduct(products.state.current._id)\n\t}\n\n\tfunction redirectTo () {\n\t\trouter.push({\n\t\t\tname: 'Organization', \n\t\t\tparams: { \n\t\t\t\t_id: route.params._id\n\t\t\t} \n\t\t})\n\t}\n\n\tasync function updateCategoriesOrder(category) {\n try {\n // Получаем все категории и преобразуем их в плоский массив\n const allCategories = categories.state.all;\n const flattenedCategories = flattenCategoryTree(allCategories);\n \n // Обновляем порядок для всех категорий\n console.log('flated', flattenedCategories)\n await categories.actions.updateOrder(flattenedCategories);\n \n console.log('Categories order updated successfully');\n } catch (error) {\n console.error('Error updating categories order:', error);\n throw error;\n }\n }\n\n function selectCategory (item, event) {\n \t// products.state.current.category.push(item)\n \tproducts.state.current.category = event\n\n \tconsole.log('state catgories', products.state.current.category)\n\n\t const isSelected = products.state.current.category.includes(item._id);\n\t \n\t if (!isSelected) {\n\t // Если снимаем галочку с родителя, отключаем всех детей\n\t unselectChildren(item.children);\n\t } else {\n\t // Если включаем дочерний, включаем всех родителей\n\t selectParents(item._id, categories.state.all);\n\t }\n\t};\n\n\t// Выключаем всех дочерних при отключении родителя\n\tconst unselectChildren = (children) => {\n\t if (!children) return;\n\t children.forEach(child => {\n\t const index = products.state.current.category.indexOf(child._id);\n\t if (index !== -1) {\n\t products.state.current.category.splice(index, 1);\n\t }\n\t if (child.children?.length) {\n\t unselectChildren(child.children);\n\t }\n\t });\n\t};\n\n\t// Включаем всех родителей при выборе дочернего\n\tconst selectParents = (categoryId, items) => {\n\t // Функция для поиска прямого родителя и его ID\n\t const findParent = (childId, itemsToSearch) => {\n\t for (const item of itemsToSearch) {\n\t // Если текущий элемент содержит искомый ID в своих детях\n\t if (item.children?.some(child => child._id === childId)) {\n\t return item._id;\n\t }\n\t \n\t // Рекурсивно ищем в дочерних элементах\n\t if (item.children?.length) {\n\t const foundInChildren = findParent(childId, item.children);\n\t if (foundInChildren) return foundInChildren;\n\t }\n\t }\n\t return null; // Родитель не найден\n\t };\n\t \n\t // Рекурсивно находим всех предков и добавляем их в список\n\t let currentId = categoryId;\n\t let parentId;\n\t \n\t // Пока находим родителей, продолжаем подниматься вверх по дереву\n\t while ((parentId = findParent(currentId, items))) {\n\t if (!products.state.current.category.includes(parentId)) {\n\t products.state.current.category.push(parentId);\n\t }\n\t currentId = parentId; // Переходим к родителю более высокого уровня\n\t }\n\t};\n</script>\n\n<style lang=\"scss\">\n\t.main-photo {\n\t\tmax-width: 50%;\n\t\timg { width: 100%; }\n\t}\n</style>\n"],"names":["useRoute","useRouter","ref","products.state","onMounted","products.mutations","products.actions","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\t<div class=\"for-transition w-100 cols-1 bg-white pd-thin gap-thin\">\n \n <Block v-if=\"!MOBILE_APP\" class=\"flex-nowrap gap-thin flex-v-center flex\">\n \n <h2 class=\"t-truncate mn-r-auto\">\n\t\t\t {{ route.params.product ? products.state.current.name : 'Create Product' }}\n\t\t\t</h2>\n\n\t\t\t<Button \n\t\t\t\tv-if=\"route.params.product\"\n \t:submit=\"onDelete\" \n \t:callback=\"redirectTo\"\n \tclass=\"w-10 w-max-20r w-min-8r bg-red\"\n >\n \t\tDelete \n \t</Button>\n\n <Button \n \t:submit=\"onSubmit\" \n \t:callback=\"redirectTo\"\n \tclass=\"w-10 w-max-20r w-min-8r bg-main\"\n >\n \t\tSave\n \t</Button>\n </Block>\n\n <Block\n\t\t\tplaceholder=\"The product doesn't have any images yet.\"\n\t\t\tclass=\"h-min\"\n\t\t>\n\t\t\t<EditImages \n\t\t\t\t:images=\"products.state.current.images\"\n\t\t\t\t:uploadPath=\"'photos'\" \n\t\t\t\t@update:images=\"(imagesNew) => { products.state.current.images = imagesNew }\" \n\t\t\t/>\n\t\t</Block>\n\n <div class=\"cols-2 gap-thin\">\n\n \t<Block\n \t\t\ttitle=\"Profile\"\n \t\t>\n\t\t\t\t<EditProductInfo \t\t\n\t\t\t\t\t:product=\"products.state.current\"\n\t\t\t\t/>\n\t\t\t</Block>\n\n\t\t\t<Block\n\t\t\t\ttitle=\"Categories\"\n\t\t\t\t:actions=\"[{\n\t\t label: '+',\n\t\t function: () => router.push({\n\t\t\t\t\t\tname: 'Categories', \n\t\t\t\t\t\tparams: { \n\t\t\t\t\t\t\t_id: route.params._id\n\t\t\t\t\t\t} \n\t\t\t\t\t})\n\t\t }]\"\n\t\t class=\"h-100 o-y-scroll\"\n\t\t\t>\n\t\t <Tree \n\t v-if=\"categories.state.all\" \n\t :items=\"categories.state.all\" \n\t :state=\"categories.state.all\" \n\t @update=\"updateCategoriesOrder\" \n\t\t\t\t\tv-slot=\"{ item }\"\n\t\t\t\t\tclass=\"h-zero pos-relative d-block\"\n\t >\n\t \t<Checkbox \n\t\t\t name=\"categories\"\n\t\t\t class=\"w-100 mn-t-small bg-white radius-small pd-small\"\n\t\t\t :label=\"item.name\"\n\t\t\t :value=\"item._id\"\n\t\t\t :radio=\"products.state.current.category\"\n\t\t\t @update:radio=\"event => selectCategory(item, event)\"\n\t\t\t />\n\t\t </Tree>\n\t\t\t</Block>\n\n\t\t\t<Block\n\t\t\t\ttitle=\"Parameters\"\n\t\t\t\tplaceholder=\"No parameters added yet\"\n\t\t\t\t:actions=\"[{\n\t\t\t\t\tlabel: '+',\n\t\t\t\t\tfunction: () => products.state.current.information.push({name: '', value: ''})\n\t\t\t\t}]\"\n\t\t\t\tclass=\"cols-1 gap-thin\"\n\t\t\t>\n <div \n \tclass=\"gap-thin flex-nowrap flex\" \n \tv-for=\"(item, index) in products.state.current.information\" \n \t:key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.value\"\n placeholder=\"Value\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div class=\"radius-small h-100 i-big flex-center flex aspect-1x1 bg-red\">\n\t <IconDelete \n\t \t@click=\"() => products.state.current.information.splice(index, 1)\" \n\t \tclass=\"i-medium\"\n\t />\n\t </div>\n </div>\n\t\t\t</Block>\n\n\n\t\t\t<Block\n\t\t title=\"Ingredients\"\n\t\t\t\tplaceholder=\"No ingridients added yet\"\n\t\t\t\t:actions=\"[{\n\t label: '+',\n\t function: () => openIngredientPopup()\n\t }]\"\n\t\t >\n\t\t \t<div v-if=\"products.state.current.ingredients.length > 0\" class=\"cols-1 gap-thin\">\n\t\t\t <CardPosition \n\t\t\t v-for=\"(product, index) in products.state.current.ingredients\" \n\t\t\t :key=\"product._id\" \n\t\t\t :product=\"product\"\n\t\t\t :array=\"products.state.current.ingredients\"\n\t\t\t :products=\"Products\"\n\t\t :showPrice=\"false\"\n\t\t\t @add=\"(item) => {\n\t\t\t\t\t globals.actions.add(products.state.current.ingredients, item);\n\t\t\t\t\t closeIngredientPopup();\n\t\t\t\t\t }\"\n\t\t\t\t\t @update=\"(item) => {\n\t\t\t\t\t globals.actions.update(products.state.current.ingredients, item, index);\n\t\t\t\t\t closeIngredientPopup();\n\t\t\t\t\t }\"\n\t\t\t\t\t @delete=\"(item) => {\n\t\t\t\t\t globals.actions.delete(products.state.current.ingredients, item, index);\n\t\t\t\t\t closeIngredientPopup();\n\t\t\t\t\t }\"\n\t\t\t />\n\t\t\t </div>\n\t\t </Block>\n\n\t\t <Popup \n\t title=\"Add ingredient\" \n\t @close-popup=\"closeIngredientPopup\" \n\t :isPopupOpen=\"isOpenIngredientPopup\"\n\t class=\"bg-white w-min-30r w-max-30r radius-big pd-medium\"\n\t >\n\t <div class=\"bg-light mn-b-thin h-min-20r h-max-20r o-scroll pd-medium radius-big\">\n\t <Feed\n\t :search=\"{\n\t \tclass: 'bg-white mn-b-thin'\n\t }\"\n\t :states=\"{\n\t empty: {\n\t title: 'No Products Found',\n\t description: 'Currently, there are no such products available.'\n\t }\n\t }\"\n\t :store=\"{\n\t read: (options) => products.actions.read(options),\n\t state: null\n\t }\"\n\t :options=\"{\n\t owner: route.params._id,\n\t }\"\n\t v-slot=\"{ \n\t items \n\t }\"\n\t class=\"\"\n\t >\n\t <CardOrderItem\n\t v-for=\"(product, index) in items\" :key=\"product._id\"\n\t :editable=\"false\" \n\t :product=\"product\" \n\t @click=\"() => { \n\t let p = { ...product };\n\t p.quantity = 1;\n\t p.type = 'pcs'\n\t globals.actions.add(products.state.current.ingredients,p)\n\t closeIngredientPopup();\n\t }\"\n\t class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n\t />\n\t </Feed>\n\t </div>\n\t </Popup>\n\n\n\t\t</div> \n\n\t\t\t<Block\n\t\t\t\ttitle=\"Localization\"\n\t\t\t\tplaceholder=\"No localizations added yet\"\n\t\t\t\t:actions=\"[{\n\t\t\t\t\tlabel: '+',\n\t\t\t\t\tfunction: () => products.state.current.localization.push({name: '', value: ''})\n\t\t\t\t}]\"\n\t\t\t>\n <div \n \tclass=\"gap-thin mn-b-thin flex-nowrap flex\" \n \tv-for=\"(item, index) in products.state.current.localization\" \n \t:key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Название параметра\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.value\"\n placeholder=\"Значение параметра\"\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\">\n\t <IconDelete \n\t \t@click=\"() => products.state.current.localization.splice(index, 1)\" \n\t \tclass=\"i-medium\"\n\t />\n </div>\n </div>\n\t\t\t</Block>\n\n\t\t\t<Button \n\t\t\t\tv-if=\"route.params.product\"\n \t:submit=\"onDelete\" \n \t:callback=\"redirectTo\"\n \tclass=\"bg-red w-100 mn-t-thin\"\n >\n \t\tDelete \n \t</Button>\n\n <Button \n \t:submit=\"onSubmit\" \n \t:callback=\"redirectTo\"\n \tclass=\"w-100 bg-main\"\n >\n \t\tSave\n \t</Button>\n\n\t\n\t\t\n\t\t<!-- <Block\n\t title=\"Quantity Discount\"\n\t class=\"mn-b-semi\"\n\t :actions=\"[{\n\t\t\t\tlabel: '+',\n\t\t\t\tfunction: () => products.state.current.quantityDiscount.push({name: '', value: ''})\n\t\t\t}]\"\n\t >\n\t \t<div \n \tclass=\"gap-thin mn-b-thin flex-nowrap flex\" \n \tv-for=\"(item, index) in products.state.current.quantityDiscount\" \n \t:key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Quantity\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.value\"\n placeholder=\"Discount\"\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\">\n <IconDelete \n \t@click=\"() => products.state.current.quantityDiscount.splice(index, 1)\" \n \tclass=\"i-medium\"\n />\n </div>\n </div>\n\t\t</Block> -->\n\n\t\t<!-- <EditModifications\n\t\t\t:product=\"products.state.current\"\n\t\t/> -->\n\n\n\n\t\t\n\n</div>\n\t\n</template>\n\n<script setup>\n\t// Import libs\n\timport { reactive, computed, onMounted, ref } from 'vue'\n\timport { useRoute, useRouter } from 'vue-router'\n\t// Import components\n\timport Breadcrumbs from '@martyrs/src/components/Breadcrumbs/Breadcrumbs.vue'\n\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n\timport Tab from \"@martyrs/src/components/Tab/Tab.vue\";\n\timport Field from \"@martyrs/src/components/Field/Field.vue\";\n\timport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\";\n\timport Button from \"@martyrs/src/components/Button/Button.vue\";\n\timport Popup from \"@martyrs/src/components/Popup/Popup.vue\";\n\timport Feed from \"@martyrs/src/components/Feed/Feed.vue\";\n\timport Tree from \"@martyrs/src/components/Tree/Tree.vue\";\n\n\timport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\n\n\timport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n \timport CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n\n\n\timport EditProductInfo from '@martyrs/src/modules/products/components/sections/EditProductInfo.vue';\n import EditModifications from '@martyrs/src/modules/products/components/sections/EditModifications.vue';\n \n\t// Accessing router and store\n\timport * as globals from '@martyrs/src/modules/globals/views/store/globals';\n\timport * as auth from '@martyrs/src/modules/auth/views/store/auth';\n \timport * as products from '@martyrs/src/modules/products/store/products';\n import * as categories from '@martyrs/src/modules/products/store/categories';\n\n\timport { setError } from '@martyrs/src/modules/globals/views/store/globals'\n\t\n\tconst route = useRoute()\n\tconst router = useRouter()\n\n const Products = ref(products.state.all);\n const isOpenIngredientPopup = ref(false);\n\n\n function openIngredientPopup(member) {\n\t isOpenIngredientPopup.value = true;\n\t // if (typeof member === \"number\") selectedMember.value = member;\n\t}\n\n\tfunction closeIngredientPopup() {\n\t isOpenIngredientPopup.value = false;\n\t // selectedMember.value = null;\n\t}\n\n onMounted(async() => { \n\t products.mutations.resetProduct();\n\n \tif (route.params.product) {\n\t\t await products.actions.read({ _id: route.params.product });\n\t } \n\n\t if (!products.state.current.ingredients) {\n\t \tproducts.state.current.ingredients = []\n\t }\n\n \t// Data prefetching\n\t \tcategories.state.all = await categories.actions.read({\n user: auth.state.user._id,\n rootOnly: true,\n excludeChildren: false,\n limit: 100\n })\n\n try {\n const productsResponse = await products.actions.read({\n organization: route.params._id,\n limit: 100\n });\n Products.value = productsResponse;\n } catch (error) {\n console.error('error');\n }\n })\n\n\tfunction onImagesUpdate(newImages) {\n\t products.state.current.images = newImages;\n\t}\n\t\n\tasync function onSubmit() {\n\t try {\n\t if (route.params.product) {\n\t await products.actions.update(route.params.product, products.state.current)\n\t } else {\n\t products.state.current.owner = {\n\t target: route.params._id || auth.state.user._id,\n\t type: route.params._id ? 'organization' : 'user'\n\t }\n\t \n\t products.state.current.creator = {\n\t target: auth.state.user._id,\n\t type: 'user',\n\t hidden: false\n\t }\n\t await products.actions.create(products.state.current)\n\t }\n\t } catch (error) {\n\t \tsetError({ response: { data: { errorCode: \"PRODUCT_NOT_CREATED\" }} })\n\t console.error('Product creation error:', error)\n\t // Здесь можно добавить обработку ошибки, например:\n\t // - показать уведомление пользователю\n\t // - отправить ошибку в систему мониторинга\n\t // - выполнить откат изменений при необходимости\n\t }\n\t}\n\n\tfunction onDelete() {\n\t\tproducts.actions.deleteProduct(products.state.current._id)\n\t}\n\n\tfunction redirectTo () {\n\t\trouter.push({\n\t\t\tname: 'Organization', \n\t\t\tparams: { \n\t\t\t\t_id: route.params._id\n\t\t\t} \n\t\t})\n\t}\n\n\tasync function updateCategoriesOrder(category) {\n try {\n // Получаем все категории и преобразуем их в плоский массив\n const allCategories = categories.state.all;\n const flattenedCategories = flattenCategoryTree(allCategories);\n \n // Обновляем порядок для всех категорий\n console.log('flated', flattenedCategories)\n await categories.actions.updateOrder(flattenedCategories);\n \n console.log('Categories order updated successfully');\n } catch (error) {\n console.error('Error updating categories order:', error);\n throw error;\n }\n }\n\n function selectCategory (item, event) {\n \t// products.state.current.category.push(item)\n \tproducts.state.current.category = event\n\n \tconsole.log('state catgories', products.state.current.category)\n\n\t const isSelected = products.state.current.category.includes(item._id);\n\t \n\t if (!isSelected) {\n\t // Если снимаем галочку с родителя, отключаем всех детей\n\t unselectChildren(item.children);\n\t } else {\n\t // Если включаем дочерний, включаем всех родителей\n\t selectParents(item._id, categories.state.all);\n\t }\n\t};\n\n\t// Выключаем всех дочерних при отключении родителя\n\tconst unselectChildren = (children) => {\n\t if (!children) return;\n\t children.forEach(child => {\n\t const index = products.state.current.category.indexOf(child._id);\n\t if (index !== -1) {\n\t products.state.current.category.splice(index, 1);\n\t }\n\t if (child.children?.length) {\n\t unselectChildren(child.children);\n\t }\n\t });\n\t};\n\n\t// Включаем всех родителей при выборе дочернего\n\tconst selectParents = (categoryId, items) => {\n\t // Функция для поиска прямого родителя и его ID\n\t const findParent = (childId, itemsToSearch) => {\n\t for (const item of itemsToSearch) {\n\t // Если текущий элемент содержит искомый ID в своих детях\n\t if (item.children?.some(child => child._id === childId)) {\n\t return item._id;\n\t }\n\t \n\t // Рекурсивно ищем в дочерних элементах\n\t if (item.children?.length) {\n\t const foundInChildren = findParent(childId, item.children);\n\t if (foundInChildren) return foundInChildren;\n\t }\n\t }\n\t return null; // Родитель не найден\n\t };\n\t \n\t // Рекурсивно находим всех предков и добавляем их в список\n\t let currentId = categoryId;\n\t let parentId;\n\t \n\t // Пока находим родителей, продолжаем подниматься вверх по дереву\n\t while ((parentId = findParent(currentId, items))) {\n\t if (!products.state.current.category.includes(parentId)) {\n\t products.state.current.category.push(parentId);\n\t }\n\t currentId = parentId; // Переходим к родителю более высокого уровня\n\t }\n\t};\n</script>\n\n<style lang=\"scss\">\n\t.main-photo {\n\t\tmax-width: 50%;\n\t\timg { width: 100%; }\n\t}\n</style>\n"],"names":["useRoute","useRouter","ref","products.state","onMounted","products.mutations","products.actions","categories.state","categories.actions","auth.state","setError"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { useRoute, useRouter } from "vue-router";
|
|
|
3
3
|
import "vue-i18n";
|
|
4
4
|
/* empty css */
|
|
5
5
|
import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
|
|
6
|
-
/* empty css
|
|
6
|
+
/* empty css */
|
|
7
7
|
import Field from "../../../../components/Field/Field.vue.js";
|
|
8
8
|
import _sfc_main$6 from "../../../../components/Checkbox/Checkbox.vue.js";
|
|
9
9
|
import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
|
|
@@ -54,6 +54,7 @@ const _sfc_main = {
|
|
|
54
54
|
state$1.all = await actions$1.read({
|
|
55
55
|
user: state$2.user._id,
|
|
56
56
|
rootOnly: true,
|
|
57
|
+
excludeChildren: false,
|
|
57
58
|
limit: 100
|
|
58
59
|
});
|
|
59
60
|
try {
|