mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
* ✨ feat(resource): add select all hint and improve resource explorer selection Made-with: Cursor * ♻️ refactor(resource): flatten store actions and improve type imports Made-with: Cursor * ♻️ refactor resource explorer list view * refactor: engine Signed-off-by: Innei <tukon479@gmail.com> * ✨ feat: checkpoint current workspace updates * ♻️ refine resource explorer fetch ownership * 🐛 fix: resolve resource manager ci regressions * 🐛 fix(lambda): delete page-backed knowledge items by document id * 🐛 fix(lambda): include knowledge-base files in remove-all * 🐛 fix(resource): preserve cross-page select-all exclusions * 🐛 fix(resource): retain off-screen optimistic resources * 🐛 fix(resource): hide moved root items from current query * 🐛 fix(resource): reset explorer selection on query change * 🐛 fix(resource): fix select-all batchChunking and optimistic replace visibility - batchChunking: pass through server-resolved IDs not in local resourceMap when selectAllState is 'all', letting server filter unsupported types - replaceLocalResource: keep replacement visible if the optimistic item was already in the list, avoiding slug-vs-UUID mismatch in visibility check * 🐛 fix(resource): reset selectAllState after batch operations and preserve off-screen optimistic items - Reset selectAllState to 'none' after delete, removeFromKnowledgeBase, and batchChunking to prevent stale 'all' state causing unintended re-selection of remaining items - Preserve off-screen optimistic resources in clearCurrentQueryResources so background uploads from other folders survive delete-all-by-query * 🐛 fix: satisfy import-x/first in resource action test Made-with: Cursor * 🎨 lint: sort imports in ResourceExplorer Made-with: Cursor * 🐛 fix: widen searchQuery type in useResetSelectionOnQueryChange test Made-with: Cursor --------- Signed-off-by: Innei <tukon479@gmail.com>
76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
import { act, renderHook } from '@testing-library/react';
|
|
import { beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
import { useResourceManagerStore } from '@/routes/(main)/resource/features/store';
|
|
import { initialState } from '@/routes/(main)/resource/features/store/initialState';
|
|
import { FilesTabs } from '@/types/files';
|
|
|
|
import { useResetSelectionOnQueryChange } from './useResetSelectionOnQueryChange';
|
|
|
|
describe('useResetSelectionOnQueryChange', () => {
|
|
beforeEach(() => {
|
|
useResourceManagerStore.setState(initialState);
|
|
});
|
|
|
|
it('should clear all-selection mode when the search query changes', () => {
|
|
const { rerender } = renderHook(
|
|
(props: { searchQuery: string | null }) =>
|
|
useResetSelectionOnQueryChange({
|
|
category: FilesTabs.All,
|
|
currentFolderSlug: 'folder-a',
|
|
libraryId: undefined,
|
|
searchQuery: props.searchQuery,
|
|
}),
|
|
{
|
|
initialProps: { searchQuery: null as string | null },
|
|
},
|
|
);
|
|
|
|
act(() => {
|
|
useResourceManagerStore.setState({
|
|
selectAllState: 'all',
|
|
selectedFileIds: ['file-1'],
|
|
});
|
|
});
|
|
|
|
act(() => {
|
|
rerender({ searchQuery: 'report' });
|
|
});
|
|
|
|
expect(useResourceManagerStore.getState()).toMatchObject({
|
|
selectAllState: 'none',
|
|
selectedFileIds: [],
|
|
});
|
|
});
|
|
|
|
it('should clear selection when the folder changes', () => {
|
|
const { rerender } = renderHook(
|
|
(props: { currentFolderSlug: string | null }) =>
|
|
useResetSelectionOnQueryChange({
|
|
category: FilesTabs.All,
|
|
currentFolderSlug: props.currentFolderSlug,
|
|
libraryId: undefined,
|
|
searchQuery: null,
|
|
}),
|
|
{
|
|
initialProps: { currentFolderSlug: 'folder-a' },
|
|
},
|
|
);
|
|
|
|
act(() => {
|
|
useResourceManagerStore.setState({
|
|
selectAllState: 'loaded',
|
|
selectedFileIds: ['file-1', 'file-2'],
|
|
});
|
|
});
|
|
|
|
act(() => {
|
|
rerender({ currentFolderSlug: 'folder-b' });
|
|
});
|
|
|
|
expect(useResourceManagerStore.getState()).toMatchObject({
|
|
selectAllState: 'none',
|
|
selectedFileIds: [],
|
|
});
|
|
});
|
|
});
|