修复资源分页类别缓存回归
资源分页复用完整资源签名以识别同数量类别变化 补充同长度类别变化回归测试
This commit is contained in:
@@ -112,6 +112,7 @@ import {
|
||||
zoomResourceBookViewport,
|
||||
} from './resourceBookViewport';
|
||||
import {
|
||||
createResourceCanvasPageCategorySignature,
|
||||
createResourceCanvasPageWheelState,
|
||||
queueResourceCanvasPageWheel,
|
||||
resetResourceCanvasPageWheel,
|
||||
@@ -1826,11 +1827,11 @@ export default function ProjectDevelopmentView({
|
||||
});
|
||||
}, [resourceCategoryScopeKey]);
|
||||
const resourcePageCategoryKey = useMemo(
|
||||
() => canvasResources.map((resource) => resource.category).join('|'),
|
||||
() => createResourceCanvasPageCategorySignature(canvasResources),
|
||||
[canvasResources],
|
||||
);
|
||||
const resourcePageCategories = useMemo(
|
||||
() => (resourcePageCategoryKey ? visibleCategoryOrder : []),
|
||||
() => (resourcePageCategoryKey ? [...visibleCategoryOrder] : []),
|
||||
[resourcePageCategoryKey],
|
||||
);
|
||||
const activePageCategory =
|
||||
|
||||
@@ -6,6 +6,15 @@ export type ResourceCanvasPageWheelState<TCategory> = {
|
||||
pendingTimerId: number | null;
|
||||
};
|
||||
|
||||
export function createResourceCanvasPageCategorySignature<
|
||||
TCategory extends string,
|
||||
>(resources: readonly { category: TCategory }[]) {
|
||||
return resources
|
||||
.map((resource) => resource.category)
|
||||
.sort()
|
||||
.join('|');
|
||||
}
|
||||
|
||||
export function createResourceCanvasPageWheelState<
|
||||
TCategory,
|
||||
>(): ResourceCanvasPageWheelState<TCategory> {
|
||||
|
||||
@@ -1315,7 +1315,7 @@ export function registerProjectWorkbenchFoundationTests() {
|
||||
});
|
||||
});
|
||||
|
||||
it('renders an imported image as a resource-canvas card after manifest refresh', async () => {
|
||||
it('refreshes resource pages when a same-count manifest update changes category', async () => {
|
||||
const manifest = createGameCreationAppManifest(
|
||||
'workbench-imported-image-canvas',
|
||||
'导入图片资源画布测试',
|
||||
@@ -1385,7 +1385,6 @@ export function registerProjectWorkbenchFoundationTests() {
|
||||
const refreshedManifest = {
|
||||
...manifest,
|
||||
assets: [
|
||||
...manifest.assets,
|
||||
{
|
||||
id: 'imported-image',
|
||||
kind: 'ui',
|
||||
@@ -1398,6 +1397,7 @@ export function registerProjectWorkbenchFoundationTests() {
|
||||
},
|
||||
],
|
||||
};
|
||||
expect(refreshedManifest.assets).toHaveLength(manifest.assets.length);
|
||||
rendered.rerender(
|
||||
React.createElement(ProjectDevelopmentView, {
|
||||
...viewProps,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import {
|
||||
createResourceCanvasPageCategorySignature,
|
||||
createResourceCanvasPageWheelState,
|
||||
queueResourceCanvasPageWheel,
|
||||
resetResourceCanvasPageWheel,
|
||||
@@ -8,6 +9,19 @@ import {
|
||||
} from '../src/view/project-development/resourceCanvasController';
|
||||
|
||||
describe('resource canvas page wheel controller', () => {
|
||||
it('invalidates page categories for same-count category changes without reacting to resource order', () => {
|
||||
const original = [{ category: 'document' }, { category: 'art' }];
|
||||
const reordered = [...original].reverse();
|
||||
const changed = [{ category: 'document' }, { category: 'audio' }];
|
||||
|
||||
expect(createResourceCanvasPageCategorySignature(reordered)).toBe(
|
||||
createResourceCanvasPageCategorySignature(original),
|
||||
);
|
||||
expect(createResourceCanvasPageCategorySignature(changed)).not.toBe(
|
||||
createResourceCanvasPageCategorySignature(original),
|
||||
);
|
||||
});
|
||||
|
||||
it('keeps the 20px threshold and converts wheel deltas into page steps', () => {
|
||||
const state = createResourceCanvasPageWheelState<'document'>();
|
||||
queueResourceCanvasPageWheel(state, {
|
||||
|
||||
Reference in New Issue
Block a user