feat(ui): silme işlemini iki aşamalı onay sistemine dönüştür
Tarayıcı doğrulama penceresi yerine inline onay mekanizması eklendi. Kullanıcı dosya silmek için "Sil" butonuna ilk tıkladığında buton kırmızıya dönerek "Emin misiniz?" sorusunu gösterir ve ikinci tıklamada silme işlemini gerçekleştirir. Bu yaklaşım kullanıcı deneyimini iyileştirir ve uygulama tutarlılığını artırır.
This commit is contained in:
@@ -468,6 +468,7 @@
|
||||
let pendingPlayTarget = null;
|
||||
let activeMenu = null; // Aktif menü öğesi
|
||||
let menuPosition = { top: 0, left: 0 }; // Menü pozisyonu
|
||||
let deleteConfirmPending = false; // Silme onayı beklemede mi
|
||||
let showMatchModal = false;
|
||||
let matchingFile = null;
|
||||
let matchTitle = "";
|
||||
@@ -1444,48 +1445,53 @@
|
||||
|
||||
async function deleteFile(item) {
|
||||
if (!item) return;
|
||||
const target = resolveDeletionTargets(item);
|
||||
if (!target) {
|
||||
|
||||
// Eğer onay beklemedeyse, silme işlemini gerçekleştir
|
||||
if (deleteConfirmPending) {
|
||||
const target = resolveDeletionTargets(item);
|
||||
if (!target) {
|
||||
closeMenu();
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await performDeletion(target);
|
||||
deleteConfirmPending = false; // Reset flag
|
||||
|
||||
if (!result.ok) {
|
||||
alert("Silme hatası: " + (result.error || "Bilinmeyen hata"));
|
||||
closeMenu();
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.isDirectory) {
|
||||
const displayKey = normalizePath(
|
||||
item.displayPath ||
|
||||
(item.name?.startsWith("dir:") ? item.name.slice(4) : ""),
|
||||
);
|
||||
if (displayKey || displayKey === "") {
|
||||
pendingFolders.delete(displayKey);
|
||||
}
|
||||
}
|
||||
|
||||
await loadFiles();
|
||||
await Promise.all([refreshMovieCount(), refreshTvShowCount(), fetchTrashItems()]);
|
||||
selectedItems = new Set(
|
||||
[...selectedItems].filter((name) => name !== item.name),
|
||||
);
|
||||
closeMenu();
|
||||
return;
|
||||
}
|
||||
|
||||
const label =
|
||||
target.type === "directory"
|
||||
? target.label || item.displayName || "Klasör"
|
||||
: target.label || cleanFileName(item.name);
|
||||
const message =
|
||||
target.type === "directory"
|
||||
? `"${label}" klasörünü silmek istediğine emin misin?`
|
||||
: `"${label}" dosyasını silmek istediğinizden emin misiniz?`;
|
||||
|
||||
if (!confirm(message)) {
|
||||
closeMenu();
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await performDeletion(target);
|
||||
if (!result.ok) {
|
||||
alert("Silme hatası: " + (result.error || "Bilinmeyen hata"));
|
||||
closeMenu();
|
||||
return;
|
||||
}
|
||||
if (item.isDirectory) {
|
||||
const displayKey = normalizePath(
|
||||
item.displayPath ||
|
||||
(item.name?.startsWith("dir:") ? item.name.slice(4) : ""),
|
||||
);
|
||||
if (displayKey || displayKey === "") {
|
||||
pendingFolders.delete(displayKey);
|
||||
}
|
||||
// İlk tıklama - onay moduna geç
|
||||
deleteConfirmPending = true;
|
||||
}
|
||||
|
||||
await loadFiles();
|
||||
await Promise.all([refreshMovieCount(), refreshTvShowCount(), fetchTrashItems()]);
|
||||
selectedItems = new Set(
|
||||
[...selectedItems].filter((name) => name !== item.name),
|
||||
);
|
||||
closeMenu();
|
||||
// Menü kapandığında onay durumunu resetle
|
||||
function closeMenu() {
|
||||
activeMenu = null;
|
||||
deleteConfirmPending = false;
|
||||
showMatchModal = false;
|
||||
matchingFile = null;
|
||||
}
|
||||
|
||||
// Klasör oluşturma fonksiyonları
|
||||
@@ -2419,11 +2425,11 @@
|
||||
</button>
|
||||
<div class="menu-divider"></div>
|
||||
<button
|
||||
class="menu-item delete"
|
||||
class="menu-item delete {deleteConfirmPending ? 'confirming' : ''}"
|
||||
on:click|stopPropagation={() => deleteFile(activeMenu)}
|
||||
>
|
||||
<i class="fa-solid fa-trash"></i>
|
||||
<span>Sil</span>
|
||||
<span>{deleteConfirmPending ? 'Emin misiniz?' : 'Sil'}</span>
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
@@ -3979,7 +3985,17 @@
|
||||
.menu-item.delete {
|
||||
color: #e53935;
|
||||
}
|
||||
|
||||
|
||||
.menu-item.delete.confirming {
|
||||
color: #fff;
|
||||
background-color: #e53935;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.menu-item.delete.confirming:hover {
|
||||
background-color: #c62828;
|
||||
}
|
||||
|
||||
.menu-item.delete:hover {
|
||||
background-color: #ffebee;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user