|
33 | 33 | function getHiddenLanguages() { |
34 | 34 | // Отримуємо збережений масив прихованих мов |
35 | 35 | const stored = Lampa.Storage.get('keyboard_hidden_layouts', '[]'); |
| 36 | + log('getHiddenLanguages: stored string=' + stored); |
36 | 37 | try { |
37 | 38 | const parsed = JSON.parse(stored); |
38 | 39 | log('getHiddenLanguages: parsed=' + JSON.stringify(parsed)); |
39 | 40 | return Array.isArray(parsed) ? parsed : []; |
40 | 41 | } catch (e) { |
41 | | - log('getHiddenLanguages: parse error, returning []'); |
| 42 | + log('getHiddenLanguages: parse error=' + e.message + ', returning []'); |
42 | 43 | return []; |
43 | 44 | } |
44 | 45 | } |
45 | 46 |
|
46 | 47 | function saveHiddenLanguages(hiddenCodes) { |
47 | 48 | log('saveHiddenLanguages: saving ' + JSON.stringify(hiddenCodes)); |
48 | | - Lampa.Storage.set('keyboard_hidden_layouts', JSON.stringify(hiddenCodes)); |
| 49 | + const jsonString = JSON.stringify(hiddenCodes); |
| 50 | + Lampa.Storage.set('keyboard_hidden_layouts', jsonString); |
| 51 | + |
| 52 | + // Перевіряємо, що збереглося |
| 53 | + const verified = Lampa.Storage.get('keyboard_hidden_layouts', '[]'); |
| 54 | + log('saveHiddenLanguages: verified stored value=' + verified); |
49 | 55 |
|
50 | 56 | // Також зберігаємо в окремі ключі для зворотної сумісності |
51 | 57 | LANGUAGES.forEach(lang => { |
|
143 | 149 | function showHideLayoutsDialog() { |
144 | 150 | log('showHideLayoutsDialog: opened'); |
145 | 151 | const defaultCode = getDefaultCode(); |
146 | | - const hiddenCodes = getHiddenLanguages(); |
147 | 152 |
|
148 | | - log('showHideLayoutsDialog: defaultCode=' + defaultCode + ' hiddenCodes=' + JSON.stringify(hiddenCodes)); |
149 | | - |
150 | | - // Створюємо копію масиву для роботи |
151 | | - let workingHiddenCodes = [...hiddenCodes]; |
| 153 | + // ВАЖЛИВО: отримуємо поточний стан з Storage кожного разу |
| 154 | + let hiddenCodes = getHiddenLanguages(); |
| 155 | + log('showHideLayoutsDialog: initial hiddenCodes=' + JSON.stringify(hiddenCodes)); |
152 | 156 |
|
153 | 157 | function buildItems() { |
| 158 | + // Перечитуємо поточний стан перед побудовою |
| 159 | + hiddenCodes = getHiddenLanguages(); |
| 160 | + log('buildItems: current hiddenCodes=' + JSON.stringify(hiddenCodes)); |
| 161 | + |
154 | 162 | // Виключаємо розкладку за замовчуванням зі списку |
155 | 163 | return LANGUAGES |
156 | 164 | .filter(lang => lang.code !== defaultCode) |
157 | 165 | .map(lang => { |
158 | | - const selected = workingHiddenCodes.includes(lang.code); |
| 166 | + const selected = hiddenCodes.includes(lang.code); |
159 | 167 | log('buildItems: lang=' + lang.title + ' code=' + lang.code + ' selected=' + selected); |
160 | 168 | return { |
161 | 169 | title: lang.title, |
|
172 | 180 | title: 'Приховати розкладки', |
173 | 181 | items: items, |
174 | 182 | onSelect(item) { |
175 | | - log('showHideLayoutsDialog onSelect: item.title=' + item.title + ' item.code=' + item.code); |
| 183 | + log('showHideLayoutsDialog onSelect: START - item.title=' + item.title + ' item.code=' + item.code); |
176 | 184 |
|
177 | 185 | if (!item || !item.code) { |
178 | 186 | log('showHideLayoutsDialog onSelect: no item.code, abort'); |
179 | 187 | return; |
180 | 188 | } |
181 | 189 |
|
182 | | - // Перемикаємо стан в робочому масиві |
183 | | - const index = workingHiddenCodes.indexOf(item.code); |
| 190 | + // Отримуємо ПОТОЧНИЙ стан з Storage |
| 191 | + let currentHiddenCodes = getHiddenLanguages(); |
| 192 | + log('showHideLayoutsDialog onSelect: BEFORE toggle, currentHiddenCodes=' + JSON.stringify(currentHiddenCodes)); |
| 193 | + |
| 194 | + // Перемикаємо стан |
| 195 | + const index = currentHiddenCodes.indexOf(item.code); |
184 | 196 | if (index > -1) { |
185 | 197 | // Видаляємо з прихованих |
186 | | - workingHiddenCodes.splice(index, 1); |
187 | | - log('showHideLayoutsDialog onSelect: removed ' + item.code + ', new array=' + JSON.stringify(workingHiddenCodes)); |
| 198 | + currentHiddenCodes.splice(index, 1); |
| 199 | + log('showHideLayoutsDialog onSelect: REMOVED ' + item.code); |
188 | 200 | } else { |
189 | 201 | // Додаємо до прихованих |
190 | | - workingHiddenCodes.push(item.code); |
191 | | - log('showHideLayoutsDialog onSelect: added ' + item.code + ', new array=' + JSON.stringify(workingHiddenCodes)); |
| 202 | + currentHiddenCodes.push(item.code); |
| 203 | + log('showHideLayoutsDialog onSelect: ADDED ' + item.code); |
192 | 204 | } |
193 | 205 |
|
194 | | - // Зберігаємо оновлений масив |
195 | | - saveHiddenLanguages(workingHiddenCodes); |
| 206 | + log('showHideLayoutsDialog onSelect: AFTER toggle, currentHiddenCodes=' + JSON.stringify(currentHiddenCodes)); |
| 207 | + |
| 208 | + // ЗБЕРІГАЄМО НЕГАЙНО |
| 209 | + saveHiddenLanguages(currentHiddenCodes); |
196 | 210 |
|
197 | | - // Оновлюємо стан чекбокса |
198 | | - item.selected = workingHiddenCodes.includes(item.code); |
199 | | - log('showHideLayoutsDialog onSelect: item.selected=' + item.selected); |
| 211 | + // Перевіряємо, що збереглося |
| 212 | + const verifyHidden = getHiddenLanguages(); |
| 213 | + log('showHideLayoutsDialog onSelect: VERIFIED after save=' + JSON.stringify(verifyHidden)); |
200 | 214 |
|
201 | 215 | // Оновлюємо клавіатуру |
202 | 216 | if (window.keyboard) { |
203 | 217 | window.keyboard.init(); |
204 | 218 | log('showHideLayoutsDialog onSelect: keyboard reinitialized'); |
205 | 219 | } |
206 | 220 |
|
207 | | - // Перебудовуємо список елементів |
| 221 | + // Перебудовуємо список елементів (це заново прочитає з Storage) |
208 | 222 | items = buildItems(); |
| 223 | + log('showHideLayoutsDialog onSelect: items rebuilt, count=' + items.length); |
209 | 224 |
|
210 | 225 | // Оновлюємо Select dialog |
211 | 226 | if (typeof Lampa.Select.update === 'function') { |
|
219 | 234 |
|
220 | 235 | // Оновлюємо відображення в налаштуваннях |
221 | 236 | updateHideDisplay(); |
| 237 | + |
| 238 | + log('showHideLayoutsDialog onSelect: END'); |
222 | 239 | }, |
223 | 240 | onBack() { |
224 | 241 | log('showHideLayoutsDialog onBack'); |
| 242 | + // При закритті оновлюємо відображення |
| 243 | + updateHideDisplay(); |
225 | 244 | Lampa.Controller.toggle('settings_component'); |
226 | 245 | } |
227 | 246 | }); |
|
0 commit comments