favorite: v0.1
This commit is contained in:
52
app/store/favorites.ts
Normal file
52
app/store/favorites.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import type { Track } from '~/../types/types'
|
||||
|
||||
export const FAVORITES_BOX_ID = 'FAV'
|
||||
const STORAGE_KEY = 'evilspins:favorites:v1'
|
||||
|
||||
export const useFavoritesStore = defineStore('favorites', {
|
||||
state: () => ({
|
||||
trackIds: [] as number[]
|
||||
}),
|
||||
actions: {
|
||||
load() {
|
||||
if (!process.client) return
|
||||
try {
|
||||
const raw = localStorage.getItem(STORAGE_KEY)
|
||||
if (raw) {
|
||||
const arr = JSON.parse(raw)
|
||||
if (Array.isArray(arr)) this.trackIds = arr.filter((x) => typeof x === 'number')
|
||||
}
|
||||
} catch {}
|
||||
},
|
||||
save() {
|
||||
if (!process.client) return
|
||||
try {
|
||||
localStorage.setItem(STORAGE_KEY, JSON.stringify(this.trackIds))
|
||||
} catch {}
|
||||
},
|
||||
toggle(track: Track) {
|
||||
const id = track.id
|
||||
const idx = this.trackIds.indexOf(id)
|
||||
if (idx >= 0) this.trackIds.splice(idx, 1)
|
||||
else this.trackIds.unshift(id)
|
||||
this.save()
|
||||
},
|
||||
add(track: Track) {
|
||||
if (!this.trackIds.includes(track.id)) {
|
||||
this.trackIds.unshift(track.id)
|
||||
this.save()
|
||||
}
|
||||
},
|
||||
remove(trackId: number) {
|
||||
const idx = this.trackIds.indexOf(trackId)
|
||||
if (idx >= 0) {
|
||||
this.trackIds.splice(idx, 1)
|
||||
this.save()
|
||||
}
|
||||
},
|
||||
isFavorite(trackId: number) {
|
||||
return this.trackIds.includes(trackId)
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user