|
1 | 1 | <script lang="ts"> |
| 2 | + import type { |
| 3 | + OerSearchResultEvent, |
| 4 | + OerSearchElement, |
| 5 | + OerListElement, |
| 6 | + OerCardClickEvent, |
| 7 | + SourceConfig, |
| 8 | + LoadMoreElement |
| 9 | + } from '@edufeed-org/oer-finder-plugin'; |
2 | 10 | import { onMount } from 'svelte'; |
3 | 11 | import { settingsStore } from '$lib/stores/settingsStore.svelte'; |
4 | | -
|
5 | | - type SourceConfig = { |
6 | | - id: string; |
7 | | - label: string; |
8 | | - checked?: boolean; |
9 | | - baseUrl?: string; |
10 | | - }; |
11 | | -
|
12 | | - type OerData = { |
13 | | - extensions?: { |
14 | | - images?: { |
15 | | - high?: string; |
16 | | - medium?: string; |
17 | | - small?: string; |
18 | | - } | null; |
19 | | - }; |
20 | | - amb?: { |
21 | | - id?: string; |
22 | | - }; |
23 | | - }; |
24 | | -
|
25 | | - type OerSearchResultEvent = CustomEvent<{ |
26 | | - data: OerData[]; |
27 | | - meta: unknown; |
28 | | - }>; |
29 | | -
|
30 | | - type OerCardClickEvent = CustomEvent<{ |
31 | | - oer: OerData; |
32 | | - }>; |
33 | | -
|
34 | | - type OerSearchElement = HTMLElement & { |
35 | | - sources?: SourceConfig[]; |
36 | | - }; |
37 | | -
|
38 | | - type OerListElement = HTMLElement & { |
39 | | - loading: boolean; |
40 | | - oers: unknown[]; |
41 | | - error?: string | null; |
42 | | - }; |
43 | | -
|
44 | | - type LoadMoreElement = HTMLElement & { |
45 | | - loading: boolean; |
46 | | - metadata: unknown; |
47 | | - }; |
| 12 | + import { registerAllBuiltInAdapters } from '@edufeed-org/oer-finder-plugin/adapters'; |
48 | 13 |
|
49 | 14 | interface Props { |
50 | 15 | onSelect: (imageUrl: string) => void; |
|
55 | 20 | const language = $state(settingsStore.settings.language) |
56 | 21 | const { onSelect }: Props = $props(); |
57 | 22 |
|
| 23 | + registerAllBuiltInAdapters(); |
| 24 | +
|
58 | 25 | const availableSources: SourceConfig[] = [ |
59 | 26 | { id: 'arasaac', label: 'ARASAAC' }, |
60 | 27 | { id: 'openverse', label: 'Openverse', checked: true }, |
|
68 | 35 | let loadMoreElement: LoadMoreElement; |
69 | 36 |
|
70 | 37 | onMount(async () => { |
71 | | - const plugin = await import('@edufeed-org/oer-finder-plugin'); |
72 | | - plugin.registerAllBuiltInAdapters(); |
| 38 | + // Dynamically import the plugin only on the client side to avoid SSR issues |
| 39 | + await import('@edufeed-org/oer-finder-plugin'); |
73 | 40 |
|
74 | 41 | // Set sources as a JS property (not HTML attribute) |
75 | 42 | searchEl.sources = availableSources; |
|
0 commit comments