Skip to content

Commit f343909

Browse files
committed
m
1 parent c22c437 commit f343909

6 files changed

Lines changed: 97 additions & 79 deletions

File tree

‎src/components/ScanCenter.js‎

Lines changed: 14 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import React, { useState, useEffect } from 'react';
22
import { Box, Text, useApp, useInput } from 'ink';
33
import SelectList from './SelectList.js';
4-
import { validateConnection } from '../scans/connectionHandler.js';
5-
import { listRepos } from '../scans/listRepos.js';
6-
import { getScanHistory } from '../scans/getScanHistory.js';
7-
import { fetchScanResults } from '../scans/fetchScanResults.js';
8-
import { fetchAdvancedScanResults } from '../scans/fetchAdvancedScanResults.js';
9-
import { fetchDismissedAlerts } from '../scans/fetchDismissedAlerts.js';
4+
import { validateConnectionOnMount } from '../scanCenter/validateConnectionOnMount.js';
5+
import { handleSelectConnection as _handleSelectConnection } from '../scanCenter/handleSelectConnection.js';
6+
import { handleSelectRepo as _handleSelectRepo } from '../scanCenter/handleSelectRepo.js';
7+
import { handleSelectScan as _handleSelectScan } from '../scanCenter/handleSelectScan.js';
8+
import { handleSelectResultType as _handleSelectResultType } from '../scanCenter/handleSelectResultType.js';
109

1110
const ce = React.createElement;
1211

@@ -182,88 +181,24 @@ export default function ScanCenter() {
182181

183182
// ── Step 1: validate connection on mount ──
184183
useEffect(() => {
185-
(async () => {
186-
const res = await validateConnection();
187-
if (!res.success) {
188-
setError(res.error || 'Failed to validate connection', null);
189-
return;
190-
}
191-
if (!res.connections || res.connections.length === 0) {
192-
setError('No connected organisations found. Please log in to CodeAnt first.', null);
193-
return;
194-
}
195-
setConnections(res.connections);
196-
setStep(STEPS.SELECT_CONNECTION);
197-
})();
184+
validateConnectionOnMount({ STEPS, setError, setConnections, setStep });
198185
}, []);
199186

200187
// ── Step 2: connection selected → fetch repos ──
201-
const handleSelectConnection = async (item) => {
202-
setSelectedConnection(item.value);
203-
setStep(STEPS.LOADING);
204-
setLoadingMsg(`Fetching repos for ${item.value.organizationName}…`);
205-
const res = await listRepos(item.value.organizationName);
206-
if (!res.success) {
207-
setError(res.error || 'Failed to fetch repos', STEPS.SELECT_CONNECTION);
208-
return;
209-
}
210-
setRepos(res.repos || []);
211-
setStep(STEPS.SELECT_REPO);
212-
};
188+
const handleSelectConnection = (item) =>
189+
_handleSelectConnection({ STEPS, item, setSelectedConnection, setStep, setLoadingMsg, setError, setRepos });
213190

214191
// ── Step 3: repo selected → fetch scan history ──
215-
const handleSelectRepo = async (item) => {
216-
setSelectedRepo(item.value);
217-
setStep(STEPS.LOADING);
218-
setLoadingMsg(`Loading scan history for ${item.value.full_name}…`);
219-
const res = await getScanHistory(item.value.full_name);
220-
if (!res.success) {
221-
setError(res.error || 'Failed to fetch scan history', STEPS.SELECT_REPO);
222-
return;
223-
}
224-
const history = res.scanHistory || [];
225-
process.stderr.write('SCAN_HISTORY_SAMPLE: ' + JSON.stringify(history.slice(0, 15), null, 2) + '\n');
226-
setScanHistory(history);
227-
setStep(STEPS.SELECT_SCAN);
228-
};
192+
const handleSelectRepo = (item) =>
193+
_handleSelectRepo({ STEPS, item, setSelectedRepo, setStep, setLoadingMsg, setError, setScanHistory });
229194

230195
// ── Step 4: scan selected → show result type menu ──
231-
const handleSelectScan = (item) => {
232-
setSelectedScan(item.value);
233-
setStep(STEPS.SELECT_RESULT_TYPE);
234-
};
196+
const handleSelectScan = (item) =>
197+
_handleSelectScan({ STEPS, item, setSelectedScan, setStep });
235198

236199
// ── Step 5: result type selected → fetch exactly one endpoint ──
237-
const handleSelectResultType = async (item) => {
238-
const rt = item.value;
239-
setSelectedResultType(rt);
240-
setStep(STEPS.LOADING);
241-
setLoadingMsg(`Fetching ${item.label}…`);
242-
243-
const repo = selectedRepo.full_name;
244-
const commitId = selectedScan.commitId;
245-
let res;
246-
247-
if (rt.kind === 'basic') {
248-
res = await fetchScanResults(repo, commitId, rt.value);
249-
} else if (rt.kind === 'advanced') {
250-
res = await fetchAdvancedScanResults(repo, commitId, rt.value);
251-
} else if (rt.value === 'dismissed_alerts') {
252-
const r = await fetchDismissedAlerts(repo, 'security');
253-
res = r.success ? { success: true, issues: r.dismissedAlerts } : r;
254-
} else if (rt.value === 'dismissed_secrets') {
255-
const r = await fetchDismissedAlerts(repo, 'secrets');
256-
res = r.success ? { success: true, issues: r.dismissedAlerts } : r;
257-
}
258-
259-
if (!res || !res.success) {
260-
setError((res && res.error) || 'Failed to fetch results', STEPS.SELECT_RESULT_TYPE);
261-
return;
262-
}
263-
264-
setResults(res);
265-
setStep(STEPS.SHOWING_RESULTS);
266-
};
200+
const handleSelectResultType = (item) =>
201+
_handleSelectResultType({ STEPS, item, selectedRepo, selectedScan, setSelectedResultType, setStep, setLoadingMsg, setError, setResults });
267202

268203
// ── Back navigation ──
269204
const goBack = {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { listRepos } from '../scans/listRepos.js';
2+
3+
export async function handleSelectConnection({ STEPS, item, setSelectedConnection, setStep, setLoadingMsg, setError, setRepos }) {
4+
setSelectedConnection(item.value);
5+
setStep(STEPS.LOADING);
6+
setLoadingMsg(`Fetching repos for ${item.value.organizationName}…`);
7+
const res = await listRepos(item.value.organizationName);
8+
if (!res.success) {
9+
setError(res.error || 'Failed to fetch repos', STEPS.SELECT_CONNECTION);
10+
return;
11+
}
12+
setRepos(res.repos || []);
13+
setStep(STEPS.SELECT_REPO);
14+
}

‎src/scanCenter/handleSelectRepo.js‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { getScanHistory } from '../scans/getScanHistory.js';
2+
3+
export async function handleSelectRepo({ STEPS, item, setSelectedRepo, setStep, setLoadingMsg, setError, setScanHistory }) {
4+
setSelectedRepo(item.value);
5+
setStep(STEPS.LOADING);
6+
setLoadingMsg(`Loading scan history for ${item.value.full_name}…`);
7+
const res = await getScanHistory(item.value.full_name);
8+
if (!res.success) {
9+
setError(res.error || 'Failed to fetch scan history', STEPS.SELECT_REPO);
10+
return;
11+
}
12+
const history = res.scanHistory || [];
13+
process.stderr.write('SCAN_HISTORY_SAMPLE: ' + JSON.stringify(history.slice(0, 15), null, 2) + '\n');
14+
setScanHistory(history);
15+
setStep(STEPS.SELECT_SCAN);
16+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { fetchScanResults } from '../scans/fetchScanResults.js';
2+
import { fetchAdvancedScanResults } from '../scans/fetchAdvancedScanResults.js';
3+
import { fetchDismissedAlerts } from '../scans/fetchDismissedAlerts.js';
4+
5+
export async function handleSelectResultType({ STEPS, item, selectedRepo, selectedScan, setSelectedResultType, setStep, setLoadingMsg, setError, setResults }) {
6+
const rt = item.value;
7+
setSelectedResultType(rt);
8+
setStep(STEPS.LOADING);
9+
setLoadingMsg(`Fetching ${item.label}…`);
10+
11+
const repo = selectedRepo.full_name;
12+
const commitId = selectedScan.commitId;
13+
let res;
14+
15+
if (rt.kind === 'basic') {
16+
res = await fetchScanResults(repo, commitId, rt.value);
17+
} else if (rt.kind === 'advanced') {
18+
res = await fetchAdvancedScanResults(repo, commitId, rt.value);
19+
} else if (rt.value === 'dismissed_alerts') {
20+
const r = await fetchDismissedAlerts(repo, 'security');
21+
res = r.success ? { success: true, issues: r.dismissedAlerts } : r;
22+
} else if (rt.value === 'dismissed_secrets') {
23+
const r = await fetchDismissedAlerts(repo, 'secrets');
24+
res = r.success ? { success: true, issues: r.dismissedAlerts } : r;
25+
}
26+
27+
if (!res || !res.success) {
28+
setError((res && res.error) || 'Failed to fetch results', STEPS.SELECT_RESULT_TYPE);
29+
return;
30+
}
31+
32+
setResults(res);
33+
setStep(STEPS.SHOWING_RESULTS);
34+
}

‎src/scanCenter/handleSelectScan.js‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export function handleSelectScan({ STEPS, item, setSelectedScan, setStep }) {
2+
setSelectedScan(item.value);
3+
setStep(STEPS.SELECT_RESULT_TYPE);
4+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { validateConnection } from '../scans/connectionHandler.js';
2+
3+
export async function validateConnectionOnMount({ STEPS, setError, setConnections, setStep }) {
4+
const res = await validateConnection();
5+
if (!res.success) {
6+
setError(res.error || 'Failed to validate connection', null);
7+
return;
8+
}
9+
if (!res.connections || res.connections.length === 0) {
10+
setError('No connected organisations found. Please log in to CodeAnt first.', null);
11+
return;
12+
}
13+
setConnections(res.connections);
14+
setStep(STEPS.SELECT_CONNECTION);
15+
}

0 commit comments

Comments
 (0)