aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/components/dashboard/preview/content-renderers/registry.ts
blob: 1e920eaf2bdf2e65ea36818d64cfb9c0251b5c79 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { ZBookmark } from "@karakeep/shared/types/bookmarks";

import { ContentRenderer, ContentRendererRegistry } from "./types";

class ContentRendererRegistryImpl implements ContentRendererRegistry {
  private renderers: Map<string, ContentRenderer> = new Map<
    string,
    ContentRenderer
  >();

  register(renderer: ContentRenderer): void {
    this.renderers.set(renderer.id, renderer);
  }

  getRenderers(bookmark: ZBookmark): ContentRenderer[] {
    return [...this.renderers.values()]
      .filter((renderer) => renderer.canRender(bookmark))
      .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
  }

  getAllRenderers(): ContentRenderer[] {
    return [...this.renderers.values()];
  }
}

export const contentRendererRegistry = new ContentRendererRegistryImpl();