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}