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 pendingPlayTarget = null;
|
||||||
let activeMenu = null; // Aktif menü öğesi
|
let activeMenu = null; // Aktif menü öğesi
|
||||||
let menuPosition = { top: 0, left: 0 }; // Menü pozisyonu
|
let menuPosition = { top: 0, left: 0 }; // Menü pozisyonu
|
||||||
|
let deleteConfirmPending = false; // Silme onayı beklemede mi
|
||||||
let showMatchModal = false;
|
let showMatchModal = false;
|
||||||
let matchingFile = null;
|
let matchingFile = null;
|
||||||
let matchTitle = "";
|
let matchTitle = "";
|
||||||
@@ -1444,48 +1445,53 @@
|
|||||||
|
|
||||||
async function deleteFile(item) {
|
async function deleteFile(item) {
|
||||||
if (!item) return;
|
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();
|
closeMenu();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const label =
|
// İlk tıklama - onay moduna geç
|
||||||
target.type === "directory"
|
deleteConfirmPending = true;
|
||||||
? 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await loadFiles();
|
// Menü kapandığında onay durumunu resetle
|
||||||
await Promise.all([refreshMovieCount(), refreshTvShowCount(), fetchTrashItems()]);
|
function closeMenu() {
|
||||||
selectedItems = new Set(
|
activeMenu = null;
|
||||||
[...selectedItems].filter((name) => name !== item.name),
|
deleteConfirmPending = false;
|
||||||
);
|
showMatchModal = false;
|
||||||
closeMenu();
|
matchingFile = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Klasör oluşturma fonksiyonları
|
// Klasör oluşturma fonksiyonları
|
||||||
@@ -2419,11 +2425,11 @@
|
|||||||
</button>
|
</button>
|
||||||
<div class="menu-divider"></div>
|
<div class="menu-divider"></div>
|
||||||
<button
|
<button
|
||||||
class="menu-item delete"
|
class="menu-item delete {deleteConfirmPending ? 'confirming' : ''}"
|
||||||
on:click|stopPropagation={() => deleteFile(activeMenu)}
|
on:click|stopPropagation={() => deleteFile(activeMenu)}
|
||||||
>
|
>
|
||||||
<i class="fa-solid fa-trash"></i>
|
<i class="fa-solid fa-trash"></i>
|
||||||
<span>Sil</span>
|
<span>{deleteConfirmPending ? 'Emin misiniz?' : 'Sil'}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -3979,7 +3985,17 @@
|
|||||||
.menu-item.delete {
|
.menu-item.delete {
|
||||||
color: #e53935;
|
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 {
|
.menu-item.delete:hover {
|
||||||
background-color: #ffebee;
|
background-color: #ffebee;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user