@parhelia/core 0.1.12939 → 0.1.12942
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-view/AgentCard.js +1 -1
- package/dist/agents-view/AgentsView.js +1 -1
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/DateAgentsGroup.js +1 -1
- package/dist/agents-view/DateAgentsGroup.js.map +1 -1
- package/dist/components/ui/context-menu.js +5 -0
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/popover.d.ts +2 -0
- package/dist/components/ui/popover.js +62 -1
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/config/notificationRoutes.js +86 -97
- package/dist/config/notificationRoutes.js.map +1 -1
- package/dist/editor/MainLayout.d.ts +10 -0
- package/dist/editor/MainLayout.js +51 -19
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/ai/Agents.js +27 -2
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +2 -10
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js +3 -3
- package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.d.ts +4 -0
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +76 -11
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +18 -5
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.d.ts +0 -2
- package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +3 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +2 -2
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +6 -6
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentTerminalView.js +3 -3
- package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +0 -2
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +10 -42
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/types.d.ts +2 -0
- package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js +3 -1
- package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentDraftInitializer.js +19 -2
- package/dist/editor/ai/terminal/useAgentDraftInitializer.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentInitialPrompt.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentInitialPrompt.js +3 -1
- package/dist/editor/ai/terminal/useAgentInitialPrompt.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentPendingInitialPrompt.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentPendingInitialPrompt.js +3 -1
- package/dist/editor/ai/terminal/useAgentPendingInitialPrompt.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentProfileSelection.d.ts +18 -0
- package/dist/editor/ai/terminal/useAgentProfileSelection.js +37 -7
- package/dist/editor/ai/terminal/useAgentProfileSelection.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentPromptComposerSurface.d.ts +2 -2
- package/dist/editor/ai/terminal/useAgentQuickActions.d.ts +2 -2
- package/dist/editor/ai/terminal/useAgentQuickActions.js +3 -61
- package/dist/editor/ai/terminal/useAgentQuickActions.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsCommands.d.ts +10 -0
- package/dist/editor/ai/terminal/useAgentSettingsCommands.js +65 -23
- package/dist/editor/ai/terminal/useAgentSettingsCommands.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsPanel.d.ts +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js +4 -3
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +6 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.d.ts +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js +29 -3
- package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.js +2 -1
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
- package/dist/editor/bridge/protocol.d.ts +4 -0
- package/dist/editor/bridge/protocol.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +7 -16
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/pageSelectorHistoryFilter.d.ts +2 -0
- package/dist/editor/menubar/pageSelectorHistoryFilter.js +15 -0
- package/dist/editor/menubar/pageSelectorHistoryFilter.js.map +1 -0
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +11 -3
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +3 -0
- package/dist/editor/page-viewer/MiniMap.js +9 -2
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +72 -76
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +12 -0
- package/dist/editor/page-viewer/bridgeFieldPatch.js +34 -0
- package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
- package/dist/editor/page-viewer/bridgeTextCompletion.d.ts +25 -0
- package/dist/editor/page-viewer/bridgeTextCompletion.js +98 -0
- package/dist/editor/page-viewer/bridgeTextCompletion.js.map +1 -0
- package/dist/editor/reviews/Comments.js +31 -2
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +3 -1
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +52 -96
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.d.ts +6 -3
- package/dist/editor/reviews/ReviewCard.js +62 -35
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.d.ts +1 -1
- package/dist/editor/reviews/ReviewDetail.js +83 -93
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewItemsPanel.d.ts +29 -0
- package/dist/editor/reviews/ReviewItemsPanel.js +176 -0
- package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -0
- package/dist/editor/reviews/ReviewersPanel.d.ts +1 -1
- package/dist/editor/reviews/ReviewersPanel.js +108 -235
- package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.d.ts +1 -1
- package/dist/editor/reviews/ReviewsList.js +116 -67
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.js +2 -16
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/feedbackSelection.d.ts +2 -1
- package/dist/editor/reviews/feedbackSelection.js +18 -1
- package/dist/editor/reviews/feedbackSelection.js.map +1 -1
- package/dist/editor/reviews/pendingFeedbackFocus.d.ts +19 -0
- package/dist/editor/reviews/pendingFeedbackFocus.js +36 -0
- package/dist/editor/reviews/pendingFeedbackFocus.js.map +1 -0
- package/dist/editor/reviews/reviewListPresentation.d.ts +19 -0
- package/dist/editor/reviews/reviewListPresentation.js +78 -0
- package/dist/editor/reviews/reviewListPresentation.js.map +1 -0
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/contentService.js +16 -0
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/ui/Splitter.d.ts +2 -0
- package/dist/editor/ui/Splitter.js +28 -0
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/splash-screen/NewPage.d.ts +7 -0
- package/dist/splash-screen/NewPage.js +11 -6
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/package.json +1 -1
- package/styles.css +6 -0
|
@@ -1,20 +1,54 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { SimpleToolbar } from "../ui/SimpleToolbar";
|
|
6
|
-
import { SimpleIconButton } from "../ui/SimpleIconButton";
|
|
7
|
-
import { Splitter } from "../ui/Splitter";
|
|
8
|
-
import { ArrowLeft, Loader2, Lock, Settings } from "lucide-react";
|
|
9
|
-
import { formatDate } from "../utils";
|
|
10
|
-
import { Badge } from "../../components/ui/badge";
|
|
11
|
-
import { useEditContext } from "../client/editContext";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "../../components/ui/accordion";
|
|
4
|
+
import { CountBadge } from "../../components/ui/badge";
|
|
12
5
|
import { Button } from "../../components/ui/button";
|
|
13
6
|
import { Input } from "../../components/ui/input";
|
|
14
|
-
import {
|
|
15
|
-
import { EditReviewSettingsDialog } from "./EditReviewSettingsDialog";
|
|
7
|
+
import { ChevronLeft, Loader2, Lock, Settings } from "lucide-react";
|
|
16
8
|
import { loadAiProfiles } from "../services/aiService";
|
|
9
|
+
import { unlockReview } from "../services/reviewsService";
|
|
10
|
+
import { formatDate } from "../utils";
|
|
11
|
+
import { useEditContext } from "../client/editContext";
|
|
17
12
|
import { WatchButton } from "../notifications/WatchButton";
|
|
13
|
+
import { EditReviewSettingsDialog } from "./EditReviewSettingsDialog";
|
|
14
|
+
import { ReviewItemsPanel } from "./ReviewItemsPanel";
|
|
15
|
+
import { ReviewersPanel } from "./ReviewersPanel";
|
|
16
|
+
function ReviewBackButton({ onBack }) {
|
|
17
|
+
return (_jsx("div", { className: "border-border-default shrink-0 border-b px-3 py-1 shadow-xs", children: _jsxs(Button, { variant: "ghost", size: "sm", onClick: onBack, className: "justify-start px-1 text-sm font-medium", "data-testid": "review-detail-back-button", children: [_jsx(ChevronLeft, { className: "h-5 w-5", strokeWidth: 1.25 }), "Back"] }) }));
|
|
18
|
+
}
|
|
19
|
+
function getReviewStatusPresentation(review, assignments, isExpired) {
|
|
20
|
+
if (review.finalDecision === "Approved") {
|
|
21
|
+
return {
|
|
22
|
+
label: "Approved",
|
|
23
|
+
className: "bg-feedback-green-light text-feedback-green",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (review.finalDecision === "Rejected") {
|
|
27
|
+
return {
|
|
28
|
+
label: "Rejected",
|
|
29
|
+
className: "bg-feedback-red-light text-feedback-red",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (isExpired) {
|
|
33
|
+
return {
|
|
34
|
+
label: "Expired",
|
|
35
|
+
className: "bg-neutral-grey-10 text-neutral-grey-50",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const hasStarted = assignments.some((assignment) => !!assignment.invitationSentDate ||
|
|
39
|
+
(assignment.decisions?.length ?? 0) > 0);
|
|
40
|
+
return {
|
|
41
|
+
label: hasStarted ? "In progress" : "Pending review",
|
|
42
|
+
className: "bg-feedback-orange-light text-feedback-orange",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function getLanguageLabel(language) {
|
|
46
|
+
if (language === "*")
|
|
47
|
+
return "All languages";
|
|
48
|
+
if (language === "mixed")
|
|
49
|
+
return "Multiple languages";
|
|
50
|
+
return language;
|
|
51
|
+
}
|
|
18
52
|
export function ReviewDetail({ reviewId, onBack, multiReview, }) {
|
|
19
53
|
const editContext = useEditContext();
|
|
20
54
|
const [selectedReviewerId, setSelectedReviewerId] = useState(null);
|
|
@@ -22,20 +56,18 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
|
|
|
22
56
|
const [unlocking, setUnlocking] = useState(false);
|
|
23
57
|
const [unlockError, setUnlockError] = useState(null);
|
|
24
58
|
const [editSettingsOpen, setEditSettingsOpen] = useState(false);
|
|
59
|
+
const [openSection, setOpenSection] = useState("reviewers");
|
|
25
60
|
const agentLaunchedRef = useRef(null);
|
|
26
61
|
useEffect(() => {
|
|
27
62
|
if (reviewId && !multiReview.reviewDetail) {
|
|
28
63
|
multiReview.setSelectedReviewId(reviewId);
|
|
29
64
|
}
|
|
30
|
-
// Reset agent launch flag when review ID changes (not when reviewDetail updates)
|
|
31
65
|
if (agentLaunchedRef.current !== reviewId) {
|
|
32
66
|
agentLaunchedRef.current = null;
|
|
33
67
|
}
|
|
34
68
|
}, [reviewId, multiReview]);
|
|
35
|
-
// Auto-launch agent when review is opened/unlocked
|
|
36
69
|
useEffect(() => {
|
|
37
70
|
const launchAgentForReview = async () => {
|
|
38
|
-
// Only launch once per review ID
|
|
39
71
|
if (agentLaunchedRef.current === reviewId || !multiReview.reviewDetail) {
|
|
40
72
|
return;
|
|
41
73
|
}
|
|
@@ -44,37 +76,23 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
|
|
|
44
76
|
review.requiresSecret ??
|
|
45
77
|
false;
|
|
46
78
|
const secretValidated = multiReview.reviewDetail.secretValidated ?? false;
|
|
47
|
-
// Only launch if review is accessible (no secret required, or secret validated, and items are loaded)
|
|
48
|
-
if (items.length === 0) {
|
|
49
|
-
return; // Items not loaded yet
|
|
50
|
-
}
|
|
51
|
-
if (requiresSecret && !secretValidated) {
|
|
52
|
-
return; // Still needs unlock
|
|
53
|
-
}
|
|
54
|
-
// Check if user is a preview user (review link context)
|
|
55
79
|
const isPreviewUser = editContext?.user?.isLimitedPreviewUser ?? false;
|
|
56
|
-
if (
|
|
57
|
-
|
|
80
|
+
if (items.length === 0 ||
|
|
81
|
+
(requiresSecret && !secretValidated) ||
|
|
82
|
+
!isPreviewUser) {
|
|
83
|
+
return;
|
|
58
84
|
}
|
|
59
85
|
try {
|
|
60
|
-
// Load available profiles (will be filtered by backend policy)
|
|
61
86
|
const profiles = await loadAiProfiles();
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
// Use first available profile
|
|
66
|
-
const firstProfile = profiles[0];
|
|
67
|
-
if (!firstProfile) {
|
|
68
|
-
return; // No profile available
|
|
69
|
-
}
|
|
70
|
-
// Open agents panel
|
|
87
|
+
const firstProfile = profiles?.[0];
|
|
88
|
+
if (!firstProfile)
|
|
89
|
+
return;
|
|
71
90
|
editContext?.setShowAgentsPanel?.(true);
|
|
72
|
-
// Create agent metadata with review context
|
|
73
91
|
const metadata = {
|
|
74
92
|
items: items.map((item) => ({
|
|
75
93
|
id: item.itemId,
|
|
76
94
|
language: item.language,
|
|
77
|
-
version: 0,
|
|
95
|
+
version: 0,
|
|
78
96
|
name: item.name,
|
|
79
97
|
})),
|
|
80
98
|
additionalData: {
|
|
@@ -83,42 +101,34 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
|
|
|
83
101
|
initialPrompt: `This agent is assisting with review: ${review.title || review.reviewId.slice(0, 8)}`,
|
|
84
102
|
},
|
|
85
103
|
};
|
|
86
|
-
// Dispatch event to create agent
|
|
87
104
|
setTimeout(() => {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
agentLaunchedRef.current = reviewId;
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
console.error("Failed to launch agent for review:", e);
|
|
96
|
-
}
|
|
105
|
+
window.dispatchEvent(new CustomEvent("editor:addNewAgent", {
|
|
106
|
+
detail: { metadata },
|
|
107
|
+
}));
|
|
108
|
+
agentLaunchedRef.current = reviewId;
|
|
97
109
|
}, 100);
|
|
98
110
|
}
|
|
99
111
|
catch (error) {
|
|
100
112
|
console.error("Failed to launch agent for review:", error);
|
|
101
113
|
}
|
|
102
114
|
};
|
|
103
|
-
launchAgentForReview();
|
|
115
|
+
void launchAgentForReview();
|
|
104
116
|
}, [reviewId, multiReview.reviewDetail, editContext]);
|
|
105
117
|
if (multiReview.loading && !multiReview.reviewDetail) {
|
|
106
|
-
return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsx(Loader2, { className: "h-
|
|
118
|
+
return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsx(Loader2, { className: "text-neutral-grey-50 h-7 w-7 animate-spin" }) }));
|
|
107
119
|
}
|
|
108
120
|
if (multiReview.error && !multiReview.reviewDetail) {
|
|
109
|
-
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(
|
|
121
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsx("div", { className: "flex flex-1 items-center justify-center p-4", children: _jsx("div", { className: "bg-feedback-red-light text-feedback-red rounded-lg p-4 text-sm", children: multiReview.error }) })] }));
|
|
110
122
|
}
|
|
111
123
|
if (!multiReview.reviewDetail) {
|
|
112
|
-
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(
|
|
124
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsx("div", { className: "text-neutral-grey-50 flex flex-1 items-center justify-center text-sm", children: "Review not found" })] }));
|
|
113
125
|
}
|
|
114
126
|
const { review, assignments, items } = multiReview.reviewDetail;
|
|
115
|
-
// Extract item IDs for predefined reviewer selector
|
|
116
127
|
const itemIds = items.map((item) => item.itemId);
|
|
117
|
-
// Check if unlock is needed (from the status response, not just review object)
|
|
118
128
|
const requiresSecret = multiReview.reviewDetail.requiresSecret ?? review.requiresSecret ?? false;
|
|
119
129
|
const secretValidated = multiReview.reviewDetail.secretValidated ?? false;
|
|
120
130
|
const isExpired = review.isExpired ?? multiReview.reviewDetail.expired ?? false;
|
|
121
|
-
const needsUnlock = requiresSecret && !secretValidated
|
|
131
|
+
const needsUnlock = requiresSecret && !secretValidated;
|
|
122
132
|
const handleUnlock = async () => {
|
|
123
133
|
if (!secret.trim()) {
|
|
124
134
|
setUnlockError("Please enter the secret");
|
|
@@ -129,10 +139,8 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
|
|
|
129
139
|
try {
|
|
130
140
|
const result = await unlockReview(reviewId, secret);
|
|
131
141
|
if (result.data?.secretValid) {
|
|
132
|
-
// Refresh the review detail to get the items
|
|
133
142
|
await multiReview.refreshReviewDetail?.();
|
|
134
143
|
setSecret("");
|
|
135
|
-
// Reset agent launch flag so agent can be launched after unlock
|
|
136
144
|
agentLaunchedRef.current = null;
|
|
137
145
|
}
|
|
138
146
|
else if (result.data?.expired) {
|
|
@@ -142,50 +150,32 @@ export function ReviewDetail({ reviewId, onBack, multiReview, }) {
|
|
|
142
150
|
setUnlockError("Invalid secret. Please try again.");
|
|
143
151
|
}
|
|
144
152
|
}
|
|
145
|
-
catch (
|
|
146
|
-
setUnlockError(
|
|
153
|
+
catch (error) {
|
|
154
|
+
setUnlockError(error instanceof Error ? error.message : "Failed to unlock review");
|
|
147
155
|
}
|
|
148
156
|
finally {
|
|
149
157
|
setUnlocking(false);
|
|
150
158
|
}
|
|
151
159
|
};
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
}, disabled: unlocking, autoComplete: "off" }), unlockError && (_jsx("div", { "data-testid": "unlock-error-message", className: "text-feedback-red text-sm", children: unlockError }))] }), _jsx(Button, { "data-testid": "unlock-review-button", onClick: handleUnlock, disabled: unlocking || !secret.trim(), className: "w-full", children: unlocking ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Unlocking..."] })) : ("Unlock Review") })] }))] }) })] }));
|
|
160
|
+
if (needsUnlock) {
|
|
161
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsx("div", { className: "flex flex-1 items-center justify-center", children: _jsxs("div", { className: "flex w-full max-w-sm flex-col items-center gap-4 p-6", children: [_jsx(Lock, { className: "text-neutral-grey-50 h-10 w-10", strokeWidth: 1 }), _jsx("h2", { "data-testid": "review-detail-title", className: "text-neutral-grey-100 text-center text-lg font-medium", children: review.title || `Review ${review.reviewId.slice(0, 8)}` }), _jsx("p", { className: "text-neutral-grey-50 text-center text-xs", children: "Enter the secret provided by the review creator to access this review." }), isExpired ? (_jsx("div", { className: "bg-feedback-red-light text-feedback-red w-full rounded-lg p-3 text-center text-xs", children: "This review has expired and is no longer accessible." })) : (_jsxs(_Fragment, { children: [_jsx(Input, { "data-testid": "unlock-secret-input", type: "password", placeholder: "Enter secret", value: secret, onChange: (event) => {
|
|
162
|
+
setSecret(event.target.value);
|
|
163
|
+
setUnlockError(null);
|
|
164
|
+
}, onKeyDown: (event) => {
|
|
165
|
+
if (event.key === "Enter")
|
|
166
|
+
void handleUnlock();
|
|
167
|
+
}, disabled: unlocking, autoComplete: "off" }), unlockError && (_jsx("div", { "data-testid": "unlock-error-message", className: "text-feedback-red text-xs", children: unlockError })), _jsxs(Button, { "data-testid": "unlock-review-button", onClick: handleUnlock, disabled: unlocking || !secret.trim(), className: "w-full", children: [unlocking && _jsx(Loader2, { className: "animate-spin" }), "Unlock review"] })] }))] }) })] }));
|
|
162
168
|
}
|
|
163
|
-
const allReviewersResponded = assignments.
|
|
164
|
-
|
|
165
|
-
return decisionsCount === items.length;
|
|
166
|
-
});
|
|
167
|
-
// Check if current user is the review creator
|
|
168
|
-
const isCreator = review.createdBy === editContext?.user?.name;
|
|
169
|
+
const allReviewersResponded = assignments.length > 0 &&
|
|
170
|
+
assignments.every((assignment) => (assignment.decisions?.length ?? 0) === items.length);
|
|
169
171
|
const isLimitedPreviewUser = editContext?.user?.isLimitedPreviewUser ?? false;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
defaultSize: 200,
|
|
178
|
-
content: (_jsx(ReviewersPanel, { assignments: assignments, onAddReviewer: (reviewers) => multiReview.addReviewersToReview(reviewId, reviewers), onRemoveReviewer: (assignmentId) => multiReview.removeReviewerFromReview(assignmentId), onSendInvitations: (assignmentIds) => multiReview.sendReviewInvitations(assignmentIds), loading: multiReview.loading, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, itemIds: itemIds, language: review.language })),
|
|
179
|
-
},
|
|
180
|
-
]),
|
|
181
|
-
{
|
|
182
|
-
name: "decisions",
|
|
183
|
-
defaultSize: "auto",
|
|
184
|
-
content: (_jsx(DecisionsMatrix, { items: items, assignments: assignments, onMakeDecision: multiReview.makeItemDecision, loading: multiReview.loading, reviewId: reviewId, language: review.language, finalDecision: review.finalDecision, onSetFinalDecision: (decision) => multiReview.setReviewFinalDecision(reviewId, decision), onAddPages: (items) => multiReview.addPages(reviewId, items), onRemovePages: (items) => multiReview.removePages(reviewId, items), allReviewersResponded: allReviewersResponded, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, currentUserEmail: editContext?.user?.email, requiredApprovals: review.requiredApprovals })),
|
|
185
|
-
},
|
|
186
|
-
];
|
|
187
|
-
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(SimpleToolbar, { children: _jsx(SimpleIconButton, { label: "Back", icon: _jsx(ArrowLeft, { className: "h-4 w-4" }), onClick: onBack }) }), _jsx("div", { className: "border-b p-4", children: _jsxs("div", { className: "flex items-start justify-between", children: [_jsxs("div", { className: "flex-1", children: [_jsx("h2", { "data-testid": "review-detail-title", className: "text-lg font-medium", children: review.title || `Review ${review.reviewId.slice(0, 8)}` }), _jsxs("div", { className: "text-neutral-grey-50 mt-2 flex items-center gap-4 text-xs", children: [_jsxs("span", { children: ["Created: ", formatDate(new Date(review.createdAt))] }), _jsxs("span", { children: ["By: ", review.createdBy] }), _jsxs("span", { className: "flex items-center gap-1", children: ["Language:", " ", review.language === "*" ? (_jsx(Badge, { variant: "outline", children: "All Languages" })) : review.language === "mixed" ? (_jsx("span", { children: "Multiple Languages" })) : (review.language)] })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(WatchButton, { targetType: "review", targetId: reviewId }), isCreator && (_jsx(SimpleIconButton, { "data-testid": "review-edit-settings-button", label: "Edit Settings", icon: _jsx(Settings, { className: "h-4 w-4" }), onClick: () => setEditSettingsOpen(true) }))] })] }) }), _jsx(Splitter, { direction: "vertical", localStorageKey: `review-detail-splitter-${reviewId}`, panels: panels }), _jsx(EditReviewSettingsDialog, { open: editSettingsOpen, onOpenChange: setEditSettingsOpen, review: review, items: items, reviewersCount: assignments.length, onUpdated: async () => {
|
|
188
|
-
// Refresh review detail after settings update
|
|
172
|
+
const isCreator = [editContext?.user?.name, editContext?.user?.fullName].some((identity) => !!identity &&
|
|
173
|
+
review.createdBy.localeCompare(identity, undefined, {
|
|
174
|
+
sensitivity: "accent",
|
|
175
|
+
}) === 0);
|
|
176
|
+
const status = getReviewStatusPresentation(review, assignments, isExpired);
|
|
177
|
+
const resolvedOpenSection = isLimitedPreviewUser && openSection === "reviewers" ? "items" : openSection;
|
|
178
|
+
return (_jsxs("div", { className: "flex h-full flex-col bg-white", children: [_jsx(ReviewBackButton, { onBack: onBack }), _jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-3 py-2.5", children: [_jsxs("div", { className: "group mb-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: `rounded-[5px] px-2 py-1 text-[11px] leading-none font-semibold ${status.className}`, children: status.label }), _jsxs("div", { className: "ml-auto flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100", children: [_jsx(WatchButton, { targetType: "review", targetId: reviewId }), isCreator && (_jsx(Button, { variant: "ghost", size: "iconXs", onClick: () => setEditSettingsOpen(true), "data-testid": "review-edit-settings-button", title: "Edit review settings", children: _jsx(Settings, {}) }))] })] }), _jsx("h2", { "data-testid": "review-detail-title", className: "text-neutral-grey-100 mt-1 truncate text-base leading-tight font-medium", children: review.title || `Review ${review.reviewId.slice(0, 8)}` }), _jsxs("div", { className: "text-neutral-grey-50 mt-1 text-xs leading-5", children: [_jsxs("div", { children: ["Created: ", formatDate(new Date(review.createdAt)), " by", " ", review.createdBy] }), _jsxs("div", { children: ["Language: ", getLanguageLabel(review.language)] })] })] }), _jsxs(Accordion, { type: "single", collapsible: true, value: resolvedOpenSection, onValueChange: setOpenSection, className: "space-y-2", children: [!isLimitedPreviewUser && (_jsxs(AccordionItem, { value: "reviewers", className: "border-border-default data-[state=closed]:bg-neutral-grey-5 overflow-hidden rounded-xl border", children: [_jsx(AccordionTrigger, { className: "px-3 py-2.5 text-xs font-medium hover:no-underline", children: _jsxs("span", { className: "flex items-center gap-2", children: ["Reviewers", resolvedOpenSection === "reviewers" && (_jsx(CountBadge, { children: assignments.length }))] }) }), _jsx(AccordionContent, { children: _jsx("div", { className: "px-3 pb-3", children: _jsx(ReviewersPanel, { assignments: assignments, onAddReviewer: (reviewers) => multiReview.addReviewersToReview(reviewId, reviewers), onRemoveReviewer: (assignmentId) => multiReview.removeReviewerFromReview(assignmentId), onSendInvitations: (assignmentIds) => multiReview.sendReviewInvitations(assignmentIds), loading: multiReview.loading, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, itemIds: itemIds, language: review.language }) }) })] })), _jsxs(AccordionItem, { value: "items", className: "border-border-default data-[state=closed]:bg-neutral-grey-5 overflow-hidden rounded-xl border", children: [_jsx(AccordionTrigger, { className: "px-3 py-2.5 text-xs font-medium hover:no-underline", children: _jsxs("span", { className: "flex items-center gap-2", children: ["Review Items", resolvedOpenSection === "items" && (_jsx(CountBadge, { children: items.length }))] }) }), _jsx(AccordionContent, { children: _jsx("div", { className: "px-3 pb-3", children: _jsx(ReviewItemsPanel, { review: review, items: items, assignments: assignments, onMakeDecision: multiReview.makeItemDecision, loading: multiReview.loading, onSetFinalDecision: (decision) => multiReview.setReviewFinalDecision(reviewId, decision), onAddPages: (pages) => multiReview.addPages(reviewId, pages), onRemovePages: (pages) => multiReview.removePages(reviewId, pages), allReviewersResponded: allReviewersResponded, selectedReviewerId: selectedReviewerId, onSelectReviewer: setSelectedReviewerId, currentUserEmail: editContext?.user?.email, requiredApprovals: review.requiredApprovals }) }) })] })] })] }), _jsx(EditReviewSettingsDialog, { open: editSettingsOpen, onOpenChange: setEditSettingsOpen, review: review, items: items, reviewersCount: assignments.length, onUpdated: async () => {
|
|
189
179
|
await multiReview.refreshReviewDetail?.();
|
|
190
180
|
} })] }));
|
|
191
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewDetail.js","sourceRoot":"","sources":["../../../src/editor/reviews/ReviewDetail.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReviewDetail.js","sourceRoot":"","sources":["../../../src/editor/reviews/ReviewDetail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ItemWithSubtree, ReviewAssignment, ReviewWithPages } from "../../types";
|
|
2
|
+
import type { ItemDescriptor } from "../pageModel";
|
|
3
|
+
type ReviewItem = {
|
|
4
|
+
itemId: string;
|
|
5
|
+
language: string;
|
|
6
|
+
includeSubitems: boolean;
|
|
7
|
+
name?: string;
|
|
8
|
+
path?: string;
|
|
9
|
+
decisionsCount?: number;
|
|
10
|
+
commentsCount?: number;
|
|
11
|
+
suggestionsCount?: number;
|
|
12
|
+
};
|
|
13
|
+
type ReviewItemsPanelProps = {
|
|
14
|
+
review: ReviewWithPages;
|
|
15
|
+
items: ReviewItem[];
|
|
16
|
+
assignments: ReviewAssignment[];
|
|
17
|
+
onMakeDecision: (assignmentId: string, itemId: string, itemLanguage: string, itemVersion: number | undefined, decision: "Approved" | "Rejected") => Promise<void>;
|
|
18
|
+
loading: boolean;
|
|
19
|
+
onSetFinalDecision: (decision: "Approved" | "Rejected") => Promise<void>;
|
|
20
|
+
onAddPages: (items: ItemWithSubtree[]) => Promise<void>;
|
|
21
|
+
onRemovePages: (items: ItemDescriptor[]) => Promise<void>;
|
|
22
|
+
allReviewersResponded: boolean;
|
|
23
|
+
selectedReviewerId?: string | null;
|
|
24
|
+
onSelectReviewer: (assignmentId: string | null) => void;
|
|
25
|
+
currentUserEmail?: string;
|
|
26
|
+
requiredApprovals?: number;
|
|
27
|
+
};
|
|
28
|
+
export declare function ReviewItemsPanel({ review, items, assignments, onMakeDecision, loading, onSetFinalDecision, onAddPages, onRemovePages, allReviewersResponded, selectedReviewerId, onSelectReviewer, currentUserEmail, requiredApprovals, }: ReviewItemsPanelProps): import("react").JSX.Element;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { Avatar } from "../../components/ui/avatar";
|
|
4
|
+
import { Button } from "../../components/ui/button";
|
|
5
|
+
import { Checkbox } from "../../components/ui/checkbox";
|
|
6
|
+
import { Popover, PopoverContent, PopoverTrigger, } from "../../components/ui/popover";
|
|
7
|
+
import { Select } from "../../components/ui/select";
|
|
8
|
+
import { cn } from "../../lib/utils";
|
|
9
|
+
import { Check, Lightbulb, Loader2, MessageSquare, Plus, Trash2, X, } from "lucide-react";
|
|
10
|
+
import { useEditContext } from "../client/editContext";
|
|
11
|
+
import { ItemTreeSelector } from "./ItemTreeSelector";
|
|
12
|
+
const reviewerAvatarClasses = [
|
|
13
|
+
"bg-feedback-blue text-white",
|
|
14
|
+
"bg-feedback-orange text-white",
|
|
15
|
+
"bg-highlight-100 text-white",
|
|
16
|
+
"bg-feedback-green text-white",
|
|
17
|
+
"bg-feedback-red text-white",
|
|
18
|
+
];
|
|
19
|
+
function getReviewerAvatarClassName(index) {
|
|
20
|
+
return reviewerAvatarClasses[index];
|
|
21
|
+
}
|
|
22
|
+
export function ReviewItemsPanel({ review, items, assignments, onMakeDecision, loading, onSetFinalDecision, onAddPages, onRemovePages, allReviewersResponded, selectedReviewerId, onSelectReviewer, currentUserEmail, requiredApprovals = 1, }) {
|
|
23
|
+
const editContext = useEditContext();
|
|
24
|
+
const isLimitedPreviewUser = editContext?.user?.isLimitedPreviewUser ?? false;
|
|
25
|
+
const [filter, setFilter] = useState("all");
|
|
26
|
+
const [isAddPopoverOpen, setIsAddPopoverOpen] = useState(false);
|
|
27
|
+
const [selectedItems, setSelectedItems] = useState([]);
|
|
28
|
+
const [selectedForRemoval, setSelectedForRemoval] = useState(new Set());
|
|
29
|
+
const approvalThreshold = Math.max(requiredApprovals, 1);
|
|
30
|
+
const displayAssignments = useMemo(() => {
|
|
31
|
+
let filtered = assignments;
|
|
32
|
+
if (isLimitedPreviewUser && currentUserEmail) {
|
|
33
|
+
filtered = filtered.filter((assignment) => assignment.reviewerEmail.toLowerCase() ===
|
|
34
|
+
currentUserEmail.toLowerCase());
|
|
35
|
+
}
|
|
36
|
+
if (selectedReviewerId) {
|
|
37
|
+
filtered = filtered.filter((assignment) => assignment.assignmentId === selectedReviewerId);
|
|
38
|
+
}
|
|
39
|
+
return filtered;
|
|
40
|
+
}, [assignments, currentUserEmail, isLimitedPreviewUser, selectedReviewerId]);
|
|
41
|
+
const userAssignment = assignments.find((assignment) => currentUserEmail &&
|
|
42
|
+
assignment.reviewerEmail.toLowerCase() === currentUserEmail.toLowerCase());
|
|
43
|
+
const getDecision = (assignment, item) => assignment.decisions?.find((decision) => decision.itemId === item.itemId &&
|
|
44
|
+
decision.itemLanguage === item.language);
|
|
45
|
+
const getApprovalCount = (item) => assignments.filter((assignment) => getDecision(assignment, item)?.decision === "Approved").length;
|
|
46
|
+
const getItemStatus = (item) => {
|
|
47
|
+
const approvalCount = getApprovalCount(item);
|
|
48
|
+
const rejectionCount = assignments.filter((assignment) => getDecision(assignment, item)?.decision === "Rejected").length;
|
|
49
|
+
const pendingCount = assignments.length - approvalCount - rejectionCount;
|
|
50
|
+
if (approvalCount >= approvalThreshold)
|
|
51
|
+
return "approved";
|
|
52
|
+
if (approvalCount + pendingCount < approvalThreshold)
|
|
53
|
+
return "rejected";
|
|
54
|
+
return "pending";
|
|
55
|
+
};
|
|
56
|
+
const filteredItems = items.filter((item) => filter === "all" || getItemStatus(item) === filter);
|
|
57
|
+
const handleAddSelectedPages = async () => {
|
|
58
|
+
if (selectedItems.length === 0)
|
|
59
|
+
return;
|
|
60
|
+
await onAddPages(selectedItems.map((descriptor) => ({
|
|
61
|
+
descriptor,
|
|
62
|
+
includeSubitems: false,
|
|
63
|
+
})));
|
|
64
|
+
setSelectedItems([]);
|
|
65
|
+
setIsAddPopoverOpen(false);
|
|
66
|
+
};
|
|
67
|
+
const handleMakeDecision = async (assignment, item, decision) => {
|
|
68
|
+
let itemVersion;
|
|
69
|
+
const currentItem = editContext?.currentItemDescriptor;
|
|
70
|
+
if (currentItem?.id === item.itemId &&
|
|
71
|
+
(currentItem.language === item.language || item.language === "*") &&
|
|
72
|
+
currentItem.version !== 0) {
|
|
73
|
+
itemVersion = currentItem.version;
|
|
74
|
+
}
|
|
75
|
+
await onMakeDecision(assignment.assignmentId, item.itemId, item.language, itemVersion, decision);
|
|
76
|
+
};
|
|
77
|
+
const handleLoadItem = (item) => {
|
|
78
|
+
editContext?.loadItem?.({
|
|
79
|
+
id: item.itemId,
|
|
80
|
+
language: item.language === "*"
|
|
81
|
+
? editContext.currentItemDescriptor?.language || "en"
|
|
82
|
+
: item.language,
|
|
83
|
+
version: 0,
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
const handleRemoveSelected = () => {
|
|
87
|
+
if (selectedForRemoval.size === 0)
|
|
88
|
+
return;
|
|
89
|
+
const pages = items
|
|
90
|
+
.filter((item) => selectedForRemoval.has(`${item.itemId}:${item.language}`))
|
|
91
|
+
.map((item) => ({
|
|
92
|
+
id: item.itemId,
|
|
93
|
+
language: item.language,
|
|
94
|
+
version: 0,
|
|
95
|
+
}));
|
|
96
|
+
const remove = async () => {
|
|
97
|
+
await onRemovePages(pages);
|
|
98
|
+
setSelectedForRemoval(new Set());
|
|
99
|
+
};
|
|
100
|
+
if (editContext?.confirm) {
|
|
101
|
+
editContext.confirm({
|
|
102
|
+
header: "Remove Review Items",
|
|
103
|
+
message: `Remove ${pages.length} item${pages.length === 1 ? "" : "s"} from this review?`,
|
|
104
|
+
acceptLabel: "Remove",
|
|
105
|
+
showCancel: true,
|
|
106
|
+
accept: remove,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
void remove();
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
return (_jsxs("div", { className: "flex flex-col gap-2.5", "data-testid": "review-items-panel", children: [!isLimitedPreviewUser && (_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Popover, { open: isAddPopoverOpen, onOpenChange: setIsAddPopoverOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "lg", className: "h-10 flex-1 rounded-lg text-xs font-medium focus-visible:ring-0", "data-testid": "add-pages-button", children: ["Add review item", _jsx(Plus, { className: "h-5 w-5", strokeWidth: 1.25 })] }) }), _jsx(PopoverContent, { className: "m-2 w-[min(600px,calc(100vw-32px))] p-0", align: "start", "data-testid": "page-selector-popover", children: _jsxs("div", { className: "flex flex-col gap-2 p-3", children: [_jsx("div", { className: "text-sm font-medium", children: "Select pages" }), _jsx(ItemTreeSelector, { selectedItems: selectedItems, onItemsChange: setSelectedItems, language: review.language, height: "350px" }), _jsxs("div", { className: "border-border-default flex justify-end gap-2 border-t pt-2", children: [_jsx(Button, { variant: "outline", size: "sm", onClick: () => {
|
|
114
|
+
setSelectedItems([]);
|
|
115
|
+
setIsAddPopoverOpen(false);
|
|
116
|
+
}, children: "Cancel" }), _jsxs(Button, { size: "sm", onClick: handleAddSelectedPages, disabled: selectedItems.length === 0 || loading, children: [_jsx(Plus, {}), "Add ", selectedItems.length || "", " item", selectedItems.length === 1 ? "" : "s"] })] })] }) })] }), selectedForRemoval.size > 0 && (_jsx(Button, { variant: "destructive", size: "icon", onClick: handleRemoveSelected, disabled: loading, title: "Remove selected review items", children: _jsx(Trash2, {}) }))] })), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsx(Select, { value: filter, onValueChange: (value) => setFilter(value), options: [
|
|
117
|
+
{ value: "all", label: "All status" },
|
|
118
|
+
{ value: "pending", label: "In progress" },
|
|
119
|
+
{ value: "approved", label: "Approved" },
|
|
120
|
+
{ value: "rejected", label: "Rejected" },
|
|
121
|
+
], className: "h-8 rounded-lg px-3", "data-testid": "review-items-status-filter" }), _jsx(Select, { value: selectedReviewerId || "all", onValueChange: (value) => onSelectReviewer(value === "all" ? null : value), options: [
|
|
122
|
+
{ value: "all", label: "All reviewers" },
|
|
123
|
+
...assignments.map((assignment) => ({
|
|
124
|
+
value: assignment.assignmentId,
|
|
125
|
+
label: assignment.reviewerName || assignment.reviewerEmail,
|
|
126
|
+
})),
|
|
127
|
+
], className: "h-8 rounded-lg px-3", disabled: isLimitedPreviewUser, "data-testid": "review-items-reviewer-filter" })] }), allReviewersResponded &&
|
|
128
|
+
!review.finalDecision &&
|
|
129
|
+
!isLimitedPreviewUser && (_jsxs("div", { className: "bg-neutral-grey-5 flex items-center justify-between gap-2 rounded-lg p-2", children: [_jsx("span", { className: "text-neutral-grey-50 text-[11px]", children: "All reviewers responded" }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsxs(Button, { variant: "ghost", size: "xs", className: "text-feedback-green hover:bg-feedback-green-light", onClick: () => onSetFinalDecision("Approved"), children: [_jsx(Check, {}), " Approve"] }), _jsxs(Button, { variant: "ghost", size: "xs", className: "text-feedback-red hover:bg-feedback-red-light", onClick: () => onSetFinalDecision("Rejected"), children: [_jsx(X, {}), " Reject"] })] })] })), filteredItems.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 py-5 text-center text-xs", children: "No review items match these filters" })) : (_jsx("div", { className: "space-y-1", children: filteredItems.map((item) => {
|
|
130
|
+
const approvalCount = getApprovalCount(item);
|
|
131
|
+
const status = getItemStatus(item);
|
|
132
|
+
const itemKey = `${item.itemId}:${item.language}`;
|
|
133
|
+
const isCurrentItem = editContext?.currentItemDescriptor?.id === item.itemId &&
|
|
134
|
+
(item.language === "*" ||
|
|
135
|
+
editContext.currentItemDescriptor.language === item.language);
|
|
136
|
+
const commentCount = item.commentsCount ?? 0;
|
|
137
|
+
const suggestionCount = item.suggestionsCount ?? 0;
|
|
138
|
+
const assignmentsWithDecisions = displayAssignments.filter((assignment) => !!getDecision(assignment, item));
|
|
139
|
+
const visibleAssignments = assignmentsWithDecisions.slice(0, 3);
|
|
140
|
+
const remainingAssignments = Math.max(assignmentsWithDecisions.length - visibleAssignments.length, 0);
|
|
141
|
+
const currentUserDecision = userAssignment
|
|
142
|
+
? getDecision(userAssignment, item)
|
|
143
|
+
: undefined;
|
|
144
|
+
return (_jsxs("div", { className: cn("group hover:bg-neutral-grey-5 flex cursor-pointer items-center gap-2 rounded-xl px-2 py-2 transition-colors", isCurrentItem && "bg-neutral-grey-5"), onClick: () => handleLoadItem(item), "data-testid": `review-item-row-${item.itemId}-${item.language}`, children: [!isLimitedPreviewUser && (_jsx(Checkbox, { checked: selectedForRemoval.has(itemKey), onCheckedChange: (checked) => {
|
|
145
|
+
setSelectedForRemoval((current) => {
|
|
146
|
+
const next = new Set(current);
|
|
147
|
+
if (checked)
|
|
148
|
+
next.add(itemKey);
|
|
149
|
+
else
|
|
150
|
+
next.delete(itemKey);
|
|
151
|
+
return next;
|
|
152
|
+
});
|
|
153
|
+
}, onClick: (event) => event.stopPropagation(), className: cn("shrink-0 transition-opacity", selectedForRemoval.has(itemKey)
|
|
154
|
+
? "opacity-100"
|
|
155
|
+
: "opacity-0 group-hover:opacity-100"), "aria-label": `Select ${item.name || item.path || "review item"}` })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "text-neutral-grey-100 truncate text-xs font-medium", children: [item.name || item.path || item.itemId, " (", item.language, ")"] }), _jsxs("div", { className: cn("mt-0.5 text-xs", status === "approved"
|
|
156
|
+
? "text-feedback-green"
|
|
157
|
+
: status === "rejected"
|
|
158
|
+
? "text-feedback-red"
|
|
159
|
+
: "text-neutral-grey-50"), children: [approvalCount, "/", approvalThreshold, " approvals", item.includeSubitems && " · includes subitems"] })] }), _jsxs("div", { className: "flex shrink-0 flex-col items-end gap-1", children: [_jsxs("div", { className: "flex items-center", children: [_jsx("div", { className: "flex -space-x-1.5", children: visibleAssignments.map((assignment) => {
|
|
160
|
+
const decision = getDecision(assignment, item);
|
|
161
|
+
const displayName = assignment.reviewerName ||
|
|
162
|
+
assignment.reviewerEmail ||
|
|
163
|
+
"Reviewer";
|
|
164
|
+
const assignmentIndex = Math.max(assignments.findIndex((candidate) => candidate.assignmentId ===
|
|
165
|
+
assignment.assignmentId), 0);
|
|
166
|
+
return (_jsxs("div", { className: "relative", title: `${displayName}: ${decision?.decision || "Pending"}`, children: [_jsx(Avatar, { name: displayName, fallbackClassName: getReviewerAvatarClassName(assignmentIndex % reviewerAvatarClasses.length), bordered: true, className: "size-7 text-[10px]" }), decision && (_jsx("span", { className: cn("absolute -right-0.5 -bottom-0.5 grid size-3.5 place-items-center rounded-full border border-white text-white", decision.decision === "Approved"
|
|
167
|
+
? "bg-feedback-green"
|
|
168
|
+
: "bg-feedback-red"), children: decision.decision === "Approved" ? (_jsx(Check, { className: "size-2.5", strokeWidth: 3 })) : (_jsx(X, { className: "size-2.5", strokeWidth: 3 })) }))] }, assignment.assignmentId));
|
|
169
|
+
}) }), remainingAssignments > 0 && (_jsxs("span", { className: "text-neutral-grey-50 ml-1 text-[10px]", children: ["+", remainingAssignments] }))] }), (commentCount > 0 || suggestionCount > 0) && (_jsxs("div", { className: "text-neutral-grey-50 flex items-center gap-2 text-[11px]", children: [commentCount > 0 && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(MessageSquare, { className: "h-3 w-3" }), commentCount, " comment", commentCount === 1 ? "" : "s"] })), suggestionCount > 0 && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Lightbulb, { className: "h-3 w-3" }), suggestionCount] }))] })), userAssignment && (_jsxs("div", { className: cn("flex items-center gap-0.5 transition-opacity", isLimitedPreviewUser
|
|
170
|
+
? "opacity-100"
|
|
171
|
+
: "opacity-0 group-hover:opacity-100 focus-visible:opacity-100"), onClick: (event) => event.stopPropagation(), children: [_jsx(Button, { variant: "ghost", size: "iconXs", className: cn("hover:bg-feedback-green-light hover:text-feedback-green", currentUserDecision?.decision === "Approved" &&
|
|
172
|
+
"bg-feedback-green-light text-feedback-green"), onClick: () => handleMakeDecision(userAssignment, item, "Approved"), disabled: loading, title: "Approve this item", children: _jsx(Check, {}) }), _jsx(Button, { variant: "ghost", size: "iconXs", className: cn("hover:bg-feedback-red-light hover:text-feedback-red", currentUserDecision?.decision === "Rejected" &&
|
|
173
|
+
"bg-feedback-red-light text-feedback-red"), onClick: () => handleMakeDecision(userAssignment, item, "Rejected"), disabled: loading, title: "Reject this item", children: _jsx(X, {}) })] }))] })] }, itemKey));
|
|
174
|
+
}) })), loading && (_jsxs("div", { className: "text-neutral-grey-50 flex items-center justify-center gap-2 py-2 text-[11px]", children: [_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }), "Updating review"] }))] }));
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=ReviewItemsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewItemsPanel.js","sourceRoot":"","sources":["../../../src/editor/reviews/ReviewItemsPanel.tsx"],"names":[],"mappings":"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"}
|