You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.0 KiB
74 lines
2.0 KiB
import { TPollCreateData } from '@/types' |
|
import { Content } from '@tiptap/react' |
|
import { Event } from 'nostr-tools' |
|
|
|
type TPostSettings = { |
|
isNsfw?: boolean |
|
isPoll?: boolean |
|
pollCreateData?: TPollCreateData |
|
addClientTag?: boolean |
|
} |
|
|
|
class PostEditorCacheService { |
|
static instance: PostEditorCacheService |
|
|
|
private postContentCache: Map<string, Content> = new Map() |
|
private postSettingsCache: Map<string, TPostSettings> = new Map() |
|
|
|
constructor() { |
|
if (!PostEditorCacheService.instance) { |
|
PostEditorCacheService.instance = this |
|
} |
|
return PostEditorCacheService.instance |
|
} |
|
|
|
getPostContentCache({ |
|
defaultContent, |
|
parentEvent |
|
}: { defaultContent?: string; parentEvent?: Event } = {}) { |
|
return ( |
|
this.postContentCache.get(this.generateCacheKey(defaultContent, parentEvent)) ?? |
|
defaultContent |
|
) |
|
} |
|
|
|
setPostContentCache( |
|
{ defaultContent, parentEvent }: { defaultContent?: string; parentEvent?: Event }, |
|
content: Content |
|
) { |
|
this.postContentCache.set(this.generateCacheKey(defaultContent, parentEvent), content) |
|
} |
|
|
|
getPostSettingsCache({ |
|
defaultContent, |
|
parentEvent |
|
}: { defaultContent?: string; parentEvent?: Event } = {}): TPostSettings | undefined { |
|
return this.postSettingsCache.get(this.generateCacheKey(defaultContent, parentEvent)) |
|
} |
|
|
|
setPostSettingsCache( |
|
{ defaultContent, parentEvent }: { defaultContent?: string; parentEvent?: Event }, |
|
settings: TPostSettings |
|
) { |
|
this.postSettingsCache.set(this.generateCacheKey(defaultContent, parentEvent), settings) |
|
} |
|
|
|
clearPostCache({ |
|
defaultContent, |
|
parentEvent |
|
}: { |
|
defaultContent?: string |
|
parentEvent?: Event |
|
}) { |
|
const cacheKey = this.generateCacheKey(defaultContent, parentEvent) |
|
this.postContentCache.delete(cacheKey) |
|
this.postSettingsCache.delete(cacheKey) |
|
} |
|
|
|
generateCacheKey(defaultContent: string = '', parentEvent?: Event): string { |
|
return parentEvent ? parentEvent.id : defaultContent |
|
} |
|
} |
|
|
|
const instance = new PostEditorCacheService() |
|
export default instance
|
|
|