@ozdao/martyrs 0.2.484 → 0.2.486
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-2NvSR0vE.js → Media-CXQSPHt2.js} +1 -1
- package/dist/{Media-EYG9WPI4.cjs → Media-DhpD64nT.cjs} +1 -1
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/auth.server.cjs +2 -23
- package/dist/auth.server.js +1 -22
- package/dist/globals.crud-BQG1Lm0A.js +90 -0
- package/dist/globals.crud-Dv7UXbRM.cjs +89 -0
- package/dist/globals.server.cjs +3 -322
- package/dist/globals.server.js +1 -303
- package/dist/globals.websocket-DzvdIBf6.js +306 -0
- package/dist/globals.websocket-k6_B1T7k.cjs +322 -0
- package/dist/{main-BT1yoKH2.js → main-Cfh5138F.js} +2102 -1993
- package/dist/main-DKJqboZy.cjs +11 -0
- package/dist/martyrs/src/components/Button/{Button.vue2.cjs → Button.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Button/{Button.vue2.js.map → Button.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
- package/dist/martyrs/src/components/{DatePicker → Calendar}/Calendar.vue.cjs +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/{DatePicker → Calendar}/Calendar.vue.js +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.cjs → Dropdown.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js.map → Dropdown.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.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/Field/Field.vue.cjs +13 -7
- package/dist/martyrs/src/components/Field/Field.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Field/Field.vue.js +14 -8
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Popup/{Popup.vue2.cjs → Popup.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Popup/{Popup.vue2.js.map → Popup.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Popup/{Popup.vue2.js → Popup.vue.js} +2 -2
- package/dist/martyrs/src/components/Popup/Popup.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/auth.client.cjs +3 -0
- package/dist/martyrs/src/modules/auth/auth.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/auth.client.js +3 -0
- package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
- package/dist/martyrs/src/modules/auth/locales/en.cjs +79 -0
- package/dist/martyrs/src/modules/auth/locales/en.cjs.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/en.js +79 -0
- package/dist/martyrs/src/modules/auth/locales/en.js.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/index.cjs +10 -0
- package/dist/martyrs/src/modules/auth/locales/index.cjs.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/index.js +10 -0
- package/dist/martyrs/src/modules/auth/locales/index.js.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/ru.cjs +79 -0
- package/dist/martyrs/src/modules/auth/locales/ru.cjs.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/ru.js +79 -0
- package/dist/martyrs/src/modules/auth/locales/ru.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +2 -11
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +4 -6
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +4 -6
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +7 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +7 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +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 +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- 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/ProfileEditAccount.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +12 -14
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +12 -14
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs +5 -47
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +5 -47
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +3 -3
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -2
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/globals.client.cjs +1 -0
- package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.js +1 -0
- package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/AlertDialog.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/AlertDialog.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +3 -3
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +3 -3
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/axios-instance.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/axios-instance.js.map +1 -1
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.cjs +49 -0
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.js +49 -0
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.cjs +34 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.js +34 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +115 -122
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +163 -170
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +87 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +87 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs +83 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +83 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +83 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +83 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +68 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +68 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +174 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +174 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +80 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +80 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs +328 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js +328 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +115 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +115 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs +44 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js +44 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs +305 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js +305 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs +44 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js +44 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs +199 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js +199 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.cjs +290 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.js +290 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.cjs +467 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.js +467 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.cjs +382 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.js +382 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs +303 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js +303 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +221 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +221 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +200 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +200 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs +50 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js +50 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.cjs +556 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.js +556 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +449 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +449 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.cjs +87 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.js +87 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +227 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +227 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs +85 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js +85 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs +71 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +71 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/music.client.cjs +137 -0
- package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/music.client.js +137 -0
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -0
- package/dist/martyrs/src/modules/music/router/music.cjs +99 -0
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/router/music.js +99 -0
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/albums.cjs +167 -0
- package/dist/martyrs/src/modules/music/store/albums.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/albums.js +167 -0
- package/dist/martyrs/src/modules/music/store/albums.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/artists.cjs +154 -0
- package/dist/martyrs/src/modules/music/store/artists.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/artists.js +154 -0
- package/dist/martyrs/src/modules/music/store/artists.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/player.cjs +297 -0
- package/dist/martyrs/src/modules/music/store/player.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/player.js +297 -0
- package/dist/martyrs/src/modules/music/store/player.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/playlists.cjs +174 -0
- package/dist/martyrs/src/modules/music/store/playlists.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/playlists.js +174 -0
- package/dist/martyrs/src/modules/music/store/playlists.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/search.cjs +109 -0
- package/dist/martyrs/src/modules/music/store/search.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/search.js +109 -0
- package/dist/martyrs/src/modules/music/store/search.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/tracks.cjs +180 -0
- package/dist/martyrs/src/modules/music/store/tracks.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/tracks.js +180 -0
- package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -0
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.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/pages/views/components/blocks/CardPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +2 -2
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +2 -2
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +3 -3
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +3 -3
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +38 -36
- package/dist/music.server.cjs +1407 -0
- package/dist/music.server.js +1407 -0
- package/dist/orders.server.cjs +3 -88
- package/dist/orders.server.js +2 -87
- package/dist/socials.schema-BOZV82Mp.js +25 -0
- package/dist/socials.schema-CtpSF9dE.cjs +24 -0
- package/dist/style.css +250 -97
- package/package.json +1 -1
- package/src/.martyrs/filemap.json +2 -2
- package/src/components/Feed/Feed.vue +1 -1
- package/src/components/Field/Field.vue +42 -27
- package/src/components/index.js +2 -0
- package/src/main.js +6 -0
- package/src/modules/auth/auth.client.js +7 -0
- package/src/modules/auth/locales/en.js +76 -0
- package/src/modules/auth/locales/index.js +7 -0
- package/src/modules/auth/locales/ru.js +76 -0
- package/src/modules/auth/views/components/layouts/Auth.vue +2 -44
- package/src/modules/auth/views/components/pages/EnterCode.vue +5 -7
- package/src/modules/auth/views/components/pages/EnterPassword.vue +7 -10
- package/src/modules/auth/views/components/pages/ResetPassword.vue +9 -12
- package/src/modules/auth/views/components/pages/SignIn.vue +12 -15
- package/src/modules/auth/views/components/pages/SignUp.vue +9 -12
- package/src/modules/auth/views/components/sections/SliderFeatures.vue +11 -48
- package/src/modules/events/components/pages/EditEvent.vue +1 -1
- package/src/modules/globals/globals.client.js +1 -0
- package/src/modules/globals/views/components/blocks/PopupDateSelector.vue +1 -1
- package/src/modules/globals/views/utils/axios-instance.js +15 -1
- package/src/modules/icons/actions/IconShow.vue +23 -0
- package/src/modules/icons/pages/IconsPage.vue +114 -120
- package/src/modules/products/components/pages/Product.vue +1 -1
- package/dist/main-rF15sgss.cjs +0 -11
- package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/DatePicker/Calendar.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/DatePicker/Calendar.vue.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Popup/Popup.vue2.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.js.map +0 -1
- package/src/modules/auth/views/localization/EnterCode.json +0 -16
- package/src/modules/auth/views/localization/EnterPassword.json +0 -22
- package/src/modules/auth/views/localization/ResetPassword.json +0 -26
- package/src/modules/auth/views/localization/SignIn.json +0 -34
- package/src/modules/auth/views/localization/SignUp.json +0 -28
- /package/src/components/{DatePicker → Calendar}/Calendar.vue +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import Store from "../../globals/views/classes/globals.store.js";
|
|
2
|
+
import { reactive } from "vue";
|
|
3
|
+
const playlistStore = new Store(`${process.env.API_URL}/api/playlists`);
|
|
4
|
+
const state = reactive({
|
|
5
|
+
playlists: [],
|
|
6
|
+
featuredPlaylists: [],
|
|
7
|
+
userPlaylists: [],
|
|
8
|
+
currentPlaylist: null,
|
|
9
|
+
currentPlaylistTracks: [],
|
|
10
|
+
isLoading: false,
|
|
11
|
+
loadingFeatured: false
|
|
12
|
+
});
|
|
13
|
+
const actions = {
|
|
14
|
+
async fetchPlaylists(options = {}) {
|
|
15
|
+
state.isLoading = true;
|
|
16
|
+
try {
|
|
17
|
+
const playlists = await playlistStore.read(options);
|
|
18
|
+
state.playlists = playlists;
|
|
19
|
+
return playlists;
|
|
20
|
+
} catch (error) {
|
|
21
|
+
console.error("Error fetching playlists:", error);
|
|
22
|
+
return [];
|
|
23
|
+
} finally {
|
|
24
|
+
state.isLoading = false;
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
async fetchFeaturedPlaylists(limit = 10) {
|
|
28
|
+
state.loadingFeatured = true;
|
|
29
|
+
try {
|
|
30
|
+
const options = {
|
|
31
|
+
status: "featured",
|
|
32
|
+
isPublic: true,
|
|
33
|
+
limit
|
|
34
|
+
};
|
|
35
|
+
const playlists = await playlistStore.read(options);
|
|
36
|
+
state.featuredPlaylists = playlists;
|
|
37
|
+
return playlists;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error("Error fetching featured playlists:", error);
|
|
40
|
+
return [];
|
|
41
|
+
} finally {
|
|
42
|
+
state.loadingFeatured = false;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async fetchPlaylistByUrl(url) {
|
|
46
|
+
var _a;
|
|
47
|
+
try {
|
|
48
|
+
const response = await fetch(`${process.env.API_URL}/api/playlists/url/${url}`);
|
|
49
|
+
const playlist = await response.json();
|
|
50
|
+
state.currentPlaylist = playlist;
|
|
51
|
+
state.currentPlaylistTracks = ((_a = playlist.tracks) == null ? void 0 : _a.map((item) => item.track)) || [];
|
|
52
|
+
return playlist;
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.error("Error fetching playlist by URL:", error);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
async createPlaylist(playlistData) {
|
|
59
|
+
try {
|
|
60
|
+
const createdPlaylist = await playlistStore.create(playlistData);
|
|
61
|
+
state.playlists.unshift(createdPlaylist);
|
|
62
|
+
state.userPlaylists.unshift(createdPlaylist);
|
|
63
|
+
return createdPlaylist;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error("Error creating playlist:", error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
async updatePlaylist(playlistData) {
|
|
70
|
+
try {
|
|
71
|
+
const updatedPlaylist = await playlistStore.update(playlistData);
|
|
72
|
+
const index = state.playlists.findIndex((p) => p._id === updatedPlaylist._id);
|
|
73
|
+
if (index !== -1) {
|
|
74
|
+
state.playlists[index] = updatedPlaylist;
|
|
75
|
+
}
|
|
76
|
+
const userIndex = state.userPlaylists.findIndex((p) => p._id === updatedPlaylist._id);
|
|
77
|
+
if (userIndex !== -1) {
|
|
78
|
+
state.userPlaylists[userIndex] = updatedPlaylist;
|
|
79
|
+
}
|
|
80
|
+
if (state.currentPlaylist && state.currentPlaylist._id === updatedPlaylist._id) {
|
|
81
|
+
state.currentPlaylist = updatedPlaylist;
|
|
82
|
+
}
|
|
83
|
+
return updatedPlaylist;
|
|
84
|
+
} catch (error) {
|
|
85
|
+
console.error("Error updating playlist:", error);
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
async deletePlaylist(playlistId) {
|
|
90
|
+
try {
|
|
91
|
+
await playlistStore.delete({ _id: playlistId });
|
|
92
|
+
state.playlists = state.playlists.filter((p) => p._id !== playlistId);
|
|
93
|
+
state.userPlaylists = state.userPlaylists.filter((p) => p._id !== playlistId);
|
|
94
|
+
if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {
|
|
95
|
+
state.currentPlaylist = null;
|
|
96
|
+
state.currentPlaylistTracks = [];
|
|
97
|
+
}
|
|
98
|
+
return true;
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error("Error deleting playlist:", error);
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
async fetchUserPlaylists(userId) {
|
|
105
|
+
try {
|
|
106
|
+
const response = await fetch(`${process.env.API_URL}/api/playlists/user/${userId || ""}`);
|
|
107
|
+
const playlists = await response.json();
|
|
108
|
+
state.userPlaylists = playlists;
|
|
109
|
+
return playlists;
|
|
110
|
+
} catch (error) {
|
|
111
|
+
console.error("Error fetching user playlists:", error);
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
async addTrackToPlaylist(playlistId, trackId) {
|
|
116
|
+
var _a;
|
|
117
|
+
try {
|
|
118
|
+
const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {
|
|
119
|
+
method: "POST",
|
|
120
|
+
headers: {
|
|
121
|
+
"Content-Type": "application/json"
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const updatedPlaylist = await response.json();
|
|
125
|
+
if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {
|
|
126
|
+
state.currentPlaylist = updatedPlaylist;
|
|
127
|
+
const track = (_a = updatedPlaylist.tracks.find((item) => item.track._id === trackId)) == null ? void 0 : _a.track;
|
|
128
|
+
if (track && !state.currentPlaylistTracks.some((t) => t._id === trackId)) {
|
|
129
|
+
state.currentPlaylistTracks.push(track);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return updatedPlaylist;
|
|
133
|
+
} catch (error) {
|
|
134
|
+
console.error("Error adding track to playlist:", error);
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
async removeTrackFromPlaylist(playlistId, trackId) {
|
|
139
|
+
try {
|
|
140
|
+
const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {
|
|
141
|
+
method: "DELETE"
|
|
142
|
+
});
|
|
143
|
+
const updatedPlaylist = await response.json();
|
|
144
|
+
if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {
|
|
145
|
+
state.currentPlaylist = updatedPlaylist;
|
|
146
|
+
state.currentPlaylistTracks = state.currentPlaylistTracks.filter((track) => track._id !== trackId);
|
|
147
|
+
}
|
|
148
|
+
return updatedPlaylist;
|
|
149
|
+
} catch (error) {
|
|
150
|
+
console.error("Error removing track from playlist:", error);
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
async addCollaborator(playlistId, userId) {
|
|
155
|
+
try {
|
|
156
|
+
const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/collaborators/${userId}`, {
|
|
157
|
+
method: "POST"
|
|
158
|
+
});
|
|
159
|
+
const updatedPlaylist = await response.json();
|
|
160
|
+
if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {
|
|
161
|
+
state.currentPlaylist = updatedPlaylist;
|
|
162
|
+
}
|
|
163
|
+
return updatedPlaylist;
|
|
164
|
+
} catch (error) {
|
|
165
|
+
console.error("Error adding collaborator to playlist:", error);
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
export {
|
|
171
|
+
actions,
|
|
172
|
+
state
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=playlists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playlists.js","sources":["../../../../../../src/modules/music/store/playlists.js"],"sourcesContent":["// store/playlists.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst playlistStore = new Store(`${process.env.API_URL}/api/playlists`);\n\n// State\nexport const state = reactive({\n playlists: [],\n featuredPlaylists: [],\n userPlaylists: [],\n currentPlaylist: null,\n currentPlaylistTracks: [],\n isLoading: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchPlaylists(options = {}) {\n state.isLoading = true;\n try {\n const playlists = await playlistStore.read(options);\n state.playlists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching playlists:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchFeaturedPlaylists(limit = 10) {\n state.loadingFeatured = true;\n try {\n // Assuming there's a status field for featured playlists\n const options = {\n status: 'featured',\n isPublic: true,\n limit,\n };\n\n const playlists = await playlistStore.read(options);\n state.featuredPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching featured playlists:', error);\n return [];\n } finally {\n state.loadingFeatured = false;\n }\n },\n\n async fetchPlaylistByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/url/${url}`);\n const playlist = await response.json();\n state.currentPlaylist = playlist;\n\n // Extract tracks from the playlist\n state.currentPlaylistTracks = playlist.tracks?.map(item => item.track) || [];\n\n return playlist;\n } catch (error) {\n console.error('Error fetching playlist by URL:', error);\n return null;\n }\n },\n\n async createPlaylist(playlistData) {\n try {\n const createdPlaylist = await playlistStore.create(playlistData);\n // Update local state\n state.playlists.unshift(createdPlaylist);\n state.userPlaylists.unshift(createdPlaylist);\n return createdPlaylist;\n } catch (error) {\n console.error('Error creating playlist:', error);\n throw error;\n }\n },\n\n async updatePlaylist(playlistData) {\n try {\n const updatedPlaylist = await playlistStore.update(playlistData);\n\n // Update local state\n const index = state.playlists.findIndex(p => p._id === updatedPlaylist._id);\n if (index !== -1) {\n state.playlists[index] = updatedPlaylist;\n }\n\n const userIndex = state.userPlaylists.findIndex(p => p._id === updatedPlaylist._id);\n if (userIndex !== -1) {\n state.userPlaylists[userIndex] = updatedPlaylist;\n }\n\n if (state.currentPlaylist && state.currentPlaylist._id === updatedPlaylist._id) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error updating playlist:', error);\n throw error;\n }\n },\n\n async deletePlaylist(playlistId) {\n try {\n await playlistStore.delete({ _id: playlistId });\n\n // Update local state\n state.playlists = state.playlists.filter(p => p._id !== playlistId);\n state.userPlaylists = state.userPlaylists.filter(p => p._id !== playlistId);\n\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = null;\n state.currentPlaylistTracks = [];\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting playlist:', error);\n throw error;\n }\n },\n\n async fetchUserPlaylists(userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/user/${userId || ''}`);\n const playlists = await response.json();\n state.userPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching user playlists:', error);\n return [];\n }\n },\n\n async addTrackToPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n // Update tracks list\n const track = updatedPlaylist.tracks.find(item => item.track._id === trackId)?.track;\n if (track && !state.currentPlaylistTracks.some(t => t._id === trackId)) {\n state.currentPlaylistTracks.push(track);\n }\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding track to playlist:', error);\n throw error;\n }\n },\n\n async removeTrackFromPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'DELETE',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n state.currentPlaylistTracks = state.currentPlaylistTracks.filter(track => track._id !== trackId);\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error removing track from playlist:', error);\n throw error;\n }\n },\n\n async addCollaborator(playlistId, userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/collaborators/${userId}`, {\n method: 'POST',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding collaborator to playlist:', error);\n throw error;\n }\n },\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const vue = require("vue");
|
|
4
|
+
const state = vue.reactive({
|
|
5
|
+
query: "",
|
|
6
|
+
results: {
|
|
7
|
+
tracks: [],
|
|
8
|
+
albums: [],
|
|
9
|
+
artists: [],
|
|
10
|
+
playlists: [],
|
|
11
|
+
genres: []
|
|
12
|
+
},
|
|
13
|
+
isLoading: false,
|
|
14
|
+
error: null,
|
|
15
|
+
activeFilter: "all"
|
|
16
|
+
// 'all', 'tracks', 'albums', 'artists', 'playlists', 'genres'
|
|
17
|
+
});
|
|
18
|
+
const actions = {
|
|
19
|
+
async search(query, type = null, limit = 10) {
|
|
20
|
+
if (!query || query.length < 2) {
|
|
21
|
+
state.results = {
|
|
22
|
+
tracks: [],
|
|
23
|
+
albums: [],
|
|
24
|
+
artists: [],
|
|
25
|
+
playlists: [],
|
|
26
|
+
genres: []
|
|
27
|
+
};
|
|
28
|
+
state.error = "Search query must be at least 2 characters";
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
state.query = query;
|
|
32
|
+
state.isLoading = true;
|
|
33
|
+
state.error = null;
|
|
34
|
+
try {
|
|
35
|
+
const queryParams = new URLSearchParams({
|
|
36
|
+
query,
|
|
37
|
+
limit
|
|
38
|
+
});
|
|
39
|
+
if (type) {
|
|
40
|
+
queryParams.append("type", type);
|
|
41
|
+
}
|
|
42
|
+
const response = await fetch(`${process.env.API_URL}/api/music/search?${queryParams.toString()}`);
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error("Search request failed");
|
|
45
|
+
}
|
|
46
|
+
const data = await response.json();
|
|
47
|
+
state.results = {
|
|
48
|
+
tracks: data.tracks || [],
|
|
49
|
+
albums: data.albums || [],
|
|
50
|
+
artists: data.artists || [],
|
|
51
|
+
playlists: data.playlists || [],
|
|
52
|
+
genres: data.genres || []
|
|
53
|
+
};
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error("Search error:", error);
|
|
56
|
+
state.error = error.message;
|
|
57
|
+
state.results = {
|
|
58
|
+
tracks: [],
|
|
59
|
+
albums: [],
|
|
60
|
+
artists: [],
|
|
61
|
+
playlists: [],
|
|
62
|
+
genres: []
|
|
63
|
+
};
|
|
64
|
+
} finally {
|
|
65
|
+
state.isLoading = false;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
setFilter(filter) {
|
|
69
|
+
state.activeFilter = filter;
|
|
70
|
+
},
|
|
71
|
+
clearSearch() {
|
|
72
|
+
state.query = "";
|
|
73
|
+
state.results = {
|
|
74
|
+
tracks: [],
|
|
75
|
+
albums: [],
|
|
76
|
+
artists: [],
|
|
77
|
+
playlists: [],
|
|
78
|
+
genres: []
|
|
79
|
+
};
|
|
80
|
+
state.error = null;
|
|
81
|
+
state.isLoading = false;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const computed = {
|
|
85
|
+
hasResults: () => {
|
|
86
|
+
return Object.values(state.results).some((arr) => arr.length > 0);
|
|
87
|
+
},
|
|
88
|
+
filteredResults: () => {
|
|
89
|
+
if (state.activeFilter === "all") {
|
|
90
|
+
return state.results;
|
|
91
|
+
}
|
|
92
|
+
const filtered = {
|
|
93
|
+
tracks: [],
|
|
94
|
+
albums: [],
|
|
95
|
+
artists: [],
|
|
96
|
+
playlists: [],
|
|
97
|
+
genres: []
|
|
98
|
+
};
|
|
99
|
+
filtered[state.activeFilter] = state.results[state.activeFilter];
|
|
100
|
+
return filtered;
|
|
101
|
+
},
|
|
102
|
+
totalResultsCount: () => {
|
|
103
|
+
return Object.values(state.results).reduce((sum, arr) => sum + arr.length, 0);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
exports.actions = actions;
|
|
107
|
+
exports.computed = computed;
|
|
108
|
+
exports.state = state;
|
|
109
|
+
//# sourceMappingURL=search.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.cjs","sources":["../../../../../../src/modules/music/store/search.js"],"sourcesContent":["// store/search.js\nimport { reactive } from 'vue';\n\n// State\nexport const state = reactive({\n query: '',\n results: {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n },\n isLoading: false,\n error: null,\n activeFilter: 'all', // 'all', 'tracks', 'albums', 'artists', 'playlists', 'genres'\n});\n\n// Actions\nexport const actions = {\n async search(query, type = null, limit = 10) {\n if (!query || query.length < 2) {\n // Reset results if query is too short\n state.results = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n state.error = 'Search query must be at least 2 characters';\n return;\n }\n\n state.query = query;\n state.isLoading = true;\n state.error = null;\n\n try {\n const queryParams = new URLSearchParams({\n query,\n limit,\n });\n\n if (type) {\n queryParams.append('type', type);\n }\n\n const response = await fetch(`${process.env.API_URL}/api/music/search?${queryParams.toString()}`);\n\n if (!response.ok) {\n throw new Error('Search request failed');\n }\n\n const data = await response.json();\n\n // Update state with results\n state.results = {\n tracks: data.tracks || [],\n albums: data.albums || [],\n artists: data.artists || [],\n playlists: data.playlists || [],\n genres: data.genres || [],\n };\n } catch (error) {\n console.error('Search error:', error);\n state.error = error.message;\n // Clear results on error\n state.results = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n } finally {\n state.isLoading = false;\n }\n },\n\n setFilter(filter) {\n state.activeFilter = filter;\n },\n\n clearSearch() {\n state.query = '';\n state.results = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n state.error = null;\n state.isLoading = false;\n },\n};\n\n// Computed values\nexport const computed = {\n hasResults: () => {\n return Object.values(state.results).some(arr => arr.length > 0);\n },\n\n filteredResults: () => {\n if (state.activeFilter === 'all') {\n return state.results;\n }\n\n // Return only the filtered category\n const filtered = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n\n filtered[state.activeFilter] = state.results[state.activeFilter];\n return filtered;\n },\n\n totalResultsCount: () => {\n return Object.values(state.results).reduce((sum, arr) => sum + arr.length, 0);\n },\n};\n"],"names":["reactive"],"mappings":";;;AAIY,MAAC,QAAQA,IAAAA,SAAS;AAAA,EAC5B,OAAO;AAAA,EACP,SAAS;AAAA,IACP,QAAQ,CAAE;AAAA,IACV,QAAQ,CAAE;AAAA,IACV,SAAS,CAAE;AAAA,IACX,WAAW,CAAE;AAAA,IACb,QAAQ,CAAE;AAAA,EACX;AAAA,EACD,WAAW;AAAA,EACX,OAAO;AAAA,EACP,cAAc;AAAA;AAChB,CAAC;AAGW,MAAC,UAAU;AAAA,EACrB,MAAM,OAAO,OAAO,OAAO,MAAM,QAAQ,IAAI;AAC3C,QAAI,CAAC,SAAS,MAAM,SAAS,GAAG;AAE9B,YAAM,UAAU;AAAA,QACd,QAAQ,CAAE;AAAA,QACV,QAAQ,CAAE;AAAA,QACV,SAAS,CAAE;AAAA,QACX,WAAW,CAAE;AAAA,QACb,QAAQ,CAAE;AAAA,MACX;AACD,YAAM,QAAQ;AACd;AAAA,IACN;AAEI,UAAM,QAAQ;AACd,UAAM,YAAY;AAClB,UAAM,QAAQ;AAEd,QAAI;AACF,YAAM,cAAc,IAAI,gBAAgB;AAAA,QACtC;AAAA,QACA;AAAA,MACR,CAAO;AAED,UAAI,MAAM;AACR,oBAAY,OAAO,QAAQ,IAAI;AAAA,MACvC;AAEM,YAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,qBAAqB,YAAY,SAAQ,CAAE,EAAE;AAEhG,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,uBAAuB;AAAA,MAC/C;AAEM,YAAM,OAAO,MAAM,SAAS,KAAM;AAGlC,YAAM,UAAU;AAAA,QACd,QAAQ,KAAK,UAAU,CAAE;AAAA,QACzB,QAAQ,KAAK,UAAU,CAAE;AAAA,QACzB,SAAS,KAAK,WAAW,CAAE;AAAA,QAC3B,WAAW,KAAK,aAAa,CAAE;AAAA,QAC/B,QAAQ,KAAK,UAAU,CAAE;AAAA,MAC1B;AAAA,IACF,SAAQ,OAAO;AACd,cAAQ,MAAM,iBAAiB,KAAK;AACpC,YAAM,QAAQ,MAAM;AAEpB,YAAM,UAAU;AAAA,QACd,QAAQ,CAAE;AAAA,QACV,QAAQ,CAAE;AAAA,QACV,SAAS,CAAE;AAAA,QACX,WAAW,CAAE;AAAA,QACb,QAAQ,CAAE;AAAA,MACX;AAAA,IACP,UAAc;AACR,YAAM,YAAY;AAAA,IACxB;AAAA,EACG;AAAA,EAED,UAAU,QAAQ;AAChB,UAAM,eAAe;AAAA,EACtB;AAAA,EAED,cAAc;AACZ,UAAM,QAAQ;AACd,UAAM,UAAU;AAAA,MACd,QAAQ,CAAE;AAAA,MACV,QAAQ,CAAE;AAAA,MACV,SAAS,CAAE;AAAA,MACX,WAAW,CAAE;AAAA,MACb,QAAQ,CAAE;AAAA,IACX;AACD,UAAM,QAAQ;AACd,UAAM,YAAY;AAAA,EACnB;AACH;AAGY,MAAC,WAAW;AAAA,EACtB,YAAY,MAAM;AAChB,WAAO,OAAO,OAAO,MAAM,OAAO,EAAE,KAAK,SAAO,IAAI,SAAS,CAAC;AAAA,EAC/D;AAAA,EAED,iBAAiB,MAAM;AACrB,QAAI,MAAM,iBAAiB,OAAO;AAChC,aAAO,MAAM;AAAA,IACnB;AAGI,UAAM,WAAW;AAAA,MACf,QAAQ,CAAE;AAAA,MACV,QAAQ,CAAE;AAAA,MACV,SAAS,CAAE;AAAA,MACX,WAAW,CAAE;AAAA,MACb,QAAQ,CAAE;AAAA,IACX;AAED,aAAS,MAAM,YAAY,IAAI,MAAM,QAAQ,MAAM,YAAY;AAC/D,WAAO;AAAA,EACR;AAAA,EAED,mBAAmB,MAAM;AACvB,WAAO,OAAO,OAAO,MAAM,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,QAAQ,CAAC;AAAA,EAC7E;AACH;;;;"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { reactive } from "vue";
|
|
2
|
+
const state = reactive({
|
|
3
|
+
query: "",
|
|
4
|
+
results: {
|
|
5
|
+
tracks: [],
|
|
6
|
+
albums: [],
|
|
7
|
+
artists: [],
|
|
8
|
+
playlists: [],
|
|
9
|
+
genres: []
|
|
10
|
+
},
|
|
11
|
+
isLoading: false,
|
|
12
|
+
error: null,
|
|
13
|
+
activeFilter: "all"
|
|
14
|
+
// 'all', 'tracks', 'albums', 'artists', 'playlists', 'genres'
|
|
15
|
+
});
|
|
16
|
+
const actions = {
|
|
17
|
+
async search(query, type = null, limit = 10) {
|
|
18
|
+
if (!query || query.length < 2) {
|
|
19
|
+
state.results = {
|
|
20
|
+
tracks: [],
|
|
21
|
+
albums: [],
|
|
22
|
+
artists: [],
|
|
23
|
+
playlists: [],
|
|
24
|
+
genres: []
|
|
25
|
+
};
|
|
26
|
+
state.error = "Search query must be at least 2 characters";
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
state.query = query;
|
|
30
|
+
state.isLoading = true;
|
|
31
|
+
state.error = null;
|
|
32
|
+
try {
|
|
33
|
+
const queryParams = new URLSearchParams({
|
|
34
|
+
query,
|
|
35
|
+
limit
|
|
36
|
+
});
|
|
37
|
+
if (type) {
|
|
38
|
+
queryParams.append("type", type);
|
|
39
|
+
}
|
|
40
|
+
const response = await fetch(`${process.env.API_URL}/api/music/search?${queryParams.toString()}`);
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
throw new Error("Search request failed");
|
|
43
|
+
}
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
state.results = {
|
|
46
|
+
tracks: data.tracks || [],
|
|
47
|
+
albums: data.albums || [],
|
|
48
|
+
artists: data.artists || [],
|
|
49
|
+
playlists: data.playlists || [],
|
|
50
|
+
genres: data.genres || []
|
|
51
|
+
};
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error("Search error:", error);
|
|
54
|
+
state.error = error.message;
|
|
55
|
+
state.results = {
|
|
56
|
+
tracks: [],
|
|
57
|
+
albums: [],
|
|
58
|
+
artists: [],
|
|
59
|
+
playlists: [],
|
|
60
|
+
genres: []
|
|
61
|
+
};
|
|
62
|
+
} finally {
|
|
63
|
+
state.isLoading = false;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
setFilter(filter) {
|
|
67
|
+
state.activeFilter = filter;
|
|
68
|
+
},
|
|
69
|
+
clearSearch() {
|
|
70
|
+
state.query = "";
|
|
71
|
+
state.results = {
|
|
72
|
+
tracks: [],
|
|
73
|
+
albums: [],
|
|
74
|
+
artists: [],
|
|
75
|
+
playlists: [],
|
|
76
|
+
genres: []
|
|
77
|
+
};
|
|
78
|
+
state.error = null;
|
|
79
|
+
state.isLoading = false;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const computed = {
|
|
83
|
+
hasResults: () => {
|
|
84
|
+
return Object.values(state.results).some((arr) => arr.length > 0);
|
|
85
|
+
},
|
|
86
|
+
filteredResults: () => {
|
|
87
|
+
if (state.activeFilter === "all") {
|
|
88
|
+
return state.results;
|
|
89
|
+
}
|
|
90
|
+
const filtered = {
|
|
91
|
+
tracks: [],
|
|
92
|
+
albums: [],
|
|
93
|
+
artists: [],
|
|
94
|
+
playlists: [],
|
|
95
|
+
genres: []
|
|
96
|
+
};
|
|
97
|
+
filtered[state.activeFilter] = state.results[state.activeFilter];
|
|
98
|
+
return filtered;
|
|
99
|
+
},
|
|
100
|
+
totalResultsCount: () => {
|
|
101
|
+
return Object.values(state.results).reduce((sum, arr) => sum + arr.length, 0);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
export {
|
|
105
|
+
actions,
|
|
106
|
+
computed,
|
|
107
|
+
state
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sources":["../../../../../../src/modules/music/store/search.js"],"sourcesContent":["// store/search.js\nimport { reactive } from 'vue';\n\n// State\nexport const state = reactive({\n query: '',\n results: {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n },\n isLoading: false,\n error: null,\n activeFilter: 'all', // 'all', 'tracks', 'albums', 'artists', 'playlists', 'genres'\n});\n\n// Actions\nexport const actions = {\n async search(query, type = null, limit = 10) {\n if (!query || query.length < 2) {\n // Reset results if query is too short\n state.results = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n state.error = 'Search query must be at least 2 characters';\n return;\n }\n\n state.query = query;\n state.isLoading = true;\n state.error = null;\n\n try {\n const queryParams = new URLSearchParams({\n query,\n limit,\n });\n\n if (type) {\n queryParams.append('type', type);\n }\n\n const response = await fetch(`${process.env.API_URL}/api/music/search?${queryParams.toString()}`);\n\n if (!response.ok) {\n throw new Error('Search request failed');\n }\n\n const data = await response.json();\n\n // Update state with results\n state.results = {\n tracks: data.tracks || [],\n albums: data.albums || [],\n artists: data.artists || [],\n playlists: data.playlists || [],\n genres: data.genres || [],\n };\n } catch (error) {\n console.error('Search error:', error);\n state.error = error.message;\n // Clear results on error\n state.results = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n } finally {\n state.isLoading = false;\n }\n },\n\n setFilter(filter) {\n state.activeFilter = filter;\n },\n\n clearSearch() {\n state.query = '';\n state.results = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n state.error = null;\n state.isLoading = false;\n },\n};\n\n// Computed values\nexport const computed = {\n hasResults: () => {\n return Object.values(state.results).some(arr => arr.length > 0);\n },\n\n filteredResults: () => {\n if (state.activeFilter === 'all') {\n return state.results;\n }\n\n // Return only the filtered category\n const filtered = {\n tracks: [],\n albums: [],\n artists: [],\n playlists: [],\n genres: [],\n };\n\n filtered[state.activeFilter] = state.results[state.activeFilter];\n return filtered;\n },\n\n totalResultsCount: () => {\n return Object.values(state.results).reduce((sum, arr) => sum + arr.length, 0);\n },\n};\n"],"names":[],"mappings":";AAIY,MAAC,QAAQ,SAAS;AAAA,EAC5B,OAAO;AAAA,EACP,SAAS;AAAA,IACP,QAAQ,CAAE;AAAA,IACV,QAAQ,CAAE;AAAA,IACV,SAAS,CAAE;AAAA,IACX,WAAW,CAAE;AAAA,IACb,QAAQ,CAAE;AAAA,EACX;AAAA,EACD,WAAW;AAAA,EACX,OAAO;AAAA,EACP,cAAc;AAAA;AAChB,CAAC;AAGW,MAAC,UAAU;AAAA,EACrB,MAAM,OAAO,OAAO,OAAO,MAAM,QAAQ,IAAI;AAC3C,QAAI,CAAC,SAAS,MAAM,SAAS,GAAG;AAE9B,YAAM,UAAU;AAAA,QACd,QAAQ,CAAE;AAAA,QACV,QAAQ,CAAE;AAAA,QACV,SAAS,CAAE;AAAA,QACX,WAAW,CAAE;AAAA,QACb,QAAQ,CAAE;AAAA,MACX;AACD,YAAM,QAAQ;AACd;AAAA,IACN;AAEI,UAAM,QAAQ;AACd,UAAM,YAAY;AAClB,UAAM,QAAQ;AAEd,QAAI;AACF,YAAM,cAAc,IAAI,gBAAgB;AAAA,QACtC;AAAA,QACA;AAAA,MACR,CAAO;AAED,UAAI,MAAM;AACR,oBAAY,OAAO,QAAQ,IAAI;AAAA,MACvC;AAEM,YAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,qBAAqB,YAAY,SAAQ,CAAE,EAAE;AAEhG,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,uBAAuB;AAAA,MAC/C;AAEM,YAAM,OAAO,MAAM,SAAS,KAAM;AAGlC,YAAM,UAAU;AAAA,QACd,QAAQ,KAAK,UAAU,CAAE;AAAA,QACzB,QAAQ,KAAK,UAAU,CAAE;AAAA,QACzB,SAAS,KAAK,WAAW,CAAE;AAAA,QAC3B,WAAW,KAAK,aAAa,CAAE;AAAA,QAC/B,QAAQ,KAAK,UAAU,CAAE;AAAA,MAC1B;AAAA,IACF,SAAQ,OAAO;AACd,cAAQ,MAAM,iBAAiB,KAAK;AACpC,YAAM,QAAQ,MAAM;AAEpB,YAAM,UAAU;AAAA,QACd,QAAQ,CAAE;AAAA,QACV,QAAQ,CAAE;AAAA,QACV,SAAS,CAAE;AAAA,QACX,WAAW,CAAE;AAAA,QACb,QAAQ,CAAE;AAAA,MACX;AAAA,IACP,UAAc;AACR,YAAM,YAAY;AAAA,IACxB;AAAA,EACG;AAAA,EAED,UAAU,QAAQ;AAChB,UAAM,eAAe;AAAA,EACtB;AAAA,EAED,cAAc;AACZ,UAAM,QAAQ;AACd,UAAM,UAAU;AAAA,MACd,QAAQ,CAAE;AAAA,MACV,QAAQ,CAAE;AAAA,MACV,SAAS,CAAE;AAAA,MACX,WAAW,CAAE;AAAA,MACb,QAAQ,CAAE;AAAA,IACX;AACD,UAAM,QAAQ;AACd,UAAM,YAAY;AAAA,EACnB;AACH;AAGY,MAAC,WAAW;AAAA,EACtB,YAAY,MAAM;AAChB,WAAO,OAAO,OAAO,MAAM,OAAO,EAAE,KAAK,SAAO,IAAI,SAAS,CAAC;AAAA,EAC/D;AAAA,EAED,iBAAiB,MAAM;AACrB,QAAI,MAAM,iBAAiB,OAAO;AAChC,aAAO,MAAM;AAAA,IACnB;AAGI,UAAM,WAAW;AAAA,MACf,QAAQ,CAAE;AAAA,MACV,QAAQ,CAAE;AAAA,MACV,SAAS,CAAE;AAAA,MACX,WAAW,CAAE;AAAA,MACb,QAAQ,CAAE;AAAA,IACX;AAED,aAAS,MAAM,YAAY,IAAI,MAAM,QAAQ,MAAM,YAAY;AAC/D,WAAO;AAAA,EACR;AAAA,EAED,mBAAmB,MAAM;AACvB,WAAO,OAAO,OAAO,MAAM,OAAO,EAAE,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,QAAQ,CAAC;AAAA,EAC7E;AACH;"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const globals_store = require("../../globals/views/classes/globals.store.cjs");
|
|
4
|
+
const vue = require("vue");
|
|
5
|
+
const trackStore = new globals_store.default(`${process.env.API_URL}/api/tracks`);
|
|
6
|
+
const state = vue.reactive({
|
|
7
|
+
tracks: [],
|
|
8
|
+
popular: [],
|
|
9
|
+
recent: [],
|
|
10
|
+
featured: [],
|
|
11
|
+
userTracks: [],
|
|
12
|
+
currentTrack: null,
|
|
13
|
+
isLoading: false,
|
|
14
|
+
loadingPopular: false,
|
|
15
|
+
loadingRecent: false,
|
|
16
|
+
loadingFeatured: false
|
|
17
|
+
});
|
|
18
|
+
const actions = {
|
|
19
|
+
async fetchTracks(options = {}) {
|
|
20
|
+
state.isLoading = true;
|
|
21
|
+
try {
|
|
22
|
+
const tracks = await trackStore.read(options);
|
|
23
|
+
state.tracks = tracks;
|
|
24
|
+
return tracks;
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.error("Error fetching tracks:", error);
|
|
27
|
+
return [];
|
|
28
|
+
} finally {
|
|
29
|
+
state.isLoading = false;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
async fetchPopularTracks(limit = 10) {
|
|
33
|
+
state.loadingPopular = true;
|
|
34
|
+
try {
|
|
35
|
+
const response = await fetch(`${process.env.API_URL}/api/tracks/popular?limit=${limit}`);
|
|
36
|
+
const tracks = await response.json();
|
|
37
|
+
state.popular = tracks;
|
|
38
|
+
return tracks;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error("Error fetching popular tracks:", error);
|
|
41
|
+
return [];
|
|
42
|
+
} finally {
|
|
43
|
+
state.loadingPopular = false;
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
async fetchRecentTracks(limit = 10) {
|
|
47
|
+
state.loadingRecent = true;
|
|
48
|
+
try {
|
|
49
|
+
const response = await fetch(`${process.env.API_URL}/api/tracks/recent?limit=${limit}`);
|
|
50
|
+
const tracks = await response.json();
|
|
51
|
+
state.recent = tracks;
|
|
52
|
+
return tracks;
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.error("Error fetching recent tracks:", error);
|
|
55
|
+
return [];
|
|
56
|
+
} finally {
|
|
57
|
+
state.loadingRecent = false;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
async fetchTracksByGenre(genreId, limit = 20) {
|
|
61
|
+
try {
|
|
62
|
+
const response = await fetch(`${process.env.API_URL}/api/tracks/genre/${genreId}?limit=${limit}`);
|
|
63
|
+
return await response.json();
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error("Error fetching tracks by genre:", error);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
async fetchTrackByUrl(url) {
|
|
70
|
+
try {
|
|
71
|
+
const response = await fetch(`${process.env.API_URL}/api/tracks/url/${url}`);
|
|
72
|
+
const track = await response.json();
|
|
73
|
+
state.currentTrack = track;
|
|
74
|
+
return track;
|
|
75
|
+
} catch (error) {
|
|
76
|
+
console.error("Error fetching track by URL:", error);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
// Improved createTrack action with better error handling
|
|
81
|
+
async createTrack(trackData) {
|
|
82
|
+
console.log("Creating track with data:", trackData);
|
|
83
|
+
const requiredFields = ["title", "artist", "genre", "fileUrl"];
|
|
84
|
+
const missingFields = requiredFields.filter((field) => !trackData[field]);
|
|
85
|
+
if (missingFields.length > 0) {
|
|
86
|
+
const error = new Error(`Missing required fields: ${missingFields.join(", ")}`);
|
|
87
|
+
console.error(error);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
if (!trackData.owner || !trackData.owner.target || !trackData.owner.type) {
|
|
91
|
+
console.error("Track data missing owner information");
|
|
92
|
+
throw new Error("Owner information is required");
|
|
93
|
+
}
|
|
94
|
+
if (!trackData.creator || !trackData.creator.target || !trackData.creator.type) {
|
|
95
|
+
console.error("Track data missing creator information");
|
|
96
|
+
throw new Error("Creator information is required");
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
console.log("Calling API to create track...");
|
|
100
|
+
console.log("API URL:", trackStore.apiUrl);
|
|
101
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
102
|
+
setTimeout(() => reject(new Error("Request timed out after 15 seconds")), 15e3);
|
|
103
|
+
});
|
|
104
|
+
const createdTrack = await Promise.race([trackStore.create(trackData), timeoutPromise]);
|
|
105
|
+
console.log("Track created successfully, server response:", createdTrack);
|
|
106
|
+
if (!createdTrack || !createdTrack._id) {
|
|
107
|
+
console.error("API returned success but without expected track data:", createdTrack);
|
|
108
|
+
throw new Error("Invalid response from server");
|
|
109
|
+
}
|
|
110
|
+
state.tracks.unshift(createdTrack);
|
|
111
|
+
state.userTracks.unshift(createdTrack);
|
|
112
|
+
console.log("Local state updated with new track");
|
|
113
|
+
return createdTrack;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
console.error("Error creating track:", error);
|
|
116
|
+
if (error.response) {
|
|
117
|
+
console.error("Error response:", error.response);
|
|
118
|
+
}
|
|
119
|
+
const formattedError = new Error(error.message || "Failed to create track. Please try again.");
|
|
120
|
+
formattedError.originalError = error;
|
|
121
|
+
setError({
|
|
122
|
+
message: formattedError.message,
|
|
123
|
+
errorCode: error.errorCode || "TRACK_CREATE_FAILED"
|
|
124
|
+
});
|
|
125
|
+
throw formattedError;
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
async updateTrack(trackData) {
|
|
129
|
+
try {
|
|
130
|
+
const updatedTrack = await trackStore.update(trackData);
|
|
131
|
+
const index = state.tracks.findIndex((t) => t._id === updatedTrack._id);
|
|
132
|
+
if (index !== -1) {
|
|
133
|
+
state.tracks[index] = updatedTrack;
|
|
134
|
+
}
|
|
135
|
+
const userIndex = state.userTracks.findIndex((t) => t._id === updatedTrack._id);
|
|
136
|
+
if (userIndex !== -1) {
|
|
137
|
+
state.userTracks[userIndex] = updatedTrack;
|
|
138
|
+
}
|
|
139
|
+
if (state.currentTrack && state.currentTrack._id === updatedTrack._id) {
|
|
140
|
+
state.currentTrack = updatedTrack;
|
|
141
|
+
}
|
|
142
|
+
return updatedTrack;
|
|
143
|
+
} catch (error) {
|
|
144
|
+
console.error("Error updating track:", error);
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
async deleteTrack(trackId) {
|
|
149
|
+
try {
|
|
150
|
+
await trackStore.delete({ _id: trackId });
|
|
151
|
+
state.tracks = state.tracks.filter((t) => t._id !== trackId);
|
|
152
|
+
state.userTracks = state.userTracks.filter((t) => t._id !== trackId);
|
|
153
|
+
if (state.currentTrack && state.currentTrack._id === trackId) {
|
|
154
|
+
state.currentTrack = null;
|
|
155
|
+
}
|
|
156
|
+
return true;
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.error("Error deleting track:", error);
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
async fetchUserTracks(userId) {
|
|
163
|
+
try {
|
|
164
|
+
const options = {
|
|
165
|
+
creator: userId,
|
|
166
|
+
limit: 100
|
|
167
|
+
};
|
|
168
|
+
console.log("fetchUserTracks", userId);
|
|
169
|
+
const tracks = await trackStore.read(options);
|
|
170
|
+
state.userTracks = tracks;
|
|
171
|
+
return tracks;
|
|
172
|
+
} catch (error) {
|
|
173
|
+
console.error("Error fetching user tracks:", error);
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
exports.actions = actions;
|
|
179
|
+
exports.state = state;
|
|
180
|
+
//# sourceMappingURL=tracks.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracks.cjs","sources":["../../../../../../src/modules/music/store/tracks.js"],"sourcesContent":["// store/tracks.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst trackStore = new Store(`${process.env.API_URL}/api/tracks`);\n\n// State\nexport const state = reactive({\n tracks: [],\n popular: [],\n recent: [],\n featured: [],\n userTracks: [],\n currentTrack: null,\n isLoading: false,\n loadingPopular: false,\n loadingRecent: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchTracks(options = {}) {\n state.isLoading = true;\n try {\n const tracks = await trackStore.read(options);\n state.tracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching tracks:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchPopularTracks(limit = 10) {\n state.loadingPopular = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/popular?limit=${limit}`);\n const tracks = await response.json();\n state.popular = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching popular tracks:', error);\n return [];\n } finally {\n state.loadingPopular = false;\n }\n },\n\n async fetchRecentTracks(limit = 10) {\n state.loadingRecent = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/recent?limit=${limit}`);\n const tracks = await response.json();\n state.recent = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching recent tracks:', error);\n return [];\n } finally {\n state.loadingRecent = false;\n }\n },\n\n async fetchTracksByGenre(genreId, limit = 20) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/genre/${genreId}?limit=${limit}`);\n return await response.json();\n } catch (error) {\n console.error('Error fetching tracks by genre:', error);\n return [];\n }\n },\n\n async fetchTrackByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/url/${url}`);\n const track = await response.json();\n state.currentTrack = track;\n return track;\n } catch (error) {\n console.error('Error fetching track by URL:', error);\n return null;\n }\n },\n\n // Improved createTrack action with better error handling\n async createTrack(trackData) {\n console.log('Creating track with data:', trackData);\n\n // Validate required fields to prevent silent failures\n const requiredFields = ['title', 'artist', 'genre', 'fileUrl'];\n const missingFields = requiredFields.filter(field => !trackData[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(`Missing required fields: ${missingFields.join(', ')}`);\n console.error(error);\n throw error;\n }\n\n // Ensure proper structure for owner and creator fields\n if (!trackData.owner || !trackData.owner.target || !trackData.owner.type) {\n console.error('Track data missing owner information');\n throw new Error('Owner information is required');\n }\n\n if (!trackData.creator || !trackData.creator.target || !trackData.creator.type) {\n console.error('Track data missing creator information');\n throw new Error('Creator information is required');\n }\n\n try {\n console.log('Calling API to create track...');\n\n // Check what API URL we're using\n console.log('API URL:', trackStore.apiUrl);\n\n // Use a timeout to detect hanging requests\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Request timed out after 15 seconds')), 15000);\n });\n\n // Race between the actual request and the timeout\n const createdTrack = await Promise.race([trackStore.create(trackData), timeoutPromise]);\n\n console.log('Track created successfully, server response:', createdTrack);\n\n // Check if the response is what we expect\n if (!createdTrack || !createdTrack._id) {\n console.error('API returned success but without expected track data:', createdTrack);\n throw new Error('Invalid response from server');\n }\n\n // Update local state\n state.tracks.unshift(createdTrack);\n state.userTracks.unshift(createdTrack);\n\n console.log('Local state updated with new track');\n return createdTrack;\n } catch (error) {\n console.error('Error creating track:', error);\n\n // Enhanced error logging\n if (error.response) {\n console.error('Error response:', error.response);\n }\n\n // Format the error for better user feedback\n const formattedError = new Error(error.message || 'Failed to create track. Please try again.');\n formattedError.originalError = error;\n\n // Set a global error\n setError({\n message: formattedError.message,\n errorCode: error.errorCode || 'TRACK_CREATE_FAILED',\n });\n\n throw formattedError;\n }\n },\n\n async updateTrack(trackData) {\n try {\n const updatedTrack = await trackStore.update(trackData);\n\n // Update local state\n const index = state.tracks.findIndex(t => t._id === updatedTrack._id);\n if (index !== -1) {\n state.tracks[index] = updatedTrack;\n }\n\n const userIndex = state.userTracks.findIndex(t => t._id === updatedTrack._id);\n if (userIndex !== -1) {\n state.userTracks[userIndex] = updatedTrack;\n }\n\n if (state.currentTrack && state.currentTrack._id === updatedTrack._id) {\n state.currentTrack = updatedTrack;\n }\n\n return updatedTrack;\n } catch (error) {\n console.error('Error updating track:', error);\n throw error;\n }\n },\n\n async deleteTrack(trackId) {\n try {\n await trackStore.delete({ _id: trackId });\n\n // Update local state\n state.tracks = state.tracks.filter(t => t._id !== trackId);\n state.userTracks = state.userTracks.filter(t => t._id !== trackId);\n\n if (state.currentTrack && state.currentTrack._id === trackId) {\n state.currentTrack = null;\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting track:', error);\n throw error;\n }\n },\n\n async fetchUserTracks(userId) {\n try {\n const options = {\n creator: userId,\n limit: 100,\n };\n console.log('fetchUserTracks', userId);\n const tracks = await trackStore.read(options);\n state.userTracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching user tracks:', error);\n return [];\n }\n },\n};\n"],"names":["Store","reactive"],"mappings":"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"}
|