editPlaylist.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { defineStore } from "pinia";
  2. import { Playlist } from "@/types/playlist";
  3. export const useEditPlaylistStore = ({ modalUuid }: { modalUuid: string }) =>
  4. defineStore(`editPlaylist-${modalUuid}`, {
  5. state: (): {
  6. tab: string;
  7. playlist: Playlist;
  8. } => ({
  9. tab: "settings",
  10. playlist: { songs: [] }
  11. }),
  12. actions: {
  13. showTab(tab) {
  14. this.tab = tab;
  15. },
  16. setPlaylist(playlist) {
  17. this.playlist = { ...playlist };
  18. this.playlist.songs.sort((a, b) => a.position - b.position);
  19. },
  20. clearPlaylist() {
  21. this.playlist = { songs: [] };
  22. },
  23. addSong(song) {
  24. this.playlist.songs.push(song);
  25. },
  26. removeSong(mediaSource) {
  27. this.playlist.songs = this.playlist.songs.filter(
  28. song => song.mediaSource !== mediaSource
  29. );
  30. },
  31. replaceSong({ song, oldMediaSource }) {
  32. this.playlist.songs = this.playlist.songs.map(_song =>
  33. _song.mediaSource === oldMediaSource ? song : _song
  34. );
  35. },
  36. updatePlaylistSongs(playlistSongs) {
  37. this.playlist.songs = playlistSongs;
  38. },
  39. reorderSongsList(songsOrder) {
  40. this.playlist.songs.sort((songA, songB) => {
  41. const indexA = songsOrder.findIndex(
  42. mediaSource => mediaSource === songA.mediaSource
  43. );
  44. const indexB = songsOrder.findIndex(
  45. mediaSource => mediaSource === songB.mediaSource
  46. );
  47. if (indexA > indexB) return 1;
  48. if (indexA < indexB) return -1;
  49. return 0;
  50. });
  51. }
  52. }
  53. })();