|
25 | 25 |
|
26 | 26 | const { data }: Props = $props(); |
27 | 27 |
|
28 | | - const { vernacularAlphabet } = data; |
| 28 | + const { vernacularAlphabet } = $derived(data); |
29 | 29 |
|
30 | | - const alphabets = { |
| 30 | + const alphabets = $derived({ |
31 | 31 | reversal: Object.fromEntries( |
32 | | - reversals.entries().map(([code, alpha]) => [code, Array.from(alpha.keys())]) |
| 32 | + reversals.entries().map(([code, alpha]) => [code, Array.from(alpha?.keys() ?? [])]) |
33 | 33 | ), |
34 | 34 | vernacular: vernacularAlphabet |
35 | | - }; |
| 35 | + }); |
36 | 36 |
|
37 | | - let selectedLetter = alphabets.vernacular[0]; |
| 37 | + let selectedLetter = $derived(alphabets.vernacular?.[0]); |
38 | 38 | let scrollContainer: HTMLDivElement | undefined = $state(undefined); |
39 | 39 |
|
40 | 40 | //$: selectedLanguage = currentReversal.selectedLanguage; |
|
45 | 45 | currentReversal.languageId = vernacularLanguageId.value; |
46 | 46 | }); |
47 | 47 |
|
48 | | - const validReversal = $derived(reversals.has(currentReversal.languageId)); |
| 48 | + const validReversal = $derived( |
| 49 | + !!currentReversal.languageId && reversals.has(currentReversal.languageId) |
| 50 | + ); |
49 | 51 |
|
50 | 52 | async function scrollToLetter(letter: string) { |
51 | 53 | await tick(); |
|
68 | 70 |
|
69 | 71 | function switchLanguage(language: string) { |
70 | 72 | currentReversal.languageId = language; |
71 | | - selectedLetter = currentAlphabet[0]; |
| 73 | + selectedLetter = currentAlphabet?.[0]; |
72 | 74 | const scrollableDiv = document.querySelector('.flex-1.overflow-y-auto.bg-base-100'); |
73 | 75 | if (scrollableDiv) { |
74 | 76 | scrollableDiv.scrollTop = 0; |
|
90 | 92 | const threshold = 100; |
91 | 93 |
|
92 | 94 | if (div.scrollHeight - div.scrollTop - div.clientHeight < threshold) { |
93 | | - const currentIndex = currentAlphabet.indexOf(selectedLetter); |
94 | | - if (!currentReversal.letters.has(currentAlphabet[currentIndex + 1])) { |
95 | | - if (currentIndex < currentAlphabet.length - 1) { |
| 95 | + const currentIndex = currentAlphabet?.indexOf(selectedLetter ?? '') ?? -1; |
| 96 | + if (!currentReversal.letters.has(currentAlphabet?.[currentIndex + 1] ?? '')) { |
| 97 | + if (currentIndex < (currentAlphabet?.length ?? 0) - 1) { |
96 | 98 | isFetching = true; |
97 | 99 |
|
98 | 100 | isFetching = false; |
99 | 101 | } |
100 | 102 | } |
101 | 103 | } else if ( |
102 | | - (validReversal && currentReversal.letters.has(selectedLetter)) || |
| 104 | + (validReversal && currentReversal.letters.has(selectedLetter ?? '')) || |
103 | 105 | currentReversal.languageId === vernacularLanguageId.value |
104 | 106 | ) { |
105 | 107 | const allLetters = div.querySelectorAll('[id^="letter-"]'); |
|
120 | 122 | } |
121 | 123 |
|
122 | 124 | let currentAlphabet = $derived( |
123 | | - validReversal ? alphabets.reversal[currentReversal.languageId] : alphabets.vernacular |
| 125 | + validReversal && currentReversal.languageId |
| 126 | + ? alphabets.reversal[currentReversal.languageId] |
| 127 | + : alphabets.vernacular |
124 | 128 | ); |
125 | 129 |
|
126 | 130 | onMount(() => { |
|
136 | 140 | <WordNavigationStrip /> |
137 | 141 | {:else} |
138 | 142 | {@const tabs = [vernacularLanguageId.value, ...reversals.keys()]} |
139 | | - {@const indexOfPrevious = tabs.indexOf(previousLanguage)} |
| 143 | + {@const indexOfPrevious = previousLanguage ? tabs.indexOf(previousLanguage) : 0} |
140 | 144 | <div class="flex w-full" style="background-color: var(--TabBackgroundColor);"> |
141 | 145 | {#each tabs as lang, i} |
142 | 146 | <button |
|
168 | 172 | style="border-color: var(--SettingsSeparatorColor);" |
169 | 173 | disabled={currentReversal.languageId !== vernacularLanguageId.value && |
170 | 174 | !Array.from( |
171 | | - reversals.get(currentReversal.languageId)?.get(letter)?.values() || [] |
| 175 | + reversals |
| 176 | + .get(currentReversal.languageId ?? '') |
| 177 | + ?.get(letter) |
| 178 | + ?.values() || [] |
172 | 179 | ).find((w) => w.length)} |
173 | 180 | onclick={() => handleLetterChange(letter)} |
174 | 181 | > |
|
0 commit comments