26 lines
686 B
TypeScript
26 lines
686 B
TypeScript
import { ref } from "vue";
|
|
import { defineStore } from "pinia";
|
|
import { getCookie, setCookie } from "@/lib/cookies";
|
|
|
|
const COOKIE_NAME = "recent-lists";
|
|
const MAX_RECENT_LISTS = 32;
|
|
|
|
export const useListStore = defineStore("lists", () => {
|
|
const lists = ref<string[]>([]);
|
|
|
|
const rawData = getCookie(COOKIE_NAME, "");
|
|
if (rawData) {
|
|
lists.value = rawData.split(",");
|
|
}
|
|
|
|
function addList(list: string) {
|
|
lists.value = [list]
|
|
.concat(lists.value)
|
|
.filter((v, i, a) => a.indexOf(v) === i)
|
|
.slice(0, MAX_RECENT_LISTS);
|
|
setCookie(COOKIE_NAME, lists.value.join(","));
|
|
}
|
|
|
|
return { lists, addList };
|
|
});
|