Skip to content

Commit 15215f4

Browse files
committed
Submodel selection Errors in Meta screen
1 parent f90465d commit 15215f4

File tree

3 files changed

+24
-23
lines changed

3 files changed

+24
-23
lines changed

src/Components/Editor/Context.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ export const EditorContext = React.createContext<{
1616
setModels: React.Dispatch<React.SetStateAction<EditorModel[]>>;
1717
selectedModel: EditorModel | null;
1818
selectModel: (model: EditorModel | null) => void;
19-
//setSelectedModel: React.Dispatch<React.SetStateAction<EditorModel | null>>;
2019
camTargetZ: number;
2120
setCamTargetZ: React.Dispatch<React.SetStateAction<number>>;
2221
minShade: number;
@@ -29,6 +28,8 @@ export const EditorContext = React.createContext<{
2928
setGlobalShift: React.Dispatch<React.SetStateAction<vec3 | null>>;
3029
loadingStatus: string;
3130
setLoadingStatus: React.Dispatch<React.SetStateAction<string>>;
31+
selectedSubmodels: number[];
32+
setSelectedSubmodels: React.Dispatch<React.SetStateAction<number[]>>;
3233
} | null>(null);
3334

3435
export function ContextComponent(props: { children: React.ReactNode }) {
@@ -38,6 +39,7 @@ export function ContextComponent(props: { children: React.ReactNode }) {
3839
const [selection, setSelection] = React.useState(new GL.SelectionManager());
3940
const [models, setModels] = React.useState<EditorModel[]>([]);
4041
const [selectedModel, setSelectedModel] = React.useState<EditorModel | null>(null);
42+
const [selectedSubmodels, setSelectedSubmodels] = React.useState<number[]>([]);
4143

4244
const [camTargetZ, setCamTargetZ] = React.useState<number>(0);
4345
const [minShade, setMinShade] = React.useState<number>(0);
@@ -55,6 +57,18 @@ export function ContextComponent(props: { children: React.ReactNode }) {
5557
});
5658
};
5759

60+
React.useEffect(() => {
61+
const onChange = () => {
62+
setSelectedSubmodels(selection.selected.map((obj) => obj.identifier));
63+
};
64+
65+
selection.onSelect = onChange;
66+
67+
return () => {
68+
selection.removeOnSelect(onChange);
69+
};
70+
}, [selection, setSelectedSubmodels]);
71+
5872
React.useEffect(() => {
5973
const onChange = () => {
6074
const copy = scene.objects.filter((obj) => obj instanceof EditorModel) as EditorModel[];
@@ -104,6 +118,8 @@ export function ContextComponent(props: { children: React.ReactNode }) {
104118
setGlobalShift,
105119
loadingStatus,
106120
setLoadingStatus,
121+
selectedSubmodels,
122+
setSelectedSubmodels,
107123
}}
108124
>
109125
{props.children}

src/Components/Editor/SidePanel/Actions/Actions.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ export function ActionMenu() {
2323
} = ctx;
2424

2525
const [importOpen, setImportOpen] = React.useState(false);
26-
const [selectedModels, setSelectedModels] = React.useState<ModelData[]>([]);
26+
const [importedModels, setImportedModels] = React.useState<ModelData[]>([]);
2727

2828
const onModelsSelected = async (event: React.ChangeEvent<HTMLInputElement>) => {
2929
setProcessing(true);
3030
const models = await load(event, setLoadingStatus);
31-
setSelectedModels(models);
31+
setImportedModels(models);
3232
setImportOpen(true);
3333
setProcessing(false);
3434
event.target.value = '';
@@ -40,7 +40,7 @@ export function ActionMenu() {
4040
setImportOpen(false);
4141
const shift = await addEditorModels(
4242
{
43-
modelData: selectedModels,
43+
modelData: importedModels,
4444
selection: selection,
4545
scene: scene,
4646
coordMode: mode,
@@ -49,7 +49,7 @@ export function ActionMenu() {
4949
setLoadingStatus
5050
);
5151
setProcessing(false);
52-
setSelectedModels([]);
52+
setImportedModels([]);
5353
setGlobalShift(shift);
5454
};
5555

src/Components/Editor/SidePanel/PanelMeta/ModelMeta.tsx

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,14 @@ import { EmptyDetailPanel, EmptyMetaPanel } from '@elements/Empty';
99
export function ModelMetaPanel() {
1010
const ctx = React.useContext(EditorContext);
1111
if (!ctx) return null;
12-
const { selectedModel, selection } = ctx;
13-
const [selected, setSelected] = React.useState<number[]>(
14-
selection.selected.map((obj) => obj.identifier)
15-
);
16-
17-
React.useEffect(() => {
18-
const onChange = () => {
19-
setSelected(selection.selected.map((obj) => obj.identifier));
20-
};
21-
22-
selection.onSelect = onChange;
23-
24-
return () => {
25-
selection.removeOnSelect(onChange);
26-
};
27-
}, [selection]);
12+
const { selectedModel, selectedSubmodels } = ctx;
2813

2914
if (selectedModel === null) return <EmptyDetailPanel />;
30-
if (selected.length === 0) return <EmptyMetaPanel />;
15+
if (selectedSubmodels.length === 0) return <EmptyMetaPanel />;
3116

3217
return (
3318
<div className="p-4 space-y-4">
34-
{selected.map((id) => (
19+
{selectedSubmodels.map((id) => (
3520
<div key={id}>
3621
<div className="text-2xl text-neutral-300">Part {id}</div>
3722
<JsonView src={selectedModel.data[id]} />

0 commit comments

Comments
 (0)