post-editor-cache.service.ts raw
1 import { TPollCreateData } from '@/types'
2 import { Content } from '@tiptap/react'
3 import { Event } from 'nostr-tools'
4
5 type TPostSettings = {
6 isNsfw?: boolean
7 isPoll?: boolean
8 pollCreateData?: TPollCreateData
9 addClientTag?: boolean
10 }
11
12 class PostEditorCacheService {
13 static instance: PostEditorCacheService
14
15 private postContentCache: Map<string, Content> = new Map()
16 private postSettingsCache: Map<string, TPostSettings> = new Map()
17
18 constructor() {
19 if (!PostEditorCacheService.instance) {
20 PostEditorCacheService.instance = this
21 }
22 return PostEditorCacheService.instance
23 }
24
25 getPostContentCache({
26 defaultContent,
27 parentStuff
28 }: { defaultContent?: string; parentStuff?: Event | string } = {}) {
29 return (
30 this.postContentCache.get(this.generateCacheKey(defaultContent, parentStuff)) ??
31 defaultContent
32 )
33 }
34
35 setPostContentCache(
36 { defaultContent, parentStuff }: { defaultContent?: string; parentStuff?: Event | string },
37 content: Content
38 ) {
39 this.postContentCache.set(this.generateCacheKey(defaultContent, parentStuff), content)
40 }
41
42 getPostSettingsCache({
43 defaultContent,
44 parentStuff
45 }: { defaultContent?: string; parentStuff?: Event | string } = {}): TPostSettings | undefined {
46 return this.postSettingsCache.get(this.generateCacheKey(defaultContent, parentStuff))
47 }
48
49 setPostSettingsCache(
50 { defaultContent, parentStuff }: { defaultContent?: string; parentStuff?: Event | string },
51 settings: TPostSettings
52 ) {
53 this.postSettingsCache.set(this.generateCacheKey(defaultContent, parentStuff), settings)
54 }
55
56 clearPostCache({
57 defaultContent,
58 parentStuff
59 }: {
60 defaultContent?: string
61 parentStuff?: Event | string
62 }) {
63 const cacheKey = this.generateCacheKey(defaultContent, parentStuff)
64 this.postContentCache.delete(cacheKey)
65 this.postSettingsCache.delete(cacheKey)
66 }
67
68 generateCacheKey(defaultContent: string = '', parentStuff?: Event | string): string {
69 return parentStuff
70 ? typeof parentStuff === 'string'
71 ? parentStuff
72 : parentStuff.id
73 : defaultContent
74 }
75 }
76
77 const instance = new PostEditorCacheService()
78 export default instance
79