diff --git a/apps/opik-frontend/src/components/pages-shared/experiments/CompareExperimentsFeedbackScoreCell/CompareExperimentsFeedbackScoreCell.tsx b/apps/opik-frontend/src/components/pages-shared/experiments/CompareExperimentsFeedbackScoreCell/CompareExperimentsFeedbackScoreCell.tsx index 82d91a18fe4..e483126b689 100644 --- a/apps/opik-frontend/src/components/pages-shared/experiments/CompareExperimentsFeedbackScoreCell/CompareExperimentsFeedbackScoreCell.tsx +++ b/apps/opik-frontend/src/components/pages-shared/experiments/CompareExperimentsFeedbackScoreCell/CompareExperimentsFeedbackScoreCell.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { CellContext } from "@tanstack/react-table"; +import { CellContext, TableMeta } from "@tanstack/react-table"; import { ExperimentItem, ExperimentsCompare } from "@/types/datasets"; import VerticallySplitCellWrapper, { @@ -16,6 +16,7 @@ import { FeedbackScoreCustomMeta } from "@/types/feedback-scores"; import useFeedbackScoreInlineEdit from "@/hooks/useFeedbackScoreInlineEdit"; import { cn } from "@/lib/utils"; import FeedbackScoreEditDropdown from "@/components/shared/DataTableCells/FeedbackScoreEditDropdown"; +import { ROW_HEIGHT } from "@/types/shared"; const CompareExperimentsFeedbackScoreCell: React.FC< CellContext @@ -37,12 +38,14 @@ const CompareExperimentsFeedbackScoreCell: React.FC< feedbackScore, }); - const enableUserFeedbackEditing = + const { enableUserFeedbackEditing = false, rowHeight = ROW_HEIGHT.small } = + (context.table.options.meta ?? {}) as TableMeta; + + const isEditingEnabled = experimentCompare.experiment_items.length === 1 && - (context.table.options.meta?.enableUserFeedbackEditing ?? false); + enableUserFeedbackEditing; const isUserFeedbackColumn = - enableUserFeedbackEditing && - context.column.id === "feedback_scores_User feedback"; + isEditingEnabled && context.column.id === "feedback_scores_User feedback"; const renderContent = (item: ExperimentItem | undefined) => { const feedbackScore = item?.feedback_scores?.find( @@ -79,10 +82,17 @@ const CompareExperimentsFeedbackScoreCell: React.FC< const color = feedbackKey && colorMap ? colorMap[feedbackKey] : undefined; + const shouldShowInlineReasons = + [ROW_HEIGHT.medium, ROW_HEIGHT.large].includes(rowHeight) && + reasons.length > 0; + return (
@@ -94,7 +104,19 @@ const CompareExperimentsFeedbackScoreCell: React.FC< /> {reasons.length > 0 && ( - + {shouldShowInlineReasons ? ( + + {reasons.map((r) => r.reason).join(", ")} + + ) : ( + + )} )}
diff --git a/apps/opik-frontend/src/components/pages-shared/experiments/useExperimentsTableConfig.ts b/apps/opik-frontend/src/components/pages-shared/experiments/useExperimentsTableConfig.tsx similarity index 100% rename from apps/opik-frontend/src/components/pages-shared/experiments/useExperimentsTableConfig.ts rename to apps/opik-frontend/src/components/pages-shared/experiments/useExperimentsTableConfig.tsx diff --git a/apps/opik-frontend/src/components/pages/CompareExperimentsPage/ExperimentItemsTab/ExperimentItemsTab.tsx b/apps/opik-frontend/src/components/pages/CompareExperimentsPage/ExperimentItemsTab/ExperimentItemsTab.tsx index 836fa58c0f6..199db2fcfcb 100644 --- a/apps/opik-frontend/src/components/pages/CompareExperimentsPage/ExperimentItemsTab/ExperimentItemsTab.tsx +++ b/apps/opik-frontend/src/components/pages/CompareExperimentsPage/ExperimentItemsTab/ExperimentItemsTab.tsx @@ -773,8 +773,9 @@ const ExperimentItemsTab: React.FunctionComponent = ({ }, columnsStatistic, enableUserFeedbackEditing: true, + rowHeight: height, }), - [handleRowClick, setExpandedCommentSections, columnsStatistic], + [handleRowClick, setExpandedCommentSections, columnsStatistic, height], ); if (isPending || isFeedbackScoresPending || isExperimentsOutputPending) { diff --git a/apps/opik-frontend/src/components/shared/DataTable/DataTable.tsx b/apps/opik-frontend/src/components/shared/DataTable/DataTable.tsx index 8e157beccf5..bc8972ada27 100644 --- a/apps/opik-frontend/src/components/shared/DataTable/DataTable.tsx +++ b/apps/opik-frontend/src/components/shared/DataTable/DataTable.tsx @@ -67,6 +67,9 @@ declare module "@tanstack/react-table" { onCommentsReply?: (row: TData, idx?: number) => void; aggregationMap?: Record; enableUserFeedbackEditing?: boolean; + showReasons?: boolean; + projectId?: string; + projectName?: string; } // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/apps/opik-frontend/src/components/shared/DataTableCells/FeedbackScoreCell.tsx b/apps/opik-frontend/src/components/shared/DataTableCells/FeedbackScoreCell.tsx index 5f342e2d566..f017b3da073 100644 --- a/apps/opik-frontend/src/components/shared/DataTableCells/FeedbackScoreCell.tsx +++ b/apps/opik-frontend/src/components/shared/DataTableCells/FeedbackScoreCell.tsx @@ -1,5 +1,5 @@ import React, { useMemo } from "react"; -import { CellContext } from "@tanstack/react-table"; +import { CellContext, TableMeta } from "@tanstack/react-table"; import { MessageSquareMore } from "lucide-react"; import isNumber from "lodash/isNumber"; import isFunction from "lodash/isFunction"; @@ -17,19 +17,19 @@ import { BaseTraceData } from "@/types/traces"; import useFeedbackScoreInlineEdit from "@/hooks/useFeedbackScoreInlineEdit"; import { isObjectSpan, isObjectThread } from "@/lib/traces"; import { ThreadStatus } from "@/types/thread"; +import { ROW_HEIGHT } from "@/types/shared"; const FeedbackScoreCell = (context: CellContext) => { const feedbackScore = context.getValue() as TraceFeedbackScore | undefined; const reason = feedbackScore?.reason; const row = context.row.original as BaseTraceData | Thread | Span; - // Get projectId and projectName from table meta - const projectId = ( - context.table.options.meta as { projectId?: string } | undefined - )?.projectId; - const projectName = ( - context.table.options.meta as { projectName?: string } | undefined - )?.projectName; + const { + projectId, + projectName, + rowHeight = ROW_HEIGHT.small, + enableUserFeedbackEditing = false, + } = (context.table.options.meta ?? {}) as TableMeta; const { handleValueChange } = useFeedbackScoreInlineEdit({ id: row.id, @@ -61,19 +61,24 @@ const FeedbackScoreCell = (context: CellContext) => { feedbackScore?.last_updated_at, ]); - const enableUserFeedbackEditing = - ((!isObjectThread(row) || row.status === ThreadStatus.INACTIVE) && - context.table.options.meta?.enableUserFeedbackEditing) ?? - false; + const isEditingEnabled = + (!isObjectThread(row) || row.status === ThreadStatus.INACTIVE) && + enableUserFeedbackEditing; const isUserFeedbackColumn = - enableUserFeedbackEditing && - context.column.id === "feedback_scores_User feedback"; + isEditingEnabled && context.column.id === "feedback_scores_User feedback"; + + const shouldShowInlineReasons = + [ROW_HEIGHT.medium, ROW_HEIGHT.large].includes(rowHeight) && + reasons.length > 0; return ( ) => { {reasons.length > 0 && ( -
- -
+ {shouldShowInlineReasons ? ( + + {reasons.map((r) => r.reason).join(", ")} + + ) : ( +
+ +
+ )}
)}
diff --git a/apps/opik-frontend/src/components/shared/DataTableRowHeightSelector/DataTableRowHeightSelector.tsx b/apps/opik-frontend/src/components/shared/DataTableRowHeightSelector/DataTableRowHeightSelector.tsx index 6b6a17e6aca..cbe25e4a08c 100644 --- a/apps/opik-frontend/src/components/shared/DataTableRowHeightSelector/DataTableRowHeightSelector.tsx +++ b/apps/opik-frontend/src/components/shared/DataTableRowHeightSelector/DataTableRowHeightSelector.tsx @@ -15,9 +15,9 @@ type DataTableRowHeightSelectorProps = { }; const OPTIONS: DropdownOption[] = [ - { value: ROW_HEIGHT.small, label: "Small" }, + { value: ROW_HEIGHT.small, label: "Compact" }, { value: ROW_HEIGHT.medium, label: "Medium" }, - { value: ROW_HEIGHT.large, label: "Large" }, + { value: ROW_HEIGHT.large, label: "Detailed" }, ]; const DataTableRowHeightSelector: React.FunctionComponent<