mirror of
https://github.com/ngthanhvu/kr-phim.git
synced 2026-08-10 13:27:46 +00:00
- Created 0009_snapshot.json with initial structure for comment_votes, comments, movies, and users tables. - Created 0010_snapshot.json with updated structure for comments, including new fields: pinned and spoiler. - Created 0011_snapshot.json with further updates to comments, adding anonymous field and refining existing structures.
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
export type CommentDraft = {
|
|
slug: string
|
|
source: string
|
|
content: string
|
|
movieName?: string
|
|
savedAt: number
|
|
}
|
|
|
|
const draftKey = 'cinek-comment-drafts'
|
|
|
|
function readDrafts(): CommentDraft[] {
|
|
if (!import.meta.client) return []
|
|
try {
|
|
const raw = window.localStorage.getItem(draftKey)
|
|
const drafts = raw ? JSON.parse(raw) : []
|
|
return Array.isArray(drafts) ? drafts : []
|
|
} catch {
|
|
return []
|
|
}
|
|
}
|
|
|
|
function writeDrafts(drafts: CommentDraft[]) {
|
|
if (!import.meta.client) return
|
|
window.localStorage.setItem(draftKey, JSON.stringify(drafts))
|
|
}
|
|
|
|
function findDraftKey(slug: string, source: string) {
|
|
return `${source}::${slug}`
|
|
}
|
|
|
|
export function useCommentDraft() {
|
|
function getDraft(slug: string, source: string): CommentDraft | null {
|
|
const drafts = readDrafts()
|
|
const key = findDraftKey(slug, source)
|
|
return drafts.find(d => findDraftKey(d.slug, d.source) === key) || null
|
|
}
|
|
|
|
function saveDraft(slug: string, source: string, content: string, movieName?: string) {
|
|
const drafts = readDrafts()
|
|
const key = findDraftKey(slug, source)
|
|
const filtered = drafts.filter(d => findDraftKey(d.slug, d.source) !== key)
|
|
filtered.unshift({ slug, source, content, movieName, savedAt: Date.now() })
|
|
writeDrafts(filtered.slice(0, 50))
|
|
}
|
|
|
|
function deleteDraft(slug: string, source: string) {
|
|
const drafts = readDrafts()
|
|
const key = findDraftKey(slug, source)
|
|
const filtered = drafts.filter(d => findDraftKey(d.slug, d.source) !== key)
|
|
writeDrafts(filtered)
|
|
}
|
|
|
|
function getAllDrafts(): CommentDraft[] {
|
|
return readDrafts()
|
|
}
|
|
|
|
function clearAllDrafts() {
|
|
if (import.meta.client) {
|
|
window.localStorage.removeItem(draftKey)
|
|
}
|
|
}
|
|
|
|
function clearExpiredDrafts(maxAgeMs = 7 * 24 * 60 * 60 * 1000) {
|
|
const drafts = readDrafts().filter(d => Date.now() - d.savedAt < maxAgeMs)
|
|
writeDrafts(drafts)
|
|
}
|
|
|
|
return { getDraft, saveDraft, deleteDraft, getAllDrafts, clearAllDrafts, clearExpiredDrafts }
|
|
}
|