Skip to content

Commit 0b42df0

Browse files
Update key_off.js
1 parent 2645989 commit 0b42df0

1 file changed

Lines changed: 39 additions & 7 deletions

File tree

‎key_off.js‎

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,32 @@
123123
}, 50);
124124
}
125125

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+
126145
function showHideLayoutsDialog() {
127146
const defaultCode = getDefaultCode();
128147
let workingHidden = getHiddenLanguages().slice();
129148

130149
log('showDialog: defaultCode=' + defaultCode + ', initial=' + JSON.stringify(workingHidden));
131150

132151
function buildItems() {
133-
// НЕ показуємо мову за замовчуванням
134152
return LANGUAGES
135153
.filter(function(lang) { return lang.code !== defaultCode; })
136154
.map(function(lang) {
@@ -146,7 +164,6 @@
146164
}
147165

148166
let items = buildItems();
149-
let dialogShown = false;
150167

151168
function attachHandlers() {
152169
setTimeout(function() {
@@ -162,49 +179,65 @@
162179

163180
if (!lang) return;
164181

165-
// Видаляємо старі обробники через clone
182+
// Встановлюємо правильний стан чекбокса візуально
183+
const isCurrentlyChecked = workingHidden.indexOf(lang.code) > -1;
184+
updateCheckboxVisually(item, isCurrentlyChecked);
185+
186+
// Видаляємо старі обробники
166187
const newItem = item.cloneNode(true);
167188
item.parentNode.replaceChild(newItem, item);
168189

190+
// Перевстановлюємо візуальний стан після клонування
191+
updateCheckboxVisually(newItem, isCurrentlyChecked);
192+
169193
// Додаємо новий обробник
170194
newItem.addEventListener('click', function(e) {
171-
// Запобігаємо подвійному спрацюванню
172195
e.preventDefault();
173196
e.stopPropagation();
174197

175198
log('CLICK: ' + lang.title + ' (code=' + lang.code + ')');
176199

177200
const index = workingHidden.indexOf(lang.code);
201+
let newCheckedState;
178202

179203
if (index > -1) {
180204
workingHidden.splice(index, 1);
205+
newCheckedState = false;
181206
log('CLICK: REMOVED ' + lang.code);
182207
} else {
183208
workingHidden.push(lang.code);
209+
newCheckedState = true;
184210
log('CLICK: ADDED ' + lang.code);
185211
}
186212

187213
log('CLICK: new state=' + JSON.stringify(workingHidden));
188214

215+
// Оновлюємо візуально ОДРАЗУ
216+
updateCheckboxVisually(newItem, newCheckedState);
217+
218+
// Зберігаємо
189219
saveHiddenLanguages(workingHidden);
190220

221+
// Перебудовуємо items для Lampa.Select
191222
items = buildItems();
192223

224+
// Оновлюємо через Lampa API (це оновить внутрішній стан)
193225
if (typeof Lampa.Select.update === 'function') {
194226
Lampa.Select.update(items);
227+
// Після оновлення Lampa перепідключаємо обробники
195228
attachHandlers();
196229
}
197230
});
198231
});
199-
}, 100);
232+
}, 50);
200233
}
201234

202235
try {
203236
Lampa.Select.show({
204237
title: 'Приховати розкладки',
205238
items: items,
206239
onSelect: function(item) {
207-
// Ігноруємо - використовуємо власні обробники
240+
// Ігноруємо
208241
},
209242
onBack: function() {
210243
log('onBack: final=' + JSON.stringify(workingHidden));
@@ -214,7 +247,6 @@
214247
}
215248
});
216249

217-
dialogShown = true;
218250
log('showDialog: dialog shown');
219251

220252
attachHandlers();

0 commit comments

Comments
 (0)