Cover Files no-match filter feedback

This commit is contained in:
mirivlad 2026-07-01 19:07:06 +08:00
parent 74c627f706
commit a540da707d
2 changed files with 41 additions and 1 deletions

View File

@ -199,6 +199,25 @@ test.describe('G: Files Plugin', () => {
await expect(page.locator('.files-empty')).toHaveCount(0);
});
test('files explorer shows no-match feedback while filtering', async ({ page }) => {
await page.locator('.wt-label').filter({ hasText: 'Project' }).click();
await openFilesTool(page);
await expect(page.locator('.files-breadcrumb')).toContainText('Project', { timeout: 10000 });
await page.locator('[data-files-filter]').fill('zzzz-no-matches');
const emptyState = page.locator('.files-empty');
await expect(emptyState).toBeVisible();
await expect(emptyState).toContainText('No matches');
await expect(emptyState.locator('[data-files-empty-action="clear-filter"]')).toBeVisible();
await expect(page.locator('[data-file-name="project-only.txt"]')).toHaveCount(0);
await emptyState.locator('[data-files-empty-action="clear-filter"]').click();
await expect(page.locator('[data-files-filter]')).toHaveValue('');
await expect(page.locator('.files-empty')).toHaveCount(0);
await expect(page.locator('[data-file-name="project-only.txt"]')).toBeVisible();
});
test('files explorer restores an item from trash metadata', async ({ page }) => {
await page.locator('.wt-label').filter({ hasText: 'Project' }).click();
await openFilesTool(page);

View File

@ -823,6 +823,27 @@
])
]);
}
function noMatchesState() {
return e('div', { className: 'files-empty' }, [
e('div', {}, ['No matches']),
e('div', { className: 'files-empty-actions' }, [
e('button', {
className: 'files-empty-btn',
'data-files-empty-action': 'clear-filter',
'data-files-icon': 'refresh',
title: 'Clear filter',
'aria-label': 'Clear filter',
innerHTML: actionSvg('refresh') + '<span>Clear filter</span>',
onClick: function () {
filter = '';
filterInput.value = '';
render();
list.focus();
}
}, [])
])
]);
}
var backButton = btn('Back', 'back', goBack, 'back');
var forwardButton = btn('Forward', 'forward', goForward, 'forward');
var upButton = btn('Up', 'up', function () { if (current) nav(parent(current)); }, 'up');
@ -923,7 +944,7 @@
list.appendChild(e('div', { className: 'files-header' }, [e('span', {}, ['Name']), e('span', {}, ['Type']), e('span', {}, ['Size']), e('span', {}, ['Modified']), e('span', {}, ['Actions'])]));
var shown = visible();
if (!shown.length) {
list.appendChild(filter ? e('div', { className: 'files-empty' }, ['No matches']) : emptyFolderState());
list.appendChild(filter ? noMatchesState() : emptyFolderState());
return;
}
shown.forEach(function (item) {