Skip to content

Commit 944a48d

Browse files
committed
Safe JSON parse for generate tasks table
1 parent 1593679 commit 944a48d

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

src/renderer/components/Experiment/Generate/GenerateTasksTable.tsx

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ import {
1212
Table,
1313
Typography,
1414
} from '@mui/joy';
15+
import { ReactElement, useState } from 'react';
1516
import {
1617
FileTextIcon,
1718
PlayIcon,
1819
PlusCircleIcon,
1920
Trash2Icon,
2021
} from 'lucide-react';
2122
import * as chatAPI from 'renderer/lib/transformerlab-api-sdk';
22-
import { useState } from 'react';
2323
import useSWR from 'swr';
2424
import { useAnalytics } from 'renderer/components/Shared/analytics/AnalyticsContext';
2525
import GenerateModal from './GenerateModal';
@@ -29,12 +29,30 @@ const fetcher = (url) => fetch(url).then((res) => res.json());
2929
function listGenerations(generationString) {
3030
let result = [];
3131
if (generationString) {
32-
result = JSON.parse(generationString);
32+
try {
33+
result =
34+
typeof generationString === 'string'
35+
? JSON.parse(generationString)
36+
: generationString;
37+
} catch (error) {
38+
// eslint-disable-next-line no-console
39+
console.error(
40+
'Error parsing generation string:',
41+
error,
42+
generationString,
43+
);
44+
result = [];
45+
}
3346
}
3447
return result;
3548
}
3649

3750
function formatTemplateConfig(scriptParameters): ReactElement {
51+
// Safety check for valid input
52+
if (!scriptParameters || typeof scriptParameters !== 'object') {
53+
return <span>No configuration available</span>;
54+
}
55+
3856
const mainTask = scriptParameters?.generation_type;
3957
let docsFileNameActual = '';
4058

@@ -192,7 +210,23 @@ export default function GenerateTasksTable({
192210
{generations.name}
193211
</td>
194212
<td style={{ overflow: 'hidden' }}>
195-
{formatTemplateConfig(JSON.parse(generations.config))}
213+
{(() => {
214+
try {
215+
const config =
216+
typeof generations.config === 'string'
217+
? JSON.parse(generations.config)
218+
: generations.config;
219+
return formatTemplateConfig(config);
220+
} catch (parseError) {
221+
// eslint-disable-next-line no-console
222+
console.error(
223+
'Error parsing config:',
224+
parseError,
225+
generations.config,
226+
);
227+
return 'Invalid configuration';
228+
}
229+
})()}
196230
</td>
197231
<td>{generations.plugin}</td>
198232
<td style={{ textAlign: 'right' }}>

0 commit comments

Comments
 (0)