移除资源画布上的分类筛选条
- 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:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user