From cf3d4a2ec4d62679ed8ee347167705f9e2645b8c Mon Sep 17 00:00:00 2001 From: manivoxel51 Date: Wed, 18 Dec 2024 13:05:12 -0800 Subject: [PATCH 01/11] Fixes an issue where spliting the panel space wrongly triggers on_unload --- app/packages/operators/src/CustomPanel.tsx | 3 +++ app/packages/operators/src/useCustomPanelHooks.ts | 8 -------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/app/packages/operators/src/CustomPanel.tsx b/app/packages/operators/src/CustomPanel.tsx index 14d3548ca09..36743740274 100644 --- a/app/packages/operators/src/CustomPanel.tsx +++ b/app/packages/operators/src/CustomPanel.tsx @@ -14,12 +14,14 @@ import { useActivePanelEventsCount } from "./hooks"; import { Property } from "./types"; import { CustomPanelProps, useCustomPanelHooks } from "./useCustomPanelHooks"; import { useTrackEvent } from "@fiftyone/analytics"; +import usePanelEvent from "./usePanelEvent"; export function CustomPanel(props: CustomPanelProps) { const { panelId, dimensions, panelName, panelLabel, isModalPanel } = props; const { height, width } = dimensions?.bounds || {}; const { count } = useActivePanelEventsCount(panelId); const [_, setLoading] = usePanelLoading(panelId); + const triggerPanelEvent = usePanelEvent(); const { handlePanelStateChange, @@ -36,6 +38,7 @@ export function CustomPanel(props: CustomPanelProps) { setPanelCloseEffect(() => { clearUseKeyStores(panelId); trackEvent("close_panel", { panel: panelName }); + triggerPanelEvent(panelId, { operator: props.onUnLoad }); }); }, []); diff --git a/app/packages/operators/src/useCustomPanelHooks.ts b/app/packages/operators/src/useCustomPanelHooks.ts index 7363234138a..60c685255e3 100644 --- a/app/packages/operators/src/useCustomPanelHooks.ts +++ b/app/packages/operators/src/useCustomPanelHooks.ts @@ -165,14 +165,6 @@ export function useCustomPanelHooks(props: CustomPanelProps): CustomPanelHooks { triggerPanelEvent, ]); - useEffect(() => { - return () => { - if (props.onUnLoad) { - triggerPanelEvent(panelId, { operator: props.onUnLoad }); - } - }; - }, []); // eslint-disable-line react-hooks/exhaustive-deps - const handlePanelStateChangeOpDebounced = useMemo(() => { return debounce( (state, onChange, panelId) => { From b92e7472670d57ff147fa26e649340020ca4f512 Mon Sep 17 00:00:00 2001 From: imanjra Date: Thu, 19 Dec 2024 12:49:31 -0500 Subject: [PATCH 02/11] fix load_evaluation bug with serialized_info --- fiftyone/operators/builtins/panels/model_evaluation/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fiftyone/operators/builtins/panels/model_evaluation/__init__.py b/fiftyone/operators/builtins/panels/model_evaluation/__init__.py index c83e8972cf3..e75052ed4bc 100644 --- a/fiftyone/operators/builtins/panels/model_evaluation/__init__.py +++ b/fiftyone/operators/builtins/panels/model_evaluation/__init__.py @@ -308,13 +308,13 @@ def load_evaluation(self, ctx): if evaluation_data is None: info = ctx.dataset.get_evaluation_info(computed_eval_key) evaluation_type = info.config.type + serialized_info = info.serialize() if evaluation_type not in SUPPORTED_EVALUATION_TYPES: ctx.panel.set_data( f"evaluation_{computed_eval_key}_error", {"error": "unsupported", "info": serialized_info}, ) return - serialized_info = info.serialize() gt_field = info.config.gt_field mask_targets = ( self.get_mask_targets(ctx.dataset, gt_field) From 79349afe49ffe8495bcc797e1e1f64d000ecb4d8 Mon Sep 17 00:00:00 2001 From: imanjra Date: Tue, 10 Dec 2024 12:00:21 -0500 Subject: [PATCH 03/11] model evaluation panel permission ux tweaks --- .../NativeModelEvaluationView/Evaluate.tsx | 20 ++++++++--- .../NativeModelEvaluationView/Evaluation.tsx | 34 +++++++++++-------- .../NativeModelEvaluationView/Overview.tsx | 2 +- .../NativeModelEvaluationView/Status.tsx | 13 +++++-- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluate.tsx b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluate.tsx index c9aed0c979a..69022c3b5db 100644 --- a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluate.tsx +++ b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluate.tsx @@ -1,13 +1,25 @@ import { MuiButton } from "@fiftyone/components"; import { Add } from "@mui/icons-material"; +import { Box } from "@mui/material"; import React from "react"; export default function Evaluate(props: EvaluateProps) { - const { onEvaluate } = props; + const { onEvaluate, permissions } = props; + const canEvaluate = permissions.can_evaluate; return ( - } variant="contained"> - Evaluate Model - + + } + variant="contained" + disabled={!canEvaluate} + > + Evaluate Model + + ); } diff --git a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluation.tsx b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluation.tsx index eb5b401efce..37340cc9289 100644 --- a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluation.tsx +++ b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Evaluation.tsx @@ -611,20 +611,26 @@ export default function Evaluation(props: EvaluationProps) { Evaluation notes - {can_edit_note && ( - - { - setEditNoteState((note) => ({ ...note, open: true })); - }} - > - - - - )} + + { + setEditNoteState((note) => ({ ...note, open: true })); + }} + disabled={!can_edit_note} + > + + + diff --git a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Overview.tsx b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Overview.tsx index b0aa8f99d8c..643ec14b7d1 100644 --- a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Overview.tsx +++ b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Overview.tsx @@ -97,7 +97,7 @@ function EvaluationCard(props: EvaluationCardProps) { } /> )} - {status && } + {status && } {note && } diff --git a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Status.tsx b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Status.tsx index 346cbb3245a..bc3eb526355 100644 --- a/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Status.tsx +++ b/app/packages/core/src/plugins/SchemaIO/components/NativeModelEvaluationView/Status.tsx @@ -4,10 +4,10 @@ import React from "react"; import { useTriggerEvent } from "./utils"; export default function Status(props: StatusProps) { - const { status, canEdit, setStatusEvent } = props; + const { status, canEdit, readOnly, setStatusEvent } = props; const triggerEvent = useTriggerEvent(); - if (canEdit) { + if (!readOnly) { return (