移除资源画布上的分类筛选条

- index.tsx:删掉画布侧 PlatformResourceFilterBar 的用法(「全部 / UI 交互 / 角色与对象 / 场景与环境 / 音频 / 文档 / 待归类」分类 chip 与画布标签 chip);@ 素材面板与参考图弹窗继续用同一个共享组件,共享组件本身不动。
- index.tsx:随筛选条一起摘掉只为它存在的画布筛选轴——resourceCanvasCategoryFilters / showResourceCategoryFilter / resourceCanvasActiveTags / resourceTagLibrary,并把 visibleResources 里「分类不等于 all 才过滤」「标签必须命中已选标签」两个此后恒真的条件删掉,画布可见资源只由搜索框收窄。
- index.tsx:移除只被筛选条用到的导入(PlatformResourceFilterBar、RESOURCE_REFERENCE_FILTERS、type ResourceReferenceFilter、assetTagsMatchSelection、buildGameCreationAppAssetTagLibrary)与 ResourceCanvasCategoryFilterBySortMode 类型及其默认值构造函数。
- styles.css:删除只服务画布筛选条的 .game-resource-category-filter 规则。
- 不动分区栏目:栏目大纲、栏目标题栏、categoryOrder、projectResourcesByCategory 与「资源总览」入口保持原样。
This commit is contained in:
2026-09-11 00:38:02 +08:00
parent 30acd9552c
commit bb48345206
2 changed files with 9 additions and 90 deletions
@@ -6215,10 +6215,6 @@ iframe.preview-frame {
font-size: 12px;
}
.game-resource-category-filter {
margin: 8px 12px 0;
}
.game-resource-classification-dialog {
width: min(480px, 100%);
}
@@ -61,7 +61,6 @@ import {
type WheelEvent as ReactWheelEvent,
} from 'react';
import { PlatformResourceFilterBar } from '../../../../../packages/shared/src/components/PlatformResourceFilterBar';
import type {
GameCreationAppAgentGroup,
GameCreationAppAssetManifestEntry,
@@ -70,10 +69,6 @@ import type {
GameIterationVersion,
ProjectResourceCanvasLayoutMode,
} from '../../../../../packages/shared/src/contracts/gameCreationApp';
import {
assetTagsMatchSelection,
buildGameCreationAppAssetTagLibrary,
} from '../../../../../packages/shared/src/contracts/gameCreationAppAssetTagLibrary';
import type {
CanvasLayer,
QuickEditPanelState,
@@ -88,9 +83,7 @@ import {
} from '../../features/project-workspace/LocalGamePreviewFrame';
import {
dispatchResourceReferenceInsert,
RESOURCE_REFERENCE_FILTERS,
resourceReferenceCategoryLabel,
type ResourceReferenceFilter,
} from '../../features/project-workspace/resourceReferences';
import { GameRunVersionPicker } from '../../features/resource-canvas/GameRunVersionPicker';
import {
@@ -366,15 +359,6 @@ type ResourceCanvasViewportBySortMode = Record<
ResourceSortMode,
ResourceCanvasViewportByCategory
>;
/** 功能分类筛选与画布视口一样按「按依赖 / 按类型」分别保存,不新造第二套状态。 */
type ResourceCanvasCategoryFilterBySortMode = Record<
ResourceSortMode,
ResourceReferenceFilter
>;
function defaultResourceCanvasCategoryFilters(): ResourceCanvasCategoryFilterBySortMode {
return { dependency: 'all', type: 'all' };
}
function defaultResourceCanvasViewports(): ResourceCanvasViewportBySortMode {
const byCategory = (): ResourceCanvasViewportByCategory => ({
@@ -1267,17 +1251,6 @@ export default function ProjectDevelopmentView({
);
const [sortMode, setSortMode] = useState<ResourceSortMode>('dependency');
const [searchText, setSearchText] = useState('');
const [resourceCanvasCategoryFilters, setResourceCanvasCategoryFilters] =
useState<ResourceCanvasCategoryFilterBySortMode>(
defaultResourceCanvasCategoryFilters,
);
/**
* 画布标签筛选:与「按依赖 / 按类型」无关,是画布级的收窄条件;
* 与 `@` 面板、参考图弹窗的筛选状态互相独立。
*/
const [resourceCanvasActiveTags, setResourceCanvasActiveTags] = useState<
string[]
>([]);
const [resourceCanvasViewports, setResourceCanvasViewports] =
useState<ResourceCanvasViewportBySortMode>(defaultResourceCanvasViewports);
const resourceCanvasViewportTargetsRef = useRef(
@@ -1963,45 +1936,23 @@ export default function ProjectDevelopmentView({
);
}, [resources, selectedResourceId]);
const normalizedSearch = searchText.trim().toLowerCase();
const resourceCategoryFilter = resourceCanvasCategoryFilters[sortMode];
/** 标签库是从 manifest `assets[].tags` 派生的数据,manifest 一改就重算。 */
const resourceTagLibrary = useMemo(
() => buildGameCreationAppAssetTagLibrary(manifest.assets),
[manifest.assets],
);
/**
* 画布可见资源只由搜索框收窄:功能分类筛选条与画布标签筛选已按用户要求移除,
* 分区栏目本身(`categoryOrder` / 栏目大纲 / 栏目标题栏)不受影响。
*/
const visibleResources = useMemo(
() =>
canvasResources.filter((resource) => {
if (
resourceCategoryFilter !== 'all' &&
projectResourceAssetCategory(resource) !== resourceCategoryFilter
) {
return false;
}
// 标签筛选与功能分类筛选共存且可叠加:分类过了还得命中全部已选标签。
if (
!assetTagsMatchSelection(
resource.assetTags ?? [],
resourceCanvasActiveTags,
)
) {
return false;
}
return normalizedSearch
canvasResources.filter((resource) =>
normalizedSearch
? [
resource.label,
resource.path,
resource.mediaType,
resource.taskTitle ?? '',
].some((value) => value.toLowerCase().includes(normalizedSearch))
: true;
}),
[
canvasResources,
normalizedSearch,
resourceCanvasActiveTags,
resourceCategoryFilter,
],
: true,
),
[canvasResources, normalizedSearch],
);
const visibleResourceIds = useMemo(
() => new Set(visibleResources.map((resource) => resource.id)),
@@ -4329,18 +4280,6 @@ export default function ProjectDevelopmentView({
setSortMode(nextMode);
}
function showResourceCategoryFilter(nextFilter: ResourceReferenceFilter) {
if (nextFilter === resourceCategoryFilter) {
return;
}
advanceFocusGeneration();
setHiddenCommittedResourceId(null);
setResourceCanvasCategoryFilters((current) => ({
...current,
[sortMode]: nextFilter,
}));
}
const openUiDesignEditor = useCallback(
async (resource: ProjectResource) => {
const prototypeAssetId = resource.manifestAssetId;
@@ -5823,22 +5762,6 @@ export default function ProjectDevelopmentView({
}}
/>
</label>
<PlatformResourceFilterBar
ariaLabel="资源筛选"
categoryItems={RESOURCE_REFERENCE_FILTERS}
activeCategoryId={resourceCategoryFilter}
onCategoryChange={showResourceCategoryFilter}
tagItems={resourceTagLibrary}
activeTags={resourceCanvasActiveTags}
onToggleTag={(tag) => {
setResourceCanvasActiveTags((current) =>
current.includes(tag)
? current.filter((item) => item !== tag)
: [...current, tag],
);
}}
className="game-resource-category-filter"
/>
{resourceWorkbenchNotice ? (
<div className="game-resource-live-notice" role="status">
<span>{resourceWorkbenchNotice}</span>