mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
103 lines
3.4 KiB
JavaScript
103 lines
3.4 KiB
JavaScript
import { useEffect } from "react";
|
|
|
|
export function useCadWorkspaceSelection({
|
|
isAssemblyView,
|
|
supportsPartSelection,
|
|
assemblyPartsLoaded,
|
|
selectedEntryHasReferences,
|
|
setSelectedReferenceIds,
|
|
selectedReferenceIdsRef,
|
|
setHoveredListReferenceId,
|
|
setHoveredModelReferenceId,
|
|
assemblyParts,
|
|
validAssemblyPartIds,
|
|
validHiddenPartIds,
|
|
selectedPartIdsRef,
|
|
setSelectedPartIds,
|
|
parseAssemblyPartReferenceSelectionId,
|
|
setExpandedAssemblyPartIds,
|
|
setHiddenPartIds,
|
|
setHoveredListPartId,
|
|
setHoveredModelPartId
|
|
}) {
|
|
useEffect(() => {
|
|
if (isAssemblyView || selectedEntryHasReferences) {
|
|
return;
|
|
}
|
|
selectedReferenceIdsRef.current = [];
|
|
setSelectedReferenceIds([]);
|
|
setHoveredListReferenceId("");
|
|
setHoveredModelReferenceId("");
|
|
}, [
|
|
isAssemblyView,
|
|
selectedEntryHasReferences,
|
|
selectedReferenceIdsRef,
|
|
setHoveredListReferenceId,
|
|
setHoveredModelReferenceId,
|
|
setSelectedReferenceIds
|
|
]);
|
|
|
|
useEffect(() => {
|
|
if (!assemblyPartsLoaded) {
|
|
return;
|
|
}
|
|
if (!supportsPartSelection) {
|
|
selectedPartIdsRef.current = [];
|
|
setSelectedPartIds([]);
|
|
setExpandedAssemblyPartIds([]);
|
|
setHiddenPartIds([]);
|
|
setHoveredListPartId("");
|
|
setHoveredModelPartId("");
|
|
return;
|
|
}
|
|
const validIds = new Set(
|
|
(Array.isArray(validAssemblyPartIds) ? validAssemblyPartIds : assemblyParts.map((part) => part.id))
|
|
.map((id) => String(id || "").trim())
|
|
.filter(Boolean)
|
|
);
|
|
const validHiddenIds = new Set(
|
|
(Array.isArray(validHiddenPartIds) ? validHiddenPartIds : [...validIds])
|
|
.map((id) => String(id || "").trim())
|
|
.filter(Boolean)
|
|
);
|
|
selectedPartIdsRef.current = selectedPartIdsRef.current.filter((id) => validIds.has(id));
|
|
setSelectedPartIds((current) => current.filter((id) => validIds.has(id)));
|
|
selectedReferenceIdsRef.current = selectedReferenceIdsRef.current.filter((id) => {
|
|
const parsed = parseAssemblyPartReferenceSelectionId(id);
|
|
return !parsed || validIds.has(parsed.partId);
|
|
});
|
|
setSelectedReferenceIds((current) => current.filter((id) => {
|
|
const parsed = parseAssemblyPartReferenceSelectionId(id);
|
|
return !parsed || validIds.has(parsed.partId);
|
|
}));
|
|
setExpandedAssemblyPartIds((current) => current.filter((id) => validIds.has(id)));
|
|
setHiddenPartIds((current) => current.filter((id) => validHiddenIds.has(id)));
|
|
setHoveredListPartId((current) => (current && !validIds.has(current) ? "" : current));
|
|
setHoveredModelPartId((current) => (current && !validIds.has(current) ? "" : current));
|
|
setHoveredListReferenceId((current) => {
|
|
const parsed = parseAssemblyPartReferenceSelectionId(current);
|
|
return parsed && !validIds.has(parsed.partId) ? "" : current;
|
|
});
|
|
setHoveredModelReferenceId((current) => {
|
|
const parsed = parseAssemblyPartReferenceSelectionId(current);
|
|
return parsed && !validIds.has(parsed.partId) ? "" : current;
|
|
});
|
|
}, [
|
|
assemblyParts,
|
|
assemblyPartsLoaded,
|
|
supportsPartSelection,
|
|
validAssemblyPartIds,
|
|
validHiddenPartIds,
|
|
parseAssemblyPartReferenceSelectionId,
|
|
selectedReferenceIdsRef,
|
|
selectedPartIdsRef,
|
|
setExpandedAssemblyPartIds,
|
|
setHiddenPartIds,
|
|
setHoveredListPartId,
|
|
setHoveredListReferenceId,
|
|
setHoveredModelPartId,
|
|
setHoveredModelReferenceId,
|
|
setSelectedPartIds,
|
|
setSelectedReferenceIds
|
|
]);
|
|
}
|