feat(workbench): 新增收集箱页面 — 素材列表/详情分栏布局 + 新增/选中/删除 mock 交互
This commit is contained in:
39
src/web/features/inbox/index.tsx
Normal file
39
src/web/features/inbox/index.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
import { useState } from "react";
|
||||
|
||||
import type { Material } from "./types";
|
||||
|
||||
import { AddMaterialModal } from "./components/AddMaterialModal";
|
||||
import { MaterialContent } from "./components/MaterialContent";
|
||||
import { MaterialList } from "./components/MaterialList";
|
||||
|
||||
export function InboxPage() {
|
||||
const [materials, setMaterials] = useState<Material[]>([]);
|
||||
const [modalOpen, setModalOpen] = useState(false);
|
||||
const [selectedId, setSelectedId] = useState<null | string>(null);
|
||||
|
||||
const selectedMaterial = materials.find((m) => m.id === selectedId) ?? null;
|
||||
|
||||
const handleAdd = (material: Material) => {
|
||||
setMaterials((prev) => [...prev, material].sort((a, b) => b.associatedDate.localeCompare(a.associatedDate)));
|
||||
setSelectedId(material.id);
|
||||
};
|
||||
|
||||
const handleDelete = (id: string) => {
|
||||
setMaterials((prev) => prev.filter((m) => m.id !== id));
|
||||
if (selectedId === id) setSelectedId(null);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="app-inbox-page">
|
||||
<MaterialList
|
||||
materials={materials}
|
||||
onAddClick={() => setModalOpen(true)}
|
||||
onDelete={handleDelete}
|
||||
onSelect={setSelectedId}
|
||||
selectedId={selectedId}
|
||||
/>
|
||||
<MaterialContent material={selectedMaterial} />
|
||||
<AddMaterialModal onAdd={handleAdd} onOpenChange={setModalOpen} open={modalOpen} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user