Skip to content

Commit c24d418

Browse files
committed
PM-5866 - allow user to manually create review context
1 parent 4097a5a commit c24d418

3 files changed

Lines changed: 85 additions & 6 deletions

File tree

src/apps/work/src/pages/challenges/ChallengeEditorPage/components/ReviewersField/ReviewContextTab/ReviewContextTab.module.scss

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,21 @@
5151
margin-top: 16px;
5252
}
5353

54+
.reviewContextActions {
55+
display: flex;
56+
flex-direction: column;
57+
gap: 12px;
58+
width: 100%;
59+
justify-content: center;
60+
}
61+
62+
@media (min-width: 640px) {
63+
.reviewContextActions {
64+
flex-direction: row;
65+
justify-content: center;
66+
}
67+
}
68+
5469
.regenerateToolbar {
5570
display: flex;
5671
justify-content: space-between;

src/apps/work/src/pages/challenges/ChallengeEditorPage/components/ReviewersField/ReviewContextTab/ReviewContextTab.spec.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,25 @@ describe('ReviewContextTab', () => {
148148
expect(screen.getByText('This will delete the existing review context and generate a new one.'))
149149
.toBeInTheDocument()
150150
})
151+
152+
it('renders the manual manage button when no context exists', () => {
153+
mockUseFetchChallengeReviewContext.mockReturnValue({
154+
context: undefined,
155+
error: undefined,
156+
isError: false,
157+
isLoading: false,
158+
mutate: jest.fn(),
159+
})
160+
161+
render(
162+
<ReviewContextTab
163+
challengeId='challenge-1'
164+
challengeDescription={'A'.repeat(120)}
165+
challengeStatus={undefined}
166+
/>,
167+
)
168+
169+
expect(screen.getByRole('button', { name: 'Manage Review Context' }))
170+
.toBeInTheDocument()
171+
})
151172
})

src/apps/work/src/pages/challenges/ChallengeEditorPage/components/ReviewersField/ReviewContextTab/ReviewContextTab.tsx

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@ const ReviewContextTab: FC<ReviewContextTabProps> = props => {
8383
await refetchContext()
8484
}, [props.challengeId, refetchContext])
8585

86+
const createManualReviewContext = useCallback(async (): Promise<void> => {
87+
await createChallengeReviewContext({
88+
challengeId: props.challengeId || '',
89+
context: { requirements: [] },
90+
status: 'HUMAN_APPROVED',
91+
})
92+
93+
await refetchContext()
94+
}, [props.challengeId, refetchContext])
95+
8696
const handleGenerateClick = useCallback(async (): Promise<void> => {
8797
if (!props.challengeId) {
8898
showErrorToast('Please save the challenge before generating review context.')
@@ -107,6 +117,30 @@ const ReviewContextTab: FC<ReviewContextTabProps> = props => {
107117
}
108118
}, [createGeneratedReviewContext])
109119

120+
const handleManageClick = useCallback(async (): Promise<void> => {
121+
if (!props.challengeId) {
122+
showErrorToast('Please save the challenge before managing review context.')
123+
return
124+
}
125+
126+
setIsSaving(true)
127+
setSaveError(undefined)
128+
129+
try {
130+
await createManualReviewContext()
131+
showSuccessToast('Review context created. You can now edit it manually.')
132+
} catch (error) {
133+
const message = error instanceof Error
134+
? error.message
135+
: 'Failed to create review context.'
136+
137+
setSaveError(message)
138+
showErrorToast(message)
139+
} finally {
140+
setIsSaving(false)
141+
}
142+
}, [createManualReviewContext])
143+
110144
const handleConfirmRegenerate = useCallback(async (): Promise<void> => {
111145
if (!props.challengeId) {
112146
showErrorToast('Please save the challenge before regenerating review context.')
@@ -159,12 +193,21 @@ const ReviewContextTab: FC<ReviewContextTabProps> = props => {
159193
</div>
160194
) : (
161195
<>
162-
<Button
163-
disabled={isSaving || blockGenerate}
164-
label={isSaving ? 'Generating context...' : 'Generate Challenge Review Context'}
165-
onClick={handleGenerateClick}
166-
size='lg'
167-
/>
196+
<div className={styles.reviewContextActions}>
197+
<Button
198+
disabled={isSaving || blockGenerate}
199+
label={isSaving ? 'Generating context...' : 'Generate Challenge Review Context'}
200+
onClick={handleGenerateClick}
201+
size='lg'
202+
/>
203+
<Button
204+
disabled={isSaving || blockGenerate}
205+
label='Manage Review Context'
206+
onClick={handleManageClick}
207+
secondary
208+
size='lg'
209+
/>
210+
</div>
168211
{saveError && (
169212
<div className={styles.errorText}>
170213
<p>{saveError}</p>

0 commit comments

Comments
 (0)