diff --git a/ui/components/imageWorkspace/src/ImageWorkspace.svelte b/ui/components/imageWorkspace/src/ImageWorkspace.svelte index a2be55d23..c73fa7312 100644 --- a/ui/components/imageWorkspace/src/ImageWorkspace.svelte +++ b/ui/components/imageWorkspace/src/ImageWorkspace.svelte @@ -57,7 +57,11 @@ $: itemBboxes.subscribe((boxes) => (allBBoxes = boxes)); $: itemMasks.subscribe((masks) => (allMasks = masks)); - $: itemObjects.set(Object.values(selectedItem.objects || {}).flat()); + $: itemObjects.set( + Object.values(selectedItem.objects || {}) + .flat() + .map((obj) => ({ ...obj, displayControl: { hidden: false } })), + ); $: itemMetas.set({ features: selectedItem.features, itemFeatures: Object.values(selectedItem.objects || {})[0]?.features, diff --git a/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabContent.svelte b/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabContent.svelte index 9289153ea..aac6265b7 100644 --- a/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabContent.svelte +++ b/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabContent.svelte @@ -17,7 +17,7 @@ import { utils } from "@pixano/core"; import ObjectTabFlatItem from "./ObjectTabFlatItem.svelte"; - import ActionsTabsSearchInput from "./ObjectTabModelContent.svelte"; + import ObjectTabModelContent from "./ObjectTabModelContent.svelte"; import { itemObjects } from "../../lib/stores/imageWorkspaceStores"; import { GROUND_TRUTH, MODEL_RUN } from "../../lib/constants"; import { sortObjectsByModel } from "../../lib/api/objectsApi"; @@ -39,19 +39,19 @@
- + {#each allItemsSortedByModel[GROUND_TRUTH] as itemObject} {/each} - +
- + {#each allItemsSortedByModel[MODEL_RUN] as model} - + {#each model.objects as itemObject} {/each} - + {/each} - +
diff --git a/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabModelContent.svelte b/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabModelContent.svelte index 4902d51c8..ad3422fcc 100644 --- a/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabModelContent.svelte +++ b/ui/components/imageWorkspace/src/components/ActionsTabs/ObjectTabModelContent.svelte @@ -23,44 +23,71 @@ export let sectionTitle: string; export let modelName: string; - let hideAllObjects: boolean | undefined; - let tooltipContent: string = hideAllObjects ? "show all" : "hide all"; + let visibilityStatus: "hidden" | "shown" | "mixed" = "shown"; + $: tooltipContent = visibilityStatus === "hidden" ? "show all" : "hide all"; let open: boolean = true; itemObjects.subscribe((items) => { - const allItemsOfCurrentModelAreHidden = items - .filter((item) => { - if (modelName === MODEL_RUN) { - return item.source_id !== GROUND_TRUTH; - } - return item.source_id === modelName; - }) - .find((item) => item.displayControl?.hidden); - hideAllObjects = !!allItemsOfCurrentModelAreHidden; + const allObjectsOfCurrentModel = items.filter((item) => { + if (modelName === MODEL_RUN) { + return item.source_id !== GROUND_TRUTH; + } + return item.source_id === modelName; + }); + const allObjectsOfCurrentModelAreHidden = allObjectsOfCurrentModel.every( + (item) => item.displayControl?.hidden, + ); + if (allObjectsOfCurrentModelAreHidden) { + visibilityStatus = "hidden"; + } + const allObjectsOfCurrentModelAreShown = allObjectsOfCurrentModel.every( + (item) => !item.displayControl?.hidden, + ); + if (allObjectsOfCurrentModelAreShown) { + visibilityStatus = "shown"; + } }); $: itemObjects.update((items) => { return items.map((item) => { if (item.source_id === modelName) { - return toggleObjectDisplayControl(item, "hidden", ["bbox", "mask"], !!hideAllObjects); + if (visibilityStatus === "mixed") return item; + return toggleObjectDisplayControl( + item, + "hidden", + ["bbox", "mask"], + visibilityStatus === "hidden", + ); } if (modelName === MODEL_RUN && item.source_id !== GROUND_TRUTH) { - return toggleObjectDisplayControl(item, "hidden", ["bbox", "mask"], !!hideAllObjects); + if (visibilityStatus === "mixed") return item; + return toggleObjectDisplayControl( + item, + "hidden", + ["bbox", "mask"], + visibilityStatus === "hidden", + ); } return item; }); }); const handleVisibilityIconClick = () => { - hideAllObjects = !hideAllObjects; + if (visibilityStatus === "hidden") { + visibilityStatus = "shown"; + } else if (visibilityStatus === "shown") { + visibilityStatus = "hidden"; + } else { + visibilityStatus = "hidden"; + } };
- {#if hideAllObjects} + {#if visibilityStatus === "hidden"} {:else}