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