|
123 | 123 | }, 50); |
124 | 124 | } |
125 | 125 |
|
| 126 | + function updateCheckboxVisually(item, isChecked) { |
| 127 | + // Оновлюємо візуально чекбокс |
| 128 | + const checkbox = item.querySelector('.selectbox-item__checkbox'); |
| 129 | + if (checkbox) { |
| 130 | + if (isChecked) { |
| 131 | + checkbox.classList.add('selectbox-item__checkbox--checked'); |
| 132 | + } else { |
| 133 | + checkbox.classList.remove('selectbox-item__checkbox--checked'); |
| 134 | + } |
| 135 | + } |
| 136 | + |
| 137 | + // Також оновлюємо клас на самому item |
| 138 | + if (isChecked) { |
| 139 | + item.classList.add('selectbox-item--checked'); |
| 140 | + } else { |
| 141 | + item.classList.remove('selectbox-item--checked'); |
| 142 | + } |
| 143 | + } |
| 144 | + |
126 | 145 | function showHideLayoutsDialog() { |
127 | 146 | const defaultCode = getDefaultCode(); |
128 | 147 | let workingHidden = getHiddenLanguages().slice(); |
129 | 148 |
|
130 | 149 | log('showDialog: defaultCode=' + defaultCode + ', initial=' + JSON.stringify(workingHidden)); |
131 | 150 |
|
132 | 151 | function buildItems() { |
133 | | - // НЕ показуємо мову за замовчуванням |
134 | 152 | return LANGUAGES |
135 | 153 | .filter(function(lang) { return lang.code !== defaultCode; }) |
136 | 154 | .map(function(lang) { |
|
146 | 164 | } |
147 | 165 |
|
148 | 166 | let items = buildItems(); |
149 | | - let dialogShown = false; |
150 | 167 |
|
151 | 168 | function attachHandlers() { |
152 | 169 | setTimeout(function() { |
|
162 | 179 |
|
163 | 180 | if (!lang) return; |
164 | 181 |
|
165 | | - // Видаляємо старі обробники через clone |
| 182 | + // Встановлюємо правильний стан чекбокса візуально |
| 183 | + const isCurrentlyChecked = workingHidden.indexOf(lang.code) > -1; |
| 184 | + updateCheckboxVisually(item, isCurrentlyChecked); |
| 185 | + |
| 186 | + // Видаляємо старі обробники |
166 | 187 | const newItem = item.cloneNode(true); |
167 | 188 | item.parentNode.replaceChild(newItem, item); |
168 | 189 |
|
| 190 | + // Перевстановлюємо візуальний стан після клонування |
| 191 | + updateCheckboxVisually(newItem, isCurrentlyChecked); |
| 192 | + |
169 | 193 | // Додаємо новий обробник |
170 | 194 | newItem.addEventListener('click', function(e) { |
171 | | - // Запобігаємо подвійному спрацюванню |
172 | 195 | e.preventDefault(); |
173 | 196 | e.stopPropagation(); |
174 | 197 |
|
175 | 198 | log('CLICK: ' + lang.title + ' (code=' + lang.code + ')'); |
176 | 199 |
|
177 | 200 | const index = workingHidden.indexOf(lang.code); |
| 201 | + let newCheckedState; |
178 | 202 |
|
179 | 203 | if (index > -1) { |
180 | 204 | workingHidden.splice(index, 1); |
| 205 | + newCheckedState = false; |
181 | 206 | log('CLICK: REMOVED ' + lang.code); |
182 | 207 | } else { |
183 | 208 | workingHidden.push(lang.code); |
| 209 | + newCheckedState = true; |
184 | 210 | log('CLICK: ADDED ' + lang.code); |
185 | 211 | } |
186 | 212 |
|
187 | 213 | log('CLICK: new state=' + JSON.stringify(workingHidden)); |
188 | 214 |
|
| 215 | + // Оновлюємо візуально ОДРАЗУ |
| 216 | + updateCheckboxVisually(newItem, newCheckedState); |
| 217 | + |
| 218 | + // Зберігаємо |
189 | 219 | saveHiddenLanguages(workingHidden); |
190 | 220 |
|
| 221 | + // Перебудовуємо items для Lampa.Select |
191 | 222 | items = buildItems(); |
192 | 223 |
|
| 224 | + // Оновлюємо через Lampa API (це оновить внутрішній стан) |
193 | 225 | if (typeof Lampa.Select.update === 'function') { |
194 | 226 | Lampa.Select.update(items); |
| 227 | + // Після оновлення Lampa перепідключаємо обробники |
195 | 228 | attachHandlers(); |
196 | 229 | } |
197 | 230 | }); |
198 | 231 | }); |
199 | | - }, 100); |
| 232 | + }, 50); |
200 | 233 | } |
201 | 234 |
|
202 | 235 | try { |
203 | 236 | Lampa.Select.show({ |
204 | 237 | title: 'Приховати розкладки', |
205 | 238 | items: items, |
206 | 239 | onSelect: function(item) { |
207 | | - // Ігноруємо - використовуємо власні обробники |
| 240 | + // Ігноруємо |
208 | 241 | }, |
209 | 242 | onBack: function() { |
210 | 243 | log('onBack: final=' + JSON.stringify(workingHidden)); |
|
214 | 247 | } |
215 | 248 | }); |
216 | 249 |
|
217 | | - dialogShown = true; |
218 | 250 | log('showDialog: dialog shown'); |
219 | 251 |
|
220 | 252 | attachHandlers(); |
|
0 commit comments