aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/components/dashboard/preview/content-renderers/registry.ts
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2025-08-03 23:35:06 -0700
committerMohamedBassem <me@mbassem.com>2025-08-03 23:59:45 -0700
commitc68e5099797d5b49ed6441ce04d7c77105327f73 (patch)
tree296fe5f473f46d802fcf94fa203ca37672112c30 /apps/web/components/dashboard/preview/content-renderers/registry.ts
parent03aa17200ed80c2978bf496991c6afbb5a04258b (diff)
downloadkarakeep-c68e5099797d5b49ed6441ce04d7c77105327f73.tar.zst
feat(web): Add special cards for specific websites. Fixes #1344
Diffstat (limited to 'apps/web/components/dashboard/preview/content-renderers/registry.ts')
-rw-r--r--apps/web/components/dashboard/preview/content-renderers/registry.ts26
1 files changed, 26 insertions, 0 deletions
diff --git a/apps/web/components/dashboard/preview/content-renderers/registry.ts b/apps/web/components/dashboard/preview/content-renderers/registry.ts
new file mode 100644
index 00000000..1e920eaf
--- /dev/null
+++ b/apps/web/components/dashboard/preview/content-renderers/registry.ts
@@ -0,0 +1,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();